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.
- package/date-picker/README.md +1 -1
- package/dialog/README.md +1 -0
- package/fesm2022/ngx-kit-core.mjs +7 -5
- package/fesm2022/ngx-kit-core.mjs.map +1 -1
- package/fesm2022/ngx-kit-date-picker.mjs +198 -267
- package/fesm2022/ngx-kit-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-kit-dialog.mjs +19 -10
- package/fesm2022/ngx-kit-dialog.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-kit-core.d.ts +9 -6
- package/types/ngx-kit-date-picker.d.ts +79 -87
- package/types/ngx-kit-dialog.d.ts +6 -2
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, Injectable, signal,
|
|
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
|
|
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
|
-
|
|
617
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1718
|
+
const fd = this.adapter.getDate({ locale: this.locale(), year, month, day: 1 });
|
|
1674
1719
|
const ld = this.adapter.getDate({
|
|
1675
|
-
locale: this.
|
|
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.
|
|
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
|
-
|
|
1720
|
-
|
|
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
|
|
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.
|
|
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: {
|
|
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:
|
|
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:
|
|
1963
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
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 =
|
|
1984
|
+
change = output();
|
|
1984
1985
|
value;
|
|
1985
1986
|
pickerRef;
|
|
1986
1987
|
adapter;
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
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
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
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
|
|
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
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
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.
|
|
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.
|
|
2125
|
+
min: this.minDate,
|
|
2130
2126
|
};
|
|
2131
2127
|
}
|
|
2132
2128
|
else if (c > 0) {
|
|
2133
2129
|
return {
|
|
2134
2130
|
invalid: true,
|
|
2135
|
-
max: this.
|
|
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 },
|
|
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
|
-
}],
|
|
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.
|
|
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.
|
|
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.
|
|
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: {
|
|
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(
|
|
2901
|
-
const
|
|
2902
|
-
|
|
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
|
-
|
|
3010
|
-
this.
|
|
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:
|
|
3203
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxDateRangePickerComponent, isStandalone: true, selector: "ngx-date-range-picker", inputs: {
|
|
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: {
|
|
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
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
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
|
-
|
|
3273
|
-
|
|
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
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
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
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
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.
|
|
3356
|
-
return { min: this.
|
|
3296
|
+
if (start && this.minDate && compareDate(start, this.minDate) < 0) {
|
|
3297
|
+
return { min: this.minDate };
|
|
3357
3298
|
}
|
|
3358
|
-
if (end && this.
|
|
3359
|
-
return { max: this.
|
|
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: "
|
|
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"],
|
|
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,
|
|
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
|