@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.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/calendar.d.ts +71 -0
  4. package/dist/calendar.d.ts.map +1 -0
  5. package/dist/calendar.js +248 -0
  6. package/dist/calendar.js.map +1 -0
  7. package/dist/date-field.d.ts +62 -0
  8. package/dist/date-field.d.ts.map +1 -0
  9. package/dist/date-field.js +245 -0
  10. package/dist/date-field.js.map +1 -0
  11. package/dist/date-picker.d.ts +24 -0
  12. package/dist/date-picker.d.ts.map +1 -0
  13. package/dist/date-picker.js +47 -0
  14. package/dist/date-picker.js.map +1 -0
  15. package/dist/date-range-field.d.ts +47 -0
  16. package/dist/date-range-field.d.ts.map +1 -0
  17. package/dist/date-range-field.js +66 -0
  18. package/dist/date-range-field.js.map +1 -0
  19. package/dist/date-range-picker.d.ts +29 -0
  20. package/dist/date-range-picker.d.ts.map +1 -0
  21. package/dist/date-range-picker.js +90 -0
  22. package/dist/date-range-picker.js.map +1 -0
  23. package/dist/date-time-field.d.ts +57 -0
  24. package/dist/date-time-field.d.ts.map +1 -0
  25. package/dist/date-time-field.js +267 -0
  26. package/dist/date-time-field.js.map +1 -0
  27. package/dist/date-time-picker.d.ts +72 -0
  28. package/dist/date-time-picker.d.ts.map +1 -0
  29. package/dist/date-time-picker.js +157 -0
  30. package/dist/date-time-picker.js.map +1 -0
  31. package/dist/date-time-range-picker.d.ts +88 -0
  32. package/dist/date-time-range-picker.d.ts.map +1 -0
  33. package/dist/date-time-range-picker.js +253 -0
  34. package/dist/date-time-range-picker.js.map +1 -0
  35. package/dist/index.d.ts +17 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +2 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/internal/foundation.d.ts +5 -0
  40. package/dist/internal/foundation.d.ts.map +1 -0
  41. package/dist/internal/foundation.js +18 -0
  42. package/dist/internal/foundation.js.map +1 -0
  43. package/dist/internal/machine.d.ts +4 -0
  44. package/dist/internal/machine.d.ts.map +1 -0
  45. package/dist/internal/machine.js +6 -0
  46. package/dist/internal/machine.js.map +1 -0
  47. package/dist/month-picker.d.ts +6 -0
  48. package/dist/month-picker.d.ts.map +1 -0
  49. package/dist/month-picker.js +4 -0
  50. package/dist/month-picker.js.map +1 -0
  51. package/dist/month-range-picker.d.ts +6 -0
  52. package/dist/month-range-picker.d.ts.map +1 -0
  53. package/dist/month-range-picker.js +5 -0
  54. package/dist/month-range-picker.js.map +1 -0
  55. package/dist/range-calendar.d.ts +6 -0
  56. package/dist/range-calendar.d.ts.map +1 -0
  57. package/dist/range-calendar.js +5 -0
  58. package/dist/range-calendar.js.map +1 -0
  59. package/dist/time-field.d.ts +48 -0
  60. package/dist/time-field.d.ts.map +1 -0
  61. package/dist/time-field.js +157 -0
  62. package/dist/time-field.js.map +1 -0
  63. package/dist/time-range-field.d.ts +53 -0
  64. package/dist/time-range-field.d.ts.map +1 -0
  65. package/dist/time-range-field.js +75 -0
  66. package/dist/time-range-field.js.map +1 -0
  67. package/dist/year-picker.d.ts +10 -0
  68. package/dist/year-picker.d.ts.map +1 -0
  69. package/dist/year-picker.js +27 -0
  70. package/dist/year-picker.js.map +1 -0
  71. package/dist/year-range-picker.d.ts +6 -0
  72. package/dist/year-range-picker.d.ts.map +1 -0
  73. package/dist/year-range-picker.js +5 -0
  74. package/dist/year-range-picker.js.map +1 -0
  75. package/package.json +120 -0
@@ -0,0 +1,245 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { fail, ok } from './internal/foundation.js';
3
+ import { createMachineUpdate } from './internal/machine.js';
4
+ import { applyTextEvent, createTextEditingState, normalizeTextEditingState, tryCreateTextEditingState, } from '@sectile/core/text';
5
+ const DATE_FIELD_MAX_CODE_UNITS = 10;
6
+ export function createDateValue(year, month, day) {
7
+ return unwrap(tryCreateDateValue(year, month, day));
8
+ }
9
+ export function tryCreateDateValue(year, month, day) {
10
+ if (!Number.isSafeInteger(year) || year < 1 || year > 9_999) {
11
+ return fail('construction', 'invalid-date-year', 'Date year must be an integer from 1 through 9999.', { year });
12
+ }
13
+ if (!Number.isSafeInteger(month) || month < 1 || month > 12) {
14
+ return fail('construction', 'invalid-date-month', 'Date month must be an integer from 1 through 12.', { month });
15
+ }
16
+ const maximum = daysInMonth(year, month);
17
+ if (!Number.isSafeInteger(day) || day < 1 || day > maximum) {
18
+ return fail('construction', 'invalid-date-day', 'Date day must exist in its Gregorian month.', { year, month, day });
19
+ }
20
+ return ok(Object.freeze({ year, month, day }));
21
+ }
22
+ export function parseDateValue(text) {
23
+ if (typeof text !== 'string')
24
+ return fail('construction', 'invalid-date-text', 'Date text must be a string.');
25
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(text);
26
+ return match === null
27
+ ? fail('transition-rejection', 'invalid-date-format', 'Date text must use YYYY-MM-DD.', { text })
28
+ : tryCreateDateValue(Number(match[1]), Number(match[2]), Number(match[3]));
29
+ }
30
+ export function formatDateValue(value) {
31
+ return `${String(value.year).padStart(4, '0')}-${String(value.month).padStart(2, '0')}-${String(value.day).padStart(2, '0')}`;
32
+ }
33
+ export function compareDateValues(left, right) {
34
+ const leftDay = dateToOrdinal(left);
35
+ const rightDay = dateToOrdinal(right);
36
+ return leftDay < rightDay ? -1 : leftDay > rightDay ? 1 : 0;
37
+ }
38
+ export function differenceInDateDays(left, right) {
39
+ return dateToOrdinal(left) - dateToOrdinal(right);
40
+ }
41
+ /** ISO weekday: Monday is 1 and Sunday is 7. */
42
+ export function dateDayOfWeek(value) {
43
+ const thursday = dateToOrdinal(Object.freeze({ year: 1970, month: 1, day: 1 }));
44
+ return (((dateToOrdinal(value) - thursday + 3) % 7 + 7) % 7 + 1);
45
+ }
46
+ export function addDateDays(value, amount) {
47
+ if (!Number.isSafeInteger(amount))
48
+ return fail('transition-rejection', 'invalid-date-day-delta', 'Date day delta must be a safe integer.');
49
+ const result = ordinalToDate(dateToOrdinal(value) + amount);
50
+ return result.year < 1 || result.year > 9_999
51
+ ? fail('transition-rejection', 'date-outside-supported-range', 'Date arithmetic must remain between years 1 and 9999.')
52
+ : ok(result);
53
+ }
54
+ export function addDateMonths(value, amount) {
55
+ if (!Number.isSafeInteger(amount))
56
+ return fail('transition-rejection', 'invalid-date-month-delta', 'Date month delta must be a safe integer.');
57
+ const absolute = value.year * 12 + value.month - 1 + amount;
58
+ const year = Math.floor(absolute / 12);
59
+ const month = absolute - year * 12 + 1;
60
+ if (year < 1 || year > 9_999)
61
+ return fail('transition-rejection', 'date-outside-supported-range', 'Date arithmetic must remain between years 1 and 9999.');
62
+ return tryCreateDateValue(year, month, Math.min(value.day, daysInMonth(year, month)));
63
+ }
64
+ export function addDateYears(value, amount) {
65
+ if (!Number.isSafeInteger(amount))
66
+ return fail('transition-rejection', 'invalid-date-year-delta', 'Date year delta must be a safe integer.');
67
+ const year = value.year + amount;
68
+ if (year < 1 || year > 9_999)
69
+ return fail('transition-rejection', 'date-outside-supported-range', 'Date arithmetic must remain between years 1 and 9999.');
70
+ return tryCreateDateValue(year, value.month, Math.min(value.day, daysInMonth(year, value.month)));
71
+ }
72
+ export function createDateRange(start, end) {
73
+ return unwrap(tryCreateDateRange(start, end));
74
+ }
75
+ export function tryCreateDateRange(start, end) {
76
+ const validStart = tryCreateDateValue(start.year, start.month, start.day);
77
+ if (!validStart.ok)
78
+ return validStart;
79
+ const validEnd = tryCreateDateValue(end.year, end.month, end.day);
80
+ if (!validEnd.ok)
81
+ return validEnd;
82
+ if (compareDateValues(validStart.value, validEnd.value) > 0) {
83
+ return fail('construction', 'inverted-date-range', 'Date range start must not follow its end.');
84
+ }
85
+ return ok(Object.freeze({ start: validStart.value, end: validEnd.value }));
86
+ }
87
+ export function dateRangeContains(range, value) {
88
+ return compareDateValues(range.start, value) <= 0 && compareDateValues(value, range.end) <= 0;
89
+ }
90
+ export function createDateFieldState(value = null, inputState) {
91
+ return unwrap(tryCreateDateFieldState(value, inputState));
92
+ }
93
+ export function tryCreateDateFieldState(value = null, inputState) {
94
+ const valid = value === null ? ok(null) : tryCreateDateValue(value.year, value.month, value.day);
95
+ if (!valid.ok)
96
+ return valid;
97
+ const input = inputState === undefined
98
+ ? committedInput(valid.value)
99
+ : normalizeTextEditingState(inputState);
100
+ if (!input.ok)
101
+ return input;
102
+ if (input.value.snapshot.text.length > DATE_FIELD_MAX_CODE_UNITS) {
103
+ return fail('construction', 'date-field-draft-too-long', 'Date field drafts must fit YYYY-MM-DD.');
104
+ }
105
+ return ok(Object.freeze({ value: valid.value, inputState: input.value }));
106
+ }
107
+ export function applyDateFieldEvent(state, event, policies = {}) {
108
+ const valid = tryCreateDateFieldState(state.value, state.inputState);
109
+ if (!valid.ok)
110
+ return transitionFailure(valid);
111
+ const bounds = validatePolicies(policies);
112
+ if (!bounds.ok)
113
+ return bounds;
114
+ if (typeof event === 'object' && event.type === 'text') {
115
+ const edited = applyTextEvent(valid.value.inputState, event.event);
116
+ if (!edited.ok)
117
+ return edited;
118
+ if (edited.value.state.snapshot.text.length > DATE_FIELD_MAX_CODE_UNITS) {
119
+ return fail('transition-rejection', 'date-field-draft-too-long', 'Date field drafts must fit YYYY-MM-DD.');
120
+ }
121
+ return createMachineUpdate(Object.freeze({ value: valid.value.value, inputState: edited.value.state }), [
122
+ { type: 'input-state-changed', value: edited.value.state },
123
+ ]);
124
+ }
125
+ if (typeof event === 'object' && event.type === 'set-value') {
126
+ return commitValue(event.value, policies);
127
+ }
128
+ if (event === 'cancel') {
129
+ const input = committedInput(valid.value.value);
130
+ if (!input.ok)
131
+ return input;
132
+ return createMachineUpdate(Object.freeze({ value: valid.value.value, inputState: input.value }), [
133
+ { type: 'input-state-changed', value: input.value },
134
+ ]);
135
+ }
136
+ if (event === 'increment-segment' || event === 'decrement-segment') {
137
+ const draft = parseDateValue(valid.value.inputState.snapshot.text);
138
+ if (!draft.ok && valid.value.value === null)
139
+ return draft;
140
+ const base = draft.ok ? draft.value : valid.value.value;
141
+ if (base === null)
142
+ return fail('transition-rejection', 'date-field-value-missing', 'Date field has no value to adjust.');
143
+ const amount = event === 'increment-segment' ? 1 : -1;
144
+ const segment = dateSegmentAt(valid.value.inputState.snapshot.selection.focusCodeUnitOffset);
145
+ const adjusted = segment === 'year' ? addDateYears(base, amount)
146
+ : segment === 'month' ? addDateMonths(base, amount)
147
+ : addDateDays(base, amount);
148
+ return adjusted.ok ? commitValue(adjusted.value, policies, segment) : adjusted;
149
+ }
150
+ if (event !== 'commit')
151
+ return fail('transition-rejection', 'unsupported-date-field-event', 'Date field event is unsupported.');
152
+ if (valid.value.inputState.composition !== null)
153
+ return fail('transition-rejection', 'date-field-composition-active', 'Date field cannot commit while text composition is active.');
154
+ const text = valid.value.inputState.snapshot.text.trim();
155
+ if (text.length === 0)
156
+ return commitValue(null, policies);
157
+ const parsed = parseDateValue(text);
158
+ return parsed.ok ? commitValue(parsed.value, policies) : parsed;
159
+ }
160
+ export function dateSegmentAt(offset) {
161
+ return offset <= 4 ? 'year' : offset <= 7 ? 'month' : 'day';
162
+ }
163
+ export function daysInMonth(year, month) {
164
+ return month === 2 ? (isLeapYear(year) ? 29 : 28) : (month === 4 || month === 6 || month === 9 || month === 11 ? 30 : 31);
165
+ }
166
+ export function isLeapYear(year) {
167
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
168
+ }
169
+ function commitValue(value, policies, segment) {
170
+ if (value === null) {
171
+ if (policies.required === true)
172
+ return fail('transition-rejection', 'date-field-value-required', 'Date field requires a value.');
173
+ }
174
+ else {
175
+ const valid = tryCreateDateValue(value.year, value.month, value.day);
176
+ if (!valid.ok)
177
+ return transitionFailure(valid);
178
+ value = valid.value;
179
+ if (policies.min !== undefined && compareDateValues(value, policies.min) < 0)
180
+ return fail('transition-rejection', 'date-field-value-below-minimum', 'Date field value is below its minimum.');
181
+ if (policies.max !== undefined && compareDateValues(value, policies.max) > 0)
182
+ return fail('transition-rejection', 'date-field-value-above-maximum', 'Date field value is above its maximum.');
183
+ if (policies.unavailable?.(value) === true)
184
+ return fail('transition-rejection', 'date-field-value-unavailable', 'Date field value is unavailable.');
185
+ }
186
+ const input = committedInput(value, segment);
187
+ if (!input.ok)
188
+ return input;
189
+ return createMachineUpdate(Object.freeze({ value, inputState: input.value }), [
190
+ { type: 'input-state-changed', value: input.value },
191
+ { type: 'value-committed', value },
192
+ ]);
193
+ }
194
+ function committedInput(value, segment) {
195
+ const text = value === null ? '' : formatDateValue(value);
196
+ const selection = segment === undefined ? { anchorCodeUnitOffset: text.length, focusCodeUnitOffset: text.length }
197
+ : segment === 'year' ? { anchorCodeUnitOffset: 0, focusCodeUnitOffset: 4 }
198
+ : segment === 'month' ? { anchorCodeUnitOffset: 5, focusCodeUnitOffset: 7 }
199
+ : { anchorCodeUnitOffset: 8, focusCodeUnitOffset: 10 };
200
+ return tryCreateTextEditingState(text, selection);
201
+ }
202
+ function validatePolicies(policies) {
203
+ if (policies.unavailable !== undefined && typeof policies.unavailable !== 'function')
204
+ return fail('construction', 'invalid-date-unavailable-policy', 'Date unavailable policy must be a function.');
205
+ if (policies.min !== undefined) {
206
+ const min = tryCreateDateValue(policies.min.year, policies.min.month, policies.min.day);
207
+ if (!min.ok)
208
+ return min;
209
+ }
210
+ if (policies.max !== undefined) {
211
+ const max = tryCreateDateValue(policies.max.year, policies.max.month, policies.max.day);
212
+ if (!max.ok)
213
+ return max;
214
+ }
215
+ if (policies.min !== undefined && policies.max !== undefined && compareDateValues(policies.min, policies.max) > 0)
216
+ return fail('construction', 'inverted-date-field-bounds', 'Date field minimum must not follow its maximum.');
217
+ return ok(true);
218
+ }
219
+ function transitionFailure(result) {
220
+ return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } };
221
+ }
222
+ function dateToOrdinal(value) {
223
+ let year = value.year;
224
+ const month = value.month;
225
+ year -= month <= 2 ? 1 : 0;
226
+ const era = Math.floor(year / 400);
227
+ const yearOfEra = year - era * 400;
228
+ const monthPrime = month + (month > 2 ? -3 : 9);
229
+ const dayOfYear = Math.floor((153 * monthPrime + 2) / 5) + value.day - 1;
230
+ const dayOfEra = yearOfEra * 365 + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100) + dayOfYear;
231
+ return era * 146097 + dayOfEra;
232
+ }
233
+ function ordinalToDate(ordinal) {
234
+ const era = Math.floor(ordinal / 146097);
235
+ const dayOfEra = ordinal - era * 146097;
236
+ const yearOfEra = Math.floor((dayOfEra - Math.floor(dayOfEra / 1460) + Math.floor(dayOfEra / 36524) - Math.floor(dayOfEra / 146096)) / 365);
237
+ let year = yearOfEra + era * 400;
238
+ const dayOfYear = dayOfEra - (365 * yearOfEra + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100));
239
+ const monthPrime = Math.floor((5 * dayOfYear + 2) / 153);
240
+ const day = dayOfYear - Math.floor((153 * monthPrime + 2) / 5) + 1;
241
+ const month = monthPrime + (monthPrime < 10 ? 3 : -9);
242
+ year += month <= 2 ? 1 : 0;
243
+ return Object.freeze({ year, month, day });
244
+ }
245
+ //# sourceMappingURL=date-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-field.js","sourceRoot":"","sources":["../src/date-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Result } from '@sectile/core';
2
+ import { type CalendarCommand, type CalendarEvent, type CalendarPolicies, type CalendarState, type CalendarStateInput } from './calendar.js';
3
+ export interface DatePickerState extends CalendarState {
4
+ readonly open: boolean;
5
+ }
6
+ export type DatePickerEvent = CalendarEvent | 'open' | 'close' | 'toggle';
7
+ export type DatePickerCommand = CalendarCommand | {
8
+ readonly type: 'open-changed';
9
+ readonly open: boolean;
10
+ };
11
+ export interface DatePickerPolicies extends CalendarPolicies {
12
+ }
13
+ export type DatePickerUnavailablePredicate = NonNullable<DatePickerPolicies['unavailable']>;
14
+ export interface DatePickerUpdate {
15
+ readonly state: DatePickerState;
16
+ readonly commands: readonly DatePickerCommand[];
17
+ }
18
+ export interface DatePickerStateInput extends CalendarStateInput {
19
+ readonly open?: boolean;
20
+ }
21
+ export declare function createDatePickerState(input?: DatePickerStateInput): DatePickerState;
22
+ export declare function tryCreateDatePickerState(input?: DatePickerStateInput): Result<DatePickerState>;
23
+ export declare function applyDatePickerEvent(state: DatePickerState, event: DatePickerEvent, policies?: DatePickerPolicies): Result<DatePickerUpdate>;
24
+ //# sourceMappingURL=date-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../src/date-picker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AAIvB,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1E,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5G,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;CAAG;AAE/D,MAAM,MAAM,8BAA8B,GAAG,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,GAAE,oBAAyB,GAAG,eAAe,CAEvF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,GAAE,oBAAyB,GAAG,MAAM,CAAC,eAAe,CAAC,CAKlG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,GAAE,kBAAuB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAehJ"}
@@ -0,0 +1,47 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { applyCalendarEvent, tryCreateCalendarState, } from './calendar.js';
3
+ import { fail, ok } from './internal/foundation.js';
4
+ import { createMachineUpdate } from './internal/machine.js';
5
+ export function createDatePickerState(input = {}) {
6
+ return unwrap(tryCreateDatePickerState(input));
7
+ }
8
+ export function tryCreateDatePickerState(input = {}) {
9
+ const calendar = tryCreateCalendarState(input);
10
+ if (!calendar.ok)
11
+ return calendar;
12
+ if (typeof input.open !== 'undefined' && typeof input.open !== 'boolean')
13
+ return fail('construction', 'invalid-date-picker-open', 'Date picker open state must be boolean.');
14
+ return ok(pickerState(calendar.value, input.open ?? false));
15
+ }
16
+ export function applyDatePickerEvent(state, event, policies = {}) {
17
+ const valid = tryCreateDatePickerState(state);
18
+ if (!valid.ok)
19
+ return invalidTransition(valid);
20
+ if (event === 'open' || event === 'close' || event === 'toggle') {
21
+ const open = event === 'toggle' ? !state.open : event === 'open';
22
+ if (open === state.open)
23
+ return createMachineUpdate(state);
24
+ return createMachineUpdate(pickerState(state, open), [{ type: 'open-changed', open }]);
25
+ }
26
+ const calendar = applyCalendarEvent(state, event, policies);
27
+ if (!calendar.ok)
28
+ return calendar;
29
+ const open = closesPicker(event) ? false : state.open;
30
+ return createMachineUpdate(pickerState(calendar.value.state, open), [
31
+ ...calendar.value.commands,
32
+ ...openChanged(state.open, open),
33
+ ]);
34
+ }
35
+ function pickerState(calendar, open) {
36
+ return Object.freeze({ ...calendar, open });
37
+ }
38
+ function closesPicker(event) {
39
+ return event === 'select-highlighted' || (typeof event === 'object' && event.type === 'select');
40
+ }
41
+ function openChanged(previous, next) {
42
+ return previous === next ? [] : [{ type: 'open-changed', open: next }];
43
+ }
44
+ function invalidTransition(result) {
45
+ return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } };
46
+ }
47
+ //# sourceMappingURL=date-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../src/date-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { Result } from '@sectile/core';
2
+ import type { TextEditingState } from '@sectile/core/text';
3
+ import { type DateFieldEvent, type DateFieldPolicies, type DateFieldState, type DateRange, type DateValue } from './date-field.js';
4
+ export type DateRangeFieldEndpoint = 'start' | 'end';
5
+ export interface DateRangeFieldState {
6
+ readonly value: DateRange | null;
7
+ readonly start: DateFieldState;
8
+ readonly end: DateFieldState;
9
+ readonly active: DateRangeFieldEndpoint;
10
+ }
11
+ export interface DateRangeFieldStateInput {
12
+ readonly value?: DateRange | null;
13
+ readonly startValue?: DateValue | null;
14
+ readonly endValue?: DateValue | null;
15
+ readonly startInputState?: TextEditingState;
16
+ readonly endInputState?: TextEditingState;
17
+ readonly active?: DateRangeFieldEndpoint;
18
+ }
19
+ export type DateRangeFieldEvent = {
20
+ readonly type: 'field';
21
+ readonly endpoint: DateRangeFieldEndpoint;
22
+ readonly event: DateFieldEvent;
23
+ } | {
24
+ readonly type: 'focus';
25
+ readonly endpoint: DateRangeFieldEndpoint;
26
+ } | 'cancel';
27
+ export type DateRangeFieldCommand = {
28
+ readonly type: 'input-state-changed';
29
+ readonly endpoint: DateRangeFieldEndpoint;
30
+ readonly value: TextEditingState;
31
+ } | {
32
+ readonly type: 'range-committed';
33
+ readonly value: DateRange | null;
34
+ } | {
35
+ readonly type: 'focus-endpoint';
36
+ readonly endpoint: DateRangeFieldEndpoint;
37
+ };
38
+ export interface DateRangeFieldPolicies extends DateFieldPolicies {
39
+ }
40
+ export interface DateRangeFieldUpdate {
41
+ readonly state: DateRangeFieldState;
42
+ readonly commands: readonly DateRangeFieldCommand[];
43
+ }
44
+ export declare function createDateRangeFieldState(input?: DateRangeFieldStateInput): DateRangeFieldState;
45
+ export declare function tryCreateDateRangeFieldState(input?: DateRangeFieldStateInput): Result<DateRangeFieldState>;
46
+ export declare function applyDateRangeFieldEvent(state: DateRangeFieldState, event: DateRangeFieldEvent, policies?: DateRangeFieldPolicies): Result<DateRangeFieldUpdate>;
47
+ //# sourceMappingURL=date-range-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-field.d.ts","sourceRoot":"","sources":["../src/date-range-field.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAiF,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAA6C,MAAM,iBAAiB,CAAC;AAE7P,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,KAAK,CAAC;AACrD,MAAM,WAAW,mBAAmB;IAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE;AAChL,MAAM,WAAW,wBAAwB;IAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAAE;AAC/R,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,GAAG,QAAQ,CAAC;AAC3N,MAAM,MAAM,qBAAqB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,CAAC;AACpT,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;CAAG;AACpE,MAAM,WAAW,oBAAoB;IAAG,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAAE;AAElI,wBAAgB,yBAAyB,CAAC,KAAK,GAAE,wBAA6B,GAAG,mBAAmB,CAEnG;AAED,wBAAgB,4BAA4B,CAAC,KAAK,GAAE,wBAA6B,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAW9G;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,GAAE,sBAA2B,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAqBpK"}
@@ -0,0 +1,66 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { fail, ok } from './internal/foundation.js';
3
+ import { createMachineUpdate } from './internal/machine.js';
4
+ import { applyDateFieldEvent, compareDateValues, createDateFieldState, createDateRange, tryCreateDateFieldState, tryCreateDateRange } from './date-field.js';
5
+ export function createDateRangeFieldState(input = {}) {
6
+ return unwrap(tryCreateDateRangeFieldState(input));
7
+ }
8
+ export function tryCreateDateRangeFieldState(input = {}) {
9
+ const range = input.value === undefined || input.value === null ? ok(null) : completeRange(input.value.start, input.value.end, 'construction');
10
+ if (!range.ok)
11
+ return range;
12
+ const startValue = input.startValue !== undefined ? input.startValue : range.value?.start ?? null;
13
+ const endValue = input.endValue !== undefined ? input.endValue : range.value?.end ?? null;
14
+ const start = tryCreateDateFieldState(startValue, input.startInputState);
15
+ if (!start.ok)
16
+ return start;
17
+ const end = tryCreateDateFieldState(endValue, input.endInputState);
18
+ if (!end.ok)
19
+ return end;
20
+ const value = completeRange(start.value.value, end.value.value, 'construction');
21
+ if (!value.ok)
22
+ return value;
23
+ const active = input.active ?? 'start';
24
+ if (active !== 'start' && active !== 'end')
25
+ return fail('construction', 'invalid-date-range-field-endpoint', 'Date range field active endpoint must be start or end.');
26
+ return ok(Object.freeze({ value: value.value, start: start.value, end: end.value, active }));
27
+ }
28
+ export function applyDateRangeFieldEvent(state, event, policies = {}) {
29
+ const valid = tryCreateDateRangeFieldState({ startValue: state.start.value, endValue: state.end.value, startInputState: state.start.inputState, endInputState: state.end.inputState, active: state.active });
30
+ if (!valid.ok)
31
+ return invalidTransition(valid);
32
+ if (event === 'cancel') {
33
+ const start = applyDateFieldEvent(valid.value.start, 'cancel', endpointPolicies(policies));
34
+ if (!start.ok)
35
+ return start;
36
+ const end = applyDateFieldEvent(valid.value.end, 'cancel', endpointPolicies(policies));
37
+ if (!end.ok)
38
+ return end;
39
+ return composeState(start.value.state, end.value.state, valid.value.active, [
40
+ { type: 'input-state-changed', endpoint: 'start', value: start.value.state.inputState },
41
+ { type: 'input-state-changed', endpoint: 'end', value: end.value.state.inputState },
42
+ ]);
43
+ }
44
+ if (event.type === 'focus')
45
+ return createMachineUpdate(Object.freeze({ ...valid.value, active: event.endpoint }), [{ type: 'focus-endpoint', endpoint: event.endpoint }]);
46
+ const active = event.endpoint;
47
+ const changed = applyDateFieldEvent(active === 'start' ? valid.value.start : valid.value.end, event.event, endpointPolicies(policies));
48
+ if (!changed.ok)
49
+ return changed;
50
+ const start = active === 'start' ? changed.value.state : valid.value.start;
51
+ const end = active === 'end' ? changed.value.state : valid.value.end;
52
+ const next = completeRange(start.value, end.value);
53
+ if (!next.ok)
54
+ return next;
55
+ const commands = changed.value.commands.filter((command) => command.type === 'input-state-changed').map((command) => ({ type: 'input-state-changed', endpoint: active, value: command.value }));
56
+ if ((event.event === 'commit' || typeof event.event === 'object' && event.event.type === 'set-value') && !sameRange(valid.value.value, next.value))
57
+ commands.push({ type: 'range-committed', value: next.value });
58
+ return composeState(start, end, active, commands);
59
+ }
60
+ function composeState(start, end, active, commands) { const value = completeRange(start.value, end.value); return value.ok ? createMachineUpdate(Object.freeze({ value: value.value, start, end, active }), commands) : value; }
61
+ function completeRange(start, end, errorClass = 'transition-rejection') { if (start === null || end === null)
62
+ return ok(null); const range = tryCreateDateRange(start, end); return range.ok ? ok(range.value) : fail(errorClass, 'inverted-date-range-field', 'Date range field start must not be after end.'); }
63
+ function endpointPolicies(policies) { const { required: _required, ...rest } = policies; return rest; }
64
+ function sameRange(left, right) { return left === null || right === null ? left === right : compareDateValues(left.start, right.start) === 0 && compareDateValues(left.end, right.end) === 0; }
65
+ function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
66
+ //# sourceMappingURL=date-range-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-field.js","sourceRoot":"","sources":["../src/date-range-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Result } from '@sectile/core';
2
+ import { type DateRange, type DateValue } from './date-field.js';
3
+ import { type DatePickerCommand, type DatePickerEvent, type DatePickerPolicies, type DatePickerState } from './date-picker.js';
4
+ export interface DateRangePickerState {
5
+ readonly value: DateRange | null;
6
+ readonly anchor: DateValue | null;
7
+ readonly calendar: DatePickerState;
8
+ }
9
+ export type DateRangePickerEvent = DatePickerEvent | 'clear';
10
+ export type DateRangePickerCommand = DatePickerCommand | {
11
+ readonly type: 'range-committed';
12
+ readonly value: DateRange | null;
13
+ } | {
14
+ readonly type: 'range-anchor-changed';
15
+ readonly value: DateValue | null;
16
+ };
17
+ export interface DateRangePickerUpdate {
18
+ readonly state: DateRangePickerState;
19
+ readonly commands: readonly DateRangePickerCommand[];
20
+ }
21
+ export interface DateRangePickerStateInput {
22
+ readonly value?: DateRange | null;
23
+ readonly anchor?: DateValue | null;
24
+ readonly calendar?: Partial<DatePickerState>;
25
+ }
26
+ export declare function createDateRangePickerState(input?: DateRangePickerStateInput): DateRangePickerState;
27
+ export declare function tryCreateDateRangePickerState(input?: DateRangePickerStateInput): Result<DateRangePickerState>;
28
+ export declare function applyDateRangePickerEvent(state: DateRangePickerState, event: DateRangePickerEvent, policies?: DatePickerPolicies): Result<DateRangePickerUpdate>;
29
+ //# sourceMappingURL=date-range-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-picker.d.ts","sourceRoot":"","sources":["../src/date-range-picker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAuD,KAAK,SAAS,EAAE,KAAK,SAAS,EAAwC,MAAM,iBAAiB,CAAC;AAE5J,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC;AAED,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,sBAAsB,GAC9B,iBAAiB,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,GAAE,yBAA8B,GAAG,oBAAoB,CAEtG;AAED,wBAAgB,6BAA6B,CAAC,KAAK,GAAE,yBAA8B,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAqBjH;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,GAAE,kBAAuB,GAChC,MAAM,CAAC,qBAAqB,CAAC,CAoB/B"}
@@ -0,0 +1,90 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { fail, ok } from './internal/foundation.js';
3
+ import { createMachineUpdate } from './internal/machine.js';
4
+ import { compareDateValues, createDateRange, createDateValue, tryCreateDateRange, tryCreateDateValue } from './date-field.js';
5
+ import { isCalendarValueAvailable } from './calendar.js';
6
+ import { applyDatePickerEvent, createDatePickerState, tryCreateDatePickerState, } from './date-picker.js';
7
+ export function createDateRangePickerState(input = {}) {
8
+ return unwrap(tryCreateDateRangePickerState(input));
9
+ }
10
+ export function tryCreateDateRangePickerState(input = {}) {
11
+ let value = null;
12
+ if (input.value !== undefined && input.value !== null) {
13
+ const valid = tryCreateDateRange(input.value.start, input.value.end);
14
+ if (!valid.ok)
15
+ return valid;
16
+ value = valid.value;
17
+ }
18
+ let anchor = null;
19
+ if (input.anchor !== undefined && input.anchor !== null) {
20
+ const valid = tryCreateDateValue(input.anchor.year, input.anchor.month, input.anchor.day);
21
+ if (!valid.ok)
22
+ return valid;
23
+ anchor = valid.value;
24
+ }
25
+ const fallback = anchor ?? value?.end;
26
+ const calendar = tryCreateDatePickerState({
27
+ value: null,
28
+ ...(input.calendar?.highlighted === undefined && fallback !== undefined ? { highlighted: fallback } : {}),
29
+ ...input.calendar,
30
+ });
31
+ if (!calendar.ok)
32
+ return calendar;
33
+ return ok(Object.freeze({ value, anchor, calendar: calendar.value }));
34
+ }
35
+ export function applyDateRangePickerEvent(state, event, policies = {}) {
36
+ const valid = tryCreateDateRangePickerState(state);
37
+ if (!valid.ok)
38
+ return invalidTransition(valid);
39
+ if (event === 'clear') {
40
+ if (policies.required === true)
41
+ return fail('transition-rejection', 'date-range-picker-value-required', 'Date range picker requires a range.');
42
+ return createMachineUpdate(Object.freeze({ value: null, anchor: null, calendar: state.calendar }), [
43
+ { type: 'range-committed', value: null },
44
+ { type: 'range-anchor-changed', value: null },
45
+ ]);
46
+ }
47
+ const selected = event === 'select-highlighted' ? state.calendar.highlighted
48
+ : typeof event === 'object' && event.type === 'select' ? event.value
49
+ : null;
50
+ if (selected !== null)
51
+ return selectDate(state, selected, policies);
52
+ if (typeof event === 'object' && event.type === 'set-value') {
53
+ return fail('transition-rejection', 'unsupported-date-range-picker-set-value', 'Date range picker values must be synchronized as ranges.');
54
+ }
55
+ const update = applyDatePickerEvent(state.calendar, event, policies);
56
+ if (!update.ok)
57
+ return update;
58
+ return createMachineUpdate(Object.freeze({ value: state.value, anchor: state.anchor, calendar: update.value.state }), update.value.commands);
59
+ }
60
+ function selectDate(state, requested, policies) {
61
+ const valid = tryCreateDateValue(requested.year, requested.month, requested.day);
62
+ if (!valid.ok)
63
+ return invalidTransition(valid);
64
+ if (!isCalendarValueAvailable(valid.value, policies))
65
+ return fail('transition-rejection', 'date-range-picker-value-unavailable', 'Date range endpoint is outside its selectable domain.');
66
+ if (state.anchor === null) {
67
+ const calendar = tryCreateDatePickerState({ ...state.calendar, value: null, highlighted: valid.value, view: { year: valid.value.year, month: valid.value.month }, open: true });
68
+ if (!calendar.ok)
69
+ return calendar;
70
+ return createMachineUpdate(Object.freeze({ value: state.value, anchor: valid.value, calendar: calendar.value }), [
71
+ { type: 'highlight-changed', value: valid.value },
72
+ { type: 'range-anchor-changed', value: valid.value },
73
+ ]);
74
+ }
75
+ const start = compareDateValues(state.anchor, valid.value) <= 0 ? state.anchor : valid.value;
76
+ const end = compareDateValues(state.anchor, valid.value) <= 0 ? valid.value : state.anchor;
77
+ const range = tryCreateDateRange(start, end);
78
+ if (!range.ok)
79
+ return range;
80
+ const calendar = tryCreateDatePickerState({ value: null, highlighted: valid.value, view: { year: valid.value.year, month: valid.value.month }, viewMode: state.calendar.viewMode, open: state.calendar.open });
81
+ if (!calendar.ok)
82
+ return calendar;
83
+ return createMachineUpdate(Object.freeze({ value: range.value, anchor: null, calendar: calendar.value }), [
84
+ { type: 'range-committed', value: range.value },
85
+ { type: 'range-anchor-changed', value: null },
86
+ { type: 'highlight-changed', value: valid.value },
87
+ ]);
88
+ }
89
+ function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
90
+ //# sourceMappingURL=date-range-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-picker.js","sourceRoot":"","sources":["../src/date-range-picker.ts"],"names":[],"mappings":"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"}