@sectile/temporal 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/calendar.d.ts +71 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +248 -0
- package/dist/calendar.js.map +1 -0
- package/dist/date-field.d.ts +62 -0
- package/dist/date-field.d.ts.map +1 -0
- package/dist/date-field.js +245 -0
- package/dist/date-field.js.map +1 -0
- package/dist/date-picker.d.ts +24 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +47 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/date-range-field.d.ts +47 -0
- package/dist/date-range-field.d.ts.map +1 -0
- package/dist/date-range-field.js +66 -0
- package/dist/date-range-field.js.map +1 -0
- package/dist/date-range-picker.d.ts +29 -0
- package/dist/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker.js +90 -0
- package/dist/date-range-picker.js.map +1 -0
- package/dist/date-time-field.d.ts +57 -0
- package/dist/date-time-field.d.ts.map +1 -0
- package/dist/date-time-field.js +267 -0
- package/dist/date-time-field.js.map +1 -0
- package/dist/date-time-picker.d.ts +72 -0
- package/dist/date-time-picker.d.ts.map +1 -0
- package/dist/date-time-picker.js +157 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +88 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +253 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/foundation.d.ts +5 -0
- package/dist/internal/foundation.d.ts.map +1 -0
- package/dist/internal/foundation.js +18 -0
- package/dist/internal/foundation.js.map +1 -0
- package/dist/internal/machine.d.ts +4 -0
- package/dist/internal/machine.d.ts.map +1 -0
- package/dist/internal/machine.js +6 -0
- package/dist/internal/machine.js.map +1 -0
- package/dist/month-picker.d.ts +6 -0
- package/dist/month-picker.d.ts.map +1 -0
- package/dist/month-picker.js +4 -0
- package/dist/month-picker.js.map +1 -0
- package/dist/month-range-picker.d.ts +6 -0
- package/dist/month-range-picker.d.ts.map +1 -0
- package/dist/month-range-picker.js +5 -0
- package/dist/month-range-picker.js.map +1 -0
- package/dist/range-calendar.d.ts +6 -0
- package/dist/range-calendar.d.ts.map +1 -0
- package/dist/range-calendar.js +5 -0
- package/dist/range-calendar.js.map +1 -0
- package/dist/time-field.d.ts +48 -0
- package/dist/time-field.d.ts.map +1 -0
- package/dist/time-field.js +157 -0
- package/dist/time-field.js.map +1 -0
- package/dist/time-range-field.d.ts +53 -0
- package/dist/time-range-field.d.ts.map +1 -0
- package/dist/time-range-field.js +75 -0
- package/dist/time-range-field.js.map +1 -0
- package/dist/year-picker.d.ts +10 -0
- package/dist/year-picker.d.ts.map +1 -0
- package/dist/year-picker.js +27 -0
- package/dist/year-picker.js.map +1 -0
- package/dist/year-range-picker.d.ts +6 -0
- package/dist/year-range-picker.d.ts.map +1 -0
- package/dist/year-range-picker.js +5 -0
- package/dist/year-range-picker.js.map +1 -0
- package/package.json +120 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 jinyongp
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Result } from '@sectile/core';
|
|
2
|
+
import { type DateValue } from './date-field.js';
|
|
3
|
+
export interface CalendarView {
|
|
4
|
+
readonly year: number;
|
|
5
|
+
readonly month: number;
|
|
6
|
+
}
|
|
7
|
+
export type CalendarViewMode = 'week' | 'month' | 'year';
|
|
8
|
+
export interface CalendarMonthValue {
|
|
9
|
+
readonly year: number;
|
|
10
|
+
readonly month: number;
|
|
11
|
+
}
|
|
12
|
+
export interface CalendarState {
|
|
13
|
+
readonly value: DateValue | null;
|
|
14
|
+
readonly highlighted: DateValue;
|
|
15
|
+
readonly view: CalendarView;
|
|
16
|
+
readonly viewMode: CalendarViewMode;
|
|
17
|
+
}
|
|
18
|
+
export type CalendarEvent = 'previous-month' | 'next-month' | 'previous-year' | 'next-year' | 'previous-day' | 'next-day' | 'previous-week' | 'next-week' | 'start-of-week' | 'end-of-week' | 'select-highlighted' | {
|
|
19
|
+
readonly type: 'set-view-mode';
|
|
20
|
+
readonly value: CalendarViewMode;
|
|
21
|
+
} | {
|
|
22
|
+
readonly type: 'select-month';
|
|
23
|
+
readonly value: CalendarMonthValue;
|
|
24
|
+
} | {
|
|
25
|
+
readonly type: 'select';
|
|
26
|
+
readonly value: DateValue;
|
|
27
|
+
} | {
|
|
28
|
+
readonly type: 'set-value';
|
|
29
|
+
readonly value: DateValue | null;
|
|
30
|
+
};
|
|
31
|
+
export type CalendarCommand = {
|
|
32
|
+
readonly type: 'value-committed';
|
|
33
|
+
readonly value: DateValue | null;
|
|
34
|
+
} | {
|
|
35
|
+
readonly type: 'highlight-changed';
|
|
36
|
+
readonly value: DateValue;
|
|
37
|
+
} | {
|
|
38
|
+
readonly type: 'view-mode-changed';
|
|
39
|
+
readonly value: CalendarViewMode;
|
|
40
|
+
};
|
|
41
|
+
export interface CalendarPolicies {
|
|
42
|
+
readonly min?: DateValue;
|
|
43
|
+
readonly max?: DateValue;
|
|
44
|
+
readonly required?: boolean;
|
|
45
|
+
readonly unavailable?: (value: DateValue) => boolean;
|
|
46
|
+
readonly weekStartsOn?: 1 | 2 | 3 | 4 | 5 | 6 | 7;
|
|
47
|
+
readonly maxScan?: number;
|
|
48
|
+
}
|
|
49
|
+
export type CalendarUnavailablePredicate = NonNullable<CalendarPolicies['unavailable']>;
|
|
50
|
+
export interface CalendarUpdate {
|
|
51
|
+
readonly state: CalendarState;
|
|
52
|
+
readonly commands: readonly CalendarCommand[];
|
|
53
|
+
}
|
|
54
|
+
export interface CalendarStateInput {
|
|
55
|
+
readonly value?: DateValue | null;
|
|
56
|
+
readonly highlighted?: DateValue;
|
|
57
|
+
readonly view?: CalendarView;
|
|
58
|
+
readonly viewMode?: CalendarViewMode;
|
|
59
|
+
}
|
|
60
|
+
export declare function createCalendarState(input?: CalendarStateInput): CalendarState;
|
|
61
|
+
export declare function tryCreateCalendarState(input?: CalendarStateInput): Result<CalendarState>;
|
|
62
|
+
export declare function applyCalendarEvent(state: CalendarState, event: CalendarEvent, policies?: CalendarPolicies): Result<CalendarUpdate>;
|
|
63
|
+
export declare function createCalendarWeek(value: DateValue, weekStartsOn?: 1 | 2 | 3 | 4 | 5 | 6 | 7): readonly DateValue[];
|
|
64
|
+
export declare function tryCreateCalendarWeek(value: DateValue, weekStartsOn?: 1 | 2 | 3 | 4 | 5 | 6 | 7): Result<readonly DateValue[]>;
|
|
65
|
+
export declare function createCalendarMonth(view: CalendarView, weekStartsOn?: 1 | 2 | 3 | 4 | 5 | 6 | 7): readonly (readonly DateValue[])[];
|
|
66
|
+
export declare function tryCreateCalendarMonth(view: CalendarView, weekStartsOn?: 1 | 2 | 3 | 4 | 5 | 6 | 7): Result<readonly (readonly DateValue[])[]>;
|
|
67
|
+
export declare function createCalendarYear(year: number): readonly (readonly CalendarMonthValue[])[];
|
|
68
|
+
export declare function tryCreateCalendarYear(year: number): Result<readonly (readonly CalendarMonthValue[])[]>;
|
|
69
|
+
export declare function isCalendarValueAvailable(value: DateValue, policies?: CalendarPolicies): boolean;
|
|
70
|
+
export declare function calendarID(value: DateValue): string;
|
|
71
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"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"}
|
package/dist/calendar.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { unwrap } from '@sectile/core/result';
|
|
2
|
+
import { fail, freezeArray, ok } from './internal/foundation.js';
|
|
3
|
+
import { createMachineUpdate } from './internal/machine.js';
|
|
4
|
+
import { addDateDays, addDateMonths, addDateYears, compareDateValues, dateDayOfWeek, formatDateValue, tryCreateDateValue, } from './date-field.js';
|
|
5
|
+
export function createCalendarState(input = {}) {
|
|
6
|
+
return unwrap(tryCreateCalendarState(input));
|
|
7
|
+
}
|
|
8
|
+
export function tryCreateCalendarState(input = {}) {
|
|
9
|
+
const value = input.value ?? null;
|
|
10
|
+
if (value !== null) {
|
|
11
|
+
const valid = tryCreateDateValue(value.year, value.month, value.day);
|
|
12
|
+
if (!valid.ok)
|
|
13
|
+
return valid;
|
|
14
|
+
}
|
|
15
|
+
const fallback = value ?? Object.freeze({ year: 1970, month: 1, day: 1 });
|
|
16
|
+
const highlighted = input.highlighted ?? fallback;
|
|
17
|
+
const validHighlight = tryCreateDateValue(highlighted.year, highlighted.month, highlighted.day);
|
|
18
|
+
if (!validHighlight.ok)
|
|
19
|
+
return validHighlight;
|
|
20
|
+
const view = input.view ?? Object.freeze({ year: validHighlight.value.year, month: validHighlight.value.month });
|
|
21
|
+
const validView = tryCreateDateValue(view.year, view.month, 1);
|
|
22
|
+
if (!validView.ok)
|
|
23
|
+
return validView;
|
|
24
|
+
const viewMode = input.viewMode ?? 'month';
|
|
25
|
+
if (!isCalendarViewMode(viewMode))
|
|
26
|
+
return fail('construction', 'invalid-calendar-view-mode', 'Calendar view mode must be week, month, or year.');
|
|
27
|
+
return ok(calendarState(value, validHighlight.value, Object.freeze({ year: view.year, month: view.month }), viewMode));
|
|
28
|
+
}
|
|
29
|
+
export function applyCalendarEvent(state, event, policies = {}) {
|
|
30
|
+
const valid = tryCreateCalendarState(state);
|
|
31
|
+
if (!valid.ok)
|
|
32
|
+
return invalidTransition(valid);
|
|
33
|
+
const policy = validateCalendarPolicies(policies);
|
|
34
|
+
if (!policy.ok)
|
|
35
|
+
return policy;
|
|
36
|
+
if (typeof event === 'object' && event.type === 'set-view-mode') {
|
|
37
|
+
if (!isCalendarViewMode(event.value))
|
|
38
|
+
return fail('transition-rejection', 'invalid-calendar-view-mode', 'Calendar view mode must be week, month, or year.');
|
|
39
|
+
if (event.value === state.viewMode)
|
|
40
|
+
return createMachineUpdate(state);
|
|
41
|
+
return createMachineUpdate(calendarState(state.value, state.highlighted, state.view, event.value), [{ type: 'view-mode-changed', value: event.value }]);
|
|
42
|
+
}
|
|
43
|
+
if (typeof event === 'object' && event.type === 'select-month') {
|
|
44
|
+
const month = tryCreateDateValue(event.value.year, event.value.month, 1);
|
|
45
|
+
if (!month.ok)
|
|
46
|
+
return invalidTransition(month);
|
|
47
|
+
const delta = (event.value.year - state.highlighted.year) * 12 + event.value.month - state.highlighted.month;
|
|
48
|
+
const highlighted = addDateMonths(state.highlighted, delta);
|
|
49
|
+
if (!highlighted.ok)
|
|
50
|
+
return highlighted;
|
|
51
|
+
const eligible = findEligibleInMonth(highlighted.value, event.value, policies);
|
|
52
|
+
if (!eligible.ok)
|
|
53
|
+
return eligible;
|
|
54
|
+
if (eligible.value === null)
|
|
55
|
+
return fail('transition-rejection', 'calendar-month-unavailable', 'Calendar month has no available date within maxScan.');
|
|
56
|
+
const view = Object.freeze({ year: eligible.value.year, month: eligible.value.month });
|
|
57
|
+
const commands = [];
|
|
58
|
+
if (compareDateValues(eligible.value, state.highlighted) !== 0)
|
|
59
|
+
commands.push({ type: 'highlight-changed', value: eligible.value });
|
|
60
|
+
if (state.viewMode !== 'month')
|
|
61
|
+
commands.push({ type: 'view-mode-changed', value: 'month' });
|
|
62
|
+
return createMachineUpdate(calendarState(state.value, eligible.value, view, 'month'), commands);
|
|
63
|
+
}
|
|
64
|
+
if (typeof event === 'object' && event.type === 'set-value')
|
|
65
|
+
return commit(event.value, state, policies);
|
|
66
|
+
if (typeof event === 'object' && event.type === 'select')
|
|
67
|
+
return commit(event.value, state, policies);
|
|
68
|
+
if (event === 'select-highlighted')
|
|
69
|
+
return commit(state.highlighted, state, policies);
|
|
70
|
+
let moved;
|
|
71
|
+
if (event === 'previous-month' || event === 'next-month')
|
|
72
|
+
moved = addDateMonths(state.highlighted, event === 'previous-month' ? -1 : 1);
|
|
73
|
+
else if (event === 'previous-year' || event === 'next-year')
|
|
74
|
+
moved = addDateYears(state.highlighted, event === 'previous-year' ? -1 : 1);
|
|
75
|
+
else if (event === 'previous-day' || event === 'next-day')
|
|
76
|
+
moved = addDateDays(state.highlighted, event === 'previous-day' ? -1 : 1);
|
|
77
|
+
else if (event === 'previous-week' || event === 'next-week')
|
|
78
|
+
moved = addDateDays(state.highlighted, event === 'previous-week' ? -7 : 7);
|
|
79
|
+
else if (event === 'start-of-week' || event === 'end-of-week') {
|
|
80
|
+
const start = policies.weekStartsOn ?? 1;
|
|
81
|
+
const relative = (dateDayOfWeek(state.highlighted) - start + 7) % 7;
|
|
82
|
+
moved = addDateDays(state.highlighted, event === 'start-of-week' ? -relative : 6 - relative);
|
|
83
|
+
}
|
|
84
|
+
else
|
|
85
|
+
return fail('transition-rejection', 'unsupported-calendar-event', 'Calendar event is unsupported.');
|
|
86
|
+
if (!moved.ok)
|
|
87
|
+
return moved;
|
|
88
|
+
const direction = compareDateValues(moved.value, state.highlighted) < 0 ? -1 : 1;
|
|
89
|
+
const eligible = findEligible(moved.value, direction, policies);
|
|
90
|
+
if (!eligible.ok)
|
|
91
|
+
return eligible;
|
|
92
|
+
if (eligible.value === null || compareDateValues(eligible.value, state.highlighted) === 0)
|
|
93
|
+
return createMachineUpdate(state);
|
|
94
|
+
const view = Object.freeze({ year: eligible.value.year, month: eligible.value.month });
|
|
95
|
+
return createMachineUpdate(calendarState(state.value, eligible.value, view, state.viewMode), [{ type: 'highlight-changed', value: eligible.value }]);
|
|
96
|
+
}
|
|
97
|
+
export function createCalendarWeek(value, weekStartsOn = 1) {
|
|
98
|
+
return unwrap(tryCreateCalendarWeek(value, weekStartsOn));
|
|
99
|
+
}
|
|
100
|
+
export function tryCreateCalendarWeek(value, weekStartsOn = 1) {
|
|
101
|
+
const valid = tryCreateDateValue(value.year, value.month, value.day);
|
|
102
|
+
if (!valid.ok)
|
|
103
|
+
return valid;
|
|
104
|
+
if (!Number.isSafeInteger(weekStartsOn) || weekStartsOn < 1 || weekStartsOn > 7)
|
|
105
|
+
return fail('construction', 'invalid-week-start', 'Week start must be an ISO weekday from 1 through 7.');
|
|
106
|
+
const offset = (dateDayOfWeek(valid.value) - weekStartsOn + 7) % 7;
|
|
107
|
+
const start = addDateDays(valid.value, -offset);
|
|
108
|
+
if (!start.ok)
|
|
109
|
+
return start;
|
|
110
|
+
const days = [];
|
|
111
|
+
for (let index = 0; index < 7; index += 1) {
|
|
112
|
+
const day = addDateDays(start.value, index);
|
|
113
|
+
if (!day.ok)
|
|
114
|
+
return day;
|
|
115
|
+
days.push(day.value);
|
|
116
|
+
}
|
|
117
|
+
return ok(freezeArray(days));
|
|
118
|
+
}
|
|
119
|
+
export function createCalendarMonth(view, weekStartsOn = 1) {
|
|
120
|
+
return unwrap(tryCreateCalendarMonth(view, weekStartsOn));
|
|
121
|
+
}
|
|
122
|
+
export function tryCreateCalendarMonth(view, weekStartsOn = 1) {
|
|
123
|
+
const first = tryCreateDateValue(view.year, view.month, 1);
|
|
124
|
+
if (!first.ok)
|
|
125
|
+
return first;
|
|
126
|
+
if (!Number.isSafeInteger(weekStartsOn) || weekStartsOn < 1 || weekStartsOn > 7)
|
|
127
|
+
return fail('construction', 'invalid-week-start', 'Week start must be an ISO weekday from 1 through 7.');
|
|
128
|
+
const offset = (dateDayOfWeek(first.value) - weekStartsOn + 7) % 7;
|
|
129
|
+
const start = addDateDays(first.value, -offset);
|
|
130
|
+
if (!start.ok)
|
|
131
|
+
return start;
|
|
132
|
+
const rows = [];
|
|
133
|
+
for (let row = 0; row < 6; row += 1) {
|
|
134
|
+
const cells = [];
|
|
135
|
+
for (let column = 0; column < 7; column += 1) {
|
|
136
|
+
const value = addDateDays(start.value, row * 7 + column);
|
|
137
|
+
if (!value.ok)
|
|
138
|
+
return value;
|
|
139
|
+
cells.push(value.value);
|
|
140
|
+
}
|
|
141
|
+
rows.push(cells);
|
|
142
|
+
}
|
|
143
|
+
return ok(freezeArray(rows.map((row) => freezeArray(row))));
|
|
144
|
+
}
|
|
145
|
+
export function createCalendarYear(year) {
|
|
146
|
+
return unwrap(tryCreateCalendarYear(year));
|
|
147
|
+
}
|
|
148
|
+
export function tryCreateCalendarYear(year) {
|
|
149
|
+
const valid = tryCreateDateValue(year, 1, 1);
|
|
150
|
+
if (!valid.ok)
|
|
151
|
+
return valid;
|
|
152
|
+
const rows = [];
|
|
153
|
+
for (let row = 0; row < 4; row += 1) {
|
|
154
|
+
const months = [];
|
|
155
|
+
for (let column = 0; column < 3; column += 1)
|
|
156
|
+
months.push(Object.freeze({ year, month: row * 3 + column + 1 }));
|
|
157
|
+
rows.push(months);
|
|
158
|
+
}
|
|
159
|
+
return ok(freezeArray(rows.map((row) => freezeArray(row))));
|
|
160
|
+
}
|
|
161
|
+
export function isCalendarValueAvailable(value, policies = {}) {
|
|
162
|
+
return !(policies.min !== undefined && compareDateValues(value, policies.min) < 0)
|
|
163
|
+
&& !(policies.max !== undefined && compareDateValues(value, policies.max) > 0)
|
|
164
|
+
&& policies.unavailable?.(value) !== true;
|
|
165
|
+
}
|
|
166
|
+
export function calendarID(value) { return formatDateValue(value); }
|
|
167
|
+
function commit(value, state, policies) {
|
|
168
|
+
if (value === null) {
|
|
169
|
+
if (policies.required === true)
|
|
170
|
+
return fail('transition-rejection', 'calendar-value-required', 'Calendar requires a value.');
|
|
171
|
+
return createMachineUpdate(calendarState(null, state.highlighted, state.view, state.viewMode), [{ type: 'value-committed', value: null }]);
|
|
172
|
+
}
|
|
173
|
+
const valid = tryCreateDateValue(value.year, value.month, value.day);
|
|
174
|
+
if (!valid.ok)
|
|
175
|
+
return invalidTransition(valid);
|
|
176
|
+
if (!isCalendarValueAvailable(valid.value, policies))
|
|
177
|
+
return fail('transition-rejection', 'calendar-value-unavailable', 'Calendar value is outside its selectable domain.');
|
|
178
|
+
const view = Object.freeze({ year: valid.value.year, month: valid.value.month });
|
|
179
|
+
return createMachineUpdate(calendarState(valid.value, valid.value, view, state.viewMode), [
|
|
180
|
+
{ type: 'value-committed', value: valid.value },
|
|
181
|
+
{ type: 'highlight-changed', value: valid.value },
|
|
182
|
+
]);
|
|
183
|
+
}
|
|
184
|
+
function findEligible(start, direction, policies) {
|
|
185
|
+
const limit = policies.maxScan ?? 366;
|
|
186
|
+
if (!Number.isSafeInteger(limit) || limit < 1)
|
|
187
|
+
return fail('construction', 'invalid-calendar-max-scan', 'Calendar max scan must be a positive safe integer.');
|
|
188
|
+
let candidate = start;
|
|
189
|
+
for (let scanned = 0; scanned < limit; scanned += 1) {
|
|
190
|
+
if (isCalendarValueAvailable(candidate, policies))
|
|
191
|
+
return ok(candidate);
|
|
192
|
+
const next = addDateDays(candidate, direction);
|
|
193
|
+
if (!next.ok)
|
|
194
|
+
return ok(null);
|
|
195
|
+
candidate = next.value;
|
|
196
|
+
}
|
|
197
|
+
return fail('resource-rejection', 'calendar-scan-exhausted', 'Calendar did not find an available date within maxScan.', { maxScan: limit });
|
|
198
|
+
}
|
|
199
|
+
function findEligibleInMonth(start, month, policies) {
|
|
200
|
+
const limit = policies.maxScan ?? 366;
|
|
201
|
+
if (!Number.isSafeInteger(limit) || limit < 1)
|
|
202
|
+
return fail('construction', 'invalid-calendar-max-scan', 'Calendar max scan must be a positive safe integer.');
|
|
203
|
+
let scanned = 0;
|
|
204
|
+
for (const direction of [1, -1]) {
|
|
205
|
+
let candidate = start;
|
|
206
|
+
if (direction === -1) {
|
|
207
|
+
const previous = addDateDays(candidate, -1);
|
|
208
|
+
if (!previous.ok)
|
|
209
|
+
continue;
|
|
210
|
+
candidate = previous.value;
|
|
211
|
+
}
|
|
212
|
+
while (candidate.year === month.year && candidate.month === month.month) {
|
|
213
|
+
if (scanned >= limit)
|
|
214
|
+
return fail('resource-rejection', 'calendar-scan-exhausted', 'Calendar did not find an available date within maxScan.', { maxScan: limit });
|
|
215
|
+
scanned += 1;
|
|
216
|
+
if (isCalendarValueAvailable(candidate, policies))
|
|
217
|
+
return ok(candidate);
|
|
218
|
+
const next = addDateDays(candidate, direction);
|
|
219
|
+
if (!next.ok)
|
|
220
|
+
break;
|
|
221
|
+
candidate = next.value;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return ok(null);
|
|
225
|
+
}
|
|
226
|
+
function validateCalendarPolicies(policies) {
|
|
227
|
+
if (policies.unavailable !== undefined && typeof policies.unavailable !== 'function')
|
|
228
|
+
return fail('construction', 'invalid-calendar-unavailable-policy', 'Calendar unavailable policy must be a function.');
|
|
229
|
+
if (policies.min !== undefined) {
|
|
230
|
+
const min = tryCreateDateValue(policies.min.year, policies.min.month, policies.min.day);
|
|
231
|
+
if (!min.ok)
|
|
232
|
+
return min;
|
|
233
|
+
}
|
|
234
|
+
if (policies.max !== undefined) {
|
|
235
|
+
const max = tryCreateDateValue(policies.max.year, policies.max.month, policies.max.day);
|
|
236
|
+
if (!max.ok)
|
|
237
|
+
return max;
|
|
238
|
+
}
|
|
239
|
+
if (policies.min !== undefined && policies.max !== undefined && compareDateValues(policies.min, policies.max) > 0)
|
|
240
|
+
return fail('construction', 'inverted-calendar-bounds', 'Calendar minimum must not follow its maximum.');
|
|
241
|
+
return ok(true);
|
|
242
|
+
}
|
|
243
|
+
function calendarState(value, highlighted, view, viewMode) {
|
|
244
|
+
return Object.freeze({ value, highlighted, view, viewMode });
|
|
245
|
+
}
|
|
246
|
+
function isCalendarViewMode(value) { return value === 'week' || value === 'month' || value === 'year'; }
|
|
247
|
+
function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
|
|
248
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,eAAe,EAEf,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAkEzB,MAAM,UAAU,mBAAmB,CAAC,KAAK,GAAuB,EAAE;IAChE,OAAO,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAK,GAAuB,EAAE;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;IAC9B,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC;IAClD,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAChG,IAAI,CAAC,cAAc,CAAC,EAAE;QAAE,OAAO,cAAc,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACjH,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC;IAC3C,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,cAAc,EAAE,4BAA4B,EAAE,kDAAkD,CAAC,CAAC;IACjJ,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAoB,EAAE,KAAoB,EAAE,QAAQ,GAAqB,EAAE;IAC5G,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,kDAAkD,CAAC,CAAC;QAC5J,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ;YAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1J,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;QAC7G,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC;QACxC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,sDAAsD,CAAC,CAAC;QACvJ,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACpI,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7F,OAAO,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtG,IAAI,KAAK,KAAK,oBAAoB;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEtF,IAAI,KAAwB,CAAC;IAC7B,IAAI,KAAK,KAAK,gBAAgB,IAAI,KAAK,KAAK,YAAY;QAAE,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnI,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,WAAW;QAAE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpI,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,UAAU;QAAE,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChI,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,WAAW;QAAE,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnI,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACpE,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC/F,CAAC;;QAAM,OAAO,IAAI,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,gCAAgC,CAAC,CAAC;IAC3G,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7H,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACvF,OAAO,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAgB,EAAE,YAAY,GAA8B,CAAC;IAC9F,OAAO,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAgB,EAAE,YAAY,GAA8B,CAAC;IACjG,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,cAAc,EAAE,oBAAoB,EAAE,qDAAqD,CAAC,CAAC;IAC1L,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAkB,EAAE,YAAY,GAA8B,CAAC;IACjG,OAAO,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAkB,EAAE,YAAY,GAA8B,CAAC;IACpG,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,cAAc,EAAE,oBAAoB,EAAE,qDAAqD,CAAC,CAAC;IAC1L,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAChH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAgB,EAAE,QAAQ,GAAqB,EAAE;IACxF,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,SAAS,IAAI,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;WAC7E,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,SAAS,IAAI,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;WAC3E,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAgB,IAAY,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEvF,SAAS,MAAM,CAAC,KAAuB,EAAE,KAAoB,EAAE,QAA0B;IACvF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,4BAA4B,CAAC,CAAC;QAC7H,OAAO,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7I,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,kDAAkD,CAAC,CAAC;IAC5K,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACjF,OAAO,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;QACxF,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QAC/C,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;KAClD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB,EAAE,SAAiB,EAAE,QAA0B;IACnF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,GAAG,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,cAAc,EAAE,2BAA2B,EAAE,oDAAoD,CAAC,CAAC;IAC9J,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACpD,IAAI,wBAAwB,CAAC,SAAS,EAAE,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,yDAAyD,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9I,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAgB,EAAE,KAAyB,EAAE,QAA0B;IAClG,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,GAAG,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,cAAc,EAAE,2BAA2B,EAAE,oDAAoD,CAAC,CAAC;IAC9J,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,CAAC;QACzC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,SAAS;YAC3B,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YACxE,IAAI,OAAO,IAAI,KAAK;gBAAE,OAAO,IAAI,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,yDAAyD,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAClK,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,wBAAwB,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAAE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,MAAM;YACpB,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,wBAAwB,CAAC,QAA0B;IAC1D,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,cAAc,EAAE,qCAAqC,EAAE,iDAAiD,CAAC,CAAC;IAC5M,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAAC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC;IAAC,CAAC;IACrJ,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAAC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC;IAAC,CAAC;IACrJ,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,cAAc,EAAE,0BAA0B,EAAE,+CAA+C,CAAC,CAAC;IAC5N,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,KAAuB,EAAE,WAAsB,EAAE,IAAkB,EAAE,QAA0B;IACpH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC/D,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAc,IAA+B,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AAC5I,SAAS,iBAAiB,CAAI,MAAiB,IAAmB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,6BAA6B,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Result } from '@sectile/core';
|
|
2
|
+
import { type TextEditingState, type TextEvent } from '@sectile/core/text';
|
|
3
|
+
export interface DateValue {
|
|
4
|
+
readonly year: number;
|
|
5
|
+
readonly month: number;
|
|
6
|
+
readonly day: number;
|
|
7
|
+
}
|
|
8
|
+
export interface DateRange {
|
|
9
|
+
readonly start: DateValue;
|
|
10
|
+
readonly end: DateValue;
|
|
11
|
+
}
|
|
12
|
+
export type DateSegment = 'year' | 'month' | 'day';
|
|
13
|
+
export interface DateFieldState {
|
|
14
|
+
readonly value: DateValue | null;
|
|
15
|
+
readonly inputState: TextEditingState;
|
|
16
|
+
}
|
|
17
|
+
export type DateFieldEvent = {
|
|
18
|
+
readonly type: 'text';
|
|
19
|
+
readonly event: TextEvent;
|
|
20
|
+
} | {
|
|
21
|
+
readonly type: 'set-value';
|
|
22
|
+
readonly value: DateValue | null;
|
|
23
|
+
} | 'increment-segment' | 'decrement-segment' | 'commit' | 'cancel';
|
|
24
|
+
export type DateFieldCommand = {
|
|
25
|
+
readonly type: 'input-state-changed';
|
|
26
|
+
readonly value: TextEditingState;
|
|
27
|
+
} | {
|
|
28
|
+
readonly type: 'value-committed';
|
|
29
|
+
readonly value: DateValue | null;
|
|
30
|
+
};
|
|
31
|
+
export interface DateFieldPolicies {
|
|
32
|
+
readonly min?: DateValue;
|
|
33
|
+
readonly max?: DateValue;
|
|
34
|
+
readonly required?: boolean;
|
|
35
|
+
readonly unavailable?: (value: DateValue) => boolean;
|
|
36
|
+
}
|
|
37
|
+
export type DateFieldUnavailablePredicate = NonNullable<DateFieldPolicies['unavailable']>;
|
|
38
|
+
export interface DateFieldUpdate {
|
|
39
|
+
readonly state: DateFieldState;
|
|
40
|
+
readonly commands: readonly DateFieldCommand[];
|
|
41
|
+
}
|
|
42
|
+
export declare function createDateValue(year: number, month: number, day: number): DateValue;
|
|
43
|
+
export declare function tryCreateDateValue(year: number, month: number, day: number): Result<DateValue>;
|
|
44
|
+
export declare function parseDateValue(text: string): Result<DateValue>;
|
|
45
|
+
export declare function formatDateValue(value: DateValue): string;
|
|
46
|
+
export declare function compareDateValues(left: DateValue, right: DateValue): -1 | 0 | 1;
|
|
47
|
+
export declare function differenceInDateDays(left: DateValue, right: DateValue): number;
|
|
48
|
+
/** ISO weekday: Monday is 1 and Sunday is 7. */
|
|
49
|
+
export declare function dateDayOfWeek(value: DateValue): 1 | 2 | 3 | 4 | 5 | 6 | 7;
|
|
50
|
+
export declare function addDateDays(value: DateValue, amount: number): Result<DateValue>;
|
|
51
|
+
export declare function addDateMonths(value: DateValue, amount: number): Result<DateValue>;
|
|
52
|
+
export declare function addDateYears(value: DateValue, amount: number): Result<DateValue>;
|
|
53
|
+
export declare function createDateRange(start: DateValue, end: DateValue): DateRange;
|
|
54
|
+
export declare function tryCreateDateRange(start: DateValue, end: DateValue): Result<DateRange>;
|
|
55
|
+
export declare function dateRangeContains(range: DateRange, value: DateValue): boolean;
|
|
56
|
+
export declare function createDateFieldState(value?: DateValue | null, inputState?: TextEditingState): DateFieldState;
|
|
57
|
+
export declare function tryCreateDateFieldState(value?: DateValue | null, inputState?: TextEditingState): Result<DateFieldState>;
|
|
58
|
+
export declare function applyDateFieldEvent(state: DateFieldState, event: DateFieldEvent, policies?: DateFieldPolicies): Result<DateFieldUpdate>;
|
|
59
|
+
export declare function dateSegmentAt(offset: number): DateSegment;
|
|
60
|
+
export declare function daysInMonth(year: number, month: number): number;
|
|
61
|
+
export declare function isLeapYear(year: number): boolean;
|
|
62
|
+
//# sourceMappingURL=date-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-field.d.ts","sourceRoot":"","sources":["../src/date-field.ts"],"names":[],"mappings":"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"}
|