@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.
Files changed (377) hide show
  1. package/dist/accordion.d.ts +44 -0
  2. package/dist/accordion.d.ts.map +1 -0
  3. package/dist/accordion.js +87 -0
  4. package/dist/accordion.js.map +1 -0
  5. package/dist/alert-dialog.d.ts +19 -0
  6. package/dist/alert-dialog.d.ts.map +1 -0
  7. package/dist/alert-dialog.js +10 -0
  8. package/dist/alert-dialog.js.map +1 -0
  9. package/dist/calendar.d.ts +3 -0
  10. package/dist/calendar.d.ts.map +1 -0
  11. package/dist/calendar.js +3 -0
  12. package/dist/calendar.js.map +1 -0
  13. package/dist/carousel.d.ts +41 -0
  14. package/dist/carousel.d.ts.map +1 -0
  15. package/dist/carousel.js +55 -0
  16. package/dist/carousel.js.map +1 -0
  17. package/dist/cascade-select.d.ts +48 -0
  18. package/dist/cascade-select.d.ts.map +1 -0
  19. package/dist/cascade-select.js +148 -0
  20. package/dist/cascade-select.js.map +1 -0
  21. package/dist/checkbox-group.d.ts +13 -0
  22. package/dist/checkbox-group.d.ts.map +1 -0
  23. package/dist/checkbox-group.js +16 -0
  24. package/dist/checkbox-group.js.map +1 -0
  25. package/dist/checkbox.d.ts +3 -0
  26. package/dist/checkbox.d.ts.map +1 -0
  27. package/dist/checkbox.js +3 -0
  28. package/dist/checkbox.js.map +1 -0
  29. package/dist/collection-window.d.ts +51 -0
  30. package/dist/collection-window.d.ts.map +1 -0
  31. package/dist/collection-window.js +111 -0
  32. package/dist/collection-window.js.map +1 -0
  33. package/dist/color-picker.d.ts +101 -0
  34. package/dist/color-picker.d.ts.map +1 -0
  35. package/dist/color-picker.js +503 -0
  36. package/dist/color-picker.js.map +1 -0
  37. package/dist/combobox.d.ts +17 -0
  38. package/dist/combobox.d.ts.map +1 -0
  39. package/dist/combobox.js +46 -0
  40. package/dist/combobox.js.map +1 -0
  41. package/dist/date-field.d.ts +62 -0
  42. package/dist/date-field.d.ts.map +1 -0
  43. package/dist/date-field.js +245 -0
  44. package/dist/date-field.js.map +1 -0
  45. package/dist/date-picker.d.ts +76 -0
  46. package/dist/date-picker.d.ts.map +1 -0
  47. package/dist/date-picker.js +261 -0
  48. package/dist/date-picker.js.map +1 -0
  49. package/dist/date-range-field.d.ts +47 -0
  50. package/dist/date-range-field.d.ts.map +1 -0
  51. package/dist/date-range-field.js +66 -0
  52. package/dist/date-range-field.js.map +1 -0
  53. package/dist/date-range-picker.d.ts +29 -0
  54. package/dist/date-range-picker.d.ts.map +1 -0
  55. package/dist/date-range-picker.js +89 -0
  56. package/dist/date-range-picker.js.map +1 -0
  57. package/dist/date-time-field.d.ts +57 -0
  58. package/dist/date-time-field.d.ts.map +1 -0
  59. package/dist/date-time-field.js +267 -0
  60. package/dist/date-time-field.js.map +1 -0
  61. package/dist/date-time-picker.d.ts +71 -0
  62. package/dist/date-time-picker.d.ts.map +1 -0
  63. package/dist/date-time-picker.js +156 -0
  64. package/dist/date-time-picker.js.map +1 -0
  65. package/dist/date-time-range-picker.d.ts +87 -0
  66. package/dist/date-time-range-picker.d.ts.map +1 -0
  67. package/dist/date-time-range-picker.js +252 -0
  68. package/dist/date-time-range-picker.js.map +1 -0
  69. package/dist/dialog.d.ts +17 -0
  70. package/dist/dialog.d.ts.map +1 -0
  71. package/dist/dialog.js +6 -0
  72. package/dist/dialog.js.map +1 -0
  73. package/dist/disclosure.d.ts +3 -0
  74. package/dist/disclosure.d.ts.map +1 -0
  75. package/dist/disclosure.js +3 -0
  76. package/dist/disclosure.js.map +1 -0
  77. package/dist/drawer.d.ts +24 -0
  78. package/dist/drawer.d.ts.map +1 -0
  79. package/dist/drawer.js +36 -0
  80. package/dist/drawer.js.map +1 -0
  81. package/dist/editable.d.ts +29 -0
  82. package/dist/editable.d.ts.map +1 -0
  83. package/dist/editable.js +34 -0
  84. package/dist/editable.js.map +1 -0
  85. package/dist/feed.d.ts +49 -0
  86. package/dist/feed.d.ts.map +1 -0
  87. package/dist/feed.js +124 -0
  88. package/dist/feed.js.map +1 -0
  89. package/dist/form.d.ts +135 -0
  90. package/dist/form.d.ts.map +1 -0
  91. package/dist/form.js +627 -0
  92. package/dist/form.js.map +1 -0
  93. package/dist/index.d.ts +37 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +2 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/interaction.d.ts +15 -0
  98. package/dist/interaction.d.ts.map +1 -0
  99. package/dist/interaction.js +42 -0
  100. package/dist/interaction.js.map +1 -0
  101. package/dist/internal/composites/calendar.d.ts +36 -0
  102. package/dist/internal/composites/calendar.d.ts.map +1 -0
  103. package/dist/internal/composites/calendar.js +143 -0
  104. package/dist/internal/composites/calendar.js.map +1 -0
  105. package/dist/internal/composites/combobox.d.ts +42 -0
  106. package/dist/internal/composites/combobox.d.ts.map +1 -0
  107. package/dist/internal/composites/combobox.js +188 -0
  108. package/dist/internal/composites/combobox.js.map +1 -0
  109. package/dist/internal/composites/grid-control.d.ts +37 -0
  110. package/dist/internal/composites/grid-control.d.ts.map +1 -0
  111. package/dist/internal/composites/grid-control.js +90 -0
  112. package/dist/internal/composites/grid-control.js.map +1 -0
  113. package/dist/internal/composites/linear-action.d.ts +36 -0
  114. package/dist/internal/composites/linear-action.d.ts.map +1 -0
  115. package/dist/internal/composites/linear-action.js +96 -0
  116. package/dist/internal/composites/linear-action.js.map +1 -0
  117. package/dist/internal/composites/linear-choice.d.ts +41 -0
  118. package/dist/internal/composites/linear-choice.d.ts.map +1 -0
  119. package/dist/internal/composites/linear-choice.js +139 -0
  120. package/dist/internal/composites/linear-choice.js.map +1 -0
  121. package/dist/internal/composites/listbox.d.ts +52 -0
  122. package/dist/internal/composites/listbox.d.ts.map +1 -0
  123. package/dist/internal/composites/listbox.js +251 -0
  124. package/dist/internal/composites/listbox.js.map +1 -0
  125. package/dist/internal/composites/menu.d.ts +29 -0
  126. package/dist/internal/composites/menu.d.ts.map +1 -0
  127. package/dist/internal/composites/menu.js +76 -0
  128. package/dist/internal/composites/menu.js.map +1 -0
  129. package/dist/internal/composites/popup.d.ts +21 -0
  130. package/dist/internal/composites/popup.d.ts.map +1 -0
  131. package/dist/internal/composites/popup.js +10 -0
  132. package/dist/internal/composites/popup.js.map +1 -0
  133. package/dist/internal/composites/slider.d.ts +21 -0
  134. package/dist/internal/composites/slider.d.ts.map +1 -0
  135. package/dist/internal/composites/slider.js +73 -0
  136. package/dist/internal/composites/slider.js.map +1 -0
  137. package/dist/internal/composites/tree-grid.d.ts +67 -0
  138. package/dist/internal/composites/tree-grid.d.ts.map +1 -0
  139. package/dist/internal/composites/tree-grid.js +281 -0
  140. package/dist/internal/composites/tree-grid.js.map +1 -0
  141. package/dist/internal/composites/tree-view.d.ts +42 -0
  142. package/dist/internal/composites/tree-view.d.ts.map +1 -0
  143. package/dist/internal/composites/tree-view.js +196 -0
  144. package/dist/internal/composites/tree-view.js.map +1 -0
  145. package/dist/internal/editing/text.d.ts +66 -0
  146. package/dist/internal/editing/text.d.ts.map +1 -0
  147. package/dist/internal/editing/text.js +248 -0
  148. package/dist/internal/editing/text.js.map +1 -0
  149. package/dist/internal/kernel/decimal.d.ts +22 -0
  150. package/dist/internal/kernel/decimal.d.ts.map +1 -0
  151. package/dist/internal/kernel/decimal.js +137 -0
  152. package/dist/internal/kernel/decimal.js.map +1 -0
  153. package/dist/internal/kernel/foundation.d.ts +12 -0
  154. package/dist/internal/kernel/foundation.d.ts.map +1 -0
  155. package/dist/internal/kernel/foundation.js +132 -0
  156. package/dist/internal/kernel/foundation.js.map +1 -0
  157. package/dist/internal/kernel/indexed-sequence.d.ts +26 -0
  158. package/dist/internal/kernel/indexed-sequence.d.ts.map +1 -0
  159. package/dist/internal/kernel/indexed-sequence.js +117 -0
  160. package/dist/internal/kernel/indexed-sequence.js.map +1 -0
  161. package/dist/internal/kernel/machine.d.ts +8 -0
  162. package/dist/internal/kernel/machine.d.ts.map +1 -0
  163. package/dist/internal/kernel/machine.js +6 -0
  164. package/dist/internal/kernel/machine.js.map +1 -0
  165. package/dist/internal/runtime/revision.d.ts +23 -0
  166. package/dist/internal/runtime/revision.d.ts.map +1 -0
  167. package/dist/internal/runtime/revision.js +76 -0
  168. package/dist/internal/runtime/revision.js.map +1 -0
  169. package/dist/internal/state/checked.d.ts +22 -0
  170. package/dist/internal/state/checked.d.ts.map +1 -0
  171. package/dist/internal/state/checked.js +33 -0
  172. package/dist/internal/state/checked.js.map +1 -0
  173. package/dist/internal/state/cursor.d.ts +13 -0
  174. package/dist/internal/state/cursor.d.ts.map +1 -0
  175. package/dist/internal/state/cursor.js +24 -0
  176. package/dist/internal/state/cursor.js.map +1 -0
  177. package/dist/internal/state/expansion.d.ts +8 -0
  178. package/dist/internal/state/expansion.d.ts.map +1 -0
  179. package/dist/internal/state/expansion.js +23 -0
  180. package/dist/internal/state/expansion.js.map +1 -0
  181. package/dist/internal/state/open-state.d.ts +17 -0
  182. package/dist/internal/state/open-state.d.ts.map +1 -0
  183. package/dist/internal/state/open-state.js +29 -0
  184. package/dist/internal/state/open-state.js.map +1 -0
  185. package/dist/internal/state/selection.d.ts +23 -0
  186. package/dist/internal/state/selection.d.ts.map +1 -0
  187. package/dist/internal/state/selection.js +110 -0
  188. package/dist/internal/state/selection.js.map +1 -0
  189. package/dist/layer-stack.d.ts +47 -0
  190. package/dist/layer-stack.d.ts.map +1 -0
  191. package/dist/layer-stack.js +115 -0
  192. package/dist/layer-stack.js.map +1 -0
  193. package/dist/listbox.d.ts +3 -0
  194. package/dist/listbox.d.ts.map +1 -0
  195. package/dist/listbox.js +3 -0
  196. package/dist/listbox.js.map +1 -0
  197. package/dist/menu-button.d.ts +5 -0
  198. package/dist/menu-button.d.ts.map +1 -0
  199. package/dist/menu-button.js +5 -0
  200. package/dist/menu-button.js.map +1 -0
  201. package/dist/menu.d.ts +10 -0
  202. package/dist/menu.d.ts.map +1 -0
  203. package/dist/menu.js +9 -0
  204. package/dist/menu.js.map +1 -0
  205. package/dist/menubar.d.ts +5 -0
  206. package/dist/menubar.d.ts.map +1 -0
  207. package/dist/menubar.js +5 -0
  208. package/dist/menubar.js.map +1 -0
  209. package/dist/month-picker.d.ts +5 -0
  210. package/dist/month-picker.d.ts.map +1 -0
  211. package/dist/month-picker.js +4 -0
  212. package/dist/month-picker.js.map +1 -0
  213. package/dist/month-range-picker.d.ts +6 -0
  214. package/dist/month-range-picker.d.ts.map +1 -0
  215. package/dist/month-range-picker.js +5 -0
  216. package/dist/month-range-picker.js.map +1 -0
  217. package/dist/multi-thumb-slider.d.ts +36 -0
  218. package/dist/multi-thumb-slider.d.ts.map +1 -0
  219. package/dist/multi-thumb-slider.js +72 -0
  220. package/dist/multi-thumb-slider.js.map +1 -0
  221. package/dist/navigation-menu.d.ts +6 -0
  222. package/dist/navigation-menu.d.ts.map +1 -0
  223. package/dist/navigation-menu.js +5 -0
  224. package/dist/navigation-menu.js.map +1 -0
  225. package/dist/number-field.d.ts +51 -0
  226. package/dist/number-field.d.ts.map +1 -0
  227. package/dist/number-field.js +461 -0
  228. package/dist/number-field.js.map +1 -0
  229. package/dist/pagination.d.ts +65 -0
  230. package/dist/pagination.d.ts.map +1 -0
  231. package/dist/pagination.js +197 -0
  232. package/dist/pagination.js.map +1 -0
  233. package/dist/pin-input.d.ts +31 -0
  234. package/dist/pin-input.d.ts.map +1 -0
  235. package/dist/pin-input.js +53 -0
  236. package/dist/pin-input.js.map +1 -0
  237. package/dist/popover.d.ts +17 -0
  238. package/dist/popover.d.ts.map +1 -0
  239. package/dist/popover.js +6 -0
  240. package/dist/popover.js.map +1 -0
  241. package/dist/quantity-field.d.ts +59 -0
  242. package/dist/quantity-field.d.ts.map +1 -0
  243. package/dist/quantity-field.js +254 -0
  244. package/dist/quantity-field.js.map +1 -0
  245. package/dist/radio-group.d.ts +23 -0
  246. package/dist/radio-group.d.ts.map +1 -0
  247. package/dist/radio-group.js +20 -0
  248. package/dist/radio-group.js.map +1 -0
  249. package/dist/range-calendar.d.ts +6 -0
  250. package/dist/range-calendar.d.ts.map +1 -0
  251. package/dist/range-calendar.js +5 -0
  252. package/dist/range-calendar.js.map +1 -0
  253. package/dist/rating.d.ts +18 -0
  254. package/dist/rating.d.ts.map +1 -0
  255. package/dist/rating.js +19 -0
  256. package/dist/rating.js.map +1 -0
  257. package/dist/reorder.d.ts +47 -0
  258. package/dist/reorder.d.ts.map +1 -0
  259. package/dist/reorder.js +110 -0
  260. package/dist/reorder.js.map +1 -0
  261. package/dist/result.d.ts +10 -0
  262. package/dist/result.d.ts.map +1 -0
  263. package/dist/result.js +19 -0
  264. package/dist/result.js.map +1 -0
  265. package/dist/revision.d.ts +3 -0
  266. package/dist/revision.d.ts.map +1 -0
  267. package/dist/revision.js +3 -0
  268. package/dist/revision.js.map +1 -0
  269. package/dist/select.d.ts +31 -0
  270. package/dist/select.d.ts.map +1 -0
  271. package/dist/select.js +32 -0
  272. package/dist/select.js.map +1 -0
  273. package/dist/shared.d.ts +43 -0
  274. package/dist/shared.d.ts.map +1 -0
  275. package/dist/shared.js +3 -0
  276. package/dist/shared.js.map +1 -0
  277. package/dist/slider.d.ts +3 -0
  278. package/dist/slider.d.ts.map +1 -0
  279. package/dist/slider.js +3 -0
  280. package/dist/slider.js.map +1 -0
  281. package/dist/spin-button.d.ts +31 -0
  282. package/dist/spin-button.d.ts.map +1 -0
  283. package/dist/spin-button.js +65 -0
  284. package/dist/spin-button.js.map +1 -0
  285. package/dist/stepper.d.ts +18 -0
  286. package/dist/stepper.d.ts.map +1 -0
  287. package/dist/stepper.js +16 -0
  288. package/dist/stepper.js.map +1 -0
  289. package/dist/structures/grid.d.ts +29 -0
  290. package/dist/structures/grid.d.ts.map +1 -0
  291. package/dist/structures/grid.js +202 -0
  292. package/dist/structures/grid.js.map +1 -0
  293. package/dist/structures/range.d.ts +41 -0
  294. package/dist/structures/range.d.ts.map +1 -0
  295. package/dist/structures/range.js +249 -0
  296. package/dist/structures/range.js.map +1 -0
  297. package/dist/structures/sequence.d.ts +19 -0
  298. package/dist/structures/sequence.d.ts.map +1 -0
  299. package/dist/structures/sequence.js +28 -0
  300. package/dist/structures/sequence.js.map +1 -0
  301. package/dist/structures/tree.d.ts +33 -0
  302. package/dist/structures/tree.d.ts.map +1 -0
  303. package/dist/structures/tree.js +238 -0
  304. package/dist/structures/tree.js.map +1 -0
  305. package/dist/switch.d.ts +21 -0
  306. package/dist/switch.d.ts.map +1 -0
  307. package/dist/switch.js +8 -0
  308. package/dist/switch.js.map +1 -0
  309. package/dist/tabs.d.ts +16 -0
  310. package/dist/tabs.d.ts.map +1 -0
  311. package/dist/tabs.js +27 -0
  312. package/dist/tabs.js.map +1 -0
  313. package/dist/tags-input.d.ts +43 -0
  314. package/dist/tags-input.d.ts.map +1 -0
  315. package/dist/tags-input.js +48 -0
  316. package/dist/tags-input.js.map +1 -0
  317. package/dist/text.d.ts +4 -0
  318. package/dist/text.d.ts.map +1 -0
  319. package/dist/text.js +4 -0
  320. package/dist/text.js.map +1 -0
  321. package/dist/time-field.d.ts +48 -0
  322. package/dist/time-field.d.ts.map +1 -0
  323. package/dist/time-field.js +157 -0
  324. package/dist/time-field.js.map +1 -0
  325. package/dist/time-range-field.d.ts +53 -0
  326. package/dist/time-range-field.d.ts.map +1 -0
  327. package/dist/time-range-field.js +75 -0
  328. package/dist/time-range-field.js.map +1 -0
  329. package/dist/timer.d.ts +37 -0
  330. package/dist/timer.d.ts.map +1 -0
  331. package/dist/timer.js +84 -0
  332. package/dist/timer.js.map +1 -0
  333. package/dist/toast.d.ts +56 -0
  334. package/dist/toast.d.ts.map +1 -0
  335. package/dist/toast.js +87 -0
  336. package/dist/toast.js.map +1 -0
  337. package/dist/toggle-button.d.ts +20 -0
  338. package/dist/toggle-button.d.ts.map +1 -0
  339. package/dist/toggle-button.js +20 -0
  340. package/dist/toggle-button.js.map +1 -0
  341. package/dist/toggle-group.d.ts +25 -0
  342. package/dist/toggle-group.d.ts.map +1 -0
  343. package/dist/toggle-group.js +30 -0
  344. package/dist/toggle-group.js.map +1 -0
  345. package/dist/toolbar.d.ts +3 -0
  346. package/dist/toolbar.d.ts.map +1 -0
  347. package/dist/toolbar.js +3 -0
  348. package/dist/toolbar.js.map +1 -0
  349. package/dist/tooltip.d.ts +3 -0
  350. package/dist/tooltip.d.ts.map +1 -0
  351. package/dist/tooltip.js +3 -0
  352. package/dist/tooltip.js.map +1 -0
  353. package/dist/tree-grid.d.ts +13 -0
  354. package/dist/tree-grid.d.ts.map +1 -0
  355. package/dist/tree-grid.js +20 -0
  356. package/dist/tree-grid.js.map +1 -0
  357. package/dist/tree-view.d.ts +3 -0
  358. package/dist/tree-view.d.ts.map +1 -0
  359. package/dist/tree-view.js +3 -0
  360. package/dist/tree-view.js.map +1 -0
  361. package/dist/units.d.ts +77 -0
  362. package/dist/units.d.ts.map +1 -0
  363. package/dist/units.js +512 -0
  364. package/dist/units.js.map +1 -0
  365. package/dist/window-splitter.d.ts +3 -0
  366. package/dist/window-splitter.d.ts.map +1 -0
  367. package/dist/window-splitter.js +3 -0
  368. package/dist/window-splitter.js.map +1 -0
  369. package/dist/year-picker.d.ts +10 -0
  370. package/dist/year-picker.d.ts.map +1 -0
  371. package/dist/year-picker.js +27 -0
  372. package/dist/year-picker.js.map +1 -0
  373. package/dist/year-range-picker.d.ts +6 -0
  374. package/dist/year-range-picker.d.ts.map +1 -0
  375. package/dist/year-range-picker.js +5 -0
  376. package/dist/year-range-picker.js.map +1 -0
  377. package/package.json +7 -2
@@ -0,0 +1,261 @@
1
+ import { unwrap } from './result.js';
2
+ import { fail, freezeArray, ok } from './internal/kernel/foundation.js';
3
+ import { createMachineUpdate } from './internal/kernel/machine.js';
4
+ import { addDateDays, addDateMonths, addDateYears, compareDateValues, createDateValue, dateDayOfWeek, formatDateValue, tryCreateDateValue, } from './date-field.js';
5
+ export function createDatePickerState(input = {}) {
6
+ return unwrap(tryCreateDatePickerState(input));
7
+ }
8
+ export function tryCreateDatePickerState(input = {}) {
9
+ const value = input.value ?? null;
10
+ if (value !== null) {
11
+ const valid = tryCreateDateValue(value.year, value.month, value.day);
12
+ if (!valid.ok)
13
+ return valid;
14
+ }
15
+ const fallback = value ?? Object.freeze({ year: 1970, month: 1, day: 1 });
16
+ const highlighted = input.highlighted ?? fallback;
17
+ const validHighlight = tryCreateDateValue(highlighted.year, highlighted.month, highlighted.day);
18
+ if (!validHighlight.ok)
19
+ return validHighlight;
20
+ const view = input.view ?? Object.freeze({ year: validHighlight.value.year, month: validHighlight.value.month });
21
+ const validView = tryCreateDateValue(view.year, view.month, 1);
22
+ if (!validView.ok)
23
+ return validView;
24
+ const viewMode = input.viewMode ?? 'month';
25
+ if (!isViewMode(viewMode))
26
+ return fail('construction', 'invalid-date-picker-view-mode', 'Date picker view mode must be week, month, or year.');
27
+ if (typeof input.open !== 'undefined' && typeof input.open !== 'boolean')
28
+ return fail('construction', 'invalid-date-picker-open', 'Date picker open state must be boolean.');
29
+ return ok(pickerState(value, validHighlight.value, Object.freeze({ year: view.year, month: view.month }), viewMode, input.open ?? false));
30
+ }
31
+ export function applyDatePickerEvent(state, event, policies = {}) {
32
+ const valid = tryCreateDatePickerState(state);
33
+ if (!valid.ok)
34
+ return invalidTransition(valid);
35
+ const policy = validatePolicies(policies);
36
+ if (!policy.ok)
37
+ return policy;
38
+ if (event === 'open' || event === 'close' || event === 'toggle') {
39
+ const open = event === 'toggle' ? !state.open : event === 'open';
40
+ if (open === state.open)
41
+ return createMachineUpdate(state);
42
+ return createMachineUpdate(pickerState(state.value, state.highlighted, state.view, state.viewMode, open), [{ type: 'open-changed', open }]);
43
+ }
44
+ if (typeof event === 'object' && event.type === 'set-view-mode') {
45
+ if (!isViewMode(event.value))
46
+ return fail('transition-rejection', 'invalid-date-picker-view-mode', 'Date picker view mode must be week, month, or year.');
47
+ if (event.value === state.viewMode)
48
+ return createMachineUpdate(state);
49
+ return createMachineUpdate(pickerState(state.value, state.highlighted, state.view, event.value, state.open), [{ type: 'view-mode-changed', value: event.value }]);
50
+ }
51
+ if (typeof event === 'object' && event.type === 'select-month') {
52
+ const month = tryCreateDateValue(event.value.year, event.value.month, 1);
53
+ if (!month.ok)
54
+ return invalidTransition(month);
55
+ const delta = (event.value.year - state.highlighted.year) * 12 + event.value.month - state.highlighted.month;
56
+ const highlighted = addDateMonths(state.highlighted, delta);
57
+ if (!highlighted.ok)
58
+ return highlighted;
59
+ const eligible = findEligibleInMonth(highlighted.value, event.value, policies);
60
+ if (!eligible.ok)
61
+ return eligible;
62
+ if (eligible.value === null)
63
+ return fail('transition-rejection', 'date-picker-month-unavailable', 'Date picker month has no available date within maxScan.');
64
+ const view = Object.freeze({ year: eligible.value.year, month: eligible.value.month });
65
+ const commands = [];
66
+ if (compareDateValues(eligible.value, state.highlighted) !== 0)
67
+ commands.push({ type: 'highlight-changed', value: eligible.value });
68
+ if (state.viewMode !== 'month')
69
+ commands.push({ type: 'view-mode-changed', value: 'month' });
70
+ return createMachineUpdate(pickerState(state.value, eligible.value, view, 'month', state.open), commands);
71
+ }
72
+ if (typeof event === 'object' && event.type === 'set-value')
73
+ return commit(event.value, state, policies, false);
74
+ if (typeof event === 'object' && event.type === 'select')
75
+ return commit(event.value, state, policies, true);
76
+ if (event === 'select-highlighted')
77
+ return commit(state.highlighted, state, policies, true);
78
+ let moved;
79
+ if (event === 'previous-month' || event === 'next-month')
80
+ moved = addDateMonths(state.highlighted, event === 'previous-month' ? -1 : 1);
81
+ else if (event === 'previous-year' || event === 'next-year')
82
+ moved = addDateYears(state.highlighted, event === 'previous-year' ? -1 : 1);
83
+ else if (event === 'previous-day' || event === 'next-day')
84
+ moved = addDateDays(state.highlighted, event === 'previous-day' ? -1 : 1);
85
+ else if (event === 'previous-week' || event === 'next-week')
86
+ moved = addDateDays(state.highlighted, event === 'previous-week' ? -7 : 7);
87
+ else if (event === 'start-of-week' || event === 'end-of-week') {
88
+ const start = policies.weekStartsOn ?? 1;
89
+ const relative = (dateDayOfWeek(state.highlighted) - start + 7) % 7;
90
+ moved = addDateDays(state.highlighted, event === 'start-of-week' ? -relative : 6 - relative);
91
+ }
92
+ else
93
+ return fail('transition-rejection', 'unsupported-date-picker-event', 'Date picker event is unsupported.');
94
+ if (!moved.ok)
95
+ return moved;
96
+ const direction = compareDateValues(moved.value, state.highlighted) < 0 ? -1 : 1;
97
+ const eligible = findEligible(moved.value, direction, policies);
98
+ if (!eligible.ok)
99
+ return eligible;
100
+ if (eligible.value === null || compareDateValues(eligible.value, state.highlighted) === 0)
101
+ return createMachineUpdate(state);
102
+ const view = Object.freeze({ year: eligible.value.year, month: eligible.value.month });
103
+ return createMachineUpdate(pickerState(state.value, eligible.value, view, state.viewMode, state.open), [{ type: 'highlight-changed', value: eligible.value }]);
104
+ }
105
+ export function createDatePickerWeek(value, weekStartsOn = 1) {
106
+ return unwrap(tryCreateDatePickerWeek(value, weekStartsOn));
107
+ }
108
+ export function tryCreateDatePickerWeek(value, weekStartsOn = 1) {
109
+ const valid = tryCreateDateValue(value.year, value.month, value.day);
110
+ if (!valid.ok)
111
+ return valid;
112
+ if (!Number.isSafeInteger(weekStartsOn) || weekStartsOn < 1 || weekStartsOn > 7)
113
+ return fail('construction', 'invalid-week-start', 'Week start must be an ISO weekday from 1 through 7.');
114
+ const offset = (dateDayOfWeek(valid.value) - weekStartsOn + 7) % 7;
115
+ const start = addDateDays(valid.value, -offset);
116
+ if (!start.ok)
117
+ return start;
118
+ const days = [];
119
+ for (let index = 0; index < 7; index += 1) {
120
+ const day = addDateDays(start.value, index);
121
+ if (!day.ok)
122
+ return day;
123
+ days.push(day.value);
124
+ }
125
+ return ok(freezeArray(days));
126
+ }
127
+ export function createDatePickerMonth(view, weekStartsOn = 1) {
128
+ return unwrap(tryCreateDatePickerMonth(view, weekStartsOn));
129
+ }
130
+ export function tryCreateDatePickerMonth(view, weekStartsOn = 1) {
131
+ const first = tryCreateDateValue(view.year, view.month, 1);
132
+ if (!first.ok)
133
+ return first;
134
+ if (!Number.isSafeInteger(weekStartsOn) || weekStartsOn < 1 || weekStartsOn > 7)
135
+ return fail('construction', 'invalid-week-start', 'Week start must be an ISO weekday from 1 through 7.');
136
+ const offset = (dateDayOfWeek(first.value) - weekStartsOn + 7) % 7;
137
+ const start = addDateDays(first.value, -offset);
138
+ if (!start.ok)
139
+ return start;
140
+ const rows = [];
141
+ for (let row = 0; row < 6; row += 1) {
142
+ const cells = [];
143
+ for (let column = 0; column < 7; column += 1) {
144
+ const value = addDateDays(start.value, row * 7 + column);
145
+ if (!value.ok)
146
+ return value;
147
+ cells.push(value.value);
148
+ }
149
+ rows.push(cells);
150
+ }
151
+ return ok(freezeArray(rows.map((row) => freezeArray(row))));
152
+ }
153
+ export function createDatePickerYear(year) {
154
+ return unwrap(tryCreateDatePickerYear(year));
155
+ }
156
+ export function tryCreateDatePickerYear(year) {
157
+ const valid = tryCreateDateValue(year, 1, 1);
158
+ if (!valid.ok)
159
+ return valid;
160
+ const rows = [];
161
+ for (let row = 0; row < 4; row += 1) {
162
+ const months = [];
163
+ for (let column = 0; column < 3; column += 1)
164
+ months.push(Object.freeze({ year, month: row * 3 + column + 1 }));
165
+ rows.push(months);
166
+ }
167
+ return ok(freezeArray(rows.map((row) => freezeArray(row))));
168
+ }
169
+ export function isDatePickerValueAvailable(value, policies = {}) {
170
+ return !(policies.min !== undefined && compareDateValues(value, policies.min) < 0)
171
+ && !(policies.max !== undefined && compareDateValues(value, policies.max) > 0)
172
+ && policies.unavailable?.(value) !== true;
173
+ }
174
+ export function datePickerID(value) { return formatDateValue(value); }
175
+ function commit(value, state, policies, close) {
176
+ if (value === null) {
177
+ if (policies.required === true)
178
+ return fail('transition-rejection', 'date-picker-value-required', 'Date picker requires a value.');
179
+ const open = close ? false : state.open;
180
+ return createMachineUpdate(pickerState(null, state.highlighted, state.view, state.viewMode, open), [
181
+ { type: 'value-committed', value: null },
182
+ ...openChanged(state.open, open),
183
+ ]);
184
+ }
185
+ const valid = tryCreateDateValue(value.year, value.month, value.day);
186
+ if (!valid.ok)
187
+ return invalidTransition(valid);
188
+ if (!isDatePickerValueAvailable(valid.value, policies))
189
+ return fail('transition-rejection', 'date-picker-value-unavailable', 'Date picker value is outside its selectable domain.');
190
+ const open = close ? false : state.open;
191
+ const view = Object.freeze({ year: valid.value.year, month: valid.value.month });
192
+ return createMachineUpdate(pickerState(valid.value, valid.value, view, state.viewMode, open), [
193
+ { type: 'value-committed', value: valid.value },
194
+ { type: 'highlight-changed', value: valid.value },
195
+ ...openChanged(state.open, open),
196
+ ]);
197
+ }
198
+ function findEligible(start, direction, policies) {
199
+ const limit = policies.maxScan ?? 366;
200
+ if (!Number.isSafeInteger(limit) || limit < 1)
201
+ return fail('construction', 'invalid-date-picker-max-scan', 'Date picker max scan must be a positive safe integer.');
202
+ let candidate = start;
203
+ for (let scanned = 0; scanned < limit; scanned += 1) {
204
+ if (isDatePickerValueAvailable(candidate, policies))
205
+ return ok(candidate);
206
+ const next = addDateDays(candidate, direction);
207
+ if (!next.ok)
208
+ return ok(null);
209
+ candidate = next.value;
210
+ }
211
+ return fail('resource-rejection', 'date-picker-scan-exhausted', 'Date picker did not find an available date within maxScan.', { maxScan: limit });
212
+ }
213
+ function findEligibleInMonth(start, month, policies) {
214
+ const limit = policies.maxScan ?? 366;
215
+ if (!Number.isSafeInteger(limit) || limit < 1)
216
+ return fail('construction', 'invalid-date-picker-max-scan', 'Date picker max scan must be a positive safe integer.');
217
+ let scanned = 0;
218
+ for (const direction of [1, -1]) {
219
+ let candidate = start;
220
+ if (direction === -1) {
221
+ const previous = addDateDays(candidate, -1);
222
+ if (!previous.ok)
223
+ continue;
224
+ candidate = previous.value;
225
+ }
226
+ while (candidate.year === month.year && candidate.month === month.month) {
227
+ if (scanned >= limit)
228
+ return fail('resource-rejection', 'date-picker-scan-exhausted', 'Date picker did not find an available date within maxScan.', { maxScan: limit });
229
+ scanned += 1;
230
+ if (isDatePickerValueAvailable(candidate, policies))
231
+ return ok(candidate);
232
+ const next = addDateDays(candidate, direction);
233
+ if (!next.ok)
234
+ break;
235
+ candidate = next.value;
236
+ }
237
+ }
238
+ return ok(null);
239
+ }
240
+ function validatePolicies(policies) {
241
+ if (policies.unavailable !== undefined && typeof policies.unavailable !== 'function')
242
+ return fail('construction', 'invalid-date-picker-unavailable-policy', 'Date picker unavailable policy must be a function.');
243
+ if (policies.min !== undefined) {
244
+ const min = tryCreateDateValue(policies.min.year, policies.min.month, policies.min.day);
245
+ if (!min.ok)
246
+ return min;
247
+ }
248
+ if (policies.max !== undefined) {
249
+ const max = tryCreateDateValue(policies.max.year, policies.max.month, policies.max.day);
250
+ if (!max.ok)
251
+ return max;
252
+ }
253
+ if (policies.min !== undefined && policies.max !== undefined && compareDateValues(policies.min, policies.max) > 0)
254
+ return fail('construction', 'inverted-date-picker-bounds', 'Date picker minimum must not follow its maximum.');
255
+ return ok(true);
256
+ }
257
+ function pickerState(value, highlighted, view, viewMode, open) { return Object.freeze({ value, highlighted, view, viewMode, open }); }
258
+ function isViewMode(value) { return value === 'week' || value === 'month' || value === 'year'; }
259
+ function openChanged(previous, next) { return previous === next ? [] : [{ type: 'open-changed', open: next }]; }
260
+ function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
261
+ //# sourceMappingURL=date-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../src/date-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { Result } from './shared.js';
2
+ import type { TextEditingState } from './text.js';
3
+ import { type DateFieldEvent, type DateFieldPolicies, type DateFieldState, type DateRange, type DateValue } from './date-field.js';
4
+ export type DateRangeFieldEndpoint = 'start' | 'end';
5
+ export interface DateRangeFieldState {
6
+ readonly value: DateRange | null;
7
+ readonly start: DateFieldState;
8
+ readonly end: DateFieldState;
9
+ readonly active: DateRangeFieldEndpoint;
10
+ }
11
+ export interface DateRangeFieldStateInput {
12
+ readonly value?: DateRange | null;
13
+ readonly startValue?: DateValue | null;
14
+ readonly endValue?: DateValue | null;
15
+ readonly startInputState?: TextEditingState;
16
+ readonly endInputState?: TextEditingState;
17
+ readonly active?: DateRangeFieldEndpoint;
18
+ }
19
+ export type DateRangeFieldEvent = {
20
+ readonly type: 'field';
21
+ readonly endpoint: DateRangeFieldEndpoint;
22
+ readonly event: DateFieldEvent;
23
+ } | {
24
+ readonly type: 'focus';
25
+ readonly endpoint: DateRangeFieldEndpoint;
26
+ } | 'cancel';
27
+ export type DateRangeFieldCommand = {
28
+ readonly type: 'input-state-changed';
29
+ readonly endpoint: DateRangeFieldEndpoint;
30
+ readonly value: TextEditingState;
31
+ } | {
32
+ readonly type: 'range-committed';
33
+ readonly value: DateRange | null;
34
+ } | {
35
+ readonly type: 'focus-endpoint';
36
+ readonly endpoint: DateRangeFieldEndpoint;
37
+ };
38
+ export interface DateRangeFieldPolicies extends DateFieldPolicies {
39
+ }
40
+ export interface DateRangeFieldUpdate {
41
+ readonly state: DateRangeFieldState;
42
+ readonly commands: readonly DateRangeFieldCommand[];
43
+ }
44
+ export declare function createDateRangeFieldState(input?: DateRangeFieldStateInput): DateRangeFieldState;
45
+ export declare function tryCreateDateRangeFieldState(input?: DateRangeFieldStateInput): Result<DateRangeFieldState>;
46
+ export declare function applyDateRangeFieldEvent(state: DateRangeFieldState, event: DateRangeFieldEvent, policies?: DateRangeFieldPolicies): Result<DateRangeFieldUpdate>;
47
+ //# sourceMappingURL=date-range-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-field.d.ts","sourceRoot":"","sources":["../src/date-range-field.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,MAAM,EAAE,MAAM,aAAa,CAAC;AAGtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAiF,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAA6C,MAAM,iBAAiB,CAAC;AAE7P,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,KAAK,CAAC;AACrD,MAAM,WAAW,mBAAmB;IAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE;AAChL,MAAM,WAAW,wBAAwB;IAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAAE;AAC/R,MAAM,MAAM,mBAAmB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,GAAG,QAAQ,CAAC;AAC3N,MAAM,MAAM,qBAAqB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,CAAC;AACpT,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;CAAG;AACpE,MAAM,WAAW,oBAAoB;IAAG,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAAE;AAElI,wBAAgB,yBAAyB,CAAC,KAAK,GAAE,wBAA6B,GAAG,mBAAmB,CAEnG;AAED,wBAAgB,4BAA4B,CAAC,KAAK,GAAE,wBAA6B,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAW9G;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,GAAE,sBAA2B,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAqBpK"}
@@ -0,0 +1,66 @@
1
+ import { unwrap } from './result.js';
2
+ import { fail, ok } from './internal/kernel/foundation.js';
3
+ import { createMachineUpdate } from './internal/kernel/machine.js';
4
+ import { applyDateFieldEvent, compareDateValues, createDateFieldState, createDateRange, tryCreateDateFieldState, tryCreateDateRange } from './date-field.js';
5
+ export function createDateRangeFieldState(input = {}) {
6
+ return unwrap(tryCreateDateRangeFieldState(input));
7
+ }
8
+ export function tryCreateDateRangeFieldState(input = {}) {
9
+ const range = input.value === undefined || input.value === null ? ok(null) : completeRange(input.value.start, input.value.end, 'construction');
10
+ if (!range.ok)
11
+ return range;
12
+ const startValue = input.startValue !== undefined ? input.startValue : range.value?.start ?? null;
13
+ const endValue = input.endValue !== undefined ? input.endValue : range.value?.end ?? null;
14
+ const start = tryCreateDateFieldState(startValue, input.startInputState);
15
+ if (!start.ok)
16
+ return start;
17
+ const end = tryCreateDateFieldState(endValue, input.endInputState);
18
+ if (!end.ok)
19
+ return end;
20
+ const value = completeRange(start.value.value, end.value.value, 'construction');
21
+ if (!value.ok)
22
+ return value;
23
+ const active = input.active ?? 'start';
24
+ if (active !== 'start' && active !== 'end')
25
+ return fail('construction', 'invalid-date-range-field-endpoint', 'Date range field active endpoint must be start or end.');
26
+ return ok(Object.freeze({ value: value.value, start: start.value, end: end.value, active }));
27
+ }
28
+ export function applyDateRangeFieldEvent(state, event, policies = {}) {
29
+ const valid = tryCreateDateRangeFieldState({ startValue: state.start.value, endValue: state.end.value, startInputState: state.start.inputState, endInputState: state.end.inputState, active: state.active });
30
+ if (!valid.ok)
31
+ return invalidTransition(valid);
32
+ if (event === 'cancel') {
33
+ const start = applyDateFieldEvent(valid.value.start, 'cancel', endpointPolicies(policies));
34
+ if (!start.ok)
35
+ return start;
36
+ const end = applyDateFieldEvent(valid.value.end, 'cancel', endpointPolicies(policies));
37
+ if (!end.ok)
38
+ return end;
39
+ return composeState(start.value.state, end.value.state, valid.value.active, [
40
+ { type: 'input-state-changed', endpoint: 'start', value: start.value.state.inputState },
41
+ { type: 'input-state-changed', endpoint: 'end', value: end.value.state.inputState },
42
+ ]);
43
+ }
44
+ if (event.type === 'focus')
45
+ return createMachineUpdate(Object.freeze({ ...valid.value, active: event.endpoint }), [{ type: 'focus-endpoint', endpoint: event.endpoint }]);
46
+ const active = event.endpoint;
47
+ const changed = applyDateFieldEvent(active === 'start' ? valid.value.start : valid.value.end, event.event, endpointPolicies(policies));
48
+ if (!changed.ok)
49
+ return changed;
50
+ const start = active === 'start' ? changed.value.state : valid.value.start;
51
+ const end = active === 'end' ? changed.value.state : valid.value.end;
52
+ const next = completeRange(start.value, end.value);
53
+ if (!next.ok)
54
+ return next;
55
+ const commands = changed.value.commands.filter((command) => command.type === 'input-state-changed').map((command) => ({ type: 'input-state-changed', endpoint: active, value: command.value }));
56
+ if ((event.event === 'commit' || typeof event.event === 'object' && event.event.type === 'set-value') && !sameRange(valid.value.value, next.value))
57
+ commands.push({ type: 'range-committed', value: next.value });
58
+ return composeState(start, end, active, commands);
59
+ }
60
+ function composeState(start, end, active, commands) { const value = completeRange(start.value, end.value); return value.ok ? createMachineUpdate(Object.freeze({ value: value.value, start, end, active }), commands) : value; }
61
+ function completeRange(start, end, errorClass = 'transition-rejection') { if (start === null || end === null)
62
+ return ok(null); const range = tryCreateDateRange(start, end); return range.ok ? ok(range.value) : fail(errorClass, 'inverted-date-range-field', 'Date range field start must not be after end.'); }
63
+ function endpointPolicies(policies) { const { required: _required, ...rest } = policies; return rest; }
64
+ function sameRange(left, right) { return left === null || right === null ? left === right : compareDateValues(left.start, right.start) === 0 && compareDateValues(left.end, right.end) === 0; }
65
+ function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
66
+ //# sourceMappingURL=date-range-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-field.js","sourceRoot":"","sources":["../src/date-range-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Result } from './shared.js';
2
+ import { type DateRange, type DateValue } from './date-field.js';
3
+ import { type DatePickerCommand, type DatePickerEvent, type DatePickerPolicies, type DatePickerState } from './date-picker.js';
4
+ export interface DateRangePickerState {
5
+ readonly value: DateRange | null;
6
+ readonly anchor: DateValue | null;
7
+ readonly calendar: DatePickerState;
8
+ }
9
+ export type DateRangePickerEvent = DatePickerEvent | 'clear';
10
+ export type DateRangePickerCommand = DatePickerCommand | {
11
+ readonly type: 'range-committed';
12
+ readonly value: DateRange | null;
13
+ } | {
14
+ readonly type: 'range-anchor-changed';
15
+ readonly value: DateValue | null;
16
+ };
17
+ export interface DateRangePickerUpdate {
18
+ readonly state: DateRangePickerState;
19
+ readonly commands: readonly DateRangePickerCommand[];
20
+ }
21
+ export interface DateRangePickerStateInput {
22
+ readonly value?: DateRange | null;
23
+ readonly anchor?: DateValue | null;
24
+ readonly calendar?: Partial<DatePickerState>;
25
+ }
26
+ export declare function createDateRangePickerState(input?: DateRangePickerStateInput): DateRangePickerState;
27
+ export declare function tryCreateDateRangePickerState(input?: DateRangePickerStateInput): Result<DateRangePickerState>;
28
+ export declare function applyDateRangePickerEvent(state: DateRangePickerState, event: DateRangePickerEvent, policies?: DatePickerPolicies): Result<DateRangePickerUpdate>;
29
+ //# sourceMappingURL=date-range-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-picker.d.ts","sourceRoot":"","sources":["../src/date-range-picker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAuD,KAAK,SAAS,EAAE,KAAK,SAAS,EAAwC,MAAM,iBAAiB,CAAC;AAC5J,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAErB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC;AAED,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,sBAAsB,GAC9B,iBAAiB,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,GAAE,yBAA8B,GAAG,oBAAoB,CAEtG;AAED,wBAAgB,6BAA6B,CAAC,KAAK,GAAE,yBAA8B,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAqBjH;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,GAAE,kBAAuB,GAChC,MAAM,CAAC,qBAAqB,CAAC,CAoB/B"}
@@ -0,0 +1,89 @@
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, createDateRange, createDateValue, tryCreateDateRange, tryCreateDateValue } from './date-field.js';
5
+ import { applyDatePickerEvent, createDatePickerState, isDatePickerValueAvailable, tryCreateDatePickerState, } from './date-picker.js';
6
+ export function createDateRangePickerState(input = {}) {
7
+ return unwrap(tryCreateDateRangePickerState(input));
8
+ }
9
+ export function tryCreateDateRangePickerState(input = {}) {
10
+ let value = null;
11
+ if (input.value !== undefined && input.value !== null) {
12
+ const valid = tryCreateDateRange(input.value.start, input.value.end);
13
+ if (!valid.ok)
14
+ return valid;
15
+ value = valid.value;
16
+ }
17
+ let anchor = null;
18
+ if (input.anchor !== undefined && input.anchor !== null) {
19
+ const valid = tryCreateDateValue(input.anchor.year, input.anchor.month, input.anchor.day);
20
+ if (!valid.ok)
21
+ return valid;
22
+ anchor = valid.value;
23
+ }
24
+ const fallback = anchor ?? value?.end;
25
+ const calendar = tryCreateDatePickerState({
26
+ value: null,
27
+ ...(input.calendar?.highlighted === undefined && fallback !== undefined ? { highlighted: fallback } : {}),
28
+ ...input.calendar,
29
+ });
30
+ if (!calendar.ok)
31
+ return calendar;
32
+ return ok(Object.freeze({ value, anchor, calendar: calendar.value }));
33
+ }
34
+ export function applyDateRangePickerEvent(state, event, policies = {}) {
35
+ const valid = tryCreateDateRangePickerState(state);
36
+ if (!valid.ok)
37
+ return invalidTransition(valid);
38
+ if (event === 'clear') {
39
+ if (policies.required === true)
40
+ return fail('transition-rejection', 'date-range-picker-value-required', 'Date range picker requires a range.');
41
+ return createMachineUpdate(Object.freeze({ value: null, anchor: null, calendar: state.calendar }), [
42
+ { type: 'range-committed', value: null },
43
+ { type: 'range-anchor-changed', value: null },
44
+ ]);
45
+ }
46
+ const selected = event === 'select-highlighted' ? state.calendar.highlighted
47
+ : typeof event === 'object' && event.type === 'select' ? event.value
48
+ : null;
49
+ if (selected !== null)
50
+ return selectDate(state, selected, policies);
51
+ if (typeof event === 'object' && event.type === 'set-value') {
52
+ return fail('transition-rejection', 'unsupported-date-range-picker-set-value', 'Date range picker values must be synchronized as ranges.');
53
+ }
54
+ const update = applyDatePickerEvent(state.calendar, event, policies);
55
+ if (!update.ok)
56
+ return update;
57
+ return createMachineUpdate(Object.freeze({ value: state.value, anchor: state.anchor, calendar: update.value.state }), update.value.commands);
58
+ }
59
+ function selectDate(state, requested, policies) {
60
+ const valid = tryCreateDateValue(requested.year, requested.month, requested.day);
61
+ if (!valid.ok)
62
+ return invalidTransition(valid);
63
+ if (!isDatePickerValueAvailable(valid.value, policies))
64
+ return fail('transition-rejection', 'date-range-picker-value-unavailable', 'Date range endpoint is outside its selectable domain.');
65
+ if (state.anchor === null) {
66
+ const calendar = tryCreateDatePickerState({ ...state.calendar, value: null, highlighted: valid.value, view: { year: valid.value.year, month: valid.value.month }, open: true });
67
+ if (!calendar.ok)
68
+ return calendar;
69
+ return createMachineUpdate(Object.freeze({ value: state.value, anchor: valid.value, calendar: calendar.value }), [
70
+ { type: 'highlight-changed', value: valid.value },
71
+ { type: 'range-anchor-changed', value: valid.value },
72
+ ]);
73
+ }
74
+ const start = compareDateValues(state.anchor, valid.value) <= 0 ? state.anchor : valid.value;
75
+ const end = compareDateValues(state.anchor, valid.value) <= 0 ? valid.value : state.anchor;
76
+ const range = tryCreateDateRange(start, end);
77
+ if (!range.ok)
78
+ return range;
79
+ const calendar = tryCreateDatePickerState({ value: null, highlighted: valid.value, view: { year: valid.value.year, month: valid.value.month }, viewMode: state.calendar.viewMode, open: state.calendar.open });
80
+ if (!calendar.ok)
81
+ return calendar;
82
+ return createMachineUpdate(Object.freeze({ value: range.value, anchor: null, calendar: calendar.value }), [
83
+ { type: 'range-committed', value: range.value },
84
+ { type: 'range-anchor-changed', value: null },
85
+ { type: 'highlight-changed', value: valid.value },
86
+ ]);
87
+ }
88
+ function invalidTransition(result) { return result.ok ? fail('internal-invariant', 'unexpected-valid-result', 'Expected an invalid result.') : { ok: false, error: { ...result.error, class: 'transition-rejection' } }; }
89
+ //# sourceMappingURL=date-range-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-picker.js","sourceRoot":"","sources":["../src/date-range-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
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 type DateTimeFieldUnavailablePredicate = NonNullable<DateTimeFieldPolicies['unavailable']>;
40
+ export interface DateTimeFieldUpdate {
41
+ readonly state: DateTimeFieldState;
42
+ readonly commands: readonly DateTimeFieldCommand[];
43
+ }
44
+ export declare function createDateTimeValue(date: DateValue, time: TimeValue): DateTimeValue;
45
+ export declare function tryCreateDateTimeValue(date: DateValue, time: TimeValue): Result<DateTimeValue>;
46
+ export declare function parseDateTimeValue(text: string): Result<DateTimeValue>;
47
+ export declare function formatDateTimeValue(value: DateTimeValue): string;
48
+ export declare function compareDateTimeValues(left: DateTimeValue, right: DateTimeValue): -1 | 0 | 1;
49
+ export declare function createDateTimeRange(start: DateTimeValue, end: DateTimeValue): DateTimeRange;
50
+ export declare function tryCreateDateTimeRange(start: DateTimeValue, end: DateTimeValue): Result<DateTimeRange>;
51
+ export declare function formatDateTimeRange(value: DateTimeRange): string;
52
+ export declare function addDateTimeMilliseconds(value: DateTimeValue, amount: number): Result<DateTimeValue>;
53
+ export declare function createDateTimeFieldState(value?: DateTimeValue | null, inputState?: TextEditingState): DateTimeFieldState;
54
+ export declare function tryCreateDateTimeFieldState(value?: DateTimeValue | null, inputState?: TextEditingState): Result<DateTimeFieldState>;
55
+ export declare function applyDateTimeFieldEvent(state: DateTimeFieldState, event: DateTimeFieldEvent, policies?: DateTimeFieldPolicies): Result<DateTimeFieldUpdate>;
56
+ export declare function dateTimeSegmentAt(offset: number): DateTimeSegment;
57
+ //# sourceMappingURL=date-time-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-time-field.d.ts","sourceRoot":"","sources":["../src/date-time-field.ts"],"names":[],"mappings":"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"}