@oneluiz/dual-datepicker 4.0.0 → 4.0.2
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 +26 -2
- package/fesm2022/oneluiz-dual-datepicker.mjs +75 -71
- package/fesm2022/oneluiz-dual-datepicker.mjs.map +1 -1
- package/package.json +8 -9
- package/types/oneluiz-dual-datepicker.d.ts +1618 -0
- package/dual-datepicker.component.d.ts +0 -243
- package/esm2022/core/built-in-presets.mjs +0 -289
- package/esm2022/core/calendar-grid/cache.config.mjs +0 -35
- package/esm2022/core/calendar-grid/calendar-grid.cache.mjs +0 -98
- package/esm2022/core/calendar-grid/calendar-grid.factory.mjs +0 -97
- package/esm2022/core/calendar-grid/calendar-grid.types.mjs +0 -8
- package/esm2022/core/calendar-grid/range-highlighter.cache.mjs +0 -200
- package/esm2022/core/calendar-grid/range-highlighter.mjs +0 -185
- package/esm2022/core/calendar-grid/range-highlighter.types.mjs +0 -11
- package/esm2022/core/calendar-grid/virtual-weeks.logic.mjs +0 -149
- package/esm2022/core/calendar-grid/virtual-weeks.types.mjs +0 -11
- package/esm2022/core/date-adapter.mjs +0 -77
- package/esm2022/core/date-clock.mjs +0 -65
- package/esm2022/core/dual-date-range.store.mjs +0 -329
- package/esm2022/core/internal.mjs +0 -92
- package/esm2022/core/native-date-adapter.mjs +0 -286
- package/esm2022/core/preset-providers.mjs +0 -243
- package/esm2022/core/preset-registry.mjs +0 -277
- package/esm2022/core/preset.engine.mjs +0 -179
- package/esm2022/core/public.mjs +0 -94
- package/esm2022/core/range-preset.plugin.mjs +0 -70
- package/esm2022/core/range.validator.mjs +0 -105
- package/esm2022/core/system-clock.mjs +0 -34
- package/esm2022/core/testing/date.helpers.mjs +0 -49
- package/esm2022/core/testing/fixed-clock.mjs +0 -30
- package/esm2022/core/testing/index.mjs +0 -8
- package/esm2022/dual-datepicker.component.mjs +0 -1314
- package/esm2022/oneluiz-dual-datepicker.mjs +0 -5
- package/esm2022/public-api.mjs +0 -43
- package/index.d.ts +0 -5
- package/public-api.d.ts +0 -44
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Range Highlighter Service
|
|
3
|
-
*
|
|
4
|
-
* Decorates calendar grids with range highlights, hover previews, and disabled states.
|
|
5
|
-
* Pure computation layer - no caching (see RangeHighlighterCache for memoization).
|
|
6
|
-
*
|
|
7
|
-
* @module core/calendar-grid/range-highlighter
|
|
8
|
-
* @version 3.8.0
|
|
9
|
-
*/
|
|
10
|
-
import { Injectable, Inject } from '@angular/core';
|
|
11
|
-
import { DATE_ADAPTER } from '../date-adapter';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
/**
|
|
14
|
-
* Range Highlighter
|
|
15
|
-
*
|
|
16
|
-
* Applies decorations to calendar grids:
|
|
17
|
-
* - isSelectedStart, isSelectedEnd (range boundaries)
|
|
18
|
-
* - isInRange (cells within selected range)
|
|
19
|
-
* - isInHoverRange (hover preview)
|
|
20
|
-
* - isDisabled (constraints, custom predicates)
|
|
21
|
-
*
|
|
22
|
-
* Design:
|
|
23
|
-
* - Pure functions (same input = same output)
|
|
24
|
-
* - Uses DateAdapter for all date operations (SSR-safe)
|
|
25
|
-
* - No side effects, no state
|
|
26
|
-
* - Fast (~1ms for 42 cells on mobile)
|
|
27
|
-
*
|
|
28
|
-
* Usage:
|
|
29
|
-
* ```typescript
|
|
30
|
-
* const grid = calendarGridCache.get(monthDate, 0);
|
|
31
|
-
* const decorated = rangeHighlighter.decorate(grid, {
|
|
32
|
-
* start: startDate,
|
|
33
|
-
* end: endDate,
|
|
34
|
-
* hoverDate: '2026-01-20',
|
|
35
|
-
* disabledDates: [...]
|
|
36
|
-
* });
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export class RangeHighlighter {
|
|
40
|
-
adapter;
|
|
41
|
-
constructor(adapter) {
|
|
42
|
-
this.adapter = adapter;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Decorate calendar grid with range highlights
|
|
46
|
-
*
|
|
47
|
-
* @param grid Base calendar grid (from CalendarGridCache)
|
|
48
|
-
* @param params Decoration parameters (start, end, hover, disabled, etc.)
|
|
49
|
-
* @returns Decorated grid with computed properties
|
|
50
|
-
*/
|
|
51
|
-
decorate(grid, params) {
|
|
52
|
-
// Normalize dates (ensure start of day, consistent ISO strings)
|
|
53
|
-
const startISO = params.start ? this.adapter.toISODate(params.start) : null;
|
|
54
|
-
const endISO = params.end ? this.adapter.toISODate(params.end) : null;
|
|
55
|
-
const minISO = params.minDate ? this.adapter.toISODate(params.minDate) : null;
|
|
56
|
-
const maxISO = params.maxDate ? this.adapter.toISODate(params.maxDate) : null;
|
|
57
|
-
const hoverISO = params.hoverDate || null;
|
|
58
|
-
// Compute hover range boundaries (if applicable)
|
|
59
|
-
const hoverRange = this.computeHoverRange(startISO, hoverISO, params.selectingStartDate || false, params.multiRange || false);
|
|
60
|
-
// Decorate all cells
|
|
61
|
-
const decoratedCells = grid.cells.map((cell) => {
|
|
62
|
-
// Padding cells (previous/next month) get default decorations
|
|
63
|
-
if (!cell.inCurrentMonth) {
|
|
64
|
-
return {
|
|
65
|
-
...cell,
|
|
66
|
-
isSelectedStart: false,
|
|
67
|
-
isSelectedEnd: false,
|
|
68
|
-
isInRange: false,
|
|
69
|
-
isInHoverRange: false,
|
|
70
|
-
isDisabled: false
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
// Current month cells: apply full decoration logic
|
|
74
|
-
const cellISO = cell.iso;
|
|
75
|
-
return {
|
|
76
|
-
...cell,
|
|
77
|
-
isSelectedStart: startISO === cellISO,
|
|
78
|
-
isSelectedEnd: endISO === cellISO,
|
|
79
|
-
isInRange: this.isInRange(cellISO, startISO, endISO),
|
|
80
|
-
isInHoverRange: this.isInHoverRange(cellISO, hoverRange),
|
|
81
|
-
isDisabled: this.isDisabled(cell.date, minISO, maxISO, params.disabledDates)
|
|
82
|
-
};
|
|
83
|
-
});
|
|
84
|
-
// Organize cells into weeks (6 × 7)
|
|
85
|
-
const weeks = [];
|
|
86
|
-
for (let i = 0; i < decoratedCells.length; i += 7) {
|
|
87
|
-
weeks.push(decoratedCells.slice(i, i + 7));
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
base: grid,
|
|
91
|
-
cells: decoratedCells,
|
|
92
|
-
weeks
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Check if cell is within selected range
|
|
97
|
-
*
|
|
98
|
-
* @param cellISO Cell date (ISO format)
|
|
99
|
-
* @param startISO Start date (ISO or null)
|
|
100
|
-
* @param endISO End date (ISO or null)
|
|
101
|
-
* @returns True if cell is in range [start, end] (inclusive)
|
|
102
|
-
*/
|
|
103
|
-
isInRange(cellISO, startISO, endISO) {
|
|
104
|
-
if (!startISO || !endISO)
|
|
105
|
-
return false;
|
|
106
|
-
return cellISO >= startISO && cellISO <= endISO;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Check if cell is within hover preview range
|
|
110
|
-
*
|
|
111
|
-
* @param cellISO Cell date (ISO format)
|
|
112
|
-
* @param hoverRange Hover range boundaries (or null)
|
|
113
|
-
* @returns True if cell is in hover range
|
|
114
|
-
*/
|
|
115
|
-
isInHoverRange(cellISO, hoverRange) {
|
|
116
|
-
if (!hoverRange)
|
|
117
|
-
return false;
|
|
118
|
-
return cellISO >= hoverRange.min && cellISO <= hoverRange.max;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Check if cell is disabled
|
|
122
|
-
*
|
|
123
|
-
* @param date Cell date object
|
|
124
|
-
* @param minISO Minimum allowed date (ISO or null)
|
|
125
|
-
* @param maxISO Maximum allowed date (ISO or null)
|
|
126
|
-
* @param disabledDates Disabled dates (array, function, or null)
|
|
127
|
-
* @returns True if cell is disabled
|
|
128
|
-
*/
|
|
129
|
-
isDisabled(date, minISO, maxISO, disabledDates) {
|
|
130
|
-
const dateISO = this.adapter.toISODate(date);
|
|
131
|
-
// Check min/max constraints
|
|
132
|
-
if (minISO && dateISO < minISO)
|
|
133
|
-
return true;
|
|
134
|
-
if (maxISO && dateISO > maxISO)
|
|
135
|
-
return true;
|
|
136
|
-
// Check disabled dates
|
|
137
|
-
if (!disabledDates)
|
|
138
|
-
return false;
|
|
139
|
-
if (typeof disabledDates === 'function') {
|
|
140
|
-
// Custom predicate
|
|
141
|
-
return disabledDates(date);
|
|
142
|
-
}
|
|
143
|
-
else if (Array.isArray(disabledDates)) {
|
|
144
|
-
// Array of disabled dates (exact day match)
|
|
145
|
-
return disabledDates.some(disabledDate => {
|
|
146
|
-
return this.adapter.getYear(date) === this.adapter.getYear(disabledDate) &&
|
|
147
|
-
this.adapter.getMonth(date) === this.adapter.getMonth(disabledDate) &&
|
|
148
|
-
this.adapter.getDate(date) === this.adapter.getDate(disabledDate);
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Compute hover preview range
|
|
155
|
-
*
|
|
156
|
-
* When user hovers over a date (and not selecting start):
|
|
157
|
-
* - Show preview range from start to hover
|
|
158
|
-
* - Range is always [min, max] where min <= max
|
|
159
|
-
*
|
|
160
|
-
* @param startISO Current start date (ISO or null)
|
|
161
|
-
* @param hoverISO Hovered date (ISO or null)
|
|
162
|
-
* @param selectingStart True if selecting start date (hover disabled)
|
|
163
|
-
* @param multiRange True if in multi-range mode
|
|
164
|
-
* @returns Hover range boundaries or null
|
|
165
|
-
*/
|
|
166
|
-
computeHoverRange(startISO, hoverISO, selectingStart, multiRange) {
|
|
167
|
-
// No hover preview when selecting start
|
|
168
|
-
if (selectingStart || !hoverISO || !startISO)
|
|
169
|
-
return null;
|
|
170
|
-
// Compute min/max (always normalized order)
|
|
171
|
-
const min = startISO < hoverISO ? startISO : hoverISO;
|
|
172
|
-
const max = startISO > hoverISO ? startISO : hoverISO;
|
|
173
|
-
return { min, max };
|
|
174
|
-
}
|
|
175
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RangeHighlighter, deps: [{ token: DATE_ADAPTER }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
176
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RangeHighlighter, providedIn: 'root' });
|
|
177
|
-
}
|
|
178
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RangeHighlighter, decorators: [{
|
|
179
|
-
type: Injectable,
|
|
180
|
-
args: [{ providedIn: 'root' }]
|
|
181
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
182
|
-
type: Inject,
|
|
183
|
-
args: [DATE_ADAPTER]
|
|
184
|
-
}] }] });
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtaGlnaGxpZ2h0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9jYWxlbmRhci1ncmlkL3JhbmdlLWhpZ2hsaWdodGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUk1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFFSztJQURoQyxZQUNnQyxPQUFvQjtRQUFwQixZQUFPLEdBQVAsT0FBTyxDQUFhO0lBQ2pELENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQ04sSUFBa0IsRUFDbEIsTUFBNkI7UUFFN0IsZ0VBQWdFO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFD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Q0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3RELE1BQU0sR0FBRyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBRXRELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQzt3R0F6S1UsZ0JBQWdCLGtCQUVqQixZQUFZOzRHQUZYLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFHN0IsTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSYW5nZSBIaWdobGlnaHRlciBTZXJ2aWNlXG4gKiBcbiAqIERlY29yYXRlcyBjYWxlbmRhciBncmlkcyB3aXRoIHJhbmdlIGhpZ2hsaWdodHMsIGhvdmVyIHByZXZpZXdzLCBhbmQgZGlzYWJsZWQgc3RhdGVzLlxuICogUHVyZSBjb21wdXRhdGlvbiBsYXllciAtIG5vIGNhY2hpbmcgKHNlZSBSYW5nZUhpZ2hsaWdodGVyQ2FjaGUgZm9yIG1lbW9pemF0aW9uKS5cbiAqIFxuICogQG1vZHVsZSBjb3JlL2NhbGVuZGFyLWdyaWQvcmFuZ2UtaGlnaGxpZ2h0ZXJcbiAqIEB2ZXJzaW9uIDMuOC4wXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgREFURV9BREFQVEVSIH0gZnJvbSAnLi4vZGF0ZS1hZGFwdGVyJztcbmltcG9ydCB7IENhbGVuZGFyR3JpZCwgQ2FsZW5kYXJDZWxsIH0gZnJvbSAnLi9jYWxlbmRhci1ncmlkLnR5cGVzJztcbmltcG9ydCB7IERlY29yYXRlZEdyaWQsIERlY29yYXRlZENlbGwsIFJhbmdlRGVjb3JhdGlvblBhcmFtcyB9IGZyb20gJy4vcmFuZ2UtaGlnaGxpZ2h0ZXIudHlwZXMnO1xuXG4vKipcbiAqIFJhbmdlIEhpZ2hsaWdodGVyXG4gKiBcbiAqIEFwcGxpZXMgZGVjb3JhdGlvbnMgdG8gY2FsZW5kYXIgZ3JpZHM6XG4gKiAtIGlzU2VsZWN0ZWRTdGFydCwgaXNTZWxlY3RlZEVuZCAocmFuZ2UgYm91bmRhcmllcylcbiAqIC0gaXNJblJhbmdlIChjZWxscyB3aXRoaW4gc2VsZWN0ZWQgcmFuZ2UpXG4gKiAtIGlzSW5Ib3ZlclJhbmdlIChob3ZlciBwcmV2aWV3KVxuICogLSBpc0Rpc2FibGVkIChjb25zdHJhaW50cywgY3VzdG9tIHByZWRpY2F0ZXMpXG4gKiBcbiAqIERlc2lnbjpcbiAqIC0gUHVyZSBmdW5jdGlvbnMgKHNhbWUgaW5wdXQgPSBzYW1lIG91dHB1dClcbiAqIC0gVXNlcyBEYXRlQWRhcHRlciBmb3IgYWxsIGRhdGUgb3BlcmF0aW9ucyAoU1NSLXNhZmUpXG4gKiAtIE5vIHNpZGUgZWZmZWN0cywgbm8gc3RhdGVcbiAqIC0gRmFzdCAofjFtcyBmb3IgNDIgY2VsbHMgb24gbW9iaWxlKVxuICogXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGdyaWQgPSBjYWxlbmRhckdyaWRDYWNoZS5nZXQobW9udGhEYXRlLCAwKTtcbiAqIGNvbnN0IGRlY29yYXRlZCA9IHJhbmdlSGlnaGxpZ2h0ZXIuZGVjb3JhdGUoZ3JpZCwge1xuICogICBzdGFydDogc3RhcnREYXRlLFxuICogICBlbmQ6IGVuZERhdGUsXG4gKiAgIGhvdmVyRGF0ZTogJzIwMjYtMDEtMjAnLFxuICogICBkaXNhYmxlZERhdGVzOiBbLi4uXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSYW5nZUhpZ2hsaWdodGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChEQVRFX0FEQVBURVIpIHByaXZhdGUgYWRhcHRlcjogRGF0ZUFkYXB0ZXJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBEZWNvcmF0ZSBjYWxlbmRhciBncmlkIHdpdGggcmFuZ2UgaGlnaGxpZ2h0c1xuICAgKiBcbiAgICogQHBhcmFtIGdyaWQgQmFzZSBjYWxlbmRhciBncmlkIChmcm9tIENhbGVuZGFyR3JpZENhY2hlKVxuICAgKiBAcGFyYW0gcGFyYW1zIERlY29yYXRpb24gcGFyYW1ldGVycyAoc3RhcnQsIGVuZCwgaG92ZXIsIGRpc2FibGVkLCBldGMuKVxuICAgKiBAcmV0dXJucyBEZWNvcmF0ZWQgZ3JpZCB3aXRoIGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgICovXG4gIGRlY29yYXRlKFxuICAgIGdyaWQ6IENhbGVuZGFyR3JpZCxcbiAgICBwYXJhbXM6IFJhbmdlRGVjb3JhdGlvblBhcmFtc1xuICApOiBEZWNvcmF0ZWRHcmlkIHtcbiAgICAvLyBOb3JtYWxpemUgZGF0ZXMgKGVuc3VyZSBzdGFydCBvZiBkYXksIGNvbnNpc3RlbnQgSVNPIHN0cmluZ3MpXG4gICAgY29uc3Qgc3RhcnRJU08gPSBwYXJhbXMuc3RhcnQgPyB0aGlzLmFkYXB0ZXIudG9JU09EYXRlKHBhcmFtcy5zdGFydCkgOiBudWxsO1xuICAgIGNvbnN0IGVuZElTTyA9IHBhcmFtcy5lbmQgPyB0aGlzLmFkYXB0ZXIudG9JU09EYXRlKHBhcmFtcy5lbmQpIDogbnVsbDtcbiAgICBjb25zdCBtaW5JU08gPSBwYXJhbXMubWluRGF0ZSA/IHRoaXMuYWRhcHRlci50b0lTT0RhdGUocGFyYW1zLm1pbkRhdGUpIDogbnVsbDtcbiAgICBjb25zdCBtYXhJU08gPSBwYXJhbXMubWF4RGF0ZSA/IHRoaXMuYWRhcHRlci50b0lTT0RhdGUocGFyYW1zLm1heERhdGUpIDogbnVsbDtcbiAgICBjb25zdCBob3ZlcklTTyA9IHBhcmFtcy5ob3ZlckRhdGUgfHwgbnVsbDtcblxuICAgIC8vIENvbXB1dGUgaG92ZXIgcmFuZ2UgYm91bmRhcmllcyAoaWYgYXBwbGljYWJsZSlcbiAgICBjb25zdCBob3ZlclJhbmdlID0gdGhpcy5jb21wdXRlSG92ZXJSYW5nZShcbiAgICAgIHN0YXJ0SVNPLFxuICAgICAgaG92ZXJJU08sXG4gICAgICBwYXJhbXMuc2VsZWN0aW5nU3RhcnREYXRlIHx8IGZhbHNlLFxuICAgICAgcGFyYW1zLm11bHRpUmFuZ2UgfHwgZmFsc2VcbiAgICApO1xuXG4gICAgLy8gRGVjb3JhdGUgYWxsIGNlbGxzXG4gICAgY29uc3QgZGVjb3JhdGVkQ2VsbHMgPSBncmlkLmNlbGxzLm1hcCgoY2VsbDogQ2FsZW5kYXJDZWxsKTogRGVjb3JhdGVkQ2VsbCA9PiB7XG4gICAgICAvLyBQYWRkaW5nIGNlbGxzIChwcmV2aW91cy9uZXh0IG1vbnRoKSBnZXQgZGVmYXVsdCBkZWNvcmF0aW9uc1xuICAgICAgaWYgKCFjZWxsLmluQ3VycmVudE1vbnRoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY2VsbCxcbiAgICAgICAgICBpc1NlbGVjdGVkU3RhcnQ6IGZhbHNlLFxuICAgICAgICAgIGlzU2VsZWN0ZWRFbmQ6IGZhbHNlLFxuICAgICAgICAgIGlzSW5SYW5nZTogZmFsc2UsXG4gICAgICAgICAgaXNJbkhvdmVyUmFuZ2U6IGZhbHNlLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEN1cnJlbnQgbW9udGggY2VsbHM6IGFwcGx5IGZ1bGwgZGVjb3JhdGlvbiBsb2dpY1xuICAgICAgY29uc3QgY2VsbElTTyA9IGNlbGwuaXNvO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jZWxsLFxuICAgICAgICBpc1NlbGVjdGVkU3RhcnQ6IHN0YXJ0SVNPID09PSBjZWxsSVNPLFxuICAgICAgICBpc1NlbGVjdGVkRW5kOiBlbmRJU08gPT09IGNlbGxJU08sXG4gICAgICAgIGlzSW5SYW5nZTogdGhpcy5pc0luUmFuZ2UoY2VsbElTTywgc3RhcnRJU08sIGVuZElTTyksXG4gICAgICAgIGlzSW5Ib3ZlclJhbmdlOiB0aGlzLmlzSW5Ib3ZlclJhbmdlKGNlbGxJU08sIGhvdmVyUmFuZ2UpLFxuICAgICAgICBpc0Rpc2FibGVkOiB0aGlzLmlzRGlzYWJsZWQoY2VsbC5kYXRlLCBtaW5JU08sIG1heElTTywgcGFyYW1zLmRpc2FibGVkRGF0ZXMpXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gT3JnYW5pemUgY2VsbHMgaW50byB3ZWVrcyAoNiDDlyA3KVxuICAgIGNvbnN0IHdlZWtzOiBEZWNvcmF0ZWRDZWxsW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVjb3JhdGVkQ2VsbHMubGVuZ3RoOyBpICs9IDcpIHtcbiAgICAgIHdlZWtzLnB1c2goZGVjb3JhdGVkQ2VsbHMuc2xpY2UoaSwgaSArIDcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYmFzZTogZ3JpZCxcbiAgICAgIGNlbGxzOiBkZWNvcmF0ZWRDZWxscyxcbiAgICAgIHdlZWtzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjZWxsIGlzIHdpdGhpbiBzZWxlY3RlZCByYW5nZVxuICAgKiBcbiAgICogQHBhcmFtIGNlbGxJU08gQ2VsbCBkYXRlIChJU08gZm9ybWF0KVxuICAgKiBAcGFyYW0gc3RhcnRJU08gU3RhcnQgZGF0ZSAoSVNPIG9yIG51bGwpXG4gICAqIEBwYXJhbSBlbmRJU08gRW5kIGRhdGUgKElTTyBvciBudWxsKVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGNlbGwgaXMgaW4gcmFuZ2UgW3N0YXJ0LCBlbmRdIChpbmNsdXNpdmUpXG4gICAqL1xuICBwcml2YXRlIGlzSW5SYW5nZShcbiAgICBjZWxsSVNPOiBzdHJpbmcsXG4gICAgc3RhcnRJU086IHN0cmluZyB8IG51bGwsXG4gICAgZW5kSVNPOiBzdHJpbmcgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghc3RhcnRJU08gfHwgIWVuZElTTykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjZWxsSVNPID49IHN0YXJ0SVNPICYmIGNlbGxJU08gPD0gZW5kSVNPO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNlbGwgaXMgd2l0aGluIGhvdmVyIHByZXZpZXcgcmFuZ2VcbiAgICogXG4gICAqIEBwYXJhbSBjZWxsSVNPIENlbGwgZGF0ZSAoSVNPIGZvcm1hdClcbiAgICogQHBhcmFtIGhvdmVyUmFuZ2UgSG92ZXIgcmFuZ2UgYm91bmRhcmllcyAob3IgbnVsbClcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBjZWxsIGlzIGluIGhvdmVyIHJhbmdlXG4gICAqL1xuICBwcml2YXRlIGlzSW5Ib3ZlclJhbmdlKFxuICAgIGNlbGxJU086IHN0cmluZyxcbiAgICBob3ZlclJhbmdlOiB7IG1pbjogc3RyaW5nOyBtYXg6IHN0cmluZyB9IHwgbnVsbFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWhvdmVyUmFuZ2UpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY2VsbElTTyA+PSBob3ZlclJhbmdlLm1pbiAmJiBjZWxsSVNPIDw9IGhvdmVyUmFuZ2UubWF4O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNlbGwgaXMgZGlzYWJsZWRcbiAgICogXG4gICAqIEBwYXJhbSBkYXRlIENlbGwgZGF0ZSBvYmplY3RcbiAgICogQHBhcmFtIG1pbklTTyBNaW5pbXVtIGFsbG93ZWQgZGF0ZSAoSVNPIG9yIG51bGwpXG4gICAqIEBwYXJhbSBtYXhJU08gTWF4aW11bSBhbGxvd2VkIGRhdGUgKElTTyBvciBudWxsKVxuICAgKiBAcGFyYW0gZGlzYWJsZWREYXRlcyBEaXNhYmxlZCBkYXRlcyAoYXJyYXksIGZ1bmN0aW9uLCBvciBudWxsKVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGNlbGwgaXMgZGlzYWJsZWRcbiAgICovXG4gIHByaXZhdGUgaXNEaXNhYmxlZChcbiAgICBkYXRlOiBEYXRlLFxuICAgIG1pbklTTzogc3RyaW5nIHwgbnVsbCxcbiAgICBtYXhJU086IHN0cmluZyB8IG51bGwsXG4gICAgZGlzYWJsZWREYXRlcz86IERhdGVbXSB8ICgoZGF0ZTogRGF0ZSkgPT4gYm9vbGVhbikgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRhdGVJU08gPSB0aGlzLmFkYXB0ZXIudG9JU09EYXRlKGRhdGUpO1xuXG4gICAgLy8gQ2hlY2sgbWluL21heCBjb25zdHJhaW50c1xuICAgIGlmIChtaW5JU08gJiYgZGF0ZUlTTyA8IG1pbklTTykgcmV0dXJuIHRydWU7XG4gICAgaWYgKG1heElTTyAmJiBkYXRlSVNPID4gbWF4SVNPKSByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIENoZWNrIGRpc2FibGVkIGRhdGVzXG4gICAgaWYgKCFkaXNhYmxlZERhdGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIGRpc2FibGVkRGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEN1c3RvbSBwcmVkaWNhdGVcbiAgICAgIHJldHVybiBkaXNhYmxlZERhdGVzKGRhdGUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkaXNhYmxlZERhdGVzKSkge1xuICAgICAgLy8gQXJyYXkgb2YgZGlzYWJsZWQgZGF0ZXMgKGV4YWN0IGRheSBtYXRjaClcbiAgICAgIHJldHVybiBkaXNhYmxlZERhdGVzLnNvbWUoZGlzYWJsZWREYXRlID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRZZWFyKGRhdGUpID09PSB0aGlzLmFkYXB0ZXIuZ2V0WWVhcihkaXNhYmxlZERhdGUpICYmXG4gICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSkgPT09IHRoaXMuYWRhcHRlci5nZXRNb250aChkaXNhYmxlZERhdGUpICYmXG4gICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0RGF0ZShkYXRlKSA9PT0gdGhpcy5hZGFwdGVyLmdldERhdGUoZGlzYWJsZWREYXRlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGhvdmVyIHByZXZpZXcgcmFuZ2VcbiAgICogXG4gICAqIFdoZW4gdXNlciBob3ZlcnMgb3ZlciBhIGRhdGUgKGFuZCBub3Qgc2VsZWN0aW5nIHN0YXJ0KTpcbiAgICogLSBTaG93IHByZXZpZXcgcmFuZ2UgZnJvbSBzdGFydCB0byBob3ZlclxuICAgKiAtIFJhbmdlIGlzIGFsd2F5cyBbbWluLCBtYXhdIHdoZXJlIG1pbiA8PSBtYXhcbiAgICogXG4gICAqIEBwYXJhbSBzdGFydElTTyBDdXJyZW50IHN0YXJ0IGRhdGUgKElTTyBvciBudWxsKVxuICAgKiBAcGFyYW0gaG92ZXJJU08gSG92ZXJlZCBkYXRlIChJU08gb3IgbnVsbClcbiAgICogQHBhcmFtIHNlbGVjdGluZ1N0YXJ0IFRydWUgaWYgc2VsZWN0aW5nIHN0YXJ0IGRhdGUgKGhvdmVyIGRpc2FibGVkKVxuICAgKiBAcGFyYW0gbXVsdGlSYW5nZSBUcnVlIGlmIGluIG11bHRpLXJhbmdlIG1vZGVcbiAgICogQHJldHVybnMgSG92ZXIgcmFuZ2UgYm91bmRhcmllcyBvciBudWxsXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVIb3ZlclJhbmdlKFxuICAgIHN0YXJ0SVNPOiBzdHJpbmcgfCBudWxsLFxuICAgIGhvdmVySVNPOiBzdHJpbmcgfCBudWxsLFxuICAgIHNlbGVjdGluZ1N0YXJ0OiBib29sZWFuLFxuICAgIG11bHRpUmFuZ2U6IGJvb2xlYW5cbiAgKTogeyBtaW46IHN0cmluZzsgbWF4OiBzdHJpbmcgfSB8IG51bGwge1xuICAgIC8vIE5vIGhvdmVyIHByZXZpZXcgd2hlbiBzZWxlY3Rpbmcgc3RhcnRcbiAgICBpZiAoc2VsZWN0aW5nU3RhcnQgfHwgIWhvdmVySVNPIHx8ICFzdGFydElTTykgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBDb21wdXRlIG1pbi9tYXggKGFsd2F5cyBub3JtYWxpemVkIG9yZGVyKVxuICAgIGNvbnN0IG1pbiA9IHN0YXJ0SVNPIDwgaG92ZXJJU08gPyBzdGFydElTTyA6IGhvdmVySVNPO1xuICAgIGNvbnN0IG1heCA9IHN0YXJ0SVNPID4gaG92ZXJJU08gPyBzdGFydElTTyA6IGhvdmVySVNPO1xuXG4gICAgcmV0dXJuIHsgbWluLCBtYXggfTtcbiAgfVxufVxuIl19
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Range Highlighter Types
|
|
3
|
-
*
|
|
4
|
-
* Type definitions for calendar cell decorations with range highlighting.
|
|
5
|
-
* Used by RangeHighlighter to cache decorated grids and avoid recomputations.
|
|
6
|
-
*
|
|
7
|
-
* @module core/calendar-grid/range-highlighter.types
|
|
8
|
-
* @version 3.8.0
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtaGlnaGxpZ2h0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9jYWxlbmRhci1ncmlkL3JhbmdlLWhpZ2hsaWdodGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSYW5nZSBIaWdobGlnaHRlciBUeXBlc1xuICogXG4gKiBUeXBlIGRlZmluaXRpb25zIGZvciBjYWxlbmRhciBjZWxsIGRlY29yYXRpb25zIHdpdGggcmFuZ2UgaGlnaGxpZ2h0aW5nLlxuICogVXNlZCBieSBSYW5nZUhpZ2hsaWdodGVyIHRvIGNhY2hlIGRlY29yYXRlZCBncmlkcyBhbmQgYXZvaWQgcmVjb21wdXRhdGlvbnMuXG4gKiBcbiAqIEBtb2R1bGUgY29yZS9jYWxlbmRhci1ncmlkL3JhbmdlLWhpZ2hsaWdodGVyLnR5cGVzXG4gKiBAdmVyc2lvbiAzLjguMFxuICovXG5cbmltcG9ydCB7IENhbGVuZGFyQ2VsbCwgQ2FsZW5kYXJHcmlkIH0gZnJvbSAnLi9jYWxlbmRhci1ncmlkLnR5cGVzJztcblxuLyoqXG4gKiBDYWxlbmRhciBjZWxsIHdpdGggcmFuZ2UgaGlnaGxpZ2h0IGRlY29yYXRpb25zXG4gKiBcbiAqIEV4dGVuZHMgYmFzZSBDYWxlbmRhckNlbGwgd2l0aCBjb21wdXRlZCBwcm9wZXJ0aWVzIGZvcjpcbiAqIC0gU3RhcnQvZW5kIG1hcmtlcnMgKHNlbGVjdGVkIHJhbmdlIGJvdW5kYXJpZXMpXG4gKiAtIFJhbmdlIG1lbWJlcnNoaXAgKGNlbGwgd2l0aGluIHNlbGVjdGVkIHJhbmdlKVxuICogLSBIb3ZlciBwcmV2aWV3ICh0ZW1wb3JhcnkgcmFuZ2UgZHVyaW5nIG1vdXNlIGhvdmVyKVxuICogLSBEaXNhYmxlZCBzdGF0ZSAoY29uc3RyYWludHMsIGN1c3RvbSBwcmVkaWNhdGVzKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRlZENlbGwgZXh0ZW5kcyBDYWxlbmRhckNlbGwge1xuICAvKipcbiAgICogVHJ1ZSBpZiB0aGlzIGNlbGwgaXMgdGhlIHNlbGVjdGVkIHN0YXJ0IGRhdGVcbiAgICovXG4gIGlzU2VsZWN0ZWRTdGFydDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVHJ1ZSBpZiB0aGlzIGNlbGwgaXMgdGhlIHNlbGVjdGVkIGVuZCBkYXRlXG4gICAqL1xuICBpc1NlbGVjdGVkRW5kOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUcnVlIGlmIHRoaXMgY2VsbCBpcyB3aXRoaW4gdGhlIHNlbGVjdGVkIHJhbmdlIChpbmNsdXNpdmUpXG4gICAqL1xuICBpc0luUmFuZ2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRydWUgaWYgdGhpcyBjZWxsIGlzIHdpdGhpbiB0aGUgaG92ZXIgcHJldmlldyByYW5nZVxuICAgKi9cbiAgaXNJbkhvdmVyUmFuZ2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRydWUgaWYgdGhpcyBjZWxsIGlzIGRpc2FibGVkICh2aWEgY29uc3RyYWludHMgb3IgY3VzdG9tIGxvZ2ljKVxuICAgKi9cbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDYWxlbmRhciBncmlkIHdpdGggZGVjb3JhdGVkIGNlbGxzXG4gKiBcbiAqIENvbnRhaW5zOlxuICogLSBiYXNlOiBPcmlnaW5hbCBDYWxlbmRhckdyaWQgKGZyb20gQ2FsZW5kYXJHcmlkQ2FjaGUpXG4gKiAtIHdlZWtzOiAyRCBhcnJheSBvZiBkZWNvcmF0ZWQgY2VsbHMgKDYgw5cgNylcbiAqIC0gY2VsbHM6IEZsYXQgYXJyYXkgb2YgZGVjb3JhdGVkIGNlbGxzICg0MiBjZWxscylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWNvcmF0ZWRHcmlkIHtcbiAgLyoqXG4gICAqIEJhc2UgZ3JpZCBzdHJ1Y3R1cmUgKG1lbW9pemVkIGJ5IENhbGVuZGFyR3JpZENhY2hlKVxuICAgKi9cbiAgYmFzZTogQ2FsZW5kYXJHcmlkO1xuXG4gIC8qKlxuICAgKiBEZWNvcmF0ZWQgY2VsbHMgb3JnYW5pemVkIGFzIHdlZWtzICg2IHdlZWtzIMOXIDcgZGF5cylcbiAgICovXG4gIHdlZWtzOiBEZWNvcmF0ZWRDZWxsW11bXTtcblxuICAvKipcbiAgICogRGVjb3JhdGVkIGNlbGxzIGFzIGZsYXQgYXJyYXkgKDQyIGNlbGxzIGZvciBsYXlvdXQgc3RhYmlsaXR5KVxuICAgKi9cbiAgY2VsbHM6IERlY29yYXRlZENlbGxbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciByYW5nZSBkZWNvcmF0aW9uXG4gKiBcbiAqIEFsbCBkYXRlcyBtdXN0IGJlIERhdGUgb2JqZWN0cyAocHJlLXBhcnNlZCBieSBjb21wb25lbnQpLlxuICogQ2FjaGUga2V5IGlzIGJ1aWx0IGZyb20gSVNPIGRhdGVzICh2aWEgRGF0ZUFkYXB0ZXIudG9JU09EYXRlKS5cbiAqIFxuICogQ29uc3RyYWludHM6XG4gKiAtIHN0YXJ0L2VuZDogU2VsZWN0ZWQgcmFuZ2UgYm91bmRhcmllcyAobnVsbCBpZiBub3Qgc2VsZWN0ZWQpXG4gKiAtIG1pbkRhdGUvbWF4RGF0ZTogSGFyZCBjb25zdHJhaW50cyAob3B0aW9uYWwsIGZvciBmdXR1cmUgdXNlKVxuICogLSBob3ZlckRhdGU6IEN1cnJlbnQgaG92ZXIgZGF0ZSAobnVsbCBpZiBub3QgaG92ZXJpbmcpXG4gKiAtIGRpc2FibGVkRGF0ZXM6IEFycmF5IG9mIGRpc2FibGVkIGRhdGVzIE9SIGZ1bmN0aW9uIHByZWRpY2F0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlRGVjb3JhdGlvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBTZWxlY3RlZCBzdGFydCBkYXRlIChudWxsIGlmIG5vdCBzZWxlY3RlZCB5ZXQpXG4gICAqL1xuICBzdGFydDogRGF0ZSB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNlbGVjdGVkIGVuZCBkYXRlIChudWxsIGlmIG5vdCBzZWxlY3RlZCB5ZXQpXG4gICAqL1xuICBlbmQ6IERhdGUgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGFsbG93ZWQgZGF0ZSAob3B0aW9uYWwsIGZvciBmdXR1cmUgY29uc3RyYWludCBzdXBwb3J0KVxuICAgKiBBbGwgZGF0ZXMgYmVmb3JlIHRoaXMgd2lsbCBiZSBkaXNhYmxlZC5cbiAgICovXG4gIG1pbkRhdGU/OiBEYXRlIHwgbnVsbDtcblxuICAvKipcbiAgICogTWF4aW11bSBhbGxvd2VkIGRhdGUgKG9wdGlvbmFsLCBmb3IgZnV0dXJlIGNvbnN0cmFpbnQgc3VwcG9ydClcbiAgICogQWxsIGRhdGVzIGFmdGVyIHRoaXMgd2lsbCBiZSBkaXNhYmxlZC5cbiAgICovXG4gIG1heERhdGU/OiBEYXRlIHwgbnVsbDtcblxuICAvKipcbiAgICogQ3VycmVudCBob3ZlciBkYXRlIChudWxsIGlmIG5vdCBob3ZlcmluZylcbiAgICogVXNlZCB0byBjYWxjdWxhdGUgaG92ZXIgcHJldmlldyByYW5nZS5cbiAgICovXG4gIGhvdmVyRGF0ZT86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIERpc2FibGVkIGRhdGVzIHNwZWNpZmljYXRpb25cbiAgICogXG4gICAqIENhbiBiZSBvbmUgb2Y6XG4gICAqIC0gQXJyYXkgb2YgRGF0ZSBvYmplY3RzIHRvIGRpc2FibGUgKGV4YWN0IG1hdGNoZXMpXG4gICAqIC0gRnVuY3Rpb24gcHJlZGljYXRlIChkYXRlKSA9PiBib29sZWFuXG4gICAqIC0gdW5kZWZpbmVkL251bGwgKG5vIGRhdGVzIGRpc2FibGVkKVxuICAgKiBcbiAgICogTk9URTogRnVuY3Rpb25zIGNhbm5vdCBiZSBjYWNoZWQgcmVsaWFibHkgKG5vIHN0YWJsZSBrZXkpLlxuICAgKiBJZiB1c2luZyBmdW5jdGlvbiwgY2FjaGUgd2lsbCBiZSBieXBhc3NlZCBmb3IgaXNEaXNhYmxlZCBjb21wdXRhdGlvbi5cbiAgICovXG4gIGRpc2FibGVkRGF0ZXM/OiBEYXRlW10gfCAoKGRhdGU6IERhdGUpID0+IGJvb2xlYW4pIHwgbnVsbDtcblxuICAvKipcbiAgICogTXVsdGktcmFuZ2UgbW9kZSBmbGFnIChhZmZlY3RzIGhvdmVyIHJhbmdlIGJlaGF2aW9yKVxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgbXVsdGlSYW5nZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1cnJlbnRseSBzZWxlY3Rpbmcgc3RhcnQgZGF0ZSAoYWZmZWN0cyBob3ZlciBwcmV2aWV3KVxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgc2VsZWN0aW5nU3RhcnREYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDYWNoZSBrZXkgZm9yIGRlY29yYXRlZCBncmlkXG4gKiBcbiAqIEJ1aWx0IGZyb206XG4gKiAtIG1vbnRoS2V5OiBgJHt5ZWFyfS0ke21vbnRofS0ke3dlZWtTdGFydH0tJHtsb2NhbGV9YFxuICogLSBzdGFydElTTywgZW5kSVNPOiBJU08gZGF0ZXMgb3IgJ251bGwnXG4gKiAtIG1pbklTTywgbWF4SVNPOiBJU08gZGF0ZXMgb3IgJ251bGwnIChvcHRpb25hbClcbiAqIC0gaG92ZXJJU086IElTTyBkYXRlIG9yICdudWxsJ1xuICogLSBkaXNhYmxlZFNpZ25hdHVyZTogSGFzaCBvZiBkaXNhYmxlZCBkYXRlcyAob3IgJ25vbmUnIC8gJ2Z1bmN0aW9uJylcbiAqIFxuICogRXhhbXBsZTpcbiAqIFwiMjAyNi0xLTAtfDIwMjYtMDEtMTV8MjAyNi0wMS0yNXxudWxsfG51bGx8MjAyNi0wMS0yMHwyMDI2LTAxLTEwLDIwMjYtMDEtMTFcIlxuICogXG4gKiBTZWdtZW50IGJyZWFrZG93bjpcbiAqIDEuIDIwMjYtMS0wLSAobW9udGg6IEphbiAyMDI2LCB3ZWVrU3RhcnQ6IFN1bmRheSwgbm8gbG9jYWxlKVxuICogMi4gMjAyNi0wMS0xNSAoc3RhcnQgZGF0ZSlcbiAqIDMuIDIwMjYtMDEtMjUgKGVuZCBkYXRlKVxuICogNC4gbnVsbCAobm8gbWluRGF0ZSlcbiAqIDUuIG51bGwgKG5vIG1heERhdGUpXG4gKiA2LiAyMDI2LTAxLTIwIChob3ZlcmluZyBvdmVyIEphbiAyMClcbiAqIDcuIDIwMjYtMDEtMTAsMjAyNi0wMS0xMSAoZGlzYWJsZWQgZGF0ZXM6IEphbiAxMCAmIDExKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRlZEdyaWRDYWNoZUtleSB7XG4gIC8qKlxuICAgKiBDb21iaW5lZCBtb250aCBrZXkgKGZyb20gYmFzZSBncmlkKVxuICAgKi9cbiAgbW9udGhLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhcnQgZGF0ZSBJU08gKFlZWVktTU0tREQpIG9yICdudWxsJ1xuICAgKi9cbiAgc3RhcnRJU086IHN0cmluZztcblxuICAvKipcbiAgICogRW5kIGRhdGUgSVNPIChZWVlZLU1NLUREKSBvciAnbnVsbCdcbiAgICovXG4gIGVuZElTTzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNaW4gZGF0ZSBJU08gKFlZWVktTU0tREQpIG9yICdudWxsJ1xuICAgKi9cbiAgbWluSVNPOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1heCBkYXRlIElTTyAoWVlZWS1NTS1ERCkgb3IgJ251bGwnXG4gICAqL1xuICBtYXhJU086IHN0cmluZztcblxuICAvKipcbiAgICogSG92ZXIgZGF0ZSBJU08gKFlZWVktTU0tREQpIG9yICdudWxsJ1xuICAgKi9cbiAgaG92ZXJJU086IHN0cmluZztcblxuICAvKipcbiAgICogRGlzYWJsZWQgZGF0ZXMgc2lnbmF0dXJlXG4gICAqIFxuICAgKiAtICdub25lJzogTm8gZGF0ZXMgZGlzYWJsZWRcbiAgICogLSAnZnVuY3Rpb24nOiBVc2luZyBwcmVkaWNhdGUgZnVuY3Rpb24gKG5vdCBjYWNoZWFibGUpXG4gICAqIC0gc29ydGVkIElTTyBzdHJpbmc6IFwiMjAyNi0wMS0xMCwyMDI2LTAxLTExLC4uLlwiIChmb3IgYXJyYXkpXG4gICAqL1xuICBkaXNhYmxlZFNpZ25hdHVyZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGdWxsIGNhY2hlIGtleSAoY29uY2F0ZW5hdGlvbiBvZiBhbGwgc2VnbWVudHMpXG4gICAqL1xuICBmdWxsOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Virtual Weeks Logic (Pure Functions)
|
|
3
|
-
*
|
|
4
|
-
* Pure computation layer for windowed week rendering.
|
|
5
|
-
* No side effects, fully testable with node:test.
|
|
6
|
-
*
|
|
7
|
-
* @module core/calendar-grid/virtual-weeks.logic
|
|
8
|
-
* @version 3.9.0
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Get visible weeks from total weeks array
|
|
12
|
-
*
|
|
13
|
-
* Pure function: Given weeks array and window config, returns visible slice.
|
|
14
|
-
*
|
|
15
|
-
* @param weeks Total weeks array (usually 6 weeks)
|
|
16
|
-
* @param startIndex Start index of visible window (0-based)
|
|
17
|
-
* @param windowSize How many weeks to show
|
|
18
|
-
* @returns Visible weeks slice
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* const allWeeks = [week0, week1, week2, week3, week4, week5]; // 6 weeks
|
|
23
|
-
* const visible = getVisibleWeeks(allWeeks, 0, 3);
|
|
24
|
-
* // Returns [week0, week1, week2]
|
|
25
|
-
*
|
|
26
|
-
* const visible2 = getVisibleWeeks(allWeeks, 3, 3);
|
|
27
|
-
* // Returns [week3, week4, week5]
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export function getVisibleWeeks(weeks, startIndex, windowSize) {
|
|
31
|
-
if (!weeks || weeks.length === 0) {
|
|
32
|
-
return [];
|
|
33
|
-
}
|
|
34
|
-
// If no windowing (windowSize undefined or >= total weeks), return all
|
|
35
|
-
if (windowSize === undefined || windowSize >= weeks.length) {
|
|
36
|
-
return weeks;
|
|
37
|
-
}
|
|
38
|
-
// Clamp startIndex to valid range
|
|
39
|
-
const clampedStart = clampWeekStart(startIndex, weeks.length, windowSize);
|
|
40
|
-
// Return slice
|
|
41
|
-
return weeks.slice(clampedStart, clampedStart + windowSize);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Clamp week start index to valid range
|
|
45
|
-
*
|
|
46
|
-
* Ensures startIndex is within bounds [0, totalWeeks - windowSize].
|
|
47
|
-
* Prevents scrolling beyond available weeks.
|
|
48
|
-
*
|
|
49
|
-
* @param startIndex Desired start index
|
|
50
|
-
* @param totalWeeks Total weeks available
|
|
51
|
-
* @param windowSize Window size
|
|
52
|
-
* @returns Clamped start index
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
* ```typescript
|
|
56
|
-
* clampWeekStart(0, 6, 3); // 0 (valid)
|
|
57
|
-
* clampWeekStart(3, 6, 3); // 3 (valid, shows weeks 3-5)
|
|
58
|
-
* clampWeekStart(4, 6, 3); // 3 (clamped, can't show beyond week 5)
|
|
59
|
-
* clampWeekStart(-1, 6, 3); // 0 (clamped, can't go negative)
|
|
60
|
-
* ```
|
|
61
|
-
*/
|
|
62
|
-
export function clampWeekStart(startIndex, totalWeeks, windowSize) {
|
|
63
|
-
if (windowSize >= totalWeeks) {
|
|
64
|
-
return 0; // No windowing needed
|
|
65
|
-
}
|
|
66
|
-
const maxStart = totalWeeks - windowSize;
|
|
67
|
-
return Math.max(0, Math.min(startIndex, maxStart));
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Navigate week window (scroll up/down)
|
|
71
|
-
*
|
|
72
|
-
* Returns new start index after navigation.
|
|
73
|
-
* Handles clamping automatically.
|
|
74
|
-
*
|
|
75
|
-
* @param currentStart Current start index
|
|
76
|
-
* @param direction Navigation direction (+1 = down/later, -1 = up/earlier)
|
|
77
|
-
* @param totalWeeks Total weeks available
|
|
78
|
-
* @param windowSize Window size
|
|
79
|
-
* @returns New start index after navigation
|
|
80
|
-
*
|
|
81
|
-
* @example
|
|
82
|
-
* ```typescript
|
|
83
|
-
* // Start at week 0, navigate down
|
|
84
|
-
* navigateWeekWindow(0, 1, 6, 3); // Returns 1 (now showing weeks 1-3)
|
|
85
|
-
*
|
|
86
|
-
* // At week 3 (last valid position), navigate down
|
|
87
|
-
* navigateWeekWindow(3, 1, 6, 3); // Returns 3 (can't go further)
|
|
88
|
-
*
|
|
89
|
-
* // At week 1, navigate up
|
|
90
|
-
* navigateWeekWindow(1, -1, 6, 3); // Returns 0 (now showing weeks 0-2)
|
|
91
|
-
* ```
|
|
92
|
-
*/
|
|
93
|
-
export function navigateWeekWindow(currentStart, direction, totalWeeks, windowSize) {
|
|
94
|
-
const newStart = currentStart + direction;
|
|
95
|
-
return clampWeekStart(newStart, totalWeeks, windowSize);
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Get virtual week window state
|
|
99
|
-
*
|
|
100
|
-
* Computes full window state including navigation capabilities.
|
|
101
|
-
*
|
|
102
|
-
* @param startIndex Current start index
|
|
103
|
-
* @param totalWeeks Total weeks available
|
|
104
|
-
* @param windowSize Window size
|
|
105
|
-
* @returns Complete window state
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ```typescript
|
|
109
|
-
* const state = getVirtualWeekWindow(0, 6, 3);
|
|
110
|
-
* // {
|
|
111
|
-
* // startIndex: 0,
|
|
112
|
-
* // windowSize: 3,
|
|
113
|
-
* // totalWeeks: 6,
|
|
114
|
-
* // canNavigateUp: false, // Already at top
|
|
115
|
-
* // canNavigateDown: true // Can scroll down
|
|
116
|
-
* // }
|
|
117
|
-
*
|
|
118
|
-
* const state2 = getVirtualWeekWindow(3, 6, 3);
|
|
119
|
-
* // {
|
|
120
|
-
* // startIndex: 3,
|
|
121
|
-
* // windowSize: 3,
|
|
122
|
-
* // totalWeeks: 6,
|
|
123
|
-
* // canNavigateUp: true, // Can scroll up
|
|
124
|
-
* // canNavigateDown: false // Already at bottom
|
|
125
|
-
* // }
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
export function getVirtualWeekWindow(startIndex, totalWeeks, windowSize) {
|
|
129
|
-
const clampedStart = clampWeekStart(startIndex, totalWeeks, windowSize);
|
|
130
|
-
const maxStart = Math.max(0, totalWeeks - windowSize);
|
|
131
|
-
return {
|
|
132
|
-
startIndex: clampedStart,
|
|
133
|
-
windowSize,
|
|
134
|
-
totalWeeks,
|
|
135
|
-
canNavigateUp: clampedStart > 0,
|
|
136
|
-
canNavigateDown: clampedStart < maxStart
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Check if virtual weeks mode is enabled
|
|
141
|
-
*
|
|
142
|
-
* @param windowSize Window size from config (undefined = disabled)
|
|
143
|
-
* @param totalWeeks Total weeks available
|
|
144
|
-
* @returns True if windowing should be applied
|
|
145
|
-
*/
|
|
146
|
-
export function isVirtualWeeksEnabled(windowSize, totalWeeks) {
|
|
147
|
-
return windowSize !== undefined && windowSize < totalWeeks;
|
|
148
|
-
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC13ZWVrcy5sb2dpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2NhbGVuZGFyLWdyaWQvdmlydHVhbC13ZWVrcy5sb2dpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUlIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBVSxFQUNWLFVBQWtCLEVBQ2xCLFVBQWtCO0lBRWxCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUxRSxlQUFlO0lBQ2YsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixVQUFrQixFQUNsQixVQUFrQixFQUNsQixVQUFrQjtJQUVsQixJQUFJLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtJQUNsQyxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUN6QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsWUFBb0IsRUFDcEIsU0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsVUFBa0I7SUFFbEIsTUFBTSxRQUFRLEdBQUcsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUMxQyxPQUFPLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxVQUFrQixFQUNsQixVQUFrQixFQUNsQixVQUFrQjtJQUVsQixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFFdEQsT0FBTztRQUNMLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFVBQVU7UUFDVixVQUFVO1FBQ1YsYUFBYSxFQUFFLFlBQVksR0FBRyxDQUFDO1FBQy9CLGVBQWUsRUFBRSxZQUFZLEdBQUcsUUFBUTtLQUN6QyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsVUFBOEIsRUFDOUIsVUFBa0I7SUFFbEIsT0FBTyxVQUFVLEtBQUssU0FBUyxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmlydHVhbCBXZWVrcyBMb2dpYyAoUHVyZSBGdW5jdGlvbnMpXG4gKiBcbiAqIFB1cmUgY29tcHV0YXRpb24gbGF5ZXIgZm9yIHdpbmRvd2VkIHdlZWsgcmVuZGVyaW5nLlxuICogTm8gc2lkZSBlZmZlY3RzLCBmdWxseSB0ZXN0YWJsZSB3aXRoIG5vZGU6dGVzdC5cbiAqIFxuICogQG1vZHVsZSBjb3JlL2NhbGVuZGFyLWdyaWQvdmlydHVhbC13ZWVrcy5sb2dpY1xuICogQHZlcnNpb24gMy45LjBcbiAqL1xuXG5pbXBvcnQgeyBWaXJ0dWFsV2Vla1dpbmRvdyB9IGZyb20gJy4vdmlydHVhbC13ZWVrcy50eXBlcyc7XG5cbi8qKlxuICogR2V0IHZpc2libGUgd2Vla3MgZnJvbSB0b3RhbCB3ZWVrcyBhcnJheVxuICogXG4gKiBQdXJlIGZ1bmN0aW9uOiBHaXZlbiB3ZWVrcyBhcnJheSBhbmQgd2luZG93IGNvbmZpZywgcmV0dXJucyB2aXNpYmxlIHNsaWNlLlxuICogXG4gKiBAcGFyYW0gd2Vla3MgVG90YWwgd2Vla3MgYXJyYXkgKHVzdWFsbHkgNiB3ZWVrcylcbiAqIEBwYXJhbSBzdGFydEluZGV4IFN0YXJ0IGluZGV4IG9mIHZpc2libGUgd2luZG93ICgwLWJhc2VkKVxuICogQHBhcmFtIHdpbmRvd1NpemUgSG93IG1hbnkgd2Vla3MgdG8gc2hvd1xuICogQHJldHVybnMgVmlzaWJsZSB3ZWVrcyBzbGljZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYWxsV2Vla3MgPSBbd2VlazAsIHdlZWsxLCB3ZWVrMiwgd2VlazMsIHdlZWs0LCB3ZWVrNV07IC8vIDYgd2Vla3NcbiAqIGNvbnN0IHZpc2libGUgPSBnZXRWaXNpYmxlV2Vla3MoYWxsV2Vla3MsIDAsIDMpO1xuICogLy8gUmV0dXJucyBbd2VlazAsIHdlZWsxLCB3ZWVrMl1cbiAqIFxuICogY29uc3QgdmlzaWJsZTIgPSBnZXRWaXNpYmxlV2Vla3MoYWxsV2Vla3MsIDMsIDMpO1xuICogLy8gUmV0dXJucyBbd2VlazMsIHdlZWs0LCB3ZWVrNV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZVdlZWtzPFQ+KFxuICB3ZWVrczogVFtdLFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIHdpbmRvd1NpemU6IG51bWJlclxuKTogVFtdIHtcbiAgaWYgKCF3ZWVrcyB8fCB3ZWVrcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBJZiBubyB3aW5kb3dpbmcgKHdpbmRvd1NpemUgdW5kZWZpbmVkIG9yID49IHRvdGFsIHdlZWtzKSwgcmV0dXJuIGFsbFxuICBpZiAod2luZG93U2l6ZSA9PT0gdW5kZWZpbmVkIHx8IHdpbmRvd1NpemUgPj0gd2Vla3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHdlZWtzO1xuICB9XG5cbiAgLy8gQ2xhbXAgc3RhcnRJbmRleCB0byB2YWxpZCByYW5nZVxuICBjb25zdCBjbGFtcGVkU3RhcnQgPSBjbGFtcFdlZWtTdGFydChzdGFydEluZGV4LCB3ZWVrcy5sZW5ndGgsIHdpbmRvd1NpemUpO1xuXG4gIC8vIFJldHVybiBzbGljZVxuICByZXR1cm4gd2Vla3Muc2xpY2UoY2xhbXBlZFN0YXJ0LCBjbGFtcGVkU3RhcnQgKyB3aW5kb3dTaXplKTtcbn1cblxuLyoqXG4gKiBDbGFtcCB3ZWVrIHN0YXJ0IGluZGV4IHRvIHZhbGlkIHJhbmdlXG4gKiBcbiAqIEVuc3VyZXMgc3RhcnRJbmRleCBpcyB3aXRoaW4gYm91bmRzIFswLCB0b3RhbFdlZWtzIC0gd2luZG93U2l6ZV0uXG4gKiBQcmV2ZW50cyBzY3JvbGxpbmcgYmV5b25kIGF2YWlsYWJsZSB3ZWVrcy5cbiAqIFxuICogQHBhcmFtIHN0YXJ0SW5kZXggRGVzaXJlZCBzdGFydCBpbmRleFxuICogQHBhcmFtIHRvdGFsV2Vla3MgVG90YWwgd2Vla3MgYXZhaWxhYmxlXG4gKiBAcGFyYW0gd2luZG93U2l6ZSBXaW5kb3cgc2l6ZVxuICogQHJldHVybnMgQ2xhbXBlZCBzdGFydCBpbmRleFxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhbXBXZWVrU3RhcnQoMCwgNiwgMyk7IC8vIDAgKHZhbGlkKVxuICogY2xhbXBXZWVrU3RhcnQoMywgNiwgMyk7IC8vIDMgKHZhbGlkLCBzaG93cyB3ZWVrcyAzLTUpXG4gKiBjbGFtcFdlZWtTdGFydCg0LCA2LCAzKTsgLy8gMyAoY2xhbXBlZCwgY2FuJ3Qgc2hvdyBiZXlvbmQgd2VlayA1KVxuICogY2xhbXBXZWVrU3RhcnQoLTEsIDYsIDMpOyAvLyAwIChjbGFtcGVkLCBjYW4ndCBnbyBuZWdhdGl2ZSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBXZWVrU3RhcnQoXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgdG90YWxXZWVrczogbnVtYmVyLFxuICB3aW5kb3dTaXplOiBudW1iZXJcbik6IG51bWJlciB7XG4gIGlmICh3aW5kb3dTaXplID49IHRvdGFsV2Vla3MpIHtcbiAgICByZXR1cm4gMDsgLy8gTm8gd2luZG93aW5nIG5lZWRlZFxuICB9XG5cbiAgY29uc3QgbWF4U3RhcnQgPSB0b3RhbFdlZWtzIC0gd2luZG93U2l6ZTtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHN0YXJ0SW5kZXgsIG1heFN0YXJ0KSk7XG59XG5cbi8qKlxuICogTmF2aWdhdGUgd2VlayB3aW5kb3cgKHNjcm9sbCB1cC9kb3duKVxuICogXG4gKiBSZXR1cm5zIG5ldyBzdGFydCBpbmRleCBhZnRlciBuYXZpZ2F0aW9uLlxuICogSGFuZGxlcyBjbGFtcGluZyBhdXRvbWF0aWNhbGx5LlxuICogXG4gKiBAcGFyYW0gY3VycmVudFN0YXJ0IEN1cnJlbnQgc3RhcnQgaW5kZXhcbiAqIEBwYXJhbSBkaXJlY3Rpb24gTmF2aWdhdGlvbiBkaXJlY3Rpb24gKCsxID0gZG93bi9sYXRlciwgLTEgPSB1cC9lYXJsaWVyKVxuICogQHBhcmFtIHRvdGFsV2Vla3MgVG90YWwgd2Vla3MgYXZhaWxhYmxlXG4gKiBAcGFyYW0gd2luZG93U2l6ZSBXaW5kb3cgc2l6ZVxuICogQHJldHVybnMgTmV3IHN0YXJ0IGluZGV4IGFmdGVyIG5hdmlnYXRpb25cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFN0YXJ0IGF0IHdlZWsgMCwgbmF2aWdhdGUgZG93blxuICogbmF2aWdhdGVXZWVrV2luZG93KDAsIDEsIDYsIDMpOyAvLyBSZXR1cm5zIDEgKG5vdyBzaG93aW5nIHdlZWtzIDEtMylcbiAqIFxuICogLy8gQXQgd2VlayAzIChsYXN0IHZhbGlkIHBvc2l0aW9uKSwgbmF2aWdhdGUgZG93blxuICogbmF2aWdhdGVXZWVrV2luZG93KDMsIDEsIDYsIDMpOyAvLyBSZXR1cm5zIDMgKGNhbid0IGdvIGZ1cnRoZXIpXG4gKiBcbiAqIC8vIEF0IHdlZWsgMSwgbmF2aWdhdGUgdXBcbiAqIG5hdmlnYXRlV2Vla1dpbmRvdygxLCAtMSwgNiwgMyk7IC8vIFJldHVybnMgMCAobm93IHNob3dpbmcgd2Vla3MgMC0yKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXZpZ2F0ZVdlZWtXaW5kb3coXG4gIGN1cnJlbnRTdGFydDogbnVtYmVyLFxuICBkaXJlY3Rpb246IG51bWJlcixcbiAgdG90YWxXZWVrczogbnVtYmVyLFxuICB3aW5kb3dTaXplOiBudW1iZXJcbik6IG51bWJlciB7XG4gIGNvbnN0IG5ld1N0YXJ0ID0gY3VycmVudFN0YXJ0ICsgZGlyZWN0aW9uO1xuICByZXR1cm4gY2xhbXBXZWVrU3RhcnQobmV3U3RhcnQsIHRvdGFsV2Vla3MsIHdpbmRvd1NpemUpO1xufVxuXG4vKipcbiAqIEdldCB2aXJ0dWFsIHdlZWsgd2luZG93IHN0YXRlXG4gKiBcbiAqIENvbXB1dGVzIGZ1bGwgd2luZG93IHN0YXRlIGluY2x1ZGluZyBuYXZpZ2F0aW9uIGNhcGFiaWxpdGllcy5cbiAqIFxuICogQHBhcmFtIHN0YXJ0SW5kZXggQ3VycmVudCBzdGFydCBpbmRleFxuICogQHBhcmFtIHRvdGFsV2Vla3MgVG90YWwgd2Vla3MgYXZhaWxhYmxlXG4gKiBAcGFyYW0gd2luZG93U2l6ZSBXaW5kb3cgc2l6ZVxuICogQHJldHVybnMgQ29tcGxldGUgd2luZG93IHN0YXRlXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGF0ZSA9IGdldFZpcnR1YWxXZWVrV2luZG93KDAsIDYsIDMpO1xuICogLy8ge1xuICogLy8gICBzdGFydEluZGV4OiAwLFxuICogLy8gICB3aW5kb3dTaXplOiAzLFxuICogLy8gICB0b3RhbFdlZWtzOiA2LFxuICogLy8gICBjYW5OYXZpZ2F0ZVVwOiBmYWxzZSwgICAgLy8gQWxyZWFkeSBhdCB0b3BcbiAqIC8vICAgY2FuTmF2aWdhdGVEb3duOiB0cnVlICAgIC8vIENhbiBzY3JvbGwgZG93blxuICogLy8gfVxuICogXG4gKiBjb25zdCBzdGF0ZTIgPSBnZXRWaXJ0dWFsV2Vla1dpbmRvdygzLCA2LCAzKTtcbiAqIC8vIHtcbiAqIC8vICAgc3RhcnRJbmRleDogMyxcbiAqIC8vICAgd2luZG93U2l6ZTogMyxcbiAqIC8vICAgdG90YWxXZWVrczogNixcbiAqIC8vICAgY2FuTmF2aWdhdGVVcDogdHJ1ZSwgICAgIC8vIENhbiBzY3JvbGwgdXBcbiAqIC8vICAgY2FuTmF2aWdhdGVEb3duOiBmYWxzZSAgIC8vIEFscmVhZHkgYXQgYm90dG9tXG4gKiAvLyB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpcnR1YWxXZWVrV2luZG93KFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIHRvdGFsV2Vla3M6IG51bWJlcixcbiAgd2luZG93U2l6ZTogbnVtYmVyXG4pOiBWaXJ0dWFsV2Vla1dpbmRvdyB7XG4gIGNvbnN0IGNsYW1wZWRTdGFydCA9IGNsYW1wV2Vla1N0YXJ0KHN0YXJ0SW5kZXgsIHRvdGFsV2Vla3MsIHdpbmRvd1NpemUpO1xuICBjb25zdCBtYXhTdGFydCA9IE1hdGgubWF4KDAsIHRvdGFsV2Vla3MgLSB3aW5kb3dTaXplKTtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0SW5kZXg6IGNsYW1wZWRTdGFydCxcbiAgICB3aW5kb3dTaXplLFxuICAgIHRvdGFsV2Vla3MsXG4gICAgY2FuTmF2aWdhdGVVcDogY2xhbXBlZFN0YXJ0ID4gMCxcbiAgICBjYW5OYXZpZ2F0ZURvd246IGNsYW1wZWRTdGFydCA8IG1heFN0YXJ0XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmlydHVhbCB3ZWVrcyBtb2RlIGlzIGVuYWJsZWRcbiAqIFxuICogQHBhcmFtIHdpbmRvd1NpemUgV2luZG93IHNpemUgZnJvbSBjb25maWcgKHVuZGVmaW5lZCA9IGRpc2FibGVkKVxuICogQHBhcmFtIHRvdGFsV2Vla3MgVG90YWwgd2Vla3MgYXZhaWxhYmxlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHdpbmRvd2luZyBzaG91bGQgYmUgYXBwbGllZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWaXJ0dWFsV2Vla3NFbmFibGVkKFxuICB3aW5kb3dTaXplOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHRvdGFsV2Vla3M6IG51bWJlclxuKTogYm9vbGVhbiB7XG4gIHJldHVybiB3aW5kb3dTaXplICE9PSB1bmRlZmluZWQgJiYgd2luZG93U2l6ZSA8IHRvdGFsV2Vla3M7XG59XG4iXX0=
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Virtual Weeks Types
|
|
3
|
-
*
|
|
4
|
-
* Type definitions for windowed week rendering (virtual scrolling).
|
|
5
|
-
* Reduces DOM nodes by rendering only visible weeks instead of full month.
|
|
6
|
-
*
|
|
7
|
-
* @module core/calendar-grid/virtual-weeks.types
|
|
8
|
-
* @version 3.9.0
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC13ZWVrcy50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2NhbGVuZGFyLWdyaWQvdmlydHVhbC13ZWVrcy50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmlydHVhbCBXZWVrcyBUeXBlc1xuICogXG4gKiBUeXBlIGRlZmluaXRpb25zIGZvciB3aW5kb3dlZCB3ZWVrIHJlbmRlcmluZyAodmlydHVhbCBzY3JvbGxpbmcpLlxuICogUmVkdWNlcyBET00gbm9kZXMgYnkgcmVuZGVyaW5nIG9ubHkgdmlzaWJsZSB3ZWVrcyBpbnN0ZWFkIG9mIGZ1bGwgbW9udGguXG4gKiBcbiAqIEBtb2R1bGUgY29yZS9jYWxlbmRhci1ncmlkL3ZpcnR1YWwtd2Vla3MudHlwZXNcbiAqIEB2ZXJzaW9uIDMuOS4wXG4gKi9cblxuLyoqXG4gKiBWaXJ0dWFsIHdlZWtzIGNvbmZpZ3VyYXRpb25cbiAqIFxuICogQ29udHJvbHMgaG93IG1hbnkgd2Vla3MgdG8gcmVuZGVyIGF0IG9uY2UgKHdpbmRvd2VkIHJlbmRlcmluZykuXG4gKiBSZWR1Y2VzIERPTSBjb21wbGV4aXR5IGZvciBiZXR0ZXIgbW9iaWxlIHBlcmZvcm1hbmNlLlxuICogXG4gKiBFeGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogPG5neC1kdWFsLWRhdGVwaWNrZXJcbiAqICAgW3ZpcnR1YWxXZWVrc109XCJ7IHdpbmRvd1NpemU6IDMgfVwiXG4gKiA8L25neC1kdWFsLWRhdGVwaWNrZXI+XG4gKiBgYGBcbiAqIFxuICogV2l0aCB3aW5kb3dTaXplPTM6XG4gKiAtIFJlbmRlcnMgb25seSAzIHdlZWtzIGF0IGEgdGltZSAoMjEgY2VsbHMgdnMgNDIgY2VsbHMpXG4gKiAtIFVzZXIgY2FuIG5hdmlnYXRlIGJldHdlZW4gd2VlayB3aW5kb3dzXG4gKiAtIH41MCUgcmVkdWN0aW9uIGluIERPTSBub2RlcyBwZXIgY2FsZW5kYXJcbiAqIC0gfjUwJSByZWR1Y3Rpb24gaW4gcmVmbG93L3JlcGFpbnQgY29zdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpcnR1YWxXZWVrc0NvbmZpZyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygd2Vla3MgdG8gcmVuZGVyIGF0IG9uY2VcbiAgICogXG4gICAqIERlZmF1bHQ6IHVuZGVmaW5lZCAocmVuZGVyIGFsbCA2IHdlZWtzIC0gYmFja3dhcmQgY29tcGF0aWJsZSlcbiAgICogXG4gICAqIFJlY29tbWVuZGVkIHZhbHVlczpcbiAgICogLSAzOiBHb29kIGJhbGFuY2UgKDIxIGNlbGxzKVxuICAgKiAtIDQ6IE1vcmUgY29udGV4dCAoMjggY2VsbHMpXG4gICAqIC0gMjogTWluaW1hbCAoMTQgY2VsbHMsIG1heSBmZWVsIGNyYW1wZWQpXG4gICAqL1xuICB3aW5kb3dTaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogVmlydHVhbCB3ZWVrIHdpbmRvdyBzdGF0ZVxuICogXG4gKiBUcmFja3Mgd2hpY2ggd2Vla3MgYXJlIGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSB3aW5kb3cuXG4gKiBNYW5hZ2VkIGJ5IGNvbXBvbmVudCBzaWduYWxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpcnR1YWxXZWVrV2luZG93IHtcbiAgLyoqXG4gICAqIFN0YXJ0IGluZGV4IG9mIHZpc2libGUgd2VlayByYW5nZSAoMC1iYXNlZClcbiAgICogXG4gICAqIFJhbmdlOiBbMCwgdG90YWxXZWVrcyAtIHdpbmRvd1NpemVdXG4gICAqL1xuICBzdGFydEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdpbmRvdyBzaXplIChob3cgbWFueSB3ZWVrcyB2aXNpYmxlKVxuICAgKi9cbiAgd2luZG93U2l6ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUb3RhbCB3ZWVrcyBhdmFpbGFibGUgaW4gbW9udGggKHVzdWFsbHkgNiwgc29tZXRpbWVzIDUpXG4gICAqL1xuICB0b3RhbFdlZWtzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdXNlciBjYW4gc2Nyb2xsL25hdmlnYXRlIHVwICh0byBlYXJsaWVyIHdlZWtzKVxuICAgKi9cbiAgY2FuTmF2aWdhdGVVcDogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB1c2VyIGNhbiBzY3JvbGwvbmF2aWdhdGUgZG93biAodG8gbGF0ZXIgd2Vla3MpXG4gICAqL1xuICBjYW5OYXZpZ2F0ZURvd246IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Date Adapter Abstraction for Timezone-Safe Date Operations
|
|
3
|
-
*
|
|
4
|
-
* Problem:
|
|
5
|
-
* Using Date natively in calendar/range logic causes enterprise bugs:
|
|
6
|
-
* - Date ranges shift by 1 day due to timezone/DST
|
|
7
|
-
* - Server (UTC) vs Client (local timezone) discrepancies
|
|
8
|
-
* - Inconsistent reporting in BI/ERP/invoicing/hotel systems
|
|
9
|
-
*
|
|
10
|
-
* Solution:
|
|
11
|
-
* All date calculations go through an adapter layer.
|
|
12
|
-
* This allows:
|
|
13
|
-
* - Timezone-safe operations by default (NativeDateAdapter normalizes to day boundaries)
|
|
14
|
-
* - Optional integration with Luxon/DayJS/date-fns for advanced timezone handling
|
|
15
|
-
* - Consistent behavior across SSR and client
|
|
16
|
-
* - Migration path to timezone-aware libraries without breaking changes
|
|
17
|
-
*
|
|
18
|
-
* Architecture:
|
|
19
|
-
* ```
|
|
20
|
-
* DualDateRangeStore
|
|
21
|
-
* ↓ uses
|
|
22
|
-
* DateAdapter ← Inject via DATE_ADAPTER token
|
|
23
|
-
* ↓ implements
|
|
24
|
-
* NativeDateAdapter (default, zero deps)
|
|
25
|
-
* LuxonDateAdapter (optional, full timezone support)
|
|
26
|
-
* DayJSDateAdapter (optional, lightweight)
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* Usage:
|
|
30
|
-
* ```typescript
|
|
31
|
-
* // Default (NativeDateAdapter)
|
|
32
|
-
* bootstrapApplication(AppComponent);
|
|
33
|
-
*
|
|
34
|
-
* // Advanced (Luxon with timezone)
|
|
35
|
-
* import { LuxonDateAdapter } from '@oneluiz/dual-datepicker/luxon';
|
|
36
|
-
*
|
|
37
|
-
* bootstrapApplication(AppComponent, {
|
|
38
|
-
* providers: [
|
|
39
|
-
* { provide: DATE_ADAPTER, useClass: LuxonDateAdapter }
|
|
40
|
-
* ]
|
|
41
|
-
* });
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
import { InjectionToken } from '@angular/core';
|
|
45
|
-
/**
|
|
46
|
-
* Injection token for DateAdapter
|
|
47
|
-
*
|
|
48
|
-
* Default: NativeDateAdapter (zero dependencies)
|
|
49
|
-
*
|
|
50
|
-
* Override for advanced timezone handling:
|
|
51
|
-
*
|
|
52
|
-
* ```typescript
|
|
53
|
-
* // Luxon with timezone
|
|
54
|
-
* import { LuxonDateAdapter } from '@oneluiz/dual-datepicker/luxon';
|
|
55
|
-
*
|
|
56
|
-
* bootstrapApplication(AppComponent, {
|
|
57
|
-
* providers: [
|
|
58
|
-
* {
|
|
59
|
-
* provide: DATE_ADAPTER,
|
|
60
|
-
* useClass: LuxonDateAdapter
|
|
61
|
-
* }
|
|
62
|
-
* ]
|
|
63
|
-
* });
|
|
64
|
-
* ```
|
|
65
|
-
*
|
|
66
|
-
* Custom implementation:
|
|
67
|
-
*
|
|
68
|
-
* ```typescript
|
|
69
|
-
* class CustomDateAdapter implements DateAdapter {
|
|
70
|
-
* // Your implementation for backend-specific date handling
|
|
71
|
-
* }
|
|
72
|
-
*
|
|
73
|
-
* provide(DATE_ADAPTER, { useClass: CustomDateAdapter });
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
export const DATE_ADAPTER = new InjectionToken('DATE_ADAPTER');
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvZGF0ZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBaVAvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFjLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRlIEFkYXB0ZXIgQWJzdHJhY3Rpb24gZm9yIFRpbWV6b25lLVNhZmUgRGF0ZSBPcGVyYXRpb25zXG4gKiBcbiAqIFByb2JsZW06XG4gKiBVc2luZyBEYXRlIG5hdGl2ZWx5IGluIGNhbGVuZGFyL3JhbmdlIGxvZ2ljIGNhdXNlcyBlbnRlcnByaXNlIGJ1Z3M6XG4gKiAtIERhdGUgcmFuZ2VzIHNoaWZ0IGJ5IDEgZGF5IGR1ZSB0byB0aW1lem9uZS9EU1RcbiAqIC0gU2VydmVyIChVVEMpIHZzIENsaWVudCAobG9jYWwgdGltZXpvbmUpIGRpc2NyZXBhbmNpZXNcbiAqIC0gSW5jb25zaXN0ZW50IHJlcG9ydGluZyBpbiBCSS9FUlAvaW52b2ljaW5nL2hvdGVsIHN5c3RlbXNcbiAqIFxuICogU29sdXRpb246XG4gKiBBbGwgZGF0ZSBjYWxjdWxhdGlvbnMgZ28gdGhyb3VnaCBhbiBhZGFwdGVyIGxheWVyLlxuICogVGhpcyBhbGxvd3M6XG4gKiAtIFRpbWV6b25lLXNhZmUgb3BlcmF0aW9ucyBieSBkZWZhdWx0IChOYXRpdmVEYXRlQWRhcHRlciBub3JtYWxpemVzIHRvIGRheSBib3VuZGFyaWVzKVxuICogLSBPcHRpb25hbCBpbnRlZ3JhdGlvbiB3aXRoIEx1eG9uL0RheUpTL2RhdGUtZm5zIGZvciBhZHZhbmNlZCB0aW1lem9uZSBoYW5kbGluZ1xuICogLSBDb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBTU1IgYW5kIGNsaWVudFxuICogLSBNaWdyYXRpb24gcGF0aCB0byB0aW1lem9uZS1hd2FyZSBsaWJyYXJpZXMgd2l0aG91dCBicmVha2luZyBjaGFuZ2VzXG4gKiBcbiAqIEFyY2hpdGVjdHVyZTpcbiAqIGBgYFxuICogRHVhbERhdGVSYW5nZVN0b3JlXG4gKiAgICAg4oaTIHVzZXNcbiAqIERhdGVBZGFwdGVyIOKGkCBJbmplY3QgdmlhIERBVEVfQURBUFRFUiB0b2tlblxuICogICAgIOKGkyBpbXBsZW1lbnRzXG4gKiBOYXRpdmVEYXRlQWRhcHRlciAoZGVmYXVsdCwgemVybyBkZXBzKVxuICogTHV4b25EYXRlQWRhcHRlciAob3B0aW9uYWwsIGZ1bGwgdGltZXpvbmUgc3VwcG9ydClcbiAqIERheUpTRGF0ZUFkYXB0ZXIgKG9wdGlvbmFsLCBsaWdodHdlaWdodClcbiAqIGBgYFxuICogXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlZmF1bHQgKE5hdGl2ZURhdGVBZGFwdGVyKVxuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50KTtcbiAqIFxuICogLy8gQWR2YW5jZWQgKEx1eG9uIHdpdGggdGltZXpvbmUpXG4gKiBpbXBvcnQgeyBMdXhvbkRhdGVBZGFwdGVyIH0gZnJvbSAnQG9uZWx1aXovZHVhbC1kYXRlcGlja2VyL2x1eG9uJztcbiAqIFxuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCB7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHsgcHJvdmlkZTogREFURV9BREFQVEVSLCB1c2VDbGFzczogTHV4b25EYXRlQWRhcHRlciB9XG4gKiAgIF1cbiAqIH0pO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEYXRlIGFkYXB0ZXIgaW50ZXJmYWNlIGZvciBhbGwgY2FsZW5kYXIvcmFuZ2Ugb3BlcmF0aW9uc1xuICogXG4gKiBBbGwgbWV0aG9kcyBvcGVyYXRlIG9uIFwiY2FsZW5kYXIgZGF5XCIgbGV2ZWwsIGlnbm9yaW5nIHRpbWUgY29tcG9uZW50cy5cbiAqIEltcGxlbWVudGF0aW9ucyBtdXN0IGVuc3VyZSB0aW1lem9uZS1zYWZlIGJlaGF2aW9yLlxuICogXG4gKiBJbXBsZW1lbnRhdGlvbnM6XG4gKiAtIE5hdGl2ZURhdGVBZGFwdGVyOiBEZWZhdWx0LCB6ZXJvIGRlcGVuZGVuY2llcywgdXNlcyBEYXRlIHdpdGggbm9ybWFsaXphdGlvblxuICogLSBMdXhvbkRhdGVBZGFwdGVyOiBPcHRpb25hbCwgZnVsbCB0aW1lem9uZSBzdXBwb3J0IHdpdGggTHV4b25cbiAqIC0gRGF5SlNEYXRlQWRhcHRlcjogT3B0aW9uYWwsIGxpZ2h0d2VpZ2h0IHRpbWV6b25lIHN1cHBvcnRcbiAqIC0gQ3VzdG9tOiBJbXBsZW1lbnQgZm9yIHlvdXIgc3BlY2lmaWMgYmFja2VuZC90aW1lem9uZSByZXF1aXJlbWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRlQWRhcHRlciB7XG4gIC8qKlxuICAgKiBOb3JtYWxpemUgZGF0ZSB0byBzdGFydCBvZiBkYXkgKDAwOjAwOjAwLjAwMClcbiAgICogXG4gICAqIENyaXRpY2FsIGZvciB0aW1lem9uZS1zYWZlIGNvbXBhcmlzb25zLlxuICAgKiBcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkYXRlID0gbmV3IERhdGUoJzIwMjYtMDItMjFUMTU6MzA6MDAnKTtcbiAgICogY29uc3Qgbm9ybWFsaXplZCA9IGFkYXB0ZXIubm9ybWFsaXplKGRhdGUpO1xuICAgKiAvLyDihpIgMjAyNi0wMi0yMVQwMDowMDowMC4wMDAgKGluIGxvY2FsIHRpbWV6b25lKVxuICAgKiBgYGBcbiAgICogXG4gICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB0byBub3JtYWxpemVcbiAgICogQHJldHVybnMgRGF0ZSB3aXRoIHRpbWUgc2V0IHRvIDAwOjAwOjAwLjAwMFxuICAgKi9cbiAgbm9ybWFsaXplKGRhdGU6IERhdGUpOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gZGF0ZXMgcmVwcmVzZW50IHRoZSBzYW1lIGNhbGVuZGFyIGRheVxuICAgKiBcbiAgICogSWdub3JlcyB0aW1lIGNvbXBvbmVudC4gVGltZXpvbmUtc2FmZS5cbiAgICogXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgYSA9IG5ldyBEYXRlKCcyMDI2LTAyLTIxVDIzOjU5OjU5Jyk7XG4gICAqIGNvbnN0IGIgPSBuZXcgRGF0ZSgnMjAyNi0wMi0yMVQwMDowMDowMScpO1xuICAgKiBhZGFwdGVyLmlzU2FtZURheShhLCBiKTsgLy8g4oaSIHRydWVcbiAgICogYGBgXG4gICAqL1xuICBpc1NhbWVEYXkoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGRhdGUgQSBpcyBiZWZvcmUgZGF0ZSBCIChjYWxlbmRhciBkYXkgbGV2ZWwpXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFkYXB0ZXIuaXNCZWZvcmVEYXkobmV3IERhdGUoJzIwMjYtMDItMjAnKSwgbmV3IERhdGUoJzIwMjYtMDItMjEnKSk7IC8vIOKGkiB0cnVlXG4gICAqIGFkYXB0ZXIuaXNCZWZvcmVEYXkobmV3IERhdGUoJzIwMjYtMDItMjEnKSwgbmV3IERhdGUoJzIwMjYtMDItMjEnKSk7IC8vIOKGkiBmYWxzZVxuICAgKiBgYGBcbiAgICovXG4gIGlzQmVmb3JlRGF5KGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBkYXRlIEEgaXMgYWZ0ZXIgZGF0ZSBCIChjYWxlbmRhciBkYXkgbGV2ZWwpXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFkYXB0ZXIuaXNBZnRlckRheShuZXcgRGF0ZSgnMjAyNi0wMi0yMicpLCBuZXcgRGF0ZSgnMjAyNi0wMi0yMScpKTsgLy8g4oaSIHRydWVcbiAgICogYWRhcHRlci5pc0FmdGVyRGF5KG5ldyBEYXRlKCcyMDI2LTAyLTIxJyksIG5ldyBEYXRlKCcyMDI2LTAyLTIxJykpOyAvLyDihpIgZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICBpc0FmdGVyRGF5KGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGQgZGF5cyB0byBhIGRhdGVcbiAgICogXG4gICAqIE11c3QgaGFuZGxlIERTVCB0cmFuc2l0aW9ucyBjb3JyZWN0bHkuXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgnMjAyNi0wMi0yMScpO1xuICAgKiBjb25zdCBmdXR1cmUgPSBhZGFwdGVyLmFkZERheXMoZGF0ZSwgNyk7XG4gICAqIC8vIOKGkiAyMDI2LTAyLTI4XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBBZGQgbW9udGhzIHRvIGEgZGF0ZVxuICAgKiBcbiAgICogTXVzdCBoYW5kbGUgbW9udGggb3ZlcmZsb3cgKGUuZy4sIEphbiAzMSArIDEgbW9udGgg4oaSIEZlYiAyOCkuXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgnMjAyNi0wMS0zMScpO1xuICAgKiBjb25zdCBuZXh0ID0gYWRhcHRlci5hZGRNb250aHMoZGF0ZSwgMSk7XG4gICAqIC8vIOKGkiAyMDI2LTAyLTI4IChub3QgTWFyY2ggM3JkKVxuICAgKiBgYGBcbiAgICovXG4gIGFkZE1vbnRocyhkYXRlOiBEYXRlLCBtb250aHM6IG51bWJlcik6IERhdGU7XG5cbiAgLyoqXG4gICAqIEdldCBzdGFydCBvZiBkYXkgKDAwOjAwOjAwLjAwMClcbiAgICogXG4gICAqIFNpbWlsYXIgdG8gbm9ybWFsaXplKCkgYnV0IGV4cGxpY2l0IGludGVudC5cbiAgICovXG4gIHN0YXJ0T2ZEYXkoZGF0ZTogRGF0ZSk6IERhdGU7XG5cbiAgLyoqXG4gICAqIEdldCBlbmQgb2YgZGF5ICgyMzo1OTo1OS45OTkpXG4gICAqIFxuICAgKiBVc2VmdWwgZm9yIHJhbmdlIHF1ZXJpZXMgdGhhdCBuZWVkIHRvIGluY2x1ZGUgZW50aXJlIGRheS5cbiAgICogXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCcyMDI2LTAyLTIxJyk7XG4gICAqIGNvbnN0IGVuZCA9IGFkYXB0ZXIuZW5kT2ZEYXkoZGF0ZSk7XG4gICAqIC8vIOKGkiAyMDI2LTAyLTIxVDIzOjU5OjU5Ljk5OVxuICAgKiBgYGBcbiAgICovXG4gIGVuZE9mRGF5KGRhdGU6IERhdGUpOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBHZXQgZmlyc3QgZGF5IG9mIG1vbnRoICgwMDowMDowMC4wMDApXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgnMjAyNi0wMi0yMScpO1xuICAgKiBjb25zdCBzdGFydCA9IGFkYXB0ZXIuc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgKiAvLyDihpIgMjAyNi0wMi0wMVQwMDowMDowMC4wMDBcbiAgICogYGBgXG4gICAqL1xuICBzdGFydE9mTW9udGgoZGF0ZTogRGF0ZSk6IERhdGU7XG5cbiAgLyoqXG4gICAqIEdldCBsYXN0IGRheSBvZiBtb250aCAoMjM6NTk6NTkuOTk5KVxuICAgKiBcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkYXRlID0gbmV3IERhdGUoJzIwMjYtMDItMjEnKTtcbiAgICogY29uc3QgZW5kID0gYWRhcHRlci5lbmRPZk1vbnRoKGRhdGUpO1xuICAgKiAvLyDihpIgMjAyNi0wMi0yOFQyMzo1OTo1OS45OTlcbiAgICogYGBgXG4gICAqL1xuICBlbmRPZk1vbnRoKGRhdGU6IERhdGUpOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBHZXQgeWVhciAoNC1kaWdpdClcbiAgICogXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYWRhcHRlci5nZXRZZWFyKG5ldyBEYXRlKCcyMDI2LTAyLTIxJykpOyAvLyDihpIgMjAyNlxuICAgKiBgYGBcbiAgICovXG4gIGdldFllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICAvKipcbiAgICogR2V0IG1vbnRoICgwLTExLCB3aGVyZSAwID0gSmFudWFyeSlcbiAgICogXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYWRhcHRlci5nZXRNb250aChuZXcgRGF0ZSgnMjAyNi0wMi0yMScpKTsgLy8g4oaSIDEgKEZlYnJ1YXJ5KVxuICAgKiBgYGBcbiAgICovXG4gIGdldE1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldCBkYXkgb2YgbW9udGggKDEtMzEpXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFkYXB0ZXIuZ2V0RGF0ZShuZXcgRGF0ZSgnMjAyNi0wMi0yMScpKTsgLy8g4oaSIDIxXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0RGF0ZShkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHZXQgZGF5IG9mIHdlZWsgKDAtNiwgd2hlcmUgMCA9IFN1bmRheSlcbiAgICogXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYWRhcHRlci5nZXREYXkobmV3IERhdGUoJzIwMjYtMDItMjEnKSk7IC8vIOKGkiA2IChTYXR1cmRheSlcbiAgICogYGBgXG4gICAqL1xuICBnZXREYXkoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICAvKipcbiAgICogQ29udmVydCBEYXRlIHRvIElTTyBkYXRlIHN0cmluZyAoWVlZWS1NTS1ERClcbiAgICogXG4gICAqIENSSVRJQ0FMOiBNdXN0IGJlIHRpbWV6b25lLXNhZmUhXG4gICAqIERPIE5PVCB1c2UgZGF0ZS50b0lTT1N0cmluZygpIGFzIGl0IGNvbnZlcnRzIHRvIFVUQy5cbiAgICogXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gTG9jYWwgdGltZXpvbmUgR01ULTYgKENTVClcbiAgICogY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCcyMDI2LTAyLTIxVDIzOjAwOjAwJyk7IC8vIDExIFBNIENTVFxuICAgKiBcbiAgICogLy8g4p2MIFdST05HOiBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxuICAgKiAvLyBSZXR1cm5zIFwiMjAyNi0wMi0yMlwiIChzaGlmdGVkIHRvIFVUQyEpXG4gICAqIFxuICAgKiAvLyDinIUgQ09SUkVDVDogYWRhcHRlci50b0lTT0RhdGUoZGF0ZSlcbiAgICogLy8gUmV0dXJucyBcIjIwMjYtMDItMjFcIiAobG9jYWwgZGF0ZSBwcmVzZXJ2ZWQpXG4gICAqIGBgYFxuICAgKiBcbiAgICogQHBhcmFtIGRhdGUgLSBEYXRlIHRvIGZvcm1hdCAob3IgbnVsbClcbiAgICogQHJldHVybnMgSVNPIGRhdGUgc3RyaW5nIGluIFlZWVktTU0tREQgZm9ybWF0IChsb2NhbCB0aW1lem9uZSksIGVtcHR5IHN0cmluZyBpZiBudWxsXG4gICAqL1xuICB0b0lTT0RhdGUoZGF0ZTogRGF0ZSB8IG51bGwpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhcnNlIElTTyBkYXRlIHN0cmluZyAoWVlZWS1NTS1ERCkgdG8gRGF0ZVxuICAgKiBcbiAgICogQ1JJVElDQUw6IE11c3QgYmUgdGltZXpvbmUtc2FmZSFcbiAgICogRE8gTk9UIHVzZSBuZXcgRGF0ZShpc29TdHJpbmcpIGFzIGl0IG1heSBwYXJzZSBhcyBVVEMuXG4gICAqIFxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIOKdjCBXUk9ORzogbmV3IERhdGUoJzIwMjYtMDItMjEnKVxuICAgKiAvLyBNYXkgcGFyc2UgYXMgVVRDIG1pZG5pZ2h0LCB3aGljaCBpcyBwcmV2aW91cyBkYXkgaW4gc29tZSB0aW1lem9uZXNcbiAgICogXG4gICAqIC8vIOKchSBDT1JSRUNUOiBhZGFwdGVyLnBhcnNlSVNPRGF0ZSgnMjAyNi0wMi0yMScpXG4gICAqIC8vIFJldHVybnMgRGF0ZSByZXByZXNlbnRpbmcgMjAyNi0wMi0yMSAwMDowMDowMCBpbiBsb2NhbCB0aW1lem9uZVxuICAgKiBgYGBcbiAgICogXG4gICAqIEBwYXJhbSBpc29EYXRlIC0gSVNPIGRhdGUgc3RyaW5nIChZWVlZLU1NLUREKSBvciBudWxsXG4gICAqIEByZXR1cm5zIERhdGUgb2JqZWN0IG9yIG51bGwgaWYgaW52YWxpZFxuICAgKi9cbiAgcGFyc2VJU09EYXRlKGlzb0RhdGU6IHN0cmluZyB8IG51bGwpOiBEYXRlIHwgbnVsbDtcblxuICAvKipcbiAgICogR2V0IHdlZWsgc3RhcnQgZGF5IGZvciBsb2NhbGVcbiAgICogXG4gICAqIDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy5cbiAgICogXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYWRhcHRlci5nZXRXZWVrU3RhcnQoJ2VuLVVTJyk7IC8vIOKGkiAwIChTdW5kYXkpXG4gICAqIGFkYXB0ZXIuZ2V0V2Vla1N0YXJ0KCdlbi1HQicpOyAvLyDihpIgMSAoTW9uZGF5KVxuICAgKiBgYGBcbiAgICogXG4gICAqIEBwYXJhbSBsb2NhbGUgLSBMb2NhbGUgc3RyaW5nIChlLmcuLCAnZW4tVVMnLCAnZXMtRVMnKVxuICAgKiBAcmV0dXJucyBEYXkgbnVtYmVyICgwLTYpXG4gICAqL1xuICBnZXRXZWVrU3RhcnQobG9jYWxlPzogc3RyaW5nKTogMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNjtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIERhdGVBZGFwdGVyXG4gKiBcbiAqIERlZmF1bHQ6IE5hdGl2ZURhdGVBZGFwdGVyICh6ZXJvIGRlcGVuZGVuY2llcylcbiAqIFxuICogT3ZlcnJpZGUgZm9yIGFkdmFuY2VkIHRpbWV6b25lIGhhbmRsaW5nOlxuICogXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBMdXhvbiB3aXRoIHRpbWV6b25lXG4gKiBpbXBvcnQgeyBMdXhvbkRhdGVBZGFwdGVyIH0gZnJvbSAnQG9uZWx1aXovZHVhbC1kYXRlcGlja2VyL2x1eG9uJztcbiAqIFxuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCB7XG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IERBVEVfQURBUFRFUixcbiAqICAgICAgIHVzZUNsYXNzOiBMdXhvbkRhdGVBZGFwdGVyXG4gKiAgICAgfVxuICogICBdXG4gKiB9KTtcbiAqIGBgYFxuICogXG4gKiBDdXN0b20gaW1wbGVtZW50YXRpb246XG4gKiBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIEN1c3RvbURhdGVBZGFwdGVyIGltcGxlbWVudHMgRGF0ZUFkYXB0ZXIge1xuICogICAvLyBZb3VyIGltcGxlbWVudGF0aW9uIGZvciBiYWNrZW5kLXNwZWNpZmljIGRhdGUgaGFuZGxpbmdcbiAqIH1cbiAqIFxuICogcHJvdmlkZShEQVRFX0FEQVBURVIsIHsgdXNlQ2xhc3M6IEN1c3RvbURhdGVBZGFwdGVyIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBEQVRFX0FEQVBURVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGF0ZUFkYXB0ZXI+KCdEQVRFX0FEQVBURVInKTtcbiJdfQ==
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Date Clock Abstraction for SSR-Safe Date Resolution
|
|
3
|
-
*
|
|
4
|
-
* Problem:
|
|
5
|
-
* Presets like "Last 7 Days" or "This Month" use new Date() which causes:
|
|
6
|
-
* - SSR hydration mismatch
|
|
7
|
-
* - Server renders "2026-02-14", client renders "2026-02-15"
|
|
8
|
-
* - Different filters in dashboards
|
|
9
|
-
* - Different queries in ERP/BI
|
|
10
|
-
* - Cache inconsistency
|
|
11
|
-
*
|
|
12
|
-
* Solution:
|
|
13
|
-
* Inject a DateClock to control time deterministically:
|
|
14
|
-
*
|
|
15
|
-
* Server (SSR):
|
|
16
|
-
* provide(DATE_CLOCK, {
|
|
17
|
-
* useValue: { now: () => new Date('2026-02-21T00:00:00Z') }
|
|
18
|
-
* })
|
|
19
|
-
*
|
|
20
|
-
* Client (Browser):
|
|
21
|
-
* Uses SystemClock by default (new Date())
|
|
22
|
-
*
|
|
23
|
-
* Testing:
|
|
24
|
-
* provide(DATE_CLOCK, {
|
|
25
|
-
* useValue: { now: () => new Date('2026-01-15T10:30:00Z') }
|
|
26
|
-
* })
|
|
27
|
-
*
|
|
28
|
-
* Architecture:
|
|
29
|
-
* - PresetEngine receives DateClock via DI
|
|
30
|
-
* - All preset calculations use clock.now() instead of new Date()
|
|
31
|
-
* - Deterministic: Same clock.now() → Same preset result
|
|
32
|
-
* - SSR-compatible: Server and client resolve identical ranges
|
|
33
|
-
*/
|
|
34
|
-
import { InjectionToken } from '@angular/core';
|
|
35
|
-
/**
|
|
36
|
-
* Injection token for DateClock
|
|
37
|
-
*
|
|
38
|
-
* Usage:
|
|
39
|
-
* ```typescript
|
|
40
|
-
* // Default (uses SystemClock)
|
|
41
|
-
* bootstrapApplication(AppComponent);
|
|
42
|
-
*
|
|
43
|
-
* // SSR Override
|
|
44
|
-
* bootstrapApplication(AppComponent, {
|
|
45
|
-
* providers: [
|
|
46
|
-
* {
|
|
47
|
-
* provide: DATE_CLOCK,
|
|
48
|
-
* useValue: { now: () => new Date('2026-02-21T00:00:00Z') }
|
|
49
|
-
* }
|
|
50
|
-
* ]
|
|
51
|
-
* });
|
|
52
|
-
*
|
|
53
|
-
* // Testing Override
|
|
54
|
-
* TestBed.configureTestingModule({
|
|
55
|
-
* providers: [
|
|
56
|
-
* {
|
|
57
|
-
* provide: DATE_CLOCK,
|
|
58
|
-
* useValue: { now: () => new Date('2026-01-15T12:00:00Z') }
|
|
59
|
-
* }
|
|
60
|
-
* ]
|
|
61
|
-
* });
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
export const DATE_CLOCK = new InjectionToken('DATE_CLOCK');
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1jbG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2RhdGUtY2xvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXFCL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQVksWUFBWSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGUgQ2xvY2sgQWJzdHJhY3Rpb24gZm9yIFNTUi1TYWZlIERhdGUgUmVzb2x1dGlvblxuICogXG4gKiBQcm9ibGVtOlxuICogUHJlc2V0cyBsaWtlIFwiTGFzdCA3IERheXNcIiBvciBcIlRoaXMgTW9udGhcIiB1c2UgbmV3IERhdGUoKSB3aGljaCBjYXVzZXM6XG4gKiAtIFNTUiBoeWRyYXRpb24gbWlzbWF0Y2hcbiAqIC0gU2VydmVyIHJlbmRlcnMgXCIyMDI2LTAyLTE0XCIsIGNsaWVudCByZW5kZXJzIFwiMjAyNi0wMi0xNVwiXG4gKiAtIERpZmZlcmVudCBmaWx0ZXJzIGluIGRhc2hib2FyZHNcbiAqIC0gRGlmZmVyZW50IHF1ZXJpZXMgaW4gRVJQL0JJXG4gKiAtIENhY2hlIGluY29uc2lzdGVuY3lcbiAqIFxuICogU29sdXRpb246XG4gKiBJbmplY3QgYSBEYXRlQ2xvY2sgdG8gY29udHJvbCB0aW1lIGRldGVybWluaXN0aWNhbGx5OlxuICogXG4gKiBTZXJ2ZXIgKFNTUik6XG4gKiBwcm92aWRlKERBVEVfQ0xPQ0ssIHtcbiAqICAgdXNlVmFsdWU6IHsgbm93OiAoKSA9PiBuZXcgRGF0ZSgnMjAyNi0wMi0yMVQwMDowMDowMFonKSB9XG4gKiB9KVxuICogXG4gKiBDbGllbnQgKEJyb3dzZXIpOlxuICogVXNlcyBTeXN0ZW1DbG9jayBieSBkZWZhdWx0IChuZXcgRGF0ZSgpKVxuICogXG4gKiBUZXN0aW5nOlxuICogcHJvdmlkZShEQVRFX0NMT0NLLCB7XG4gKiAgIHVzZVZhbHVlOiB7IG5vdzogKCkgPT4gbmV3IERhdGUoJzIwMjYtMDEtMTVUMTA6MzA6MDBaJykgfVxuICogfSlcbiAqIFxuICogQXJjaGl0ZWN0dXJlOlxuICogLSBQcmVzZXRFbmdpbmUgcmVjZWl2ZXMgRGF0ZUNsb2NrIHZpYSBESVxuICogLSBBbGwgcHJlc2V0IGNhbGN1bGF0aW9ucyB1c2UgY2xvY2subm93KCkgaW5zdGVhZCBvZiBuZXcgRGF0ZSgpXG4gKiAtIERldGVybWluaXN0aWM6IFNhbWUgY2xvY2subm93KCkg4oaSIFNhbWUgcHJlc2V0IHJlc3VsdFxuICogLSBTU1ItY29tcGF0aWJsZTogU2VydmVyIGFuZCBjbGllbnQgcmVzb2x2ZSBpZGVudGljYWwgcmFuZ2VzXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBDbG9jayBhYnN0cmFjdGlvbiBmb3IgZGV0ZXJtaW5pc3RpYyBkYXRlIHJlc29sdXRpb25cbiAqIFxuICogVXNlIGNhc2VzOlxuICogLSBTU1I6IEVuc3VyZSBzZXJ2ZXIgYW5kIGNsaWVudCBnZW5lcmF0ZSBpZGVudGljYWwgcHJlc2V0c1xuICogLSBUZXN0aW5nOiBDb250cm9sIHRpbWUgZm9yIHByZWRpY3RhYmxlIHRlc3QgcmVzdWx0c1xuICogLSBSZXBsYXk6IFJlcHJvZHVjZSBleGFjdCB1c2VyIHN0YXRlIGZyb20gcGFzdCBzZXNzaW9uc1xuICogLSBEZW1vOiBGcmVlemUgdGltZSBmb3IgcmVwcm9kdWNpYmxlIGRlbW9zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZUNsb2NrIHtcbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGRhdGUvdGltZVxuICAgKiBcbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG5ldyBEYXRlKClcbiAgICogT3ZlcnJpZGUgZm9yIFNTUiwgdGVzdGluZywgb3IgdGltZS10cmF2ZWwgc2NlbmFyaW9zXG4gICAqL1xuICBub3coKTogRGF0ZTtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIERhdGVDbG9ja1xuICogXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlZmF1bHQgKHVzZXMgU3lzdGVtQ2xvY2spXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQpO1xuICogXG4gKiAvLyBTU1IgT3ZlcnJpZGVcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBEQVRFX0NMT0NLLFxuICogICAgICAgdXNlVmFsdWU6IHsgbm93OiAoKSA9PiBuZXcgRGF0ZSgnMjAyNi0wMi0yMVQwMDowMDowMFonKSB9XG4gKiAgICAgfVxuICogICBdXG4gKiB9KTtcbiAqIFxuICogLy8gVGVzdGluZyBPdmVycmlkZVxuICogVGVzdEJlZC5jb25maWd1cmVUZXN0aW5nTW9kdWxlKHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogREFURV9DTE9DSyxcbiAqICAgICAgIHVzZVZhbHVlOiB7IG5vdzogKCkgPT4gbmV3IERhdGUoJzIwMjYtMDEtMTVUMTI6MDA6MDBaJykgfVxuICogICAgIH1cbiAqICAgXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IERBVEVfQ0xPQ0sgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGF0ZUNsb2NrPignREFURV9DTE9DSycpO1xuIl19
|