ngx-kit 8.3.4 → 8.3.6

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
@@ -612,9 +631,10 @@ var Jalali;
612
631
  * @param {number} [ms] milliseconds
613
632
  * @returns Date object of the jalaali calendar dates
614
633
  */
615
- function jalaaliToDateObject(jy, jm, jd, h, m, s, ms) {
616
- var gregorianCalenderDate = toGregorian(jy, jm, jd);
617
- return new Date(gregorianCalenderDate.gy, gregorianCalenderDate.gm - 1, gregorianCalenderDate.gd, h || 3, m || 30, s || 0, ms || 0);
634
+ function jalaaliToDateObject(jy, jm, jd, h = 0, m = 0, s = 0, ms = 0) {
635
+ const { gy, gm, gd } = toGregorian(jy, jm, jd);
636
+ const date = new Date(Date.UTC(gy, gm - 1, gd, h, m, s, ms));
637
+ return date;
618
638
  }
619
639
  Jalali.jalaaliToDateObject = jalaaliToDateObject;
620
640
  /*
@@ -1430,18 +1450,21 @@ class ChineseAdapter {
1430
1450
  }
1431
1451
  }
1432
1452
 
1433
- const DATE_ADAPTERS = new InjectionToken('DATE_ADAPTERS');
1434
- const DEFAULT_DATE_ADAPTERS = Object.freeze([
1453
+ const DEFAULT_DATE_ADAPTERS = [
1435
1454
  { locale: 'en', useClass: GregorianAdapter },
1436
1455
  { locale: 'fa', useClass: JalaliAdapter },
1437
1456
  { locale: 'hi', useClass: HijriAdapter },
1438
1457
  { locale: 'zh', useClass: ChineseAdapter },
1439
- ]);
1458
+ ];
1440
1459
  function getLocals() {
1441
1460
  const adapters = inject(DATE_ADAPTERS);
1442
1461
  return adapters.map((m) => m.locale);
1443
1462
  }
1444
1463
 
1464
+ const DATE_ADAPTERS = new InjectionToken('ngx-date-adapters', {
1465
+ factory: () => DEFAULT_DATE_ADAPTERS,
1466
+ });
1467
+
1445
1468
  class DateAdapterRegistry {
1446
1469
  adapters = inject(DATE_ADAPTERS);
1447
1470
  resolve(locale) {
@@ -1484,9 +1507,17 @@ function convertNumberToTime(num) {
1484
1507
  }
1485
1508
 
1486
1509
  class NgxDatePickerBase {
1487
- _locale = 'en';
1510
+ _config = inject(NGX_DATE_CONFIG);
1511
+ locale = input(this._config.locale ?? 'en', /* @ts-ignore */
1512
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
1513
+ localize = input(this._config.localization ?? new NgxCalendarLocalization(), /* @ts-ignore */
1514
+ ...(ngDevMode ? [{ debugName: "localize" }] : /* istanbul ignore next */ []));
1515
+ config = model(this._config, /* @ts-ignore */
1516
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
1488
1517
  dateAdapterRegistry = inject(DateAdapterRegistry);
1489
- adapter = this.dateAdapterRegistry.resolve(this._locale);
1518
+ adapter = this.dateAdapterRegistry.resolve(this.locale());
1519
+ min = input(null, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: deserialize });
1520
+ max = input(null, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: deserialize });
1490
1521
  currYear = signal(0, /* @ts-ignore */
1491
1522
  ...(ngDevMode ? [{ debugName: "currYear" }] : /* istanbul ignore next */ []));
1492
1523
  currMonth = signal(0, /* @ts-ignore */
@@ -1504,6 +1535,20 @@ class NgxDatePickerBase {
1504
1535
  ...(ngDevMode ? [{ debugName: "displayMonth" }] : /* istanbul ignore next */ []));
1505
1536
  minDate = null;
1506
1537
  maxDate = null;
1538
+ constructor() {
1539
+ effect(() => {
1540
+ const minDate = this.min();
1541
+ const maxDate = this.max();
1542
+ const minChanged = !sameDate(minDate, this.minDate);
1543
+ const maxChanged = !sameDate(maxDate, this.maxDate);
1544
+ if (!minChanged && !maxChanged)
1545
+ return;
1546
+ this.minDate = minDate;
1547
+ this.maxDate = maxDate;
1548
+ this.onDateBoundsChange();
1549
+ });
1550
+ }
1551
+ onDateBoundsChange() { }
1507
1552
  renderCalendar(view, selected, events, callback) {
1508
1553
  switch (view) {
1509
1554
  case 'month':
@@ -1613,7 +1658,7 @@ class NgxDatePickerBase {
1613
1658
  for (let i = firstDayOfMonth; i > 0; i--) {
1614
1659
  const day = lastDateOfLastMonth - i + 1;
1615
1660
  const date = this.adapter.getDate({
1616
- locale: this._locale,
1661
+ locale: this.locale(),
1617
1662
  year: this.currYear(),
1618
1663
  month: this.currMonth() - 1,
1619
1664
  day,
@@ -1631,7 +1676,7 @@ class NgxDatePickerBase {
1631
1676
  const today = this.adapter.today();
1632
1677
  const isToday = day === today.day && this.currMonth() === today.month && this.currYear() === today.year;
1633
1678
  const date = this.adapter.getDate({
1634
- locale: this._locale,
1679
+ locale: this.locale(),
1635
1680
  year: this.currYear(),
1636
1681
  month: this.currMonth(),
1637
1682
  day,
@@ -1650,7 +1695,7 @@ class NgxDatePickerBase {
1650
1695
  for (let i = lastDayOfMonth; i < 6; i++) {
1651
1696
  const day = i - lastDayOfMonth + 1;
1652
1697
  const date = this.adapter.getDate({
1653
- locale: this._locale,
1698
+ locale: this.locale(),
1654
1699
  year: this.currYear(),
1655
1700
  month: this.currMonth() + 1,
1656
1701
  day,
@@ -1670,9 +1715,9 @@ class NgxDatePickerBase {
1670
1715
  return c === 0;
1671
1716
  }
1672
1717
  checkActiveMonth(year, month) {
1673
- const fd = this.adapter.getDate({ locale: this._locale, year, month, day: 1 });
1718
+ const fd = this.adapter.getDate({ locale: this.locale(), year, month, day: 1 });
1674
1719
  const ld = this.adapter.getDate({
1675
- locale: this._locale,
1720
+ locale: this.locale(),
1676
1721
  year,
1677
1722
  month,
1678
1723
  day: this.adapter.lastDateofMonth(year, month),
@@ -1682,7 +1727,7 @@ class NgxDatePickerBase {
1682
1727
  return clampMonth(fd, min, max) === 0 && clampMonth(ld, min, max) === 0;
1683
1728
  }
1684
1729
  checkActiveYear(year) {
1685
- const d = this.adapter.getDate({ locale: this._locale, year, month: 1, day: 1 });
1730
+ const d = this.adapter.getDate({ locale: this.locale(), year, month: 1, day: 1 });
1686
1731
  return clampYear(d, this.minDate, this.maxDate) === 0;
1687
1732
  }
1688
1733
  getEvents(date, events) {
@@ -1714,56 +1759,14 @@ class NgxDatePickerBase {
1714
1759
  };
1715
1760
  });
1716
1761
  }
1762
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDatePickerBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1763
+ 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
1764
  }
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();
1765
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDatePickerBase, decorators: [{
1766
+ type: Directive
1767
+ }], 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
1768
 
1736
1769
  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
1770
  view = model('day', /* @ts-ignore */
1768
1771
  ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
1769
1772
  change = new EventEmitter();
@@ -1777,12 +1780,20 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1777
1780
  _validatorOnChange = () => { };
1778
1781
  constructor() {
1779
1782
  super();
1783
+ effect(() => {
1784
+ this.adapter = this.dateAdapterRegistry.resolve(this.locale());
1785
+ this.init();
1786
+ });
1780
1787
  }
1781
1788
  ngOnInit() {
1782
1789
  this.init();
1783
1790
  }
1791
+ onDateBoundsChange() {
1792
+ this._validatorOnChange();
1793
+ this.init();
1794
+ }
1784
1795
  updateConfig(val) {
1785
- this.config = { ...new NgxDatePickerConfig(), ...val };
1796
+ this.config.set({ ...this.config(), ...val });
1786
1797
  }
1787
1798
  init() {
1788
1799
  this.months = this.adapter.longMonths;
@@ -1900,7 +1911,7 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1900
1911
  ev.stopPropagation();
1901
1912
  if (item.active) {
1902
1913
  this.selected = {
1903
- locale: this._locale,
1914
+ locale: this.locale(),
1904
1915
  year: this.currYear(),
1905
1916
  month: this.currMonth(),
1906
1917
  day: item.day,
@@ -1931,7 +1942,7 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1931
1942
  ev.stopPropagation();
1932
1943
  }
1933
1944
  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: [
1945
+ 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
1946
  DateAdapterRegistry,
1936
1947
  {
1937
1948
  provide: NG_VALUE_ACCESSOR,
@@ -1943,7 +1954,7 @@ class NgxInputDatePickerComponent extends NgxDatePickerBase {
1943
1954
  useExisting: forwardRef(() => NgxInputDatePickerComponent),
1944
1955
  multi: true,
1945
1956
  },
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"] }] });
1957
+ ], 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
1958
  }
1948
1959
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputDatePickerComponent, decorators: [{
1949
1960
  type: Component,
@@ -1959,37 +1970,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
1959
1970
  useExisting: forwardRef(() => NgxInputDatePickerComponent),
1960
1971
  multi: true,
1961
1972
  },
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: [{
1973
+ ], 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"] }]
1974
+ }], ctorParameters: () => [], propDecorators: { view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], change: [{
1975
1975
  type: Output
1976
1976
  }] } });
1977
1977
 
1978
1978
  class NgxInputDatePicker {
1979
1979
  el;
1980
1980
  dateAdapterRegistry = inject(DateAdapterRegistry);
1981
+ _config = inject(NGX_DATE_CONFIG);
1981
1982
  openOnCLick = input(true, /* @ts-ignore */
1982
1983
  ...(ngDevMode ? [{ debugName: "openOnCLick" }] : /* istanbul ignore next */ []));
1983
- change = new EventEmitter();
1984
+ change = output();
1984
1985
  value;
1985
1986
  pickerRef;
1986
1987
  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
- }
1988
+ config = model(this._config, /* @ts-ignore */
1989
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
1990
+ locale = input(this.config().locale ?? 'en', /* @ts-ignore */
1991
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
1993
1992
  _onChange = (value) => { };
1994
1993
  _onTouched = () => { };
1995
1994
  _validatorOnChange = () => { };
@@ -1997,39 +1996,36 @@ class NgxInputDatePicker {
1997
1996
  * display format in input
1998
1997
  */
1999
1998
  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
- }
1999
+ /** The minimum and maximum valid dates. */
2000
+ min = input(null, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: deserialize });
2001
+ max = input(null, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: deserialize });
2002
+ minDate = null;
2003
+ maxDate = null;
2022
2004
  isDisabled = false;
2023
2005
  overlayService = inject(OverlayService);
2024
2006
  viewContainerRef = inject(ViewContainerRef);
2025
2007
  renderer = inject(Renderer2);
2026
2008
  constructor(el) {
2027
2009
  this.el = el;
2010
+ effect(() => {
2011
+ const locale = this.locale();
2012
+ this.adapter = this.dateAdapterRegistry.resolve(locale);
2013
+ this._formatValue(this.value);
2014
+ });
2015
+ effect(() => {
2016
+ const minDate = this.min();
2017
+ const maxDate = this.max();
2018
+ if (sameDate(minDate, this.minDate) && sameDate(maxDate, this.maxDate))
2019
+ return;
2020
+ this.minDate = minDate;
2021
+ this.maxDate = maxDate;
2022
+ this._validatorOnChange();
2023
+ });
2028
2024
  }
2029
2025
  updateConfig(val) {
2030
- this.config = { ...new NgxDatePickerConfig(), ...val };
2026
+ this.config.set({ ...this.config(), ...val });
2031
2027
  if (this.pickerRef && this.pickerRef.componentRef) {
2032
- this.pickerRef.componentRef.instance.updateConfig(this.config);
2028
+ this.pickerRef.componentRef.instance.updateConfig(this.config());
2033
2029
  }
2034
2030
  }
2035
2031
  ngOnDestroy() {
@@ -2088,10 +2084,10 @@ class NgxInputDatePicker {
2088
2084
  placement: 'bottom',
2089
2085
  margin: 2,
2090
2086
  configure: (instance, ref) => {
2091
- instance.locale = this._locale;
2092
- instance.minDate = this.min;
2093
- instance.maxDate = this.max;
2094
- instance.updateConfig(this.config);
2087
+ ref.componentRef?.setInput('locale', this.locale());
2088
+ ref.componentRef?.setInput('min', this.minDate);
2089
+ ref.componentRef?.setInput('max', this.maxDate);
2090
+ instance.updateConfig(this.config());
2095
2091
  instance.writeValue(this.value);
2096
2092
  instance.change.subscribe((c) => {
2097
2093
  this.value = c;
@@ -2122,17 +2118,17 @@ class NgxInputDatePicker {
2122
2118
  invalid: true,
2123
2119
  };
2124
2120
  }
2125
- let c = clampDate(this.value, this.min, this.max);
2121
+ let c = clampDate(this.value, this.minDate, this.maxDate);
2126
2122
  if (c < 0) {
2127
2123
  return {
2128
2124
  invalid: true,
2129
- min: this.min,
2125
+ min: this.minDate,
2130
2126
  };
2131
2127
  }
2132
2128
  else if (c > 0) {
2133
2129
  return {
2134
2130
  invalid: true,
2135
- max: this.max,
2131
+ max: this.maxDate,
2136
2132
  };
2137
2133
  }
2138
2134
  }
@@ -2151,7 +2147,7 @@ class NgxInputDatePicker {
2151
2147
  }
2152
2148
  }
2153
2149
  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: [
2150
+ 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
2151
  DateAdapterRegistry,
2156
2152
  {
2157
2153
  provide: NG_VALUE_ACCESSOR,
@@ -2188,22 +2184,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
2188
2184
  },
2189
2185
  ],
2190
2186
  }]
2191
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { openOnCLick: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOnCLick", required: false }] }], change: [{
2192
- type: Output
2193
- }], locale: [{
2187
+ }], 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
2188
  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: [{
2189
+ }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], onClick: [{
2207
2190
  type: HostListener,
2208
2191
  args: ['click', ['$event']]
2209
2192
  }], onInput: [{
@@ -2220,36 +2203,8 @@ const MIN_EVENT_MINUTES = 30;
2220
2203
  const MONTH_ROW_COUNT = 6;
2221
2204
  const MONTH_COLUMN_COUNT = 7;
2222
2205
  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
2206
  resizeAndMovable = input(false, /* @ts-ignore */
2227
2207
  ...(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
2208
  view = 'month';
2254
2209
  _events = [];
2255
2210
  set events(val) {
@@ -2282,6 +2237,12 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2282
2237
  interaction = null;
2283
2238
  constructor() {
2284
2239
  super();
2240
+ effect(() => {
2241
+ this.adapter = this.dateAdapterRegistry.resolve(this.locale());
2242
+ if (this.currYear() !== undefined)
2243
+ this.syncAnchorToLocale();
2244
+ this.renderCalendar(this.view);
2245
+ });
2285
2246
  }
2286
2247
  ngOnInit() {
2287
2248
  this.months = this.adapter.longMonths;
@@ -2290,6 +2251,9 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2290
2251
  this.syncAnchorToLocale();
2291
2252
  this.renderCalendar(this.view);
2292
2253
  }
2254
+ onDateBoundsChange() {
2255
+ this.renderCalendar(this.view);
2256
+ }
2293
2257
  onResize() {
2294
2258
  this.calcCellSize();
2295
2259
  }
@@ -2551,13 +2515,13 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2551
2515
  }
2552
2516
  renderEventView() {
2553
2517
  const monthStart = this.adapter.getDate({
2554
- locale: this._locale,
2518
+ locale: this.locale(),
2555
2519
  year: this.currYear(),
2556
2520
  month: this.currMonth(),
2557
2521
  day: 1,
2558
2522
  });
2559
2523
  const monthEnd = this.adapter.getDate({
2560
- locale: this._locale,
2524
+ locale: this.locale(),
2561
2525
  year: this.currYear(),
2562
2526
  month: this.currMonth(),
2563
2527
  day: this.adapter.lastDateofMonth(this.currYear(), this.currMonth()),
@@ -2631,7 +2595,7 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2631
2595
  if (this.view === 'month' || this.view === 'event') {
2632
2596
  const locale = this.adapter.toLocale(d);
2633
2597
  this.anchorDate.set(this.adapter.getDate({
2634
- locale: this._locale,
2598
+ locale: this.locale(),
2635
2599
  year: locale.year,
2636
2600
  month: locale.month + direction,
2637
2601
  day: 1,
@@ -2853,22 +2817,12 @@ class NgxCalendarComponent extends NgxDatePickerBase {
2853
2817
  defaultHeight = 600;
2854
2818
  minHeight = this.defaultHeight;
2855
2819
  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 });
2820
+ 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
2821
  }
2858
2822
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxCalendarComponent, decorators: [{
2859
2823
  type: Component,
2860
2824
  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: [{
2825
+ }], ctorParameters: () => [], propDecorators: { resizeAndMovable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizeAndMovable", required: false }] }], view: [{
2872
2826
  type: Input
2873
2827
  }], events: [{
2874
2828
  type: Input
@@ -2897,13 +2851,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
2897
2851
  function dedupeAdapters(adapters) {
2898
2852
  return Array.from(new Map(adapters.map((a) => [a.locale, a])).values());
2899
2853
  }
2900
- function provideDateAdapters(...additional) {
2901
- const all = dedupeAdapters([...DEFAULT_DATE_ADAPTERS, ...additional]);
2902
- return all.map((adapter) => ({
2854
+ function provideDateAdapters(configs) {
2855
+ const adapters = configs?.adapters ?? [];
2856
+ const all = dedupeAdapters([...DEFAULT_DATE_ADAPTERS, ...adapters]);
2857
+ const c = { ...DEFAULT_DATE_CONFIG, ...configs };
2858
+ const d = all.map((adapter) => ({
2903
2859
  provide: DATE_ADAPTERS,
2904
2860
  multi: true,
2905
2861
  useValue: adapter,
2906
2862
  }));
2863
+ return [
2864
+ ...d,
2865
+ {
2866
+ provide: NGX_DATE_CONFIG,
2867
+ multi: true,
2868
+ useValue: c,
2869
+ },
2870
+ ];
2907
2871
  }
2908
2872
 
2909
2873
  function createDateRange(start = null, end = null) {
@@ -2965,31 +2929,6 @@ function isDateInPreviewRange(date, start, previewEnd) {
2965
2929
  }
2966
2930
 
2967
2931
  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
2932
  view = model('day', /* @ts-ignore */
2994
2933
  ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
2995
2934
  rangeChange = new EventEmitter();
@@ -3003,11 +2942,22 @@ class NgxDateRangePickerComponent extends NgxDatePickerBase {
3003
2942
  _onTouched = () => { };
3004
2943
  _validatorOnChange = () => { };
3005
2944
  isDisabled = false;
2945
+ constructor() {
2946
+ super();
2947
+ effect(() => {
2948
+ this.adapter = this.dateAdapterRegistry.resolve(this.locale());
2949
+ this.init();
2950
+ });
2951
+ }
3006
2952
  ngOnInit() {
3007
2953
  this.init();
3008
2954
  }
3009
- updateConfig(value) {
3010
- this.config = { ...new NgxDatePickerConfig(), ...value };
2955
+ onDateBoundsChange() {
2956
+ this._validatorOnChange();
2957
+ this.renderِDatePicker(this.view());
2958
+ }
2959
+ updateConfig(val) {
2960
+ this.config.set({ ...this.config(), ...val });
3011
2961
  }
3012
2962
  writeValue(value) {
3013
2963
  this.range = normalizeDateRange(value);
@@ -3199,8 +3149,8 @@ class NgxDateRangePickerComponent extends NgxDatePickerBase {
3199
3149
  stopPagination(event) {
3200
3150
  event.stopPropagation();
3201
3151
  }
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: [
3152
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3153
+ 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
3154
  DateAdapterRegistry,
3205
3155
  {
3206
3156
  provide: NG_VALUE_ACCESSOR,
@@ -3212,7 +3162,7 @@ class NgxDateRangePickerComponent extends NgxDatePickerBase {
3212
3162
  useExisting: forwardRef(() => NgxDateRangePickerComponent),
3213
3163
  multi: true,
3214
3164
  },
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"] }] });
3165
+ ], 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
3166
  }
3217
3167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxDateRangePickerComponent, decorators: [{
3218
3168
  type: Component,
@@ -3228,14 +3178,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3228
3178
  useExisting: forwardRef(() => NgxDateRangePickerComponent),
3229
3179
  multi: true,
3230
3180
  },
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: [{
3181
+ ], 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"] }]
3182
+ }], ctorParameters: () => [], propDecorators: { view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], rangeChange: [{
3239
3183
  type: Output
3240
3184
  }], change: [{
3241
3185
  type: Output
@@ -3243,6 +3187,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3243
3187
 
3244
3188
  class NgxInputDateRangePicker {
3245
3189
  el;
3190
+ _config = inject(NGX_DATE_CONFIG);
3246
3191
  dateAdapterRegistry = inject(DateAdapterRegistry);
3247
3192
  overlayService = inject(OverlayService);
3248
3193
  viewContainerRef = inject(ViewContainerRef);
@@ -3250,27 +3195,15 @@ class NgxInputDateRangePicker {
3250
3195
  openOnClick = true;
3251
3196
  displayFormat = 'yyyy/MM/dd';
3252
3197
  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();
3198
+ config = model(this._config, /* @ts-ignore */
3199
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
3200
+ locale = input(this._config.locale ?? 'en', /* @ts-ignore */
3201
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
3202
+ min = input(null, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: deserialize });
3203
+ max = input(null, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: deserialize });
3271
3204
  change = new EventEmitter();
3272
- min = null;
3273
- max = null;
3205
+ minDate = null;
3206
+ maxDate = null;
3274
3207
  value = { start: null, end: null };
3275
3208
  pickerRef;
3276
3209
  isDisabled = false;
@@ -3280,11 +3213,20 @@ class NgxInputDateRangePicker {
3280
3213
  _validatorOnChange = () => { };
3281
3214
  constructor(el) {
3282
3215
  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();
3216
+ effect(() => {
3217
+ const locale = this.locale();
3218
+ this.adapter = this.dateAdapterRegistry.resolve(locale);
3219
+ this.formatValue();
3220
+ });
3221
+ effect(() => {
3222
+ const minDate = this.min();
3223
+ const maxDate = this.max();
3224
+ if (sameDate(minDate, this.minDate) && sameDate(maxDate, this.maxDate))
3225
+ return;
3226
+ this.minDate = minDate;
3227
+ this.maxDate = maxDate;
3228
+ this._validatorOnChange();
3229
+ });
3288
3230
  }
3289
3231
  onClick(event) {
3290
3232
  if (!this.openOnClick || this.isDisabled)
@@ -3320,7 +3262,6 @@ class NgxInputDateRangePicker {
3320
3262
  this.destroyDatePicker();
3321
3263
  return;
3322
3264
  }
3323
- this.adapter = this.dateAdapterRegistry.resolve(this.locale);
3324
3265
  this.pickerRef = this.overlayService.open({
3325
3266
  anchor: this.el.nativeElement,
3326
3267
  component: NgxDateRangePickerComponent,
@@ -3328,11 +3269,11 @@ class NgxInputDateRangePicker {
3328
3269
  alignment: 'center',
3329
3270
  placement: 'bottom',
3330
3271
  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);
3272
+ configure: (instance, ref) => {
3273
+ ref.componentRef?.setInput('locale', this.locale());
3274
+ ref.componentRef?.setInput('min', this.minDate);
3275
+ ref.componentRef?.setInput('max', this.maxDate);
3276
+ instance.updateConfig(this.config());
3336
3277
  instance.writeValue(this.value);
3337
3278
  instance.rangeChange.subscribe((value) => {
3338
3279
  this.value = normalizeDateRange(value);
@@ -3352,11 +3293,11 @@ class NgxInputDateRangePicker {
3352
3293
  }
3353
3294
  validate(_control) {
3354
3295
  const { start, end } = this.value;
3355
- if (start && this.min && compareDate(start, this.min) < 0) {
3356
- return { min: this.min };
3296
+ if (start && this.minDate && compareDate(start, this.minDate) < 0) {
3297
+ return { min: this.minDate };
3357
3298
  }
3358
- if (end && this.max && compareDate(end, this.max) > 0) {
3359
- return { max: this.max };
3299
+ if (end && this.maxDate && compareDate(end, this.maxDate) > 0) {
3300
+ return { max: this.maxDate };
3360
3301
  }
3361
3302
  if (start && end && compareDate(start, end) > 0) {
3362
3303
  return { range: true };
@@ -3382,7 +3323,7 @@ class NgxInputDateRangePicker {
3382
3323
  this.pickerRef = undefined;
3383
3324
  }
3384
3325
  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: [
3326
+ 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
3327
  DateAdapterRegistry,
3387
3328
  {
3388
3329
  provide: NG_VALUE_ACCESSOR,
@@ -3394,7 +3335,7 @@ class NgxInputDateRangePicker {
3394
3335
  useExisting: forwardRef(() => NgxInputDateRangePicker),
3395
3336
  multi: true,
3396
3337
  },
3397
- ], exportAs: ["ngxInputDateRangePicker"], usesOnChanges: true, ngImport: i0 });
3338
+ ], exportAs: ["ngxInputDateRangePicker"], ngImport: i0 });
3398
3339
  }
3399
3340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputDateRangePicker, decorators: [{
3400
3341
  type: Directive,
@@ -3425,17 +3366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3425
3366
  type: Input
3426
3367
  }], rangeSeparator: [{
3427
3368
  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: [{
3369
+ }], 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
3370
  type: Output
3440
3371
  }], onClick: [{
3441
3372
  type: HostListener,
@@ -3449,5 +3380,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
3449
3380
  * Generated bundle index. Do not edit.
3450
3381
  */
3451
3382
 
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 };
3383
+ 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
3384
  //# sourceMappingURL=ngx-kit-date-picker.mjs.map