@oneluiz/dual-datepicker 2.5.0 → 2.6.0
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/README.md +154 -7
- package/dual-datepicker.component.d.ts +7 -1
- package/esm2022/dual-datepicker.component.mjs +22 -5
- package/esm2022/preset-utils.mjs +276 -0
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/oneluiz-dual-datepicker.mjs +298 -5
- package/fesm2022/oneluiz-dual-datepicker.mjs.map +1 -1
- package/package.json +1 -1
- package/preset-utils.d.ts +91 -0
- package/public-api.d.ts +2 -1
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for creating common date range presets
|
|
3
|
+
* Perfect for dashboards, reporting, POS, BI apps, and ERP systems
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Format a date as YYYY-MM-DD string
|
|
7
|
+
*/
|
|
8
|
+
function formatDate(date) {
|
|
9
|
+
const year = date.getFullYear();
|
|
10
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
11
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
12
|
+
return `${year}-${month}-${day}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the start of today
|
|
16
|
+
*/
|
|
17
|
+
export function getToday() {
|
|
18
|
+
const today = new Date();
|
|
19
|
+
return {
|
|
20
|
+
start: formatDate(today),
|
|
21
|
+
end: formatDate(today)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get yesterday's date range
|
|
26
|
+
*/
|
|
27
|
+
export function getYesterday() {
|
|
28
|
+
const yesterday = new Date();
|
|
29
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
30
|
+
return {
|
|
31
|
+
start: formatDate(yesterday),
|
|
32
|
+
end: formatDate(yesterday)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get last N days (including today)
|
|
37
|
+
*/
|
|
38
|
+
export function getLastNDays(days) {
|
|
39
|
+
const end = new Date();
|
|
40
|
+
const start = new Date();
|
|
41
|
+
start.setDate(start.getDate() - days + 1);
|
|
42
|
+
return {
|
|
43
|
+
start: formatDate(start),
|
|
44
|
+
end: formatDate(end)
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get this week (Monday to Sunday)
|
|
49
|
+
*/
|
|
50
|
+
export function getThisWeek() {
|
|
51
|
+
const today = new Date();
|
|
52
|
+
const dayOfWeek = today.getDay();
|
|
53
|
+
const start = new Date(today);
|
|
54
|
+
// Adjust to Monday (1) as first day of week
|
|
55
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
56
|
+
start.setDate(start.getDate() - daysToMonday);
|
|
57
|
+
const end = new Date(start);
|
|
58
|
+
end.setDate(end.getDate() + 6);
|
|
59
|
+
return {
|
|
60
|
+
start: formatDate(start),
|
|
61
|
+
end: formatDate(end)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get last week (Monday to Sunday)
|
|
66
|
+
*/
|
|
67
|
+
export function getLastWeek() {
|
|
68
|
+
const today = new Date();
|
|
69
|
+
const dayOfWeek = today.getDay();
|
|
70
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
71
|
+
const lastMonday = new Date(today);
|
|
72
|
+
lastMonday.setDate(lastMonday.getDate() - daysToMonday - 7);
|
|
73
|
+
const lastSunday = new Date(lastMonday);
|
|
74
|
+
lastSunday.setDate(lastSunday.getDate() + 6);
|
|
75
|
+
return {
|
|
76
|
+
start: formatDate(lastMonday),
|
|
77
|
+
end: formatDate(lastSunday)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get this month (1st to last day)
|
|
82
|
+
*/
|
|
83
|
+
export function getThisMonth() {
|
|
84
|
+
const today = new Date();
|
|
85
|
+
const start = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
86
|
+
const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
|
|
87
|
+
return {
|
|
88
|
+
start: formatDate(start),
|
|
89
|
+
end: formatDate(end)
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get last month (1st to last day)
|
|
94
|
+
*/
|
|
95
|
+
export function getLastMonth() {
|
|
96
|
+
const today = new Date();
|
|
97
|
+
const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);
|
|
98
|
+
const end = new Date(today.getFullYear(), today.getMonth(), 0);
|
|
99
|
+
return {
|
|
100
|
+
start: formatDate(start),
|
|
101
|
+
end: formatDate(end)
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get month to date (1st of current month to today)
|
|
106
|
+
*/
|
|
107
|
+
export function getMonthToDate() {
|
|
108
|
+
const today = new Date();
|
|
109
|
+
const start = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
110
|
+
return {
|
|
111
|
+
start: formatDate(start),
|
|
112
|
+
end: formatDate(today)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get this quarter (Q1, Q2, Q3, or Q4)
|
|
117
|
+
*/
|
|
118
|
+
export function getThisQuarter() {
|
|
119
|
+
const today = new Date();
|
|
120
|
+
const currentMonth = today.getMonth();
|
|
121
|
+
const quarterStartMonth = Math.floor(currentMonth / 3) * 3;
|
|
122
|
+
const start = new Date(today.getFullYear(), quarterStartMonth, 1);
|
|
123
|
+
const end = new Date(today.getFullYear(), quarterStartMonth + 3, 0);
|
|
124
|
+
return {
|
|
125
|
+
start: formatDate(start),
|
|
126
|
+
end: formatDate(end)
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get last quarter
|
|
131
|
+
*/
|
|
132
|
+
export function getLastQuarter() {
|
|
133
|
+
const today = new Date();
|
|
134
|
+
const currentMonth = today.getMonth();
|
|
135
|
+
const lastQuarterStartMonth = Math.floor(currentMonth / 3) * 3 - 3;
|
|
136
|
+
const start = new Date(today.getFullYear(), lastQuarterStartMonth, 1);
|
|
137
|
+
const end = new Date(today.getFullYear(), lastQuarterStartMonth + 3, 0);
|
|
138
|
+
return {
|
|
139
|
+
start: formatDate(start),
|
|
140
|
+
end: formatDate(end)
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get quarter to date (start of current quarter to today)
|
|
145
|
+
*/
|
|
146
|
+
export function getQuarterToDate() {
|
|
147
|
+
const today = new Date();
|
|
148
|
+
const currentMonth = today.getMonth();
|
|
149
|
+
const quarterStartMonth = Math.floor(currentMonth / 3) * 3;
|
|
150
|
+
const start = new Date(today.getFullYear(), quarterStartMonth, 1);
|
|
151
|
+
return {
|
|
152
|
+
start: formatDate(start),
|
|
153
|
+
end: formatDate(today)
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get this year (January 1 to December 31)
|
|
158
|
+
*/
|
|
159
|
+
export function getThisYear() {
|
|
160
|
+
const today = new Date();
|
|
161
|
+
const start = new Date(today.getFullYear(), 0, 1);
|
|
162
|
+
const end = new Date(today.getFullYear(), 11, 31);
|
|
163
|
+
return {
|
|
164
|
+
start: formatDate(start),
|
|
165
|
+
end: formatDate(end)
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get last year
|
|
170
|
+
*/
|
|
171
|
+
export function getLastYear() {
|
|
172
|
+
const today = new Date();
|
|
173
|
+
const start = new Date(today.getFullYear() - 1, 0, 1);
|
|
174
|
+
const end = new Date(today.getFullYear() - 1, 11, 31);
|
|
175
|
+
return {
|
|
176
|
+
start: formatDate(start),
|
|
177
|
+
end: formatDate(end)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get year to date (January 1 to today)
|
|
182
|
+
*/
|
|
183
|
+
export function getYearToDate() {
|
|
184
|
+
const today = new Date();
|
|
185
|
+
const start = new Date(today.getFullYear(), 0, 1);
|
|
186
|
+
return {
|
|
187
|
+
start: formatDate(start),
|
|
188
|
+
end: formatDate(today)
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get last N months (including current partial month)
|
|
193
|
+
*/
|
|
194
|
+
export function getLastNMonths(months) {
|
|
195
|
+
const today = new Date();
|
|
196
|
+
const start = new Date(today);
|
|
197
|
+
start.setMonth(start.getMonth() - months);
|
|
198
|
+
return {
|
|
199
|
+
start: formatDate(start),
|
|
200
|
+
end: formatDate(today)
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get last N years
|
|
205
|
+
*/
|
|
206
|
+
export function getLastNYears(years) {
|
|
207
|
+
const today = new Date();
|
|
208
|
+
const start = new Date(today);
|
|
209
|
+
start.setFullYear(start.getFullYear() - years);
|
|
210
|
+
return {
|
|
211
|
+
start: formatDate(start),
|
|
212
|
+
end: formatDate(today)
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Pre-built preset configurations for common use cases
|
|
217
|
+
* Import and use these directly in your component
|
|
218
|
+
*/
|
|
219
|
+
export const CommonPresets = {
|
|
220
|
+
/**
|
|
221
|
+
* Dashboard presets - Perfect for analytics dashboards
|
|
222
|
+
*/
|
|
223
|
+
dashboard: [
|
|
224
|
+
{ label: 'Today', getValue: getToday },
|
|
225
|
+
{ label: 'Yesterday', getValue: getYesterday },
|
|
226
|
+
{ label: 'Last 7 days', getValue: () => getLastNDays(7) },
|
|
227
|
+
{ label: 'Last 30 days', getValue: () => getLastNDays(30) },
|
|
228
|
+
{ label: 'This month', getValue: getThisMonth },
|
|
229
|
+
{ label: 'Last month', getValue: getLastMonth }
|
|
230
|
+
],
|
|
231
|
+
/**
|
|
232
|
+
* Reporting presets - Perfect for business reporting
|
|
233
|
+
*/
|
|
234
|
+
reporting: [
|
|
235
|
+
{ label: 'Today', getValue: getToday },
|
|
236
|
+
{ label: 'This week', getValue: getThisWeek },
|
|
237
|
+
{ label: 'Last week', getValue: getLastWeek },
|
|
238
|
+
{ label: 'This month', getValue: getThisMonth },
|
|
239
|
+
{ label: 'Last month', getValue: getLastMonth },
|
|
240
|
+
{ label: 'This quarter', getValue: getThisQuarter },
|
|
241
|
+
{ label: 'Last quarter', getValue: getLastQuarter }
|
|
242
|
+
],
|
|
243
|
+
/**
|
|
244
|
+
* Financial presets - Perfect for ERP and accounting systems
|
|
245
|
+
*/
|
|
246
|
+
financial: [
|
|
247
|
+
{ label: 'Month to date', getValue: getMonthToDate },
|
|
248
|
+
{ label: 'Quarter to date', getValue: getQuarterToDate },
|
|
249
|
+
{ label: 'Year to date', getValue: getYearToDate },
|
|
250
|
+
{ label: 'Last month', getValue: getLastMonth },
|
|
251
|
+
{ label: 'Last quarter', getValue: getLastQuarter },
|
|
252
|
+
{ label: 'Last year', getValue: getLastYear }
|
|
253
|
+
],
|
|
254
|
+
/**
|
|
255
|
+
* Analytics presets - Perfect for BI and data analysis
|
|
256
|
+
*/
|
|
257
|
+
analytics: [
|
|
258
|
+
{ label: 'Last 7 days', getValue: () => getLastNDays(7) },
|
|
259
|
+
{ label: 'Last 14 days', getValue: () => getLastNDays(14) },
|
|
260
|
+
{ label: 'Last 30 days', getValue: () => getLastNDays(30) },
|
|
261
|
+
{ label: 'Last 60 days', getValue: () => getLastNDays(60) },
|
|
262
|
+
{ label: 'Last 90 days', getValue: () => getLastNDays(90) },
|
|
263
|
+
{ label: 'Last 180 days', getValue: () => getLastNDays(180) },
|
|
264
|
+
{ label: 'Last 365 days', getValue: () => getLastNDays(365) }
|
|
265
|
+
],
|
|
266
|
+
/**
|
|
267
|
+
* Simple presets - Basic common ranges
|
|
268
|
+
*/
|
|
269
|
+
simple: [
|
|
270
|
+
{ label: 'Today', getValue: getToday },
|
|
271
|
+
{ label: 'Last 7 days', getValue: () => getLastNDays(7) },
|
|
272
|
+
{ label: 'Last 30 days', getValue: () => getLastNDays(30) },
|
|
273
|
+
{ label: 'This year', getValue: getThisYear }
|
|
274
|
+
]
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByZXNldC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFFSDs7R0FFRztBQUNILFNBQVMsVUFBVSxDQUFDLElBQVU7SUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUTtJQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3pCLE9BQU87UUFDTCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN4QixHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVk7SUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3QixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQyxPQUFPO1FBQ0wsS0FBSyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDNUIsR0FBRyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUM7S0FDM0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FF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O0dBRUc7QUFDSCxNQUFNLFVBQVUsWUFBWTtJQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsT0FBTztRQUNMLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3hCLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDO0tBQ3JCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFakUsT0FBTztRQUNMLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3hCLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO0tBQ3ZCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUzRCxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMs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QUU7UUFDTixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtRQUN0QyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN6RCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUMzRCxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtLQUM1QjtDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJlc2V0Q29uZmlnLCBQcmVzZXRSYW5nZSB9IGZyb20gJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGNvbW1vbiBkYXRlIHJhbmdlIHByZXNldHNcbiAqIFBlcmZlY3QgZm9yIGRhc2hib2FyZHMsIHJlcG9ydGluZywgUE9TLCBCSSBhcHBzLCBhbmQgRVJQIHN5c3RlbXNcbiAqL1xuXG4vKipcbiAqIEZvcm1hdCBhIGRhdGUgYXMgWVlZWS1NTS1ERCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHN0YXJ0IG9mIHRvZGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2RheSgpOiBQcmVzZXRSYW5nZSB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogZm9ybWF0RGF0ZSh0b2RheSksXG4gICAgZW5kOiBmb3JtYXREYXRlKHRvZGF5KVxuICB9O1xufVxuXG4vKipcbiAqIEdldCB5ZXN0ZXJkYXkncyBkYXRlIHJhbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRZZXN0ZXJkYXkoKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUoeWVzdGVyZGF5KSxcbiAgICBlbmQ6IGZvcm1hdERhdGUoeWVzdGVyZGF5KVxuICB9O1xufVxuXG4vKipcbiAqIEdldCBsYXN0IE4gZGF5cyAoaW5jbHVkaW5nIHRvZGF5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdE5EYXlzKGRheXM6IG51bWJlcik6IFByZXNldFJhbmdlIHtcbiAgY29uc3QgZW5kID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuICBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIGRheXMgKyAxKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogZm9ybWF0RGF0ZShzdGFydCksXG4gICAgZW5kOiBmb3JtYXREYXRlKGVuZClcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhpcyB3ZWVrIChNb25kYXkgdG8gU3VuZGF5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhpc1dlZWsoKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGRheU9mV2VlayA9IHRvZGF5LmdldERheSgpO1xuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgLy8gQWRqdXN0IHRvIE1vbmRheSAoMSkgYXMgZmlyc3QgZGF5IG9mIHdlZWtcbiAgY29uc3QgZGF5c1RvTW9uZGF5ID0gZGF5T2ZXZWVrID09PSAwID8gNiA6IGRheU9mV2VlayAtIDE7XG4gIHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gZGF5c1RvTW9uZGF5KTtcbiAgXG4gIGNvbnN0IGVuZCA9IG5ldyBEYXRlKHN0YXJ0KTtcbiAgZW5kLnNldERhdGUoZW5kLmdldERhdGUoKSArIDYpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogZm9ybWF0RGF0ZShzdGFydCksXG4gICAgZW5kOiBmb3JtYXREYXRlKGVuZClcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgbGFzdCB3ZWVrIChNb25kYXkgdG8gU3VuZGF5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFdlZWsoKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGRheU9mV2VlayA9IHRvZGF5LmdldERheSgpO1xuICBjb25zdCBkYXlzVG9Nb25kYXkgPSBkYXlPZldlZWsgPT09IDAgPyA2IDogZGF5T2ZXZWVrIC0gMTtcbiAgXG4gIGNvbnN0IGxhc3RNb25kYXkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gIGxhc3RNb25kYXkuc2V0RGF0ZShsYXN0TW9uZGF5LmdldERhdGUoKSAtIGRheXNUb01vbmRheSAtIDcpO1xuICBcbiAgY29uc3QgbGFzdFN1bmRheSA9IG5ldyBEYXRlKGxhc3RNb25kYXkpO1xuICBsYXN0U3VuZGF5LnNldERhdGUobGFzdFN1bmRheS5nZXREYXRlKCkgKyA2KTtcbiAgXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUobGFzdE1vbmRheSksXG4gICAgZW5kOiBmb3JtYXREYXRlKGxhc3RTdW5kYXkpXG4gIH07XG59XG5cbi8qKlxuICogR2V0IHRoaXMgbW9udGggKDFzdCB0byBsYXN0IGRheSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRoaXNNb250aCgpOiBQcmVzZXRSYW5nZSB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAxKTtcbiAgY29uc3QgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSArIDEsIDApO1xuICBcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogZm9ybWF0RGF0ZShzdGFydCksXG4gICAgZW5kOiBmb3JtYXREYXRlKGVuZClcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgbGFzdCBtb250aCAoMXN0IHRvIGxhc3QgZGF5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdE1vbnRoKCk6IFByZXNldFJhbmdlIHtcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCkgLSAxLCAxKTtcbiAgY29uc3QgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgMCk7XG4gIFxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBmb3JtYXREYXRlKHN0YXJ0KSxcbiAgICBlbmQ6IGZvcm1hdERhdGUoZW5kKVxuICB9O1xufVxuXG4vKipcbiAqIEdldCBtb250aCB0byBkYXRlICgxc3Qgb2YgY3VycmVudCBtb250aCB0byB0b2RheSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoVG9EYXRlKCk6IFByZXNldFJhbmdlIHtcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIDEpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogZm9ybWF0RGF0ZShzdGFydCksXG4gICAgZW5kOiBmb3JtYXREYXRlKHRvZGF5KVxuICB9O1xufVxuXG4vKipcbiAqIEdldCB0aGlzIHF1YXJ0ZXIgKFExLCBRMiwgUTMsIG9yIFE0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhpc1F1YXJ0ZXIoKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGN1cnJlbnRNb250aCA9IHRvZGF5LmdldE1vbnRoKCk7XG4gIGNvbnN0IHF1YXJ0ZXJTdGFydE1vbnRoID0gTWF0aC5mbG9vcihjdXJyZW50TW9udGggLyAzKSAqIDM7XG4gIFxuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHF1YXJ0ZXJTdGFydE1vbnRoLCAxKTtcbiAgY29uc3QgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgcXVhcnRlclN0YXJ0TW9udGggKyAzLCAwKTtcbiAgXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUoc3RhcnQpLFxuICAgIGVuZDogZm9ybWF0RGF0ZShlbmQpXG4gIH07XG59XG5cbi8qKlxuICogR2V0IGxhc3QgcXVhcnRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFF1YXJ0ZXIoKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGN1cnJlbnRNb250aCA9IHRvZGF5LmdldE1vbnRoKCk7XG4gIGNvbnN0IGxhc3RRdWFydGVyU3RhcnRNb250aCA9IE1hdGguZmxvb3IoY3VycmVudE1vbnRoIC8gMykgKiAzIC0gMztcbiAgXG4gIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgbGFzdFF1YXJ0ZXJTdGFydE1vbnRoLCAxKTtcbiAgY29uc3QgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgbGFzdFF1YXJ0ZXJTdGFydE1vbnRoICsgMywgMCk7XG4gIFxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBmb3JtYXREYXRlKHN0YXJ0KSxcbiAgICBlbmQ6IGZvcm1hdERhdGUoZW5kKVxuICB9O1xufVxuXG4vKipcbiAqIEdldCBxdWFydGVyIHRvIGRhdGUgKHN0YXJ0IG9mIGN1cnJlbnQgcXVhcnRlciB0byB0b2RheSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1YXJ0ZXJUb0RhdGUoKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGN1cnJlbnRNb250aCA9IHRvZGF5LmdldE1vbnRoKCk7XG4gIGNvbnN0IHF1YXJ0ZXJTdGFydE1vbnRoID0gTWF0aC5mbG9vcihjdXJyZW50TW9udGggLyAzKSAqIDM7XG4gIFxuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHF1YXJ0ZXJTdGFydE1vbnRoLCAxKTtcbiAgXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUoc3RhcnQpLFxuICAgIGVuZDogZm9ybWF0RGF0ZSh0b2RheSlcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhpcyB5ZWFyIChKYW51YXJ5IDEgdG8gRGVjZW1iZXIgMzEpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaGlzWWVhcigpOiBQcmVzZXRSYW5nZSB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgY29uc3QgZW5kID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgMTEsIDMxKTtcbiAgXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUoc3RhcnQpLFxuICAgIGVuZDogZm9ybWF0RGF0ZShlbmQpXG4gIH07XG59XG5cbi8qKlxuICogR2V0IGxhc3QgeWVhclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFllYXIoKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSAtIDEsIDAsIDEpO1xuICBjb25zdCBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIDMxKTtcbiAgXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUoc3RhcnQpLFxuICAgIGVuZDogZm9ybWF0RGF0ZShlbmQpXG4gIH07XG59XG5cbi8qKlxuICogR2V0IHllYXIgdG8gZGF0ZSAoSmFudWFyeSAxIHRvIHRvZGF5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0WWVhclRvRGF0ZSgpOiBQcmVzZXRSYW5nZSB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUoc3RhcnQpLFxuICAgIGVuZDogZm9ybWF0RGF0ZSh0b2RheSlcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgbGFzdCBOIG1vbnRocyAoaW5jbHVkaW5nIGN1cnJlbnQgcGFydGlhbCBtb250aClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3ROTW9udGhzKG1vbnRoczogbnVtYmVyKTogUHJlc2V0UmFuZ2Uge1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUodG9kYXkpO1xuICBzdGFydC5zZXRNb250aChzdGFydC5nZXRNb250aCgpIC0gbW9udGhzKTtcbiAgXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGZvcm1hdERhdGUoc3RhcnQpLFxuICAgIGVuZDogZm9ybWF0RGF0ZSh0b2RheSlcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgbGFzdCBOIHllYXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0TlllYXJzKHllYXJzOiBudW1iZXIpOiBQcmVzZXRSYW5nZSB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheSk7XG4gIHN0YXJ0LnNldEZ1bGxZZWFyKHN0YXJ0LmdldEZ1bGxZZWFyKCkgLSB5ZWFycyk7XG4gIFxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBmb3JtYXREYXRlKHN0YXJ0KSxcbiAgICBlbmQ6IGZvcm1hdERhdGUodG9kYXkpXG4gIH07XG59XG5cbi8qKlxuICogUHJlLWJ1aWx0IHByZXNldCBjb25maWd1cmF0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlc1xuICogSW1wb3J0IGFuZCB1c2UgdGhlc2UgZGlyZWN0bHkgaW4geW91ciBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IENvbW1vblByZXNldHMgPSB7XG4gIC8qKlxuICAgKiBEYXNoYm9hcmQgcHJlc2V0cyAtIFBlcmZlY3QgZm9yIGFuYWx5dGljcyBkYXNoYm9hcmRzXG4gICAqL1xuICBkYXNoYm9hcmQ6IFtcbiAgICB7IGxhYmVsOiAnVG9kYXknLCBnZXRWYWx1ZTogZ2V0VG9kYXkgfSxcbiAgICB7IGxhYmVsOiAnWWVzdGVyZGF5JywgZ2V0VmFsdWU6IGdldFllc3RlcmRheSB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IDcgZGF5cycsIGdldFZhbHVlOiAoKSA9PiBnZXRMYXN0TkRheXMoNykgfSxcbiAgICB7IGxhYmVsOiAnTGFzdCAzMCBkYXlzJywgZ2V0VmFsdWU6ICgpID0+IGdldExhc3RORGF5cygzMCkgfSxcbiAgICB7IGxhYmVsOiAnVGhpcyBtb250aCcsIGdldFZhbHVlOiBnZXRUaGlzTW9udGggfSxcbiAgICB7IGxhYmVsOiAnTGFzdCBtb250aCcsIGdldFZhbHVlOiBnZXRMYXN0TW9udGggfVxuICBdIGFzIFByZXNldENvbmZpZ1tdLFxuXG4gIC8qKlxuICAgKiBSZXBvcnRpbmcgcHJlc2V0cyAtIFBlcmZlY3QgZm9yIGJ1c2luZXNzIHJlcG9ydGluZ1xuICAgKi9cbiAgcmVwb3J0aW5nOiBbXG4gICAgeyBsYWJlbDogJ1RvZGF5JywgZ2V0VmFsdWU6IGdldFRvZGF5IH0sXG4gICAgeyBsYWJlbDogJ1RoaXMgd2VlaycsIGdldFZhbHVlOiBnZXRUaGlzV2VlayB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IHdlZWsnLCBnZXRWYWx1ZTogZ2V0TGFzdFdlZWsgfSxcbiAgICB7IGxhYmVsOiAnVGhpcyBtb250aCcsIGdldFZhbHVlOiBnZXRUaGlzTW9udGggfSxcbiAgICB7IGxhYmVsOiAnTGFzdCBtb250aCcsIGdldFZhbHVlOiBnZXRMYXN0TW9udGggfSxcbiAgICB7IGxhYmVsOiAnVGhpcyBxdWFydGVyJywgZ2V0VmFsdWU6IGdldFRoaXNRdWFydGVyIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgcXVhcnRlcicsIGdldFZhbHVlOiBnZXRMYXN0UXVhcnRlciB9XG4gIF0gYXMgUHJlc2V0Q29uZmlnW10sXG5cbiAgLyoqXG4gICAqIEZpbmFuY2lhbCBwcmVzZXRzIC0gUGVyZmVjdCBmb3IgRVJQIGFuZCBhY2NvdW50aW5nIHN5c3RlbXNcbiAgICovXG4gIGZpbmFuY2lhbDogW1xuICAgIHsgbGFiZWw6ICdNb250aCB0byBkYXRlJywgZ2V0VmFsdWU6IGdldE1vbnRoVG9EYXRlIH0sXG4gICAgeyBsYWJlbDogJ1F1YXJ0ZXIgdG8gZGF0ZScsIGdldFZhbHVlOiBnZXRRdWFydGVyVG9EYXRlIH0sXG4gICAgeyBsYWJlbDogJ1llYXIgdG8gZGF0ZScsIGdldFZhbHVlOiBnZXRZZWFyVG9EYXRlIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgbW9udGgnLCBnZXRWYWx1ZTogZ2V0TGFzdE1vbnRoIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgcXVhcnRlcicsIGdldFZhbHVlOiBnZXRMYXN0UXVhcnRlciB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IHllYXInLCBnZXRWYWx1ZTogZ2V0TGFzdFllYXIgfVxuICBdIGFzIFByZXNldENvbmZpZ1tdLFxuXG4gIC8qKlxuICAgKiBBbmFseXRpY3MgcHJlc2V0cyAtIFBlcmZlY3QgZm9yIEJJIGFuZCBkYXRhIGFuYWx5c2lzXG4gICAqL1xuICBhbmFseXRpY3M6IFtcbiAgICB7IGxhYmVsOiAnTGFzdCA3IGRheXMnLCBnZXRWYWx1ZTogKCkgPT4gZ2V0TGFzdE5EYXlzKDcpIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgMTQgZGF5cycsIGdldFZhbHVlOiAoKSA9PiBnZXRMYXN0TkRheXMoMTQpIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgMzAgZGF5cycsIGdldFZhbHVlOiAoKSA9PiBnZXRMYXN0TkRheXMoMzApIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgNjAgZGF5cycsIGdldFZhbHVlOiAoKSA9PiBnZXRMYXN0TkRheXMoNjApIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgOTAgZGF5cycsIGdldFZhbHVlOiAoKSA9PiBnZXRMYXN0TkRheXMoOTApIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgMTgwIGRheXMnLCBnZXRWYWx1ZTogKCkgPT4gZ2V0TGFzdE5EYXlzKDE4MCkgfSxcbiAgICB7IGxhYmVsOiAnTGFzdCAzNjUgZGF5cycsIGdldFZhbHVlOiAoKSA9PiBnZXRMYXN0TkRheXMoMzY1KSB9XG4gIF0gYXMgUHJlc2V0Q29uZmlnW10sXG5cbiAgLyoqXG4gICAqIFNpbXBsZSBwcmVzZXRzIC0gQmFzaWMgY29tbW9uIHJhbmdlc1xuICAgKi9cbiAgc2ltcGxlOiBbXG4gICAgeyBsYWJlbDogJ1RvZGF5JywgZ2V0VmFsdWU6IGdldFRvZGF5IH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgNyBkYXlzJywgZ2V0VmFsdWU6ICgpID0+IGdldExhc3RORGF5cyg3KSB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IDMwIGRheXMnLCBnZXRWYWx1ZTogKCkgPT4gZ2V0TGFzdE5EYXlzKDMwKSB9LFxuICAgIHsgbGFiZWw6ICdUaGlzIHllYXInLCBnZXRWYWx1ZTogZ2V0VGhpc1llYXIgfVxuICBdIGFzIFByZXNldENvbmZpZ1tdXG59O1xuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -5,4 +5,6 @@ export { DualDatepickerComponent } from './dual-datepicker.component';
|
|
|
5
5
|
// Date Adapter System
|
|
6
6
|
export { DateAdapter, DATE_ADAPTER } from './date-adapter';
|
|
7
7
|
export { NativeDateAdapter } from './native-date-adapter';
|
|
8
|
-
|
|
8
|
+
// Preset Utilities
|
|
9
|
+
export * from './preset-utils';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdEUsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsbUJBQW1CO0FBQ25CLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAb25lbHVpei9kdWFsLWRhdGVwaWNrZXJcbiAqL1xuXG5leHBvcnQgeyBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5leHBvcnQgdHlwZSB7IERhdGVSYW5nZSwgUHJlc2V0Q29uZmlnLCBQcmVzZXRSYW5nZSwgTG9jYWxlQ29uZmlnIH0gZnJvbSAnLi9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50JztcblxuLy8gRGF0ZSBBZGFwdGVyIFN5c3RlbVxuZXhwb3J0IHsgRGF0ZUFkYXB0ZXIsIERBVEVfQURBUFRFUiB9IGZyb20gJy4vZGF0ZS1hZGFwdGVyJztcbmV4cG9ydCB7IE5hdGl2ZURhdGVBZGFwdGVyIH0gZnJvbSAnLi9uYXRpdmUtZGF0ZS1hZGFwdGVyJztcblxuLy8gUHJlc2V0IFV0aWxpdGllc1xuZXhwb3J0ICogZnJvbSAnLi9wcmVzZXQtdXRpbHMnO1xuIl19
|
|
@@ -329,10 +329,27 @@ class DualDatepickerComponent {
|
|
|
329
329
|
return this.locale.dayNamesShort || this.defaultDayNamesShort;
|
|
330
330
|
}
|
|
331
331
|
seleccionarRangoPredefinido(preset) {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
332
|
+
let start;
|
|
333
|
+
let end;
|
|
334
|
+
// New flexible pattern with getValue()
|
|
335
|
+
if (preset.getValue) {
|
|
336
|
+
const range = preset.getValue();
|
|
337
|
+
start = range.start;
|
|
338
|
+
end = range.end;
|
|
339
|
+
}
|
|
340
|
+
// Backward compatibility with daysAgo pattern
|
|
341
|
+
else if (preset.daysAgo !== undefined) {
|
|
342
|
+
const hoy = this.dateAdapter.today();
|
|
343
|
+
const fechaInicio = this.dateAdapter.addDays(hoy, -preset.daysAgo);
|
|
344
|
+
start = this.formatearFecha(fechaInicio);
|
|
345
|
+
end = this.formatearFecha(hoy);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
console.error('PresetConfig must have either getValue() or daysAgo');
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
this.fechaInicio = start;
|
|
352
|
+
this.fechaFin = end;
|
|
336
353
|
this.actualizarRangoFechasTexto();
|
|
337
354
|
this.generarCalendarios();
|
|
338
355
|
if (this.closeOnPresetSelection) {
|
|
@@ -462,6 +479,282 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
462
479
|
args: ['document:click', ['$event']]
|
|
463
480
|
}] } });
|
|
464
481
|
|
|
482
|
+
/**
|
|
483
|
+
* Utility functions for creating common date range presets
|
|
484
|
+
* Perfect for dashboards, reporting, POS, BI apps, and ERP systems
|
|
485
|
+
*/
|
|
486
|
+
/**
|
|
487
|
+
* Format a date as YYYY-MM-DD string
|
|
488
|
+
*/
|
|
489
|
+
function formatDate(date) {
|
|
490
|
+
const year = date.getFullYear();
|
|
491
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
492
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
493
|
+
return `${year}-${month}-${day}`;
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Get the start of today
|
|
497
|
+
*/
|
|
498
|
+
function getToday() {
|
|
499
|
+
const today = new Date();
|
|
500
|
+
return {
|
|
501
|
+
start: formatDate(today),
|
|
502
|
+
end: formatDate(today)
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Get yesterday's date range
|
|
507
|
+
*/
|
|
508
|
+
function getYesterday() {
|
|
509
|
+
const yesterday = new Date();
|
|
510
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
511
|
+
return {
|
|
512
|
+
start: formatDate(yesterday),
|
|
513
|
+
end: formatDate(yesterday)
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Get last N days (including today)
|
|
518
|
+
*/
|
|
519
|
+
function getLastNDays(days) {
|
|
520
|
+
const end = new Date();
|
|
521
|
+
const start = new Date();
|
|
522
|
+
start.setDate(start.getDate() - days + 1);
|
|
523
|
+
return {
|
|
524
|
+
start: formatDate(start),
|
|
525
|
+
end: formatDate(end)
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Get this week (Monday to Sunday)
|
|
530
|
+
*/
|
|
531
|
+
function getThisWeek() {
|
|
532
|
+
const today = new Date();
|
|
533
|
+
const dayOfWeek = today.getDay();
|
|
534
|
+
const start = new Date(today);
|
|
535
|
+
// Adjust to Monday (1) as first day of week
|
|
536
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
537
|
+
start.setDate(start.getDate() - daysToMonday);
|
|
538
|
+
const end = new Date(start);
|
|
539
|
+
end.setDate(end.getDate() + 6);
|
|
540
|
+
return {
|
|
541
|
+
start: formatDate(start),
|
|
542
|
+
end: formatDate(end)
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Get last week (Monday to Sunday)
|
|
547
|
+
*/
|
|
548
|
+
function getLastWeek() {
|
|
549
|
+
const today = new Date();
|
|
550
|
+
const dayOfWeek = today.getDay();
|
|
551
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
552
|
+
const lastMonday = new Date(today);
|
|
553
|
+
lastMonday.setDate(lastMonday.getDate() - daysToMonday - 7);
|
|
554
|
+
const lastSunday = new Date(lastMonday);
|
|
555
|
+
lastSunday.setDate(lastSunday.getDate() + 6);
|
|
556
|
+
return {
|
|
557
|
+
start: formatDate(lastMonday),
|
|
558
|
+
end: formatDate(lastSunday)
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Get this month (1st to last day)
|
|
563
|
+
*/
|
|
564
|
+
function getThisMonth() {
|
|
565
|
+
const today = new Date();
|
|
566
|
+
const start = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
567
|
+
const end = new Date(today.getFullYear(), today.getMonth() + 1, 0);
|
|
568
|
+
return {
|
|
569
|
+
start: formatDate(start),
|
|
570
|
+
end: formatDate(end)
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Get last month (1st to last day)
|
|
575
|
+
*/
|
|
576
|
+
function getLastMonth() {
|
|
577
|
+
const today = new Date();
|
|
578
|
+
const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);
|
|
579
|
+
const end = new Date(today.getFullYear(), today.getMonth(), 0);
|
|
580
|
+
return {
|
|
581
|
+
start: formatDate(start),
|
|
582
|
+
end: formatDate(end)
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Get month to date (1st of current month to today)
|
|
587
|
+
*/
|
|
588
|
+
function getMonthToDate() {
|
|
589
|
+
const today = new Date();
|
|
590
|
+
const start = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
591
|
+
return {
|
|
592
|
+
start: formatDate(start),
|
|
593
|
+
end: formatDate(today)
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Get this quarter (Q1, Q2, Q3, or Q4)
|
|
598
|
+
*/
|
|
599
|
+
function getThisQuarter() {
|
|
600
|
+
const today = new Date();
|
|
601
|
+
const currentMonth = today.getMonth();
|
|
602
|
+
const quarterStartMonth = Math.floor(currentMonth / 3) * 3;
|
|
603
|
+
const start = new Date(today.getFullYear(), quarterStartMonth, 1);
|
|
604
|
+
const end = new Date(today.getFullYear(), quarterStartMonth + 3, 0);
|
|
605
|
+
return {
|
|
606
|
+
start: formatDate(start),
|
|
607
|
+
end: formatDate(end)
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Get last quarter
|
|
612
|
+
*/
|
|
613
|
+
function getLastQuarter() {
|
|
614
|
+
const today = new Date();
|
|
615
|
+
const currentMonth = today.getMonth();
|
|
616
|
+
const lastQuarterStartMonth = Math.floor(currentMonth / 3) * 3 - 3;
|
|
617
|
+
const start = new Date(today.getFullYear(), lastQuarterStartMonth, 1);
|
|
618
|
+
const end = new Date(today.getFullYear(), lastQuarterStartMonth + 3, 0);
|
|
619
|
+
return {
|
|
620
|
+
start: formatDate(start),
|
|
621
|
+
end: formatDate(end)
|
|
622
|
+
};
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Get quarter to date (start of current quarter to today)
|
|
626
|
+
*/
|
|
627
|
+
function getQuarterToDate() {
|
|
628
|
+
const today = new Date();
|
|
629
|
+
const currentMonth = today.getMonth();
|
|
630
|
+
const quarterStartMonth = Math.floor(currentMonth / 3) * 3;
|
|
631
|
+
const start = new Date(today.getFullYear(), quarterStartMonth, 1);
|
|
632
|
+
return {
|
|
633
|
+
start: formatDate(start),
|
|
634
|
+
end: formatDate(today)
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Get this year (January 1 to December 31)
|
|
639
|
+
*/
|
|
640
|
+
function getThisYear() {
|
|
641
|
+
const today = new Date();
|
|
642
|
+
const start = new Date(today.getFullYear(), 0, 1);
|
|
643
|
+
const end = new Date(today.getFullYear(), 11, 31);
|
|
644
|
+
return {
|
|
645
|
+
start: formatDate(start),
|
|
646
|
+
end: formatDate(end)
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Get last year
|
|
651
|
+
*/
|
|
652
|
+
function getLastYear() {
|
|
653
|
+
const today = new Date();
|
|
654
|
+
const start = new Date(today.getFullYear() - 1, 0, 1);
|
|
655
|
+
const end = new Date(today.getFullYear() - 1, 11, 31);
|
|
656
|
+
return {
|
|
657
|
+
start: formatDate(start),
|
|
658
|
+
end: formatDate(end)
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Get year to date (January 1 to today)
|
|
663
|
+
*/
|
|
664
|
+
function getYearToDate() {
|
|
665
|
+
const today = new Date();
|
|
666
|
+
const start = new Date(today.getFullYear(), 0, 1);
|
|
667
|
+
return {
|
|
668
|
+
start: formatDate(start),
|
|
669
|
+
end: formatDate(today)
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Get last N months (including current partial month)
|
|
674
|
+
*/
|
|
675
|
+
function getLastNMonths(months) {
|
|
676
|
+
const today = new Date();
|
|
677
|
+
const start = new Date(today);
|
|
678
|
+
start.setMonth(start.getMonth() - months);
|
|
679
|
+
return {
|
|
680
|
+
start: formatDate(start),
|
|
681
|
+
end: formatDate(today)
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
/**
|
|
685
|
+
* Get last N years
|
|
686
|
+
*/
|
|
687
|
+
function getLastNYears(years) {
|
|
688
|
+
const today = new Date();
|
|
689
|
+
const start = new Date(today);
|
|
690
|
+
start.setFullYear(start.getFullYear() - years);
|
|
691
|
+
return {
|
|
692
|
+
start: formatDate(start),
|
|
693
|
+
end: formatDate(today)
|
|
694
|
+
};
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* Pre-built preset configurations for common use cases
|
|
698
|
+
* Import and use these directly in your component
|
|
699
|
+
*/
|
|
700
|
+
const CommonPresets = {
|
|
701
|
+
/**
|
|
702
|
+
* Dashboard presets - Perfect for analytics dashboards
|
|
703
|
+
*/
|
|
704
|
+
dashboard: [
|
|
705
|
+
{ label: 'Today', getValue: getToday },
|
|
706
|
+
{ label: 'Yesterday', getValue: getYesterday },
|
|
707
|
+
{ label: 'Last 7 days', getValue: () => getLastNDays(7) },
|
|
708
|
+
{ label: 'Last 30 days', getValue: () => getLastNDays(30) },
|
|
709
|
+
{ label: 'This month', getValue: getThisMonth },
|
|
710
|
+
{ label: 'Last month', getValue: getLastMonth }
|
|
711
|
+
],
|
|
712
|
+
/**
|
|
713
|
+
* Reporting presets - Perfect for business reporting
|
|
714
|
+
*/
|
|
715
|
+
reporting: [
|
|
716
|
+
{ label: 'Today', getValue: getToday },
|
|
717
|
+
{ label: 'This week', getValue: getThisWeek },
|
|
718
|
+
{ label: 'Last week', getValue: getLastWeek },
|
|
719
|
+
{ label: 'This month', getValue: getThisMonth },
|
|
720
|
+
{ label: 'Last month', getValue: getLastMonth },
|
|
721
|
+
{ label: 'This quarter', getValue: getThisQuarter },
|
|
722
|
+
{ label: 'Last quarter', getValue: getLastQuarter }
|
|
723
|
+
],
|
|
724
|
+
/**
|
|
725
|
+
* Financial presets - Perfect for ERP and accounting systems
|
|
726
|
+
*/
|
|
727
|
+
financial: [
|
|
728
|
+
{ label: 'Month to date', getValue: getMonthToDate },
|
|
729
|
+
{ label: 'Quarter to date', getValue: getQuarterToDate },
|
|
730
|
+
{ label: 'Year to date', getValue: getYearToDate },
|
|
731
|
+
{ label: 'Last month', getValue: getLastMonth },
|
|
732
|
+
{ label: 'Last quarter', getValue: getLastQuarter },
|
|
733
|
+
{ label: 'Last year', getValue: getLastYear }
|
|
734
|
+
],
|
|
735
|
+
/**
|
|
736
|
+
* Analytics presets - Perfect for BI and data analysis
|
|
737
|
+
*/
|
|
738
|
+
analytics: [
|
|
739
|
+
{ label: 'Last 7 days', getValue: () => getLastNDays(7) },
|
|
740
|
+
{ label: 'Last 14 days', getValue: () => getLastNDays(14) },
|
|
741
|
+
{ label: 'Last 30 days', getValue: () => getLastNDays(30) },
|
|
742
|
+
{ label: 'Last 60 days', getValue: () => getLastNDays(60) },
|
|
743
|
+
{ label: 'Last 90 days', getValue: () => getLastNDays(90) },
|
|
744
|
+
{ label: 'Last 180 days', getValue: () => getLastNDays(180) },
|
|
745
|
+
{ label: 'Last 365 days', getValue: () => getLastNDays(365) }
|
|
746
|
+
],
|
|
747
|
+
/**
|
|
748
|
+
* Simple presets - Basic common ranges
|
|
749
|
+
*/
|
|
750
|
+
simple: [
|
|
751
|
+
{ label: 'Today', getValue: getToday },
|
|
752
|
+
{ label: 'Last 7 days', getValue: () => getLastNDays(7) },
|
|
753
|
+
{ label: 'Last 30 days', getValue: () => getLastNDays(30) },
|
|
754
|
+
{ label: 'This year', getValue: getThisYear }
|
|
755
|
+
]
|
|
756
|
+
};
|
|
757
|
+
|
|
465
758
|
/**
|
|
466
759
|
* Public API Surface of @oneluiz/dual-datepicker
|
|
467
760
|
*/
|
|
@@ -470,5 +763,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
470
763
|
* Generated bundle index. Do not edit.
|
|
471
764
|
*/
|
|
472
765
|
|
|
473
|
-
export { DATE_ADAPTER, DateAdapter, DualDatepickerComponent, NativeDateAdapter };
|
|
766
|
+
export { CommonPresets, DATE_ADAPTER, DateAdapter, DualDatepickerComponent, NativeDateAdapter, getLastMonth, getLastNDays, getLastNMonths, getLastNYears, getLastQuarter, getLastWeek, getLastYear, getMonthToDate, getQuarterToDate, getThisMonth, getThisQuarter, getThisWeek, getThisYear, getToday, getYearToDate, getYesterday };
|
|
474
767
|
//# sourceMappingURL=oneluiz-dual-datepicker.mjs.map
|