@sectile/core 0.2.0 → 0.2.1

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 (373) 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/editable.d.ts +29 -0
  78. package/dist/editable.d.ts.map +1 -0
  79. package/dist/editable.js +34 -0
  80. package/dist/editable.js.map +1 -0
  81. package/dist/feed.d.ts +49 -0
  82. package/dist/feed.d.ts.map +1 -0
  83. package/dist/feed.js +124 -0
  84. package/dist/feed.js.map +1 -0
  85. package/dist/form.d.ts +135 -0
  86. package/dist/form.d.ts.map +1 -0
  87. package/dist/form.js +627 -0
  88. package/dist/form.js.map +1 -0
  89. package/dist/index.d.ts +37 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +2 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/interaction.d.ts +15 -0
  94. package/dist/interaction.d.ts.map +1 -0
  95. package/dist/interaction.js +42 -0
  96. package/dist/interaction.js.map +1 -0
  97. package/dist/internal/composites/calendar.d.ts +36 -0
  98. package/dist/internal/composites/calendar.d.ts.map +1 -0
  99. package/dist/internal/composites/calendar.js +143 -0
  100. package/dist/internal/composites/calendar.js.map +1 -0
  101. package/dist/internal/composites/combobox.d.ts +42 -0
  102. package/dist/internal/composites/combobox.d.ts.map +1 -0
  103. package/dist/internal/composites/combobox.js +188 -0
  104. package/dist/internal/composites/combobox.js.map +1 -0
  105. package/dist/internal/composites/grid-control.d.ts +37 -0
  106. package/dist/internal/composites/grid-control.d.ts.map +1 -0
  107. package/dist/internal/composites/grid-control.js +90 -0
  108. package/dist/internal/composites/grid-control.js.map +1 -0
  109. package/dist/internal/composites/linear-action.d.ts +36 -0
  110. package/dist/internal/composites/linear-action.d.ts.map +1 -0
  111. package/dist/internal/composites/linear-action.js +96 -0
  112. package/dist/internal/composites/linear-action.js.map +1 -0
  113. package/dist/internal/composites/linear-choice.d.ts +41 -0
  114. package/dist/internal/composites/linear-choice.d.ts.map +1 -0
  115. package/dist/internal/composites/linear-choice.js +139 -0
  116. package/dist/internal/composites/linear-choice.js.map +1 -0
  117. package/dist/internal/composites/listbox.d.ts +52 -0
  118. package/dist/internal/composites/listbox.d.ts.map +1 -0
  119. package/dist/internal/composites/listbox.js +251 -0
  120. package/dist/internal/composites/listbox.js.map +1 -0
  121. package/dist/internal/composites/menu.d.ts +29 -0
  122. package/dist/internal/composites/menu.d.ts.map +1 -0
  123. package/dist/internal/composites/menu.js +76 -0
  124. package/dist/internal/composites/menu.js.map +1 -0
  125. package/dist/internal/composites/popup.d.ts +21 -0
  126. package/dist/internal/composites/popup.d.ts.map +1 -0
  127. package/dist/internal/composites/popup.js +10 -0
  128. package/dist/internal/composites/popup.js.map +1 -0
  129. package/dist/internal/composites/slider.d.ts +21 -0
  130. package/dist/internal/composites/slider.d.ts.map +1 -0
  131. package/dist/internal/composites/slider.js +73 -0
  132. package/dist/internal/composites/slider.js.map +1 -0
  133. package/dist/internal/composites/tree-grid.d.ts +67 -0
  134. package/dist/internal/composites/tree-grid.d.ts.map +1 -0
  135. package/dist/internal/composites/tree-grid.js +281 -0
  136. package/dist/internal/composites/tree-grid.js.map +1 -0
  137. package/dist/internal/composites/tree-view.d.ts +42 -0
  138. package/dist/internal/composites/tree-view.d.ts.map +1 -0
  139. package/dist/internal/composites/tree-view.js +196 -0
  140. package/dist/internal/composites/tree-view.js.map +1 -0
  141. package/dist/internal/editing/text.d.ts +66 -0
  142. package/dist/internal/editing/text.d.ts.map +1 -0
  143. package/dist/internal/editing/text.js +248 -0
  144. package/dist/internal/editing/text.js.map +1 -0
  145. package/dist/internal/kernel/decimal.d.ts +22 -0
  146. package/dist/internal/kernel/decimal.d.ts.map +1 -0
  147. package/dist/internal/kernel/decimal.js +137 -0
  148. package/dist/internal/kernel/decimal.js.map +1 -0
  149. package/dist/internal/kernel/foundation.d.ts +12 -0
  150. package/dist/internal/kernel/foundation.d.ts.map +1 -0
  151. package/dist/internal/kernel/foundation.js +132 -0
  152. package/dist/internal/kernel/foundation.js.map +1 -0
  153. package/dist/internal/kernel/indexed-sequence.d.ts +26 -0
  154. package/dist/internal/kernel/indexed-sequence.d.ts.map +1 -0
  155. package/dist/internal/kernel/indexed-sequence.js +117 -0
  156. package/dist/internal/kernel/indexed-sequence.js.map +1 -0
  157. package/dist/internal/kernel/machine.d.ts +8 -0
  158. package/dist/internal/kernel/machine.d.ts.map +1 -0
  159. package/dist/internal/kernel/machine.js +6 -0
  160. package/dist/internal/kernel/machine.js.map +1 -0
  161. package/dist/internal/runtime/revision.d.ts +23 -0
  162. package/dist/internal/runtime/revision.d.ts.map +1 -0
  163. package/dist/internal/runtime/revision.js +76 -0
  164. package/dist/internal/runtime/revision.js.map +1 -0
  165. package/dist/internal/state/checked.d.ts +22 -0
  166. package/dist/internal/state/checked.d.ts.map +1 -0
  167. package/dist/internal/state/checked.js +33 -0
  168. package/dist/internal/state/checked.js.map +1 -0
  169. package/dist/internal/state/cursor.d.ts +13 -0
  170. package/dist/internal/state/cursor.d.ts.map +1 -0
  171. package/dist/internal/state/cursor.js +24 -0
  172. package/dist/internal/state/cursor.js.map +1 -0
  173. package/dist/internal/state/expansion.d.ts +8 -0
  174. package/dist/internal/state/expansion.d.ts.map +1 -0
  175. package/dist/internal/state/expansion.js +23 -0
  176. package/dist/internal/state/expansion.js.map +1 -0
  177. package/dist/internal/state/open-state.d.ts +17 -0
  178. package/dist/internal/state/open-state.d.ts.map +1 -0
  179. package/dist/internal/state/open-state.js +29 -0
  180. package/dist/internal/state/open-state.js.map +1 -0
  181. package/dist/internal/state/selection.d.ts +23 -0
  182. package/dist/internal/state/selection.d.ts.map +1 -0
  183. package/dist/internal/state/selection.js +110 -0
  184. package/dist/internal/state/selection.js.map +1 -0
  185. package/dist/layer-stack.d.ts +47 -0
  186. package/dist/layer-stack.d.ts.map +1 -0
  187. package/dist/layer-stack.js +115 -0
  188. package/dist/layer-stack.js.map +1 -0
  189. package/dist/listbox.d.ts +3 -0
  190. package/dist/listbox.d.ts.map +1 -0
  191. package/dist/listbox.js +3 -0
  192. package/dist/listbox.js.map +1 -0
  193. package/dist/menu-button.d.ts +5 -0
  194. package/dist/menu-button.d.ts.map +1 -0
  195. package/dist/menu-button.js +5 -0
  196. package/dist/menu-button.js.map +1 -0
  197. package/dist/menu.d.ts +10 -0
  198. package/dist/menu.d.ts.map +1 -0
  199. package/dist/menu.js +9 -0
  200. package/dist/menu.js.map +1 -0
  201. package/dist/menubar.d.ts +5 -0
  202. package/dist/menubar.d.ts.map +1 -0
  203. package/dist/menubar.js +5 -0
  204. package/dist/menubar.js.map +1 -0
  205. package/dist/month-picker.d.ts +5 -0
  206. package/dist/month-picker.d.ts.map +1 -0
  207. package/dist/month-picker.js +4 -0
  208. package/dist/month-picker.js.map +1 -0
  209. package/dist/month-range-picker.d.ts +6 -0
  210. package/dist/month-range-picker.d.ts.map +1 -0
  211. package/dist/month-range-picker.js +5 -0
  212. package/dist/month-range-picker.js.map +1 -0
  213. package/dist/multi-thumb-slider.d.ts +36 -0
  214. package/dist/multi-thumb-slider.d.ts.map +1 -0
  215. package/dist/multi-thumb-slider.js +72 -0
  216. package/dist/multi-thumb-slider.js.map +1 -0
  217. package/dist/navigation-menu.d.ts +6 -0
  218. package/dist/navigation-menu.d.ts.map +1 -0
  219. package/dist/navigation-menu.js +5 -0
  220. package/dist/navigation-menu.js.map +1 -0
  221. package/dist/number-field.d.ts +51 -0
  222. package/dist/number-field.d.ts.map +1 -0
  223. package/dist/number-field.js +461 -0
  224. package/dist/number-field.js.map +1 -0
  225. package/dist/pagination.d.ts +65 -0
  226. package/dist/pagination.d.ts.map +1 -0
  227. package/dist/pagination.js +197 -0
  228. package/dist/pagination.js.map +1 -0
  229. package/dist/pin-input.d.ts +31 -0
  230. package/dist/pin-input.d.ts.map +1 -0
  231. package/dist/pin-input.js +53 -0
  232. package/dist/pin-input.js.map +1 -0
  233. package/dist/popover.d.ts +17 -0
  234. package/dist/popover.d.ts.map +1 -0
  235. package/dist/popover.js +6 -0
  236. package/dist/popover.js.map +1 -0
  237. package/dist/quantity-field.d.ts +59 -0
  238. package/dist/quantity-field.d.ts.map +1 -0
  239. package/dist/quantity-field.js +254 -0
  240. package/dist/quantity-field.js.map +1 -0
  241. package/dist/radio-group.d.ts +23 -0
  242. package/dist/radio-group.d.ts.map +1 -0
  243. package/dist/radio-group.js +20 -0
  244. package/dist/radio-group.js.map +1 -0
  245. package/dist/range-calendar.d.ts +6 -0
  246. package/dist/range-calendar.d.ts.map +1 -0
  247. package/dist/range-calendar.js +5 -0
  248. package/dist/range-calendar.js.map +1 -0
  249. package/dist/rating.d.ts +18 -0
  250. package/dist/rating.d.ts.map +1 -0
  251. package/dist/rating.js +19 -0
  252. package/dist/rating.js.map +1 -0
  253. package/dist/reorder.d.ts +47 -0
  254. package/dist/reorder.d.ts.map +1 -0
  255. package/dist/reorder.js +110 -0
  256. package/dist/reorder.js.map +1 -0
  257. package/dist/result.d.ts +10 -0
  258. package/dist/result.d.ts.map +1 -0
  259. package/dist/result.js +19 -0
  260. package/dist/result.js.map +1 -0
  261. package/dist/revision.d.ts +3 -0
  262. package/dist/revision.d.ts.map +1 -0
  263. package/dist/revision.js +3 -0
  264. package/dist/revision.js.map +1 -0
  265. package/dist/select.d.ts +31 -0
  266. package/dist/select.d.ts.map +1 -0
  267. package/dist/select.js +32 -0
  268. package/dist/select.js.map +1 -0
  269. package/dist/shared.d.ts +43 -0
  270. package/dist/shared.d.ts.map +1 -0
  271. package/dist/shared.js +3 -0
  272. package/dist/shared.js.map +1 -0
  273. package/dist/slider.d.ts +3 -0
  274. package/dist/slider.d.ts.map +1 -0
  275. package/dist/slider.js +3 -0
  276. package/dist/slider.js.map +1 -0
  277. package/dist/spin-button.d.ts +31 -0
  278. package/dist/spin-button.d.ts.map +1 -0
  279. package/dist/spin-button.js +65 -0
  280. package/dist/spin-button.js.map +1 -0
  281. package/dist/stepper.d.ts +18 -0
  282. package/dist/stepper.d.ts.map +1 -0
  283. package/dist/stepper.js +16 -0
  284. package/dist/stepper.js.map +1 -0
  285. package/dist/structures/grid.d.ts +29 -0
  286. package/dist/structures/grid.d.ts.map +1 -0
  287. package/dist/structures/grid.js +202 -0
  288. package/dist/structures/grid.js.map +1 -0
  289. package/dist/structures/range.d.ts +41 -0
  290. package/dist/structures/range.d.ts.map +1 -0
  291. package/dist/structures/range.js +249 -0
  292. package/dist/structures/range.js.map +1 -0
  293. package/dist/structures/sequence.d.ts +19 -0
  294. package/dist/structures/sequence.d.ts.map +1 -0
  295. package/dist/structures/sequence.js +28 -0
  296. package/dist/structures/sequence.js.map +1 -0
  297. package/dist/structures/tree.d.ts +33 -0
  298. package/dist/structures/tree.d.ts.map +1 -0
  299. package/dist/structures/tree.js +238 -0
  300. package/dist/structures/tree.js.map +1 -0
  301. package/dist/switch.d.ts +21 -0
  302. package/dist/switch.d.ts.map +1 -0
  303. package/dist/switch.js +8 -0
  304. package/dist/switch.js.map +1 -0
  305. package/dist/tabs.d.ts +16 -0
  306. package/dist/tabs.d.ts.map +1 -0
  307. package/dist/tabs.js +27 -0
  308. package/dist/tabs.js.map +1 -0
  309. package/dist/tags-input.d.ts +43 -0
  310. package/dist/tags-input.d.ts.map +1 -0
  311. package/dist/tags-input.js +48 -0
  312. package/dist/tags-input.js.map +1 -0
  313. package/dist/text.d.ts +4 -0
  314. package/dist/text.d.ts.map +1 -0
  315. package/dist/text.js +4 -0
  316. package/dist/text.js.map +1 -0
  317. package/dist/time-field.d.ts +48 -0
  318. package/dist/time-field.d.ts.map +1 -0
  319. package/dist/time-field.js +157 -0
  320. package/dist/time-field.js.map +1 -0
  321. package/dist/time-range-field.d.ts +53 -0
  322. package/dist/time-range-field.d.ts.map +1 -0
  323. package/dist/time-range-field.js +75 -0
  324. package/dist/time-range-field.js.map +1 -0
  325. package/dist/timer.d.ts +37 -0
  326. package/dist/timer.d.ts.map +1 -0
  327. package/dist/timer.js +84 -0
  328. package/dist/timer.js.map +1 -0
  329. package/dist/toast.d.ts +56 -0
  330. package/dist/toast.d.ts.map +1 -0
  331. package/dist/toast.js +87 -0
  332. package/dist/toast.js.map +1 -0
  333. package/dist/toggle-button.d.ts +20 -0
  334. package/dist/toggle-button.d.ts.map +1 -0
  335. package/dist/toggle-button.js +20 -0
  336. package/dist/toggle-button.js.map +1 -0
  337. package/dist/toggle-group.d.ts +25 -0
  338. package/dist/toggle-group.d.ts.map +1 -0
  339. package/dist/toggle-group.js +30 -0
  340. package/dist/toggle-group.js.map +1 -0
  341. package/dist/toolbar.d.ts +3 -0
  342. package/dist/toolbar.d.ts.map +1 -0
  343. package/dist/toolbar.js +3 -0
  344. package/dist/toolbar.js.map +1 -0
  345. package/dist/tooltip.d.ts +3 -0
  346. package/dist/tooltip.d.ts.map +1 -0
  347. package/dist/tooltip.js +3 -0
  348. package/dist/tooltip.js.map +1 -0
  349. package/dist/tree-grid.d.ts +13 -0
  350. package/dist/tree-grid.d.ts.map +1 -0
  351. package/dist/tree-grid.js +20 -0
  352. package/dist/tree-grid.js.map +1 -0
  353. package/dist/tree-view.d.ts +3 -0
  354. package/dist/tree-view.d.ts.map +1 -0
  355. package/dist/tree-view.js +3 -0
  356. package/dist/tree-view.js.map +1 -0
  357. package/dist/units.d.ts +77 -0
  358. package/dist/units.d.ts.map +1 -0
  359. package/dist/units.js +512 -0
  360. package/dist/units.js.map +1 -0
  361. package/dist/window-splitter.d.ts +3 -0
  362. package/dist/window-splitter.d.ts.map +1 -0
  363. package/dist/window-splitter.js +3 -0
  364. package/dist/window-splitter.js.map +1 -0
  365. package/dist/year-picker.d.ts +10 -0
  366. package/dist/year-picker.d.ts.map +1 -0
  367. package/dist/year-picker.js +27 -0
  368. package/dist/year-picker.js.map +1 -0
  369. package/dist/year-range-picker.d.ts +6 -0
  370. package/dist/year-range-picker.d.ts.map +1 -0
  371. package/dist/year-range-picker.js +5 -0
  372. package/dist/year-range-picker.js.map +1 -0
  373. package/package.json +1 -1
@@ -0,0 +1,254 @@
1
+ import { unwrap } from './result.js';
2
+ import { compareDecimal, parseDecimal } from './internal/kernel/decimal.js';
3
+ import { fail, ok } from './internal/kernel/foundation.js';
4
+ import { createMachineUpdate } from './internal/kernel/machine.js';
5
+ import { applyNumberFieldEvent, createNumberFieldState, tryCreateNumberFieldState, } from './number-field.js';
6
+ import { tryCreateTextEditingState } from './text.js';
7
+ export function createQuantityFieldState(policies, quantity = null, displayUnit, inputState) {
8
+ return unwrap(tryCreateQuantityFieldState(policies, quantity, displayUnit, inputState));
9
+ }
10
+ export function tryCreateQuantityFieldState(policies, quantity = null, displayUnit, inputState) {
11
+ const validPolicies = validatePolicies(policies);
12
+ if (!validPolicies.ok)
13
+ return validPolicies;
14
+ const resolvedDisplayUnit = displayUnit
15
+ ?? policies.unitSystem?.getDefaultUnit(policies.canonicalUnit)
16
+ ?? policies.canonicalUnit;
17
+ const display = policies.registry.get(resolvedDisplayUnit);
18
+ if (display === null)
19
+ return fail('construction', 'unknown-display-unit', 'Quantity field display unit must be registered.', { displayUnit: resolvedDisplayUnit });
20
+ if (!policies.registry.compatible(policies.canonicalUnit, resolvedDisplayUnit)) {
21
+ return fail('construction', 'incompatible-display-unit', 'Quantity field display unit must match the canonical dimension.', { displayUnit: resolvedDisplayUnit, canonicalUnit: policies.canonicalUnit });
22
+ }
23
+ let normalizedQuantity = null;
24
+ if (quantity !== null) {
25
+ if (typeof quantity !== 'object' || typeof quantity.value !== 'string' || typeof quantity.unit !== 'string') {
26
+ return fail('construction', 'invalid-quantity-value', 'Quantity must contain decimal value text and a unit ID.');
27
+ }
28
+ const converted = policies.registry.convert(quantity.value, quantity.unit, policies.canonicalUnit, conversionOptions(policies));
29
+ if (!converted.ok)
30
+ return asConstruction(converted);
31
+ normalizedQuantity = Object.freeze({ value: converted.value.value, unit: policies.canonicalUnit });
32
+ }
33
+ let input = inputState;
34
+ if (input === undefined) {
35
+ const displayed = displayValue(normalizedQuantity, resolvedDisplayUnit, policies);
36
+ if (!displayed.ok)
37
+ return displayed;
38
+ const text = displayed.value ?? '';
39
+ const created = tryCreateTextEditingState(text, {
40
+ anchorCodeUnitOffset: text.length,
41
+ focusCodeUnitOffset: text.length,
42
+ });
43
+ if (!created.ok)
44
+ return created;
45
+ input = created.value;
46
+ }
47
+ const number = tryCreateNumberFieldState(null, input);
48
+ if (!number.ok)
49
+ return number;
50
+ return ok(Object.freeze({
51
+ quantity: normalizedQuantity,
52
+ displayUnit: resolvedDisplayUnit,
53
+ inputState: number.value.inputState,
54
+ }));
55
+ }
56
+ export function applyQuantityFieldEvent(state, event, policies) {
57
+ const valid = tryCreateQuantityFieldState(policies, state.quantity, state.displayUnit, state.inputState);
58
+ if (!valid.ok)
59
+ return { ok: false, error: { ...valid.error, class: 'transition-rejection' } };
60
+ const bounds = normalizeBounds(policies);
61
+ if (!bounds.ok)
62
+ return bounds;
63
+ if (typeof event === 'object' && event.type === 'set-display-unit') {
64
+ return changeDisplayUnit(valid.value, event.unit, policies);
65
+ }
66
+ if (event === 'commit')
67
+ return commitQuantityField(valid.value, policies, bounds.value);
68
+ const displayed = displayValue(valid.value.quantity, valid.value.displayUnit, policies);
69
+ if (!displayed.ok)
70
+ return displayed;
71
+ const numberState = tryCreateNumberFieldState(displayed.value, valid.value.inputState);
72
+ if (!numberState.ok)
73
+ return numberState;
74
+ const reduced = applyNumberFieldEvent(numberState.value, event, {
75
+ ...(policies.evaluator === undefined ? {} : { evaluator: policies.evaluator }),
76
+ ...(policies.required === undefined ? {} : { required: policies.required }),
77
+ });
78
+ if (!reduced.ok)
79
+ return reduced;
80
+ const next = Object.freeze({ ...valid.value, inputState: reduced.value.state.inputState });
81
+ const commands = reduced.value.commands
82
+ .filter((command) => command.type === 'input-state-changed')
83
+ .map((command) => ({ type: 'input-state-changed', value: command.value }));
84
+ return createMachineUpdate(next, commands);
85
+ }
86
+ export function parseQuantityInput(input, options) {
87
+ if (typeof input !== 'string')
88
+ return fail('transition-rejection', 'invalid-quantity-input', 'Quantity input must be text.');
89
+ const expression = input.trim();
90
+ if (expression.length === 0)
91
+ return ok(Object.freeze({ value: null, expression: input, unitExpression: null }));
92
+ const direct = evaluateQuantityExpression(expression, options.evaluator);
93
+ if (direct.ok)
94
+ return ok(Object.freeze({ value: direct.value, expression: input, unitExpression: null }));
95
+ for (let position = expression.length - 1; position > 0; position -= 1) {
96
+ const numeric = expression.slice(0, position).trimEnd();
97
+ const unitSource = expression.slice(position).trimStart();
98
+ if (numeric.length === 0 || unitSource.length === 0)
99
+ continue;
100
+ const unitExpression = options.registry.parse(unitSource);
101
+ if (!unitExpression.ok)
102
+ continue;
103
+ const value = evaluateQuantityExpression(numeric, options.evaluator);
104
+ if (!value.ok)
105
+ continue;
106
+ return ok(Object.freeze({ value: value.value, expression: input, unitExpression: unitExpression.value }));
107
+ }
108
+ return fail('transition-rejection', 'invalid-quantity-input', 'Quantity input must contain a valid number or expression followed by an optional unit expression.', { input });
109
+ }
110
+ function commitQuantityField(state, policies, bounds) {
111
+ if (state.inputState.composition !== null) {
112
+ return fail('transition-rejection', 'quantity-commit-during-composition', 'Quantity field cannot commit during active composition.');
113
+ }
114
+ const parsedInput = parseQuantityInput(state.inputState.snapshot.text, {
115
+ registry: policies.registry,
116
+ ...(policies.evaluator === undefined ? {} : { evaluator: policies.evaluator }),
117
+ });
118
+ if (!parsedInput.ok)
119
+ return parsedInput;
120
+ if (parsedInput.value.value === null) {
121
+ if (policies.required === true)
122
+ return fail('transition-rejection', 'required-quantity', 'Quantity field requires a value.');
123
+ const input = tryCreateTextEditingState('', { anchorCodeUnitOffset: 0, focusCodeUnitOffset: 0 });
124
+ if (!input.ok)
125
+ return input;
126
+ return createMachineUpdate(Object.freeze({ ...state, quantity: null, inputState: input.value }), [
127
+ { type: 'input-state-changed', value: input.value },
128
+ { type: 'quantity-committed', value: null, expression: parsedInput.value.expression, displayUnit: state.displayUnit },
129
+ ]);
130
+ }
131
+ const canonical = parsedInput.value.unitExpression === null
132
+ ? policies.registry.convert(parsedInput.value.value, state.displayUnit, policies.canonicalUnit, conversionOptions(policies))
133
+ : policies.registry.convertExpression(parsedInput.value.value, parsedInput.value.unitExpression, policies.canonicalUnit, conversionOptions(policies));
134
+ if (!canonical.ok)
135
+ return canonical;
136
+ const canonicalValue = canonical.value.value;
137
+ const parsedCanonical = parseDecimal(canonicalValue);
138
+ if (parsedCanonical === null)
139
+ return fail('internal-invariant', 'invalid-canonical-quantity', 'Unit registry returned invalid canonical decimal text.');
140
+ if (bounds.min !== null && compareDecimal(parsedCanonical, bounds.min) < 0) {
141
+ return fail('transition-rejection', 'quantity-below-minimum', 'Quantity is below its canonical minimum.', { value: canonicalValue, min: policies.min });
142
+ }
143
+ if (bounds.max !== null && compareDecimal(parsedCanonical, bounds.max) > 0) {
144
+ return fail('transition-rejection', 'quantity-above-maximum', 'Quantity is above its canonical maximum.', { value: canonicalValue, max: policies.max });
145
+ }
146
+ const requestedUnit = parsedInput.value.unitExpression?.resolvedUnit;
147
+ const displayUnit = requestedUnit !== null && requestedUnit !== undefined
148
+ && policies.registry.compatible(policies.canonicalUnit, requestedUnit)
149
+ ? requestedUnit
150
+ : state.displayUnit;
151
+ const display = policies.registry.convert(canonicalValue, policies.canonicalUnit, displayUnit, conversionOptions(policies));
152
+ if (!display.ok)
153
+ return display;
154
+ const input = tryCreateTextEditingState(display.value.value, {
155
+ anchorCodeUnitOffset: display.value.value.length,
156
+ focusCodeUnitOffset: display.value.value.length,
157
+ });
158
+ if (!input.ok)
159
+ return input;
160
+ const quantity = Object.freeze({ value: canonicalValue, unit: policies.canonicalUnit });
161
+ return createMachineUpdate(Object.freeze({ quantity, displayUnit, inputState: input.value }), [
162
+ { type: 'input-state-changed', value: input.value },
163
+ ...(displayUnit === state.displayUnit ? [] : [{ type: 'display-unit-changed', unit: displayUnit }]),
164
+ { type: 'quantity-committed', value: quantity, expression: parsedInput.value.expression, displayUnit },
165
+ ]);
166
+ }
167
+ function evaluateQuantityExpression(expression, evaluator) {
168
+ const input = tryCreateTextEditingState(expression, {
169
+ anchorCodeUnitOffset: expression.length,
170
+ focusCodeUnitOffset: expression.length,
171
+ });
172
+ if (!input.ok)
173
+ return input;
174
+ const state = tryCreateNumberFieldState(null, input.value);
175
+ if (!state.ok)
176
+ return state;
177
+ const committed = applyNumberFieldEvent(state.value, 'commit', {
178
+ ...(evaluator === undefined ? {} : { evaluator }),
179
+ });
180
+ if (!committed.ok)
181
+ return committed;
182
+ const command = committed.value.commands.find((candidate) => candidate.type === 'value-committed');
183
+ return command === undefined
184
+ ? fail('internal-invariant', 'missing-quantity-expression-result', 'Number field commit must produce a value command.')
185
+ : ok(command.value);
186
+ }
187
+ function changeDisplayUnit(state, displayUnit, policies) {
188
+ if (policies.registry.get(displayUnit) === null) {
189
+ return fail('transition-rejection', 'unknown-display-unit', 'Quantity field display unit must be registered.', { displayUnit });
190
+ }
191
+ if (!policies.registry.compatible(policies.canonicalUnit, displayUnit)) {
192
+ return fail('transition-rejection', 'incompatible-display-unit', 'Quantity field display unit must match the canonical dimension.', { displayUnit });
193
+ }
194
+ if (displayUnit === state.displayUnit)
195
+ return createMachineUpdate(state);
196
+ const displayed = displayValue(state.quantity, displayUnit, policies);
197
+ if (!displayed.ok)
198
+ return displayed;
199
+ const text = displayed.value ?? '';
200
+ const input = tryCreateTextEditingState(text, {
201
+ anchorCodeUnitOffset: text.length,
202
+ focusCodeUnitOffset: text.length,
203
+ });
204
+ if (!input.ok)
205
+ return input;
206
+ return createMachineUpdate(Object.freeze({ ...state, displayUnit, inputState: input.value }), [
207
+ { type: 'input-state-changed', value: input.value },
208
+ { type: 'display-unit-changed', unit: displayUnit },
209
+ ]);
210
+ }
211
+ function displayValue(quantity, displayUnit, policies) {
212
+ if (quantity === null)
213
+ return ok(null);
214
+ const converted = policies.registry.convert(quantity.value, quantity.unit, displayUnit, conversionOptions(policies));
215
+ return converted.ok ? ok(converted.value.value) : converted;
216
+ }
217
+ function validatePolicies(policies) {
218
+ if (typeof policies !== 'object' || policies === null
219
+ || typeof policies.registry !== 'object' || policies.registry === null
220
+ || typeof policies.registry.get !== 'function'
221
+ || typeof policies.registry.compatible !== 'function'
222
+ || typeof policies.registry.convert !== 'function') {
223
+ return fail('construction', 'invalid-unit-registry', 'Quantity field requires a unit registry.');
224
+ }
225
+ if (typeof policies.canonicalUnit !== 'string' || policies.registry.get(policies.canonicalUnit) === null) {
226
+ return fail('construction', 'unknown-canonical-unit', 'Quantity field canonical unit must be registered.', { canonicalUnit: policies.canonicalUnit });
227
+ }
228
+ if (policies.unitSystem !== undefined && (typeof policies.unitSystem !== 'object' || policies.unitSystem === null
229
+ || typeof policies.unitSystem.getDefaultUnit !== 'function' || typeof policies.unitSystem.getUnits !== 'function')) {
230
+ return fail('construction', 'invalid-unit-system', 'Quantity field unit system must provide default and compatible display units.');
231
+ }
232
+ return ok(true);
233
+ }
234
+ function normalizeBounds(policies) {
235
+ const min = policies.min === undefined ? null : parseDecimal(policies.min);
236
+ const max = policies.max === undefined ? null : parseDecimal(policies.max);
237
+ if (policies.min !== undefined && min === null)
238
+ return fail('construction', 'invalid-quantity-minimum', 'Quantity minimum must be canonical decimal text.');
239
+ if (policies.max !== undefined && max === null)
240
+ return fail('construction', 'invalid-quantity-maximum', 'Quantity maximum must be canonical decimal text.');
241
+ if (min !== null && max !== null && compareDecimal(min, max) > 0)
242
+ return fail('construction', 'inverted-quantity-bounds', 'Quantity minimum must not exceed its maximum.');
243
+ return ok(Object.freeze({ min, max }));
244
+ }
245
+ function conversionOptions(policies) {
246
+ return Object.freeze({
247
+ ...(policies.precision === undefined ? {} : { precision: policies.precision }),
248
+ ...(policies.rounding === undefined ? {} : { rounding: policies.rounding }),
249
+ });
250
+ }
251
+ function asConstruction(result) {
252
+ return result.ok ? result : { ok: false, error: { ...result.error, class: 'construction' } };
253
+ }
254
+ //# sourceMappingURL=quantity-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantity-field.js","sourceRoot":"","sources":["../src/quantity-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Result, StableID } from './shared.js';
2
+ import type { Sequence } from './structures/sequence.js';
3
+ import { type LinearChoiceCommand, type LinearChoicePolicies, type LinearChoiceState, type LinearChoiceStateInput, type LinearChoiceUpdate } from './internal/composites/linear-choice.js';
4
+ export type RadioGroupEvent<ID extends StableID = StableID> = 'next' | 'previous' | 'first' | 'last' | 'check' | {
5
+ readonly type: 'focus';
6
+ readonly id: ID;
7
+ } | {
8
+ readonly type: 'check';
9
+ readonly id: ID;
10
+ };
11
+ export type RadioGroupCommand<ID extends StableID = StableID> = Extract<LinearChoiceCommand<ID>, {
12
+ readonly type: 'focus';
13
+ }>;
14
+ export type RadioGroupState<ID extends StableID = StableID> = LinearChoiceState<ID>;
15
+ export type RadioGroupStateInput<ID extends StableID = StableID> = LinearChoiceStateInput<ID>;
16
+ export type RadioGroupUpdate<ID extends StableID = StableID> = Omit<LinearChoiceUpdate<ID>, 'commands'> & {
17
+ readonly commands: readonly RadioGroupCommand<ID>[];
18
+ };
19
+ export type RadioGroupPolicies<ID extends StableID = StableID> = Omit<LinearChoicePolicies<ID>, 'selectionFollowsFocus'>;
20
+ export declare function createRadioGroupState<ID extends StableID>(domain: Sequence<ID>, input?: RadioGroupStateInput<ID>): RadioGroupState<ID>;
21
+ export declare function tryCreateRadioGroupState<ID extends StableID>(domain: Sequence<ID>, input?: RadioGroupStateInput<ID>): Result<RadioGroupState<ID>>;
22
+ export declare function applyRadioGroupEvent<ID extends StableID>(domain: Sequence<ID>, state: RadioGroupState<ID>, event: RadioGroupEvent<ID>, policies?: RadioGroupPolicies<ID>): Result<RadioGroupUpdate<ID>>;
23
+ //# sourceMappingURL=radio-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../src/radio-group.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,MAAM,eAAe,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IACtD,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,OAAO,GACP;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AAEhD,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAC1D,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAC/D,MAAM,MAAM,eAAe,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACpF,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC;AAC9F,MAAM,MAAM,gBAAgB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IACzD,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,GACtC;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE,CAAC;AAC5D,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAC3D,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC;AAE1D,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,QAAQ,EACvD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,GAAE,oBAAoB,CAAC,EAAE,CAAM,GACnC,eAAe,CAAC,EAAE,CAAC,CAErB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,QAAQ,EAC1D,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,GAAE,oBAAoB,CAAC,EAAE,CAAM,GACnC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAE7B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,QAAQ,EACtD,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EACpB,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC,EAC1B,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC,EAC1B,QAAQ,GAAE,kBAAkB,CAAC,EAAE,CAAM,GACpC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAU9B"}
@@ -0,0 +1,20 @@
1
+ import { unwrap } from './result.js';
2
+ import { applyLinearChoiceEvent, createLinearChoiceState, } from './internal/composites/linear-choice.js';
3
+ export function createRadioGroupState(domain, input = {}) {
4
+ return unwrap(tryCreateRadioGroupState(domain, input));
5
+ }
6
+ export function tryCreateRadioGroupState(domain, input = {}) {
7
+ return createLinearChoiceState(domain, input);
8
+ }
9
+ export function applyRadioGroupEvent(domain, state, event, policies = {}) {
10
+ const mapped = typeof event === 'object'
11
+ ? event.type === 'check' ? { type: 'select', id: event.id } : event
12
+ : event === 'check' ? 'select' : event;
13
+ const result = applyLinearChoiceEvent(domain, state, mapped, {
14
+ boundary: 'wrap',
15
+ ...policies,
16
+ selectionFollowsFocus: true,
17
+ });
18
+ return result;
19
+ }
20
+ //# sourceMappingURL=radio-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.js","sourceRoot":"","sources":["../src/radio-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GAMxB,MAAM,wCAAwC,CAAC;AAqBhD,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,KAAK,GAA6B,EAAE;IAEpC,OAAO,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAoB,EACpB,KAAK,GAA6B,EAAE;IAEpC,OAAO,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAoB,EACpB,KAA0B,EAC1B,KAA0B,EAC1B,QAAQ,GAA2B,EAAE;IAErC,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ;QACtC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;QAC5E,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QAC3D,QAAQ,EAAE,MAAM;QAChB,GAAG,QAAQ;QACX,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAC;IACH,OAAO,MAAsC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { applyDateRangePickerEvent as applyRangeCalendarEvent, createDateRangePickerState as createRangeCalendarState, } from './date-range-picker.js';
2
+ export type { DateRangePickerCommand as RangeCalendarCommand, DateRangePickerEvent as RangeCalendarEvent, DateRangePickerState as RangeCalendarState, DateRangePickerStateInput as RangeCalendarStateInput, DateRangePickerUpdate as RangeCalendarUpdate, } from './date-range-picker.js';
3
+ export { createDatePickerMonth as createRangeCalendarMonth } from './date-picker.js';
4
+ export { tryCreateDatePickerMonth as tryCreateRangeCalendarMonth } from './date-picker.js';
5
+ export { tryCreateDateRangePickerState as tryCreateRangeCalendarState } from './date-range-picker.js';
6
+ //# sourceMappingURL=range-calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-calendar.d.ts","sourceRoot":"","sources":["../src/range-calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,IAAI,uBAAuB,EACpD,0BAA0B,IAAI,wBAAwB,GACvD,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,sBAAsB,IAAI,oBAAoB,EAC9C,oBAAoB,IAAI,kBAAkB,EAC1C,oBAAoB,IAAI,kBAAkB,EAC1C,yBAAyB,IAAI,uBAAuB,EACpD,qBAAqB,IAAI,mBAAmB,GAC7C,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,IAAI,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAErF,OAAO,EAAE,wBAAwB,IAAI,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,6BAA6B,IAAI,2BAA2B,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { applyDateRangePickerEvent as applyRangeCalendarEvent, createDateRangePickerState as createRangeCalendarState, } from './date-range-picker.js';
2
+ export { createDatePickerMonth as createRangeCalendarMonth } from './date-picker.js';
3
+ export { tryCreateDatePickerMonth as tryCreateRangeCalendarMonth } from './date-picker.js';
4
+ export { tryCreateDateRangePickerState as tryCreateRangeCalendarState } from './date-range-picker.js';
5
+ //# sourceMappingURL=range-calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-calendar.js","sourceRoot":"","sources":["../src/range-calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,IAAI,uBAAuB,EACpD,0BAA0B,IAAI,wBAAwB,GACvD,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EAAE,qBAAqB,IAAI,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAErF,OAAO,EAAE,wBAAwB,IAAI,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,6BAA6B,IAAI,2BAA2B,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Result, StableID } from './shared.js';
2
+ import type { Sequence } from './structures/sequence.js';
3
+ import { type RadioGroupCommand, type RadioGroupPolicies, type RadioGroupState, type RadioGroupUpdate } from './radio-group.js';
4
+ export type RatingEvent<ID extends StableID = StableID> = 'increase' | 'decrease' | 'minimum' | 'maximum' | 'set' | 'clear' | {
5
+ readonly type: 'focus';
6
+ readonly id: ID;
7
+ } | {
8
+ readonly type: 'set';
9
+ readonly id: ID;
10
+ };
11
+ export type RatingCommand<ID extends StableID = StableID> = RadioGroupCommand<ID>;
12
+ export type RatingState<ID extends StableID = StableID> = RadioGroupState<ID>;
13
+ export type RatingPolicies<ID extends StableID = StableID> = RadioGroupPolicies<ID>;
14
+ export type RatingUpdate<ID extends StableID = StableID> = RadioGroupUpdate<ID>;
15
+ export declare function createRatingState<ID extends StableID>(domain: Sequence<ID>, value?: ID | null): RatingState<ID>;
16
+ export declare function tryCreateRatingState<ID extends StableID>(domain: Sequence<ID>, value?: ID | null): Result<RatingState<ID>>;
17
+ export declare function applyRatingEvent<ID extends StableID>(domain: Sequence<ID>, state: RatingState<ID>, event: RatingEvent<ID>, policies?: RatingPolicies<ID>): Result<RatingUpdate<ID>>;
18
+ //# sourceMappingURL=rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating.d.ts","sourceRoot":"","sources":["../src/rating.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAA+C,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAA2B,MAAM,kBAAkB,CAAC;AAEtM,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AACtN,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAClF,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACpF,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAEhF,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,EAAE,GAAG,IAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAErH;AAED,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,EAAE,GAAG,IAAW,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAEhI;AACD,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAE,cAAc,CAAC,EAAE,CAAM,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAMvL"}
package/dist/rating.js ADDED
@@ -0,0 +1,19 @@
1
+ import { unwrap } from './result.js';
2
+ import { createMachineUpdate } from './internal/kernel/machine.js';
3
+ import { clearSelection } from './internal/state/selection.js';
4
+ import { applyRadioGroupEvent, createRadioGroupState, tryCreateRadioGroupState } from './radio-group.js';
5
+ export function createRatingState(domain, value = null) {
6
+ return unwrap(tryCreateRatingState(domain, value));
7
+ }
8
+ export function tryCreateRatingState(domain, value = null) {
9
+ return tryCreateRadioGroupState(domain, { current: value, selected: value === null ? [] : [value] });
10
+ }
11
+ export function applyRatingEvent(domain, state, event, policies = {}) {
12
+ if (event === 'clear')
13
+ return createMachineUpdate(Object.freeze({ cursor: state.cursor, selection: clearSelection(state.selection) }));
14
+ const mapped = typeof event === 'object' ? (event.type === 'set' ? { type: 'check', id: event.id } : event)
15
+ : event === 'increase' ? 'next' : event === 'decrease' ? 'previous'
16
+ : event === 'minimum' ? 'first' : event === 'maximum' ? 'last' : 'check';
17
+ return applyRadioGroupEvent(domain, state, mapped, policies);
18
+ }
19
+ //# sourceMappingURL=rating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating.js","sourceRoot":"","sources":["../src/rating.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAA+F,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAQtM,MAAM,UAAU,iBAAiB,CAAsB,MAAoB,EAAE,KAAK,GAAc,IAAI;IAClG,OAAO,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAsB,MAAoB,EAAE,KAAK,GAAc,IAAI;IACrG,OAAO,wBAAwB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvG,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAsB,MAAoB,EAAE,KAAsB,EAAE,KAAsB,EAAE,QAAQ,GAAuB,EAAE;IAC3J,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACvI,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAClH,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAe,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,UAAmB;YACnF,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAgB,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAe,CAAC,CAAC,CAAC,OAAgB,CAAC;IACxG,OAAO,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { type MachineUpdate } from './internal/kernel/machine.js';
2
+ import { type TreeNodeInput } from './structures/tree.js';
3
+ import type { Result, StableID } from './shared.js';
4
+ export interface SequenceReorderState<ID extends StableID = StableID> {
5
+ readonly ids: readonly ID[];
6
+ }
7
+ export type SequenceReorderEvent<ID extends StableID = StableID> = {
8
+ readonly type: 'move-before';
9
+ readonly id: ID;
10
+ readonly targetID: ID;
11
+ } | {
12
+ readonly type: 'move-after';
13
+ readonly id: ID;
14
+ readonly targetID: ID;
15
+ } | {
16
+ readonly type: 'move-to-start';
17
+ readonly id: ID;
18
+ } | {
19
+ readonly type: 'move-to-end';
20
+ readonly id: ID;
21
+ };
22
+ export type SequenceReorderCommand<ID extends StableID = StableID> = {
23
+ readonly type: 'sequence-order-changed';
24
+ readonly ids: readonly ID[];
25
+ };
26
+ export type SequenceReorderUpdate<ID extends StableID = StableID> = MachineUpdate<SequenceReorderState<ID>, SequenceReorderCommand<ID>>;
27
+ export interface TreeReorderState<ID extends StableID = StableID> {
28
+ readonly nodes: readonly TreeNodeInput<ID>[];
29
+ }
30
+ export interface TreeReorderEvent<ID extends StableID = StableID> {
31
+ readonly type: 'move-node';
32
+ readonly id: ID;
33
+ readonly parentID: ID | null;
34
+ readonly beforeID?: ID | null;
35
+ }
36
+ export type TreeReorderCommand<ID extends StableID = StableID> = {
37
+ readonly type: 'tree-order-changed';
38
+ readonly nodes: readonly TreeNodeInput<ID>[];
39
+ };
40
+ export type TreeReorderUpdate<ID extends StableID = StableID> = MachineUpdate<TreeReorderState<ID>, TreeReorderCommand<ID>>;
41
+ export declare function createSequenceReorderState<ID extends StableID>(ids: readonly ID[]): SequenceReorderState<ID>;
42
+ export declare function tryCreateSequenceReorderState<ID extends StableID>(ids: readonly ID[]): Result<SequenceReorderState<ID>>;
43
+ export declare function applySequenceReorderEvent<ID extends StableID>(state: SequenceReorderState<ID>, event: SequenceReorderEvent<ID>): Result<SequenceReorderUpdate<ID>>;
44
+ export declare function createTreeReorderState<ID extends StableID>(nodes: readonly TreeNodeInput<ID>[]): TreeReorderState<ID>;
45
+ export declare function tryCreateTreeReorderState<ID extends StableID>(nodes: readonly TreeNodeInput<ID>[]): Result<TreeReorderState<ID>>;
46
+ export declare function applyTreeReorderEvent<ID extends StableID>(state: TreeReorderState<ID>, event: TreeReorderEvent<ID>): Result<TreeReorderUpdate<ID>>;
47
+ //# sourceMappingURL=reorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reorder.d.ts","sourceRoot":"","sources":["../src/reorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { createMachineUpdate } from './internal/kernel/machine.js';
2
+ import { fail, ok } from './internal/kernel/foundation.js';
3
+ import { unwrap } from './result.js';
4
+ import { tryCreateSequence } from './structures/sequence.js';
5
+ import { tryCreateTree } from './structures/tree.js';
6
+ export function createSequenceReorderState(ids) {
7
+ return unwrap(tryCreateSequenceReorderState(ids));
8
+ }
9
+ export function tryCreateSequenceReorderState(ids) {
10
+ const sequence = tryCreateSequence(ids);
11
+ return sequence.ok
12
+ ? ok(Object.freeze({ ids: Object.freeze([...sequence.value.ids]) }))
13
+ : sequence;
14
+ }
15
+ export function applySequenceReorderEvent(state, event) {
16
+ const valid = tryCreateSequenceReorderState(state.ids);
17
+ if (!valid.ok)
18
+ return transitionFailure(valid);
19
+ const sourceIndex = state.ids.indexOf(event.id);
20
+ if (sourceIndex < 0)
21
+ return missingID(event.id);
22
+ if ((event.type === 'move-before' || event.type === 'move-after') && event.id === event.targetID) {
23
+ return createMachineUpdate(state);
24
+ }
25
+ const ids = state.ids.filter((id) => id !== event.id);
26
+ let destination;
27
+ if (event.type === 'move-to-start')
28
+ destination = 0;
29
+ else if (event.type === 'move-to-end')
30
+ destination = ids.length;
31
+ else {
32
+ const targetIndex = ids.indexOf(event.targetID);
33
+ if (targetIndex < 0)
34
+ return missingID(event.targetID);
35
+ destination = targetIndex + (event.type === 'move-after' ? 1 : 0);
36
+ }
37
+ ids.splice(destination, 0, event.id);
38
+ if (ids.every((id, index) => id === state.ids[index]))
39
+ return createMachineUpdate(state);
40
+ const next = Object.freeze({ ids: Object.freeze(ids) });
41
+ return createMachineUpdate(next, [{ type: 'sequence-order-changed', ids: next.ids }]);
42
+ }
43
+ export function createTreeReorderState(nodes) {
44
+ return unwrap(tryCreateTreeReorderState(nodes));
45
+ }
46
+ export function tryCreateTreeReorderState(nodes) {
47
+ const tree = tryCreateTree(nodes);
48
+ if (!tree.ok)
49
+ return tree;
50
+ return ok(Object.freeze({ nodes: freezeNodes(nodes) }));
51
+ }
52
+ export function applyTreeReorderEvent(state, event) {
53
+ const tree = tryCreateTree(state.nodes);
54
+ if (!tree.ok)
55
+ return transitionFailure(tree);
56
+ if (!tree.value.has(event.id))
57
+ return missingID(event.id);
58
+ if (event.parentID !== null && !tree.value.has(event.parentID))
59
+ return missingID(event.parentID);
60
+ if (event.parentID === event.id
61
+ || (event.parentID !== null && tree.value.ancestorsOf(event.parentID)?.includes(event.id) === true)) {
62
+ return fail('transition-rejection', 'reorder-tree-cycle', 'A tree node cannot move below itself or one of its descendants.', { id: event.id, parentID: event.parentID });
63
+ }
64
+ const beforeID = event.beforeID ?? null;
65
+ if (beforeID === event.id)
66
+ return createMachineUpdate(state);
67
+ if (beforeID !== null
68
+ && (!tree.value.has(beforeID) || tree.value.parentOf(beforeID) !== event.parentID)) {
69
+ return fail('transition-rejection', 'reorder-tree-sibling-invalid', 'beforeID must identify a sibling under the requested parent.', { beforeID, parentID: event.parentID });
70
+ }
71
+ const moving = state.nodes.find((node) => node.id === event.id);
72
+ const remaining = state.nodes.filter((node) => node.id !== event.id);
73
+ let destination;
74
+ if (beforeID !== null) {
75
+ destination = remaining.findIndex((node) => node.id === beforeID);
76
+ }
77
+ else {
78
+ const siblingIndices = remaining.flatMap((node, index) => (node.parentID === event.parentID ? [index] : []));
79
+ if (siblingIndices.length > 0)
80
+ destination = siblingIndices.at(-1) + 1;
81
+ else if (event.parentID === null)
82
+ destination = remaining.length;
83
+ else
84
+ destination = remaining.findIndex((node) => node.id === event.parentID) + 1;
85
+ }
86
+ const nodes = [...remaining];
87
+ nodes.splice(destination, 0, Object.freeze({ id: moving.id, parentID: event.parentID }));
88
+ const nextTree = tryCreateTree(nodes);
89
+ if (!nextTree.ok)
90
+ return transitionFailure(nextTree);
91
+ if (sameNodes(state.nodes, nodes))
92
+ return createMachineUpdate(state);
93
+ const next = Object.freeze({ nodes: freezeNodes(nodes) });
94
+ return createMachineUpdate(next, [{ type: 'tree-order-changed', nodes: next.nodes }]);
95
+ }
96
+ function missingID(id) {
97
+ return fail('transition-rejection', 'reorder-id-missing', 'Reorder identity must exist in the current domain.', { id });
98
+ }
99
+ function freezeNodes(nodes) {
100
+ return Object.freeze(nodes.map((node) => Object.freeze({ ...node })));
101
+ }
102
+ function sameNodes(left, right) {
103
+ return left.length === right.length && left.every((node, index) => (node.id === right[index]?.id && node.parentID === right[index]?.parentID));
104
+ }
105
+ function transitionFailure(result) {
106
+ if (result.ok)
107
+ throw new Error('Expected a failed result.');
108
+ return fail('transition-rejection', result.error.code, result.error.message, result.error.details);
109
+ }
110
+ //# sourceMappingURL=reorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reorder.js","sourceRoot":"","sources":["../src/reorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ErrorClass, Result, SectileError } from './shared.js';
2
+ export declare class SectileResultError extends Error implements SectileError {
3
+ readonly class: ErrorClass;
4
+ readonly code: string;
5
+ readonly details?: Readonly<Record<string, unknown>>;
6
+ constructor(error: SectileError);
7
+ }
8
+ export declare function unwrap<T>(result: Result<T>): T;
9
+ export type { ErrorClass, Result, SectileError } from './shared.js';
10
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEpE,qBAAa,kBAAmB,SAAQ,KAAM,YAAW,YAAY;IACnE,SAAgB,KAAK,EAAE,UAAU,CAAC;IAClC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5D,YAAmB,KAAK,EAAE,YAAY,EAMrC;CACF;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAG9C;AAED,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}