ngx-kit 8.3.4 → 8.3.5

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.
@@ -1,17 +1,36 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, signal, input, model, EventEmitter, forwardRef, Output, Input, Component, ViewContainerRef, Renderer2, HostListener, Directive, viewChild, ChangeDetectionStrategy } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, input, model, signal, effect, Directive, EventEmitter, forwardRef, Output, Component, output, ViewContainerRef, Renderer2, HostListener, Input, viewChild, ChangeDetectionStrategy } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
4
4
  import * as i1 from '@angular/common';
5
5
  import { CommonModule } from '@angular/common';
6
6
  import { OverlayService } from 'ngx-kit/core';
7
7
 
8
- class NgxDatePickerConfig {
8
+ class NgxCalendarLocalization {
9
+ clear = 'Clear';
10
+ today = 'Today';
11
+ /** Range picker labels. */
12
+ rangeStart = 'Start date';
13
+ rangeEnd = 'End date';
14
+ day = 'Day';
15
+ month = 'Month';
16
+ week = 'Week';
17
+ year = 'Year';
18
+ event = 'Event';
19
+ }
20
+ class NgxDateConfig {
21
+ localization = new NgxCalendarLocalization();
9
22
  previousButtonTemplate;
10
23
  nextButtonTemplate;
11
24
  caretDownIconTemplate;
12
25
  todayButton = true;
13
26
  clearButton = true;
27
+ locale = 'en';
28
+ adapters;
14
29
  }
30
+ const DEFAULT_DATE_CONFIG = new NgxDateConfig();
31
+ const NGX_DATE_CONFIG = new InjectionToken('ngx-kit-date-config', {
32
+ factory: () => DEFAULT_DATE_CONFIG,
33
+ });
15
34
 
16
35
  /**
17
36
  * Matches strings that have the form of a valid RFC 3339 string
@@ -1430,18 +1449,21 @@ class ChineseAdapter {
1430
1449
  }
1431
1450
  }
1432
1451
 
1433
- const DATE_ADAPTERS = new InjectionToken('DATE_ADAPTERS');
1434
- const DEFAULT_DATE_ADAPTERS = Object.freeze([
1452
+ const DEFAULT_DATE_ADAPTERS = [
1435
1453
  { locale: 'en', useClass: GregorianAdapter },
1436
1454
  { locale: 'fa', useClass: JalaliAdapter },
1437
1455
  { locale: 'hi', useClass: HijriAdapter },
1438
1456
  { locale: 'zh', useClass: ChineseAdapter },
1439
- ]);
1457
+ ];
1440
1458
  function getLocals() {
1441
1459
  const adapters = inject(DATE_ADAPTERS);
1442
1460
  return adapters.map((m) => m.locale);
1443
1461
  }
1444
1462
 
1463
+ const DATE_ADAPTERS = new InjectionToken('ngx-date-adapters', {
1464
+ factory: () => DEFAULT_DATE_ADAPTERS,
1465
+ });
1466
+
1445
1467
  class DateAdapterRegistry {
1446
1468
  adapters = inject(DATE_ADAPTERS);
1447
1469
  resolve(locale) {
@@ -1484,9 +1506,17 @@ function convertNumberToTime(num) {
1484
1506
  }
1485
1507
 
1486
1508
  class NgxDatePickerBase {
1487
- _locale = 'en';
1509
+ _config = inject(NGX_DATE_CONFIG);
1510
+ locale = input(this._config.locale ?? 'en', /* @ts-ignore */
1511
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
1512
+ localize = input(this._config.localization ?? new NgxCalendarLocalization(), /* @ts-ignore */
1513
+ ...(ngDevMode ? [{ debugName: "localize" }] : /* istanbul ignore next */ []));
1514
+ config = model(this._config, /* @ts-ignore */
1515
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
1488
1516
  dateAdapterRegistry = inject(DateAdapterRegistry);
1489
- adapter = this.dateAdapterRegistry.resolve(this._locale);
1517
+ adapter = this.dateAdapterRegistry.resolve(this.locale());
1518
+ min = input(null, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: deserialize });
1519
+ max = input(null, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: deserialize });
1490
1520
  currYear = signal(0, /* @ts-ignore */
1491
1521
  ...(ngDevMode ? [{ debugName: "currYear" }] : /* istanbul ignore next */ []));
1492
1522
  currMonth = signal(0, /* @ts-ignore */
@@ -1504,6 +1534,20 @@ class NgxDatePickerBase {
1504
1534
  ...(ngDevMode ? [{ debugName: "displayMonth" }] : /* istanbul ignore next */ []));
1505
1535
  minDate = null;
1506
1536
  maxDate = null;
1537
+ constructor() {
1538
+ effect(() => {
1539
+ const minDate = this.min();
1540
+ const maxDate = this.max();
1541
+ const minChanged = !sameDate(minDate, this.minDate);
1542
+ const maxChanged = !sameDate(maxDate, this.maxDate);
1543
+ if (!minChanged && !maxChanged)
1544
+ return;
1545
+ this.minDate = minDate;
1546
+ this.maxDate = maxDate;
1547
+ this.onDateBoundsChange();
1548
+ });
1549
+ }
1550
+ onDateBoundsChange() { }
1507
1551
  renderCalendar(view, selected, events, callback) {
1508
1552
  switch (view) {
1509
1553
  case 'month':
@@ -1613,7 +1657,7 @@ class NgxDatePickerBase {
1613
1657
  for (let i = firstDayOfMonth; i > 0; i--) {
1614
1658
  const day = lastDateOfLastMonth - i + 1;
1615
1659
  const date = this.adapter.getDate({
1616
- locale: this._locale,
1660
+ locale: this.locale(),
1617
1661
  year: this.currYear(),
1618
1662
  month: this.currMonth() - 1,
1619
1663
  day,
@@ -1631,7 +1675,7 @@ class NgxDatePickerBase {
1631
1675
  const today = this.adapter.today();
1632
1676
  const isToday = day === today.day && this.currMonth() === today.month && this.currYear() === today.year;
1633
1677
  const date = this.adapter.getDate({
1634
- locale: this._locale,
1678
+ locale: this.locale(),
1635
1679
  year: this.currYear(),
1636
1680
  month: this.currMonth(),
1637
1681
  day,
@@ -1650,7 +1694,7 @@ class NgxDatePickerBase {
1650
1694
  for (let i = lastDayOfMonth; i < 6; i++) {
1651
1695
  const day = i - lastDayOfMonth + 1;
1652
1696
  const date = this.adapter.getDate({
1653
- locale: this._locale,
1697
+ locale: this.locale(),
1654
1698
  year: this.currYear(),
1655
1699
  month: this.currMonth() + 1,
1656
1700
  day,
@@ -1670,9 +1714,9 @@ class NgxDatePickerBase {
1670
1714
  return c === 0;
1671
1715
  }
1672
1716
  checkActiveMonth(year, month) {
1673
- const fd = this.adapter.getDate({ locale: this._locale, year, month, day: 1 });
1717
+ const fd = this.adapter.getDate({ locale: this.locale(), year, month, day: 1 });
1674
1718
  const ld = this.adapter.getDate({
1675
- locale: this._locale,
1719
+ locale: this.locale(),
1676
1720
  year,
1677
1721
  month,
1678
1722
  day: this.adapter.lastDateofMonth(year, month),
@@ -1682,7 +1726,7 @@ class NgxDatePickerBase {
1682
1726
  return clampMonth(fd, min, max) === 0 && clampMonth(ld, min, max) === 0;
1683
1727
  }
1684
1728
  checkActiveYear(year) {
1685
- const d = this.adapter.getDate({ locale: this._locale, year, month: 1, day: 1 });
1729
+ const d = this.adapter.getDate({ locale: this.locale(), year, month: 1, day: 1 });
1686
1730
  return clampYear(d, this.minDate, this.maxDate) === 0;
1687
1731
  }
1688
1732
  getEvents(date, events) {
@@ -1714,56 +1758,14 @@ class NgxDatePickerBase {
1714
1758
  };
1715
1759
  });
1716
1760
  }
1761
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDatePickerBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1762
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.4", type: NgxDatePickerBase, isStandalone: true, inputs: { locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, localize: { classPropertyName: "localize", publicName: "localize", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange" }, ngImport: i0 });
1717
1763
  }
1718
-
1719
- const NGX_CALENDAR_LOCALIZATION = new InjectionToken('ngx-calendar-localization', {
1720
- factory: () => DEFAULT_NGX_CALENDAR_LOCALIZATION,
1721
- });
1722
- class NgxCalendarLocalization {
1723
- clear = 'Clear';
1724
- today = 'Today';
1725
- /** Range picker labels. */
1726
- rangeStart = 'Start date';
1727
- rangeEnd = 'End date';
1728
- day = 'Day';
1729
- month = 'Month';
1730
- week = 'Week';
1731
- year = 'Year';
1732
- event = 'Event';
1733
- }
1734
- const DEFAULT_NGX_CALENDAR_LOCALIZATION = new NgxCalendarLocalization();
1764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDatePickerBase, decorators: [{
1765
+ type: Directive
1766
+ }], ctorParameters: () => [], propDecorators: { locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], localize: [{ type: i0.Input, args: [{ isSignal: true, alias: "localize", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }, { type: i0.Output, args: ["configChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }] } });
1735
1767
 
1736
1768
  class NgxInputDatePickerComponent extends NgxDatePickerBase {
1737
- defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);
1738
- localize = input(this.defaultLocalization, /* @ts-ignore */
1739
- ...(ngDevMode ? [{ debugName: "localize" }] : /* istanbul ignore next */ []));
1740
- config = new NgxDatePickerConfig();
1741
- set setConfig(val) {
1742
- this.config = { ...new NgxDatePickerConfig(), ...val };
1743
- }
1744
- set locale(val) {
1745
- this._locale = val;
1746
- this.adapter = this.dateAdapterRegistry.resolve(this._locale);
1747
- this.init();
1748
- }
1749
- /** The minimum valid date. */
1750
- set setMin(value) {
1751
- const validValue = deserialize(value);
1752
- if (!sameDate(validValue, this.minDate)) {
1753
- this.minDate = validValue;
1754
- this._validatorOnChange();
1755
- this.init();
1756
- }
1757
- }
1758
- /** The maximum valid date. */
1759
- set setMax(value) {
1760
- const validValue = deserialize(value);
1761
- if (!sameDate(validValue, this.maxDate)) {
1762
- this.maxDate = validValue;
1763
- this._validatorOnChange();
1764
- this.init();
1765
- }
1766
- }
1767
1769
  view = model('day', /* @ts-ignore */
1768
1770
  ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
1769
1771
  change = new EventEmitter();
@@ -1777,12 +1779,20 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1777
1779
  _validatorOnChange = () => { };
1778
1780
  constructor() {
1779
1781
  super();
1782
+ effect(() => {
1783
+ this.adapter = this.dateAdapterRegistry.resolve(this.locale());
1784
+ this.init();
1785
+ });
1780
1786
  }
1781
1787
  ngOnInit() {
1782
1788
  this.init();
1783
1789
  }
1790
+ onDateBoundsChange() {
1791
+ this._validatorOnChange();
1792
+ this.init();
1793
+ }
1784
1794
  updateConfig(val) {
1785
- this.config = { ...new NgxDatePickerConfig(), ...val };
1795
+ this.config.set({ ...this.config(), ...val });
1786
1796
  }
1787
1797
  init() {
1788
1798
  this.months = this.adapter.longMonths;
@@ -1900,7 +1910,7 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1900
1910
  ev.stopPropagation();
1901
1911
  if (item.active) {
1902
1912
  this.selected = {
1903
- locale: this._locale,
1913
+ locale: this.locale(),
1904
1914
  year: this.currYear(),
1905
1915
  month: this.currMonth(),
1906
1916
  day: item.day,
@@ -1931,7 +1941,7 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1931
1941
  ev.stopPropagation();
1932
1942
  }
1933
1943
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputDatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1934
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxInputDatePickerComponent, isStandalone: true, selector: "ngx-date-picker", inputs: { localize: { classPropertyName: "localize", publicName: "localize", isSignal: true, isRequired: false, transformFunction: null }, setConfig: { classPropertyName: "setConfig", publicName: "config", isSignal: false, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: false, isRequired: false, transformFunction: null }, setMin: { classPropertyName: "setMin", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, setMax: { classPropertyName: "setMax", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", change: "change" }, providers: [
1944
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxInputDatePickerComponent, isStandalone: true, selector: "ngx-date-picker", inputs: { view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", change: "change" }, providers: [
1935
1945
  DateAdapterRegistry,
1936
1946
  {
1937
1947
  provide: NG_VALUE_ACCESSOR,
@@ -1943,7 +1953,7 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1943
1953
  useExisting: forwardRef(() => NgxInputDatePickerComponent),
1944
1954
  multi: true,
1945
1955
  },
1946
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" #datepickerWrapper (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <svg\n class=\"calendar-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16 2V6M8 2V6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5.34315 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 19.6569 21 17.7712 21 14V12C21 8.22876 21 6.34315 19.8284 5.17157C18.6569 4 16.7712 4 13 4Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M3 10H21\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.9955 14H12.0045M11.9955 18H12.0045M15.991 14H16M8 14H8.00897M8 18H8.00897\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n {{ calendarHeader() }}\n </div>\n <div class=\"sub-header\">\n <div class=\"icons\">\n <span id=\"prev\" (click)=\"previous()\">\n <ng-template\n [ngTemplateOutlet]=\"\n config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </span>\n </div>\n <span class=\"current-date\">\n <span (click)=\"changeView('year')\">\n {{ currYear() }}\n <ng-template\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n <span (click)=\"changeView('month')\">\n {{ displayMonth() }}\n <ng-template\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n </span>\n <div class=\"icons\">\n <span id=\"next\" (click)=\"next()\">\n <ng-template\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </span>\n </div>\n </div>\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">\n {{ w.min }}\n </li>\n }\n </ul>\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n {{ item.day }}\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else if (view() === 'year') {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n <!-- <pre>\n currYear={{currYear}}\n currMonth={{currMonth}}\n {{selected|json}}\n </pre> -->\n <div class=\"calendar-footer\">\n @if (config.clearButton) {\n <button (click)=\"clear()\">\n {{ localize().clear }}\n </button>\n }\n @if (config.todayButton) {\n <button (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultCaretDownIcon>\n <svg width=\"10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #0e1428);--ngx-color-text: light-dark(#000, #fff);--ngx-border-color: light-dark(#c0c0c0, #c0c0c0);--ngx-datepicker-header-bg: light-dark( linear-gradient(to right, #643edf, #865bf3), linear-gradient(to right, #34158c, #441ba8) );--ngx-datepicker-header-text: light-dark(#fff, #fff);--ngx-datepicker-subheader-bg: light-dark(#e0d5ef, #0f1529);--ngx-datepicker-subheader-text: light-dark(#272727, #d2b9f9);--ngx-datepicker-font-size: 12px;--ngx-datepicker-active-bg: light-dark( linear-gradient(to bottom, #8753ff, #5325c9), linear-gradient(to bottom, #8753ff, #5325c9) );--ngx-datepicker-active-text: light-dark(#fff, #fff);--ngx-datepicker-today-color: light-dark(#5325c9, #5325c9)}.wrapper{background:var(--ngx-color-bg);box-shadow:0 15px 40px #0000001f;color:var(--ngx-color-text);border-radius:6px;overflow:hidden;font-size:var(--ngx-datepicker-font-size);width:330px}.wrapper .header{display:flex;align-items:center;justify-content:center;text-align:center;padding:15px 15px 10px;background:var(--ngx-datepicker-header-bg);color:var(--ngx-datepicker-header-text);font-size:1.5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wrapper .calendar-icon{background-color:#f3f3f33f;border-radius:29px;padding:6px;width:40px;min-width:40px;height:40px;corner-shape:squircle;margin:0 6px}.wrapper .sub-header{display:flex;align-items:center;padding:5px 10px;background-color:var(--ngx-datepicker-subheader-bg);color:var(--ngx-datepicker-subheader-text)}.wrapper .sub-header .current-date{font-size:1.5em;flex:auto;display:flex;align-items:center}.wrapper .sub-header .current-date span{flex:auto;text-align:center}.wrapper .sub-header .icons{display:flex}.wrapper .sub-header .icons span{height:38px;width:38px;margin:0 1px;cursor:pointer;color:#878787;text-align:center;line-height:38px;font-size:1.9rem;-webkit-user-select:none;user-select:none;border:1px rgba(176,176,176,.0901960784) solid;border-radius:5px}.wrapper .sub-header .icons span:hover{background:#f2f2f225}.wrapper .calendar-footer{display:flex;justify-content:space-between;gap:5px}.wrapper .calendar-footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s;border:1px rgba(168,168,168,.1411764706) solid}.wrapper .calendar-footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.calendar{padding:10px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;text-align:center;padding:0;margin:0}.calendar .days{margin-bottom:20px}.calendar .days li{width:14.2857142857%;aspect-ratio:1/1}.calendar .months{margin-bottom:20px}.calendar .months li{width:33.3333333333%;height:44px}.calendar .years{margin-bottom:20px}.calendar .years li{width:25%;height:44px}.calendar li{z-index:1;cursor:pointer;position:relative;color:#333;font-size:1.2em;border-radius:50px;display:flex;align-items:center;justify-content:center;border:1px transparent solid;transition:all .3s;color:inherit}.calendar li:not(.active):hover{background:#dfdfdf68}.calendar li.de-active{opacity:.2}.calendar li.selected{background:var(--ngx-datepicker-active-bg)!important;color:var(--ngx-datepicker-active-text)}.calendar li.today{border:1px var(--ngx-datepicker-today-color) solid!important}.calendar .weeks{border-bottom:1px rgba(231,231,231,.3450980392) solid;margin-bottom:10px;padding-bottom:5px}.calendar .weeks li{font-weight:500;cursor:default;flex:auto;flex-wrap:nowrap}.calendar .weeks li:hover{background:none}::ng-deep body[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep body[dir=rtl] .wrapper .sub-header .icons #prev,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #prev{transform:rotate(180deg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
1956
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" #datepickerWrapper (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <svg\n class=\"calendar-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16 2V6M8 2V6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5.34315 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 19.6569 21 17.7712 21 14V12C21 8.22876 21 6.34315 19.8284 5.17157C18.6569 4 16.7712 4 13 4Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M3 10H21\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.9955 14H12.0045M11.9955 18H12.0045M15.991 14H16M8 14H8.00897M8 18H8.00897\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n {{ calendarHeader() }}\n </div>\n <div class=\"sub-header\">\n <div class=\"icons\">\n <span id=\"prev\" (click)=\"previous()\">\n <ng-template\n [ngTemplateOutlet]=\"\n config().previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </span>\n </div>\n <span class=\"current-date\">\n <span (click)=\"changeView('year')\">\n {{ currYear() }}\n <ng-template\n [ngTemplateOutlet]=\"config().caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n <span (click)=\"changeView('month')\">\n {{ displayMonth() }}\n <ng-template\n [ngTemplateOutlet]=\"config().caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n </span>\n <div class=\"icons\">\n <span id=\"next\" (click)=\"next()\">\n <ng-template\n [ngTemplateOutlet]=\"config().nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </span>\n </div>\n </div>\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">\n {{ w.min }}\n </li>\n }\n </ul>\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n {{ item.day }}\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else if (view() === 'year') {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n <!-- <pre>\n currYear={{currYear}}\n currMonth={{currMonth}}\n {{selected|json}}\n </pre> -->\n <div class=\"calendar-footer\">\n @if (config().clearButton) {\n <button (click)=\"clear()\">\n {{ localize().clear }}\n </button>\n }\n @if (config().todayButton) {\n <button (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultCaretDownIcon>\n <svg width=\"10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #0e1428);--ngx-color-text: light-dark(#000, #fff);--ngx-border-color: light-dark(#c0c0c0, #c0c0c0);--ngx-datepicker-header-bg: light-dark( linear-gradient(to right, #643edf, #865bf3), linear-gradient(to right, #34158c, #441ba8) );--ngx-datepicker-header-text: light-dark(#fff, #fff);--ngx-datepicker-subheader-bg: light-dark(#e0d5ef, #0f1529);--ngx-datepicker-subheader-text: light-dark(#272727, #d2b9f9);--ngx-datepicker-font-size: 12px;--ngx-datepicker-active-bg: light-dark( linear-gradient(to bottom, #8753ff, #5325c9), linear-gradient(to bottom, #8753ff, #5325c9) );--ngx-datepicker-active-text: light-dark(#fff, #fff);--ngx-datepicker-today-color: light-dark(#5325c9, #5325c9)}.wrapper{background:var(--ngx-color-bg);box-shadow:0 15px 40px #0000001f;color:var(--ngx-color-text);border-radius:6px;overflow:hidden;font-size:var(--ngx-datepicker-font-size);width:330px}.wrapper .header{display:flex;align-items:center;justify-content:center;text-align:center;padding:5px 15px;background:var(--ngx-datepicker-header-bg);color:var(--ngx-datepicker-header-text);font-size:1.3em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wrapper .calendar-icon{background-color:#f3f3f33f;border-radius:29px;padding:6px;width:40px;min-width:40px;height:40px;corner-shape:squircle;margin:0 6px}.wrapper .sub-header{display:flex;align-items:center;padding:5px 10px;background-color:var(--ngx-datepicker-subheader-bg);color:var(--ngx-datepicker-subheader-text)}.wrapper .sub-header .current-date{font-size:1.3em;flex:auto;display:flex;align-items:center}.wrapper .sub-header .current-date span{flex:auto;text-align:center}.wrapper .sub-header .icons{display:flex}.wrapper .sub-header .icons span{height:38px;width:38px;margin:0 1px;cursor:pointer;color:#878787;text-align:center;line-height:38px;font-size:1.9rem;-webkit-user-select:none;user-select:none;border:1px rgba(176,176,176,.0901960784) solid;border-radius:5px}.wrapper .sub-header .icons span:hover{background:#f2f2f225}.wrapper .calendar-footer{display:flex;justify-content:space-between;gap:5px}.wrapper .calendar-footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s;border:1px rgba(168,168,168,.1411764706) solid}.wrapper .calendar-footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.calendar{padding:10px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;text-align:center;padding:0;margin:0}.calendar .days{margin-bottom:20px}.calendar .days li{width:14.2857142857%;aspect-ratio:1/1}.calendar .months{margin-bottom:20px}.calendar .months li{width:33.3333333333%;height:44px}.calendar .years{margin-bottom:20px}.calendar .years li{width:25%;height:44px}.calendar li{z-index:1;cursor:pointer;position:relative;color:#333;font-size:1em;border-radius:50px;display:flex;align-items:center;justify-content:center;border:1px transparent solid;transition:all .3s;color:inherit}.calendar li:not(.active):hover{background:#dfdfdf68}.calendar li.de-active{opacity:.2}.calendar li.selected{background:var(--ngx-datepicker-active-bg)!important;color:var(--ngx-datepicker-active-text)}.calendar li.today{border:1px var(--ngx-datepicker-today-color) solid!important}.calendar .weeks{border-bottom:1px rgba(231,231,231,.3450980392) solid;margin-bottom:10px;padding-bottom:5px}.calendar .weeks li{font-weight:500;cursor:default;flex:auto;flex-wrap:nowrap}.calendar .weeks li:hover{background:none}::ng-deep body[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep body[dir=rtl] .wrapper .sub-header .icons #prev,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #prev{transform:rotate(180deg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
1947
1957
  }
1948
1958
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputDatePickerComponent, decorators: [{
1949
1959
  type: Component,
@@ -1959,37 +1969,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
1959
1969
  useExisting: forwardRef(() => NgxInputDatePickerComponent),
1960
1970
  multi: true,
1961
1971
  },
1962
- ], template: "<div class=\"wrapper\" #datepickerWrapper (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <svg\n class=\"calendar-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16 2V6M8 2V6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5.34315 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 19.6569 21 17.7712 21 14V12C21 8.22876 21 6.34315 19.8284 5.17157C18.6569 4 16.7712 4 13 4Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M3 10H21\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.9955 14H12.0045M11.9955 18H12.0045M15.991 14H16M8 14H8.00897M8 18H8.00897\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n {{ calendarHeader() }}\n </div>\n <div class=\"sub-header\">\n <div class=\"icons\">\n <span id=\"prev\" (click)=\"previous()\">\n <ng-template\n [ngTemplateOutlet]=\"\n config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </span>\n </div>\n <span class=\"current-date\">\n <span (click)=\"changeView('year')\">\n {{ currYear() }}\n <ng-template\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n <span (click)=\"changeView('month')\">\n {{ displayMonth() }}\n <ng-template\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n </span>\n <div class=\"icons\">\n <span id=\"next\" (click)=\"next()\">\n <ng-template\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </span>\n </div>\n </div>\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">\n {{ w.min }}\n </li>\n }\n </ul>\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n {{ item.day }}\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else if (view() === 'year') {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n <!-- <pre>\n currYear={{currYear}}\n currMonth={{currMonth}}\n {{selected|json}}\n </pre> -->\n <div class=\"calendar-footer\">\n @if (config.clearButton) {\n <button (click)=\"clear()\">\n {{ localize().clear }}\n </button>\n }\n @if (config.todayButton) {\n <button (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultCaretDownIcon>\n <svg width=\"10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #0e1428);--ngx-color-text: light-dark(#000, #fff);--ngx-border-color: light-dark(#c0c0c0, #c0c0c0);--ngx-datepicker-header-bg: light-dark( linear-gradient(to right, #643edf, #865bf3), linear-gradient(to right, #34158c, #441ba8) );--ngx-datepicker-header-text: light-dark(#fff, #fff);--ngx-datepicker-subheader-bg: light-dark(#e0d5ef, #0f1529);--ngx-datepicker-subheader-text: light-dark(#272727, #d2b9f9);--ngx-datepicker-font-size: 12px;--ngx-datepicker-active-bg: light-dark( linear-gradient(to bottom, #8753ff, #5325c9), linear-gradient(to bottom, #8753ff, #5325c9) );--ngx-datepicker-active-text: light-dark(#fff, #fff);--ngx-datepicker-today-color: light-dark(#5325c9, #5325c9)}.wrapper{background:var(--ngx-color-bg);box-shadow:0 15px 40px #0000001f;color:var(--ngx-color-text);border-radius:6px;overflow:hidden;font-size:var(--ngx-datepicker-font-size);width:330px}.wrapper .header{display:flex;align-items:center;justify-content:center;text-align:center;padding:15px 15px 10px;background:var(--ngx-datepicker-header-bg);color:var(--ngx-datepicker-header-text);font-size:1.5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wrapper .calendar-icon{background-color:#f3f3f33f;border-radius:29px;padding:6px;width:40px;min-width:40px;height:40px;corner-shape:squircle;margin:0 6px}.wrapper .sub-header{display:flex;align-items:center;padding:5px 10px;background-color:var(--ngx-datepicker-subheader-bg);color:var(--ngx-datepicker-subheader-text)}.wrapper .sub-header .current-date{font-size:1.5em;flex:auto;display:flex;align-items:center}.wrapper .sub-header .current-date span{flex:auto;text-align:center}.wrapper .sub-header .icons{display:flex}.wrapper .sub-header .icons span{height:38px;width:38px;margin:0 1px;cursor:pointer;color:#878787;text-align:center;line-height:38px;font-size:1.9rem;-webkit-user-select:none;user-select:none;border:1px rgba(176,176,176,.0901960784) solid;border-radius:5px}.wrapper .sub-header .icons span:hover{background:#f2f2f225}.wrapper .calendar-footer{display:flex;justify-content:space-between;gap:5px}.wrapper .calendar-footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s;border:1px rgba(168,168,168,.1411764706) solid}.wrapper .calendar-footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.calendar{padding:10px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;text-align:center;padding:0;margin:0}.calendar .days{margin-bottom:20px}.calendar .days li{width:14.2857142857%;aspect-ratio:1/1}.calendar .months{margin-bottom:20px}.calendar .months li{width:33.3333333333%;height:44px}.calendar .years{margin-bottom:20px}.calendar .years li{width:25%;height:44px}.calendar li{z-index:1;cursor:pointer;position:relative;color:#333;font-size:1.2em;border-radius:50px;display:flex;align-items:center;justify-content:center;border:1px transparent solid;transition:all .3s;color:inherit}.calendar li:not(.active):hover{background:#dfdfdf68}.calendar li.de-active{opacity:.2}.calendar li.selected{background:var(--ngx-datepicker-active-bg)!important;color:var(--ngx-datepicker-active-text)}.calendar li.today{border:1px var(--ngx-datepicker-today-color) solid!important}.calendar .weeks{border-bottom:1px rgba(231,231,231,.3450980392) solid;margin-bottom:10px;padding-bottom:5px}.calendar .weeks li{font-weight:500;cursor:default;flex:auto;flex-wrap:nowrap}.calendar .weeks li:hover{background:none}::ng-deep body[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep body[dir=rtl] .wrapper .sub-header .icons #prev,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #prev{transform:rotate(180deg)}\n"] }]
1963
- }], ctorParameters: () => [], propDecorators: { localize: [{ type: i0.Input, args: [{ isSignal: true, alias: "localize", required: false }] }], setConfig: [{
1964
- type: Input,
1965
- args: ['config']
1966
- }], locale: [{
1967
- type: Input
1968
- }], setMin: [{
1969
- type: Input,
1970
- args: ['min']
1971
- }], setMax: [{
1972
- type: Input,
1973
- args: ['max']
1974
- }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], change: [{
1972
+ ], template: "<div class=\"wrapper\" #datepickerWrapper (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <svg\n class=\"calendar-icon\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M16 2V6M8 2V6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5.34315 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 19.6569 21 17.7712 21 14V12C21 8.22876 21 6.34315 19.8284 5.17157C18.6569 4 16.7712 4 13 4Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M3 10H21\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.9955 14H12.0045M11.9955 18H12.0045M15.991 14H16M8 14H8.00897M8 18H8.00897\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n {{ calendarHeader() }}\n </div>\n <div class=\"sub-header\">\n <div class=\"icons\">\n <span id=\"prev\" (click)=\"previous()\">\n <ng-template\n [ngTemplateOutlet]=\"\n config().previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </span>\n </div>\n <span class=\"current-date\">\n <span (click)=\"changeView('year')\">\n {{ currYear() }}\n <ng-template\n [ngTemplateOutlet]=\"config().caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n <span (click)=\"changeView('month')\">\n {{ displayMonth() }}\n <ng-template\n [ngTemplateOutlet]=\"config().caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\n </span>\n </span>\n <div class=\"icons\">\n <span id=\"next\" (click)=\"next()\">\n <ng-template\n [ngTemplateOutlet]=\"config().nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </span>\n </div>\n </div>\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">\n {{ w.min }}\n </li>\n }\n </ul>\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n {{ item.day }}\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else if (view() === 'year') {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n <!-- <pre>\n currYear={{currYear}}\n currMonth={{currMonth}}\n {{selected|json}}\n </pre> -->\n <div class=\"calendar-footer\">\n @if (config().clearButton) {\n <button (click)=\"clear()\">\n {{ localize().clear }}\n </button>\n }\n @if (config().todayButton) {\n <button (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultCaretDownIcon>\n <svg width=\"10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #0e1428);--ngx-color-text: light-dark(#000, #fff);--ngx-border-color: light-dark(#c0c0c0, #c0c0c0);--ngx-datepicker-header-bg: light-dark( linear-gradient(to right, #643edf, #865bf3), linear-gradient(to right, #34158c, #441ba8) );--ngx-datepicker-header-text: light-dark(#fff, #fff);--ngx-datepicker-subheader-bg: light-dark(#e0d5ef, #0f1529);--ngx-datepicker-subheader-text: light-dark(#272727, #d2b9f9);--ngx-datepicker-font-size: 12px;--ngx-datepicker-active-bg: light-dark( linear-gradient(to bottom, #8753ff, #5325c9), linear-gradient(to bottom, #8753ff, #5325c9) );--ngx-datepicker-active-text: light-dark(#fff, #fff);--ngx-datepicker-today-color: light-dark(#5325c9, #5325c9)}.wrapper{background:var(--ngx-color-bg);box-shadow:0 15px 40px #0000001f;color:var(--ngx-color-text);border-radius:6px;overflow:hidden;font-size:var(--ngx-datepicker-font-size);width:330px}.wrapper .header{display:flex;align-items:center;justify-content:center;text-align:center;padding:5px 15px;background:var(--ngx-datepicker-header-bg);color:var(--ngx-datepicker-header-text);font-size:1.3em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wrapper .calendar-icon{background-color:#f3f3f33f;border-radius:29px;padding:6px;width:40px;min-width:40px;height:40px;corner-shape:squircle;margin:0 6px}.wrapper .sub-header{display:flex;align-items:center;padding:5px 10px;background-color:var(--ngx-datepicker-subheader-bg);color:var(--ngx-datepicker-subheader-text)}.wrapper .sub-header .current-date{font-size:1.3em;flex:auto;display:flex;align-items:center}.wrapper .sub-header .current-date span{flex:auto;text-align:center}.wrapper .sub-header .icons{display:flex}.wrapper .sub-header .icons span{height:38px;width:38px;margin:0 1px;cursor:pointer;color:#878787;text-align:center;line-height:38px;font-size:1.9rem;-webkit-user-select:none;user-select:none;border:1px rgba(176,176,176,.0901960784) solid;border-radius:5px}.wrapper .sub-header .icons span:hover{background:#f2f2f225}.wrapper .calendar-footer{display:flex;justify-content:space-between;gap:5px}.wrapper .calendar-footer button{outline:none;background:none;color:inherit;border:none;border-radius:4px;padding:8px 15px;box-shadow:none;transition:all .3s;border:1px rgba(168,168,168,.1411764706) solid}.wrapper .calendar-footer button:not([disabled]):hover{cursor:pointer;background:#816ef175}.calendar{padding:10px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;text-align:center;padding:0;margin:0}.calendar .days{margin-bottom:20px}.calendar .days li{width:14.2857142857%;aspect-ratio:1/1}.calendar .months{margin-bottom:20px}.calendar .months li{width:33.3333333333%;height:44px}.calendar .years{margin-bottom:20px}.calendar .years li{width:25%;height:44px}.calendar li{z-index:1;cursor:pointer;position:relative;color:#333;font-size:1em;border-radius:50px;display:flex;align-items:center;justify-content:center;border:1px transparent solid;transition:all .3s;color:inherit}.calendar li:not(.active):hover{background:#dfdfdf68}.calendar li.de-active{opacity:.2}.calendar li.selected{background:var(--ngx-datepicker-active-bg)!important;color:var(--ngx-datepicker-active-text)}.calendar li.today{border:1px var(--ngx-datepicker-today-color) solid!important}.calendar .weeks{border-bottom:1px rgba(231,231,231,.3450980392) solid;margin-bottom:10px;padding-bottom:5px}.calendar .weeks li{font-weight:500;cursor:default;flex:auto;flex-wrap:nowrap}.calendar .weeks li:hover{background:none}::ng-deep body[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep body[dir=rtl] .wrapper .sub-header .icons #prev,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #next,::ng-deep html[dir=rtl] .wrapper .sub-header .icons #prev{transform:rotate(180deg)}\n"] }]
1973
+ }], ctorParameters: () => [], propDecorators: { view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], change: [{
1975
1974
  type: Output
1976
1975
  }] } });
1977
1976
 
1978
1977
  class NgxInputDatePicker {
1979
1978
  el;
1980
1979
  dateAdapterRegistry = inject(DateAdapterRegistry);
1980
+ _config = inject(NGX_DATE_CONFIG);
1981
1981
  openOnCLick = input(true, /* @ts-ignore */
1982
1982
  ...(ngDevMode ? [{ debugName: "openOnCLick" }] : /* istanbul ignore next */ []));
1983
- change = new EventEmitter();
1983
+ change = output();
1984
1984
  value;
1985
1985
  pickerRef;
1986
1986
  adapter;
1987
- _locale = 'en';
1988
- set locale(val) {
1989
- this._locale = val || 'en';
1990
- this.adapter = this.dateAdapterRegistry.resolve(this._locale);
1991
- this._formatValue(this.value);
1992
- }
1987
+ config = model(this._config, /* @ts-ignore */
1988
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
1989
+ locale = input(this.config().locale ?? 'en', /* @ts-ignore */
1990
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
1993
1991
  _onChange = (value) => { };
1994
1992
  _onTouched = () => { };
1995
1993
  _validatorOnChange = () => { };
@@ -1997,39 +1995,36 @@ class NgxInputDatePicker {
1997
1995
  * display format in input
1998
1996
  */
1999
1997
  displayFormat = 'yyyy/MM/dd';
2000
- min = null;
2001
- /** The minimum valid date. */
2002
- set setMin(value) {
2003
- const validValue = deserialize(value);
2004
- if (!sameDate(validValue, this.min)) {
2005
- this.min = validValue;
2006
- this._validatorOnChange();
2007
- }
2008
- }
2009
- max = null;
2010
- /** The maximum valid date. */
2011
- set setMax(value) {
2012
- const validValue = deserialize(value);
2013
- if (!sameDate(validValue, this.max)) {
2014
- this.max = validValue;
2015
- this._validatorOnChange();
2016
- }
2017
- }
2018
- config = new NgxDatePickerConfig();
2019
- set setConfig(val) {
2020
- this.config = { ...new NgxDatePickerConfig(), ...val };
2021
- }
1998
+ /** The minimum and maximum valid dates. */
1999
+ min = input(null, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: deserialize });
2000
+ max = input(null, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: deserialize });
2001
+ minDate = null;
2002
+ maxDate = null;
2022
2003
  isDisabled = false;
2023
2004
  overlayService = inject(OverlayService);
2024
2005
  viewContainerRef = inject(ViewContainerRef);
2025
2006
  renderer = inject(Renderer2);
2026
2007
  constructor(el) {
2027
2008
  this.el = el;
2009
+ effect(() => {
2010
+ const locale = this.locale();
2011
+ this.adapter = this.dateAdapterRegistry.resolve(locale);
2012
+ this._formatValue(this.value);
2013
+ });
2014
+ effect(() => {
2015
+ const minDate = this.min();
2016
+ const maxDate = this.max();
2017
+ if (sameDate(minDate, this.minDate) && sameDate(maxDate, this.maxDate))
2018
+ return;
2019
+ this.minDate = minDate;
2020
+ this.maxDate = maxDate;
2021
+ this._validatorOnChange();
2022
+ });
2028
2023
  }
2029
2024
  updateConfig(val) {
2030
- this.config = { ...new NgxDatePickerConfig(), ...val };
2025
+ this.config.set({ ...this.config(), ...val });
2031
2026
  if (this.pickerRef && this.pickerRef.componentRef) {
2032
- this.pickerRef.componentRef.instance.updateConfig(this.config);
2027
+ this.pickerRef.componentRef.instance.updateConfig(this.config());
2033
2028
  }
2034
2029
  }
2035
2030
  ngOnDestroy() {
@@ -2088,10 +2083,10 @@ class NgxInputDatePicker {
2088
2083
  placement: 'bottom',
2089
2084
  margin: 2,
2090
2085
  configure: (instance, ref) => {
2091
- instance.locale = this._locale;
2092
- instance.minDate = this.min;
2093
- instance.maxDate = this.max;
2094
- instance.updateConfig(this.config);
2086
+ ref.componentRef?.setInput('locale', this.locale());
2087
+ ref.componentRef?.setInput('min', this.minDate);
2088
+ ref.componentRef?.setInput('max', this.maxDate);
2089
+ instance.updateConfig(this.config());
2095
2090
  instance.writeValue(this.value);
2096
2091
  instance.change.subscribe((c) => {
2097
2092
  this.value = c;
@@ -2122,17 +2117,17 @@ class NgxInputDatePicker {
2122
2117
  invalid: true,
2123
2118
  };
2124
2119
  }
2125
- let c = clampDate(this.value, this.min, this.max);
2120
+ let c = clampDate(this.value, this.minDate, this.maxDate);
2126
2121
  if (c < 0) {
2127
2122
  return {
2128
2123
  invalid: true,
2129
- min: this.min,
2124
+ min: this.minDate,
2130
2125
  };
2131
2126
  }
2132
2127
  else if (c > 0) {
2133
2128
  return {
2134
2129
  invalid: true,
2135
- max: this.max,
2130
+ max: this.maxDate,
2136
2131
  };
2137
2132
  }
2138
2133
  }
@@ -2151,7 +2146,7 @@ class NgxInputDatePicker {
2151
2146
  }
2152
2147
  }
2153
2148
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputDatePicker, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
2154
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.4", type: NgxInputDatePicker, isStandalone: true, selector: "[ngxInputDatePicker]", inputs: { openOnCLick: { classPropertyName: "openOnCLick", publicName: "openOnCLick", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: false, isRequired: false, transformFunction: null }, displayFormat: { classPropertyName: "displayFormat", publicName: "displayFormat", isSignal: false, isRequired: false, transformFunction: null }, setMin: { classPropertyName: "setMin", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, setMax: { classPropertyName: "setMax", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, setConfig: { classPropertyName: "setConfig", publicName: "config", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "click": "onClick($event)", "input": "onInput($event)", "blur": "onBlur()" }, properties: { "attr.readOnly": "true" }, classAttribute: "ngx-datepicker-input" }, providers: [
2149
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.4", type: NgxInputDatePicker, isStandalone: true, selector: "[ngxInputDatePicker]", inputs: { openOnCLick: { classPropertyName: "openOnCLick", publicName: "openOnCLick", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, displayFormat: { classPropertyName: "displayFormat", publicName: "displayFormat", isSignal: false, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change", config: "configChange" }, host: { listeners: { "click": "onClick($event)", "input": "onInput($event)", "blur": "onBlur()" }, properties: { "attr.readOnly": "true" }, classAttribute: "ngx-datepicker-input" }, providers: [
2155
2150
  DateAdapterRegistry,
2156
2151
  {
2157
2152
  provide: NG_VALUE_ACCESSOR,
@@ -2188,22 +2183,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
2188
2183
  },
2189
2184
  ],
2190
2185
  }]
2191
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { openOnCLick: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOnCLick", required: false }] }], change: [{
2192
- type: Output
2193
- }], locale: [{
2186
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { openOnCLick: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOnCLick", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }, { type: i0.Output, args: ["configChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], displayFormat: [{
2194
2187
  type: Input
2195
- }], displayFormat: [{
2196
- type: Input
2197
- }], setMin: [{
2198
- type: Input,
2199
- args: ['min']
2200
- }], setMax: [{
2201
- type: Input,
2202
- args: ['max']
2203
- }], setConfig: [{
2204
- type: Input,
2205
- args: ['config']
2206
- }], onClick: [{
2188
+ }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], onClick: [{
2207
2189
  type: HostListener,
2208
2190
  args: ['click', ['$event']]
2209
2191
  }], onInput: [{
@@ -2220,36 +2202,8 @@ const MIN_EVENT_MINUTES = 30;
2220
2202
  const MONTH_ROW_COUNT = 6;
2221
2203
  const MONTH_COLUMN_COUNT = 7;
2222
2204
  class NgxCalendarComponent extends NgxDatePickerBase {
2223
- defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);
2224
- localize = input(this.defaultLocalization, /* @ts-ignore */
2225
- ...(ngDevMode ? [{ debugName: "localize" }] : /* istanbul ignore next */ []));
2226
2205
  resizeAndMovable = input(false, /* @ts-ignore */
2227
2206
  ...(ngDevMode ? [{ debugName: "resizeAndMovable" }] : /* istanbul ignore next */ []));
2228
- _config = new NgxDatePickerConfig();
2229
- set config(val) {
2230
- this._config = { ...new NgxDatePickerConfig(), ...val };
2231
- }
2232
- set locale(val) {
2233
- this._locale = val || 'en';
2234
- this.adapter = this.dateAdapterRegistry.resolve(this._locale);
2235
- if (this.currYear() !== undefined)
2236
- this.syncAnchorToLocale();
2237
- this.renderCalendar(this.view);
2238
- }
2239
- set setMin(value) {
2240
- const validValue = deserialize(value);
2241
- if (!sameDate(validValue, this.minDate)) {
2242
- this.minDate = validValue;
2243
- this.renderCalendar(this.view);
2244
- }
2245
- }
2246
- set setMax(value) {
2247
- const validValue = deserialize(value);
2248
- if (!sameDate(validValue, this.maxDate)) {
2249
- this.maxDate = validValue;
2250
- this.renderCalendar(this.view);
2251
- }
2252
- }
2253
2207
  view = 'month';
2254
2208
  _events = [];
2255
2209
  set events(val) {
@@ -2282,6 +2236,12 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2282
2236
  interaction = null;
2283
2237
  constructor() {
2284
2238
  super();
2239
+ effect(() => {
2240
+ this.adapter = this.dateAdapterRegistry.resolve(this.locale());
2241
+ if (this.currYear() !== undefined)
2242
+ this.syncAnchorToLocale();
2243
+ this.renderCalendar(this.view);
2244
+ });
2285
2245
  }
2286
2246
  ngOnInit() {
2287
2247
  this.months = this.adapter.longMonths;
@@ -2290,6 +2250,9 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2290
2250
  this.syncAnchorToLocale();
2291
2251
  this.renderCalendar(this.view);
2292
2252
  }
2253
+ onDateBoundsChange() {
2254
+ this.renderCalendar(this.view);
2255
+ }
2293
2256
  onResize() {
2294
2257
  this.calcCellSize();
2295
2258
  }
@@ -2551,13 +2514,13 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2551
2514
  }
2552
2515
  renderEventView() {
2553
2516
  const monthStart = this.adapter.getDate({
2554
- locale: this._locale,
2517
+ locale: this.locale(),
2555
2518
  year: this.currYear(),
2556
2519
  month: this.currMonth(),
2557
2520
  day: 1,
2558
2521
  });
2559
2522
  const monthEnd = this.adapter.getDate({
2560
- locale: this._locale,
2523
+ locale: this.locale(),
2561
2524
  year: this.currYear(),
2562
2525
  month: this.currMonth(),
2563
2526
  day: this.adapter.lastDateofMonth(this.currYear(), this.currMonth()),
@@ -2631,7 +2594,7 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2631
2594
  if (this.view === 'month' || this.view === 'event') {
2632
2595
  const locale = this.adapter.toLocale(d);
2633
2596
  this.anchorDate.set(this.adapter.getDate({
2634
- locale: this._locale,
2597
+ locale: this.locale(),
2635
2598
  year: locale.year,
2636
2599
  month: locale.month + direction,
2637
2600
  day: 1,
@@ -2853,22 +2816,12 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2853
2816
  defaultHeight = 600;
2854
2817
  minHeight = this.defaultHeight;
2855
2818
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2856
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxCalendarComponent, isStandalone: true, selector: "ngx-calendar", inputs: { localize: { classPropertyName: "localize", publicName: "localize", isSignal: true, isRequired: false, transformFunction: null }, resizeAndMovable: { classPropertyName: "resizeAndMovable", publicName: "resizeAndMovable", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: false, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: false, isRequired: false, transformFunction: null }, setMin: { classPropertyName: "setMin", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, setMax: { classPropertyName: "setMax", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: false, isRequired: false, transformFunction: null }, events: { classPropertyName: "events", publicName: "events", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", selectEvent: "selectEvent", eventChange: "eventChange", eventsChange: "eventsChange" }, host: { listeners: { "window:resize": "onResize()", "document:pointermove": "onDocumentPointerMove($event)", "document:pointerup": "onDocumentPointerUp($event)", "document:pointercancel": "onDocumentPointerCancel($event)" } }, providers: [DateAdapterRegistry], viewQueries: [{ propertyName: "calendarWrapper", first: true, predicate: ["calendarWrapper"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" [class.is-interacting]=\"!!interaction\">\n <div class=\"header\">\n <div class=\"nxt-prv-buttons\">\n <button type=\"button\" class=\"previous dtp-btn\" (click)=\"previous()\" title=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n _config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n @if (_config.todayButton) {\n <button type=\"button\" class=\"today dtp-btn\" (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n <button type=\"button\" class=\"next dtp-btn\" (click)=\"next()\" title=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"_config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"current-date\" aria-live=\"polite\">{{ headerText }}</div>\n\n <div class=\"view-mode\">\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('month')\"\n [class.active]=\"view === 'month'\">\n {{ localize().month }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('week')\"\n [class.active]=\"view === 'week'\">\n {{ localize().week }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('day')\"\n [class.active]=\"view === 'day'\">\n {{ localize().day }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('event')\"\n [class.active]=\"view === 'event'\">\n {{ localize().event }}\n </button>\n </div>\n </div>\n\n <div class=\"calendar\" #calendarWrapper>\n @switch (view) {\n @case ('month') {\n <ul class=\"weeks\">\n @for (w of weeks; track $index) {\n <li>{{ w }}</li>\n }\n </ul>\n\n <div class=\"month-grid\" [style.minHeight.px]=\"minHeight\">\n @for (row of monthEventRows; track $index; let rowIndex = $index) {\n <div class=\"month-row\">\n @for (\n item of viewDays.slice(rowIndex * 7, rowIndex * 7 + 7);\n track item.date?.getTime() ?? $index\n ) {\n <button\n type=\"button\"\n class=\"month-day\"\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n <span class=\"day-number\">{{ item.day }}</span>\n </button>\n }\n\n <div class=\"month-event-layer\" aria-live=\"polite\">\n @for (event of row; track event.id ?? event.start.getTime() ?? $index) {\n <button\n type=\"button\"\n class=\"month-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [class.event-start]=\"event.isStart\"\n [class.event-end]=\"event.isEnd\"\n [class.is-dragging]=\"\n interaction?.source === event ||\n (interaction?.source?.id != null && interaction?.source?.id === event.id)\n \"\n [style.gridColumn]=\"event.startColumn + 1 + ' / ' + (event.endColumn + 2)\"\n [style.gridRow]=\"event.lane + 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startMonthEventInteraction($event, event)\"\n (click)=\"\n onclickEvent($event, { date: event.start, day: 0, active: true }, event)\n \">\n @if (event.isStart) {\n <span class=\"event-title\">{{ event.title || 'Untitled event' }}</span>\n } @else {\n <span class=\"event-title continuation-title\">{{ event.title || '' }}</span>\n }\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-h resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-h resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-end')\n \"></span>\n }\n }\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @case ('week') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('day') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('event') {\n <div class=\"event-list\">\n @if (eventViewItems.length) {\n @for (item of eventViewItems; track item.event.id ?? item.start.getTime()) {\n <button\n type=\"button\"\n class=\"event-list-item\"\n (click)=\"\n onclickEvent($event, { date: item.start, day: 0, active: true }, item.event)\n \">\n <span\n class=\"event-dot\"\n [style.background]=\"\n item.event.backgroundColor || item.event.color || null\n \"></span>\n <span class=\"event-copy\">\n <strong>{{ item.event.title || 'Untitled event' }}</strong>\n <small>\n {{ formatEventDate(item.start) }}\n @if (item.end.getTime() !== item.start.getTime()) {\n \u2013 {{ formatEventDate(item.end) }}\n }\n </small>\n </span>\n </button>\n }\n } @else {\n <div class=\"empty-events\">No events for this month.</div>\n }\n </div>\n }\n }\n </div>\n</div>\n\n<ng-template #timedCalendar>\n <div class=\"timed-calendar\">\n <div\n class=\"timed-header\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"corner\"></div>\n @for (day of weekDays; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"day-header\"\n [class.today]=\"day.isToday\"\n (click)=\"selectDay($event, { date: day.date, day: 0, active: true })\">\n <span>{{ day.label }}</span>\n <strong>{{ day.dayNumber }}</strong>\n </button>\n }\n </div>\n\n <div\n class=\"all-day-row\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"all-day-label\">All day</div>\n @for (day of weekDays; track day.date.getTime(); let i = $index) {\n <div class=\"all-day-cell\">\n @for (\n event of allDayByColumn[i];\n track event.id ?? event.title ?? event.start.getTime()\n ) {\n <button\n type=\"button\"\n class=\"timed-event all-day-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <span>{{ event.title || 'Untitled event' }}</span>\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-h resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startTimedEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-h resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n }\n </button>\n }\n </div>\n }\n </div>\n\n <div\n class=\"time-grid\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"time-axis\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-label\" [style.top.px]=\"(minutes / 60) * hourHeight\">\n @if (minutes % 60 === 0) {\n {{ formatTime(minutes) }}\n }\n </div>\n }\n </div>\n\n @for (day of weekDays; track day.date.getTime()) {\n <div class=\"day-column\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-slot\" [class.hour]=\"minutes % 60 === 0\"></div>\n }\n\n @for (event of day.events; track event.id ?? event.title ?? event.start.getTime()) {\n <button\n type=\"button\"\n class=\"timed-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.top.px]=\"event.top\"\n [style.height.px]=\"event.height\"\n [style.insetInlineStart.%]=\"event.column * (100 / event.columnCount)\"\n [style.width.%]=\"100 / event.columnCount - 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <strong>{{ event.title || 'Untitled event' }}</strong>\n @if (event.height >= 42) {\n <small>\n {{ formatTime(event.start.getHours() * 60 + event.start.getMinutes()) }}\n </small>\n }\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-v resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startTimedEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-v resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n }\n </button>\n }\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #171a24);--ngx-color-text: light-dark(#16181d, #f7f7f8);--ngx-border-color: light-dark(#e1e4ea, #303541);--ngx-muted: color-mix(in srgb, var(--ngx-color-text) 55%, transparent);--ngx-event-bg: light-dark(#eef0ff, #2f3150);--ngx-event-text: light-dark(#3547a4, #dce1ff);--ngx-today: #3f51b5}.wrapper{background:var(--ngx-color-bg);color:var(--ngx-color-text);border:1px solid var(--ngx-border-color);border-radius:10px;overflow:hidden}.wrapper .dtp-btn{background:none;border:none;color:inherit;border-radius:6px;padding:5px 12px;box-shadow:0 0 4px #0000001f;transition:background .16s ease,transform .16s ease;display:inline-flex;align-items:center;justify-content:center}.wrapper .dtp-btn:not([disabled]):hover{cursor:pointer;background:#7f7fa02e}.wrapper .dtp-btn.active{background:#7f7fa03d}.wrapper .dtp-btn svg{fill:currentColor}.wrapper .header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;border-bottom:1px solid var(--ngx-border-color)}.wrapper .header .current-date{text-align:center;flex:1;min-width:0;font-weight:700}.wrapper .nxt-prv-buttons,.wrapper .view-mode{display:flex;align-items:center;gap:4px}.calendar{padding:10px;min-width:0}.weeks{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));list-style:none;padding:0;margin:0 0 8px;border-inline-start:1px solid var(--ngx-border-color)}.weeks li{padding:7px 4px;text-align:center;color:var(--ngx-muted);font-size:11px;font-weight:700;border-inline-end:1px solid var(--ngx-border-color)}.month-grid{display:grid;grid-template-rows:repeat(6,minmax(92px,1fr));border-inline-start:1px solid var(--ngx-border-color);border-top:1px solid var(--ngx-border-color);position:relative}.month-row{position:relative;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));min-height:92px;border-bottom:1px solid var(--ngx-border-color)}.month-day{position:relative;min-width:0;min-height:92px;overflow:hidden;padding:4px;border:0;border-inline-end:1px solid var(--ngx-border-color);background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer;transition:background .15s ease}.month-day:hover{background:#7f7fa00d}.month-day.de-active{opacity:.48}.month-day.selected{outline:2px solid rgba(63,81,181,.3);outline-offset:-2px}.month-day.today .day-number{background:#3f51b51a;color:var(--ngx-today);font-weight:800}.day-number{width:27px;height:27px;display:grid;place-items:center;margin-inline-start:auto;border-radius:50%;font-size:12px;font-weight:600}.month-event-layer{position:absolute;inset:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:repeat(4,26px);pointer-events:none;padding-top:34px}.month-event{position:relative;z-index:3;min-width:0;height:22px;margin-inline:2px;padding:2px 7px;border:1px solid transparent;border-radius:5px;overflow:hidden;background:var(--ngx-event-bg);color:var(--ngx-event-text);font:inherit;font-size:11px;font-weight:600;line-height:17px;text-align:start;white-space:nowrap;text-overflow:ellipsis;pointer-events:auto;cursor:grab;touch-action:none;box-sizing:border-box}.month-event:active{cursor:grabbing}.month-event:hover{filter:brightness(.97);box-shadow:0 2px 7px #00000024}.month-event.is-dragging{opacity:.78;box-shadow:0 5px 14px #0003}.month-event.continues-before{border-start-start-radius:2px;border-end-start-radius:2px;margin-inline-start:0}.month-event.continues-after{border-start-end-radius:2px;border-end-end-radius:2px;margin-inline-end:0}.event-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.continuation-title{opacity:.85}.resize-handle{position:absolute;z-index:5;touch-action:none;background:transparent}.resize-handle-h{top:0;bottom:0;width:11px;cursor:ew-resize}.resize-handle-h:after{content:\"\";position:absolute;top:5px;bottom:5px;inset-inline-start:4px;width:2px;border-radius:2px;background:currentColor;opacity:.45}.resize-handle-h.resize-start{inset-inline-start:-2px}.resize-handle-h.resize-end{inset-inline-end:-2px}.resize-handle-v{inset-inline:0;height:8px;cursor:ns-resize}.resize-handle-v:after{content:\"\";position:absolute;inset-inline:5px;height:2px;border-radius:2px;background:currentColor;opacity:.45}.resize-handle-v.resize-start{top:-2px}.resize-handle-v.resize-start:after{top:4px}.resize-handle-v.resize-end{bottom:-2px}.resize-handle-v.resize-end:after{bottom:4px}.timed-calendar{min-width:0;border:1px solid var(--ngx-border-color);border-radius:8px;overflow:auto}.timed-header,.all-day-row,.time-grid{display:grid;min-width:620px}.timed-header{position:sticky;top:0;z-index:5;background:var(--ngx-color-bg);border-bottom:1px solid var(--ngx-border-color)}.corner{border-inline-end:1px solid var(--ngx-border-color)}.day-header{min-width:0;height:58px;padding:6px;border:0;border-inline-end:1px solid var(--ngx-border-color);background:transparent;color:inherit;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.day-header span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--ngx-muted)}.day-header strong{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;font-size:14px}.day-header.today strong{background:var(--ngx-today);color:#fff}.day-header:hover{background:#7f7fa012}.all-day-row{min-height:34px;border-bottom:1px solid var(--ngx-border-color);background:color-mix(in srgb,var(--ngx-color-bg) 94%,currentColor)}.all-day-row .all-day-label{padding:8px 5px;color:var(--ngx-muted);font-size:10px;border-inline-end:1px solid var(--ngx-border-color);text-align:center}.all-day-row .all-day-cell{min-width:0;padding:4px;border-inline-end:1px solid var(--ngx-border-color);display:flex;flex-direction:column;gap:3px}.time-grid{position:relative;align-items:stretch;min-height:1536px}.time-axis{position:relative;border-inline-end:1px solid var(--ngx-border-color);background:var(--ngx-color-bg)}.time-label{position:absolute;inset-inline:0 5px;transform:translateY(-50%);text-align:end;color:var(--ngx-muted);font-size:10px;pointer-events:none}.day-column{position:relative;min-width:0;height:1536px;border-inline-end:1px solid var(--ngx-border-color);background:repeating-linear-gradient(to bottom,transparent 0,transparent 31px,var(--ngx-border-color) 32px,transparent 33px,transparent 63px,var(--ngx-border-color) 64px)}.time-slot{height:32px;pointer-events:none;border-bottom:1px dashed color-mix(in srgb,var(--ngx-border-color) 55%,transparent)}.time-slot.hour{border-bottom-style:solid;border-bottom-color:var(--ngx-border-color)}.timed-event{position:absolute;z-index:2;min-width:24px;padding:4px 7px;border:1px solid transparent;border-radius:5px;overflow:hidden;background:var(--ngx-event-bg);color:var(--ngx-event-text);font:inherit;font-size:11px;line-height:15px;text-align:start;cursor:grab;box-sizing:border-box;touch-action:none;transition:filter .12s ease,box-shadow .12s ease}.timed-event:hover{filter:brightness(.97);box-shadow:0 2px 7px #00000024;z-index:4}.timed-event strong,.timed-event small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timed-event small{opacity:.72;font-size:10px}.timed-event.continues-before{border-start-start-radius:2px;border-end-start-radius:2px}.timed-event.continues-after{border-start-end-radius:2px;border-end-end-radius:2px}.timed-event.all-day-event{cursor:grab;position:relative;inset:auto!important;width:100%!important;min-height:24px;height:24px;padding-block:2px}.event-list{display:flex;flex-direction:column;gap:6px}.event-list-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:1px solid var(--ngx-border-color);border-radius:8px;background:transparent;color:inherit;text-align:start;cursor:pointer}.event-list-item:hover{background:#7f7fa014}.event-list-item .event-dot{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:var(--ngx-today)}.event-list-item .event-copy{min-width:0;display:flex;flex-direction:column;gap:2px}.event-list-item .event-copy strong,.event-list-item .event-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-list-item .event-copy small{opacity:.58}.empty-events{padding:30px;text-align:center;opacity:.55}:host-context([dir=rtl]) .nxt-prv-buttons .previous svg{transform:rotate(180deg)}:host-context([dir=rtl]) .nxt-prv-buttons .next svg{transform:rotate(180deg)}@media(max-width:700px){.wrapper .header{flex-wrap:wrap}.wrapper .header .current-date{order:-1;flex-basis:100%}.view-mode{width:100%;justify-content:center}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2819
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxCalendarComponent, isStandalone: true, selector: "ngx-calendar", inputs: { resizeAndMovable: { classPropertyName: "resizeAndMovable", publicName: "resizeAndMovable", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: false, isRequired: false, transformFunction: null }, events: { classPropertyName: "events", publicName: "events", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", selectEvent: "selectEvent", eventChange: "eventChange", eventsChange: "eventsChange" }, host: { listeners: { "window:resize": "onResize()", "document:pointermove": "onDocumentPointerMove($event)", "document:pointerup": "onDocumentPointerUp($event)", "document:pointercancel": "onDocumentPointerCancel($event)" } }, providers: [DateAdapterRegistry], viewQueries: [{ propertyName: "calendarWrapper", first: true, predicate: ["calendarWrapper"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" [class.is-interacting]=\"!!interaction\">\n <div class=\"header\">\n <div class=\"nxt-prv-buttons\">\n <button type=\"button\" class=\"previous dtp-btn\" (click)=\"previous()\" title=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n _config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n @if (_config.todayButton) {\n <button type=\"button\" class=\"today dtp-btn\" (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n <button type=\"button\" class=\"next dtp-btn\" (click)=\"next()\" title=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"_config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"current-date\" aria-live=\"polite\">{{ headerText }}</div>\n\n <div class=\"view-mode\">\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('month')\"\n [class.active]=\"view === 'month'\">\n {{ localize().month }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('week')\"\n [class.active]=\"view === 'week'\">\n {{ localize().week }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('day')\"\n [class.active]=\"view === 'day'\">\n {{ localize().day }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('event')\"\n [class.active]=\"view === 'event'\">\n {{ localize().event }}\n </button>\n </div>\n </div>\n\n <div class=\"calendar\" #calendarWrapper>\n @switch (view) {\n @case ('month') {\n <ul class=\"weeks\">\n @for (w of weeks; track $index) {\n <li>{{ w }}</li>\n }\n </ul>\n\n <div class=\"month-grid\" [style.minHeight.px]=\"minHeight\">\n @for (row of monthEventRows; track $index; let rowIndex = $index) {\n <div class=\"month-row\">\n @for (\n item of viewDays.slice(rowIndex * 7, rowIndex * 7 + 7);\n track item.date?.getTime() ?? $index\n ) {\n <button\n type=\"button\"\n class=\"month-day\"\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n <span class=\"day-number\">{{ item.day }}</span>\n </button>\n }\n\n <div class=\"month-event-layer\" aria-live=\"polite\">\n @for (event of row; track event.id ?? event.start.getTime() ?? $index) {\n <button\n type=\"button\"\n class=\"month-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [class.event-start]=\"event.isStart\"\n [class.event-end]=\"event.isEnd\"\n [class.is-dragging]=\"\n interaction?.source === event ||\n (interaction?.source?.id != null && interaction?.source?.id === event.id)\n \"\n [style.gridColumn]=\"event.startColumn + 1 + ' / ' + (event.endColumn + 2)\"\n [style.gridRow]=\"event.lane + 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startMonthEventInteraction($event, event)\"\n (click)=\"\n onclickEvent($event, { date: event.start, day: 0, active: true }, event)\n \">\n @if (event.isStart) {\n <span class=\"event-title\">{{ event.title || 'Untitled event' }}</span>\n } @else {\n <span class=\"event-title continuation-title\">{{ event.title || '' }}</span>\n }\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-h resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-h resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-end')\n \"></span>\n }\n }\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @case ('week') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('day') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('event') {\n <div class=\"event-list\">\n @if (eventViewItems.length) {\n @for (item of eventViewItems; track item.event.id ?? item.start.getTime()) {\n <button\n type=\"button\"\n class=\"event-list-item\"\n (click)=\"\n onclickEvent($event, { date: item.start, day: 0, active: true }, item.event)\n \">\n <span\n class=\"event-dot\"\n [style.background]=\"\n item.event.backgroundColor || item.event.color || null\n \"></span>\n <span class=\"event-copy\">\n <strong>{{ item.event.title || 'Untitled event' }}</strong>\n <small>\n {{ formatEventDate(item.start) }}\n @if (item.end.getTime() !== item.start.getTime()) {\n \u2013 {{ formatEventDate(item.end) }}\n }\n </small>\n </span>\n </button>\n }\n } @else {\n <div class=\"empty-events\">No events for this month.</div>\n }\n </div>\n }\n }\n </div>\n</div>\n\n<ng-template #timedCalendar>\n <div class=\"timed-calendar\">\n <div\n class=\"timed-header\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"corner\"></div>\n @for (day of weekDays; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"day-header\"\n [class.today]=\"day.isToday\"\n (click)=\"selectDay($event, { date: day.date, day: 0, active: true })\">\n <span>{{ day.label }}</span>\n <strong>{{ day.dayNumber }}</strong>\n </button>\n }\n </div>\n\n <div\n class=\"all-day-row\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"all-day-label\">All day</div>\n @for (day of weekDays; track day.date.getTime(); let i = $index) {\n <div class=\"all-day-cell\">\n @for (\n event of allDayByColumn[i];\n track event.id ?? event.title ?? event.start.getTime()\n ) {\n <button\n type=\"button\"\n class=\"timed-event all-day-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <span>{{ event.title || 'Untitled event' }}</span>\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-h resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startTimedEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-h resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n }\n </button>\n }\n </div>\n }\n </div>\n\n <div\n class=\"time-grid\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"time-axis\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-label\" [style.top.px]=\"(minutes / 60) * hourHeight\">\n @if (minutes % 60 === 0) {\n {{ formatTime(minutes) }}\n }\n </div>\n }\n </div>\n\n @for (day of weekDays; track day.date.getTime()) {\n <div class=\"day-column\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-slot\" [class.hour]=\"minutes % 60 === 0\"></div>\n }\n\n @for (event of day.events; track event.id ?? event.title ?? event.start.getTime()) {\n <button\n type=\"button\"\n class=\"timed-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.top.px]=\"event.top\"\n [style.height.px]=\"event.height\"\n [style.insetInlineStart.%]=\"event.column * (100 / event.columnCount)\"\n [style.width.%]=\"100 / event.columnCount - 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <strong>{{ event.title || 'Untitled event' }}</strong>\n @if (event.height >= 42) {\n <small>\n {{ formatTime(event.start.getHours() * 60 + event.start.getMinutes()) }}\n </small>\n }\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-v resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startTimedEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-v resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n }\n </button>\n }\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #171a24);--ngx-color-text: light-dark(#16181d, #f7f7f8);--ngx-border-color: light-dark(#e1e4ea, #303541);--ngx-muted: color-mix(in srgb, var(--ngx-color-text) 55%, transparent);--ngx-event-bg: light-dark(#eef0ff, #2f3150);--ngx-event-text: light-dark(#3547a4, #dce1ff);--ngx-today: #3f51b5}.wrapper{background:var(--ngx-color-bg);color:var(--ngx-color-text);border:1px solid var(--ngx-border-color);border-radius:10px;overflow:hidden}.wrapper .dtp-btn{background:none;border:none;color:inherit;border-radius:6px;padding:5px 12px;box-shadow:0 0 4px #0000001f;transition:background .16s ease,transform .16s ease;display:inline-flex;align-items:center;justify-content:center}.wrapper .dtp-btn:not([disabled]):hover{cursor:pointer;background:#7f7fa02e}.wrapper .dtp-btn.active{background:#7f7fa03d}.wrapper .dtp-btn svg{fill:currentColor}.wrapper .header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;border-bottom:1px solid var(--ngx-border-color)}.wrapper .header .current-date{text-align:center;flex:1;min-width:0;font-weight:700}.wrapper .nxt-prv-buttons,.wrapper .view-mode{display:flex;align-items:center;gap:4px}.calendar{padding:10px;min-width:0}.weeks{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));list-style:none;padding:0;margin:0 0 8px;border-inline-start:1px solid var(--ngx-border-color)}.weeks li{padding:7px 4px;text-align:center;color:var(--ngx-muted);font-size:11px;font-weight:700;border-inline-end:1px solid var(--ngx-border-color)}.month-grid{display:grid;grid-template-rows:repeat(6,minmax(92px,1fr));border-inline-start:1px solid var(--ngx-border-color);border-top:1px solid var(--ngx-border-color);position:relative}.month-row{position:relative;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));min-height:92px;border-bottom:1px solid var(--ngx-border-color)}.month-day{position:relative;min-width:0;min-height:92px;overflow:hidden;padding:4px;border:0;border-inline-end:1px solid var(--ngx-border-color);background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer;transition:background .15s ease}.month-day:hover{background:#7f7fa00d}.month-day.de-active{opacity:.48}.month-day.selected{outline:2px solid rgba(63,81,181,.3);outline-offset:-2px}.month-day.today .day-number{background:#3f51b51a;color:var(--ngx-today);font-weight:800}.day-number{width:27px;height:27px;display:grid;place-items:center;margin-inline-start:auto;border-radius:50%;font-size:12px;font-weight:600}.month-event-layer{position:absolute;inset:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:repeat(4,26px);pointer-events:none;padding-top:34px}.month-event{position:relative;z-index:3;min-width:0;height:22px;margin-inline:2px;padding:2px 7px;border:1px solid transparent;border-radius:5px;overflow:hidden;background:var(--ngx-event-bg);color:var(--ngx-event-text);font:inherit;font-size:11px;font-weight:600;line-height:17px;text-align:start;white-space:nowrap;text-overflow:ellipsis;pointer-events:auto;cursor:grab;touch-action:none;box-sizing:border-box}.month-event:active{cursor:grabbing}.month-event:hover{filter:brightness(.97);box-shadow:0 2px 7px #00000024}.month-event.is-dragging{opacity:.78;box-shadow:0 5px 14px #0003}.month-event.continues-before{border-start-start-radius:2px;border-end-start-radius:2px;margin-inline-start:0}.month-event.continues-after{border-start-end-radius:2px;border-end-end-radius:2px;margin-inline-end:0}.event-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.continuation-title{opacity:.85}.resize-handle{position:absolute;z-index:5;touch-action:none;background:transparent}.resize-handle-h{top:0;bottom:0;width:11px;cursor:ew-resize}.resize-handle-h:after{content:\"\";position:absolute;top:5px;bottom:5px;inset-inline-start:4px;width:2px;border-radius:2px;background:currentColor;opacity:.45}.resize-handle-h.resize-start{inset-inline-start:-2px}.resize-handle-h.resize-end{inset-inline-end:-2px}.resize-handle-v{inset-inline:0;height:8px;cursor:ns-resize}.resize-handle-v:after{content:\"\";position:absolute;inset-inline:5px;height:2px;border-radius:2px;background:currentColor;opacity:.45}.resize-handle-v.resize-start{top:-2px}.resize-handle-v.resize-start:after{top:4px}.resize-handle-v.resize-end{bottom:-2px}.resize-handle-v.resize-end:after{bottom:4px}.timed-calendar{min-width:0;border:1px solid var(--ngx-border-color);border-radius:8px;overflow:auto}.timed-header,.all-day-row,.time-grid{display:grid;min-width:620px}.timed-header{position:sticky;top:0;z-index:5;background:var(--ngx-color-bg);border-bottom:1px solid var(--ngx-border-color)}.corner{border-inline-end:1px solid var(--ngx-border-color)}.day-header{min-width:0;height:58px;padding:6px;border:0;border-inline-end:1px solid var(--ngx-border-color);background:transparent;color:inherit;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.day-header span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--ngx-muted)}.day-header strong{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;font-size:14px}.day-header.today strong{background:var(--ngx-today);color:#fff}.day-header:hover{background:#7f7fa012}.all-day-row{min-height:34px;border-bottom:1px solid var(--ngx-border-color);background:color-mix(in srgb,var(--ngx-color-bg) 94%,currentColor)}.all-day-row .all-day-label{padding:8px 5px;color:var(--ngx-muted);font-size:10px;border-inline-end:1px solid var(--ngx-border-color);text-align:center}.all-day-row .all-day-cell{min-width:0;padding:4px;border-inline-end:1px solid var(--ngx-border-color);display:flex;flex-direction:column;gap:3px}.time-grid{position:relative;align-items:stretch;min-height:1536px}.time-axis{position:relative;border-inline-end:1px solid var(--ngx-border-color);background:var(--ngx-color-bg)}.time-label{position:absolute;inset-inline:0 5px;transform:translateY(-50%);text-align:end;color:var(--ngx-muted);font-size:10px;pointer-events:none}.day-column{position:relative;min-width:0;height:1536px;border-inline-end:1px solid var(--ngx-border-color);background:repeating-linear-gradient(to bottom,transparent 0,transparent 31px,var(--ngx-border-color) 32px,transparent 33px,transparent 63px,var(--ngx-border-color) 64px)}.time-slot{height:32px;pointer-events:none;border-bottom:1px dashed color-mix(in srgb,var(--ngx-border-color) 55%,transparent)}.time-slot.hour{border-bottom-style:solid;border-bottom-color:var(--ngx-border-color)}.timed-event{position:absolute;z-index:2;min-width:24px;padding:4px 7px;border:1px solid transparent;border-radius:5px;overflow:hidden;background:var(--ngx-event-bg);color:var(--ngx-event-text);font:inherit;font-size:11px;line-height:15px;text-align:start;cursor:grab;box-sizing:border-box;touch-action:none;transition:filter .12s ease,box-shadow .12s ease}.timed-event:hover{filter:brightness(.97);box-shadow:0 2px 7px #00000024;z-index:4}.timed-event strong,.timed-event small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timed-event small{opacity:.72;font-size:10px}.timed-event.continues-before{border-start-start-radius:2px;border-end-start-radius:2px}.timed-event.continues-after{border-start-end-radius:2px;border-end-end-radius:2px}.timed-event.all-day-event{cursor:grab;position:relative;inset:auto!important;width:100%!important;min-height:24px;height:24px;padding-block:2px}.event-list{display:flex;flex-direction:column;gap:6px}.event-list-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:1px solid var(--ngx-border-color);border-radius:8px;background:transparent;color:inherit;text-align:start;cursor:pointer}.event-list-item:hover{background:#7f7fa014}.event-list-item .event-dot{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:var(--ngx-today)}.event-list-item .event-copy{min-width:0;display:flex;flex-direction:column;gap:2px}.event-list-item .event-copy strong,.event-list-item .event-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-list-item .event-copy small{opacity:.58}.empty-events{padding:30px;text-align:center;opacity:.55}:host-context([dir=rtl]) .nxt-prv-buttons .previous svg{transform:rotate(180deg)}:host-context([dir=rtl]) .nxt-prv-buttons .next svg{transform:rotate(180deg)}@media(max-width:700px){.wrapper .header{flex-wrap:wrap}.wrapper .header .current-date{order:-1;flex-basis:100%}.view-mode{width:100%;justify-content:center}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2857
2820
  }
2858
2821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxCalendarComponent, decorators: [{
2859
2822
  type: Component,
2860
2823
  args: [{ selector: 'ngx-calendar', imports: [CommonModule], providers: [DateAdapterRegistry], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"wrapper\" [class.is-interacting]=\"!!interaction\">\n <div class=\"header\">\n <div class=\"nxt-prv-buttons\">\n <button type=\"button\" class=\"previous dtp-btn\" (click)=\"previous()\" title=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n _config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n @if (_config.todayButton) {\n <button type=\"button\" class=\"today dtp-btn\" (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n <button type=\"button\" class=\"next dtp-btn\" (click)=\"next()\" title=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"_config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"current-date\" aria-live=\"polite\">{{ headerText }}</div>\n\n <div class=\"view-mode\">\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('month')\"\n [class.active]=\"view === 'month'\">\n {{ localize().month }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('week')\"\n [class.active]=\"view === 'week'\">\n {{ localize().week }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('day')\"\n [class.active]=\"view === 'day'\">\n {{ localize().day }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('event')\"\n [class.active]=\"view === 'event'\">\n {{ localize().event }}\n </button>\n </div>\n </div>\n\n <div class=\"calendar\" #calendarWrapper>\n @switch (view) {\n @case ('month') {\n <ul class=\"weeks\">\n @for (w of weeks; track $index) {\n <li>{{ w }}</li>\n }\n </ul>\n\n <div class=\"month-grid\" [style.minHeight.px]=\"minHeight\">\n @for (row of monthEventRows; track $index; let rowIndex = $index) {\n <div class=\"month-row\">\n @for (\n item of viewDays.slice(rowIndex * 7, rowIndex * 7 + 7);\n track item.date?.getTime() ?? $index\n ) {\n <button\n type=\"button\"\n class=\"month-day\"\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n <span class=\"day-number\">{{ item.day }}</span>\n </button>\n }\n\n <div class=\"month-event-layer\" aria-live=\"polite\">\n @for (event of row; track event.id ?? event.start.getTime() ?? $index) {\n <button\n type=\"button\"\n class=\"month-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [class.event-start]=\"event.isStart\"\n [class.event-end]=\"event.isEnd\"\n [class.is-dragging]=\"\n interaction?.source === event ||\n (interaction?.source?.id != null && interaction?.source?.id === event.id)\n \"\n [style.gridColumn]=\"event.startColumn + 1 + ' / ' + (event.endColumn + 2)\"\n [style.gridRow]=\"event.lane + 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startMonthEventInteraction($event, event)\"\n (click)=\"\n onclickEvent($event, { date: event.start, day: 0, active: true }, event)\n \">\n @if (event.isStart) {\n <span class=\"event-title\">{{ event.title || 'Untitled event' }}</span>\n } @else {\n <span class=\"event-title continuation-title\">{{ event.title || '' }}</span>\n }\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-h resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-h resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-end')\n \"></span>\n }\n }\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @case ('week') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('day') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('event') {\n <div class=\"event-list\">\n @if (eventViewItems.length) {\n @for (item of eventViewItems; track item.event.id ?? item.start.getTime()) {\n <button\n type=\"button\"\n class=\"event-list-item\"\n (click)=\"\n onclickEvent($event, { date: item.start, day: 0, active: true }, item.event)\n \">\n <span\n class=\"event-dot\"\n [style.background]=\"\n item.event.backgroundColor || item.event.color || null\n \"></span>\n <span class=\"event-copy\">\n <strong>{{ item.event.title || 'Untitled event' }}</strong>\n <small>\n {{ formatEventDate(item.start) }}\n @if (item.end.getTime() !== item.start.getTime()) {\n \u2013 {{ formatEventDate(item.end) }}\n }\n </small>\n </span>\n </button>\n }\n } @else {\n <div class=\"empty-events\">No events for this month.</div>\n }\n </div>\n }\n }\n </div>\n</div>\n\n<ng-template #timedCalendar>\n <div class=\"timed-calendar\">\n <div\n class=\"timed-header\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"corner\"></div>\n @for (day of weekDays; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"day-header\"\n [class.today]=\"day.isToday\"\n (click)=\"selectDay($event, { date: day.date, day: 0, active: true })\">\n <span>{{ day.label }}</span>\n <strong>{{ day.dayNumber }}</strong>\n </button>\n }\n </div>\n\n <div\n class=\"all-day-row\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"all-day-label\">All day</div>\n @for (day of weekDays; track day.date.getTime(); let i = $index) {\n <div class=\"all-day-cell\">\n @for (\n event of allDayByColumn[i];\n track event.id ?? event.title ?? event.start.getTime()\n ) {\n <button\n type=\"button\"\n class=\"timed-event all-day-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <span>{{ event.title || 'Untitled event' }}</span>\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-h resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startTimedEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-h resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n }\n </button>\n }\n </div>\n }\n </div>\n\n <div\n class=\"time-grid\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"time-axis\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-label\" [style.top.px]=\"(minutes / 60) * hourHeight\">\n @if (minutes % 60 === 0) {\n {{ formatTime(minutes) }}\n }\n </div>\n }\n </div>\n\n @for (day of weekDays; track day.date.getTime()) {\n <div class=\"day-column\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-slot\" [class.hour]=\"minutes % 60 === 0\"></div>\n }\n\n @for (event of day.events; track event.id ?? event.title ?? event.start.getTime()) {\n <button\n type=\"button\"\n class=\"timed-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.top.px]=\"event.top\"\n [style.height.px]=\"event.height\"\n [style.insetInlineStart.%]=\"event.column * (100 / event.columnCount)\"\n [style.width.%]=\"100 / event.columnCount - 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <strong>{{ event.title || 'Untitled event' }}</strong>\n @if (event.height >= 42) {\n <small>\n {{ formatTime(event.start.getHours() * 60 + event.start.getMinutes()) }}\n </small>\n }\n @if (resizeAndMovable()) {\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-handle-v resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startTimedEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-handle-v resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n }\n </button>\n }\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-color-bg: light-dark(#fff, #171a24);--ngx-color-text: light-dark(#16181d, #f7f7f8);--ngx-border-color: light-dark(#e1e4ea, #303541);--ngx-muted: color-mix(in srgb, var(--ngx-color-text) 55%, transparent);--ngx-event-bg: light-dark(#eef0ff, #2f3150);--ngx-event-text: light-dark(#3547a4, #dce1ff);--ngx-today: #3f51b5}.wrapper{background:var(--ngx-color-bg);color:var(--ngx-color-text);border:1px solid var(--ngx-border-color);border-radius:10px;overflow:hidden}.wrapper .dtp-btn{background:none;border:none;color:inherit;border-radius:6px;padding:5px 12px;box-shadow:0 0 4px #0000001f;transition:background .16s ease,transform .16s ease;display:inline-flex;align-items:center;justify-content:center}.wrapper .dtp-btn:not([disabled]):hover{cursor:pointer;background:#7f7fa02e}.wrapper .dtp-btn.active{background:#7f7fa03d}.wrapper .dtp-btn svg{fill:currentColor}.wrapper .header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;border-bottom:1px solid var(--ngx-border-color)}.wrapper .header .current-date{text-align:center;flex:1;min-width:0;font-weight:700}.wrapper .nxt-prv-buttons,.wrapper .view-mode{display:flex;align-items:center;gap:4px}.calendar{padding:10px;min-width:0}.weeks{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));list-style:none;padding:0;margin:0 0 8px;border-inline-start:1px solid var(--ngx-border-color)}.weeks li{padding:7px 4px;text-align:center;color:var(--ngx-muted);font-size:11px;font-weight:700;border-inline-end:1px solid var(--ngx-border-color)}.month-grid{display:grid;grid-template-rows:repeat(6,minmax(92px,1fr));border-inline-start:1px solid var(--ngx-border-color);border-top:1px solid var(--ngx-border-color);position:relative}.month-row{position:relative;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));min-height:92px;border-bottom:1px solid var(--ngx-border-color)}.month-day{position:relative;min-width:0;min-height:92px;overflow:hidden;padding:4px;border:0;border-inline-end:1px solid var(--ngx-border-color);background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer;transition:background .15s ease}.month-day:hover{background:#7f7fa00d}.month-day.de-active{opacity:.48}.month-day.selected{outline:2px solid rgba(63,81,181,.3);outline-offset:-2px}.month-day.today .day-number{background:#3f51b51a;color:var(--ngx-today);font-weight:800}.day-number{width:27px;height:27px;display:grid;place-items:center;margin-inline-start:auto;border-radius:50%;font-size:12px;font-weight:600}.month-event-layer{position:absolute;inset:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:repeat(4,26px);pointer-events:none;padding-top:34px}.month-event{position:relative;z-index:3;min-width:0;height:22px;margin-inline:2px;padding:2px 7px;border:1px solid transparent;border-radius:5px;overflow:hidden;background:var(--ngx-event-bg);color:var(--ngx-event-text);font:inherit;font-size:11px;font-weight:600;line-height:17px;text-align:start;white-space:nowrap;text-overflow:ellipsis;pointer-events:auto;cursor:grab;touch-action:none;box-sizing:border-box}.month-event:active{cursor:grabbing}.month-event:hover{filter:brightness(.97);box-shadow:0 2px 7px #00000024}.month-event.is-dragging{opacity:.78;box-shadow:0 5px 14px #0003}.month-event.continues-before{border-start-start-radius:2px;border-end-start-radius:2px;margin-inline-start:0}.month-event.continues-after{border-start-end-radius:2px;border-end-end-radius:2px;margin-inline-end:0}.event-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.continuation-title{opacity:.85}.resize-handle{position:absolute;z-index:5;touch-action:none;background:transparent}.resize-handle-h{top:0;bottom:0;width:11px;cursor:ew-resize}.resize-handle-h:after{content:\"\";position:absolute;top:5px;bottom:5px;inset-inline-start:4px;width:2px;border-radius:2px;background:currentColor;opacity:.45}.resize-handle-h.resize-start{inset-inline-start:-2px}.resize-handle-h.resize-end{inset-inline-end:-2px}.resize-handle-v{inset-inline:0;height:8px;cursor:ns-resize}.resize-handle-v:after{content:\"\";position:absolute;inset-inline:5px;height:2px;border-radius:2px;background:currentColor;opacity:.45}.resize-handle-v.resize-start{top:-2px}.resize-handle-v.resize-start:after{top:4px}.resize-handle-v.resize-end{bottom:-2px}.resize-handle-v.resize-end:after{bottom:4px}.timed-calendar{min-width:0;border:1px solid var(--ngx-border-color);border-radius:8px;overflow:auto}.timed-header,.all-day-row,.time-grid{display:grid;min-width:620px}.timed-header{position:sticky;top:0;z-index:5;background:var(--ngx-color-bg);border-bottom:1px solid var(--ngx-border-color)}.corner{border-inline-end:1px solid var(--ngx-border-color)}.day-header{min-width:0;height:58px;padding:6px;border:0;border-inline-end:1px solid var(--ngx-border-color);background:transparent;color:inherit;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.day-header span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--ngx-muted)}.day-header strong{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;font-size:14px}.day-header.today strong{background:var(--ngx-today);color:#fff}.day-header:hover{background:#7f7fa012}.all-day-row{min-height:34px;border-bottom:1px solid var(--ngx-border-color);background:color-mix(in srgb,var(--ngx-color-bg) 94%,currentColor)}.all-day-row .all-day-label{padding:8px 5px;color:var(--ngx-muted);font-size:10px;border-inline-end:1px solid var(--ngx-border-color);text-align:center}.all-day-row .all-day-cell{min-width:0;padding:4px;border-inline-end:1px solid var(--ngx-border-color);display:flex;flex-direction:column;gap:3px}.time-grid{position:relative;align-items:stretch;min-height:1536px}.time-axis{position:relative;border-inline-end:1px solid var(--ngx-border-color);background:var(--ngx-color-bg)}.time-label{position:absolute;inset-inline:0 5px;transform:translateY(-50%);text-align:end;color:var(--ngx-muted);font-size:10px;pointer-events:none}.day-column{position:relative;min-width:0;height:1536px;border-inline-end:1px solid var(--ngx-border-color);background:repeating-linear-gradient(to bottom,transparent 0,transparent 31px,var(--ngx-border-color) 32px,transparent 33px,transparent 63px,var(--ngx-border-color) 64px)}.time-slot{height:32px;pointer-events:none;border-bottom:1px dashed color-mix(in srgb,var(--ngx-border-color) 55%,transparent)}.time-slot.hour{border-bottom-style:solid;border-bottom-color:var(--ngx-border-color)}.timed-event{position:absolute;z-index:2;min-width:24px;padding:4px 7px;border:1px solid transparent;border-radius:5px;overflow:hidden;background:var(--ngx-event-bg);color:var(--ngx-event-text);font:inherit;font-size:11px;line-height:15px;text-align:start;cursor:grab;box-sizing:border-box;touch-action:none;transition:filter .12s ease,box-shadow .12s ease}.timed-event:hover{filter:brightness(.97);box-shadow:0 2px 7px #00000024;z-index:4}.timed-event strong,.timed-event small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timed-event small{opacity:.72;font-size:10px}.timed-event.continues-before{border-start-start-radius:2px;border-end-start-radius:2px}.timed-event.continues-after{border-start-end-radius:2px;border-end-end-radius:2px}.timed-event.all-day-event{cursor:grab;position:relative;inset:auto!important;width:100%!important;min-height:24px;height:24px;padding-block:2px}.event-list{display:flex;flex-direction:column;gap:6px}.event-list-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border:1px solid var(--ngx-border-color);border-radius:8px;background:transparent;color:inherit;text-align:start;cursor:pointer}.event-list-item:hover{background:#7f7fa014}.event-list-item .event-dot{width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:var(--ngx-today)}.event-list-item .event-copy{min-width:0;display:flex;flex-direction:column;gap:2px}.event-list-item .event-copy strong,.event-list-item .event-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-list-item .event-copy small{opacity:.58}.empty-events{padding:30px;text-align:center;opacity:.55}:host-context([dir=rtl]) .nxt-prv-buttons .previous svg{transform:rotate(180deg)}:host-context([dir=rtl]) .nxt-prv-buttons .next svg{transform:rotate(180deg)}@media(max-width:700px){.wrapper .header{flex-wrap:wrap}.wrapper .header .current-date{order:-1;flex-basis:100%}.view-mode{width:100%;justify-content:center}}\n"] }]
2861
- }], ctorParameters: () => [], propDecorators: { localize: [{ type: i0.Input, args: [{ isSignal: true, alias: "localize", required: false }] }], resizeAndMovable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizeAndMovable", required: false }] }], config: [{
2862
- type: Input
2863
- }], locale: [{
2864
- type: Input
2865
- }], setMin: [{
2866
- type: Input,
2867
- args: ['min']
2868
- }], setMax: [{
2869
- type: Input,
2870
- args: ['max']
2871
- }], view: [{
2824
+ }], ctorParameters: () => [], propDecorators: { resizeAndMovable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizeAndMovable", required: false }] }], view: [{
2872
2825
  type: Input
2873
2826
  }], events: [{
2874
2827
  type: Input
@@ -2897,13 +2850,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
2897
2850
  function dedupeAdapters(adapters) {
2898
2851
  return Array.from(new Map(adapters.map((a) => [a.locale, a])).values());
2899
2852
  }
2900
- function provideDateAdapters(...additional) {
2901
- const all = dedupeAdapters([...DEFAULT_DATE_ADAPTERS, ...additional]);
2902
- return all.map((adapter) => ({
2853
+ function provideDateAdapters(configs) {
2854
+ const adapters = configs?.adapters ?? [];
2855
+ const all = dedupeAdapters([...DEFAULT_DATE_ADAPTERS, ...adapters]);
2856
+ const c = { ...DEFAULT_DATE_CONFIG, ...configs };
2857
+ const d = all.map((adapter) => ({
2903
2858
  provide: DATE_ADAPTERS,
2904
2859
  multi: true,
2905
2860
  useValue: adapter,
2906
2861
  }));
2862
+ return [
2863
+ ...d,
2864
+ {
2865
+ provide: NGX_DATE_CONFIG,
2866
+ multi: true,
2867
+ useValue: c,
2868
+ },
2869
+ ];
2907
2870
  }
2908
2871
 
2909
2872
  function createDateRange(start = null, end = null) {
@@ -2965,31 +2928,6 @@ function isDateInPreviewRange(date, start, previewEnd) {
2965
2928
  }
2966
2929
 
2967
2930
  class NgxDateRangePickerComponent extends NgxDatePickerBase {
2968
- defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);
2969
- localize = input(this.defaultLocalization, /* @ts-ignore */
2970
- ...(ngDevMode ? [{ debugName: "localize" }] : /* istanbul ignore next */ []));
2971
- config = new NgxDatePickerConfig();
2972
- set locale(value) {
2973
- this._locale = value || 'en';
2974
- this.adapter = this.dateAdapterRegistry.resolve(this._locale);
2975
- this.init();
2976
- }
2977
- set min(value) {
2978
- const next = deserialize(value);
2979
- if (!sameDate(next, this.minDate)) {
2980
- this.minDate = next;
2981
- this._validatorOnChange();
2982
- this.renderِDatePicker(this.view());
2983
- }
2984
- }
2985
- set max(value) {
2986
- const next = deserialize(value);
2987
- if (!sameDate(next, this.maxDate)) {
2988
- this.maxDate = next;
2989
- this._validatorOnChange();
2990
- this.renderِDatePicker(this.view());
2991
- }
2992
- }
2993
2931
  view = model('day', /* @ts-ignore */
2994
2932
  ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
2995
2933
  rangeChange = new EventEmitter();
@@ -3003,11 +2941,22 @@ class NgxDateRangePickerComponent extends NgxDatePickerBase {
3003
2941
  _onTouched = () => { };
3004
2942
  _validatorOnChange = () => { };
3005
2943
  isDisabled = false;
2944
+ constructor() {
2945
+ super();
2946
+ effect(() => {
2947
+ this.adapter = this.dateAdapterRegistry.resolve(this.locale());
2948
+ this.init();
2949
+ });
2950
+ }
3006
2951
  ngOnInit() {
3007
2952
  this.init();
3008
2953
  }
3009
- updateConfig(value) {
3010
- this.config = { ...new NgxDatePickerConfig(), ...value };
2954
+ onDateBoundsChange() {
2955
+ this._validatorOnChange();
2956
+ this.renderِDatePicker(this.view());
2957
+ }
2958
+ updateConfig(val) {
2959
+ this.config.set({ ...this.config(), ...val });
3011
2960
  }
3012
2961
  writeValue(value) {
3013
2962
  this.range = normalizeDateRange(value);
@@ -3199,8 +3148,8 @@ class NgxDateRangePickerComponent extends NgxDatePickerBase {
3199
3148
  stopPagination(event) {
3200
3149
  event.stopPropagation();
3201
3150
  }
3202
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDateRangePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3203
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxDateRangePickerComponent, isStandalone: true, selector: "ngx-date-range-picker", inputs: { localize: { classPropertyName: "localize", publicName: "localize", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: false, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", rangeChange: "rangeChange", change: "change" }, providers: [
3151
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxDateRangePickerComponent, isStandalone: true, selector: "ngx-date-range-picker", inputs: { view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange", rangeChange: "rangeChange", change: "change" }, providers: [
3204
3153
  DateAdapterRegistry,
3205
3154
  {
3206
3155
  provide: NG_VALUE_ACCESSOR,
@@ -3212,7 +3161,7 @@ class NgxDateRangePickerComponent extends NgxDatePickerBase {
3212
3161
  useExisting: forwardRef(() => NgxDateRangePickerComponent),
3213
3162
  multi: true,
3214
3163
  },
3215
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <div class=\"calendar-icon\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 448 512\">\n <path\n d=\"M384 272C384 280.8 376.8 288 368 288H208C199.2 288 192 280.8 192 272C192 263.2 199.2 256 208 256H368C376.8 256 384 263.2 384 272zM80 416C71.16 416 64 408.8 64 400C64 391.2 71.16 384 80 384H240C248.8 384 256 391.2 256 400C256 408.8 248.8 416 240 416H80zM160 272C160 298.5 138.5 320 112 320C85.49 320 64 298.5 64 272C64 245.5 85.49 224 112 224C138.5 224 160 245.5 160 272zM96 272C96 280.8 103.2 288 112 288C120.8 288 128 280.8 128 272C128 263.2 120.8 256 112 256C103.2 256 96 263.2 96 272zM288 400C288 373.5 309.5 352 336 352C362.5 352 384 373.5 384 400C384 426.5 362.5 448 336 448C309.5 448 288 426.5 288 400zM352 400C352 391.2 344.8 384 336 384C327.2 384 320 391.2 320 400C320 408.8 327.2 416 336 416C344.8 416 352 408.8 352 400zM112 0C120.8 0 128 7.164 128 16V64H320V16C320 7.164 327.2 0 336 0C344.8 0 352 7.164 352 16V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H96V16C96 7.164 103.2 0 112 0zM416 192H32V448C32 465.7 46.33 480 64 480H384C401.7 480 416 465.7 416 448V192zM384 96H64C46.33 96 32 110.3 32 128V160H416V128C416 110.3 401.7 96 384 96z\" />\n </svg>\n </div>\n <div class=\"header-copy\">\n <div class=\"header-title\">Date range</div>\n <div class=\"header-value\">{{ calendarHeader() }}</div>\n </div>\n </div>\n\n <div class=\"sub-header\">\n <button type=\"button\" class=\"nav-button\" id=\"prev\" (click)=\"previous()\" aria-label=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n\n <button type=\"button\" class=\"current-date\" (click)=\"changeView('month')\">\n <span>{{ displayMonth() }}</span>\n <span>{{ currYear() }}</span>\n </button>\n\n <button type=\"button\" class=\"nav-button\" id=\"next\" (click)=\"next()\" aria-label=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">{{ w.min }}</li>\n }\n </ul>\n\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.in-range]=\"item.inRange\"\n [class.in-range-preview]=\"item.inRangePreview\"\n [class.range-start]=\"item.rangeStart\"\n [class.range-end]=\"item.rangeEnd\"\n [class.range-single]=\"item.rangeStart && item.rangeEnd\"\n (mouseenter)=\"onDayEnter(item)\"\n (mouseleave)=\"onDayLeave()\"\n (click)=\"selectDay($event, item)\"\n [attr.aria-selected]=\"\n item.rangeStart || item.rangeEnd || item.inRange || item.inRangePreview\n \">\n <span class=\"day-number\">{{ item.day }}</span>\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n\n <div class=\"calendar-footer\">\n @if (config.clearButton) {\n <button type=\"button\" (click)=\"clear()\">{{ localize().clear }}</button>\n }\n @if (config.todayButton) {\n <button type=\"button\" (click)=\"gotoToday()\">{{ localize().today }}</button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-range-bg: light-dark(#ffffff, #10162b);--ngx-range-text: light-dark(#171717, #f4f4f5);--ngx-range-muted: light-dark(#8a8f98, #72798a);--ngx-range-border: light-dark(#e6e8ee, #272d40);--ngx-range-accent: light-dark(#6544e8, #8d6cff);--ngx-range-accent-soft: light-dark(#eeeaff, #2b2252);--ngx-range-hover: light-dark(#f4f2ff, #211b38)}.wrapper{width:336px;overflow:hidden;border:1px solid var(--ngx-range-border);border-radius:14px;background:var(--ngx-range-bg);color:var(--ngx-range-text);box-shadow:0 18px 55px #0000002e;font-size:13px}.header{display:flex;gap:12px;padding:15px 16px;background:linear-gradient(135deg,#6747e9,#8b64f5);color:#fff}.header .calendar-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:#ffffff29}.header .header-copy{min-width:0;flex:1}.header .header-title{opacity:.75;font-size:11px;text-transform:uppercase;letter-spacing:.08em}.header .header-value{margin-top:3px;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-header{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--ngx-range-border)}.sub-header button{color:inherit;border:0;background:transparent;cursor:pointer}.sub-header .nav-button{width:36px;height:36px;display:grid;place-items:center;border-radius:9px}.sub-header .nav-button:hover{background:var(--ngx-range-hover)}.sub-header .current-date{display:flex;justify-content:center;gap:6px;font-weight:700;font-size:14px}.calendar{padding:10px 12px 12px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;padding:0;margin:0}.calendar .weeks li,.calendar .days li{width:14.2857142857%}.calendar .weeks{margin-bottom:4px}.calendar .weeks li{height:30px;display:grid;place-items:center;color:var(--ngx-range-muted);font-size:11px;font-weight:700}.calendar .days li{position:relative;height:40px;display:grid;place-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.calendar .days li:before{content:\"\";position:absolute;inset:4px 0;background:transparent;z-index:0}.calendar .days li .day-number{position:relative;z-index:2;width:32px;height:32px;display:grid;place-items:center;border-radius:50%;transition:transform .12s ease,background .12s ease}.calendar .days li:not(.de-active):hover .day-number{background:var(--ngx-range-hover)}.calendar .days li.de-active{color:var(--ngx-range-muted);opacity:.45;cursor:default}.calendar .days li.in-range:before,.calendar .days li.in-range-preview:before{background:var(--ngx-range-accent-soft)}.calendar .days li.range-start:before{border-radius:20px 0 0 20px}.calendar .days li.range-end:before{border-radius:0 20px 20px 0}.calendar .days li:nth-last-child(1 of.in-range-preview):before{border-radius:0 20px 20px 0}.calendar .days li.range-start.range-end:before{border-radius:20px}.calendar .days li.range-start .day-number,.calendar .days li.range-end .day-number{background:var(--ngx-range-accent);color:#fff;font-weight:700;box-shadow:0 3px 10px #6544e847}.calendar .days li.range-single .day-number{box-shadow:none}.calendar .days li.today:not(.range-start):not(.range-end) .day-number{outline:1.5px solid var(--ngx-range-accent);outline-offset:-1px}.calendar .days li.in-range:not(.range-start):not(.range-end) .day-number{color:var(--ngx-range-text)}.calendar .months li,.calendar .years li{height:46px;width:33.333%;display:grid;place-items:center;border-radius:10px;cursor:pointer}.calendar .months li:hover,.calendar .years li:hover{background:var(--ngx-range-hover)}.calendar .months li.selected,.calendar .years li.selected{background:var(--ngx-range-accent);color:#fff}.calendar .months li.de-active,.calendar .years li.de-active{opacity:.4}.calendar .years li{width:25%}.calendar .calendar-footer{display:flex;justify-content:space-between;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--ngx-range-border)}.calendar .calendar-footer button{min-height:34px;padding:0 13px;border:0;border-radius:8px;background:transparent;color:inherit;cursor:pointer;font-weight:600}.calendar .calendar-footer button:hover{background:var(--ngx-range-hover)}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start:before{border-radius:0 20px 20px 0!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-end:before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li:nth-last-child(1 of.in-range-preview):before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start.range-end:before{border-radius:20px!important}::ng-deep [dir=rtl] ngx-date-range-picker #prev,::ng-deep [dir=rtl] ngx-date-range-picker #next{transform:rotate(180deg)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
3164
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\" (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <div class=\"calendar-icon\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 448 512\">\n <path\n d=\"M384 272C384 280.8 376.8 288 368 288H208C199.2 288 192 280.8 192 272C192 263.2 199.2 256 208 256H368C376.8 256 384 263.2 384 272zM80 416C71.16 416 64 408.8 64 400C64 391.2 71.16 384 80 384H240C248.8 384 256 391.2 256 400C256 408.8 248.8 416 240 416H80zM160 272C160 298.5 138.5 320 112 320C85.49 320 64 298.5 64 272C64 245.5 85.49 224 112 224C138.5 224 160 245.5 160 272zM96 272C96 280.8 103.2 288 112 288C120.8 288 128 280.8 128 272C128 263.2 120.8 256 112 256C103.2 256 96 263.2 96 272zM288 400C288 373.5 309.5 352 336 352C362.5 352 384 373.5 384 400C384 426.5 362.5 448 336 448C309.5 448 288 426.5 288 400zM352 400C352 391.2 344.8 384 336 384C327.2 384 320 391.2 320 400C320 408.8 327.2 416 336 416C344.8 416 352 408.8 352 400zM112 0C120.8 0 128 7.164 128 16V64H320V16C320 7.164 327.2 0 336 0C344.8 0 352 7.164 352 16V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H96V16C96 7.164 103.2 0 112 0zM416 192H32V448C32 465.7 46.33 480 64 480H384C401.7 480 416 465.7 416 448V192zM384 96H64C46.33 96 32 110.3 32 128V160H416V128C416 110.3 401.7 96 384 96z\" />\n </svg>\n </div>\n <div class=\"header-copy\">\n <div class=\"header-title\">Date range</div>\n <div class=\"header-value\">{{ calendarHeader() }}</div>\n </div>\n </div>\n\n <div class=\"sub-header\">\n <button type=\"button\" class=\"nav-button\" id=\"prev\" (click)=\"previous()\" aria-label=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n config().previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n\n <button type=\"button\" class=\"current-date\" (click)=\"changeView('month')\">\n <span>{{ displayMonth() }}</span>\n <span>{{ currYear() }}</span>\n </button>\n\n <button type=\"button\" class=\"nav-button\" id=\"next\" (click)=\"next()\" aria-label=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"config().nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">{{ w.min }}</li>\n }\n </ul>\n\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.in-range]=\"item.inRange\"\n [class.in-range-preview]=\"item.inRangePreview\"\n [class.range-start]=\"item.rangeStart\"\n [class.range-end]=\"item.rangeEnd\"\n [class.range-single]=\"item.rangeStart && item.rangeEnd\"\n (mouseenter)=\"onDayEnter(item)\"\n (mouseleave)=\"onDayLeave()\"\n (click)=\"selectDay($event, item)\"\n [attr.aria-selected]=\"\n item.rangeStart || item.rangeEnd || item.inRange || item.inRangePreview\n \">\n <span class=\"day-number\">{{ item.day }}</span>\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n\n <div class=\"calendar-footer\">\n @if (config().clearButton) {\n <button type=\"button\" (click)=\"clear()\">{{ localize().clear }}</button>\n }\n @if (config().todayButton) {\n <button type=\"button\" (click)=\"gotoToday()\">{{ localize().today }}</button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-range-bg: light-dark(#ffffff, #10162b);--ngx-range-text: light-dark(#171717, #f4f4f5);--ngx-range-muted: light-dark(#8a8f98, #72798a);--ngx-range-border: light-dark(#e6e8ee, #272d40);--ngx-range-accent: light-dark(#6544e8, #8d6cff);--ngx-range-accent-soft: light-dark(#eeeaff, #2b2252);--ngx-range-hover: light-dark(#f4f2ff, #211b38)}.wrapper{width:336px;overflow:hidden;border:1px solid var(--ngx-range-border);border-radius:14px;background:var(--ngx-range-bg);color:var(--ngx-range-text);box-shadow:0 18px 55px #0000002e;font-size:13px}.header{display:flex;gap:12px;padding:15px 16px;background:linear-gradient(135deg,#6747e9,#8b64f5);color:#fff}.header .calendar-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:#ffffff29}.header .header-copy{min-width:0;flex:1}.header .header-title{opacity:.75;font-size:11px;text-transform:uppercase;letter-spacing:.08em}.header .header-value{margin-top:3px;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-header{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--ngx-range-border)}.sub-header button{color:inherit;border:0;background:transparent;cursor:pointer}.sub-header .nav-button{width:36px;height:36px;display:grid;place-items:center;border-radius:9px}.sub-header .nav-button:hover{background:var(--ngx-range-hover)}.sub-header .current-date{display:flex;justify-content:center;gap:6px;font-weight:700;font-size:14px}.calendar{padding:10px 12px 12px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;padding:0;margin:0}.calendar .weeks li,.calendar .days li{width:14.2857142857%}.calendar .weeks{margin-bottom:4px}.calendar .weeks li{height:30px;display:grid;place-items:center;color:var(--ngx-range-muted);font-size:11px;font-weight:700}.calendar .days li{position:relative;height:40px;display:grid;place-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.calendar .days li:before{content:\"\";position:absolute;inset:4px 0;background:transparent;z-index:0}.calendar .days li .day-number{position:relative;z-index:2;width:32px;height:32px;display:grid;place-items:center;border-radius:50%;transition:transform .12s ease,background .12s ease}.calendar .days li:not(.de-active):hover .day-number{background:var(--ngx-range-hover)}.calendar .days li.de-active{color:var(--ngx-range-muted);opacity:.45;cursor:default}.calendar .days li.in-range:before,.calendar .days li.in-range-preview:before{background:var(--ngx-range-accent-soft)}.calendar .days li.range-start:before{border-radius:20px 0 0 20px}.calendar .days li.range-end:before{border-radius:0 20px 20px 0}.calendar .days li:nth-last-child(1 of.in-range-preview):before{border-radius:0 20px 20px 0}.calendar .days li.range-start.range-end:before{border-radius:20px}.calendar .days li.range-start .day-number,.calendar .days li.range-end .day-number{background:var(--ngx-range-accent);color:#fff;font-weight:700;box-shadow:0 3px 10px #6544e847}.calendar .days li.range-single .day-number{box-shadow:none}.calendar .days li.today:not(.range-start):not(.range-end) .day-number{outline:1.5px solid var(--ngx-range-accent);outline-offset:-1px}.calendar .days li.in-range:not(.range-start):not(.range-end) .day-number{color:var(--ngx-range-text)}.calendar .months li,.calendar .years li{height:46px;width:33.333%;display:grid;place-items:center;border-radius:10px;cursor:pointer}.calendar .months li:hover,.calendar .years li:hover{background:var(--ngx-range-hover)}.calendar .months li.selected,.calendar .years li.selected{background:var(--ngx-range-accent);color:#fff}.calendar .months li.de-active,.calendar .years li.de-active{opacity:.4}.calendar .years li{width:25%}.calendar .calendar-footer{display:flex;justify-content:space-between;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--ngx-range-border)}.calendar .calendar-footer button{min-height:34px;padding:0 13px;border:0;border-radius:8px;background:transparent;color:inherit;cursor:pointer;font-weight:600}.calendar .calendar-footer button:hover{background:var(--ngx-range-hover)}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start:before{border-radius:0 20px 20px 0!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-end:before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li:nth-last-child(1 of.in-range-preview):before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start.range-end:before{border-radius:20px!important}::ng-deep [dir=rtl] ngx-date-range-picker #prev,::ng-deep [dir=rtl] ngx-date-range-picker #next{transform:rotate(180deg)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
3216
3165
  }
3217
3166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDateRangePickerComponent, decorators: [{
3218
3167
  type: Component,
@@ -3228,14 +3177,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3228
3177
  useExisting: forwardRef(() => NgxDateRangePickerComponent),
3229
3178
  multi: true,
3230
3179
  },
3231
- ], template: "<div class=\"wrapper\" (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <div class=\"calendar-icon\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 448 512\">\n <path\n d=\"M384 272C384 280.8 376.8 288 368 288H208C199.2 288 192 280.8 192 272C192 263.2 199.2 256 208 256H368C376.8 256 384 263.2 384 272zM80 416C71.16 416 64 408.8 64 400C64 391.2 71.16 384 80 384H240C248.8 384 256 391.2 256 400C256 408.8 248.8 416 240 416H80zM160 272C160 298.5 138.5 320 112 320C85.49 320 64 298.5 64 272C64 245.5 85.49 224 112 224C138.5 224 160 245.5 160 272zM96 272C96 280.8 103.2 288 112 288C120.8 288 128 280.8 128 272C128 263.2 120.8 256 112 256C103.2 256 96 263.2 96 272zM288 400C288 373.5 309.5 352 336 352C362.5 352 384 373.5 384 400C384 426.5 362.5 448 336 448C309.5 448 288 426.5 288 400zM352 400C352 391.2 344.8 384 336 384C327.2 384 320 391.2 320 400C320 408.8 327.2 416 336 416C344.8 416 352 408.8 352 400zM112 0C120.8 0 128 7.164 128 16V64H320V16C320 7.164 327.2 0 336 0C344.8 0 352 7.164 352 16V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H96V16C96 7.164 103.2 0 112 0zM416 192H32V448C32 465.7 46.33 480 64 480H384C401.7 480 416 465.7 416 448V192zM384 96H64C46.33 96 32 110.3 32 128V160H416V128C416 110.3 401.7 96 384 96z\" />\n </svg>\n </div>\n <div class=\"header-copy\">\n <div class=\"header-title\">Date range</div>\n <div class=\"header-value\">{{ calendarHeader() }}</div>\n </div>\n </div>\n\n <div class=\"sub-header\">\n <button type=\"button\" class=\"nav-button\" id=\"prev\" (click)=\"previous()\" aria-label=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n\n <button type=\"button\" class=\"current-date\" (click)=\"changeView('month')\">\n <span>{{ displayMonth() }}</span>\n <span>{{ currYear() }}</span>\n </button>\n\n <button type=\"button\" class=\"nav-button\" id=\"next\" (click)=\"next()\" aria-label=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">{{ w.min }}</li>\n }\n </ul>\n\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.in-range]=\"item.inRange\"\n [class.in-range-preview]=\"item.inRangePreview\"\n [class.range-start]=\"item.rangeStart\"\n [class.range-end]=\"item.rangeEnd\"\n [class.range-single]=\"item.rangeStart && item.rangeEnd\"\n (mouseenter)=\"onDayEnter(item)\"\n (mouseleave)=\"onDayLeave()\"\n (click)=\"selectDay($event, item)\"\n [attr.aria-selected]=\"\n item.rangeStart || item.rangeEnd || item.inRange || item.inRangePreview\n \">\n <span class=\"day-number\">{{ item.day }}</span>\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n\n <div class=\"calendar-footer\">\n @if (config.clearButton) {\n <button type=\"button\" (click)=\"clear()\">{{ localize().clear }}</button>\n }\n @if (config.todayButton) {\n <button type=\"button\" (click)=\"gotoToday()\">{{ localize().today }}</button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-range-bg: light-dark(#ffffff, #10162b);--ngx-range-text: light-dark(#171717, #f4f4f5);--ngx-range-muted: light-dark(#8a8f98, #72798a);--ngx-range-border: light-dark(#e6e8ee, #272d40);--ngx-range-accent: light-dark(#6544e8, #8d6cff);--ngx-range-accent-soft: light-dark(#eeeaff, #2b2252);--ngx-range-hover: light-dark(#f4f2ff, #211b38)}.wrapper{width:336px;overflow:hidden;border:1px solid var(--ngx-range-border);border-radius:14px;background:var(--ngx-range-bg);color:var(--ngx-range-text);box-shadow:0 18px 55px #0000002e;font-size:13px}.header{display:flex;gap:12px;padding:15px 16px;background:linear-gradient(135deg,#6747e9,#8b64f5);color:#fff}.header .calendar-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:#ffffff29}.header .header-copy{min-width:0;flex:1}.header .header-title{opacity:.75;font-size:11px;text-transform:uppercase;letter-spacing:.08em}.header .header-value{margin-top:3px;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-header{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--ngx-range-border)}.sub-header button{color:inherit;border:0;background:transparent;cursor:pointer}.sub-header .nav-button{width:36px;height:36px;display:grid;place-items:center;border-radius:9px}.sub-header .nav-button:hover{background:var(--ngx-range-hover)}.sub-header .current-date{display:flex;justify-content:center;gap:6px;font-weight:700;font-size:14px}.calendar{padding:10px 12px 12px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;padding:0;margin:0}.calendar .weeks li,.calendar .days li{width:14.2857142857%}.calendar .weeks{margin-bottom:4px}.calendar .weeks li{height:30px;display:grid;place-items:center;color:var(--ngx-range-muted);font-size:11px;font-weight:700}.calendar .days li{position:relative;height:40px;display:grid;place-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.calendar .days li:before{content:\"\";position:absolute;inset:4px 0;background:transparent;z-index:0}.calendar .days li .day-number{position:relative;z-index:2;width:32px;height:32px;display:grid;place-items:center;border-radius:50%;transition:transform .12s ease,background .12s ease}.calendar .days li:not(.de-active):hover .day-number{background:var(--ngx-range-hover)}.calendar .days li.de-active{color:var(--ngx-range-muted);opacity:.45;cursor:default}.calendar .days li.in-range:before,.calendar .days li.in-range-preview:before{background:var(--ngx-range-accent-soft)}.calendar .days li.range-start:before{border-radius:20px 0 0 20px}.calendar .days li.range-end:before{border-radius:0 20px 20px 0}.calendar .days li:nth-last-child(1 of.in-range-preview):before{border-radius:0 20px 20px 0}.calendar .days li.range-start.range-end:before{border-radius:20px}.calendar .days li.range-start .day-number,.calendar .days li.range-end .day-number{background:var(--ngx-range-accent);color:#fff;font-weight:700;box-shadow:0 3px 10px #6544e847}.calendar .days li.range-single .day-number{box-shadow:none}.calendar .days li.today:not(.range-start):not(.range-end) .day-number{outline:1.5px solid var(--ngx-range-accent);outline-offset:-1px}.calendar .days li.in-range:not(.range-start):not(.range-end) .day-number{color:var(--ngx-range-text)}.calendar .months li,.calendar .years li{height:46px;width:33.333%;display:grid;place-items:center;border-radius:10px;cursor:pointer}.calendar .months li:hover,.calendar .years li:hover{background:var(--ngx-range-hover)}.calendar .months li.selected,.calendar .years li.selected{background:var(--ngx-range-accent);color:#fff}.calendar .months li.de-active,.calendar .years li.de-active{opacity:.4}.calendar .years li{width:25%}.calendar .calendar-footer{display:flex;justify-content:space-between;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--ngx-range-border)}.calendar .calendar-footer button{min-height:34px;padding:0 13px;border:0;border-radius:8px;background:transparent;color:inherit;cursor:pointer;font-weight:600}.calendar .calendar-footer button:hover{background:var(--ngx-range-hover)}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start:before{border-radius:0 20px 20px 0!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-end:before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li:nth-last-child(1 of.in-range-preview):before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start.range-end:before{border-radius:20px!important}::ng-deep [dir=rtl] ngx-date-range-picker #prev,::ng-deep [dir=rtl] ngx-date-range-picker #next{transform:rotate(180deg)!important}\n"] }]
3232
- }], propDecorators: { localize: [{ type: i0.Input, args: [{ isSignal: true, alias: "localize", required: false }] }], locale: [{
3233
- type: Input
3234
- }], min: [{
3235
- type: Input
3236
- }], max: [{
3237
- type: Input
3238
- }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], rangeChange: [{
3180
+ ], template: "<div class=\"wrapper\" (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <div class=\"calendar-icon\" aria-hidden=\"true\">\n <svg fill=\"currentColor\" viewBox=\"0 0 448 512\">\n <path\n d=\"M384 272C384 280.8 376.8 288 368 288H208C199.2 288 192 280.8 192 272C192 263.2 199.2 256 208 256H368C376.8 256 384 263.2 384 272zM80 416C71.16 416 64 408.8 64 400C64 391.2 71.16 384 80 384H240C248.8 384 256 391.2 256 400C256 408.8 248.8 416 240 416H80zM160 272C160 298.5 138.5 320 112 320C85.49 320 64 298.5 64 272C64 245.5 85.49 224 112 224C138.5 224 160 245.5 160 272zM96 272C96 280.8 103.2 288 112 288C120.8 288 128 280.8 128 272C128 263.2 120.8 256 112 256C103.2 256 96 263.2 96 272zM288 400C288 373.5 309.5 352 336 352C362.5 352 384 373.5 384 400C384 426.5 362.5 448 336 448C309.5 448 288 426.5 288 400zM352 400C352 391.2 344.8 384 336 384C327.2 384 320 391.2 320 400C320 408.8 327.2 416 336 416C344.8 416 352 408.8 352 400zM112 0C120.8 0 128 7.164 128 16V64H320V16C320 7.164 327.2 0 336 0C344.8 0 352 7.164 352 16V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H96V16C96 7.164 103.2 0 112 0zM416 192H32V448C32 465.7 46.33 480 64 480H384C401.7 480 416 465.7 416 448V192zM384 96H64C46.33 96 32 110.3 32 128V160H416V128C416 110.3 401.7 96 384 96z\" />\n </svg>\n </div>\n <div class=\"header-copy\">\n <div class=\"header-title\">Date range</div>\n <div class=\"header-value\">{{ calendarHeader() }}</div>\n </div>\n </div>\n\n <div class=\"sub-header\">\n <button type=\"button\" class=\"nav-button\" id=\"prev\" (click)=\"previous()\" aria-label=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n config().previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n\n <button type=\"button\" class=\"current-date\" (click)=\"changeView('month')\">\n <span>{{ displayMonth() }}</span>\n <span>{{ currYear() }}</span>\n </button>\n\n <button type=\"button\" class=\"nav-button\" id=\"next\" (click)=\"next()\" aria-label=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"config().nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"calendar\">\n @if (view() === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">{{ w.min }}</li>\n }\n </ul>\n\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.in-range]=\"item.inRange\"\n [class.in-range-preview]=\"item.inRangePreview\"\n [class.range-start]=\"item.rangeStart\"\n [class.range-end]=\"item.rangeEnd\"\n [class.range-single]=\"item.rangeStart && item.rangeEnd\"\n (mouseenter)=\"onDayEnter(item)\"\n (mouseleave)=\"onDayLeave()\"\n (click)=\"selectDay($event, item)\"\n [attr.aria-selected]=\"\n item.rangeStart || item.rangeEnd || item.inRange || item.inRangePreview\n \">\n <span class=\"day-number\">{{ item.day }}</span>\n </li>\n }\n </ul>\n } @else if (view() === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n\n <div class=\"calendar-footer\">\n @if (config().clearButton) {\n <button type=\"button\" (click)=\"clear()\">{{ localize().clear }}</button>\n }\n @if (config().todayButton) {\n <button type=\"button\" (click)=\"gotoToday()\">{{ localize().today }}</button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n", styles: [":host{--ngx-range-bg: light-dark(#ffffff, #10162b);--ngx-range-text: light-dark(#171717, #f4f4f5);--ngx-range-muted: light-dark(#8a8f98, #72798a);--ngx-range-border: light-dark(#e6e8ee, #272d40);--ngx-range-accent: light-dark(#6544e8, #8d6cff);--ngx-range-accent-soft: light-dark(#eeeaff, #2b2252);--ngx-range-hover: light-dark(#f4f2ff, #211b38)}.wrapper{width:336px;overflow:hidden;border:1px solid var(--ngx-range-border);border-radius:14px;background:var(--ngx-range-bg);color:var(--ngx-range-text);box-shadow:0 18px 55px #0000002e;font-size:13px}.header{display:flex;gap:12px;padding:15px 16px;background:linear-gradient(135deg,#6747e9,#8b64f5);color:#fff}.header .calendar-icon{width:42px;height:42px;display:grid;place-items:center;border-radius:12px;background:#ffffff29}.header .header-copy{min-width:0;flex:1}.header .header-title{opacity:.75;font-size:11px;text-transform:uppercase;letter-spacing:.08em}.header .header-value{margin-top:3px;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-header{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--ngx-range-border)}.sub-header button{color:inherit;border:0;background:transparent;cursor:pointer}.sub-header .nav-button{width:36px;height:36px;display:grid;place-items:center;border-radius:9px}.sub-header .nav-button:hover{background:var(--ngx-range-hover)}.sub-header .current-date{display:flex;justify-content:center;gap:6px;font-weight:700;font-size:14px}.calendar{padding:10px 12px 12px}.calendar ul{display:flex;flex-wrap:wrap;list-style:none;padding:0;margin:0}.calendar .weeks li,.calendar .days li{width:14.2857142857%}.calendar .weeks{margin-bottom:4px}.calendar .weeks li{height:30px;display:grid;place-items:center;color:var(--ngx-range-muted);font-size:11px;font-weight:700}.calendar .days li{position:relative;height:40px;display:grid;place-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.calendar .days li:before{content:\"\";position:absolute;inset:4px 0;background:transparent;z-index:0}.calendar .days li .day-number{position:relative;z-index:2;width:32px;height:32px;display:grid;place-items:center;border-radius:50%;transition:transform .12s ease,background .12s ease}.calendar .days li:not(.de-active):hover .day-number{background:var(--ngx-range-hover)}.calendar .days li.de-active{color:var(--ngx-range-muted);opacity:.45;cursor:default}.calendar .days li.in-range:before,.calendar .days li.in-range-preview:before{background:var(--ngx-range-accent-soft)}.calendar .days li.range-start:before{border-radius:20px 0 0 20px}.calendar .days li.range-end:before{border-radius:0 20px 20px 0}.calendar .days li:nth-last-child(1 of.in-range-preview):before{border-radius:0 20px 20px 0}.calendar .days li.range-start.range-end:before{border-radius:20px}.calendar .days li.range-start .day-number,.calendar .days li.range-end .day-number{background:var(--ngx-range-accent);color:#fff;font-weight:700;box-shadow:0 3px 10px #6544e847}.calendar .days li.range-single .day-number{box-shadow:none}.calendar .days li.today:not(.range-start):not(.range-end) .day-number{outline:1.5px solid var(--ngx-range-accent);outline-offset:-1px}.calendar .days li.in-range:not(.range-start):not(.range-end) .day-number{color:var(--ngx-range-text)}.calendar .months li,.calendar .years li{height:46px;width:33.333%;display:grid;place-items:center;border-radius:10px;cursor:pointer}.calendar .months li:hover,.calendar .years li:hover{background:var(--ngx-range-hover)}.calendar .months li.selected,.calendar .years li.selected{background:var(--ngx-range-accent);color:#fff}.calendar .months li.de-active,.calendar .years li.de-active{opacity:.4}.calendar .years li{width:25%}.calendar .calendar-footer{display:flex;justify-content:space-between;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--ngx-range-border)}.calendar .calendar-footer button{min-height:34px;padding:0 13px;border:0;border-radius:8px;background:transparent;color:inherit;cursor:pointer;font-weight:600}.calendar .calendar-footer button:hover{background:var(--ngx-range-hover)}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start:before{border-radius:0 20px 20px 0!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-end:before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li:nth-last-child(1 of.in-range-preview):before{border-radius:20px 0 0 20px!important}::ng-deep [dir=rtl] ngx-date-range-picker .days li.range-start.range-end:before{border-radius:20px!important}::ng-deep [dir=rtl] ngx-date-range-picker #prev,::ng-deep [dir=rtl] ngx-date-range-picker #next{transform:rotate(180deg)!important}\n"] }]
3181
+ }], ctorParameters: () => [], propDecorators: { view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], rangeChange: [{
3239
3182
  type: Output
3240
3183
  }], change: [{
3241
3184
  type: Output
@@ -3243,6 +3186,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3243
3186
 
3244
3187
  class NgxInputDateRangePicker {
3245
3188
  el;
3189
+ _config = inject(NGX_DATE_CONFIG);
3246
3190
  dateAdapterRegistry = inject(DateAdapterRegistry);
3247
3191
  overlayService = inject(OverlayService);
3248
3192
  viewContainerRef = inject(ViewContainerRef);
@@ -3250,27 +3194,15 @@ class NgxInputDateRangePicker {
3250
3194
  openOnClick = true;
3251
3195
  displayFormat = 'yyyy/MM/dd';
3252
3196
  rangeSeparator = ' – ';
3253
- _locale = 'en';
3254
- set locale(value) {
3255
- this._locale = value || 'en';
3256
- this.adapter = this.dateAdapterRegistry.resolve(this._locale);
3257
- this.formatValue();
3258
- }
3259
- get locale() {
3260
- return this._locale;
3261
- }
3262
- set setMin(value) {
3263
- this.min = deserialize(value);
3264
- this._validatorOnChange();
3265
- }
3266
- set setMax(value) {
3267
- this.max = deserialize(value);
3268
- this._validatorOnChange();
3269
- }
3270
- config = new NgxDatePickerConfig();
3197
+ config = model(this._config, /* @ts-ignore */
3198
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
3199
+ locale = input(this._config.locale ?? 'en', /* @ts-ignore */
3200
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
3201
+ min = input(null, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: deserialize });
3202
+ max = input(null, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: deserialize });
3271
3203
  change = new EventEmitter();
3272
- min = null;
3273
- max = null;
3204
+ minDate = null;
3205
+ maxDate = null;
3274
3206
  value = { start: null, end: null };
3275
3207
  pickerRef;
3276
3208
  isDisabled = false;
@@ -3280,11 +3212,20 @@ class NgxInputDateRangePicker {
3280
3212
  _validatorOnChange = () => { };
3281
3213
  constructor(el) {
3282
3214
  this.el = el;
3283
- this.adapter = this.dateAdapterRegistry.resolve(this.locale);
3284
- }
3285
- ngOnChanges() {
3286
- this.adapter = this.dateAdapterRegistry.resolve(this.locale);
3287
- this.formatValue();
3215
+ effect(() => {
3216
+ const locale = this.locale();
3217
+ this.adapter = this.dateAdapterRegistry.resolve(locale);
3218
+ this.formatValue();
3219
+ });
3220
+ effect(() => {
3221
+ const minDate = this.min();
3222
+ const maxDate = this.max();
3223
+ if (sameDate(minDate, this.minDate) && sameDate(maxDate, this.maxDate))
3224
+ return;
3225
+ this.minDate = minDate;
3226
+ this.maxDate = maxDate;
3227
+ this._validatorOnChange();
3228
+ });
3288
3229
  }
3289
3230
  onClick(event) {
3290
3231
  if (!this.openOnClick || this.isDisabled)
@@ -3320,7 +3261,6 @@ class NgxInputDateRangePicker {
3320
3261
  this.destroyDatePicker();
3321
3262
  return;
3322
3263
  }
3323
- this.adapter = this.dateAdapterRegistry.resolve(this.locale);
3324
3264
  this.pickerRef = this.overlayService.open({
3325
3265
  anchor: this.el.nativeElement,
3326
3266
  component: NgxDateRangePickerComponent,
@@ -3328,11 +3268,11 @@ class NgxInputDateRangePicker {
3328
3268
  alignment: 'center',
3329
3269
  placement: 'bottom',
3330
3270
  margin: 4,
3331
- configure: (instance) => {
3332
- instance.locale = this.locale;
3333
- instance.min = this.min;
3334
- instance.max = this.max;
3335
- instance.updateConfig(this.config);
3271
+ configure: (instance, ref) => {
3272
+ ref.componentRef?.setInput('locale', this.locale());
3273
+ ref.componentRef?.setInput('min', this.minDate);
3274
+ ref.componentRef?.setInput('max', this.maxDate);
3275
+ instance.updateConfig(this.config());
3336
3276
  instance.writeValue(this.value);
3337
3277
  instance.rangeChange.subscribe((value) => {
3338
3278
  this.value = normalizeDateRange(value);
@@ -3352,11 +3292,11 @@ class NgxInputDateRangePicker {
3352
3292
  }
3353
3293
  validate(_control) {
3354
3294
  const { start, end } = this.value;
3355
- if (start && this.min && compareDate(start, this.min) < 0) {
3356
- return { min: this.min };
3295
+ if (start && this.minDate && compareDate(start, this.minDate) < 0) {
3296
+ return { min: this.minDate };
3357
3297
  }
3358
- if (end && this.max && compareDate(end, this.max) > 0) {
3359
- return { max: this.max };
3298
+ if (end && this.maxDate && compareDate(end, this.maxDate) > 0) {
3299
+ return { max: this.maxDate };
3360
3300
  }
3361
3301
  if (start && end && compareDate(start, end) > 0) {
3362
3302
  return { range: true };
@@ -3382,7 +3322,7 @@ class NgxInputDateRangePicker {
3382
3322
  this.pickerRef = undefined;
3383
3323
  }
3384
3324
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputDateRangePicker, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
3385
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxInputDateRangePicker, isStandalone: true, selector: "input[ngxInputDateRangePicker]", inputs: { openOnClick: "openOnClick", displayFormat: "displayFormat", rangeSeparator: "rangeSeparator", locale: "locale", setMin: ["min", "setMin"], setMax: ["max", "setMax"], config: "config" }, outputs: { change: "change" }, host: { listeners: { "click": "onClick($event)", "blur": "onBlur()" }, properties: { "attr.readOnly": "true" }, classAttribute: "ngx-datepicker-input" }, providers: [
3325
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.4", type: NgxInputDateRangePicker, isStandalone: true, selector: "input[ngxInputDateRangePicker]", inputs: { openOnClick: { classPropertyName: "openOnClick", publicName: "openOnClick", isSignal: false, isRequired: false, transformFunction: null }, displayFormat: { classPropertyName: "displayFormat", publicName: "displayFormat", isSignal: false, isRequired: false, transformFunction: null }, rangeSeparator: { classPropertyName: "rangeSeparator", publicName: "rangeSeparator", isSignal: false, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { config: "configChange", change: "change" }, host: { listeners: { "click": "onClick($event)", "blur": "onBlur()" }, properties: { "attr.readOnly": "true" }, classAttribute: "ngx-datepicker-input" }, providers: [
3386
3326
  DateAdapterRegistry,
3387
3327
  {
3388
3328
  provide: NG_VALUE_ACCESSOR,
@@ -3394,7 +3334,7 @@ class NgxInputDateRangePicker {
3394
3334
  useExisting: forwardRef(() => NgxInputDateRangePicker),
3395
3335
  multi: true,
3396
3336
  },
3397
- ], exportAs: ["ngxInputDateRangePicker"], usesOnChanges: true, ngImport: i0 });
3337
+ ], exportAs: ["ngxInputDateRangePicker"], ngImport: i0 });
3398
3338
  }
3399
3339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputDateRangePicker, decorators: [{
3400
3340
  type: Directive,
@@ -3425,17 +3365,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3425
3365
  type: Input
3426
3366
  }], rangeSeparator: [{
3427
3367
  type: Input
3428
- }], locale: [{
3429
- type: Input
3430
- }], setMin: [{
3431
- type: Input,
3432
- args: ['min']
3433
- }], setMax: [{
3434
- type: Input,
3435
- args: ['max']
3436
- }], config: [{
3437
- type: Input
3438
- }], change: [{
3368
+ }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }, { type: i0.Output, args: ["configChange"] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], change: [{
3439
3369
  type: Output
3440
3370
  }], onClick: [{
3441
3371
  type: HostListener,
@@ -3449,5 +3379,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3449
3379
  * Generated bundle index. Do not edit.
3450
3380
  */
3451
3381
 
3452
- export { DATE_ADAPTERS, DEFAULT_DATE_ADAPTERS, DateModel, DateViewDay, DateViewMonth, DateViewWeek, DateViewYear, NgxCalendarComponent, NgxDatePickerConfig, NgxDateRangePickerComponent, NgxInputDatePicker, NgxInputDatePickerComponent, NgxInputDateRangePicker, createDateRange, getLocals, isCompleteDateRange, isDateInPreviewRange, isDateInRange, normalizeDateRange, provideDateAdapters };
3382
+ export { DATE_ADAPTERS, DEFAULT_DATE_ADAPTERS, DEFAULT_DATE_CONFIG, DateModel, DateViewDay, DateViewMonth, DateViewWeek, DateViewYear, NGX_DATE_CONFIG, NgxCalendarComponent, NgxCalendarLocalization, NgxDateConfig, NgxDateRangePickerComponent, NgxInputDatePicker, NgxInputDatePickerComponent, NgxInputDateRangePicker, createDateRange, getLocals, isCompleteDateRange, isDateInPreviewRange, isDateInRange, normalizeDateRange, provideDateAdapters };
3453
3383
  //# sourceMappingURL=ngx-kit-date-picker.mjs.map