@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.
Files changed (36) hide show
  1. package/README.md +26 -2
  2. package/fesm2022/oneluiz-dual-datepicker.mjs +75 -71
  3. package/fesm2022/oneluiz-dual-datepicker.mjs.map +1 -1
  4. package/package.json +8 -9
  5. package/types/oneluiz-dual-datepicker.d.ts +1618 -0
  6. package/dual-datepicker.component.d.ts +0 -243
  7. package/esm2022/core/built-in-presets.mjs +0 -289
  8. package/esm2022/core/calendar-grid/cache.config.mjs +0 -35
  9. package/esm2022/core/calendar-grid/calendar-grid.cache.mjs +0 -98
  10. package/esm2022/core/calendar-grid/calendar-grid.factory.mjs +0 -97
  11. package/esm2022/core/calendar-grid/calendar-grid.types.mjs +0 -8
  12. package/esm2022/core/calendar-grid/range-highlighter.cache.mjs +0 -200
  13. package/esm2022/core/calendar-grid/range-highlighter.mjs +0 -185
  14. package/esm2022/core/calendar-grid/range-highlighter.types.mjs +0 -11
  15. package/esm2022/core/calendar-grid/virtual-weeks.logic.mjs +0 -149
  16. package/esm2022/core/calendar-grid/virtual-weeks.types.mjs +0 -11
  17. package/esm2022/core/date-adapter.mjs +0 -77
  18. package/esm2022/core/date-clock.mjs +0 -65
  19. package/esm2022/core/dual-date-range.store.mjs +0 -329
  20. package/esm2022/core/internal.mjs +0 -92
  21. package/esm2022/core/native-date-adapter.mjs +0 -286
  22. package/esm2022/core/preset-providers.mjs +0 -243
  23. package/esm2022/core/preset-registry.mjs +0 -277
  24. package/esm2022/core/preset.engine.mjs +0 -179
  25. package/esm2022/core/public.mjs +0 -94
  26. package/esm2022/core/range-preset.plugin.mjs +0 -70
  27. package/esm2022/core/range.validator.mjs +0 -105
  28. package/esm2022/core/system-clock.mjs +0 -34
  29. package/esm2022/core/testing/date.helpers.mjs +0 -49
  30. package/esm2022/core/testing/fixed-clock.mjs +0 -30
  31. package/esm2022/core/testing/index.mjs +0 -8
  32. package/esm2022/dual-datepicker.component.mjs +0 -1314
  33. package/esm2022/oneluiz-dual-datepicker.mjs +0 -5
  34. package/esm2022/public-api.mjs +0 -43
  35. package/index.d.ts +0 -5
  36. 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