@sectile/core 0.2.0 → 0.3.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/dist/accordion.d.ts +44 -0
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +87 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert-dialog.d.ts +19 -0
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +10 -0
- package/dist/alert-dialog.js.map +1 -0
- package/dist/calendar.d.ts +3 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +3 -0
- package/dist/calendar.js.map +1 -0
- package/dist/carousel.d.ts +41 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +55 -0
- package/dist/carousel.js.map +1 -0
- package/dist/cascade-select.d.ts +48 -0
- package/dist/cascade-select.d.ts.map +1 -0
- package/dist/cascade-select.js +148 -0
- package/dist/cascade-select.js.map +1 -0
- package/dist/checkbox-group.d.ts +13 -0
- package/dist/checkbox-group.d.ts.map +1 -0
- package/dist/checkbox-group.js +16 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.d.ts +3 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +3 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/collection-window.d.ts +51 -0
- package/dist/collection-window.d.ts.map +1 -0
- package/dist/collection-window.js +111 -0
- package/dist/collection-window.js.map +1 -0
- package/dist/color-picker.d.ts +101 -0
- package/dist/color-picker.d.ts.map +1 -0
- package/dist/color-picker.js +503 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/combobox.d.ts +17 -0
- package/dist/combobox.d.ts.map +1 -0
- package/dist/combobox.js +46 -0
- package/dist/combobox.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 +76 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +261 -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 +89 -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 +71 -0
- package/dist/date-time-picker.d.ts.map +1 -0
- package/dist/date-time-picker.js +156 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +87 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +252 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/dialog.d.ts +17 -0
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +6 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure.d.ts +3 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +3 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/drawer.d.ts +24 -0
- package/dist/drawer.d.ts.map +1 -0
- package/dist/drawer.js +36 -0
- package/dist/drawer.js.map +1 -0
- package/dist/editable.d.ts +29 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +34 -0
- package/dist/editable.js.map +1 -0
- package/dist/feed.d.ts +49 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +124 -0
- package/dist/feed.js.map +1 -0
- package/dist/form.d.ts +135 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +627 -0
- package/dist/form.js.map +1 -0
- package/dist/index.d.ts +37 -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 +15 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +42 -0
- package/dist/interaction.js.map +1 -0
- package/dist/internal/composites/calendar.d.ts +36 -0
- package/dist/internal/composites/calendar.d.ts.map +1 -0
- package/dist/internal/composites/calendar.js +143 -0
- package/dist/internal/composites/calendar.js.map +1 -0
- package/dist/internal/composites/combobox.d.ts +42 -0
- package/dist/internal/composites/combobox.d.ts.map +1 -0
- package/dist/internal/composites/combobox.js +188 -0
- package/dist/internal/composites/combobox.js.map +1 -0
- package/dist/internal/composites/grid-control.d.ts +37 -0
- package/dist/internal/composites/grid-control.d.ts.map +1 -0
- package/dist/internal/composites/grid-control.js +90 -0
- package/dist/internal/composites/grid-control.js.map +1 -0
- package/dist/internal/composites/linear-action.d.ts +36 -0
- package/dist/internal/composites/linear-action.d.ts.map +1 -0
- package/dist/internal/composites/linear-action.js +96 -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 +52 -0
- package/dist/internal/composites/listbox.d.ts.map +1 -0
- package/dist/internal/composites/listbox.js +251 -0
- package/dist/internal/composites/listbox.js.map +1 -0
- package/dist/internal/composites/menu.d.ts +29 -0
- package/dist/internal/composites/menu.d.ts.map +1 -0
- package/dist/internal/composites/menu.js +76 -0
- package/dist/internal/composites/menu.js.map +1 -0
- package/dist/internal/composites/popup.d.ts +21 -0
- package/dist/internal/composites/popup.d.ts.map +1 -0
- package/dist/internal/composites/popup.js +10 -0
- package/dist/internal/composites/popup.js.map +1 -0
- package/dist/internal/composites/slider.d.ts +21 -0
- package/dist/internal/composites/slider.d.ts.map +1 -0
- package/dist/internal/composites/slider.js +73 -0
- package/dist/internal/composites/slider.js.map +1 -0
- package/dist/internal/composites/tree-grid.d.ts +67 -0
- package/dist/internal/composites/tree-grid.d.ts.map +1 -0
- package/dist/internal/composites/tree-grid.js +281 -0
- package/dist/internal/composites/tree-grid.js.map +1 -0
- package/dist/internal/composites/tree-view.d.ts +42 -0
- package/dist/internal/composites/tree-view.d.ts.map +1 -0
- package/dist/internal/composites/tree-view.js +196 -0
- package/dist/internal/composites/tree-view.js.map +1 -0
- package/dist/internal/editing/text.d.ts +66 -0
- package/dist/internal/editing/text.d.ts.map +1 -0
- package/dist/internal/editing/text.js +248 -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 +23 -0
- package/dist/internal/runtime/revision.d.ts.map +1 -0
- package/dist/internal/runtime/revision.js +76 -0
- package/dist/internal/runtime/revision.js.map +1 -0
- package/dist/internal/state/checked.d.ts +22 -0
- package/dist/internal/state/checked.d.ts.map +1 -0
- package/dist/internal/state/checked.js +33 -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 +17 -0
- package/dist/internal/state/open-state.d.ts.map +1 -0
- package/dist/internal/state/open-state.js +29 -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/layer-stack.d.ts +47 -0
- package/dist/layer-stack.d.ts.map +1 -0
- package/dist/layer-stack.js +115 -0
- package/dist/layer-stack.js.map +1 -0
- package/dist/listbox.d.ts +3 -0
- package/dist/listbox.d.ts.map +1 -0
- package/dist/listbox.js +3 -0
- package/dist/listbox.js.map +1 -0
- package/dist/menu-button.d.ts +5 -0
- package/dist/menu-button.d.ts.map +1 -0
- package/dist/menu-button.js +5 -0
- package/dist/menu-button.js.map +1 -0
- package/dist/menu.d.ts +10 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +9 -0
- package/dist/menu.js.map +1 -0
- package/dist/menubar.d.ts +5 -0
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +5 -0
- package/dist/menubar.js.map +1 -0
- package/dist/month-picker.d.ts +5 -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/multi-thumb-slider.d.ts +36 -0
- package/dist/multi-thumb-slider.d.ts.map +1 -0
- package/dist/multi-thumb-slider.js +72 -0
- package/dist/multi-thumb-slider.js.map +1 -0
- package/dist/navigation-menu.d.ts +6 -0
- package/dist/navigation-menu.d.ts.map +1 -0
- package/dist/navigation-menu.js +5 -0
- package/dist/navigation-menu.js.map +1 -0
- package/dist/number-field.d.ts +51 -0
- package/dist/number-field.d.ts.map +1 -0
- package/dist/number-field.js +461 -0
- package/dist/number-field.js.map +1 -0
- package/dist/pagination.d.ts +65 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +197 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pin-input.d.ts +31 -0
- package/dist/pin-input.d.ts.map +1 -0
- package/dist/pin-input.js +53 -0
- package/dist/pin-input.js.map +1 -0
- package/dist/popover.d.ts +17 -0
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +6 -0
- package/dist/popover.js.map +1 -0
- package/dist/quantity-field.d.ts +59 -0
- package/dist/quantity-field.d.ts.map +1 -0
- package/dist/quantity-field.js +254 -0
- package/dist/quantity-field.js.map +1 -0
- package/dist/radio-group.d.ts +23 -0
- package/dist/radio-group.d.ts.map +1 -0
- package/dist/radio-group.js +20 -0
- package/dist/radio-group.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/rating.d.ts +18 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +19 -0
- package/dist/rating.js.map +1 -0
- package/dist/reorder.d.ts +47 -0
- package/dist/reorder.d.ts.map +1 -0
- package/dist/reorder.js +110 -0
- package/dist/reorder.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 +3 -0
- package/dist/revision.d.ts.map +1 -0
- package/dist/revision.js +3 -0
- package/dist/revision.js.map +1 -0
- package/dist/select.d.ts +31 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +32 -0
- package/dist/select.js.map +1 -0
- package/dist/shared.d.ts +43 -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 +3 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +3 -0
- package/dist/slider.js.map +1 -0
- package/dist/spin-button.d.ts +31 -0
- package/dist/spin-button.d.ts.map +1 -0
- package/dist/spin-button.js +65 -0
- package/dist/spin-button.js.map +1 -0
- package/dist/stepper.d.ts +18 -0
- package/dist/stepper.d.ts.map +1 -0
- package/dist/stepper.js +16 -0
- package/dist/stepper.js.map +1 -0
- package/dist/structures/grid.d.ts +29 -0
- package/dist/structures/grid.d.ts.map +1 -0
- package/dist/structures/grid.js +202 -0
- package/dist/structures/grid.js.map +1 -0
- package/dist/structures/range.d.ts +41 -0
- package/dist/structures/range.d.ts.map +1 -0
- package/dist/structures/range.js +249 -0
- package/dist/structures/range.js.map +1 -0
- package/dist/structures/sequence.d.ts +19 -0
- package/dist/structures/sequence.d.ts.map +1 -0
- package/dist/structures/sequence.js +28 -0
- package/dist/structures/sequence.js.map +1 -0
- package/dist/structures/tree.d.ts +33 -0
- package/dist/structures/tree.d.ts.map +1 -0
- package/dist/structures/tree.js +238 -0
- package/dist/structures/tree.js.map +1 -0
- package/dist/switch.d.ts +21 -0
- package/dist/switch.d.ts.map +1 -0
- package/dist/switch.js +8 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +16 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +27 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tags-input.d.ts +43 -0
- package/dist/tags-input.d.ts.map +1 -0
- package/dist/tags-input.js +48 -0
- package/dist/tags-input.js.map +1 -0
- package/dist/text.d.ts +4 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +4 -0
- package/dist/text.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/timer.d.ts +37 -0
- package/dist/timer.d.ts.map +1 -0
- package/dist/timer.js +84 -0
- package/dist/timer.js.map +1 -0
- package/dist/toast.d.ts +56 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +87 -0
- package/dist/toast.js.map +1 -0
- package/dist/toggle-button.d.ts +20 -0
- package/dist/toggle-button.d.ts.map +1 -0
- package/dist/toggle-button.js +20 -0
- package/dist/toggle-button.js.map +1 -0
- package/dist/toggle-group.d.ts +25 -0
- package/dist/toggle-group.d.ts.map +1 -0
- package/dist/toggle-group.js +30 -0
- package/dist/toggle-group.js.map +1 -0
- package/dist/toolbar.d.ts +3 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +3 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tooltip.d.ts +3 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +3 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree-grid.d.ts +13 -0
- package/dist/tree-grid.d.ts.map +1 -0
- package/dist/tree-grid.js +20 -0
- package/dist/tree-grid.js.map +1 -0
- package/dist/tree-view.d.ts +3 -0
- package/dist/tree-view.d.ts.map +1 -0
- package/dist/tree-view.js +3 -0
- package/dist/tree-view.js.map +1 -0
- package/dist/units.d.ts +77 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +512 -0
- package/dist/units.js.map +1 -0
- package/dist/window-splitter.d.ts +3 -0
- package/dist/window-splitter.d.ts.map +1 -0
- package/dist/window-splitter.js +3 -0
- package/dist/window-splitter.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 +7 -2
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { unwrap } from './result.js';
|
|
2
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
3
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
4
|
+
import { addDateDays, addDateMonths, addDateYears, compareDateValues, createDateValue, formatDateValue, parseDateValue, tryCreateDateValue, } from './date-field.js';
|
|
5
|
+
import { createTimeValue, formatTimeValue, parseTimeValue, tryCreateTimeValue, } from './time-field.js';
|
|
6
|
+
import { applyTextEvent, createTextEditingState, normalizeTextEditingState, tryCreateTextEditingState, } from './text.js';
|
|
7
|
+
const DATE_TIME_FIELD_MAX_CODE_UNITS = 23;
|
|
8
|
+
const MILLISECONDS_PER_DAY = 86_400_000;
|
|
9
|
+
export function createDateTimeValue(date, time) {
|
|
10
|
+
return unwrap(tryCreateDateTimeValue(date, time));
|
|
11
|
+
}
|
|
12
|
+
export function tryCreateDateTimeValue(date, time) {
|
|
13
|
+
const validDate = tryCreateDateValue(date.year, date.month, date.day);
|
|
14
|
+
if (!validDate.ok)
|
|
15
|
+
return validDate;
|
|
16
|
+
const validTime = tryCreateTimeValue(time.hour, time.minute, time.second, time.millisecond);
|
|
17
|
+
if (!validTime.ok)
|
|
18
|
+
return validTime;
|
|
19
|
+
return ok(Object.freeze({ date: validDate.value, time: validTime.value }));
|
|
20
|
+
}
|
|
21
|
+
export function parseDateTimeValue(text) {
|
|
22
|
+
if (typeof text !== 'string') {
|
|
23
|
+
return fail('construction', 'invalid-date-time-text', 'Date-time text must be a string.');
|
|
24
|
+
}
|
|
25
|
+
const separator = text.indexOf('T');
|
|
26
|
+
if (separator !== 10 || text.indexOf('T', separator + 1) !== -1) {
|
|
27
|
+
return fail('transition-rejection', 'invalid-date-time-format', 'Date-time text must use YYYY-MM-DDTHH:mm, with optional seconds and milliseconds.', { text });
|
|
28
|
+
}
|
|
29
|
+
const date = parseDateValue(text.slice(0, separator));
|
|
30
|
+
if (!date.ok)
|
|
31
|
+
return date;
|
|
32
|
+
const time = parseTimeValue(text.slice(separator + 1));
|
|
33
|
+
return time.ok ? tryCreateDateTimeValue(date.value, time.value) : time;
|
|
34
|
+
}
|
|
35
|
+
export function formatDateTimeValue(value) {
|
|
36
|
+
return `${formatDateValue(value.date)}T${formatTimeValue(value.time)}`;
|
|
37
|
+
}
|
|
38
|
+
export function compareDateTimeValues(left, right) {
|
|
39
|
+
const dateOrder = compareDateValues(left.date, right.date);
|
|
40
|
+
if (dateOrder !== 0)
|
|
41
|
+
return dateOrder;
|
|
42
|
+
const leftTime = timeToMilliseconds(left.time);
|
|
43
|
+
const rightTime = timeToMilliseconds(right.time);
|
|
44
|
+
return leftTime < rightTime ? -1 : leftTime > rightTime ? 1 : 0;
|
|
45
|
+
}
|
|
46
|
+
export function createDateTimeRange(start, end) {
|
|
47
|
+
return unwrap(tryCreateDateTimeRange(start, end));
|
|
48
|
+
}
|
|
49
|
+
export function tryCreateDateTimeRange(start, end) {
|
|
50
|
+
const validStart = tryCreateDateTimeValue(start.date, start.time);
|
|
51
|
+
if (!validStart.ok)
|
|
52
|
+
return validStart;
|
|
53
|
+
const validEnd = tryCreateDateTimeValue(end.date, end.time);
|
|
54
|
+
if (!validEnd.ok)
|
|
55
|
+
return validEnd;
|
|
56
|
+
if (compareDateTimeValues(validStart.value, validEnd.value) > 0) {
|
|
57
|
+
return fail('construction', 'inverted-date-time-range', 'Date-time range start must not follow its end.');
|
|
58
|
+
}
|
|
59
|
+
return ok(Object.freeze({ start: validStart.value, end: validEnd.value }));
|
|
60
|
+
}
|
|
61
|
+
export function formatDateTimeRange(value) {
|
|
62
|
+
return `${formatDateTimeValue(value.start)}/${formatDateTimeValue(value.end)}`;
|
|
63
|
+
}
|
|
64
|
+
export function addDateTimeMilliseconds(value, amount) {
|
|
65
|
+
if (!Number.isSafeInteger(amount)) {
|
|
66
|
+
return fail('transition-rejection', 'invalid-date-time-delta', 'Date-time delta must be a safe integer.');
|
|
67
|
+
}
|
|
68
|
+
const total = timeToMilliseconds(value.time) + amount;
|
|
69
|
+
const dayDelta = Math.floor(total / MILLISECONDS_PER_DAY);
|
|
70
|
+
const timeOfDay = ((total % MILLISECONDS_PER_DAY) + MILLISECONDS_PER_DAY) % MILLISECONDS_PER_DAY;
|
|
71
|
+
const date = addDateDays(value.date, dayDelta);
|
|
72
|
+
if (!date.ok)
|
|
73
|
+
return date;
|
|
74
|
+
const time = millisecondsToTime(timeOfDay);
|
|
75
|
+
return time.ok ? tryCreateDateTimeValue(date.value, time.value) : time;
|
|
76
|
+
}
|
|
77
|
+
export function createDateTimeFieldState(value = null, inputState) {
|
|
78
|
+
return unwrap(tryCreateDateTimeFieldState(value, inputState));
|
|
79
|
+
}
|
|
80
|
+
export function tryCreateDateTimeFieldState(value = null, inputState) {
|
|
81
|
+
const valid = value === null ? ok(null) : tryCreateDateTimeValue(value.date, value.time);
|
|
82
|
+
if (!valid.ok)
|
|
83
|
+
return valid;
|
|
84
|
+
const input = inputState === undefined
|
|
85
|
+
? committedInput(valid.value)
|
|
86
|
+
: normalizeTextEditingState(inputState);
|
|
87
|
+
if (!input.ok)
|
|
88
|
+
return input;
|
|
89
|
+
if (input.value.snapshot.text.length > DATE_TIME_FIELD_MAX_CODE_UNITS) {
|
|
90
|
+
return fail('construction', 'date-time-field-draft-too-long', 'Date-time field drafts must fit YYYY-MM-DDTHH:mm with optional seconds and milliseconds.');
|
|
91
|
+
}
|
|
92
|
+
return ok(Object.freeze({ value: valid.value, inputState: input.value }));
|
|
93
|
+
}
|
|
94
|
+
export function applyDateTimeFieldEvent(state, event, policies = {}) {
|
|
95
|
+
const valid = tryCreateDateTimeFieldState(state.value, state.inputState);
|
|
96
|
+
if (!valid.ok)
|
|
97
|
+
return invalidTransition(valid);
|
|
98
|
+
const policy = validatePolicies(policies);
|
|
99
|
+
if (!policy.ok)
|
|
100
|
+
return policy;
|
|
101
|
+
if (typeof event === 'object' && event.type === 'text') {
|
|
102
|
+
const edited = applyTextEvent(valid.value.inputState, event.event);
|
|
103
|
+
if (!edited.ok)
|
|
104
|
+
return edited;
|
|
105
|
+
if (edited.value.state.snapshot.text.length > DATE_TIME_FIELD_MAX_CODE_UNITS) {
|
|
106
|
+
return fail('transition-rejection', 'date-time-field-draft-too-long', 'Date-time field drafts must fit YYYY-MM-DDTHH:mm with optional seconds and milliseconds.');
|
|
107
|
+
}
|
|
108
|
+
return createMachineUpdate(Object.freeze({ value: valid.value.value, inputState: edited.value.state }), [{ type: 'input-state-changed', value: edited.value.state }]);
|
|
109
|
+
}
|
|
110
|
+
if (typeof event === 'object' && event.type === 'set-value') {
|
|
111
|
+
return commitValue(event.value, policies);
|
|
112
|
+
}
|
|
113
|
+
if (event === 'cancel') {
|
|
114
|
+
const input = committedInput(valid.value.value);
|
|
115
|
+
if (!input.ok)
|
|
116
|
+
return input;
|
|
117
|
+
return createMachineUpdate(Object.freeze({ value: valid.value.value, inputState: input.value }), [{ type: 'input-state-changed', value: input.value }]);
|
|
118
|
+
}
|
|
119
|
+
if (event === 'increment-segment' || event === 'decrement-segment') {
|
|
120
|
+
const draft = parseDateTimeValue(valid.value.inputState.snapshot.text);
|
|
121
|
+
if (!draft.ok && valid.value.value === null)
|
|
122
|
+
return draft;
|
|
123
|
+
const base = draft.ok ? draft.value : valid.value.value;
|
|
124
|
+
if (base === null) {
|
|
125
|
+
return fail('transition-rejection', 'date-time-field-value-missing', 'Date-time field has no value to adjust.');
|
|
126
|
+
}
|
|
127
|
+
const segment = dateTimeSegmentAt(valid.value.inputState.snapshot.selection.focusCodeUnitOffset);
|
|
128
|
+
const requested = policies.step?.[segment] ?? 1;
|
|
129
|
+
if (!Number.isSafeInteger(requested) || requested < 1) {
|
|
130
|
+
return fail('construction', 'invalid-date-time-field-step', 'Date-time field segment steps must be positive safe integers.');
|
|
131
|
+
}
|
|
132
|
+
const direction = event === 'increment-segment' ? 1 : -1;
|
|
133
|
+
const adjusted = adjustSegment(base, segment, requested * direction);
|
|
134
|
+
return adjusted.ok ? commitValue(adjusted.value, policies, segment) : adjusted;
|
|
135
|
+
}
|
|
136
|
+
if (event !== 'commit') {
|
|
137
|
+
return fail('transition-rejection', 'unsupported-date-time-field-event', 'Date-time field event is unsupported.');
|
|
138
|
+
}
|
|
139
|
+
if (valid.value.inputState.composition !== null) {
|
|
140
|
+
return fail('transition-rejection', 'date-time-field-composition-active', 'Date-time field cannot commit while text composition is active.');
|
|
141
|
+
}
|
|
142
|
+
const text = valid.value.inputState.snapshot.text.trim();
|
|
143
|
+
if (text.length === 0)
|
|
144
|
+
return commitValue(null, policies);
|
|
145
|
+
const parsed = parseDateTimeValue(text);
|
|
146
|
+
return parsed.ok ? commitValue(parsed.value, policies) : parsed;
|
|
147
|
+
}
|
|
148
|
+
export function dateTimeSegmentAt(offset) {
|
|
149
|
+
if (offset <= 4)
|
|
150
|
+
return 'year';
|
|
151
|
+
if (offset <= 7)
|
|
152
|
+
return 'month';
|
|
153
|
+
if (offset <= 10)
|
|
154
|
+
return 'day';
|
|
155
|
+
if (offset <= 13)
|
|
156
|
+
return 'hour';
|
|
157
|
+
if (offset <= 16)
|
|
158
|
+
return 'minute';
|
|
159
|
+
if (offset <= 19)
|
|
160
|
+
return 'second';
|
|
161
|
+
return 'millisecond';
|
|
162
|
+
}
|
|
163
|
+
function adjustSegment(value, segment, amount) {
|
|
164
|
+
if (segment === 'year' || segment === 'month' || segment === 'day') {
|
|
165
|
+
const date = segment === 'year'
|
|
166
|
+
? addDateYears(value.date, amount)
|
|
167
|
+
: segment === 'month'
|
|
168
|
+
? addDateMonths(value.date, amount)
|
|
169
|
+
: addDateDays(value.date, amount);
|
|
170
|
+
return date.ok ? tryCreateDateTimeValue(date.value, value.time) : date;
|
|
171
|
+
}
|
|
172
|
+
const unit = segment === 'hour'
|
|
173
|
+
? 3_600_000
|
|
174
|
+
: segment === 'minute'
|
|
175
|
+
? 60_000
|
|
176
|
+
: segment === 'second'
|
|
177
|
+
? 1_000
|
|
178
|
+
: 1;
|
|
179
|
+
return addDateTimeMilliseconds(value, unit * amount);
|
|
180
|
+
}
|
|
181
|
+
function commitValue(value, policies, segment) {
|
|
182
|
+
if (value === null) {
|
|
183
|
+
if (policies.required === true) {
|
|
184
|
+
return fail('transition-rejection', 'date-time-field-value-required', 'Date-time field requires a value.');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const valid = tryCreateDateTimeValue(value.date, value.time);
|
|
189
|
+
if (!valid.ok)
|
|
190
|
+
return invalidTransition(valid);
|
|
191
|
+
value = valid.value;
|
|
192
|
+
if (policies.min !== undefined && compareDateTimeValues(value, policies.min) < 0) {
|
|
193
|
+
return fail('transition-rejection', 'date-time-field-value-below-minimum', 'Date-time field value is below its minimum.');
|
|
194
|
+
}
|
|
195
|
+
if (policies.max !== undefined && compareDateTimeValues(value, policies.max) > 0) {
|
|
196
|
+
return fail('transition-rejection', 'date-time-field-value-above-maximum', 'Date-time field value is above its maximum.');
|
|
197
|
+
}
|
|
198
|
+
if (policies.unavailable?.(value) === true) {
|
|
199
|
+
return fail('transition-rejection', 'date-time-field-value-unavailable', 'Date-time field value is unavailable.');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const input = committedInput(value, segment);
|
|
203
|
+
if (!input.ok)
|
|
204
|
+
return input;
|
|
205
|
+
return createMachineUpdate(Object.freeze({ value, inputState: input.value }), [
|
|
206
|
+
{ type: 'input-state-changed', value: input.value },
|
|
207
|
+
{ type: 'value-committed', value },
|
|
208
|
+
]);
|
|
209
|
+
}
|
|
210
|
+
function committedInput(value, segment) {
|
|
211
|
+
const text = value === null ? '' : formatDateTimeValue(value);
|
|
212
|
+
const range = segment === 'year' ? [0, 4]
|
|
213
|
+
: segment === 'month' ? [5, 7]
|
|
214
|
+
: segment === 'day' ? [8, 10]
|
|
215
|
+
: segment === 'hour' ? [11, 13]
|
|
216
|
+
: segment === 'minute' ? [14, 16]
|
|
217
|
+
: segment === 'second' ? [17, 19]
|
|
218
|
+
: segment === 'millisecond' ? [20, 23]
|
|
219
|
+
: [text.length, text.length];
|
|
220
|
+
return tryCreateTextEditingState(text, {
|
|
221
|
+
anchorCodeUnitOffset: Math.min(range[0] ?? 0, text.length),
|
|
222
|
+
focusCodeUnitOffset: Math.min(range[1] ?? 0, text.length),
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
function validatePolicies(policies) {
|
|
226
|
+
if (policies.unavailable !== undefined && typeof policies.unavailable !== 'function') {
|
|
227
|
+
return fail('construction', 'invalid-date-time-unavailable-policy', 'Date-time unavailable policy must be a function.');
|
|
228
|
+
}
|
|
229
|
+
if (policies.min !== undefined) {
|
|
230
|
+
const min = tryCreateDateTimeValue(policies.min.date, policies.min.time);
|
|
231
|
+
if (!min.ok)
|
|
232
|
+
return min;
|
|
233
|
+
}
|
|
234
|
+
if (policies.max !== undefined) {
|
|
235
|
+
const max = tryCreateDateTimeValue(policies.max.date, policies.max.time);
|
|
236
|
+
if (!max.ok)
|
|
237
|
+
return max;
|
|
238
|
+
}
|
|
239
|
+
if (policies.min !== undefined
|
|
240
|
+
&& policies.max !== undefined
|
|
241
|
+
&& compareDateTimeValues(policies.min, policies.max) > 0) {
|
|
242
|
+
return fail('construction', 'inverted-date-time-field-bounds', 'Date-time field minimum must not follow its maximum.');
|
|
243
|
+
}
|
|
244
|
+
if (policies.step !== undefined) {
|
|
245
|
+
for (const value of Object.values(policies.step)) {
|
|
246
|
+
if (value !== undefined && (!Number.isSafeInteger(value) || value < 1)) {
|
|
247
|
+
return fail('construction', 'invalid-date-time-field-step', 'Date-time field segment steps must be positive safe integers.');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return ok(true);
|
|
252
|
+
}
|
|
253
|
+
function timeToMilliseconds(value) {
|
|
254
|
+
return ((value.hour * 60 + value.minute) * 60 + value.second) * 1_000 + value.millisecond;
|
|
255
|
+
}
|
|
256
|
+
function millisecondsToTime(value) {
|
|
257
|
+
const hour = Math.floor(value / 3_600_000);
|
|
258
|
+
const minute = Math.floor((value % 3_600_000) / 60_000);
|
|
259
|
+
const second = Math.floor((value % 60_000) / 1_000);
|
|
260
|
+
return tryCreateTimeValue(hour, minute, second, value % 1_000);
|
|
261
|
+
}
|
|
262
|
+
function invalidTransition(result) {
|
|
263
|
+
return result.ok
|
|
264
|
+
? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.')
|
|
265
|
+
: { ok: false, error: { ...result.error, class: 'transition-rejection' } };
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=date-time-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-field.js","sourceRoot":"","sources":["../src/date-time-field.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Result } from './shared.js';
|
|
2
|
+
import { type DateValue } from './date-field.js';
|
|
3
|
+
import { type DateTimeValue } from './date-time-field.js';
|
|
4
|
+
import { type DatePickerPolicies, type DatePickerState, type DatePickerViewMode } from './date-picker.js';
|
|
5
|
+
import { type TimeFieldPolicies, type TimeValue } from './time-field.js';
|
|
6
|
+
export interface DateTimePickerState {
|
|
7
|
+
readonly value: DateTimeValue | null;
|
|
8
|
+
readonly time: TimeValue;
|
|
9
|
+
readonly calendar: DatePickerState;
|
|
10
|
+
}
|
|
11
|
+
export type DateTimePickerEvent = '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' | {
|
|
12
|
+
readonly type: 'set-view-mode';
|
|
13
|
+
readonly value: DatePickerViewMode;
|
|
14
|
+
} | {
|
|
15
|
+
readonly type: 'select-month';
|
|
16
|
+
readonly value: {
|
|
17
|
+
readonly year: number;
|
|
18
|
+
readonly month: number;
|
|
19
|
+
};
|
|
20
|
+
} | {
|
|
21
|
+
readonly type: 'select-date';
|
|
22
|
+
readonly value: DateValue;
|
|
23
|
+
} | {
|
|
24
|
+
readonly type: 'set-date';
|
|
25
|
+
readonly value: DateValue;
|
|
26
|
+
} | {
|
|
27
|
+
readonly type: 'set-time';
|
|
28
|
+
readonly value: TimeValue;
|
|
29
|
+
} | {
|
|
30
|
+
readonly type: 'set-value';
|
|
31
|
+
readonly value: DateTimeValue | null;
|
|
32
|
+
};
|
|
33
|
+
export type DateTimePickerCommand = {
|
|
34
|
+
readonly type: 'value-committed';
|
|
35
|
+
readonly value: DateTimeValue | null;
|
|
36
|
+
} | {
|
|
37
|
+
readonly type: 'time-changed';
|
|
38
|
+
readonly value: TimeValue;
|
|
39
|
+
} | {
|
|
40
|
+
readonly type: 'highlight-changed';
|
|
41
|
+
readonly value: DateValue;
|
|
42
|
+
} | {
|
|
43
|
+
readonly type: 'view-mode-changed';
|
|
44
|
+
readonly value: DatePickerViewMode;
|
|
45
|
+
} | {
|
|
46
|
+
readonly type: 'open-changed';
|
|
47
|
+
readonly open: boolean;
|
|
48
|
+
};
|
|
49
|
+
export interface DateTimePickerPolicies {
|
|
50
|
+
readonly date?: DatePickerPolicies;
|
|
51
|
+
readonly time?: TimeFieldPolicies;
|
|
52
|
+
readonly min?: DateTimeValue;
|
|
53
|
+
readonly max?: DateTimeValue;
|
|
54
|
+
readonly required?: boolean;
|
|
55
|
+
readonly unavailable?: (value: DateTimeValue) => boolean;
|
|
56
|
+
readonly defaultTime?: TimeValue;
|
|
57
|
+
}
|
|
58
|
+
export type DateTimePickerUnavailablePredicate = NonNullable<DateTimePickerPolicies['unavailable']>;
|
|
59
|
+
export interface DateTimePickerUpdate {
|
|
60
|
+
readonly state: DateTimePickerState;
|
|
61
|
+
readonly commands: readonly DateTimePickerCommand[];
|
|
62
|
+
}
|
|
63
|
+
export interface DateTimePickerStateInput {
|
|
64
|
+
readonly value?: DateTimeValue | null;
|
|
65
|
+
readonly time?: TimeValue;
|
|
66
|
+
readonly calendar?: Partial<DatePickerState>;
|
|
67
|
+
}
|
|
68
|
+
export declare function createDateTimePickerState(input?: DateTimePickerStateInput): DateTimePickerState;
|
|
69
|
+
export declare function tryCreateDateTimePickerState(input?: DateTimePickerStateInput): Result<DateTimePickerState>;
|
|
70
|
+
export declare function applyDateTimePickerEvent(state: DateTimePickerState, event: DateTimePickerEvent, policies?: DateTimePickerPolicies): Result<DateTimePickerUpdate>;
|
|
71
|
+
//# sourceMappingURL=date-time-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-picker.d.ts","sourceRoot":"","sources":["../src/date-time-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { unwrap } from './result.js';
|
|
2
|
+
import { fail, ok } from './internal/kernel/foundation.js';
|
|
3
|
+
import { createMachineUpdate } from './internal/kernel/machine.js';
|
|
4
|
+
import { compareDateValues, createDateValue, tryCreateDateValue } from './date-field.js';
|
|
5
|
+
import { compareDateTimeValues, createDateTimeValue, tryCreateDateTimeValue, } from './date-time-field.js';
|
|
6
|
+
import { applyDatePickerEvent, createDatePickerState, isDatePickerValueAvailable, tryCreateDatePickerState, } from './date-picker.js';
|
|
7
|
+
import { compareTimeValues, createTimeValue, tryCreateTimeValue, } from './time-field.js';
|
|
8
|
+
export function createDateTimePickerState(input = {}) {
|
|
9
|
+
return unwrap(tryCreateDateTimePickerState(input));
|
|
10
|
+
}
|
|
11
|
+
export function tryCreateDateTimePickerState(input = {}) {
|
|
12
|
+
const value = input.value ?? null;
|
|
13
|
+
const validValue = value === null ? ok(null) : tryCreateDateTimeValue(value.date, value.time);
|
|
14
|
+
if (!validValue.ok)
|
|
15
|
+
return validValue;
|
|
16
|
+
const requestedTime = validValue.value?.time ?? input.time ?? Object.freeze({
|
|
17
|
+
hour: 0,
|
|
18
|
+
minute: 0,
|
|
19
|
+
second: 0,
|
|
20
|
+
millisecond: 0,
|
|
21
|
+
});
|
|
22
|
+
const time = tryCreateTimeValue(requestedTime.hour, requestedTime.minute, requestedTime.second, requestedTime.millisecond);
|
|
23
|
+
if (!time.ok)
|
|
24
|
+
return time;
|
|
25
|
+
const fallback = validValue.value?.date;
|
|
26
|
+
const calendar = tryCreateDatePickerState({
|
|
27
|
+
value: null,
|
|
28
|
+
...(input.calendar?.highlighted === undefined && fallback !== undefined
|
|
29
|
+
? { highlighted: fallback }
|
|
30
|
+
: {}),
|
|
31
|
+
...input.calendar,
|
|
32
|
+
});
|
|
33
|
+
if (!calendar.ok)
|
|
34
|
+
return calendar;
|
|
35
|
+
return ok(Object.freeze({ value: validValue.value, time: time.value, calendar: calendar.value }));
|
|
36
|
+
}
|
|
37
|
+
export function applyDateTimePickerEvent(state, event, policies = {}) {
|
|
38
|
+
const valid = tryCreateDateTimePickerState(state);
|
|
39
|
+
if (!valid.ok)
|
|
40
|
+
return invalidTransition(valid);
|
|
41
|
+
const policy = validatePolicies(policies);
|
|
42
|
+
if (!policy.ok)
|
|
43
|
+
return policy;
|
|
44
|
+
if (typeof event === 'object' && event.type === 'set-value') {
|
|
45
|
+
return commitValue(valid.value, event.value, policies);
|
|
46
|
+
}
|
|
47
|
+
if (typeof event === 'object' && event.type === 'set-time') {
|
|
48
|
+
const time = validateTime(event.value, policies.time);
|
|
49
|
+
if (!time.ok)
|
|
50
|
+
return time;
|
|
51
|
+
const value = tryCreateDateTimeValue(valid.value.value?.date ?? valid.value.calendar.highlighted, time.value);
|
|
52
|
+
return value.ok ? commitValue(valid.value, value.value, policies) : value;
|
|
53
|
+
}
|
|
54
|
+
if (event === 'select-highlighted') {
|
|
55
|
+
return selectDate(valid.value, valid.value.calendar.highlighted, policies);
|
|
56
|
+
}
|
|
57
|
+
if (typeof event === 'object' && (event.type === 'select-date' || event.type === 'set-date')) {
|
|
58
|
+
return selectDate(valid.value, event.value, policies);
|
|
59
|
+
}
|
|
60
|
+
const update = applyDatePickerEvent(valid.value.calendar, event, policies.date);
|
|
61
|
+
if (!update.ok)
|
|
62
|
+
return update;
|
|
63
|
+
return createMachineUpdate(Object.freeze({ value: valid.value.value, time: valid.value.time, calendar: update.value.state }), update.value.commands.flatMap((command) => command.type === 'highlight-changed' || command.type === 'view-mode-changed' || command.type === 'open-changed' ? [command] : []));
|
|
64
|
+
}
|
|
65
|
+
function selectDate(state, requested, policies) {
|
|
66
|
+
const date = tryCreateDateValue(requested.year, requested.month, requested.day);
|
|
67
|
+
if (!date.ok)
|
|
68
|
+
return invalidTransition(date);
|
|
69
|
+
if (!isDatePickerValueAvailable(date.value, policies.date)) {
|
|
70
|
+
return fail('transition-rejection', 'date-time-picker-date-unavailable', 'Date-time picker date is outside its selectable domain.');
|
|
71
|
+
}
|
|
72
|
+
const value = tryCreateDateTimeValue(date.value, state.time);
|
|
73
|
+
return value.ok ? commitValue(state, value.value, policies) : value;
|
|
74
|
+
}
|
|
75
|
+
function commitValue(state, requested, policies) {
|
|
76
|
+
if (requested === null) {
|
|
77
|
+
if (policies.required === true) {
|
|
78
|
+
return fail('transition-rejection', 'date-time-picker-value-required', 'Date-time picker requires a value.');
|
|
79
|
+
}
|
|
80
|
+
return createMachineUpdate(Object.freeze({ value: null, time: state.time, calendar: state.calendar }), [{ type: 'value-committed', value: null }]);
|
|
81
|
+
}
|
|
82
|
+
const value = validateValue(requested, policies);
|
|
83
|
+
if (!value.ok)
|
|
84
|
+
return value;
|
|
85
|
+
const calendar = tryCreateDatePickerState({
|
|
86
|
+
value: null,
|
|
87
|
+
highlighted: value.value.date,
|
|
88
|
+
view: { year: value.value.date.year, month: value.value.date.month },
|
|
89
|
+
viewMode: state.calendar.viewMode,
|
|
90
|
+
open: state.calendar.open,
|
|
91
|
+
});
|
|
92
|
+
if (!calendar.ok)
|
|
93
|
+
return calendar;
|
|
94
|
+
return createMachineUpdate(Object.freeze({ value: value.value, time: value.value.time, calendar: calendar.value }), [
|
|
95
|
+
{ type: 'value-committed', value: value.value },
|
|
96
|
+
...(compareTimeValues(state.time, value.value.time) === 0
|
|
97
|
+
? []
|
|
98
|
+
: [{ type: 'time-changed', value: value.value.time }]),
|
|
99
|
+
...(compareDateValues(state.calendar.highlighted, value.value.date) === 0
|
|
100
|
+
? []
|
|
101
|
+
: [{ type: 'highlight-changed', value: value.value.date }]),
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
function validateValue(requested, policies) {
|
|
105
|
+
const value = tryCreateDateTimeValue(requested.date, requested.time);
|
|
106
|
+
if (!value.ok)
|
|
107
|
+
return invalidTransition(value);
|
|
108
|
+
if (!isDatePickerValueAvailable(value.value.date, policies.date)) {
|
|
109
|
+
return fail('transition-rejection', 'date-time-picker-date-unavailable', 'Date-time picker date is outside its selectable domain.');
|
|
110
|
+
}
|
|
111
|
+
const time = validateTime(value.value.time, policies.time);
|
|
112
|
+
if (!time.ok)
|
|
113
|
+
return time;
|
|
114
|
+
if (policies.min !== undefined && compareDateTimeValues(value.value, policies.min) < 0) {
|
|
115
|
+
return fail('transition-rejection', 'date-time-picker-value-below-minimum', 'Date-time picker value is below its minimum.');
|
|
116
|
+
}
|
|
117
|
+
if (policies.max !== undefined && compareDateTimeValues(value.value, policies.max) > 0) {
|
|
118
|
+
return fail('transition-rejection', 'date-time-picker-value-above-maximum', 'Date-time picker value is above its maximum.');
|
|
119
|
+
}
|
|
120
|
+
if (policies.unavailable?.(value.value) === true) {
|
|
121
|
+
return fail('transition-rejection', 'date-time-picker-value-unavailable', 'Date-time picker value is unavailable.');
|
|
122
|
+
}
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
function validateTime(value, policies = {}) {
|
|
126
|
+
const valid = tryCreateTimeValue(value.hour, value.minute, value.second, value.millisecond);
|
|
127
|
+
if (!valid.ok)
|
|
128
|
+
return invalidTransition(valid);
|
|
129
|
+
if (policies.min !== undefined && compareTimeValues(valid.value, policies.min) < 0) {
|
|
130
|
+
return fail('transition-rejection', 'date-time-picker-time-below-minimum', 'Date-time picker time is below its minimum.');
|
|
131
|
+
}
|
|
132
|
+
if (policies.max !== undefined && compareTimeValues(valid.value, policies.max) > 0) {
|
|
133
|
+
return fail('transition-rejection', 'date-time-picker-time-above-maximum', 'Date-time picker time is above its maximum.');
|
|
134
|
+
}
|
|
135
|
+
return valid;
|
|
136
|
+
}
|
|
137
|
+
function validatePolicies(policies) {
|
|
138
|
+
if (policies.unavailable !== undefined && typeof policies.unavailable !== 'function') {
|
|
139
|
+
return fail('construction', 'invalid-date-time-picker-unavailable-policy', 'Date-time picker unavailable policy must be a function.');
|
|
140
|
+
}
|
|
141
|
+
if (policies.defaultTime !== undefined) {
|
|
142
|
+
const time = validateTime(policies.defaultTime, policies.time);
|
|
143
|
+
if (!time.ok)
|
|
144
|
+
return time;
|
|
145
|
+
}
|
|
146
|
+
if (policies.min !== undefined && policies.max !== undefined && compareDateTimeValues(policies.min, policies.max) > 0) {
|
|
147
|
+
return fail('construction', 'inverted-date-time-picker-bounds', 'Date-time picker minimum must not follow its maximum.');
|
|
148
|
+
}
|
|
149
|
+
return ok(true);
|
|
150
|
+
}
|
|
151
|
+
function invalidTransition(result) {
|
|
152
|
+
return result.ok
|
|
153
|
+
? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.')
|
|
154
|
+
: { ok: false, error: { ...result.error, class: 'transition-rejection' } };
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=date-time-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-picker.js","sourceRoot":"","sources":["../src/date-time-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Result } from './shared.js';
|
|
2
|
+
import { type DateValue } from './date-field.js';
|
|
3
|
+
import { type DateTimeRange, type DateTimeValue } from './date-time-field.js';
|
|
4
|
+
import { type DatePickerPolicies, type DatePickerState, type DatePickerViewMode } from './date-picker.js';
|
|
5
|
+
import { type TimeFieldPolicies, type TimeValue } from './time-field.js';
|
|
6
|
+
export interface DateTimeRangePickerState {
|
|
7
|
+
readonly value: DateTimeRange | null;
|
|
8
|
+
readonly anchor: DateValue | null;
|
|
9
|
+
readonly startTime: TimeValue;
|
|
10
|
+
readonly endTime: TimeValue;
|
|
11
|
+
readonly calendar: DatePickerState;
|
|
12
|
+
}
|
|
13
|
+
export type DateTimeRangePickerEvent = 'open' | 'close' | 'toggle' | 'clear' | '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: 'set-view-mode';
|
|
15
|
+
readonly value: DatePickerViewMode;
|
|
16
|
+
} | {
|
|
17
|
+
readonly type: 'select-month';
|
|
18
|
+
readonly value: {
|
|
19
|
+
readonly year: number;
|
|
20
|
+
readonly month: number;
|
|
21
|
+
};
|
|
22
|
+
} | {
|
|
23
|
+
readonly type: 'select-date';
|
|
24
|
+
readonly value: DateValue;
|
|
25
|
+
} | {
|
|
26
|
+
readonly type: 'set-start-date';
|
|
27
|
+
readonly value: DateValue;
|
|
28
|
+
} | {
|
|
29
|
+
readonly type: 'set-end-date';
|
|
30
|
+
readonly value: DateValue;
|
|
31
|
+
} | {
|
|
32
|
+
readonly type: 'set-start-time';
|
|
33
|
+
readonly value: TimeValue;
|
|
34
|
+
} | {
|
|
35
|
+
readonly type: 'set-end-time';
|
|
36
|
+
readonly value: TimeValue;
|
|
37
|
+
} | {
|
|
38
|
+
readonly type: 'set-value';
|
|
39
|
+
readonly value: DateTimeRange | null;
|
|
40
|
+
};
|
|
41
|
+
export type DateTimeRangePickerCommand = {
|
|
42
|
+
readonly type: 'range-committed';
|
|
43
|
+
readonly value: DateTimeRange | null;
|
|
44
|
+
} | {
|
|
45
|
+
readonly type: 'range-anchor-changed';
|
|
46
|
+
readonly value: DateValue | null;
|
|
47
|
+
} | {
|
|
48
|
+
readonly type: 'start-time-changed';
|
|
49
|
+
readonly value: TimeValue;
|
|
50
|
+
} | {
|
|
51
|
+
readonly type: 'end-time-changed';
|
|
52
|
+
readonly value: TimeValue;
|
|
53
|
+
} | {
|
|
54
|
+
readonly type: 'highlight-changed';
|
|
55
|
+
readonly value: DateValue;
|
|
56
|
+
} | {
|
|
57
|
+
readonly type: 'view-mode-changed';
|
|
58
|
+
readonly value: DatePickerViewMode;
|
|
59
|
+
} | {
|
|
60
|
+
readonly type: 'open-changed';
|
|
61
|
+
readonly open: boolean;
|
|
62
|
+
};
|
|
63
|
+
export interface DateTimeRangePickerPolicies {
|
|
64
|
+
readonly date?: DatePickerPolicies;
|
|
65
|
+
readonly startTime?: TimeFieldPolicies;
|
|
66
|
+
readonly endTime?: TimeFieldPolicies;
|
|
67
|
+
readonly min?: DateTimeValue;
|
|
68
|
+
readonly max?: DateTimeValue;
|
|
69
|
+
readonly required?: boolean;
|
|
70
|
+
readonly unavailable?: (value: DateTimeValue) => boolean;
|
|
71
|
+
}
|
|
72
|
+
export type DateTimeRangePickerUnavailablePredicate = NonNullable<DateTimeRangePickerPolicies['unavailable']>;
|
|
73
|
+
export interface DateTimeRangePickerUpdate {
|
|
74
|
+
readonly state: DateTimeRangePickerState;
|
|
75
|
+
readonly commands: readonly DateTimeRangePickerCommand[];
|
|
76
|
+
}
|
|
77
|
+
export interface DateTimeRangePickerStateInput {
|
|
78
|
+
readonly value?: DateTimeRange | null;
|
|
79
|
+
readonly anchor?: DateValue | null;
|
|
80
|
+
readonly startTime?: TimeValue;
|
|
81
|
+
readonly endTime?: TimeValue;
|
|
82
|
+
readonly calendar?: Partial<DatePickerState>;
|
|
83
|
+
}
|
|
84
|
+
export declare function createDateTimeRangePickerState(input?: DateTimeRangePickerStateInput): DateTimeRangePickerState;
|
|
85
|
+
export declare function tryCreateDateTimeRangePickerState(input?: DateTimeRangePickerStateInput): Result<DateTimeRangePickerState>;
|
|
86
|
+
export declare function applyDateTimeRangePickerEvent(state: DateTimeRangePickerState, event: DateTimeRangePickerEvent, policies?: DateTimeRangePickerPolicies): Result<DateTimeRangePickerUpdate>;
|
|
87
|
+
//# sourceMappingURL=date-time-range-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-range-picker.d.ts","sourceRoot":"","sources":["../src/date-time-range-picker.ts"],"names":[],"mappings":"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"}
|