@sectile/core 0.1.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 +16 -0
- package/dist/accordion.d.ts +43 -0
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +83 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert-dialog.d.ts +18 -0
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +9 -0
- package/dist/alert-dialog.js.map +1 -0
- package/dist/calendar.d.ts +2 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +2 -0
- package/dist/calendar.js.map +1 -0
- package/dist/carousel.d.ts +40 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +51 -0
- package/dist/carousel.js.map +1 -0
- package/dist/checkbox-group.d.ts +12 -0
- package/dist/checkbox-group.d.ts.map +1 -0
- package/dist/checkbox-group.js +12 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.d.ts +2 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +2 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/combobox.d.ts +16 -0
- package/dist/combobox.d.ts.map +1 -0
- package/dist/combobox.js +42 -0
- package/dist/combobox.js.map +1 -0
- package/dist/date-field.d.ts +58 -0
- package/dist/date-field.d.ts.map +1 -0
- package/dist/date-field.js +233 -0
- package/dist/date-field.js.map +1 -0
- package/dist/date-picker.d.ts +53 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +157 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/date-range-picker.d.ts +28 -0
- package/dist/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker.js +85 -0
- package/dist/date-range-picker.js.map +1 -0
- package/dist/date-time-field.d.ts +53 -0
- package/dist/date-time-field.d.ts.map +1 -0
- package/dist/date-time-field.js +253 -0
- package/dist/date-time-field.js.map +1 -0
- package/dist/date-time-picker.d.ts +54 -0
- package/dist/date-time-picker.d.ts.map +1 -0
- package/dist/date-time-picker.js +151 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +67 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +226 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/dialog.d.ts +16 -0
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +5 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure.d.ts +2 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +2 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/feed.d.ts +29 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +26 -0
- package/dist/feed.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/interaction.d.ts +14 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +38 -0
- package/dist/interaction.js.map +1 -0
- package/dist/internal/composites/calendar.d.ts +35 -0
- package/dist/internal/composites/calendar.d.ts.map +1 -0
- package/dist/internal/composites/calendar.js +139 -0
- package/dist/internal/composites/calendar.js.map +1 -0
- package/dist/internal/composites/combobox.d.ts +41 -0
- package/dist/internal/composites/combobox.d.ts.map +1 -0
- package/dist/internal/composites/combobox.js +184 -0
- package/dist/internal/composites/combobox.js.map +1 -0
- package/dist/internal/composites/grid-control.d.ts +36 -0
- package/dist/internal/composites/grid-control.d.ts.map +1 -0
- package/dist/internal/composites/grid-control.js +86 -0
- package/dist/internal/composites/grid-control.js.map +1 -0
- package/dist/internal/composites/linear-action.d.ts +35 -0
- package/dist/internal/composites/linear-action.d.ts.map +1 -0
- package/dist/internal/composites/linear-action.js +92 -0
- package/dist/internal/composites/linear-action.js.map +1 -0
- package/dist/internal/composites/linear-choice.d.ts +41 -0
- package/dist/internal/composites/linear-choice.d.ts.map +1 -0
- package/dist/internal/composites/linear-choice.js +139 -0
- package/dist/internal/composites/linear-choice.js.map +1 -0
- package/dist/internal/composites/listbox.d.ts +50 -0
- package/dist/internal/composites/listbox.d.ts.map +1 -0
- package/dist/internal/composites/listbox.js +243 -0
- package/dist/internal/composites/listbox.js.map +1 -0
- package/dist/internal/composites/menu.d.ts +28 -0
- package/dist/internal/composites/menu.d.ts.map +1 -0
- package/dist/internal/composites/menu.js +72 -0
- package/dist/internal/composites/menu.js.map +1 -0
- package/dist/internal/composites/popup.d.ts +20 -0
- package/dist/internal/composites/popup.d.ts.map +1 -0
- package/dist/internal/composites/popup.js +8 -0
- package/dist/internal/composites/popup.js.map +1 -0
- package/dist/internal/composites/slider.d.ts +20 -0
- package/dist/internal/composites/slider.d.ts.map +1 -0
- package/dist/internal/composites/slider.js +69 -0
- package/dist/internal/composites/slider.js.map +1 -0
- package/dist/internal/composites/tree-grid.d.ts +65 -0
- package/dist/internal/composites/tree-grid.d.ts.map +1 -0
- package/dist/internal/composites/tree-grid.js +274 -0
- package/dist/internal/composites/tree-grid.js.map +1 -0
- package/dist/internal/composites/tree-view.d.ts +39 -0
- package/dist/internal/composites/tree-view.d.ts.map +1 -0
- package/dist/internal/composites/tree-view.js +175 -0
- package/dist/internal/composites/tree-view.js.map +1 -0
- package/dist/internal/editing/text.d.ts +64 -0
- package/dist/internal/editing/text.d.ts.map +1 -0
- package/dist/internal/editing/text.js +238 -0
- package/dist/internal/editing/text.js.map +1 -0
- package/dist/internal/kernel/decimal.d.ts +22 -0
- package/dist/internal/kernel/decimal.d.ts.map +1 -0
- package/dist/internal/kernel/decimal.js +137 -0
- package/dist/internal/kernel/decimal.js.map +1 -0
- package/dist/internal/kernel/foundation.d.ts +12 -0
- package/dist/internal/kernel/foundation.d.ts.map +1 -0
- package/dist/internal/kernel/foundation.js +132 -0
- package/dist/internal/kernel/foundation.js.map +1 -0
- package/dist/internal/kernel/indexed-sequence.d.ts +26 -0
- package/dist/internal/kernel/indexed-sequence.d.ts.map +1 -0
- package/dist/internal/kernel/indexed-sequence.js +117 -0
- package/dist/internal/kernel/indexed-sequence.js.map +1 -0
- package/dist/internal/kernel/machine.d.ts +8 -0
- package/dist/internal/kernel/machine.d.ts.map +1 -0
- package/dist/internal/kernel/machine.js +6 -0
- package/dist/internal/kernel/machine.js.map +1 -0
- package/dist/internal/runtime/revision.d.ts +22 -0
- package/dist/internal/runtime/revision.d.ts.map +1 -0
- package/dist/internal/runtime/revision.js +72 -0
- package/dist/internal/runtime/revision.js.map +1 -0
- package/dist/internal/state/checked.d.ts +21 -0
- package/dist/internal/state/checked.d.ts.map +1 -0
- package/dist/internal/state/checked.js +29 -0
- package/dist/internal/state/checked.js.map +1 -0
- package/dist/internal/state/cursor.d.ts +13 -0
- package/dist/internal/state/cursor.d.ts.map +1 -0
- package/dist/internal/state/cursor.js +24 -0
- package/dist/internal/state/cursor.js.map +1 -0
- package/dist/internal/state/expansion.d.ts +8 -0
- package/dist/internal/state/expansion.d.ts.map +1 -0
- package/dist/internal/state/expansion.js +23 -0
- package/dist/internal/state/expansion.js.map +1 -0
- package/dist/internal/state/open-state.d.ts +16 -0
- package/dist/internal/state/open-state.d.ts.map +1 -0
- package/dist/internal/state/open-state.js +25 -0
- package/dist/internal/state/open-state.js.map +1 -0
- package/dist/internal/state/selection.d.ts +23 -0
- package/dist/internal/state/selection.d.ts.map +1 -0
- package/dist/internal/state/selection.js +110 -0
- package/dist/internal/state/selection.js.map +1 -0
- package/dist/listbox.d.ts +2 -0
- package/dist/listbox.d.ts.map +1 -0
- package/dist/listbox.js +2 -0
- package/dist/listbox.js.map +1 -0
- package/dist/menu-button.d.ts +3 -0
- package/dist/menu-button.d.ts.map +1 -0
- package/dist/menu-button.js +3 -0
- package/dist/menu-button.js.map +1 -0
- package/dist/menu.d.ts +8 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +4 -0
- package/dist/menu.js.map +1 -0
- package/dist/menubar.d.ts +3 -0
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +3 -0
- package/dist/menubar.js.map +1 -0
- package/dist/multi-thumb-slider.d.ts +35 -0
- package/dist/multi-thumb-slider.d.ts.map +1 -0
- package/dist/multi-thumb-slider.js +68 -0
- package/dist/multi-thumb-slider.js.map +1 -0
- package/dist/number-field.d.ts +49 -0
- package/dist/number-field.d.ts.map +1 -0
- package/dist/number-field.js +454 -0
- package/dist/number-field.js.map +1 -0
- package/dist/pagination.d.ts +63 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +190 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pin-input.d.ts +29 -0
- package/dist/pin-input.d.ts.map +1 -0
- package/dist/pin-input.js +49 -0
- package/dist/pin-input.js.map +1 -0
- package/dist/quantity-field.d.ts +58 -0
- package/dist/quantity-field.d.ts.map +1 -0
- package/dist/quantity-field.js +250 -0
- package/dist/quantity-field.js.map +1 -0
- package/dist/radio-group.d.ts +22 -0
- package/dist/radio-group.d.ts.map +1 -0
- package/dist/radio-group.js +16 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/rating.d.ts +17 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +15 -0
- package/dist/rating.js.map +1 -0
- package/dist/result.d.ts +10 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +19 -0
- package/dist/result.js.map +1 -0
- package/dist/revision.d.ts +2 -0
- package/dist/revision.d.ts.map +1 -0
- package/dist/revision.js +2 -0
- package/dist/revision.js.map +1 -0
- package/dist/select.d.ts +30 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +28 -0
- package/dist/select.js.map +1 -0
- package/dist/shared.d.ts +42 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +3 -0
- package/dist/shared.js.map +1 -0
- package/dist/slider.d.ts +2 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +2 -0
- package/dist/slider.js.map +1 -0
- package/dist/spin-button.d.ts +29 -0
- package/dist/spin-button.d.ts.map +1 -0
- package/dist/spin-button.js +61 -0
- package/dist/spin-button.js.map +1 -0
- package/dist/stepper.d.ts +17 -0
- package/dist/stepper.d.ts.map +1 -0
- package/dist/stepper.js +12 -0
- package/dist/stepper.js.map +1 -0
- package/dist/structures/grid.d.ts +27 -0
- package/dist/structures/grid.d.ts.map +1 -0
- package/dist/structures/grid.js +197 -0
- package/dist/structures/grid.js.map +1 -0
- package/dist/structures/range.d.ts +39 -0
- package/dist/structures/range.d.ts.map +1 -0
- package/dist/structures/range.js +242 -0
- package/dist/structures/range.js.map +1 -0
- package/dist/structures/sequence.d.ts +17 -0
- package/dist/structures/sequence.d.ts.map +1 -0
- package/dist/structures/sequence.js +24 -0
- package/dist/structures/sequence.js.map +1 -0
- package/dist/structures/tree.d.ts +32 -0
- package/dist/structures/tree.d.ts.map +1 -0
- package/dist/structures/tree.js +234 -0
- package/dist/structures/tree.js.map +1 -0
- package/dist/switch.d.ts +20 -0
- package/dist/switch.d.ts.map +1 -0
- package/dist/switch.js +4 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +15 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +23 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tags-input.d.ts +41 -0
- package/dist/tags-input.d.ts.map +1 -0
- package/dist/tags-input.js +44 -0
- package/dist/tags-input.js.map +1 -0
- package/dist/text.d.ts +2 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +2 -0
- package/dist/text.js.map +1 -0
- package/dist/time-field.d.ts +46 -0
- package/dist/time-field.d.ts.map +1 -0
- package/dist/time-field.js +148 -0
- package/dist/time-field.js.map +1 -0
- package/dist/toggle-button.d.ts +19 -0
- package/dist/toggle-button.d.ts.map +1 -0
- package/dist/toggle-button.js +16 -0
- package/dist/toggle-button.js.map +1 -0
- package/dist/toolbar.d.ts +2 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +2 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tooltip.d.ts +2 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +2 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree-grid.d.ts +10 -0
- package/dist/tree-grid.d.ts.map +1 -0
- package/dist/tree-grid.js +14 -0
- package/dist/tree-grid.js.map +1 -0
- package/dist/tree-view.d.ts +2 -0
- package/dist/tree-view.d.ts.map +1 -0
- package/dist/tree-view.js +2 -0
- package/dist/tree-view.js.map +1 -0
- package/dist/units.d.ts +72 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +496 -0
- package/dist/units.js.map +1 -0
- package/dist/window-splitter.d.ts +2 -0
- package/dist/window-splitter.d.ts.map +1 -0
- package/dist/window-splitter.js +2 -0
- package/dist/window-splitter.js.map +1 -0
- package/package.json +304 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
2
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
3
|
+
import { applyTextEvent, createTextEditingState, normalizeTextEditingState, } from './text.js';
|
|
4
|
+
const DATE_FIELD_MAX_CODE_UNITS = 10;
|
|
5
|
+
export function createDateValue(year, month, day) {
|
|
6
|
+
if (!Number.isSafeInteger(year) || year < 1 || year > 9_999) {
|
|
7
|
+
return fail('construction', 'invalid-date-year', 'Date year must be an integer from 1 through 9999.', { year });
|
|
8
|
+
}
|
|
9
|
+
if (!Number.isSafeInteger(month) || month < 1 || month > 12) {
|
|
10
|
+
return fail('construction', 'invalid-date-month', 'Date month must be an integer from 1 through 12.', { month });
|
|
11
|
+
}
|
|
12
|
+
const maximum = daysInMonth(year, month);
|
|
13
|
+
if (!Number.isSafeInteger(day) || day < 1 || day > maximum) {
|
|
14
|
+
return fail('construction', 'invalid-date-day', 'Date day must exist in its Gregorian month.', { year, month, day });
|
|
15
|
+
}
|
|
16
|
+
return ok(Object.freeze({ year, month, day }));
|
|
17
|
+
}
|
|
18
|
+
export function parseDateValue(text) {
|
|
19
|
+
if (typeof text !== 'string')
|
|
20
|
+
return fail('construction', 'invalid-date-text', 'Date text must be a string.');
|
|
21
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(text);
|
|
22
|
+
return match === null
|
|
23
|
+
? fail('transition-rejection', 'invalid-date-format', 'Date text must use YYYY-MM-DD.', { text })
|
|
24
|
+
: createDateValue(Number(match[1]), Number(match[2]), Number(match[3]));
|
|
25
|
+
}
|
|
26
|
+
export function formatDateValue(value) {
|
|
27
|
+
return `${String(value.year).padStart(4, '0')}-${String(value.month).padStart(2, '0')}-${String(value.day).padStart(2, '0')}`;
|
|
28
|
+
}
|
|
29
|
+
export function compareDateValues(left, right) {
|
|
30
|
+
const leftDay = dateToOrdinal(left);
|
|
31
|
+
const rightDay = dateToOrdinal(right);
|
|
32
|
+
return leftDay < rightDay ? -1 : leftDay > rightDay ? 1 : 0;
|
|
33
|
+
}
|
|
34
|
+
export function differenceInDateDays(left, right) {
|
|
35
|
+
return dateToOrdinal(left) - dateToOrdinal(right);
|
|
36
|
+
}
|
|
37
|
+
/** ISO weekday: Monday is 1 and Sunday is 7. */
|
|
38
|
+
export function dateDayOfWeek(value) {
|
|
39
|
+
const thursday = dateToOrdinal(Object.freeze({ year: 1970, month: 1, day: 1 }));
|
|
40
|
+
return (((dateToOrdinal(value) - thursday + 3) % 7 + 7) % 7 + 1);
|
|
41
|
+
}
|
|
42
|
+
export function addDateDays(value, amount) {
|
|
43
|
+
if (!Number.isSafeInteger(amount))
|
|
44
|
+
return fail('transition-rejection', 'invalid-date-day-delta', 'Date day delta must be a safe integer.');
|
|
45
|
+
const result = ordinalToDate(dateToOrdinal(value) + amount);
|
|
46
|
+
return result.year < 1 || result.year > 9_999
|
|
47
|
+
? fail('transition-rejection', 'date-outside-supported-range', 'Date arithmetic must remain between years 1 and 9999.')
|
|
48
|
+
: ok(result);
|
|
49
|
+
}
|
|
50
|
+
export function addDateMonths(value, amount) {
|
|
51
|
+
if (!Number.isSafeInteger(amount))
|
|
52
|
+
return fail('transition-rejection', 'invalid-date-month-delta', 'Date month delta must be a safe integer.');
|
|
53
|
+
const absolute = value.year * 12 + value.month - 1 + amount;
|
|
54
|
+
const year = Math.floor(absolute / 12);
|
|
55
|
+
const month = absolute - year * 12 + 1;
|
|
56
|
+
if (year < 1 || year > 9_999)
|
|
57
|
+
return fail('transition-rejection', 'date-outside-supported-range', 'Date arithmetic must remain between years 1 and 9999.');
|
|
58
|
+
return createDateValue(year, month, Math.min(value.day, daysInMonth(year, month)));
|
|
59
|
+
}
|
|
60
|
+
export function addDateYears(value, amount) {
|
|
61
|
+
if (!Number.isSafeInteger(amount))
|
|
62
|
+
return fail('transition-rejection', 'invalid-date-year-delta', 'Date year delta must be a safe integer.');
|
|
63
|
+
const year = value.year + amount;
|
|
64
|
+
if (year < 1 || year > 9_999)
|
|
65
|
+
return fail('transition-rejection', 'date-outside-supported-range', 'Date arithmetic must remain between years 1 and 9999.');
|
|
66
|
+
return createDateValue(year, value.month, Math.min(value.day, daysInMonth(year, value.month)));
|
|
67
|
+
}
|
|
68
|
+
export function createDateRange(start, end) {
|
|
69
|
+
const validStart = createDateValue(start.year, start.month, start.day);
|
|
70
|
+
if (!validStart.ok)
|
|
71
|
+
return validStart;
|
|
72
|
+
const validEnd = createDateValue(end.year, end.month, end.day);
|
|
73
|
+
if (!validEnd.ok)
|
|
74
|
+
return validEnd;
|
|
75
|
+
if (compareDateValues(validStart.value, validEnd.value) > 0) {
|
|
76
|
+
return fail('construction', 'inverted-date-range', 'Date range start must not follow its end.');
|
|
77
|
+
}
|
|
78
|
+
return ok(Object.freeze({ start: validStart.value, end: validEnd.value }));
|
|
79
|
+
}
|
|
80
|
+
export function dateRangeContains(range, value) {
|
|
81
|
+
return compareDateValues(range.start, value) <= 0 && compareDateValues(value, range.end) <= 0;
|
|
82
|
+
}
|
|
83
|
+
export function createDateFieldState(value = null, inputState) {
|
|
84
|
+
const valid = value === null ? ok(null) : createDateValue(value.year, value.month, value.day);
|
|
85
|
+
if (!valid.ok)
|
|
86
|
+
return valid;
|
|
87
|
+
const input = inputState === undefined
|
|
88
|
+
? committedInput(valid.value)
|
|
89
|
+
: normalizeTextEditingState(inputState);
|
|
90
|
+
if (!input.ok)
|
|
91
|
+
return input;
|
|
92
|
+
if (input.value.snapshot.text.length > DATE_FIELD_MAX_CODE_UNITS) {
|
|
93
|
+
return fail('construction', 'date-field-draft-too-long', 'Date field drafts must fit YYYY-MM-DD.');
|
|
94
|
+
}
|
|
95
|
+
return ok(Object.freeze({ value: valid.value, inputState: input.value }));
|
|
96
|
+
}
|
|
97
|
+
export function applyDateFieldEvent(state, event, policies = {}) {
|
|
98
|
+
const valid = createDateFieldState(state.value, state.inputState);
|
|
99
|
+
if (!valid.ok)
|
|
100
|
+
return transitionFailure(valid);
|
|
101
|
+
const bounds = validatePolicies(policies);
|
|
102
|
+
if (!bounds.ok)
|
|
103
|
+
return bounds;
|
|
104
|
+
if (typeof event === 'object' && event.type === 'text') {
|
|
105
|
+
const edited = applyTextEvent(valid.value.inputState, event.event);
|
|
106
|
+
if (!edited.ok)
|
|
107
|
+
return edited;
|
|
108
|
+
if (edited.value.state.snapshot.text.length > DATE_FIELD_MAX_CODE_UNITS) {
|
|
109
|
+
return fail('transition-rejection', 'date-field-draft-too-long', 'Date field drafts must fit YYYY-MM-DD.');
|
|
110
|
+
}
|
|
111
|
+
return createMachineUpdate(Object.freeze({ value: valid.value.value, inputState: edited.value.state }), [
|
|
112
|
+
{ type: 'input-state-changed', value: edited.value.state },
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
|
+
if (typeof event === 'object' && event.type === 'set-value') {
|
|
116
|
+
return commitValue(event.value, policies);
|
|
117
|
+
}
|
|
118
|
+
if (event === 'cancel') {
|
|
119
|
+
const input = committedInput(valid.value.value);
|
|
120
|
+
if (!input.ok)
|
|
121
|
+
return input;
|
|
122
|
+
return createMachineUpdate(Object.freeze({ value: valid.value.value, inputState: input.value }), [
|
|
123
|
+
{ type: 'input-state-changed', value: input.value },
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
if (event === 'increment-segment' || event === 'decrement-segment') {
|
|
127
|
+
const draft = parseDateValue(valid.value.inputState.snapshot.text);
|
|
128
|
+
if (!draft.ok)
|
|
129
|
+
return draft;
|
|
130
|
+
const base = draft.value;
|
|
131
|
+
const amount = event === 'increment-segment' ? 1 : -1;
|
|
132
|
+
const segment = dateSegmentAt(valid.value.inputState.snapshot.selection.focusCodeUnitOffset);
|
|
133
|
+
const adjusted = segment === 'year' ? addDateYears(base, amount)
|
|
134
|
+
: segment === 'month' ? addDateMonths(base, amount)
|
|
135
|
+
: addDateDays(base, amount);
|
|
136
|
+
return adjusted.ok ? commitValue(adjusted.value, policies, segment) : adjusted;
|
|
137
|
+
}
|
|
138
|
+
if (event !== 'commit')
|
|
139
|
+
return fail('transition-rejection', 'unsupported-date-field-event', 'Date field event is unsupported.');
|
|
140
|
+
if (valid.value.inputState.composition !== null)
|
|
141
|
+
return fail('transition-rejection', 'date-field-composition-active', 'Date field cannot commit while text composition is active.');
|
|
142
|
+
const text = valid.value.inputState.snapshot.text.trim();
|
|
143
|
+
if (text.length === 0)
|
|
144
|
+
return commitValue(null, policies);
|
|
145
|
+
const parsed = parseDateValue(text);
|
|
146
|
+
return parsed.ok ? commitValue(parsed.value, policies) : parsed;
|
|
147
|
+
}
|
|
148
|
+
export function dateSegmentAt(offset) {
|
|
149
|
+
return offset <= 4 ? 'year' : offset <= 7 ? 'month' : 'day';
|
|
150
|
+
}
|
|
151
|
+
export function daysInMonth(year, month) {
|
|
152
|
+
return month === 2 ? (isLeapYear(year) ? 29 : 28) : (month === 4 || month === 6 || month === 9 || month === 11 ? 30 : 31);
|
|
153
|
+
}
|
|
154
|
+
export function isLeapYear(year) {
|
|
155
|
+
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
|
|
156
|
+
}
|
|
157
|
+
function commitValue(value, policies, segment) {
|
|
158
|
+
if (value === null) {
|
|
159
|
+
if (policies.required === true)
|
|
160
|
+
return fail('transition-rejection', 'date-field-value-required', 'Date field requires a value.');
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const valid = createDateValue(value.year, value.month, value.day);
|
|
164
|
+
if (!valid.ok)
|
|
165
|
+
return transitionFailure(valid);
|
|
166
|
+
value = valid.value;
|
|
167
|
+
if (policies.min !== undefined && compareDateValues(value, policies.min) < 0)
|
|
168
|
+
return fail('transition-rejection', 'date-field-value-below-minimum', 'Date field value is below its minimum.');
|
|
169
|
+
if (policies.max !== undefined && compareDateValues(value, policies.max) > 0)
|
|
170
|
+
return fail('transition-rejection', 'date-field-value-above-maximum', 'Date field value is above its maximum.');
|
|
171
|
+
if (policies.unavailable?.(value) === true)
|
|
172
|
+
return fail('transition-rejection', 'date-field-value-unavailable', 'Date field value is unavailable.');
|
|
173
|
+
}
|
|
174
|
+
const input = committedInput(value, segment);
|
|
175
|
+
if (!input.ok)
|
|
176
|
+
return input;
|
|
177
|
+
return createMachineUpdate(Object.freeze({ value, inputState: input.value }), [
|
|
178
|
+
{ type: 'input-state-changed', value: input.value },
|
|
179
|
+
{ type: 'value-committed', value },
|
|
180
|
+
]);
|
|
181
|
+
}
|
|
182
|
+
function committedInput(value, segment) {
|
|
183
|
+
const text = value === null ? '' : formatDateValue(value);
|
|
184
|
+
const selection = segment === undefined ? { anchorCodeUnitOffset: text.length, focusCodeUnitOffset: text.length }
|
|
185
|
+
: segment === 'year' ? { anchorCodeUnitOffset: 0, focusCodeUnitOffset: 4 }
|
|
186
|
+
: segment === 'month' ? { anchorCodeUnitOffset: 5, focusCodeUnitOffset: 7 }
|
|
187
|
+
: { anchorCodeUnitOffset: 8, focusCodeUnitOffset: 10 };
|
|
188
|
+
return createTextEditingState(text, selection);
|
|
189
|
+
}
|
|
190
|
+
function validatePolicies(policies) {
|
|
191
|
+
if (policies.unavailable !== undefined && typeof policies.unavailable !== 'function')
|
|
192
|
+
return fail('construction', 'invalid-date-unavailable-policy', 'Date unavailable policy must be a function.');
|
|
193
|
+
if (policies.min !== undefined) {
|
|
194
|
+
const min = createDateValue(policies.min.year, policies.min.month, policies.min.day);
|
|
195
|
+
if (!min.ok)
|
|
196
|
+
return min;
|
|
197
|
+
}
|
|
198
|
+
if (policies.max !== undefined) {
|
|
199
|
+
const max = createDateValue(policies.max.year, policies.max.month, policies.max.day);
|
|
200
|
+
if (!max.ok)
|
|
201
|
+
return max;
|
|
202
|
+
}
|
|
203
|
+
if (policies.min !== undefined && policies.max !== undefined && compareDateValues(policies.min, policies.max) > 0)
|
|
204
|
+
return fail('construction', 'inverted-date-field-bounds', 'Date field minimum must not follow its maximum.');
|
|
205
|
+
return ok(true);
|
|
206
|
+
}
|
|
207
|
+
function transitionFailure(result) {
|
|
208
|
+
return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } };
|
|
209
|
+
}
|
|
210
|
+
function dateToOrdinal(value) {
|
|
211
|
+
let year = value.year;
|
|
212
|
+
const month = value.month;
|
|
213
|
+
year -= month <= 2 ? 1 : 0;
|
|
214
|
+
const era = Math.floor(year / 400);
|
|
215
|
+
const yearOfEra = year - era * 400;
|
|
216
|
+
const monthPrime = month + (month > 2 ? -3 : 9);
|
|
217
|
+
const dayOfYear = Math.floor((153 * monthPrime + 2) / 5) + value.day - 1;
|
|
218
|
+
const dayOfEra = yearOfEra * 365 + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100) + dayOfYear;
|
|
219
|
+
return era * 146097 + dayOfEra;
|
|
220
|
+
}
|
|
221
|
+
function ordinalToDate(ordinal) {
|
|
222
|
+
const era = Math.floor(ordinal / 146097);
|
|
223
|
+
const dayOfEra = ordinal - era * 146097;
|
|
224
|
+
const yearOfEra = Math.floor((dayOfEra - Math.floor(dayOfEra / 1460) + Math.floor(dayOfEra / 36524) - Math.floor(dayOfEra / 146096)) / 365);
|
|
225
|
+
let year = yearOfEra + era * 400;
|
|
226
|
+
const dayOfYear = dayOfEra - (365 * yearOfEra + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100));
|
|
227
|
+
const monthPrime = Math.floor((5 * dayOfYear + 2) / 153);
|
|
228
|
+
const day = dayOfYear - Math.floor((153 * monthPrime + 2) / 5) + 1;
|
|
229
|
+
const month = monthPrime + (monthPrime < 10 ? 3 : -9);
|
|
230
|
+
year += month <= 2 ? 1 : 0;
|
|
231
|
+
return Object.freeze({ year, month, day });
|
|
232
|
+
}
|
|
233
|
+
//# 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,53 @@
|
|
|
1
|
+
import type { Result } from './shared.js';
|
|
2
|
+
import { type DateValue } from './date-field.js';
|
|
3
|
+
export interface DatePickerView {
|
|
4
|
+
readonly year: number;
|
|
5
|
+
readonly month: number;
|
|
6
|
+
}
|
|
7
|
+
export interface DatePickerState {
|
|
8
|
+
readonly value: DateValue | null;
|
|
9
|
+
readonly highlighted: DateValue;
|
|
10
|
+
readonly view: DatePickerView;
|
|
11
|
+
readonly open: boolean;
|
|
12
|
+
}
|
|
13
|
+
export type DatePickerEvent = 'open' | 'close' | 'toggle' | 'previous-month' | 'next-month' | 'previous-year' | 'next-year' | 'previous-day' | 'next-day' | 'previous-week' | 'next-week' | 'start-of-week' | 'end-of-week' | 'select-highlighted' | {
|
|
14
|
+
readonly type: 'select';
|
|
15
|
+
readonly value: DateValue;
|
|
16
|
+
} | {
|
|
17
|
+
readonly type: 'set-value';
|
|
18
|
+
readonly value: DateValue | null;
|
|
19
|
+
};
|
|
20
|
+
export type DatePickerCommand = {
|
|
21
|
+
readonly type: 'value-committed';
|
|
22
|
+
readonly value: DateValue | null;
|
|
23
|
+
} | {
|
|
24
|
+
readonly type: 'highlight-changed';
|
|
25
|
+
readonly value: DateValue;
|
|
26
|
+
} | {
|
|
27
|
+
readonly type: 'open-changed';
|
|
28
|
+
readonly open: boolean;
|
|
29
|
+
};
|
|
30
|
+
export interface DatePickerPolicies {
|
|
31
|
+
readonly min?: DateValue;
|
|
32
|
+
readonly max?: DateValue;
|
|
33
|
+
readonly required?: boolean;
|
|
34
|
+
readonly unavailable?: (value: DateValue) => boolean;
|
|
35
|
+
readonly weekStartsOn?: 1 | 2 | 3 | 4 | 5 | 6 | 7;
|
|
36
|
+
readonly maxScan?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface DatePickerUpdate {
|
|
39
|
+
readonly state: DatePickerState;
|
|
40
|
+
readonly commands: readonly DatePickerCommand[];
|
|
41
|
+
}
|
|
42
|
+
export interface DatePickerStateInput {
|
|
43
|
+
readonly value?: DateValue | null;
|
|
44
|
+
readonly highlighted?: DateValue;
|
|
45
|
+
readonly view?: DatePickerView;
|
|
46
|
+
readonly open?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export declare function createDatePickerState(input?: DatePickerStateInput): Result<DatePickerState>;
|
|
49
|
+
export declare function applyDatePickerEvent(state: DatePickerState, event: DatePickerEvent, policies?: DatePickerPolicies): Result<DatePickerUpdate>;
|
|
50
|
+
export declare function createDatePickerMonth(view: DatePickerView, weekStartsOn?: 1 | 2 | 3 | 4 | 5 | 6 | 7): Result<readonly (readonly DateValue[])[]>;
|
|
51
|
+
export declare function isDatePickerValueAvailable(value: DateValue, policies?: DatePickerPolicies): boolean;
|
|
52
|
+
export declare function datePickerID(value: DateValue): string;
|
|
53
|
+
//# 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":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { fail, freezeArray, ok } from './internal/kernel/foundation.js';
|
|
2
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
3
|
+
import { addDateDays, addDateMonths, addDateYears, compareDateValues, createDateValue, dateDayOfWeek, formatDateValue, } from './date-field.js';
|
|
4
|
+
export function createDatePickerState(input = {}) {
|
|
5
|
+
const value = input.value ?? null;
|
|
6
|
+
if (value !== null) {
|
|
7
|
+
const valid = createDateValue(value.year, value.month, value.day);
|
|
8
|
+
if (!valid.ok)
|
|
9
|
+
return valid;
|
|
10
|
+
}
|
|
11
|
+
const fallback = value ?? Object.freeze({ year: 1970, month: 1, day: 1 });
|
|
12
|
+
const highlighted = input.highlighted ?? fallback;
|
|
13
|
+
const validHighlight = createDateValue(highlighted.year, highlighted.month, highlighted.day);
|
|
14
|
+
if (!validHighlight.ok)
|
|
15
|
+
return validHighlight;
|
|
16
|
+
const view = input.view ?? Object.freeze({ year: validHighlight.value.year, month: validHighlight.value.month });
|
|
17
|
+
const validView = createDateValue(view.year, view.month, 1);
|
|
18
|
+
if (!validView.ok)
|
|
19
|
+
return validView;
|
|
20
|
+
if (typeof input.open !== 'undefined' && typeof input.open !== 'boolean')
|
|
21
|
+
return fail('construction', 'invalid-date-picker-open', 'Date picker open state must be boolean.');
|
|
22
|
+
return ok(pickerState(value, validHighlight.value, Object.freeze({ year: view.year, month: view.month }), input.open ?? false));
|
|
23
|
+
}
|
|
24
|
+
export function applyDatePickerEvent(state, event, policies = {}) {
|
|
25
|
+
const valid = createDatePickerState(state);
|
|
26
|
+
if (!valid.ok)
|
|
27
|
+
return invalidTransition(valid);
|
|
28
|
+
const policy = validatePolicies(policies);
|
|
29
|
+
if (!policy.ok)
|
|
30
|
+
return policy;
|
|
31
|
+
if (event === 'open' || event === 'close' || event === 'toggle') {
|
|
32
|
+
const open = event === 'toggle' ? !state.open : event === 'open';
|
|
33
|
+
if (open === state.open)
|
|
34
|
+
return createMachineUpdate(state);
|
|
35
|
+
return createMachineUpdate(pickerState(state.value, state.highlighted, state.view, open), [{ type: 'open-changed', open }]);
|
|
36
|
+
}
|
|
37
|
+
if (typeof event === 'object' && event.type === 'set-value')
|
|
38
|
+
return commit(event.value, state, policies, false);
|
|
39
|
+
if (typeof event === 'object' && event.type === 'select')
|
|
40
|
+
return commit(event.value, state, policies, true);
|
|
41
|
+
if (event === 'select-highlighted')
|
|
42
|
+
return commit(state.highlighted, state, policies, true);
|
|
43
|
+
let moved;
|
|
44
|
+
if (event === 'previous-month' || event === 'next-month')
|
|
45
|
+
moved = addDateMonths(state.highlighted, event === 'previous-month' ? -1 : 1);
|
|
46
|
+
else if (event === 'previous-year' || event === 'next-year')
|
|
47
|
+
moved = addDateYears(state.highlighted, event === 'previous-year' ? -1 : 1);
|
|
48
|
+
else if (event === 'previous-day' || event === 'next-day')
|
|
49
|
+
moved = addDateDays(state.highlighted, event === 'previous-day' ? -1 : 1);
|
|
50
|
+
else if (event === 'previous-week' || event === 'next-week')
|
|
51
|
+
moved = addDateDays(state.highlighted, event === 'previous-week' ? -7 : 7);
|
|
52
|
+
else if (event === 'start-of-week' || event === 'end-of-week') {
|
|
53
|
+
const start = policies.weekStartsOn ?? 1;
|
|
54
|
+
const relative = (dateDayOfWeek(state.highlighted) - start + 7) % 7;
|
|
55
|
+
moved = addDateDays(state.highlighted, event === 'start-of-week' ? -relative : 6 - relative);
|
|
56
|
+
}
|
|
57
|
+
else
|
|
58
|
+
return fail('transition-rejection', 'unsupported-date-picker-event', 'Date picker event is unsupported.');
|
|
59
|
+
if (!moved.ok)
|
|
60
|
+
return moved;
|
|
61
|
+
const direction = compareDateValues(moved.value, state.highlighted) < 0 ? -1 : 1;
|
|
62
|
+
const eligible = findEligible(moved.value, direction, policies);
|
|
63
|
+
if (!eligible.ok)
|
|
64
|
+
return eligible;
|
|
65
|
+
if (eligible.value === null || compareDateValues(eligible.value, state.highlighted) === 0)
|
|
66
|
+
return createMachineUpdate(state);
|
|
67
|
+
const view = Object.freeze({ year: eligible.value.year, month: eligible.value.month });
|
|
68
|
+
return createMachineUpdate(pickerState(state.value, eligible.value, view, state.open), [{ type: 'highlight-changed', value: eligible.value }]);
|
|
69
|
+
}
|
|
70
|
+
export function createDatePickerMonth(view, weekStartsOn = 1) {
|
|
71
|
+
const first = createDateValue(view.year, view.month, 1);
|
|
72
|
+
if (!first.ok)
|
|
73
|
+
return first;
|
|
74
|
+
if (!Number.isSafeInteger(weekStartsOn) || weekStartsOn < 1 || weekStartsOn > 7)
|
|
75
|
+
return fail('construction', 'invalid-week-start', 'Week start must be an ISO weekday from 1 through 7.');
|
|
76
|
+
const offset = (dateDayOfWeek(first.value) - weekStartsOn + 7) % 7;
|
|
77
|
+
const start = addDateDays(first.value, -offset);
|
|
78
|
+
if (!start.ok)
|
|
79
|
+
return start;
|
|
80
|
+
const rows = [];
|
|
81
|
+
for (let row = 0; row < 6; row += 1) {
|
|
82
|
+
const cells = [];
|
|
83
|
+
for (let column = 0; column < 7; column += 1) {
|
|
84
|
+
const value = addDateDays(start.value, row * 7 + column);
|
|
85
|
+
if (!value.ok)
|
|
86
|
+
return value;
|
|
87
|
+
cells.push(value.value);
|
|
88
|
+
}
|
|
89
|
+
rows.push(cells);
|
|
90
|
+
}
|
|
91
|
+
return ok(freezeArray(rows.map((row) => freezeArray(row))));
|
|
92
|
+
}
|
|
93
|
+
export function isDatePickerValueAvailable(value, policies = {}) {
|
|
94
|
+
return !(policies.min !== undefined && compareDateValues(value, policies.min) < 0)
|
|
95
|
+
&& !(policies.max !== undefined && compareDateValues(value, policies.max) > 0)
|
|
96
|
+
&& policies.unavailable?.(value) !== true;
|
|
97
|
+
}
|
|
98
|
+
export function datePickerID(value) { return formatDateValue(value); }
|
|
99
|
+
function commit(value, state, policies, close) {
|
|
100
|
+
if (value === null) {
|
|
101
|
+
if (policies.required === true)
|
|
102
|
+
return fail('transition-rejection', 'date-picker-value-required', 'Date picker requires a value.');
|
|
103
|
+
const open = close ? false : state.open;
|
|
104
|
+
return createMachineUpdate(pickerState(null, state.highlighted, state.view, open), [
|
|
105
|
+
{ type: 'value-committed', value: null },
|
|
106
|
+
...openChanged(state.open, open),
|
|
107
|
+
]);
|
|
108
|
+
}
|
|
109
|
+
const valid = createDateValue(value.year, value.month, value.day);
|
|
110
|
+
if (!valid.ok)
|
|
111
|
+
return invalidTransition(valid);
|
|
112
|
+
if (!isDatePickerValueAvailable(valid.value, policies))
|
|
113
|
+
return fail('transition-rejection', 'date-picker-value-unavailable', 'Date picker value is outside its selectable domain.');
|
|
114
|
+
const open = close ? false : state.open;
|
|
115
|
+
const view = Object.freeze({ year: valid.value.year, month: valid.value.month });
|
|
116
|
+
return createMachineUpdate(pickerState(valid.value, valid.value, view, open), [
|
|
117
|
+
{ type: 'value-committed', value: valid.value },
|
|
118
|
+
{ type: 'highlight-changed', value: valid.value },
|
|
119
|
+
...openChanged(state.open, open),
|
|
120
|
+
]);
|
|
121
|
+
}
|
|
122
|
+
function findEligible(start, direction, policies) {
|
|
123
|
+
const limit = policies.maxScan ?? 366;
|
|
124
|
+
if (!Number.isSafeInteger(limit) || limit < 1)
|
|
125
|
+
return fail('construction', 'invalid-date-picker-max-scan', 'Date picker max scan must be a positive safe integer.');
|
|
126
|
+
let candidate = start;
|
|
127
|
+
for (let scanned = 0; scanned < limit; scanned += 1) {
|
|
128
|
+
if (isDatePickerValueAvailable(candidate, policies))
|
|
129
|
+
return ok(candidate);
|
|
130
|
+
const next = addDateDays(candidate, direction);
|
|
131
|
+
if (!next.ok)
|
|
132
|
+
return ok(null);
|
|
133
|
+
candidate = next.value;
|
|
134
|
+
}
|
|
135
|
+
return fail('resource-rejection', 'date-picker-scan-exhausted', 'Date picker did not find an available date within maxScan.', { maxScan: limit });
|
|
136
|
+
}
|
|
137
|
+
function validatePolicies(policies) {
|
|
138
|
+
if (policies.unavailable !== undefined && typeof policies.unavailable !== 'function')
|
|
139
|
+
return fail('construction', 'invalid-date-picker-unavailable-policy', 'Date picker unavailable policy must be a function.');
|
|
140
|
+
if (policies.min !== undefined) {
|
|
141
|
+
const min = createDateValue(policies.min.year, policies.min.month, policies.min.day);
|
|
142
|
+
if (!min.ok)
|
|
143
|
+
return min;
|
|
144
|
+
}
|
|
145
|
+
if (policies.max !== undefined) {
|
|
146
|
+
const max = createDateValue(policies.max.year, policies.max.month, policies.max.day);
|
|
147
|
+
if (!max.ok)
|
|
148
|
+
return max;
|
|
149
|
+
}
|
|
150
|
+
if (policies.min !== undefined && policies.max !== undefined && compareDateValues(policies.min, policies.max) > 0)
|
|
151
|
+
return fail('construction', 'inverted-date-picker-bounds', 'Date picker minimum must not follow its maximum.');
|
|
152
|
+
return ok(true);
|
|
153
|
+
}
|
|
154
|
+
function pickerState(value, highlighted, view, open) { return Object.freeze({ value, highlighted, view, open }); }
|
|
155
|
+
function openChanged(previous, next) { return previous === next ? [] : [{ type: 'open-changed', open: next }]; }
|
|
156
|
+
function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
|
|
157
|
+
//# 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,28 @@
|
|
|
1
|
+
import type { Result } from './shared.js';
|
|
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): Result<DateRangePickerState>;
|
|
27
|
+
export declare function applyDateRangePickerEvent(state: DateRangePickerState, event: DateRangePickerEvent, policies?: DatePickerPolicies): Result<DateRangePickerUpdate>;
|
|
28
|
+
//# 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":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAuD,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtH,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,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,MAAM,CAAC,oBAAoB,CAAC,CAqB9G;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,85 @@
|
|
|
1
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
2
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
3
|
+
import { compareDateValues, createDateRange, createDateValue } from './date-field.js';
|
|
4
|
+
import { applyDatePickerEvent, createDatePickerState, isDatePickerValueAvailable, } from './date-picker.js';
|
|
5
|
+
export function createDateRangePickerState(input = {}) {
|
|
6
|
+
let value = null;
|
|
7
|
+
if (input.value !== undefined && input.value !== null) {
|
|
8
|
+
const valid = createDateRange(input.value.start, input.value.end);
|
|
9
|
+
if (!valid.ok)
|
|
10
|
+
return valid;
|
|
11
|
+
value = valid.value;
|
|
12
|
+
}
|
|
13
|
+
let anchor = null;
|
|
14
|
+
if (input.anchor !== undefined && input.anchor !== null) {
|
|
15
|
+
const valid = createDateValue(input.anchor.year, input.anchor.month, input.anchor.day);
|
|
16
|
+
if (!valid.ok)
|
|
17
|
+
return valid;
|
|
18
|
+
anchor = valid.value;
|
|
19
|
+
}
|
|
20
|
+
const fallback = anchor ?? value?.end;
|
|
21
|
+
const calendar = createDatePickerState({
|
|
22
|
+
value: null,
|
|
23
|
+
...(input.calendar?.highlighted === undefined && fallback !== undefined ? { highlighted: fallback } : {}),
|
|
24
|
+
...input.calendar,
|
|
25
|
+
});
|
|
26
|
+
if (!calendar.ok)
|
|
27
|
+
return calendar;
|
|
28
|
+
return ok(Object.freeze({ value, anchor, calendar: calendar.value }));
|
|
29
|
+
}
|
|
30
|
+
export function applyDateRangePickerEvent(state, event, policies = {}) {
|
|
31
|
+
const valid = createDateRangePickerState(state);
|
|
32
|
+
if (!valid.ok)
|
|
33
|
+
return invalidTransition(valid);
|
|
34
|
+
if (event === 'clear') {
|
|
35
|
+
if (policies.required === true)
|
|
36
|
+
return fail('transition-rejection', 'date-range-picker-value-required', 'Date range picker requires a range.');
|
|
37
|
+
return createMachineUpdate(Object.freeze({ value: null, anchor: null, calendar: state.calendar }), [
|
|
38
|
+
{ type: 'range-committed', value: null },
|
|
39
|
+
{ type: 'range-anchor-changed', value: null },
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
const selected = event === 'select-highlighted' ? state.calendar.highlighted
|
|
43
|
+
: typeof event === 'object' && event.type === 'select' ? event.value
|
|
44
|
+
: null;
|
|
45
|
+
if (selected !== null)
|
|
46
|
+
return selectDate(state, selected, policies);
|
|
47
|
+
if (typeof event === 'object' && event.type === 'set-value') {
|
|
48
|
+
return fail('transition-rejection', 'unsupported-date-range-picker-set-value', 'Date range picker values must be synchronized as ranges.');
|
|
49
|
+
}
|
|
50
|
+
const update = applyDatePickerEvent(state.calendar, event, policies);
|
|
51
|
+
if (!update.ok)
|
|
52
|
+
return update;
|
|
53
|
+
return createMachineUpdate(Object.freeze({ value: state.value, anchor: state.anchor, calendar: update.value.state }), update.value.commands);
|
|
54
|
+
}
|
|
55
|
+
function selectDate(state, requested, policies) {
|
|
56
|
+
const valid = createDateValue(requested.year, requested.month, requested.day);
|
|
57
|
+
if (!valid.ok)
|
|
58
|
+
return invalidTransition(valid);
|
|
59
|
+
if (!isDatePickerValueAvailable(valid.value, policies))
|
|
60
|
+
return fail('transition-rejection', 'date-range-picker-value-unavailable', 'Date range endpoint is outside its selectable domain.');
|
|
61
|
+
if (state.anchor === null) {
|
|
62
|
+
const calendar = createDatePickerState({ ...state.calendar, value: null, highlighted: valid.value, view: { year: valid.value.year, month: valid.value.month }, open: true });
|
|
63
|
+
if (!calendar.ok)
|
|
64
|
+
return calendar;
|
|
65
|
+
return createMachineUpdate(Object.freeze({ value: state.value, anchor: valid.value, calendar: calendar.value }), [
|
|
66
|
+
{ type: 'highlight-changed', value: valid.value },
|
|
67
|
+
{ type: 'range-anchor-changed', value: valid.value },
|
|
68
|
+
]);
|
|
69
|
+
}
|
|
70
|
+
const start = compareDateValues(state.anchor, valid.value) <= 0 ? state.anchor : valid.value;
|
|
71
|
+
const end = compareDateValues(state.anchor, valid.value) <= 0 ? valid.value : state.anchor;
|
|
72
|
+
const range = createDateRange(start, end);
|
|
73
|
+
if (!range.ok)
|
|
74
|
+
return range;
|
|
75
|
+
const calendar = createDatePickerState({ value: null, highlighted: valid.value, view: { year: valid.value.year, month: valid.value.month }, open: state.calendar.open });
|
|
76
|
+
if (!calendar.ok)
|
|
77
|
+
return calendar;
|
|
78
|
+
return createMachineUpdate(Object.freeze({ value: range.value, anchor: null, calendar: calendar.value }), [
|
|
79
|
+
{ type: 'range-committed', value: range.value },
|
|
80
|
+
{ type: 'range-anchor-changed', value: null },
|
|
81
|
+
{ type: 'highlight-changed', value: valid.value },
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
|
|
85
|
+
//# 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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"}
|