@sectile/core 0.1.0 → 0.2.0

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