@oneluiz/dual-datepicker 3.4.0 → 3.5.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 +86 -1
- package/core/dual-date-range.store.d.ts +104 -0
- package/core/index.d.ts +7 -0
- package/core/preset.engine.d.ts +54 -0
- package/core/range.validator.d.ts +37 -0
- package/esm2022/core/dual-date-range.store.mjs +293 -0
- package/esm2022/core/index.mjs +8 -0
- package/esm2022/core/preset.engine.mjs +209 -0
- package/esm2022/core/range.validator.mjs +105 -0
- package/esm2022/public-api.mjs +5 -2
- package/fesm2022/oneluiz-dual-datepicker.mjs +608 -1
- package/fesm2022/oneluiz-dual-datepicker.mjs.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless Preset Engine
|
|
3
|
+
* Pure functions that resolve date ranges WITHOUT render dependency
|
|
4
|
+
* Perfect for SSR, global state, dashboard filters
|
|
5
|
+
*/
|
|
6
|
+
import { formatISODate } from './range.validator';
|
|
7
|
+
/**
|
|
8
|
+
* Registry of built-in presets
|
|
9
|
+
* Can be extended by consumers
|
|
10
|
+
*/
|
|
11
|
+
export class PresetEngine {
|
|
12
|
+
presets = new Map();
|
|
13
|
+
constructor() {
|
|
14
|
+
this.registerBuiltInPresets();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register a custom preset
|
|
18
|
+
*/
|
|
19
|
+
register(key, preset) {
|
|
20
|
+
this.presets.set(key, preset);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolve a preset to date range
|
|
24
|
+
*/
|
|
25
|
+
resolve(key, now = new Date()) {
|
|
26
|
+
const preset = this.presets.get(key);
|
|
27
|
+
if (!preset)
|
|
28
|
+
return null;
|
|
29
|
+
const { start, end } = preset.resolve(now);
|
|
30
|
+
return {
|
|
31
|
+
start: formatISODate(start),
|
|
32
|
+
end: formatISODate(end)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get all available preset keys
|
|
37
|
+
*/
|
|
38
|
+
getPresetKeys() {
|
|
39
|
+
return Array.from(this.presets.keys());
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Register all built-in presets
|
|
43
|
+
*/
|
|
44
|
+
registerBuiltInPresets() {
|
|
45
|
+
// Today
|
|
46
|
+
this.register('TODAY', {
|
|
47
|
+
resolve: (now) => ({ start: now, end: now })
|
|
48
|
+
});
|
|
49
|
+
// Yesterday
|
|
50
|
+
this.register('YESTERDAY', {
|
|
51
|
+
resolve: (now) => {
|
|
52
|
+
const date = new Date(now);
|
|
53
|
+
date.setDate(date.getDate() - 1);
|
|
54
|
+
return { start: date, end: date };
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
// Last N Days
|
|
58
|
+
this.register('LAST_7_DAYS', {
|
|
59
|
+
resolve: (now) => {
|
|
60
|
+
const end = new Date(now);
|
|
61
|
+
const start = new Date(now);
|
|
62
|
+
start.setDate(start.getDate() - 6);
|
|
63
|
+
return { start, end };
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
this.register('LAST_14_DAYS', {
|
|
67
|
+
resolve: (now) => {
|
|
68
|
+
const end = new Date(now);
|
|
69
|
+
const start = new Date(now);
|
|
70
|
+
start.setDate(start.getDate() - 13);
|
|
71
|
+
return { start, end };
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
this.register('LAST_30_DAYS', {
|
|
75
|
+
resolve: (now) => {
|
|
76
|
+
const end = new Date(now);
|
|
77
|
+
const start = new Date(now);
|
|
78
|
+
start.setDate(start.getDate() - 29);
|
|
79
|
+
return { start, end };
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
this.register('LAST_60_DAYS', {
|
|
83
|
+
resolve: (now) => {
|
|
84
|
+
const end = new Date(now);
|
|
85
|
+
const start = new Date(now);
|
|
86
|
+
start.setDate(start.getDate() - 59);
|
|
87
|
+
return { start, end };
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
this.register('LAST_90_DAYS', {
|
|
91
|
+
resolve: (now) => {
|
|
92
|
+
const end = new Date(now);
|
|
93
|
+
const start = new Date(now);
|
|
94
|
+
start.setDate(start.getDate() - 89);
|
|
95
|
+
return { start, end };
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// This Week (Monday to Sunday)
|
|
99
|
+
this.register('THIS_WEEK', {
|
|
100
|
+
resolve: (now) => {
|
|
101
|
+
const dayOfWeek = now.getDay();
|
|
102
|
+
const start = new Date(now);
|
|
103
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
104
|
+
start.setDate(start.getDate() - daysToMonday);
|
|
105
|
+
const end = new Date(start);
|
|
106
|
+
end.setDate(end.getDate() + 6);
|
|
107
|
+
return { start, end };
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Last Week
|
|
111
|
+
this.register('LAST_WEEK', {
|
|
112
|
+
resolve: (now) => {
|
|
113
|
+
const dayOfWeek = now.getDay();
|
|
114
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
115
|
+
const lastMonday = new Date(now);
|
|
116
|
+
lastMonday.setDate(lastMonday.getDate() - daysToMonday - 7);
|
|
117
|
+
const lastSunday = new Date(lastMonday);
|
|
118
|
+
lastSunday.setDate(lastSunday.getDate() + 6);
|
|
119
|
+
return { start: lastMonday, end: lastSunday };
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
// This Month
|
|
123
|
+
this.register('THIS_MONTH', {
|
|
124
|
+
resolve: (now) => {
|
|
125
|
+
const start = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
126
|
+
const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);
|
|
127
|
+
return { start, end };
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
// Last Month
|
|
131
|
+
this.register('LAST_MONTH', {
|
|
132
|
+
resolve: (now) => {
|
|
133
|
+
const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);
|
|
134
|
+
const end = new Date(now.getFullYear(), now.getMonth(), 0);
|
|
135
|
+
return { start, end };
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// Month to Date
|
|
139
|
+
this.register('MONTH_TO_DATE', {
|
|
140
|
+
resolve: (now) => {
|
|
141
|
+
const start = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
142
|
+
return { start, end: now };
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
// This Quarter
|
|
146
|
+
this.register('THIS_QUARTER', {
|
|
147
|
+
resolve: (now) => {
|
|
148
|
+
const currentMonth = now.getMonth();
|
|
149
|
+
const quarterStartMonth = Math.floor(currentMonth / 3) * 3;
|
|
150
|
+
const start = new Date(now.getFullYear(), quarterStartMonth, 1);
|
|
151
|
+
const end = new Date(now.getFullYear(), quarterStartMonth + 3, 0);
|
|
152
|
+
return { start, end };
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// Last Quarter
|
|
156
|
+
this.register('LAST_QUARTER', {
|
|
157
|
+
resolve: (now) => {
|
|
158
|
+
const currentMonth = now.getMonth();
|
|
159
|
+
const lastQuarterStartMonth = Math.floor(currentMonth / 3) * 3 - 3;
|
|
160
|
+
const start = new Date(now.getFullYear(), lastQuarterStartMonth, 1);
|
|
161
|
+
const end = new Date(now.getFullYear(), lastQuarterStartMonth + 3, 0);
|
|
162
|
+
return { start, end };
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
// Quarter to Date
|
|
166
|
+
this.register('QUARTER_TO_DATE', {
|
|
167
|
+
resolve: (now) => {
|
|
168
|
+
const currentMonth = now.getMonth();
|
|
169
|
+
const quarterStartMonth = Math.floor(currentMonth / 3) * 3;
|
|
170
|
+
const start = new Date(now.getFullYear(), quarterStartMonth, 1);
|
|
171
|
+
return { start, end: now };
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
// This Year
|
|
175
|
+
this.register('THIS_YEAR', {
|
|
176
|
+
resolve: (now) => {
|
|
177
|
+
const start = new Date(now.getFullYear(), 0, 1);
|
|
178
|
+
const end = new Date(now.getFullYear(), 11, 31);
|
|
179
|
+
return { start, end };
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// Last Year
|
|
183
|
+
this.register('LAST_YEAR', {
|
|
184
|
+
resolve: (now) => {
|
|
185
|
+
const start = new Date(now.getFullYear() - 1, 0, 1);
|
|
186
|
+
const end = new Date(now.getFullYear() - 1, 11, 31);
|
|
187
|
+
return { start, end };
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
// Year to Date
|
|
191
|
+
this.register('YEAR_TO_DATE', {
|
|
192
|
+
resolve: (now) => {
|
|
193
|
+
const start = new Date(now.getFullYear(), 0, 1);
|
|
194
|
+
return { start, end: now };
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Create a custom preset from a function
|
|
201
|
+
*/
|
|
202
|
+
export function createPreset(resolver) {
|
|
203
|
+
return { resolve: resolver };
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Singleton preset engine instance
|
|
207
|
+
*/
|
|
208
|
+
export const presetEngine = new PresetEngine();
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LmVuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3ByZXNldC5lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWVsRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNmLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUVqRDtRQUNFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxHQUFXLEVBQUUsTUFBbUI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxHQUFXLEVBQUUsTUFBWSxJQUFJLElBQUksRUFBRTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXpCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDM0IsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUM7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQjtRQUM1QixRQUFRO1FBQ1IsSUFB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Q0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsUUFBbUQ7SUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMvQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGVhZGxlc3MgUHJlc2V0IEVuZ2luZVxuICogUHVyZSBmdW5jdGlvbnMgdGhhdCByZXNvbHZlIGRhdGUgcmFuZ2VzIFdJVEhPVVQgcmVuZGVyIGRlcGVuZGVuY3lcbiAqIFBlcmZlY3QgZm9yIFNTUiwgZ2xvYmFsIHN0YXRlLCBkYXNoYm9hcmQgZmlsdGVyc1xuICovXG5cbmltcG9ydCB7IGZvcm1hdElTT0RhdGUgfSBmcm9tICcuL3JhbmdlLnZhbGlkYXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VQcmVzZXQge1xuICAvKipcbiAgICogUmVzb2x2ZSBwcmVzZXQgdG8gYWN0dWFsIGRhdGUgcmFuZ2VcbiAgICogQHBhcmFtIG5vdyAtIEN1cnJlbnQgZGF0ZSBmb3IgZGV0ZXJtaW5pc3RpYyBjYWxjdWxhdGlvblxuICAgKi9cbiAgcmVzb2x2ZShub3c6IERhdGUpOiB7IHN0YXJ0OiBEYXRlOyBlbmQ6IERhdGUgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRSYW5nZSB7XG4gIHN0YXJ0OiBzdHJpbmc7IC8vIElTTyBmb3JtYXRcbiAgZW5kOiBzdHJpbmc7IC8vIElTTyBmb3JtYXRcbn1cblxuLyoqXG4gKiBSZWdpc3RyeSBvZiBidWlsdC1pbiBwcmVzZXRzXG4gKiBDYW4gYmUgZXh0ZW5kZWQgYnkgY29uc3VtZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmVzZXRFbmdpbmUge1xuICBwcml2YXRlIHByZXNldHMgPSBuZXcgTWFwPHN0cmluZywgUmFuZ2VQcmVzZXQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZWdpc3RlckJ1aWx0SW5QcmVzZXRzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjdXN0b20gcHJlc2V0XG4gICAqL1xuICByZWdpc3RlcihrZXk6IHN0cmluZywgcHJlc2V0OiBSYW5nZVByZXNldCk6IHZvaWQge1xuICAgIHRoaXMucHJlc2V0cy5zZXQoa2V5LCBwcmVzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBwcmVzZXQgdG8gZGF0ZSByYW5nZVxuICAgKi9cbiAgcmVzb2x2ZShrZXk6IHN0cmluZywgbm93OiBEYXRlID0gbmV3IERhdGUoKSk6IFByZXNldFJhbmdlIHwgbnVsbCB7XG4gICAgY29uc3QgcHJlc2V0ID0gdGhpcy5wcmVzZXRzLmdldChrZXkpO1xuICAgIGlmICghcHJlc2V0KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gcHJlc2V0LnJlc29sdmUobm93KTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IGZvcm1hdElTT0RhdGUoc3RhcnQpLFxuICAgICAgZW5kOiBmb3JtYXRJU09EYXRlKGVuZClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgYXZhaWxhYmxlIHByZXNldCBrZXlzXG4gICAqL1xuICBnZXRQcmVzZXRLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnByZXNldHMua2V5cygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbGwgYnVpbHQtaW4gcHJlc2V0c1xuICAgKi9cbiAgcHJpdmF0ZSByZWdpc3RlckJ1aWx0SW5QcmVzZXRzKCk6IHZvaWQge1xuICAgIC8vIFRvZGF5XG4gICAgdGhpcy5yZWdpc3RlcignVE9EQVknLCB7XG4gICAgICByZXNvbHZlOiAobm93KSA9PiAoeyBzdGFydDogbm93LCBlbmQ6IG5vdyB9KVxuICAgIH0pO1xuXG4gICAgLy8gWWVzdGVyZGF5XG4gICAgdGhpcy5yZWdpc3RlcignWUVTVEVSREFZJywge1xuICAgICAgcmVzb2x2ZTogKG5vdykgPT4ge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiBkYXRlLCBlbmQ6IGRhdGUgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExhc3QgTiBEYXlzXG4gICAgdGhpcy5yZWdpc3RlcignTEFTVF83X0RBWVMnLCB7XG4gICAgICByZXNvbHZlOiAobm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSA2KTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcignTEFTVF8xNF9EQVlTJywge1xuICAgICAgcmVzb2x2ZTogKG5vdykgPT4ge1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZShub3cpO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICAgIHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gMTMpO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCdMQVNUXzMwX0RBWVMnLCB7XG4gICAgICByZXNvbHZlOiAobm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSAyOSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXIoJ0xBU1RfNjBfREFZUycsIHtcbiAgICAgIHJlc29sdmU6IChub3cpID0+IHtcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShub3cpO1xuICAgICAgICBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIDU5KTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcignTEFTVF85MF9EQVlTJywge1xuICAgICAgcmVzb2x2ZTogKG5vdykgPT4ge1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZShub3cpO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICAgIHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gODkpO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUaGlzIFdlZWsgKE1vbmRheSB0byBTdW5kYXkpXG4gICAgdGhpcy5yZWdpc3RlcignVEhJU19XRUVLJywge1xuICAgICAgcmVzb2x2ZTogKG5vdykgPT4ge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBub3cuZ2V0RGF5KCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgY29uc3QgZGF5c1RvTW9uZGF5ID0gZGF5T2ZXZWVrID09PSAwID8gNiA6IGRheU9mV2VlayAtIDE7XG4gICAgICAgIHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gZGF5c1RvTW9uZGF5KTtcblxuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZShzdGFydCk7XG4gICAgICAgIGVuZC5zZXREYXRlKGVuZC5nZXREYXRlKCkgKyA2KTtcblxuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMYXN0IFdlZWtcbiAgICB0aGlzLnJlZ2lzdGVyKCdMQVNUX1dFRUsnLCB7XG4gICAgICByZXNvbHZlOiAobm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG5vdy5nZXREYXkoKTtcbiAgICAgICAgY29uc3QgZGF5c1RvTW9uZGF5ID0gZGF5T2ZXZWVrID09PSAwID8gNiA6IGRheU9mV2VlayAtIDE7XG5cbiAgICAgICAgY29uc3QgbGFzdE1vbmRheSA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICAgIGxhc3RNb25kYXkuc2V0RGF0ZShsYXN0TW9uZGF5LmdldERhdGUoKSAtIGRheXNUb01vbmRheSAtIDcpO1xuXG4gICAgICAgIGNvbnN0IGxhc3RTdW5kYXkgPSBuZXcgRGF0ZShsYXN0TW9uZGF5KTtcbiAgICAgICAgbGFzdFN1bmRheS5zZXREYXRlKGxhc3RTdW5kYXkuZ2V0RGF0ZSgpICsgNik7XG5cbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IGxhc3RNb25kYXksIGVuZDogbGFzdFN1bmRheSB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVGhpcyBNb250aFxuICAgIHRoaXMucmVnaXN0ZXIoJ1RISVNfTU9OVEgnLCB7XG4gICAgICByZXNvbHZlOiAobm93KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpICsgMSwgMCk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExhc3QgTW9udGhcbiAgICB0aGlzLnJlZ2lzdGVyKCdMQVNUX01PTlRIJywge1xuICAgICAgcmVzb2x2ZTogKG5vdykgPT4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSAtIDEsIDEpO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIDApO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBNb250aCB0byBEYXRlXG4gICAgdGhpcy5yZWdpc3RlcignTU9OVEhfVE9fREFURScsIHtcbiAgICAgIHJlc29sdmU6IChub3cpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIDEpO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kOiBub3cgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRoaXMgUXVhcnRlclxuICAgIHRoaXMucmVnaXN0ZXIoJ1RISVNfUVVBUlRFUicsIHtcbiAgICAgIHJlc29sdmU6IChub3cpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudE1vbnRoID0gbm93LmdldE1vbnRoKCk7XG4gICAgICAgIGNvbnN0IHF1YXJ0ZXJTdGFydE1vbnRoID0gTWF0aC5mbG9vcihjdXJyZW50TW9udGggLyAzKSAqIDM7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIHF1YXJ0ZXJTdGFydE1vbnRoLCAxKTtcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIHF1YXJ0ZXJTdGFydE1vbnRoICsgMywgMCk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExhc3QgUXVhcnRlclxuICAgIHRoaXMucmVnaXN0ZXIoJ0xBU1RfUVVBUlRFUicsIHtcbiAgICAgIHJlc29sdmU6IChub3cpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudE1vbnRoID0gbm93LmdldE1vbnRoKCk7XG4gICAgICAgIGNvbnN0IGxhc3RRdWFydGVyU3RhcnRNb250aCA9IE1hdGguZmxvb3IoY3VycmVudE1vbnRoIC8gMykgKiAzIC0gMztcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbGFzdFF1YXJ0ZXJTdGFydE1vbnRoLCAxKTtcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIGxhc3RRdWFydGVyU3RhcnRNb250aCArIDMsIDApO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBRdWFydGVyIHRvIERhdGVcbiAgICB0aGlzLnJlZ2lzdGVyKCdRVUFSVEVSX1RPX0RBVEUnLCB7XG4gICAgICByZXNvbHZlOiAobm93KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IG5vdy5nZXRNb250aCgpO1xuICAgICAgICBjb25zdCBxdWFydGVyU3RhcnRNb250aCA9IE1hdGguZmxvb3IoY3VycmVudE1vbnRoIC8gMykgKiAzO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBxdWFydGVyU3RhcnRNb250aCwgMSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IG5vdyB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVGhpcyBZZWFyXG4gICAgdGhpcy5yZWdpc3RlcignVEhJU19ZRUFSJywge1xuICAgICAgcmVzb2x2ZTogKG5vdykgPT4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDExLCAzMSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExhc3QgWWVhclxuICAgIHRoaXMucmVnaXN0ZXIoJ0xBU1RfWUVBUicsIHtcbiAgICAgIHJlc29sdmU6IChub3cpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSAtIDEsIDAsIDEpO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCAzMSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFllYXIgdG8gRGF0ZVxuICAgIHRoaXMucmVnaXN0ZXIoJ1lFQVJfVE9fREFURScsIHtcbiAgICAgIHJlc29sdmU6IChub3cpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IG5vdyB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY3VzdG9tIHByZXNldCBmcm9tIGEgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByZXNldChcbiAgcmVzb2x2ZXI6IChub3c6IERhdGUpID0+IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9XG4pOiBSYW5nZVByZXNldCB7XG4gIHJldHVybiB7IHJlc29sdmU6IHJlc29sdmVyIH07XG59XG5cbi8qKlxuICogU2luZ2xldG9uIHByZXNldCBlbmdpbmUgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNvbnN0IHByZXNldEVuZ2luZSA9IG5ldyBQcmVzZXRFbmdpbmUoKTtcbiJdfQ==
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure validation functions for date ranges
|
|
3
|
+
* No dependencies, no side effects - just logic
|
|
4
|
+
* Perfect for SSR, testing, and reusability
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Validate that end date is not before start date
|
|
8
|
+
*/
|
|
9
|
+
export function validateRangeOrder(start, end) {
|
|
10
|
+
if (!start || !end) {
|
|
11
|
+
return { valid: true }; // Allow incomplete selection
|
|
12
|
+
}
|
|
13
|
+
if (end < start) {
|
|
14
|
+
return {
|
|
15
|
+
valid: false,
|
|
16
|
+
error: 'End date cannot be before start date'
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return { valid: true };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Validate that date is within min/max bounds
|
|
23
|
+
*/
|
|
24
|
+
export function validateDateBounds(date, minDate, maxDate) {
|
|
25
|
+
if (!date) {
|
|
26
|
+
return { valid: true };
|
|
27
|
+
}
|
|
28
|
+
if (minDate && date < minDate) {
|
|
29
|
+
return {
|
|
30
|
+
valid: false,
|
|
31
|
+
error: `Date cannot be before ${minDate.toISOString().split('T')[0]}`
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (maxDate && date > maxDate) {
|
|
35
|
+
return {
|
|
36
|
+
valid: false,
|
|
37
|
+
error: `Date cannot be after ${maxDate.toISOString().split('T')[0]}`
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return { valid: true };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validate that a range is within bounds
|
|
44
|
+
*/
|
|
45
|
+
export function validateRangeBounds(start, end, minDate, maxDate) {
|
|
46
|
+
const startValidation = validateDateBounds(start, minDate, maxDate);
|
|
47
|
+
if (!startValidation.valid) {
|
|
48
|
+
return startValidation;
|
|
49
|
+
}
|
|
50
|
+
const endValidation = validateDateBounds(end, minDate, maxDate);
|
|
51
|
+
if (!endValidation.valid) {
|
|
52
|
+
return endValidation;
|
|
53
|
+
}
|
|
54
|
+
return { valid: true };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a date is disabled
|
|
58
|
+
*/
|
|
59
|
+
export function isDateDisabled(date, disabledDates) {
|
|
60
|
+
if (!disabledDates) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
if (typeof disabledDates === 'function') {
|
|
64
|
+
return disabledDates(date);
|
|
65
|
+
}
|
|
66
|
+
// Array of disabled dates - compare by date string
|
|
67
|
+
const dateStr = date.toISOString().split('T')[0];
|
|
68
|
+
return disabledDates.some(d => d.toISOString().split('T')[0] === dateStr);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Apply bounds to a date (clamp it)
|
|
72
|
+
*/
|
|
73
|
+
export function applyBounds(date, minDate, maxDate) {
|
|
74
|
+
let result = date;
|
|
75
|
+
if (minDate && result < minDate) {
|
|
76
|
+
result = minDate;
|
|
77
|
+
}
|
|
78
|
+
if (maxDate && result > maxDate) {
|
|
79
|
+
result = maxDate;
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parse ISO date string to Date object (deterministic)
|
|
85
|
+
*/
|
|
86
|
+
export function parseISODate(dateStr) {
|
|
87
|
+
if (!dateStr)
|
|
88
|
+
return null;
|
|
89
|
+
const [year, month, day] = dateStr.split('-').map(Number);
|
|
90
|
+
if (!year || !month || !day)
|
|
91
|
+
return null;
|
|
92
|
+
return new Date(year, month - 1, day);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Format Date to ISO string (YYYY-MM-DD)
|
|
96
|
+
*/
|
|
97
|
+
export function formatISODate(date) {
|
|
98
|
+
if (!date)
|
|
99
|
+
return '';
|
|
100
|
+
const year = date.getFullYear();
|
|
101
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
102
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
103
|
+
return `${year}-${month}-${day}`;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcmFuZ2UudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFPSDs7R0FFRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFrQixFQUFFLEdBQWdCO0lBQ3JFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsNkJBQTZCO0lBQ3ZELENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsc0NBQXNDO1NBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLElBQWlCLEVBQ2pCLE9BQWMsRUFDZCxPQUFjO0lBRWQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxPQUFPLElBQUksSUFBSSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztZQUNaLEtBQUssRUFBRSx5QkFBeUIsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUM5QixPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsd0JBQXdCLE9B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LEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVwRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdXJlIHZhbGlkYXRpb24gZnVuY3Rpb25zIGZvciBkYXRlIHJhbmdlc1xuICogTm8gZGVwZW5kZW5jaWVzLCBubyBzaWRlIGVmZmVjdHMgLSBqdXN0IGxvZ2ljXG4gKiBQZXJmZWN0IGZvciBTU1IsIHRlc3RpbmcsIGFuZCByZXVzYWJpbGl0eVxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gIHZhbGlkOiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGVuZCBkYXRlIGlzIG5vdCBiZWZvcmUgc3RhcnQgZGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSYW5nZU9yZGVyKHN0YXJ0OiBEYXRlIHwgbnVsbCwgZW5kOiBEYXRlIHwgbnVsbCk6IFZhbGlkYXRpb25SZXN1bHQge1xuICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9OyAvLyBBbGxvdyBpbmNvbXBsZXRlIHNlbGVjdGlvblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yOiAnRW5kIGRhdGUgY2Fubm90IGJlIGJlZm9yZSBzdGFydCBkYXRlJ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgZGF0ZSBpcyB3aXRoaW4gbWluL21heCBib3VuZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRGF0ZUJvdW5kcyhcbiAgZGF0ZTogRGF0ZSB8IG51bGwsXG4gIG1pbkRhdGU/OiBEYXRlLFxuICBtYXhEYXRlPzogRGF0ZVxuKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlmICghZGF0ZSkge1xuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICBpZiAobWluRGF0ZSAmJiBkYXRlIDwgbWluRGF0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZmFsc2UsXG4gICAgICBlcnJvcjogYERhdGUgY2Fubm90IGJlIGJlZm9yZSAke21pbkRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfWBcbiAgICB9O1xuICB9XG5cbiAgaWYgKG1heERhdGUgJiYgZGF0ZSA+IG1heERhdGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3I6IGBEYXRlIGNhbm5vdCBiZSBhZnRlciAke21heERhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfWBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGEgcmFuZ2UgaXMgd2l0aGluIGJvdW5kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSYW5nZUJvdW5kcyhcbiAgc3RhcnQ6IERhdGUgfCBudWxsLFxuICBlbmQ6IERhdGUgfCBudWxsLFxuICBtaW5EYXRlPzogRGF0ZSxcbiAgbWF4RGF0ZT86IERhdGVcbik6IFZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBzdGFydFZhbGlkYXRpb24gPSB2YWxpZGF0ZURhdGVCb3VuZHMoc3RhcnQsIG1pbkRhdGUsIG1heERhdGUpO1xuICBpZiAoIXN0YXJ0VmFsaWRhdGlvbi52YWxpZCkge1xuICAgIHJldHVybiBzdGFydFZhbGlkYXRpb247XG4gIH1cblxuICBjb25zdCBlbmRWYWxpZGF0aW9uID0gdmFsaWRhdGVEYXRlQm91bmRzKGVuZCwgbWluRGF0ZSwgbWF4RGF0ZSk7XG4gIGlmICghZW5kVmFsaWRhdGlvbi52YWxpZCkge1xuICAgIHJldHVybiBlbmRWYWxpZGF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGRhdGUgaXMgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZURpc2FibGVkKFxuICBkYXRlOiBEYXRlLFxuICBkaXNhYmxlZERhdGVzPzogRGF0ZVtdIHwgKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKVxuKTogYm9vbGVhbiB7XG4gIGlmICghZGlzYWJsZWREYXRlcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkaXNhYmxlZERhdGVzKGRhdGUpO1xuICB9XG5cbiAgLy8gQXJyYXkgb2YgZGlzYWJsZWQgZGF0ZXMgLSBjb21wYXJlIGJ5IGRhdGUgc3RyaW5nXG4gIGNvbnN0IGRhdGVTdHIgPSBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgcmV0dXJuIGRpc2FibGVkRGF0ZXMuc29tZShcbiAgICBkID0+IGQudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdID09PSBkYXRlU3RyXG4gICk7XG59XG5cbi8qKlxuICogQXBwbHkgYm91bmRzIHRvIGEgZGF0ZSAoY2xhbXAgaXQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUJvdW5kcyhkYXRlOiBEYXRlLCBtaW5EYXRlPzogRGF0ZSwgbWF4RGF0ZT86IERhdGUpOiBEYXRlIHtcbiAgbGV0IHJlc3VsdCA9IGRhdGU7XG5cbiAgaWYgKG1pbkRhdGUgJiYgcmVzdWx0IDwgbWluRGF0ZSkge1xuICAgIHJlc3VsdCA9IG1pbkRhdGU7XG4gIH1cblxuICBpZiAobWF4RGF0ZSAmJiByZXN1bHQgPiBtYXhEYXRlKSB7XG4gICAgcmVzdWx0ID0gbWF4RGF0ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyc2UgSVNPIGRhdGUgc3RyaW5nIHRvIERhdGUgb2JqZWN0IChkZXRlcm1pbmlzdGljKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJU09EYXRlKGRhdGVTdHI6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgaWYgKCFkYXRlU3RyKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBkYXRlU3RyLnNwbGl0KCctJykubWFwKE51bWJlcik7XG4gIGlmICgheWVhciB8fCAhbW9udGggfHwgIWRheSkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgRGF0ZSB0byBJU08gc3RyaW5nIChZWVlZLU1NLUREKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SVNPRGF0ZShkYXRlOiBEYXRlIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmICghZGF0ZSkgcmV0dXJuICcnO1xuXG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcblxuICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbn1cbiJdfQ==
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -5,6 +5,9 @@ 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
|
-
// Preset Utilities
|
|
8
|
+
// Preset Utilities (deprecated - use core/preset.engine instead)
|
|
9
9
|
export * from './preset-utils';
|
|
10
|
-
|
|
10
|
+
// NEW v3.5.0: Headless Core - Use without UI
|
|
11
|
+
// Perfect for SSR, global state, dashboard filters
|
|
12
|
+
export * from './core';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdEUsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsaUVBQWlFO0FBQ2pFLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsNkNBQTZDO0FBQzdDLG1EQUFtRDtBQUNuRCxjQUFjLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBvbmVsdWl6L2R1YWwtZGF0ZXBpY2tlclxuICovXG5cbmV4cG9ydCB7IER1YWxEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCB0eXBlIHsgRGF0ZVJhbmdlLCBNdWx0aURhdGVSYW5nZSwgUHJlc2V0Q29uZmlnLCBQcmVzZXRSYW5nZSwgTG9jYWxlQ29uZmlnLCBUaGVtZVR5cGUgfSBmcm9tICcuL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG4vLyBEYXRlIEFkYXB0ZXIgU3lzdGVtXG5leHBvcnQgeyBEYXRlQWRhcHRlciwgREFURV9BREFQVEVSIH0gZnJvbSAnLi9kYXRlLWFkYXB0ZXInO1xuZXhwb3J0IHsgTmF0aXZlRGF0ZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLWFkYXB0ZXInO1xuXG4vLyBQcmVzZXQgVXRpbGl0aWVzIChkZXByZWNhdGVkIC0gdXNlIGNvcmUvcHJlc2V0LmVuZ2luZSBpbnN0ZWFkKVxuZXhwb3J0ICogZnJvbSAnLi9wcmVzZXQtdXRpbHMnO1xuXG4vLyBORVcgdjMuNS4wOiBIZWFkbGVzcyBDb3JlIC0gVXNlIHdpdGhvdXQgVUlcbi8vIFBlcmZlY3QgZm9yIFNTUiwgZ2xvYmFsIHN0YXRlLCBkYXNoYm9hcmQgZmlsdGVyc1xuZXhwb3J0ICogZnJvbSAnLi9jb3JlJztcbiJdfQ==
|