@ng-nest/ui 15.0.6 → 15.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/core/config/config.d.ts +1 -0
  2. package/core/functions/date.d.ts +1 -0
  3. package/date-picker/date-picker.property.d.ts +129 -3
  4. package/date-picker/date-range-portal.component.d.ts +9 -8
  5. package/date-picker/date-range.component.d.ts +12 -10
  6. package/date-picker/picker-date.component.d.ts +15 -6
  7. package/esm2020/core/config/config.mjs +1 -1
  8. package/esm2020/core/functions/date.mjs +20 -29
  9. package/esm2020/date-picker/date-picker.property.mjs +23 -2
  10. package/esm2020/date-picker/date-range-portal.component.mjs +36 -33
  11. package/esm2020/date-picker/date-range.component.mjs +75 -53
  12. package/esm2020/date-picker/picker-date.component.mjs +133 -17
  13. package/esm2020/input/input.component.mjs +2 -2
  14. package/esm2020/loading/loading.component.mjs +13 -6
  15. package/esm2020/loading/loading.property.mjs +1 -1
  16. package/esm2020/switch/switch.component.mjs +13 -6
  17. package/esm2020/switch/switch.module.mjs +6 -4
  18. package/esm2020/switch/switch.property.mjs +39 -4
  19. package/esm2020/table/drag.directive.mjs +13 -5
  20. package/esm2020/table/table-head.component.mjs +22 -6
  21. package/esm2020/table/table.property.mjs +23 -2
  22. package/fesm2015/ng-nest-ui-anchor.mjs +1 -0
  23. package/fesm2015/ng-nest-ui-api.mjs +1 -0
  24. package/fesm2015/ng-nest-ui-auto-complete.mjs +1 -0
  25. package/fesm2015/ng-nest-ui-avatar.mjs +1 -0
  26. package/fesm2015/ng-nest-ui-back-top.mjs +1 -0
  27. package/fesm2015/ng-nest-ui-badge.mjs +1 -0
  28. package/fesm2015/ng-nest-ui-base-form.mjs +1 -0
  29. package/fesm2015/ng-nest-ui-border.mjs +1 -0
  30. package/fesm2015/ng-nest-ui-button.mjs +1 -0
  31. package/fesm2015/ng-nest-ui-calendar.mjs +1 -0
  32. package/fesm2015/ng-nest-ui-card.mjs +1 -0
  33. package/fesm2015/ng-nest-ui-carousel.mjs +1 -0
  34. package/fesm2015/ng-nest-ui-cascade.mjs +1 -0
  35. package/fesm2015/ng-nest-ui-checkbox.mjs +1 -0
  36. package/fesm2015/ng-nest-ui-collapse.mjs +1 -0
  37. package/fesm2015/ng-nest-ui-color-picker.mjs +1 -0
  38. package/fesm2015/ng-nest-ui-color.mjs +1 -0
  39. package/fesm2015/ng-nest-ui-comment.mjs +1 -0
  40. package/fesm2015/ng-nest-ui-container.mjs +1 -0
  41. package/fesm2015/ng-nest-ui-core.mjs +20 -29
  42. package/fesm2015/ng-nest-ui-core.mjs.map +1 -1
  43. package/fesm2015/ng-nest-ui-date-picker.mjs +263 -99
  44. package/fesm2015/ng-nest-ui-date-picker.mjs.map +1 -1
  45. package/fesm2015/ng-nest-ui-dialog.mjs +1 -0
  46. package/fesm2015/ng-nest-ui-drawer.mjs +1 -0
  47. package/fesm2015/ng-nest-ui-dropdown.mjs +1 -0
  48. package/fesm2015/ng-nest-ui-find.mjs +1 -0
  49. package/fesm2015/ng-nest-ui-form.mjs +1 -0
  50. package/fesm2015/ng-nest-ui-highlight.mjs +1 -0
  51. package/fesm2015/ng-nest-ui-i18n.mjs +1 -0
  52. package/fesm2015/ng-nest-ui-icon.mjs +1 -0
  53. package/fesm2015/ng-nest-ui-image.mjs +1 -0
  54. package/fesm2015/ng-nest-ui-inner.mjs +1 -0
  55. package/fesm2015/ng-nest-ui-input-number.mjs +1 -0
  56. package/fesm2015/ng-nest-ui-input.mjs +2 -1
  57. package/fesm2015/ng-nest-ui-input.mjs.map +1 -1
  58. package/fesm2015/ng-nest-ui-link.mjs +1 -0
  59. package/fesm2015/ng-nest-ui-list.mjs +1 -0
  60. package/fesm2015/ng-nest-ui-loading.mjs +13 -5
  61. package/fesm2015/ng-nest-ui-loading.mjs.map +1 -1
  62. package/fesm2015/ng-nest-ui-menu.mjs +1 -0
  63. package/fesm2015/ng-nest-ui-message-box.mjs +1 -0
  64. package/fesm2015/ng-nest-ui-message.mjs +1 -0
  65. package/fesm2015/ng-nest-ui-notification.mjs +1 -0
  66. package/fesm2015/ng-nest-ui-pagination.mjs +1 -0
  67. package/fesm2015/ng-nest-ui-popconfirm.mjs +1 -0
  68. package/fesm2015/ng-nest-ui-popover.mjs +1 -0
  69. package/fesm2015/ng-nest-ui-progress.mjs +1 -0
  70. package/fesm2015/ng-nest-ui-radio.mjs +1 -0
  71. package/fesm2015/ng-nest-ui-rate.mjs +1 -0
  72. package/fesm2015/ng-nest-ui-result.mjs +1 -0
  73. package/fesm2015/ng-nest-ui-select.mjs +1 -0
  74. package/fesm2015/ng-nest-ui-skeleton.mjs +1 -0
  75. package/fesm2015/ng-nest-ui-slider-select.mjs +1 -0
  76. package/fesm2015/ng-nest-ui-slider.mjs +1 -0
  77. package/fesm2015/ng-nest-ui-steps.mjs +1 -0
  78. package/fesm2015/ng-nest-ui-switch.mjs +54 -11
  79. package/fesm2015/ng-nest-ui-switch.mjs.map +1 -1
  80. package/fesm2015/ng-nest-ui-table.mjs +55 -10
  81. package/fesm2015/ng-nest-ui-table.mjs.map +1 -1
  82. package/fesm2015/ng-nest-ui-tabs.mjs +1 -0
  83. package/fesm2015/ng-nest-ui-tag.mjs +1 -0
  84. package/fesm2015/ng-nest-ui-text-retract.mjs +1 -0
  85. package/fesm2015/ng-nest-ui-textarea.mjs +1 -0
  86. package/fesm2015/ng-nest-ui-time-picker.mjs +1 -0
  87. package/fesm2015/ng-nest-ui-timeline.mjs +1 -0
  88. package/fesm2015/ng-nest-ui-tooltip.mjs +1 -0
  89. package/fesm2015/ng-nest-ui-transfer.mjs +1 -0
  90. package/fesm2015/ng-nest-ui-tree-file.mjs +1 -0
  91. package/fesm2015/ng-nest-ui-tree-select.mjs +1 -0
  92. package/fesm2015/ng-nest-ui-tree.mjs +1 -0
  93. package/fesm2015/ng-nest-ui-upload.mjs +1 -0
  94. package/fesm2020/ng-nest-ui-anchor.mjs +1 -0
  95. package/fesm2020/ng-nest-ui-api.mjs +1 -0
  96. package/fesm2020/ng-nest-ui-auto-complete.mjs +1 -0
  97. package/fesm2020/ng-nest-ui-avatar.mjs +1 -0
  98. package/fesm2020/ng-nest-ui-back-top.mjs +1 -0
  99. package/fesm2020/ng-nest-ui-badge.mjs +1 -0
  100. package/fesm2020/ng-nest-ui-base-form.mjs +1 -0
  101. package/fesm2020/ng-nest-ui-border.mjs +1 -0
  102. package/fesm2020/ng-nest-ui-button.mjs +1 -0
  103. package/fesm2020/ng-nest-ui-calendar.mjs +1 -0
  104. package/fesm2020/ng-nest-ui-card.mjs +1 -0
  105. package/fesm2020/ng-nest-ui-carousel.mjs +1 -0
  106. package/fesm2020/ng-nest-ui-cascade.mjs +1 -0
  107. package/fesm2020/ng-nest-ui-checkbox.mjs +1 -0
  108. package/fesm2020/ng-nest-ui-collapse.mjs +1 -0
  109. package/fesm2020/ng-nest-ui-color-picker.mjs +1 -0
  110. package/fesm2020/ng-nest-ui-color.mjs +1 -0
  111. package/fesm2020/ng-nest-ui-comment.mjs +1 -0
  112. package/fesm2020/ng-nest-ui-container.mjs +1 -0
  113. package/fesm2020/ng-nest-ui-core.mjs +20 -29
  114. package/fesm2020/ng-nest-ui-core.mjs.map +1 -1
  115. package/fesm2020/ng-nest-ui-date-picker.mjs +262 -99
  116. package/fesm2020/ng-nest-ui-date-picker.mjs.map +1 -1
  117. package/fesm2020/ng-nest-ui-dialog.mjs +1 -0
  118. package/fesm2020/ng-nest-ui-drawer.mjs +1 -0
  119. package/fesm2020/ng-nest-ui-dropdown.mjs +1 -0
  120. package/fesm2020/ng-nest-ui-find.mjs +1 -0
  121. package/fesm2020/ng-nest-ui-form.mjs +1 -0
  122. package/fesm2020/ng-nest-ui-highlight.mjs +1 -0
  123. package/fesm2020/ng-nest-ui-i18n.mjs +1 -0
  124. package/fesm2020/ng-nest-ui-icon.mjs +1 -0
  125. package/fesm2020/ng-nest-ui-image.mjs +1 -0
  126. package/fesm2020/ng-nest-ui-inner.mjs +1 -0
  127. package/fesm2020/ng-nest-ui-input-number.mjs +1 -0
  128. package/fesm2020/ng-nest-ui-input.mjs +2 -1
  129. package/fesm2020/ng-nest-ui-input.mjs.map +1 -1
  130. package/fesm2020/ng-nest-ui-link.mjs +1 -0
  131. package/fesm2020/ng-nest-ui-list.mjs +1 -0
  132. package/fesm2020/ng-nest-ui-loading.mjs +13 -5
  133. package/fesm2020/ng-nest-ui-loading.mjs.map +1 -1
  134. package/fesm2020/ng-nest-ui-menu.mjs +1 -0
  135. package/fesm2020/ng-nest-ui-message-box.mjs +1 -0
  136. package/fesm2020/ng-nest-ui-message.mjs +1 -0
  137. package/fesm2020/ng-nest-ui-notification.mjs +1 -0
  138. package/fesm2020/ng-nest-ui-pagination.mjs +1 -0
  139. package/fesm2020/ng-nest-ui-popconfirm.mjs +1 -0
  140. package/fesm2020/ng-nest-ui-popover.mjs +1 -0
  141. package/fesm2020/ng-nest-ui-progress.mjs +1 -0
  142. package/fesm2020/ng-nest-ui-radio.mjs +1 -0
  143. package/fesm2020/ng-nest-ui-rate.mjs +1 -0
  144. package/fesm2020/ng-nest-ui-result.mjs +1 -0
  145. package/fesm2020/ng-nest-ui-select.mjs +1 -0
  146. package/fesm2020/ng-nest-ui-skeleton.mjs +1 -0
  147. package/fesm2020/ng-nest-ui-slider-select.mjs +1 -0
  148. package/fesm2020/ng-nest-ui-slider.mjs +1 -0
  149. package/fesm2020/ng-nest-ui-steps.mjs +1 -0
  150. package/fesm2020/ng-nest-ui-switch.mjs +54 -11
  151. package/fesm2020/ng-nest-ui-switch.mjs.map +1 -1
  152. package/fesm2020/ng-nest-ui-table.mjs +55 -10
  153. package/fesm2020/ng-nest-ui-table.mjs.map +1 -1
  154. package/fesm2020/ng-nest-ui-tabs.mjs +1 -0
  155. package/fesm2020/ng-nest-ui-tag.mjs +1 -0
  156. package/fesm2020/ng-nest-ui-text-retract.mjs +1 -0
  157. package/fesm2020/ng-nest-ui-textarea.mjs +1 -0
  158. package/fesm2020/ng-nest-ui-time-picker.mjs +1 -0
  159. package/fesm2020/ng-nest-ui-timeline.mjs +1 -0
  160. package/fesm2020/ng-nest-ui-tooltip.mjs +1 -0
  161. package/fesm2020/ng-nest-ui-transfer.mjs +1 -0
  162. package/fesm2020/ng-nest-ui-tree-file.mjs +1 -0
  163. package/fesm2020/ng-nest-ui-tree-select.mjs +1 -0
  164. package/fesm2020/ng-nest-ui-tree.mjs +1 -0
  165. package/fesm2020/ng-nest-ui-upload.mjs +1 -0
  166. package/loading/loading.component.d.ts +1 -0
  167. package/loading/loading.property.d.ts +1 -1
  168. package/package.json +1 -1
  169. package/switch/switch.component.d.ts +2 -1
  170. package/switch/switch.module.d.ts +3 -1
  171. package/switch/switch.property.d.ts +47 -1
  172. package/table/drag.directive.d.ts +12 -2
  173. package/table/table-head.component.d.ts +11 -1
  174. package/table/table.property.d.ts +55 -1
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { EventEmitter, Component, Input, Output, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, HostListener, ViewChild, NgModule } from '@angular/core';
3
3
  import { __decorate } from 'tslib';
4
4
  import * as i2 from '@ng-nest/ui/core';
5
- import { XWithConfig, XInputBoolean, XDataConvert, XProperty, XIsChange, XChunk, XIsEmpty, XAddDays, XConnectBaseAnimation, XIsDate, XIsNumber, XIsString, XIsNull, XClearClass, XAddMonths, XAddYears, XIsUndefined } from '@ng-nest/ui/core';
5
+ import { XWithConfig, XInputBoolean, XDataConvert, XProperty, XIsChange, XIsNull, XChunk, XIsEmpty, XAddDays, XConnectBaseAnimation, XIsDate, XIsNumber, XIsString, XClearClass, XAddMonths, XAddYears, XIsUndefined } from '@ng-nest/ui/core';
6
6
  import { XControlValueAccessor, XValueAccessor, XBaseFormModule } from '@ng-nest/ui/base-form';
7
7
  import { Subject } from 'rxjs';
8
8
  import { map, takeUntil } from 'rxjs/operators';
@@ -262,10 +262,25 @@ class XPickerDateProperty extends XProperty {
262
262
  * @en_US display date event
263
263
  */
264
264
  this.displayChange = new EventEmitter();
265
+ /**
266
+ * @zh_CN 范围日期 mouseenter 事件
267
+ * @en_US Date mouseenter event
268
+ */
269
+ this.rangeTdMouseenter = new EventEmitter();
270
+ /**
271
+ * @zh_CN 范围日期 mouseleave 事件
272
+ * @en_US Date mouseleave event
273
+ */
274
+ this.rangeTdMouseleave = new EventEmitter();
275
+ /**
276
+ * @zh_CN 范围中的日期点击事件
277
+ * @en_US Range date click event
278
+ */
279
+ this.rangeDateClick = new EventEmitter();
265
280
  }
266
281
  }
267
282
  /** @nocollapse */ XPickerDateProperty.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XPickerDateProperty, deps: null, target: i0.ɵɵFactoryTarget.Component });
268
- /** @nocollapse */ XPickerDateProperty.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XPickerDateProperty, selector: "ng-component", inputs: { type: "type", display: "display", model: "model", dateTemp: "dateTemp", showHeader: "showHeader", rangePicker: "rangePicker", lastYearBtn: "lastYearBtn", lastMonthBtn: "lastMonthBtn", nextYearBtn: "nextYearBtn", nextMonthBtn: "nextMonthBtn", rangeValue: "rangeValue", rangeType: "rangeType" }, outputs: { typeChange: "typeChange", modelChange: "modelChange", rangeChange: "rangeChange", yearChange: "yearChange", monthChange: "monthChange", displayChange: "displayChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
283
+ /** @nocollapse */ XPickerDateProperty.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XPickerDateProperty, selector: "ng-component", inputs: { type: "type", display: "display", model: "model", dateTemp: "dateTemp", showHeader: "showHeader", rangePicker: "rangePicker", lastYearBtn: "lastYearBtn", lastMonthBtn: "lastMonthBtn", nextYearBtn: "nextYearBtn", nextMonthBtn: "nextMonthBtn", rangeValue: "rangeValue", rangeType: "rangeType" }, outputs: { typeChange: "typeChange", modelChange: "modelChange", rangeChange: "rangeChange", yearChange: "yearChange", monthChange: "monthChange", displayChange: "displayChange", rangeTdMouseenter: "rangeTdMouseenter", rangeTdMouseleave: "rangeTdMouseleave", rangeDateClick: "rangeDateClick" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
269
284
  __decorate([
270
285
  XInputBoolean()
271
286
  ], XPickerDateProperty.prototype, "showHeader", void 0);
@@ -323,6 +338,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
323
338
  type: Output
324
339
  }], displayChange: [{
325
340
  type: Output
341
+ }], rangeTdMouseenter: [{
342
+ type: Output
343
+ }], rangeTdMouseleave: [{
344
+ type: Output
345
+ }], rangeDateClick: [{
346
+ type: Output
326
347
  }] } });
327
348
  /**
328
349
  * PickerMonth
@@ -481,6 +502,7 @@ class XPickerDateComponent extends XPickerDateProperty {
481
502
  ];
482
503
  this.now = new Date();
483
504
  this.dates = [];
505
+ this.weekDates = [];
484
506
  this.locale = {};
485
507
  this._unSubject = new Subject();
486
508
  }
@@ -515,6 +537,94 @@ class XPickerDateComponent extends XPickerDateProperty {
515
537
  init() {
516
538
  this.setDays(this.display);
517
539
  }
540
+ isStartDate(date) {
541
+ if (!this.rangeType || !this.rangeValue)
542
+ return;
543
+ if (!XIsNull(this.rangeValue[0])) {
544
+ return this.datePipe.transform(this.rangeValue[0], 'yyyyMMdd') === this.datePipe.transform(date, 'yyyyMMdd');
545
+ }
546
+ return;
547
+ }
548
+ isEndDate(date) {
549
+ if (!this.rangeType || !this.rangeValue)
550
+ return;
551
+ if (!XIsNull(this.rangeValue[1])) {
552
+ return this.datePipe.transform(this.rangeValue[1], 'yyyyMMdd') === this.datePipe.transform(date, 'yyyyMMdd');
553
+ }
554
+ return;
555
+ }
556
+ setDatesState(cell) {
557
+ this.clearState(...this.dates);
558
+ for (let item of this.dates) {
559
+ this.setDayState(item);
560
+ }
561
+ this.onTdMouseenter(cell, false);
562
+ }
563
+ onTdMouseenter(cell, isEmit = true) {
564
+ const [start, end] = this.rangeValue;
565
+ if (!XIsNull(start) || !XIsNull(end)) {
566
+ const time = cell.date.getTime();
567
+ for (let item of this.dates) {
568
+ const itemTime = item.date.getTime();
569
+ this.clearState(item);
570
+ if (!XIsNull(start) && XIsNull(end)) {
571
+ item.isRangeHoverStartLeft = time < start && itemTime === start;
572
+ item.isRangeHoverStartRight = time > start && itemTime === start;
573
+ item.isRangeHover =
574
+ (time < start && itemTime >= time && itemTime < start) || (time > start && itemTime > start && itemTime <= time);
575
+ item.isRangeHoverStart = itemTime === time && time < start;
576
+ item.isRangeHoverEnd = itemTime === time && time > start;
577
+ }
578
+ else if (XIsNull(start) && !XIsNull(end)) {
579
+ item.isRangeHoverEndLeft = time < end && itemTime === end;
580
+ item.isRangeHoverEndRight = time > end && itemTime === end;
581
+ item.isRangeHover = (time < end && itemTime >= time && itemTime < end) || (time > end && itemTime > end && itemTime <= time);
582
+ item.isRangeHoverStart = itemTime === time && time < end;
583
+ item.isRangeHoverEnd = itemTime === time && time > end;
584
+ }
585
+ else if (!XIsNull(start) && !XIsNull(end)) {
586
+ item.isRangeHoverStartLeft = time < start && itemTime === start;
587
+ item.isRangeHoverEndRight = time > end && itemTime === end;
588
+ item.isRangeHover =
589
+ (time < start && itemTime >= time && itemTime < start) || (time > end && itemTime > end && itemTime <= time);
590
+ item.isRangeHoverStart = itemTime === time && time < start;
591
+ item.isRangeHoverEnd = itemTime === time && time > end;
592
+ if (this.rangeType === 'start') {
593
+ item.isInRangeHover = itemTime >= time && itemTime <= end;
594
+ }
595
+ else if (this.rangeType === 'end') {
596
+ item.isInRangeHover = itemTime >= start && itemTime <= time;
597
+ }
598
+ }
599
+ }
600
+ if (isEmit) {
601
+ this.rangeTdMouseenter.emit(cell);
602
+ }
603
+ else {
604
+ this.cdr.detectChanges();
605
+ }
606
+ }
607
+ }
608
+ onTdMouseleave(cell, isEmit = true) {
609
+ const [start, end] = this.rangeValue;
610
+ if (!XIsNull(start) || !XIsNull(end)) {
611
+ this.clearState(...this.dates);
612
+ if (isEmit)
613
+ this.rangeTdMouseleave.emit(cell);
614
+ }
615
+ }
616
+ clearState(...cells) {
617
+ for (let cell of cells) {
618
+ cell.isInRangeHover = false;
619
+ cell.isRangeHover = false;
620
+ cell.isRangeHoverStart = false;
621
+ cell.isRangeHoverEnd = false;
622
+ cell.isRangeHoverStartLeft = false;
623
+ cell.isRangeHoverStartRight = false;
624
+ cell.isRangeHoverEndLeft = false;
625
+ cell.isRangeHoverEndRight = false;
626
+ }
627
+ }
518
628
  setDays(date) {
519
629
  let dates = [];
520
630
  const year = date.getFullYear();
@@ -528,33 +638,61 @@ class XPickerDateComponent extends XPickerDateProperty {
528
638
  let index = 1;
529
639
  while (day !== 1) {
530
640
  index--;
531
- let date = new Date(year, month, index);
532
- dates = [date, ...dates];
533
- day = date.getDay();
641
+ const cell = { date: new Date(year, month, index) };
642
+ dates = [this.setDayState(cell), ...dates];
643
+ day = cell.date.getDay();
534
644
  }
535
645
  index = 1;
536
646
  do {
537
- dates = [...dates, new Date(year, month, index)];
647
+ const cell = { date: new Date(year, month, index), isFirstDay: index === 1, isLastDay: index === lastDate };
648
+ dates = [...dates, this.setDayState(cell)];
538
649
  index++;
539
650
  } while (index <= lastDate);
540
651
  index = 0;
541
652
  day = lastDay;
542
653
  while (day !== 0 || dates.length !== 7 * 6) {
543
654
  index++;
544
- let date = new Date(year, month + 1, index);
545
- dates = [...dates, date];
546
- day = date.getDay();
655
+ const cell = { date: new Date(year, month + 1, index) };
656
+ dates = [...dates, this.setDayState(cell)];
657
+ day = cell.date.getDay();
547
658
  }
548
- this.dates = XChunk(dates, 7);
659
+ this.dates = dates;
660
+ this.weekDates = XChunk(dates, 7);
549
661
  if (this.dates.length > 0) {
550
- this.rangeChange.emit([dates[0], dates[dates.length - 1]]);
662
+ this.rangeChange.emit([dates[0].date, dates[dates.length - 1].date]);
551
663
  }
552
664
  this.cdr.detectChanges();
553
665
  }
554
- dateClick(date) {
555
- this.model = date;
556
- this.modelChange.emit(date);
557
- this.cdr.markForCheck();
666
+ setDayState(cell) {
667
+ var _a;
668
+ const time = (_a = cell.date) === null || _a === void 0 ? void 0 : _a.getTime();
669
+ const fdate = this.datePipe.transform(cell.date, 'yyyyMMdd');
670
+ const fdatem = this.datePipe.transform(cell.date, 'yyyyMM');
671
+ const fdisplaym = this.datePipe.transform(this.display, 'yyyyMM');
672
+ const fnow = this.datePipe.transform(this.now, 'yyyyMMdd');
673
+ cell.isLastOrNext = fdatem !== fdisplaym;
674
+ cell.isNow = fdate === fnow;
675
+ if (this.rangePicker) {
676
+ if (!this.rangeValue)
677
+ return cell;
678
+ const [start, end] = this.rangeValue;
679
+ cell.isInRange = !!start && !!end && time >= start && time <= end;
680
+ cell.isRangeStartRight = !!start && !!end && fdate === this.datePipe.transform(start, 'yyyyMMdd');
681
+ cell.isRangeEndLeft = !!start && !!end && fdate === this.datePipe.transform(end, 'yyyyMMdd');
682
+ }
683
+ return cell;
684
+ }
685
+ dateClick(cell) {
686
+ this.model = cell.date;
687
+ this.modelChange.emit(cell.date);
688
+ if (this.rangePicker) {
689
+ this.clearState(...this.dates);
690
+ for (let item of this.dates) {
691
+ this.setDayState(item);
692
+ }
693
+ this.rangeDateClick.emit(cell);
694
+ }
695
+ this.cdr.detectChanges();
558
696
  }
559
697
  getLocaleMonth(date) {
560
698
  return this.locale[this.lowerCasePipe.transform(this.datePipe.transform(date, 'LLLL'))];
@@ -597,10 +735,10 @@ class XPickerDateComponent extends XPickerDateProperty {
597
735
  }
598
736
  }
599
737
  /** @nocollapse */ XPickerDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XPickerDateComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DatePipe }, { token: i1.LowerCasePipe }, { token: i0.ChangeDetectorRef }, { token: i2.XConfigService }, { token: i3.XI18nService }], target: i0.ɵɵFactoryTarget.Component });
600
- /** @nocollapse */ XPickerDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XPickerDateComponent, selector: "x-picker-date", providers: [DatePipe, LowerCasePipe], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"x-picker-date\" [class.x-date-picker-datetemp]=\"dateTemp\">\r\n <div class=\"x-picker-date-header\" *ngIf=\"showHeader\">\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" [class.x-visibility]=\"!lastYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" [class.x-visibility]=\"!lastMonthBtn\"></x-button>\r\n <div class=\"x-picker-date-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('year')\">{{ display | date: 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('month')\">{{ getLocaleMonth(display) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\" [class.x-visibility]=\"!nextYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\" [class.x-visibility]=\"!nextMonthBtn\"></x-button>\r\n </div>\r\n <div class=\"x-picker-date-body\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let title of titles; trackBy: trackByNode\">{{ title | xI18n }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let weeks of dates\">\r\n <ng-container *ngFor=\"let week of weeks; trackBy: trackByNode\">\r\n <td\r\n [class.x-date-last-or-next]=\"(week | date: 'yyyyMM') !== (display | date: 'yyyyMM')\"\r\n [class.x-date-now]=\"(week | date: 'yyyyMMdd') === (now | date: 'yyyyMMdd')\"\r\n (click)=\"dateTemp && dateClick(week)\"\r\n >\r\n <x-button\r\n *ngIf=\"!dateTemp\"\r\n type=\"text\"\r\n size=\"mini\"\r\n title=\"{{ week | date: 'yyyy-MM-dd' }}\"\r\n [activated]=\"!rangePicker && (week | date: 'yyyyMMdd') === (model | date: 'yyyyMMdd')\"\r\n [disabled]=\"false\"\r\n (click)=\"dateClick(week)\"\r\n >{{ week | date: 'd' }}</x-button\r\n >\r\n <ng-container *ngIf=\"dateTemp\">\r\n <ng-container *ngTemplateOutlet=\"dateTemp; context: { date$: week }\"></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.x-picker-date{margin:0;padding:0}.x-picker-date-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-picker-date-year-month{flex:1;text-align:center}.x-picker-date-body{padding:.5rem}.x-picker-date-body>table{width:100%;border-collapse:collapse;border-spacing:0}.x-picker-date-body>table th{font-weight:400;height:2rem;color:var(--x-text-400)}.x-picker-date-body>table td{padding:.25rem 0;text-align:center}.x-picker-date-body>table td x-button .x-button{width:1.625rem;height:1.5rem;margin:0 auto;border:.0625rem solid transparent}.x-picker-date-body>table td x-button .x-button:hover{background-color:var(--x-primary-900)}.x-picker-date-body>table td x-button .x-button-activated{color:var(--x-background-100);background-color:var(--x-primary)}.x-picker-date-body>table td x-button .x-button-activated:hover{color:var(--x-background-100);background-color:var(--x-primary)}.x-picker-date-body>table td.x-date-last-or-next x-button .x-button{color:var(--x-text-700)}.x-picker-date-body>table td.x-date-now x-button .x-button:not(.x-button-activated){color:var(--x-primary);background-color:transparent;border-color:var(--x-primary)}.x-picker-date .x-visibility{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.XButtonComponent, selector: "x-button" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i3.XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
738
+ /** @nocollapse */ XPickerDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XPickerDateComponent, selector: "x-picker-date", providers: [DatePipe, LowerCasePipe], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"x-picker-date\" [class.x-date-picker-datetemp]=\"dateTemp\">\r\n <div class=\"x-picker-date-header\" *ngIf=\"showHeader\">\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" [class.x-visibility]=\"!lastYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" [class.x-visibility]=\"!lastMonthBtn\"></x-button>\r\n <div class=\"x-picker-date-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('year')\">{{ display | date : 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('month')\">{{ getLocaleMonth(display) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\" [class.x-visibility]=\"!nextYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\" [class.x-visibility]=\"!nextMonthBtn\"></x-button>\r\n </div>\r\n <div class=\"x-picker-date-body\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let title of titles; trackBy: trackByNode\">{{ title | xI18n }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let weeks of weekDates\">\r\n <ng-container *ngFor=\"let week of weeks; trackBy: trackByNode\">\r\n <td\r\n [class.x-date-last-or-next]=\"week.isLastOrNext\"\r\n [class.x-date-now]=\"week.isNow\"\r\n [class.x-date-first-day]=\"week.isFirstDay\"\r\n [class.x-date-last-day]=\"week.isLastDay\"\r\n [class.x-date-range-start]=\"rangePicker && isStartDate(week.date!)\"\r\n [class.x-date-range-end]=\"rangePicker && isEndDate(week.date!)\"\r\n [class.x-date-range-start-left]=\"rangePicker && week.isRangeStartLeft\"\r\n [class.x-date-range-start-right]=\"rangePicker && week.isRangeStartRight\"\r\n [class.x-date-range-end-left]=\"rangePicker && week.isRangeEndLeft\"\r\n [class.x-date-range-end-right]=\"rangePicker && week.isRangeEndRight\"\r\n [class.x-date-range-hover]=\"rangePicker && week.isRangeHover\"\r\n [class.x-date-range-hover-start-left]=\"rangePicker && week.isRangeHoverStartLeft\"\r\n [class.x-date-range-hover-start-right]=\"rangePicker && week.isRangeHoverStartRight\"\r\n [class.x-date-range-hover-end-left]=\"rangePicker && week.isRangeHoverEndLeft\"\r\n [class.x-date-range-hover-end-right]=\"rangePicker && week.isRangeHoverEndRight\"\r\n [class.x-date-range-hover-start]=\"rangePicker && week.isRangeHoverStart\"\r\n [class.x-date-range-hover-end]=\"rangePicker && week.isRangeHoverEnd\"\r\n [class.x-date-in-range]=\"rangePicker && week.isInRange\"\r\n [class.x-date-in-range-hover]=\"rangePicker && week.isInRangeHover\"\r\n [class.x-date-active]=\"!rangePicker && (week.date | date : 'yyyyMMdd') === (model | date : 'yyyyMMdd')\"\r\n title=\"{{ week.date | date : 'yyyy-MM-dd' }}\"\r\n (click)=\"dateClick(week)\"\r\n (mouseenter)=\"rangePicker && onTdMouseenter(week)\"\r\n (mouseleave)=\"rangePicker && onTdMouseleave(week)\"\r\n >\r\n <div *ngIf=\"!dateTemp\" class=\"x-date-text\">\r\n {{ week.date | date : 'd' }}\r\n </div>\r\n <ng-container *ngIf=\"dateTemp\">\r\n <ng-container *ngTemplateOutlet=\"dateTemp; context: { date$: week.date }\"></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.x-picker-date{margin:0;padding:0}.x-picker-date-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-picker-date-year-month{flex:1;text-align:center}.x-picker-date-body{padding:.5rem}.x-picker-date-body>table{width:100%;border-collapse:collapse;border-spacing:0}.x-picker-date-body>table th{font-weight:400;height:2rem;color:var(--x-text-400)}.x-picker-date-body>table td{padding:.25rem 0;text-align:center;cursor:pointer;color:var(--x-text-300);position:relative}.x-picker-date-body>table td .x-date-text{width:1.75rem;height:1.5rem;margin:0 auto;border:var(--x-border-width) var(--x-border-style) transparent;border-radius:var(--x-border-radius);transition:var(--x-animation-duration-base);position:relative}.x-picker-date-body>table td:before,.x-picker-date-body>table td:after{position:absolute;top:50%;right:0;left:0;z-index:1;height:1.5rem;border:var(--x-border-width) dashed transparent;transform:translateY(-50%);transition:var(--x-animation-duration-base);content:\"\"}.x-picker-date-body>table td:hover:not(.x-date-in-range) .x-date-text{background-color:var(--x-background-a200)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next),.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next),.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next){color:var(--x-background-100)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next) .x-date-text,.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next) .x-date-text,.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next) .x-date-text{background-color:var(--x-primary);border-color:var(--x-primary)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next):hover,.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next):hover,.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next):hover{color:var(--x-background-100)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next):hover .x-date-text,.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next):hover .x-date-text,.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next):hover .x-date-text{background-color:var(--x-primary)}.x-picker-date-body>table td.x-date-range-end-left:not(.x-date-last-or-next):not(.x-date-first-day):not(:first-child) .x-date-text{z-index:1}.x-picker-date-body>table td.x-date-range-end-left:not(.x-date-last-or-next):not(.x-date-first-day):not(:first-child):after{background-color:var(--x-primary-800);transform:translate(-.25rem,-50%);border-radius:var(--x-border-radius);z-index:0}.x-picker-date-body>table td.x-date-range-end-left:not(.x-date-last-or-next):not(.x-date-first-day):not(:first-child).x-date-in-range-hover:after{background-color:var(--x-primary-700)}.x-picker-date-body>table td.x-date-range-start-right:not(.x-date-last-or-next):not(.x-date-last-day):not(:last-child) .x-date-text{z-index:1}.x-picker-date-body>table td.x-date-range-start-right:not(.x-date-last-or-next):not(.x-date-last-day):not(:last-child):after{background-color:var(--x-primary-800);transform:translate(.25rem,-50%);border-radius:var(--x-border-radius);z-index:0}.x-picker-date-body>table td.x-date-range-start-right:not(.x-date-last-or-next):not(.x-date-last-day):not(:last-child).x-date-in-range-hover:after{background-color:var(--x-primary-700)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next) .x-date-text{position:relative;z-index:1}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next):before{background-color:var(--x-primary-800);z-index:0}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next):first-child:before{transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next):last-child:before{transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next).x-date-in-range-hover-left:before{transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next).x-date-in-range-hover-right:before{transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next).x-date-in-range-hover:before{background-color:var(--x-primary-700)}.x-picker-date-body>table td.x-date-last-or-next{color:var(--x-text-700)}.x-picker-date-body>table td.x-date-range-hover:not(.x-date-last-or-next):before{border-color:var(--x-primary);border-left-color:transparent;border-right-color:transparent;transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:first-child:not(.x-date-last-or-next):before,.x-picker-date-body>table td.x-date-range-hover.x-date-first-day:before{border-left-color:var(--x-primary);transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:first-child:not(.x-date-last-or-next).x-date-range-hover-end:before,.x-picker-date-body>table td.x-date-range-hover.x-date-first-day.x-date-range-hover-end:before{width:1.75rem;transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:last-child:not(.x-date-last-or-next):before,.x-picker-date-body>table td.x-date-range-hover.x-date-last-day:before{border-right-color:var(--x-primary);transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:last-child:not(.x-date-last-or-next).x-date-range-hover-start:before,.x-picker-date-body>table td.x-date-range-hover.x-date-last-day.x-date-range-hover-start:before{width:1.75rem;transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-start:not(.x-date-last-or-next):before{border-left-color:var(--x-primary);transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover.x-date-range-hover-start:not(.x-date-last-or-next):before{transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-end:not(.x-date-last-or-next):before{border-right-color:var(--x-primary);transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-start-left:not(:first-child):not(.x-date-last-or-next):not(.x-date-first-day):before,.x-picker-date-body>table td.x-date-range-hover-end-left:not(:first-child):not(.x-date-last-or-next):not(.x-date-first-day):before{border-top-color:var(--x-primary);border-bottom-color:var(--x-primary);transform:translate(-.3125rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-start-right:not(:last-child):not(.x-date-last-or-next):not(.x-date-last-day):before,.x-picker-date-body>table td.x-date-range-hover-end-right:not(:last-child):not(.x-date-last-or-next):not(.x-date-last-day):before{border-top-color:var(--x-primary);border-bottom-color:var(--x-primary);transform:translate(.3125rem,-50%)}.x-picker-date-body>table td.x-date-now:not(.x-date-active):not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next) .x-date-text{color:var(--x-primary);border-color:var(--x-primary)}.x-picker-date .x-visibility{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.XButtonComponent, selector: "x-button" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i3.XI18nPipe, name: "xI18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
601
739
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XPickerDateComponent, decorators: [{
602
740
  type: Component,
603
- args: [{ selector: `${XPickerDatePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [DatePipe, LowerCasePipe], template: "<div class=\"x-picker-date\" [class.x-date-picker-datetemp]=\"dateTemp\">\r\n <div class=\"x-picker-date-header\" *ngIf=\"showHeader\">\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" [class.x-visibility]=\"!lastYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" [class.x-visibility]=\"!lastMonthBtn\"></x-button>\r\n <div class=\"x-picker-date-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('year')\">{{ display | date: 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('month')\">{{ getLocaleMonth(display) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\" [class.x-visibility]=\"!nextYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\" [class.x-visibility]=\"!nextMonthBtn\"></x-button>\r\n </div>\r\n <div class=\"x-picker-date-body\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let title of titles; trackBy: trackByNode\">{{ title | xI18n }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let weeks of dates\">\r\n <ng-container *ngFor=\"let week of weeks; trackBy: trackByNode\">\r\n <td\r\n [class.x-date-last-or-next]=\"(week | date: 'yyyyMM') !== (display | date: 'yyyyMM')\"\r\n [class.x-date-now]=\"(week | date: 'yyyyMMdd') === (now | date: 'yyyyMMdd')\"\r\n (click)=\"dateTemp && dateClick(week)\"\r\n >\r\n <x-button\r\n *ngIf=\"!dateTemp\"\r\n type=\"text\"\r\n size=\"mini\"\r\n title=\"{{ week | date: 'yyyy-MM-dd' }}\"\r\n [activated]=\"!rangePicker && (week | date: 'yyyyMMdd') === (model | date: 'yyyyMMdd')\"\r\n [disabled]=\"false\"\r\n (click)=\"dateClick(week)\"\r\n >{{ week | date: 'd' }}</x-button\r\n >\r\n <ng-container *ngIf=\"dateTemp\">\r\n <ng-container *ngTemplateOutlet=\"dateTemp; context: { date$: week }\"></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.x-picker-date{margin:0;padding:0}.x-picker-date-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-picker-date-year-month{flex:1;text-align:center}.x-picker-date-body{padding:.5rem}.x-picker-date-body>table{width:100%;border-collapse:collapse;border-spacing:0}.x-picker-date-body>table th{font-weight:400;height:2rem;color:var(--x-text-400)}.x-picker-date-body>table td{padding:.25rem 0;text-align:center}.x-picker-date-body>table td x-button .x-button{width:1.625rem;height:1.5rem;margin:0 auto;border:.0625rem solid transparent}.x-picker-date-body>table td x-button .x-button:hover{background-color:var(--x-primary-900)}.x-picker-date-body>table td x-button .x-button-activated{color:var(--x-background-100);background-color:var(--x-primary)}.x-picker-date-body>table td x-button .x-button-activated:hover{color:var(--x-background-100);background-color:var(--x-primary)}.x-picker-date-body>table td.x-date-last-or-next x-button .x-button{color:var(--x-text-700)}.x-picker-date-body>table td.x-date-now x-button .x-button:not(.x-button-activated){color:var(--x-primary);background-color:transparent;border-color:var(--x-primary)}.x-picker-date .x-visibility{visibility:hidden}\n"] }]
741
+ args: [{ selector: `${XPickerDatePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [DatePipe, LowerCasePipe], template: "<div class=\"x-picker-date\" [class.x-date-picker-datetemp]=\"dateTemp\">\r\n <div class=\"x-picker-date-header\" *ngIf=\"showHeader\">\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" [class.x-visibility]=\"!lastYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" [class.x-visibility]=\"!lastMonthBtn\"></x-button>\r\n <div class=\"x-picker-date-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('year')\">{{ display | date : 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeOnChange('month')\">{{ getLocaleMonth(display) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\" [class.x-visibility]=\"!nextYearBtn\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\" [class.x-visibility]=\"!nextMonthBtn\"></x-button>\r\n </div>\r\n <div class=\"x-picker-date-body\">\r\n <table cellspacing=\"0\" cellpadding=\"0\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let title of titles; trackBy: trackByNode\">{{ title | xI18n }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let weeks of weekDates\">\r\n <ng-container *ngFor=\"let week of weeks; trackBy: trackByNode\">\r\n <td\r\n [class.x-date-last-or-next]=\"week.isLastOrNext\"\r\n [class.x-date-now]=\"week.isNow\"\r\n [class.x-date-first-day]=\"week.isFirstDay\"\r\n [class.x-date-last-day]=\"week.isLastDay\"\r\n [class.x-date-range-start]=\"rangePicker && isStartDate(week.date!)\"\r\n [class.x-date-range-end]=\"rangePicker && isEndDate(week.date!)\"\r\n [class.x-date-range-start-left]=\"rangePicker && week.isRangeStartLeft\"\r\n [class.x-date-range-start-right]=\"rangePicker && week.isRangeStartRight\"\r\n [class.x-date-range-end-left]=\"rangePicker && week.isRangeEndLeft\"\r\n [class.x-date-range-end-right]=\"rangePicker && week.isRangeEndRight\"\r\n [class.x-date-range-hover]=\"rangePicker && week.isRangeHover\"\r\n [class.x-date-range-hover-start-left]=\"rangePicker && week.isRangeHoverStartLeft\"\r\n [class.x-date-range-hover-start-right]=\"rangePicker && week.isRangeHoverStartRight\"\r\n [class.x-date-range-hover-end-left]=\"rangePicker && week.isRangeHoverEndLeft\"\r\n [class.x-date-range-hover-end-right]=\"rangePicker && week.isRangeHoverEndRight\"\r\n [class.x-date-range-hover-start]=\"rangePicker && week.isRangeHoverStart\"\r\n [class.x-date-range-hover-end]=\"rangePicker && week.isRangeHoverEnd\"\r\n [class.x-date-in-range]=\"rangePicker && week.isInRange\"\r\n [class.x-date-in-range-hover]=\"rangePicker && week.isInRangeHover\"\r\n [class.x-date-active]=\"!rangePicker && (week.date | date : 'yyyyMMdd') === (model | date : 'yyyyMMdd')\"\r\n title=\"{{ week.date | date : 'yyyy-MM-dd' }}\"\r\n (click)=\"dateClick(week)\"\r\n (mouseenter)=\"rangePicker && onTdMouseenter(week)\"\r\n (mouseleave)=\"rangePicker && onTdMouseleave(week)\"\r\n >\r\n <div *ngIf=\"!dateTemp\" class=\"x-date-text\">\r\n {{ week.date | date : 'd' }}\r\n </div>\r\n <ng-container *ngIf=\"dateTemp\">\r\n <ng-container *ngTemplateOutlet=\"dateTemp; context: { date$: week.date }\"></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.x-picker-date{margin:0;padding:0}.x-picker-date-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-picker-date-year-month{flex:1;text-align:center}.x-picker-date-body{padding:.5rem}.x-picker-date-body>table{width:100%;border-collapse:collapse;border-spacing:0}.x-picker-date-body>table th{font-weight:400;height:2rem;color:var(--x-text-400)}.x-picker-date-body>table td{padding:.25rem 0;text-align:center;cursor:pointer;color:var(--x-text-300);position:relative}.x-picker-date-body>table td .x-date-text{width:1.75rem;height:1.5rem;margin:0 auto;border:var(--x-border-width) var(--x-border-style) transparent;border-radius:var(--x-border-radius);transition:var(--x-animation-duration-base);position:relative}.x-picker-date-body>table td:before,.x-picker-date-body>table td:after{position:absolute;top:50%;right:0;left:0;z-index:1;height:1.5rem;border:var(--x-border-width) dashed transparent;transform:translateY(-50%);transition:var(--x-animation-duration-base);content:\"\"}.x-picker-date-body>table td:hover:not(.x-date-in-range) .x-date-text{background-color:var(--x-background-a200)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next),.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next),.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next){color:var(--x-background-100)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next) .x-date-text,.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next) .x-date-text,.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next) .x-date-text{background-color:var(--x-primary);border-color:var(--x-primary)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next):hover,.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next):hover,.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next):hover{color:var(--x-background-100)}.x-picker-date-body>table td.x-date-active:not(.x-date-last-or-next):hover .x-date-text,.x-picker-date-body>table td.x-date-range-start:not(.x-date-last-or-next):hover .x-date-text,.x-picker-date-body>table td.x-date-range-end:not(.x-date-last-or-next):hover .x-date-text{background-color:var(--x-primary)}.x-picker-date-body>table td.x-date-range-end-left:not(.x-date-last-or-next):not(.x-date-first-day):not(:first-child) .x-date-text{z-index:1}.x-picker-date-body>table td.x-date-range-end-left:not(.x-date-last-or-next):not(.x-date-first-day):not(:first-child):after{background-color:var(--x-primary-800);transform:translate(-.25rem,-50%);border-radius:var(--x-border-radius);z-index:0}.x-picker-date-body>table td.x-date-range-end-left:not(.x-date-last-or-next):not(.x-date-first-day):not(:first-child).x-date-in-range-hover:after{background-color:var(--x-primary-700)}.x-picker-date-body>table td.x-date-range-start-right:not(.x-date-last-or-next):not(.x-date-last-day):not(:last-child) .x-date-text{z-index:1}.x-picker-date-body>table td.x-date-range-start-right:not(.x-date-last-or-next):not(.x-date-last-day):not(:last-child):after{background-color:var(--x-primary-800);transform:translate(.25rem,-50%);border-radius:var(--x-border-radius);z-index:0}.x-picker-date-body>table td.x-date-range-start-right:not(.x-date-last-or-next):not(.x-date-last-day):not(:last-child).x-date-in-range-hover:after{background-color:var(--x-primary-700)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next) .x-date-text{position:relative;z-index:1}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next):before{background-color:var(--x-primary-800);z-index:0}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next):first-child:before{transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next):last-child:before{transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next).x-date-in-range-hover-left:before{transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next).x-date-in-range-hover-right:before{transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-in-range:not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next).x-date-in-range-hover:before{background-color:var(--x-primary-700)}.x-picker-date-body>table td.x-date-last-or-next{color:var(--x-text-700)}.x-picker-date-body>table td.x-date-range-hover:not(.x-date-last-or-next):before{border-color:var(--x-primary);border-left-color:transparent;border-right-color:transparent;transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:first-child:not(.x-date-last-or-next):before,.x-picker-date-body>table td.x-date-range-hover.x-date-first-day:before{border-left-color:var(--x-primary);transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:first-child:not(.x-date-last-or-next).x-date-range-hover-end:before,.x-picker-date-body>table td.x-date-range-hover.x-date-first-day.x-date-range-hover-end:before{width:1.75rem;transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:last-child:not(.x-date-last-or-next):before,.x-picker-date-body>table td.x-date-range-hover.x-date-last-day:before{border-right-color:var(--x-primary);transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover:last-child:not(.x-date-last-or-next).x-date-range-hover-start:before,.x-picker-date-body>table td.x-date-range-hover.x-date-last-day.x-date-range-hover-start:before{width:1.75rem;transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-start:not(.x-date-last-or-next):before{border-left-color:var(--x-primary);transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover.x-date-range-hover-start:not(.x-date-last-or-next):before{transform:translate(.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-end:not(.x-date-last-or-next):before{border-right-color:var(--x-primary);transform:translate(-.25rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-start-left:not(:first-child):not(.x-date-last-or-next):not(.x-date-first-day):before,.x-picker-date-body>table td.x-date-range-hover-end-left:not(:first-child):not(.x-date-last-or-next):not(.x-date-first-day):before{border-top-color:var(--x-primary);border-bottom-color:var(--x-primary);transform:translate(-.3125rem,-50%)}.x-picker-date-body>table td.x-date-range-hover-start-right:not(:last-child):not(.x-date-last-or-next):not(.x-date-last-day):before,.x-picker-date-body>table td.x-date-range-hover-end-right:not(:last-child):not(.x-date-last-or-next):not(.x-date-last-day):before{border-top-color:var(--x-primary);border-bottom-color:var(--x-primary);transform:translate(.3125rem,-50%)}.x-picker-date-body>table td.x-date-now:not(.x-date-active):not(.x-date-range-start):not(.x-date-range-end):not(.x-date-last-or-next) .x-date-text{color:var(--x-primary);border-color:var(--x-primary)}.x-picker-date .x-visibility{visibility:hidden}\n"] }]
604
742
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.DatePipe }, { type: i1.LowerCasePipe }, { type: i0.ChangeDetectorRef }, { type: i2.XConfigService }, { type: i3.XI18nService }]; } });
605
743
 
606
744
  class XPickerMonthComponent extends XPickerMonthProperty {
@@ -1152,6 +1290,7 @@ class XDateRangePortalComponent {
1152
1290
  this.value = [];
1153
1291
  this.locale = {};
1154
1292
  this.preset = [];
1293
+ this.nodeClickCount = 0;
1155
1294
  this._unSubject = new Subject();
1156
1295
  }
1157
1296
  done(event) {
@@ -1170,9 +1309,8 @@ class XDateRangePortalComponent {
1170
1309
  this.placement = x;
1171
1310
  this.cdr.detectChanges();
1172
1311
  });
1173
- this.inputActiveChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {
1312
+ this.activeTypeChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {
1174
1313
  this.activeType = x;
1175
- this.setDefault();
1176
1314
  });
1177
1315
  this.i18n.localeChange
1178
1316
  .pipe(map((x) => x.datePicker), takeUntil(this._unSubject))
@@ -1193,7 +1331,7 @@ class XDateRangePortalComponent {
1193
1331
  this.setDefault();
1194
1332
  }
1195
1333
  else {
1196
- this.value = [];
1334
+ this.value = [null, null];
1197
1335
  this.model = this.display;
1198
1336
  this.startModel = this.model;
1199
1337
  this.endModel = XAddMonths(this.model, 1);
@@ -1226,35 +1364,38 @@ class XDateRangePortalComponent {
1226
1364
  this.startDisplay = this.display;
1227
1365
  this.endDisplay = XAddMonths(this.display, 1);
1228
1366
  }
1229
- dateChange(date, type) {
1230
- let time = date.getTime();
1231
- if (this.value.length === 0) {
1232
- this.value = [time];
1233
- this.startNodeEmit(date);
1234
- }
1235
- else if (this.value.length === 1) {
1236
- if (time > this.value[0]) {
1237
- this.value = [...this.value, time];
1238
- this.endNodeEmit(date);
1239
- }
1240
- else {
1241
- this.value = [time, ...this.value];
1242
- this.startNodeEmit(date);
1243
- this.endNodeEmit(new Date(this.value[1]));
1367
+ dateChange(date) {
1368
+ this.nodeClickCount++;
1369
+ let close = this.nodeClickCount === 2;
1370
+ const time = date.getTime();
1371
+ if (this.activeType === 'start') {
1372
+ this.value[0] = time;
1373
+ if (!XIsNull(this.value[1]) && time > this.value[1]) {
1374
+ if (this.nodeClickCount === 2) {
1375
+ this.nodeClickCount--;
1376
+ }
1377
+ close = false;
1378
+ this.endModel = null;
1379
+ this.value[1] = null;
1380
+ this.endNodeEmit(null, close);
1244
1381
  }
1245
- this.nodeEmit(this.value.map((x) => new Date(x)));
1382
+ this.startNodeEmit(date, close);
1246
1383
  }
1247
- else {
1248
- if (type === 'start') {
1249
- this.value = [time, this.value[1]];
1250
- this.startNodeEmit(date);
1384
+ else if (this.activeType === 'end') {
1385
+ this.value[1] = time;
1386
+ if (!XIsNull(this.value[0]) && time < this.value[0]) {
1387
+ if (this.nodeClickCount === 2) {
1388
+ this.nodeClickCount--;
1389
+ }
1390
+ close = false;
1391
+ this.startModel = null;
1392
+ this.value[0] = null;
1393
+ this.startNodeEmit(null, close);
1251
1394
  }
1252
- else if (type === 'end') {
1253
- this.value = [this.value[0], time];
1254
- this.cdr.detectChanges();
1255
- this.endNodeEmit(date);
1256
- }
1257
- this.nodeEmit(this.value.map((x) => new Date(x)), type !== 'start');
1395
+ this.endNodeEmit(date, close);
1396
+ }
1397
+ if (!this.value.includes(null)) {
1398
+ this.nodeEmit(this.value.map((x) => new Date(x)), close);
1258
1399
  }
1259
1400
  }
1260
1401
  typeChange(type) {
@@ -1332,10 +1473,10 @@ class XDateRangePortalComponent {
1332
1473
  }
1333
1474
  }
1334
1475
  /** @nocollapse */ XDateRangePortalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XDateRangePortalComponent, deps: [{ token: i1.DatePipe }, { token: i1.LowerCasePipe }, { token: i0.ChangeDetectorRef }, { token: i3.XI18nService }], target: i0.ɵɵFactoryTarget.Component });
1335
- /** @nocollapse */ XDateRangePortalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XDateRangePortalComponent, selector: "x-date-range-portal", host: { listeners: { "@x-connect-base-animation.done": "done($event)", "@x-connect-base-animation.start": "start($event)" }, properties: { "@x-connect-base-animation": "this.placement" } }, providers: [DatePipe, LowerCasePipe], ngImport: i0, template: "<div class=\"x-date-range-portal {{ type }}\" [ngSwitch]=\"type\">\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <div class=\"x-date-range-portal-body\">\r\n <x-picker-date\r\n class=\"x-date-range-portal-start\"\r\n [(display)]=\"startDisplay\"\r\n [model]=\"startModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [nextYearBtn]=\"false\"\r\n [nextMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event, 'start')\"\r\n (yearChange)=\"startYearChange($event)\"\r\n (monthChange)=\"startMonthChange($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n <x-picker-date\r\n class=\"x-date-range-portal-end\"\r\n [(display)]=\"endDisplay\"\r\n [model]=\"endModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [lastYearBtn]=\"false\"\r\n [lastMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event, 'end')\"\r\n (yearChange)=\"endYearChange($event)\"\r\n (monthChange)=\"endMonthChange($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #startDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ startDisplay | date: 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(startDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n</ng-template>\r\n\r\n<ng-template #endDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" style=\"visibility: hidden\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ endDisplay | date: 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(endDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\"></x-button>\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";.x-date-range-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);background-color:var(--x-background);width:34rem;display:flex;flex-direction:column;font-size:var(--x-font-size-small)}.x-date-range-portal.date-time{width:27rem}.x-date-range-portal.date-hour{width:19.75rem}.x-date-range-portal.date-minute{width:23.375rem}.x-date-range-portal-content{display:flex}.x-date-range-portal-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset{display:flex;align-items:center;justify-content:center;border-top:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset>x-button{flex:1}.x-date-range-portal-year-month{flex:1;text-align:center}.x-date-range-portal-body{display:flex}.x-date-range-portal-start,.x-date-range-portal-end{flex:1}.x-date-range-portal-footer{display:flex;justify-content:flex-end;border-top:var(--x-border-width) var(--x-border-style) var(--x-border);padding:.5rem}.x-date-range-portal-date{flex:1}.x-date-range-portal-time{display:flex;flex-direction:column}.x-date-range-portal-time-label{padding:.4rem;text-align:center;border-left:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-date-range-portal-time .x-time-picker-frame{border-width:var(--x-border-width) 0 0 var(--x-border-width);box-shadow:none}\n"], dependencies: [{ kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.XButtonComponent, selector: "x-button" }, { kind: "component", type: XPickerDateComponent, selector: "x-picker-date" }, { kind: "pipe", type: i1.DatePipe, name: "date" }], animations: [XConnectBaseAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1476
+ /** @nocollapse */ XDateRangePortalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XDateRangePortalComponent, selector: "x-date-range-portal", host: { listeners: { "@x-connect-base-animation.done": "done($event)", "@x-connect-base-animation.start": "start($event)" }, properties: { "@x-connect-base-animation": "this.placement" } }, providers: [DatePipe, LowerCasePipe], ngImport: i0, template: "<div class=\"x-date-range-portal {{ type }}\" [ngSwitch]=\"type\">\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <div class=\"x-date-range-portal-body\">\r\n <x-picker-date\r\n #startPickerDate\r\n class=\"x-date-range-portal-start\"\r\n [(display)]=\"startDisplay\"\r\n [model]=\"startModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [nextYearBtn]=\"false\"\r\n [nextMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event)\"\r\n (yearChange)=\"startYearChange($event)\"\r\n (monthChange)=\"startMonthChange($event)\"\r\n (rangeTdMouseenter)=\"endPickerDate.setDatesState($event)\"\r\n (rangeDateClick)=\"endPickerDate.setDatesState($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n <x-picker-date\r\n #endPickerDate\r\n class=\"x-date-range-portal-end\"\r\n [(display)]=\"endDisplay\"\r\n [model]=\"endModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [lastYearBtn]=\"false\"\r\n [lastMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event)\"\r\n (yearChange)=\"endYearChange($event)\"\r\n (monthChange)=\"endMonthChange($event)\"\r\n (rangeTdMouseenter)=\"startPickerDate.setDatesState($event)\"\r\n (rangeDateClick)=\"startPickerDate.setDatesState($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #startDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ startDisplay | date : 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(startDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n</ng-template>\r\n\r\n<ng-template #endDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" style=\"visibility: hidden\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ endDisplay | date : 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(endDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\"></x-button>\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";.x-date-range-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);background-color:var(--x-background);width:34rem;display:flex;flex-direction:column;font-size:var(--x-font-size-small)}.x-date-range-portal.date-time{width:27rem}.x-date-range-portal.date-hour{width:19.75rem}.x-date-range-portal.date-minute{width:23.375rem}.x-date-range-portal-content{display:flex}.x-date-range-portal-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset{display:flex;align-items:center;justify-content:center;border-top:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset>x-button{flex:1}.x-date-range-portal-year-month{flex:1;text-align:center}.x-date-range-portal-body{display:flex}.x-date-range-portal-start,.x-date-range-portal-end{flex:1}.x-date-range-portal-footer{display:flex;justify-content:flex-end;border-top:var(--x-border-width) var(--x-border-style) var(--x-border);padding:.5rem}.x-date-range-portal-date{flex:1}.x-date-range-portal-time{display:flex;flex-direction:column}.x-date-range-portal-time-label{padding:.4rem;text-align:center;border-left:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-date-range-portal-time .x-time-picker-frame{border-width:var(--x-border-width) 0 0 var(--x-border-width);box-shadow:none}\n"], dependencies: [{ kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4.XButtonComponent, selector: "x-button" }, { kind: "component", type: XPickerDateComponent, selector: "x-picker-date" }, { kind: "pipe", type: i1.DatePipe, name: "date" }], animations: [XConnectBaseAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1336
1477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XDateRangePortalComponent, decorators: [{
1337
1478
  type: Component,
1338
- args: [{ selector: `${XDateRangePortalPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XConnectBaseAnimation], providers: [DatePipe, LowerCasePipe], template: "<div class=\"x-date-range-portal {{ type }}\" [ngSwitch]=\"type\">\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <div class=\"x-date-range-portal-body\">\r\n <x-picker-date\r\n class=\"x-date-range-portal-start\"\r\n [(display)]=\"startDisplay\"\r\n [model]=\"startModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [nextYearBtn]=\"false\"\r\n [nextMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event, 'start')\"\r\n (yearChange)=\"startYearChange($event)\"\r\n (monthChange)=\"startMonthChange($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n <x-picker-date\r\n class=\"x-date-range-portal-end\"\r\n [(display)]=\"endDisplay\"\r\n [model]=\"endModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [lastYearBtn]=\"false\"\r\n [lastMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event, 'end')\"\r\n (yearChange)=\"endYearChange($event)\"\r\n (monthChange)=\"endMonthChange($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #startDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ startDisplay | date: 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(startDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n</ng-template>\r\n\r\n<ng-template #endDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" style=\"visibility: hidden\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ endDisplay | date: 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(endDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\"></x-button>\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";.x-date-range-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);background-color:var(--x-background);width:34rem;display:flex;flex-direction:column;font-size:var(--x-font-size-small)}.x-date-range-portal.date-time{width:27rem}.x-date-range-portal.date-hour{width:19.75rem}.x-date-range-portal.date-minute{width:23.375rem}.x-date-range-portal-content{display:flex}.x-date-range-portal-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset{display:flex;align-items:center;justify-content:center;border-top:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset>x-button{flex:1}.x-date-range-portal-year-month{flex:1;text-align:center}.x-date-range-portal-body{display:flex}.x-date-range-portal-start,.x-date-range-portal-end{flex:1}.x-date-range-portal-footer{display:flex;justify-content:flex-end;border-top:var(--x-border-width) var(--x-border-style) var(--x-border);padding:.5rem}.x-date-range-portal-date{flex:1}.x-date-range-portal-time{display:flex;flex-direction:column}.x-date-range-portal-time-label{padding:.4rem;text-align:center;border-left:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-date-range-portal-time .x-time-picker-frame{border-width:var(--x-border-width) 0 0 var(--x-border-width);box-shadow:none}\n"] }]
1479
+ args: [{ selector: `${XDateRangePortalPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XConnectBaseAnimation], providers: [DatePipe, LowerCasePipe], template: "<div class=\"x-date-range-portal {{ type }}\" [ngSwitch]=\"type\">\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <div class=\"x-date-range-portal-body\">\r\n <x-picker-date\r\n #startPickerDate\r\n class=\"x-date-range-portal-start\"\r\n [(display)]=\"startDisplay\"\r\n [model]=\"startModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [nextYearBtn]=\"false\"\r\n [nextMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event)\"\r\n (yearChange)=\"startYearChange($event)\"\r\n (monthChange)=\"startMonthChange($event)\"\r\n (rangeTdMouseenter)=\"endPickerDate.setDatesState($event)\"\r\n (rangeDateClick)=\"endPickerDate.setDatesState($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n <x-picker-date\r\n #endPickerDate\r\n class=\"x-date-range-portal-end\"\r\n [(display)]=\"endDisplay\"\r\n [model]=\"endModel\"\r\n [rangeValue]=\"value\"\r\n [rangeType]=\"activeType\"\r\n [lastYearBtn]=\"false\"\r\n [lastMonthBtn]=\"false\"\r\n (modelChange)=\"dateChange($event)\"\r\n (yearChange)=\"endYearChange($event)\"\r\n (monthChange)=\"endMonthChange($event)\"\r\n (rangeTdMouseenter)=\"startPickerDate.setDatesState($event)\"\r\n (rangeDateClick)=\"startPickerDate.setDatesState($event)\"\r\n rangePicker\r\n ></x-picker-date>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #startDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ startDisplay | date : 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(startDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon style=\"visibility: hidden\"></x-button>\r\n</ng-template>\r\n\r\n<ng-template #endDateHeaderTpl>\r\n <x-button icon=\"fto-chevrons-left\" size=\"small\" onlyIcon (click)=\"nextYear(-1)\" style=\"visibility: hidden\"></x-button>\r\n <x-button icon=\"fto-chevron-left\" size=\"small\" onlyIcon (click)=\"nextMonth(-1)\" style=\"visibility: hidden\"></x-button>\r\n <div class=\"x-date-range-portal-year-month\">\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('year')\">{{ endDisplay | date : 'yyyy' }}{{ locale.year }}</x-button>\r\n <x-button type=\"text\" size=\"small\" (click)=\"typeChange('month')\">{{ getLocaleMonth(endDisplay) }}</x-button>\r\n </div>\r\n <x-button icon=\"fto-chevron-right\" size=\"small\" onlyIcon (click)=\"nextMonth(1)\"></x-button>\r\n <x-button icon=\"fto-chevrons-right\" size=\"small\" onlyIcon (click)=\"nextYear(1)\"></x-button>\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";.x-date-range-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);background-color:var(--x-background);width:34rem;display:flex;flex-direction:column;font-size:var(--x-font-size-small)}.x-date-range-portal.date-time{width:27rem}.x-date-range-portal.date-hour{width:19.75rem}.x-date-range-portal.date-minute{width:23.375rem}.x-date-range-portal-content{display:flex}.x-date-range-portal-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem;border-bottom:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset{display:flex;align-items:center;justify-content:center;border-top:var(--x-border-width) solid var(--x-border)}.x-date-range-portal-preset>x-button{flex:1}.x-date-range-portal-year-month{flex:1;text-align:center}.x-date-range-portal-body{display:flex}.x-date-range-portal-start,.x-date-range-portal-end{flex:1}.x-date-range-portal-footer{display:flex;justify-content:flex-end;border-top:var(--x-border-width) var(--x-border-style) var(--x-border);padding:.5rem}.x-date-range-portal-date{flex:1}.x-date-range-portal-time{display:flex;flex-direction:column}.x-date-range-portal-time-label{padding:.4rem;text-align:center;border-left:var(--x-border-width) var(--x-border-style) var(--x-border)}.x-date-range-portal-time .x-time-picker-frame{border-width:var(--x-border-width) 0 0 var(--x-border-width);box-shadow:none}\n"] }]
1339
1480
  }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.LowerCasePipe }, { type: i0.ChangeDetectorRef }, { type: i3.XI18nService }]; }, propDecorators: { placement: [{
1340
1481
  type: HostBinding,
1341
1482
  args: ['@x-connect-base-animation']
@@ -1359,6 +1500,7 @@ class XDateRangeComponent extends XDateRangeProperty {
1359
1500
  this.overlay = overlay;
1360
1501
  this.modelType = 'date';
1361
1502
  this.isInput = false;
1503
+ this.showClearable = false;
1362
1504
  this.enter = false;
1363
1505
  this.inputClearable = false;
1364
1506
  this.animating = false;
@@ -1369,24 +1511,22 @@ class XDateRangeComponent extends XDateRangeProperty {
1369
1511
  this.valueChange = new Subject();
1370
1512
  this.dataChange = new Subject();
1371
1513
  this.positionChange = new Subject();
1372
- this.inputActiveChange = new Subject();
1373
1514
  this.closeSubject = new Subject();
1515
+ this.activeTypeChange = new Subject();
1374
1516
  this.startDisplay = '';
1375
1517
  this.endDisplay = '';
1376
- this.startActive = false;
1377
- this.endActive = false;
1378
1518
  this._unSubject = new Subject();
1379
1519
  }
1380
1520
  get getRequired() {
1381
1521
  return this.required && XIsEmpty(this.value);
1382
1522
  }
1383
1523
  writeValue(value) {
1384
- if (XIsUndefined(value))
1524
+ if (XIsUndefined(value) || XIsNull(value))
1385
1525
  value = [];
1386
1526
  if (value.length > 0) {
1387
1527
  if (XIsDate(value[0])) {
1388
1528
  this.modelType = 'date';
1389
- this.numberValue = value.getTime();
1529
+ this.numberValue = value.map((x) => x.getTime());
1390
1530
  }
1391
1531
  else if (XIsNumber(value[0])) {
1392
1532
  this.modelType = 'number';
@@ -1451,32 +1591,41 @@ class XDateRangeComponent extends XDateRangeProperty {
1451
1591
  }
1452
1592
  }
1453
1593
  menter() {
1454
- if (this.disabled)
1594
+ if (this.disabled || !this.clearable)
1455
1595
  return;
1456
1596
  this.enter = true;
1457
1597
  if (!XIsEmpty(this.numberValue)) {
1458
1598
  this.icon = '';
1459
- this.inputClearable = true;
1599
+ this.showClearable = true;
1460
1600
  this.cdr.detectChanges();
1461
1601
  }
1462
1602
  }
1463
1603
  mleave() {
1464
- if (this.disabled)
1604
+ if (this.disabled || !this.clearable)
1465
1605
  return;
1466
1606
  this.enter = false;
1467
- if (this.inputClearable) {
1607
+ if (this.clearable) {
1468
1608
  this.icon = 'fto-calendar';
1469
- this.inputClearable = false;
1609
+ this.showClearable = false;
1470
1610
  this.cdr.detectChanges();
1471
1611
  }
1472
1612
  }
1473
1613
  clearEmit() {
1474
1614
  this.value = [];
1475
1615
  this.numberValue = [];
1476
- this.displayValue = [];
1616
+ this.startDisplay = '';
1617
+ this.endDisplay = '';
1477
1618
  this.mleave();
1478
1619
  this.valueChange.next(this.numberValue);
1479
1620
  this.modelChange();
1621
+ this.inputStartCom.inputFocus();
1622
+ this.cdr.detectChanges();
1623
+ }
1624
+ onIconClick(event) {
1625
+ if (this.icon === 'fto-x') {
1626
+ this.clearEmit();
1627
+ }
1628
+ event.stopPropagation();
1480
1629
  }
1481
1630
  modelChange() {
1482
1631
  if (this.onChange) {
@@ -1490,6 +1639,13 @@ class XDateRangeComponent extends XDateRangeProperty {
1490
1639
  ? this.numberValue.map((x) => this.datePipe.transform(x, this.format))
1491
1640
  : this.numberValue;
1492
1641
  }
1642
+ getNumberValue() {
1643
+ return this.modelType === 'date'
1644
+ ? this.value.map((x) => x.getTime())
1645
+ : this.modelType === 'string'
1646
+ ? this.value.map((x) => new Date(x).getTime())
1647
+ : this.value;
1648
+ }
1493
1649
  portalAttached() {
1494
1650
  var _a, _b;
1495
1651
  return (_b = (_a = this.portal) === null || _a === void 0 ? void 0 : _a.overlayRef) === null || _b === void 0 ? void 0 : _b.hasAttached();
@@ -1499,8 +1655,17 @@ class XDateRangeComponent extends XDateRangeProperty {
1499
1655
  if (this.portalAttached()) {
1500
1656
  (_b = (_a = this.portal) === null || _a === void 0 ? void 0 : _a.overlayRef) === null || _b === void 0 ? void 0 : _b.detach();
1501
1657
  this.active = false;
1502
- this.startActive = false;
1503
- this.endActive = false;
1658
+ if (!this.numberValue || this.numberValue.length === 0 || this.numberValue.includes(null)) {
1659
+ if (!this.value || this.value.length === 0) {
1660
+ this.startDisplay = '';
1661
+ this.endDisplay = '';
1662
+ this.numberValue = [];
1663
+ }
1664
+ else {
1665
+ this.numberValue = this.getNumberValue();
1666
+ this.setDisplayValue(this.numberValue);
1667
+ }
1668
+ }
1504
1669
  this.cdr.detectChanges();
1505
1670
  return true;
1506
1671
  }
@@ -1515,10 +1680,8 @@ class XDateRangeComponent extends XDateRangeProperty {
1515
1680
  type && $event.stopPropagation();
1516
1681
  if (this.disabled || this.animating)
1517
1682
  return;
1518
- this.startActive = type === 'start';
1519
- this.endActive = type === 'end';
1520
- this.activeType = type;
1521
- this.activeType && this.inputActiveChange.next(this.activeType);
1683
+ this.activeType = type || 'start';
1684
+ this.activeTypeChange.next(this.activeType);
1522
1685
  if (this.active)
1523
1686
  return;
1524
1687
  this.active = true;
@@ -1536,7 +1699,6 @@ class XDateRangeComponent extends XDateRangeProperty {
1536
1699
  (_a = this.portal.overlayRef) === null || _a === void 0 ? void 0 : _a.outsidePointerEvents().pipe(takeUntil(this._unSubject)).subscribe((event) => {
1537
1700
  const clickTarget = event.target;
1538
1701
  if (clickTarget !== this.inputStartCom.inputRef.nativeElement && clickTarget !== this.inputEndCom.inputRef.nativeElement) {
1539
- this.setDisplayValue(this.numberValue);
1540
1702
  this.closeSubject.next();
1541
1703
  }
1542
1704
  });
@@ -1561,58 +1723,59 @@ class XDateRangeComponent extends XDateRangeProperty {
1561
1723
  preset: this.preset,
1562
1724
  valueChange: this.valueChange,
1563
1725
  positionChange: this.positionChange,
1564
- inputActiveChange: this.inputActiveChange,
1565
1726
  activeType: this.activeType,
1727
+ activeTypeChange: this.activeTypeChange,
1566
1728
  closePortal: () => this.closeSubject.next(),
1567
1729
  destroyPortal: () => this.destroyPortal(),
1568
- nodeEmit: (dates, sure = true) => this.onNodeClick(dates, sure),
1569
- startNodeEmit: (node) => this.startNodeClick(node),
1570
- endNodeEmit: (node) => this.endNodeClick(node),
1730
+ nodeEmit: (dates, close = true) => this.onNodeClick(dates, close),
1731
+ startNodeEmit: (node, close = false) => this.startNodeClick(node, close),
1732
+ endNodeEmit: (node, close = false) => this.endNodeClick(node, close),
1571
1733
  animating: (ing) => (this.animating = ing)
1572
1734
  });
1573
1735
  componentRef.changeDetectorRef.detectChanges();
1574
1736
  }
1575
- startNodeClick(node) {
1576
- this.startDisplay = this.datePipe.transform(node, this.format);
1577
- this.startActive = false;
1578
- this.endActive = true;
1579
- this.inputEndCom.inputFocus('after');
1737
+ startNodeClick(node, close = false) {
1738
+ this.startDisplay = !node ? '' : this.datePipe.transform(node, this.format);
1739
+ if (!close) {
1740
+ this.inputEndCom.inputFocus('after');
1741
+ this.activeTypeChange.next('end');
1742
+ }
1580
1743
  this.cdr.detectChanges();
1581
1744
  }
1582
- endNodeClick(node) {
1583
- this.endDisplay = this.datePipe.transform(node, this.format);
1745
+ endNodeClick(node, close = false) {
1746
+ this.endDisplay = !node ? '' : this.datePipe.transform(node, this.format);
1747
+ if (!close) {
1748
+ this.inputStartCom.inputFocus('after');
1749
+ this.activeTypeChange.next('start');
1750
+ }
1584
1751
  this.cdr.detectChanges();
1585
1752
  }
1586
- onNodeClick(dates, sure = true) {
1753
+ onNodeClick(dates, close = true) {
1587
1754
  this.isInput = false;
1588
- if (sure) {
1589
- this.numberValue = dates.map((x) => x.getTime());
1590
- this.value = this.getValue();
1591
- this.setDisplayValue(this.numberValue);
1755
+ this.numberValue = dates.map((x) => x.getTime());
1756
+ this.value = this.getValue();
1757
+ this.setDisplayValue(this.numberValue);
1758
+ if (close) {
1592
1759
  this.closeSubject.next();
1593
- this.modelChange();
1594
- this.nodeEmit.emit(this.numberValue);
1595
- }
1596
- else {
1597
- this.setDisplayValue(dates.map((x) => x.getTime()));
1598
- this.cdr.markForCheck();
1599
1760
  }
1761
+ this.modelChange();
1600
1762
  }
1601
1763
  onInput() {
1602
1764
  this.isInput = true;
1603
1765
  }
1766
+ onFocus(type) {
1767
+ this.activeType = type;
1768
+ this.activeChange.next(this.activeType);
1769
+ }
1604
1770
  setDisplayValue(dateNumber) {
1605
- // if (this.isInput && isNaN(this.startDisplay) && !isNaN(Date.parse(this.displayValue))) {
1606
- // this.displayValue = this.datePipe.transform(this.displayValue, this.format);
1607
- // this.numberValue = new Date(this.displayValue).getTime();
1608
- // this.value = this.getValue();
1609
- // this.modelChange();
1610
- // this.isInput = false;
1611
- // } else {
1612
1771
  if (!dateNumber)
1613
1772
  return;
1614
- this.displayValue = dateNumber.map((x) => this.datePipe.transform(x, this.format));
1615
- // }
1773
+ if (!XIsNull(dateNumber[0])) {
1774
+ this.startDisplay = this.datePipe.transform(dateNumber[0], this.format);
1775
+ }
1776
+ if (!XIsNull(dateNumber[1])) {
1777
+ this.endDisplay = this.datePipe.transform(dateNumber[1], this.format);
1778
+ }
1616
1779
  }
1617
1780
  setPlacement() {
1618
1781
  return this.portalService.setPlacement({
@@ -1635,10 +1798,10 @@ class XDateRangeComponent extends XDateRangeProperty {
1635
1798
  }
1636
1799
  }
1637
1800
  /** @nocollapse */ XDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XDateRangeComponent, deps: [{ token: i0.Renderer2 }, { token: i2.XConfigService }, { token: i0.ChangeDetectorRef }, { token: i2$1.XPortalService }, { token: i0.ViewContainerRef }, { token: i1.DatePipe }, { token: i4$1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
1638
- /** @nocollapse */ XDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XDateRangeComponent, selector: "x-date-range", providers: [XValueAccessor(XDateRangeComponent), DatePipe], viewQueries: [{ propertyName: "dateRange", first: true, predicate: ["dateRange"], descendants: true, static: true }, { propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, static: true }, { propertyName: "inputStartCom", first: true, predicate: ["inputStartCom"], descendants: true, static: true }, { propertyName: "inputEndCom", first: true, predicate: ["inputEndCom"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #dateRange class=\"x-date-range\" [class.x-date-range-active]=\"active\">\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" bordered=\"false\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n [class.x-input-active]=\"startActive\"\r\n type=\"text\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'start')\"\r\n (xFocus)=\"startActive = true\"\r\n (xBlur)=\"startActive = false\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n [class.x-input-active]=\"endActive\"\r\n type=\"text\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'end')\"\r\n (xFocus)=\"endActive = true\"\r\n (xBlur)=\"endActive = false\"\r\n [(ngModel)]=\"endDisplay\"\r\n ></x-input>\r\n <x-icon [type]=\"icon\"></x-icon>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center}.x-date-range-group .x-input-group>x-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;padding:.4rem}.x-date-range-group .x-input-group>x-input{width:6rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;margin-left:.4rem;margin-right:.4rem;border-radius:0;border-bottom:var(--x-border-width) var(--x-border-style) transparent}.x-date-range-group .x-input-group>x-input .x-input-active input{border-color:var(--x-primary)}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}\n"], dependencies: [{ 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: "component", type: i6.XInputComponent, selector: "x-input" }, { kind: "component", type: i6.XInputGroupComponent, selector: "x-input-group" }, { kind: "component", type: i7.XIconComponent, selector: "x-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1801
+ /** @nocollapse */ XDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XDateRangeComponent, selector: "x-date-range", providers: [XValueAccessor(XDateRangeComponent), DatePipe], viewQueries: [{ propertyName: "dateRange", first: true, predicate: ["dateRange"], descendants: true, static: true }, { propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, static: true }, { propertyName: "inputStartCom", first: true, predicate: ["inputStartCom"], descendants: true, static: true }, { propertyName: "inputEndCom", first: true, predicate: ["inputEndCom"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\r\n #dateRange\r\n class=\"x-date-range\"\r\n [class.x-date-range-active]=\"active\"\r\n [class.x-date-range-active-start]=\"activeType === 'start'\"\r\n [class.x-date-range-active-end]=\"activeType === 'end'\"\r\n>\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" (mouseenter)=\"menter()\" (mouseleave)=\"mleave()\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n class=\"x-data-range-input-start\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (xFocus)=\"onFocus('start')\"\r\n (xClick)=\"showPortal($event, 'start')\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon class=\"x-date-range-icon\" type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n class=\"x-data-range-input-end\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (xFocus)=\"onFocus('end')\"\r\n (xClick)=\"showPortal($event, 'end')\"\r\n [(ngModel)]=\"endDisplay\"\r\n [icon]=\"icon\"\r\n (clearEmit)=\"clearEmit()\"\r\n [clearable]=\"showClearable\"\r\n ></x-input>\r\n <div *ngIf=\"active\" class=\"x-date-range-active-bar\"></div>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center;position:relative}.x-date-range-group .x-input-group .x-date-range-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;font-size:1rem;width:1.8rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;background-color:transparent;margin-left:.4rem;margin-right:.4rem;border-radius:0}.x-date-range-group .x-input-group>x-input.x-data-range-input-start{width:6rem}.x-date-range-group .x-input-group>x-input.x-data-range-input-end{width:7.8rem}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active-bar{position:absolute;height:.125rem;margin-left:.4rem;bottom:-.0625rem;width:calc(50% - 2.2rem);background-color:var(--x-primary);transition:var(--x-animation-duration-base)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}.x-date-range-active-start .x-date-range-active-bar{left:0}.x-date-range-active-end .x-date-range-active-bar{left:50%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "component", type: i6.XInputComponent, selector: "x-input" }, { kind: "component", type: i6.XInputGroupComponent, selector: "x-input-group" }, { kind: "component", type: i7.XIconComponent, selector: "x-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1639
1802
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XDateRangeComponent, decorators: [{
1640
1803
  type: Component,
1641
- args: [{ selector: `${XDateRangePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XDateRangeComponent), DatePipe], template: "<div #dateRange class=\"x-date-range\" [class.x-date-range-active]=\"active\">\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" bordered=\"false\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n [class.x-input-active]=\"startActive\"\r\n type=\"text\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'start')\"\r\n (xFocus)=\"startActive = true\"\r\n (xBlur)=\"startActive = false\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n [class.x-input-active]=\"endActive\"\r\n type=\"text\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (click)=\"showPortal($event, 'end')\"\r\n (xFocus)=\"endActive = true\"\r\n (xBlur)=\"endActive = false\"\r\n [(ngModel)]=\"endDisplay\"\r\n ></x-input>\r\n <x-icon [type]=\"icon\"></x-icon>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center}.x-date-range-group .x-input-group>x-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;padding:.4rem}.x-date-range-group .x-input-group>x-input{width:6rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;margin-left:.4rem;margin-right:.4rem;border-radius:0;border-bottom:var(--x-border-width) var(--x-border-style) transparent}.x-date-range-group .x-input-group>x-input .x-input-active input{border-color:var(--x-primary)}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}\n"] }]
1804
+ args: [{ selector: `${XDateRangePrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [XValueAccessor(XDateRangeComponent), DatePipe], template: "<div\r\n #dateRange\r\n class=\"x-date-range\"\r\n [class.x-date-range-active]=\"active\"\r\n [class.x-date-range-active-start]=\"activeType === 'start'\"\r\n [class.x-date-range-active-end]=\"activeType === 'end'\"\r\n>\r\n <div class=\"x-date-range-row\">\r\n <x-input-group #inputGroup class=\"x-date-range-group\" (mouseenter)=\"menter()\" (mouseleave)=\"mleave()\" (click)=\"showPortal($event)\">\r\n <x-input\r\n #inputStartCom\r\n class=\"x-data-range-input-start\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u5F00\u59CB\u65E5\u671F\"\r\n (xFocus)=\"onFocus('start')\"\r\n (xClick)=\"showPortal($event, 'start')\"\r\n [(ngModel)]=\"startDisplay\"\r\n ></x-input>\r\n <x-icon class=\"x-date-range-icon\" type=\"fto-arrow-right\"></x-icon>\r\n <x-input\r\n #inputEndCom\r\n class=\"x-data-range-input-end\"\r\n type=\"text\"\r\n bordered=\"false\"\r\n placeholder=\"\u7ED3\u675F\u65E5\u671F\"\r\n (xFocus)=\"onFocus('end')\"\r\n (xClick)=\"showPortal($event, 'end')\"\r\n [(ngModel)]=\"endDisplay\"\r\n [icon]=\"icon\"\r\n (clearEmit)=\"clearEmit()\"\r\n [clearable]=\"showClearable\"\r\n ></x-input>\r\n <div *ngIf=\"active\" class=\"x-date-range-active-bar\"></div>\r\n </x-input-group>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-date-range{display:inline-block}.x-date-range{margin:0;padding:0;width:100%}.x-date-range-row{flex:1;display:flex;align-items:center}.x-date-range-group{display:inline-flex;flex:1;width:100%;font-size:var(--x-font-size);background-color:var(--x-background);background-image:none;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) transparent;transition:all var(--x-animation-duration-slow)}.x-date-range-group .x-input-group{display:flex;align-items:center;position:relative}.x-date-range-group .x-input-group .x-date-range-icon{color:var(--x-text-400);transition:all var(--x-animation-duration-base);z-index:2;font-size:1rem;width:1.8rem}.x-date-range-group .x-input-group>x-input input{padding-left:0!important;padding-right:0!important;background-color:transparent;margin-left:.4rem;margin-right:.4rem;border-radius:0}.x-date-range-group .x-input-group>x-input.x-data-range-input-start{width:6rem}.x-date-range-group .x-input-group>x-input.x-data-range-input-end{width:7.8rem}.x-date-range-group:hover{border-color:var(--x-primary-300)}.x-date-range-active-bar{position:absolute;height:.125rem;margin-left:.4rem;bottom:-.0625rem;width:calc(50% - 2.2rem);background-color:var(--x-primary);transition:var(--x-animation-duration-base)}.x-date-range-active .x-date-range-group{border-color:var(--x-primary)}.x-date-range-active-start .x-date-range-active-bar{left:0}.x-date-range-active-end .x-date-range-active-bar{left:50%}\n"] }]
1642
1805
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i2.XConfigService }, { type: i0.ChangeDetectorRef }, { type: i2$1.XPortalService }, { type: i0.ViewContainerRef }, { type: i1.DatePipe }, { type: i4$1.Overlay }]; }, propDecorators: { dateRange: [{
1643
1806
  type: ViewChild,
1644
1807
  args: ['dateRange', { static: true }]
@@ -1738,3 +1901,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
1738
1901
 
1739
1902
  export { XDatePickerComponent, XDatePickerModule, XDatePickerPortalComponent, XDatePickerPortalPrefix, XDatePickerPrefix, XDatePickerProperty, XDateRangeComponent, XDateRangePortalComponent, XDateRangePortalPrefix, XDateRangePrefix, XDateRangeProperty, XPickerDateComponent, XPickerDatePrefix, XPickerDateProperty, XPickerMonthComponent, XPickerMonthPrefix, XPickerMonthProperty, XPickerYearComponent, XPickerYearPrefix, XPickerYearProperty };
1740
1903
  //# sourceMappingURL=ng-nest-ui-date-picker.mjs.map
1904
+ //# sourceMappingURL=ng-nest-ui-date-picker.mjs.map