@sectile/core 0.1.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 (335) hide show
  1. package/README.md +3 -2
  2. package/dist/accordion.d.ts +2 -1
  3. package/dist/accordion.d.ts.map +1 -1
  4. package/dist/accordion.js +5 -1
  5. package/dist/accordion.js.map +1 -1
  6. package/dist/alert-dialog.d.ts +2 -1
  7. package/dist/alert-dialog.d.ts.map +1 -1
  8. package/dist/alert-dialog.js +2 -1
  9. package/dist/alert-dialog.js.map +1 -1
  10. package/dist/calendar.d.ts +1 -0
  11. package/dist/calendar.d.ts.map +1 -1
  12. package/dist/calendar.js +1 -0
  13. package/dist/calendar.js.map +1 -1
  14. package/dist/carousel.d.ts +2 -1
  15. package/dist/carousel.d.ts.map +1 -1
  16. package/dist/carousel.js +5 -1
  17. package/dist/carousel.js.map +1 -1
  18. package/dist/cascade-select.d.ts +48 -0
  19. package/dist/cascade-select.d.ts.map +1 -0
  20. package/dist/cascade-select.js +148 -0
  21. package/dist/cascade-select.js.map +1 -0
  22. package/dist/checkbox-group.d.ts +2 -1
  23. package/dist/checkbox-group.d.ts.map +1 -1
  24. package/dist/checkbox-group.js +6 -2
  25. package/dist/checkbox-group.js.map +1 -1
  26. package/dist/checkbox.d.ts +1 -0
  27. package/dist/checkbox.d.ts.map +1 -1
  28. package/dist/checkbox.js +1 -0
  29. package/dist/checkbox.js.map +1 -1
  30. package/dist/collection-window.d.ts +51 -0
  31. package/dist/collection-window.d.ts.map +1 -0
  32. package/dist/collection-window.js +111 -0
  33. package/dist/collection-window.js.map +1 -0
  34. package/dist/color-picker.d.ts +101 -0
  35. package/dist/color-picker.d.ts.map +1 -0
  36. package/dist/color-picker.js +503 -0
  37. package/dist/color-picker.js.map +1 -0
  38. package/dist/combobox.d.ts +2 -1
  39. package/dist/combobox.d.ts.map +1 -1
  40. package/dist/combobox.js +8 -4
  41. package/dist/combobox.js.map +1 -1
  42. package/dist/date-field.d.ts +7 -3
  43. package/dist/date-field.d.ts.map +1 -1
  44. package/dist/date-field.js +26 -14
  45. package/dist/date-field.js.map +1 -1
  46. package/dist/date-picker.d.ts +25 -2
  47. package/dist/date-picker.d.ts.map +1 -1
  48. package/dist/date-picker.js +119 -15
  49. package/dist/date-picker.js.map +1 -1
  50. package/dist/date-range-field.d.ts +47 -0
  51. package/dist/date-range-field.d.ts.map +1 -0
  52. package/dist/date-range-field.js +66 -0
  53. package/dist/date-range-field.js.map +1 -0
  54. package/dist/date-range-picker.d.ts +2 -1
  55. package/dist/date-range-picker.d.ts.map +1 -1
  56. package/dist/date-range-picker.js +14 -10
  57. package/dist/date-range-picker.js.map +1 -1
  58. package/dist/date-time-field.d.ts +7 -3
  59. package/dist/date-time-field.d.ts.map +1 -1
  60. package/dist/date-time-field.js +33 -19
  61. package/dist/date-time-field.js.map +1 -1
  62. package/dist/date-time-picker.d.ts +19 -2
  63. package/dist/date-time-picker.d.ts.map +1 -1
  64. package/dist/date-time-picker.js +21 -16
  65. package/dist/date-time-picker.js.map +1 -1
  66. package/dist/date-time-range-picker.d.ts +22 -2
  67. package/dist/date-time-range-picker.d.ts.map +1 -1
  68. package/dist/date-time-range-picker.js +49 -23
  69. package/dist/date-time-range-picker.js.map +1 -1
  70. package/dist/dialog.d.ts +2 -1
  71. package/dist/dialog.d.ts.map +1 -1
  72. package/dist/dialog.js +2 -1
  73. package/dist/dialog.js.map +1 -1
  74. package/dist/disclosure.d.ts +1 -0
  75. package/dist/disclosure.d.ts.map +1 -1
  76. package/dist/disclosure.js +1 -0
  77. package/dist/disclosure.js.map +1 -1
  78. package/dist/editable.d.ts +29 -0
  79. package/dist/editable.d.ts.map +1 -0
  80. package/dist/editable.js +34 -0
  81. package/dist/editable.js.map +1 -0
  82. package/dist/feed.d.ts +24 -4
  83. package/dist/feed.d.ts.map +1 -1
  84. package/dist/feed.js +121 -23
  85. package/dist/feed.js.map +1 -1
  86. package/dist/form.d.ts +135 -0
  87. package/dist/form.d.ts.map +1 -0
  88. package/dist/form.js +627 -0
  89. package/dist/form.js.map +1 -0
  90. package/dist/index.d.ts +21 -1
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/interaction.d.ts +2 -1
  93. package/dist/interaction.d.ts.map +1 -1
  94. package/dist/interaction.js +4 -0
  95. package/dist/interaction.js.map +1 -1
  96. package/dist/internal/composites/calendar.d.ts +2 -1
  97. package/dist/internal/composites/calendar.d.ts.map +1 -1
  98. package/dist/internal/composites/calendar.js +4 -0
  99. package/dist/internal/composites/calendar.js.map +1 -1
  100. package/dist/internal/composites/combobox.d.ts +2 -1
  101. package/dist/internal/composites/combobox.d.ts.map +1 -1
  102. package/dist/internal/composites/combobox.js +6 -2
  103. package/dist/internal/composites/combobox.js.map +1 -1
  104. package/dist/internal/composites/grid-control.d.ts +2 -1
  105. package/dist/internal/composites/grid-control.d.ts.map +1 -1
  106. package/dist/internal/composites/grid-control.js +5 -1
  107. package/dist/internal/composites/grid-control.js.map +1 -1
  108. package/dist/internal/composites/linear-action.d.ts +2 -1
  109. package/dist/internal/composites/linear-action.d.ts.map +1 -1
  110. package/dist/internal/composites/linear-action.js +4 -0
  111. package/dist/internal/composites/linear-action.js.map +1 -1
  112. package/dist/internal/composites/listbox.d.ts +3 -1
  113. package/dist/internal/composites/listbox.d.ts.map +1 -1
  114. package/dist/internal/composites/listbox.js +12 -4
  115. package/dist/internal/composites/listbox.js.map +1 -1
  116. package/dist/internal/composites/menu.d.ts +2 -1
  117. package/dist/internal/composites/menu.d.ts.map +1 -1
  118. package/dist/internal/composites/menu.js +5 -1
  119. package/dist/internal/composites/menu.js.map +1 -1
  120. package/dist/internal/composites/popup.d.ts +2 -1
  121. package/dist/internal/composites/popup.d.ts.map +1 -1
  122. package/dist/internal/composites/popup.js +3 -1
  123. package/dist/internal/composites/popup.js.map +1 -1
  124. package/dist/internal/composites/slider.d.ts +2 -1
  125. package/dist/internal/composites/slider.d.ts.map +1 -1
  126. package/dist/internal/composites/slider.js +4 -0
  127. package/dist/internal/composites/slider.js.map +1 -1
  128. package/dist/internal/composites/tree-grid.d.ts +4 -2
  129. package/dist/internal/composites/tree-grid.d.ts.map +1 -1
  130. package/dist/internal/composites/tree-grid.js +7 -0
  131. package/dist/internal/composites/tree-grid.js.map +1 -1
  132. package/dist/internal/composites/tree-view.d.ts +4 -1
  133. package/dist/internal/composites/tree-view.d.ts.map +1 -1
  134. package/dist/internal/composites/tree-view.js +28 -7
  135. package/dist/internal/composites/tree-view.js.map +1 -1
  136. package/dist/internal/editing/text.d.ts +4 -2
  137. package/dist/internal/editing/text.d.ts.map +1 -1
  138. package/dist/internal/editing/text.js +10 -0
  139. package/dist/internal/editing/text.js.map +1 -1
  140. package/dist/internal/runtime/revision.d.ts +2 -1
  141. package/dist/internal/runtime/revision.d.ts.map +1 -1
  142. package/dist/internal/runtime/revision.js +4 -0
  143. package/dist/internal/runtime/revision.js.map +1 -1
  144. package/dist/internal/state/checked.d.ts +2 -1
  145. package/dist/internal/state/checked.d.ts.map +1 -1
  146. package/dist/internal/state/checked.js +6 -2
  147. package/dist/internal/state/checked.js.map +1 -1
  148. package/dist/internal/state/open-state.d.ts +2 -1
  149. package/dist/internal/state/open-state.d.ts.map +1 -1
  150. package/dist/internal/state/open-state.js +5 -1
  151. package/dist/internal/state/open-state.js.map +1 -1
  152. package/dist/layer-stack.d.ts +47 -0
  153. package/dist/layer-stack.d.ts.map +1 -0
  154. package/dist/layer-stack.js +115 -0
  155. package/dist/layer-stack.js.map +1 -0
  156. package/dist/listbox.d.ts +1 -0
  157. package/dist/listbox.d.ts.map +1 -1
  158. package/dist/listbox.js +1 -0
  159. package/dist/listbox.js.map +1 -1
  160. package/dist/menu-button.d.ts +2 -0
  161. package/dist/menu-button.d.ts.map +1 -1
  162. package/dist/menu-button.js +2 -0
  163. package/dist/menu-button.js.map +1 -1
  164. package/dist/menu.d.ts +3 -1
  165. package/dist/menu.d.ts.map +1 -1
  166. package/dist/menu.js +7 -2
  167. package/dist/menu.js.map +1 -1
  168. package/dist/menubar.d.ts +2 -0
  169. package/dist/menubar.d.ts.map +1 -1
  170. package/dist/menubar.js +2 -0
  171. package/dist/menubar.js.map +1 -1
  172. package/dist/month-picker.d.ts +5 -0
  173. package/dist/month-picker.d.ts.map +1 -0
  174. package/dist/month-picker.js +4 -0
  175. package/dist/month-picker.js.map +1 -0
  176. package/dist/month-range-picker.d.ts +6 -0
  177. package/dist/month-range-picker.d.ts.map +1 -0
  178. package/dist/month-range-picker.js +5 -0
  179. package/dist/month-range-picker.js.map +1 -0
  180. package/dist/multi-thumb-slider.d.ts +2 -1
  181. package/dist/multi-thumb-slider.d.ts.map +1 -1
  182. package/dist/multi-thumb-slider.js +5 -1
  183. package/dist/multi-thumb-slider.js.map +1 -1
  184. package/dist/navigation-menu.d.ts +6 -0
  185. package/dist/navigation-menu.d.ts.map +1 -0
  186. package/dist/navigation-menu.js +5 -0
  187. package/dist/navigation-menu.js.map +1 -0
  188. package/dist/number-field.d.ts +4 -2
  189. package/dist/number-field.d.ts.map +1 -1
  190. package/dist/number-field.js +10 -3
  191. package/dist/number-field.js.map +1 -1
  192. package/dist/pagination.d.ts +4 -2
  193. package/dist/pagination.d.ts.map +1 -1
  194. package/dist/pagination.js +13 -6
  195. package/dist/pagination.js.map +1 -1
  196. package/dist/pin-input.d.ts +3 -1
  197. package/dist/pin-input.d.ts.map +1 -1
  198. package/dist/pin-input.js +5 -1
  199. package/dist/pin-input.js.map +1 -1
  200. package/dist/popover.d.ts +17 -0
  201. package/dist/popover.d.ts.map +1 -0
  202. package/dist/popover.js +6 -0
  203. package/dist/popover.js.map +1 -0
  204. package/dist/quantity-field.d.ts +2 -1
  205. package/dist/quantity-field.d.ts.map +1 -1
  206. package/dist/quantity-field.js +15 -11
  207. package/dist/quantity-field.js.map +1 -1
  208. package/dist/radio-group.d.ts +2 -1
  209. package/dist/radio-group.d.ts.map +1 -1
  210. package/dist/radio-group.js +4 -0
  211. package/dist/radio-group.js.map +1 -1
  212. package/dist/range-calendar.d.ts +6 -0
  213. package/dist/range-calendar.d.ts.map +1 -0
  214. package/dist/range-calendar.js +5 -0
  215. package/dist/range-calendar.js.map +1 -0
  216. package/dist/rating.d.ts +2 -1
  217. package/dist/rating.d.ts.map +1 -1
  218. package/dist/rating.js +6 -2
  219. package/dist/rating.js.map +1 -1
  220. package/dist/reorder.d.ts +47 -0
  221. package/dist/reorder.d.ts.map +1 -0
  222. package/dist/reorder.js +110 -0
  223. package/dist/reorder.js.map +1 -0
  224. package/dist/revision.d.ts +1 -0
  225. package/dist/revision.d.ts.map +1 -1
  226. package/dist/revision.js +1 -0
  227. package/dist/revision.js.map +1 -1
  228. package/dist/select.d.ts +2 -1
  229. package/dist/select.d.ts.map +1 -1
  230. package/dist/select.js +5 -1
  231. package/dist/select.js.map +1 -1
  232. package/dist/shared.d.ts +1 -0
  233. package/dist/shared.d.ts.map +1 -1
  234. package/dist/shared.js.map +1 -1
  235. package/dist/slider.d.ts +1 -0
  236. package/dist/slider.d.ts.map +1 -1
  237. package/dist/slider.js +1 -0
  238. package/dist/slider.js.map +1 -1
  239. package/dist/spin-button.d.ts +3 -1
  240. package/dist/spin-button.d.ts.map +1 -1
  241. package/dist/spin-button.js +7 -3
  242. package/dist/spin-button.js.map +1 -1
  243. package/dist/stepper.d.ts +2 -1
  244. package/dist/stepper.d.ts.map +1 -1
  245. package/dist/stepper.js +4 -0
  246. package/dist/stepper.js.map +1 -1
  247. package/dist/structures/grid.d.ts +3 -1
  248. package/dist/structures/grid.d.ts.map +1 -1
  249. package/dist/structures/grid.js +5 -0
  250. package/dist/structures/grid.js.map +1 -1
  251. package/dist/structures/range.d.ts +4 -2
  252. package/dist/structures/range.d.ts.map +1 -1
  253. package/dist/structures/range.js +8 -1
  254. package/dist/structures/range.js.map +1 -1
  255. package/dist/structures/sequence.d.ts +4 -2
  256. package/dist/structures/sequence.d.ts.map +1 -1
  257. package/dist/structures/sequence.js +4 -0
  258. package/dist/structures/sequence.js.map +1 -1
  259. package/dist/structures/tree.d.ts +2 -1
  260. package/dist/structures/tree.d.ts.map +1 -1
  261. package/dist/structures/tree.js +4 -0
  262. package/dist/structures/tree.js.map +1 -1
  263. package/dist/switch.d.ts +2 -1
  264. package/dist/switch.d.ts.map +1 -1
  265. package/dist/switch.js +6 -2
  266. package/dist/switch.js.map +1 -1
  267. package/dist/tabs.d.ts +2 -1
  268. package/dist/tabs.d.ts.map +1 -1
  269. package/dist/tabs.js +4 -0
  270. package/dist/tabs.js.map +1 -1
  271. package/dist/tags-input.d.ts +3 -1
  272. package/dist/tags-input.d.ts.map +1 -1
  273. package/dist/tags-input.js +5 -1
  274. package/dist/tags-input.js.map +1 -1
  275. package/dist/text.d.ts +2 -0
  276. package/dist/text.d.ts.map +1 -1
  277. package/dist/text.js +2 -0
  278. package/dist/text.js.map +1 -1
  279. package/dist/time-field.d.ts +4 -2
  280. package/dist/time-field.d.ts.map +1 -1
  281. package/dist/time-field.js +20 -11
  282. package/dist/time-field.js.map +1 -1
  283. package/dist/time-range-field.d.ts +53 -0
  284. package/dist/time-range-field.d.ts.map +1 -0
  285. package/dist/time-range-field.js +75 -0
  286. package/dist/time-range-field.js.map +1 -0
  287. package/dist/timer.d.ts +37 -0
  288. package/dist/timer.d.ts.map +1 -0
  289. package/dist/timer.js +84 -0
  290. package/dist/timer.js.map +1 -0
  291. package/dist/toast.d.ts +56 -0
  292. package/dist/toast.d.ts.map +1 -0
  293. package/dist/toast.js +87 -0
  294. package/dist/toast.js.map +1 -0
  295. package/dist/toggle-button.d.ts +2 -1
  296. package/dist/toggle-button.d.ts.map +1 -1
  297. package/dist/toggle-button.js +6 -2
  298. package/dist/toggle-button.js.map +1 -1
  299. package/dist/toggle-group.d.ts +25 -0
  300. package/dist/toggle-group.d.ts.map +1 -0
  301. package/dist/toggle-group.js +30 -0
  302. package/dist/toggle-group.js.map +1 -0
  303. package/dist/toolbar.d.ts +1 -0
  304. package/dist/toolbar.d.ts.map +1 -1
  305. package/dist/toolbar.js +1 -0
  306. package/dist/toolbar.js.map +1 -1
  307. package/dist/tooltip.d.ts +1 -0
  308. package/dist/tooltip.d.ts.map +1 -1
  309. package/dist/tooltip.js +1 -0
  310. package/dist/tooltip.js.map +1 -1
  311. package/dist/tree-grid.d.ts +4 -1
  312. package/dist/tree-grid.d.ts.map +1 -1
  313. package/dist/tree-grid.js +12 -6
  314. package/dist/tree-grid.js.map +1 -1
  315. package/dist/tree-view.d.ts +2 -1
  316. package/dist/tree-view.d.ts.map +1 -1
  317. package/dist/tree-view.js +1 -0
  318. package/dist/tree-view.js.map +1 -1
  319. package/dist/units.d.ts +10 -5
  320. package/dist/units.d.ts.map +1 -1
  321. package/dist/units.js +19 -3
  322. package/dist/units.js.map +1 -1
  323. package/dist/window-splitter.d.ts +1 -0
  324. package/dist/window-splitter.d.ts.map +1 -1
  325. package/dist/window-splitter.js +1 -0
  326. package/dist/window-splitter.js.map +1 -1
  327. package/dist/year-picker.d.ts +10 -0
  328. package/dist/year-picker.d.ts.map +1 -0
  329. package/dist/year-picker.js +27 -0
  330. package/dist/year-picker.js.map +1 -0
  331. package/dist/year-range-picker.d.ts +6 -0
  332. package/dist/year-range-picker.d.ts.map +1 -0
  333. package/dist/year-range-picker.js +5 -0
  334. package/dist/year-range-picker.js.map +1 -0
  335. package/package.json +100 -2
package/dist/feed.d.ts CHANGED
@@ -1,10 +1,20 @@
1
- import type { Result, StableID } from './shared.js';
2
- import type { Sequence } from './structures/sequence.js';
1
+ import { type CollectionWindowDirection } from './collection-window.js';
3
2
  import { type CursorState } from './internal/state/cursor.js';
4
- export type FeedDirection = 'before' | 'after';
3
+ import type { Sequence } from './structures/sequence.js';
4
+ import type { Result, StableID } from './shared.js';
5
+ export type FeedDirection = CollectionWindowDirection;
6
+ export interface FeedWindowMetadata {
7
+ readonly requestGeneration?: number;
8
+ readonly start?: number;
9
+ readonly total?: number | null;
10
+ }
5
11
  export interface FeedState<ID extends StableID = StableID> {
6
12
  readonly cursor: CursorState<ID>;
7
13
  readonly revision: number;
14
+ readonly requestGeneration: number;
15
+ readonly start: number;
16
+ readonly size: number;
17
+ readonly total: number | null;
8
18
  readonly pending: FeedDirection | null;
9
19
  }
10
20
  export type FeedEvent<ID extends StableID = StableID> = 'next' | 'previous' | 'request-before' | 'request-after' | 'clear-request' | {
@@ -19,11 +29,21 @@ export type FeedCommand<ID extends StableID = StableID> = {
19
29
  readonly direction: FeedDirection;
20
30
  readonly anchor: ID | null;
21
31
  readonly revision: number;
32
+ readonly requestGeneration: number;
22
33
  };
23
34
  export interface FeedUpdate<ID extends StableID = StableID> {
24
35
  readonly state: FeedState<ID>;
25
36
  readonly commands: readonly FeedCommand<ID>[];
26
37
  }
27
- export declare function createFeedState<ID extends StableID>(items: Sequence<ID>, current?: ID | null, revision?: number, pending?: FeedDirection | null): Result<FeedState<ID>>;
38
+ export interface FeedWindowReplacement<ID extends StableID = StableID> {
39
+ readonly revision: number;
40
+ readonly requestGeneration?: number;
41
+ readonly start?: number;
42
+ readonly total?: number | null;
43
+ readonly current?: ID | null;
44
+ }
45
+ export declare function createFeedState<ID extends StableID>(items: Sequence<ID>, current?: ID | null, revision?: number, pending?: FeedDirection | null, metadata?: FeedWindowMetadata): FeedState<ID>;
46
+ export declare function tryCreateFeedState<ID extends StableID>(items: Sequence<ID>, current?: ID | null, revision?: number, pending?: FeedDirection | null, metadata?: FeedWindowMetadata): Result<FeedState<ID>>;
28
47
  export declare function applyFeedEvent<ID extends StableID>(items: Sequence<ID>, state: FeedState<ID>, event: FeedEvent<ID>): Result<FeedUpdate<ID>>;
48
+ export declare function synchronizeFeedWindow<ID extends StableID>(items: Sequence<ID>, state: FeedState<ID>, replacement: FeedWindowReplacement<ID>): Result<FeedState<ID>>;
29
49
  //# sourceMappingURL=feed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAAC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAAiI,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChU,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAAC,MAAM,WAAW,SAAS,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAA;CAAE;AAAC,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,MAAM,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AAAC,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAAC,MAAM,WAAW,UAAU,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAAI,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE;AACxvB,wBAAgB,eAAe,CAAC,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,GAAE,EAAE,GAAG,IAAW,EAAE,QAAQ,SAAI,EAAE,OAAO,GAAE,aAAa,GAAG,IAAW,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAA0lB;AACzwB,wBAAgB,cAAc,CAAC,EAAE,SAAS,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAA2yC"}
1
+ {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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"}
package/dist/feed.js CHANGED
@@ -1,26 +1,124 @@
1
- import { fail, ok } from './internal/kernel/foundation.js';
2
- import { createMachineUpdate } from './internal/kernel/machine.js';
1
+ import { applyCollectionWindowEvent, createCollectionWindowState, synchronizeCollectionWindow, tryCreateCollectionWindowState, } from './collection-window.js';
3
2
  import { createCursorState } from './internal/state/cursor.js';
4
- export function createFeedState(items, current = null, revision = 0, pending = null) { if (current !== null && !items.contains(current))
5
- return fail('construction', 'feed-cursor-outside-window', 'Feed cursor must identify an item in the current window.'); if (!Number.isSafeInteger(revision) || revision < 0)
6
- return fail('construction', 'invalid-feed-revision', 'Feed revision must be a non-negative safe integer.'); if (pending !== null && pending !== 'before' && pending !== 'after')
7
- return fail('construction', 'invalid-feed-pending-direction', 'Feed pending direction must be before or after.'); return ok(Object.freeze({ cursor: createCursorState(current), revision, pending })); }
8
- export function applyFeedEvent(items, state, event) { const valid = createFeedState(items, state.cursor.current, state.revision, state.pending); if (!valid.ok)
9
- return { ok: false, error: { ...valid.error, class: 'transition-rejection' } }; if (event === 'clear-request')
10
- return createMachineUpdate(Object.freeze({ ...state, pending: null })); if (event === 'request-before' || event === 'request-after') {
11
- if (state.pending !== null)
12
- return createMachineUpdate(state);
13
- const direction = event === 'request-before' ? 'before' : 'after';
14
- return createMachineUpdate(Object.freeze({ ...state, pending: direction }), [{ type: 'request-window', direction, anchor: state.cursor.current, revision: state.revision }]);
15
- } let id; if (typeof event === 'object') {
16
- if (!items.contains(event.id))
17
- return fail('transition-rejection', 'feed-target-unavailable', 'Direct feed focus requires an item in the current window.');
18
- id = event.id;
3
+ import { createMachineUpdate } from './internal/kernel/machine.js';
4
+ import { fail, ok } from './internal/kernel/foundation.js';
5
+ import { unwrap } from './result.js';
6
+ export function createFeedState(items, current = null, revision = 0, pending = null, metadata = {}) {
7
+ return unwrap(tryCreateFeedState(items, current, revision, pending, metadata));
8
+ }
9
+ export function tryCreateFeedState(items, current = null, revision = 0, pending = null, metadata = {}) {
10
+ if (current !== null && !items.contains(current)) {
11
+ return fail('construction', 'feed-cursor-outside-window', 'Feed cursor must identify an item in the current window.');
12
+ }
13
+ const requestGeneration = metadata.requestGeneration ?? (pending === null ? 0 : 1);
14
+ const collectionWindow = tryCreateCollectionWindowState({
15
+ revision,
16
+ requestGeneration,
17
+ start: metadata.start ?? 0,
18
+ size: items.size,
19
+ total: metadata.total ?? null,
20
+ pending: pending === null ? null : {
21
+ generation: requestGeneration,
22
+ direction: pending,
23
+ anchor: current,
24
+ revision,
25
+ },
26
+ });
27
+ if (!collectionWindow.ok)
28
+ return collectionWindow;
29
+ return ok(fromWindow(createCursorState(current), collectionWindow.value));
30
+ }
31
+ export function applyFeedEvent(items, state, event) {
32
+ const valid = tryCreateFeedState(items, state.cursor.current, state.revision, state.pending, { requestGeneration: state.requestGeneration, start: state.start, total: state.total });
33
+ if (!valid.ok)
34
+ return transitionFailure(valid);
35
+ if (state.size !== items.size) {
36
+ return fail('transition-rejection', 'feed-window-size-mismatch', 'Feed state size must match the current item window.', { stateSize: state.size, itemSize: items.size });
37
+ }
38
+ if (event === 'clear-request' || event === 'request-before' || event === 'request-after') {
39
+ const updated = applyCollectionWindowEvent(toWindow(state), event === 'clear-request'
40
+ ? { type: 'clear-request' }
41
+ : {
42
+ type: 'request-window',
43
+ direction: event === 'request-before' ? 'before' : 'after',
44
+ anchor: state.cursor.current,
45
+ });
46
+ if (!updated.ok)
47
+ return updated;
48
+ const commands = updated.value.commands.map(({ request }) => ({
49
+ type: 'request-window',
50
+ direction: request.direction,
51
+ anchor: request.anchor,
52
+ revision: request.revision,
53
+ requestGeneration: request.generation,
54
+ }));
55
+ return createMachineUpdate(fromWindow(state.cursor, updated.value.state), commands);
56
+ }
57
+ let id;
58
+ if (typeof event === 'object') {
59
+ if (!items.contains(event.id)) {
60
+ return fail('transition-rejection', 'feed-target-unavailable', 'Direct feed focus requires an item in the current window.');
61
+ }
62
+ id = event.id;
63
+ }
64
+ else if (state.cursor.current === null) {
65
+ id = items.at(event === 'next' ? 0 : items.size - 1);
66
+ }
67
+ else {
68
+ const moved = items.move(state.cursor.current, event === 'next' ? 1 : -1, 'stop');
69
+ id = moved.kind === 'found' ? moved.id : state.cursor.current;
70
+ }
71
+ return id === null || id === state.cursor.current
72
+ ? createMachineUpdate(state)
73
+ : createMachineUpdate(Object.freeze({ ...state, cursor: createCursorState(id) }), [{ type: 'focus', id }]);
74
+ }
75
+ export function synchronizeFeedWindow(items, state, replacement) {
76
+ const synchronized = synchronizeCollectionWindow(toWindow(state), {
77
+ revision: replacement.revision,
78
+ ...(replacement.requestGeneration === undefined
79
+ ? {}
80
+ : { requestGeneration: replacement.requestGeneration }),
81
+ start: replacement.start ?? state.start,
82
+ size: items.size,
83
+ total: replacement.total === undefined ? state.total : replacement.total,
84
+ });
85
+ if (!synchronized.ok)
86
+ return synchronized;
87
+ const current = replacement.current ?? state.cursor.current ?? items.at(0);
88
+ if (current !== null && !items.contains(current)) {
89
+ return fail('transition-rejection', 'feed-cursor-outside-window', 'Replacement cursor must identify an item in the new feed window.');
90
+ }
91
+ return ok(fromWindow(createCursorState(current), synchronized.value));
92
+ }
93
+ function toWindow(state) {
94
+ return createCollectionWindowState({
95
+ revision: state.revision,
96
+ requestGeneration: state.requestGeneration,
97
+ start: state.start,
98
+ size: state.size,
99
+ total: state.total,
100
+ pending: state.pending === null ? null : {
101
+ generation: state.requestGeneration,
102
+ direction: state.pending,
103
+ anchor: state.cursor.current,
104
+ revision: state.revision,
105
+ },
106
+ });
107
+ }
108
+ function fromWindow(cursor, collectionWindow) {
109
+ return Object.freeze({
110
+ cursor,
111
+ revision: collectionWindow.revision,
112
+ requestGeneration: collectionWindow.requestGeneration,
113
+ start: collectionWindow.start,
114
+ size: collectionWindow.size,
115
+ total: collectionWindow.total,
116
+ pending: collectionWindow.pending?.direction ?? null,
117
+ });
118
+ }
119
+ function transitionFailure(result) {
120
+ if (result.ok)
121
+ throw new Error('Expected a failed result.');
122
+ return fail('transition-rejection', result.error.code, result.error.message, result.error.details);
19
123
  }
20
- else if (state.cursor.current === null)
21
- id = items.at(event === 'next' ? 0 : items.size - 1);
22
- else {
23
- const moved = items.move(state.cursor.current, event === 'next' ? 1 : -1, 'stop');
24
- id = moved.kind === 'found' ? moved.id : state.cursor.current;
25
- } return id === null || id === state.cursor.current ? createMachineUpdate(state) : createMachineUpdate(Object.freeze({ ...state, cursor: createCursorState(id) }), [{ type: 'focus', id }]); }
26
124
  //# sourceMappingURL=feed.js.map
package/dist/feed.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,8BAA8B,GAG/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAoB,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAqDrC,MAAM,UAAU,eAAe,CAC7B,KAAmB,EACnB,OAAO,GAAc,IAAI,EACzB,QAAQ,GAAG,CAAC,EACZ,OAAO,GAAyB,IAAI,EACpC,QAAQ,GAAuB,EAAE;IAEjC,OAAO,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAmB,EACnB,OAAO,GAAc,IAAI,EACzB,QAAQ,GAAG,CAAC,EACZ,OAAO,GAAyB,IAAI,EACpC,QAAQ,GAAuB,EAAE;IAEjC,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,cAAc,EAAE,4BAA4B,EAAE,0DAA0D,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,gBAAgB,GAAG,8BAA8B,CAAK;QAC1D,QAAQ;QACR,iBAAiB;QACjB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;QAC7B,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACjC,UAAU,EAAE,iBAAiB;YAC7B,SAAS,EAAE,OAAO;YAClB,MAAM,EAAE,OAAO;YACf,QAAQ;SACT;KACF,CAAC,CAAC;IACH,IAAI,CAAC,gBAAgB,CAAC,EAAE;QAAE,OAAO,gBAAgB,CAAC;IAClD,OAAO,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAmB,EACnB,KAAoB,EACpB,KAAoB;IAEpB,MAAM,KAAK,GAAG,kBAAkB,CAC9B,KAAK,EACL,KAAK,CAAC,MAAM,CAAC,OAAO,EACpB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,EACb,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CACvF,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,CACT,sBAAsB,EACtB,2BAA2B,EAC3B,qDAAqD,EACrD,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,gBAAgB,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;QACzF,MAAM,OAAO,GAAG,0BAA0B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,eAAe;YACnF,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE;YAC3B,CAAC,CAAC;gBACE,IAAI,EAAE,gBAAgB;gBACtB,SAAS,EAAE,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;gBAC1D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;aAC7B,CAAC,CAAC;QACP,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC;QAChC,MAAM,QAAQ,GAAsB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/E,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,iBAAiB,EAAE,OAAO,CAAC,UAAU;SACtC,CAAC,CAAC,CAAC;QACJ,OAAO,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,EAAa,CAAC;IAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,2DAA2D,CAAC,CAAC;QAC9H,CAAC;QACD,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAChB,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO;QAC/C,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,mBAAmB,CACjB,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,EAC1D,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CACxB,CAAC;AACR,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAmB,EACnB,KAAoB,EACpB,WAAsC;IAEtC,MAAM,YAAY,GAAG,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAChE,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,GAAG,CAAC,WAAW,CAAC,iBAAiB,KAAK,SAAS;YAC7C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC;QACzD,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK;QACvC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,WAAW,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK;KACzE,CAAC,CAAC;IACH,IAAI,CAAC,YAAY,CAAC,EAAE;QAAE,OAAO,YAAY,CAAC;IAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,kEAAkE,CAAC,CAAC;IACxI,CAAC;IACD,OAAO,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,QAAQ,CACf,KAAoB;IAEpB,OAAO,2BAA2B,CAAC;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,UAAU,EAAE,KAAK,CAAC,iBAAiB;YACnC,SAAS,EAAE,KAAK,CAAC,OAAO;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CACjB,MAAuB,EACvB,gBAA2C;IAE3C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;QACnC,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB;QACrD,KAAK,EAAE,gBAAgB,CAAC,KAAK;QAC7B,IAAI,EAAE,gBAAgB,CAAC,IAAI;QAC3B,KAAK,EAAE,gBAAgB,CAAC,KAAK;QAC7B,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI;KACrD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAI,MAAiB;IAC7C,IAAI,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrG,CAAC"}
package/dist/form.d.ts ADDED
@@ -0,0 +1,135 @@
1
+ import type { Result, StableID } from './shared.js';
2
+ export type FormIssueSource = 'native' | 'field' | 'form' | 'validate' | 'schema' | 'server';
3
+ export type FormPathSegment = string | number;
4
+ export type FormFieldPath = string | readonly FormPathSegment[];
5
+ export type FormRelativePath = FormPathSegment | readonly FormPathSegment[];
6
+ export interface FormValueEntry<Value = unknown> {
7
+ readonly path: FormFieldPath;
8
+ readonly value: Value;
9
+ }
10
+ export type FormValues<Shape extends object = Record<string, unknown>> = Readonly<Shape>;
11
+ export type FormValidationStatus = 'idle' | 'validating' | 'valid' | 'invalid';
12
+ export type FormSubmissionStatus = 'idle' | 'submitting' | 'succeeded' | 'failed';
13
+ export type FormValidationTrigger = 'input' | 'blur' | 'submit';
14
+ export type FormValidationIntent = 'interaction' | 'submission';
15
+ export interface FormIssue<ID extends StableID = StableID> {
16
+ readonly id: StableID;
17
+ readonly message: string;
18
+ readonly source: FormIssueSource;
19
+ readonly fieldId?: ID;
20
+ }
21
+ export interface FormFieldInput<ID extends StableID = StableID> {
22
+ readonly id: ID;
23
+ readonly name?: string | null;
24
+ readonly touched?: boolean;
25
+ readonly dirty?: boolean;
26
+ readonly valid?: boolean;
27
+ readonly issues?: readonly FormIssue<ID>[];
28
+ }
29
+ export interface FormFieldState<ID extends StableID = StableID> {
30
+ readonly id: ID;
31
+ readonly name: string | null;
32
+ readonly touched: boolean;
33
+ readonly dirty: boolean;
34
+ readonly valid: boolean;
35
+ readonly issues: readonly FormIssue<ID>[];
36
+ }
37
+ export interface FormState<ID extends StableID = StableID> {
38
+ readonly validationGeneration: number;
39
+ readonly validationStatus: FormValidationStatus;
40
+ readonly validationTrigger: FormValidationTrigger | null;
41
+ readonly validationIntent: FormValidationIntent | null;
42
+ readonly submissionGeneration: number;
43
+ readonly submissionStatus: FormSubmissionStatus;
44
+ readonly submitCount: number;
45
+ readonly submitted: boolean;
46
+ readonly touched: boolean;
47
+ readonly dirty: boolean;
48
+ readonly valid: boolean;
49
+ readonly fields: readonly FormFieldState<ID>[];
50
+ readonly issues: readonly FormIssue<ID>[];
51
+ }
52
+ export type FormEvent<ID extends StableID = StableID> = {
53
+ readonly type: 'register-field';
54
+ readonly field: FormFieldInput<ID>;
55
+ } | {
56
+ readonly type: 'unregister-field';
57
+ readonly id: ID;
58
+ } | {
59
+ readonly type: 'update-field';
60
+ readonly id: ID;
61
+ readonly touched?: boolean;
62
+ readonly dirty?: boolean;
63
+ readonly valid?: boolean;
64
+ readonly issues?: readonly FormIssue<ID>[];
65
+ } | {
66
+ readonly type: 'reorder-fields';
67
+ readonly ids: readonly ID[];
68
+ } | {
69
+ readonly type: 'replace-issues';
70
+ readonly source: FormIssueSource;
71
+ readonly issues: readonly FormIssue<ID>[];
72
+ readonly generation?: number;
73
+ } | {
74
+ readonly type: 'validation-invalidated';
75
+ } | {
76
+ readonly type: 'validation-started';
77
+ readonly trigger: FormValidationTrigger;
78
+ readonly intent: FormValidationIntent;
79
+ } | {
80
+ readonly type: 'validation-completed';
81
+ readonly trigger: FormValidationTrigger;
82
+ readonly intent: FormValidationIntent;
83
+ readonly generation: number;
84
+ } | {
85
+ readonly type: 'submit-started';
86
+ readonly generation: number;
87
+ } | {
88
+ readonly type: 'submit-succeeded';
89
+ readonly generation: number;
90
+ } | {
91
+ readonly type: 'submit-failed';
92
+ readonly generation: number;
93
+ readonly issues?: readonly FormIssue<ID>[];
94
+ } | 'reset';
95
+ export type FormCommand<ID extends StableID = StableID> = {
96
+ readonly type: 'focus-field';
97
+ readonly id: ID;
98
+ } | {
99
+ readonly type: 'announce-summary';
100
+ readonly issueIds: readonly StableID[];
101
+ } | {
102
+ readonly type: 'submit-requested';
103
+ readonly generation: number;
104
+ } | {
105
+ readonly type: 'reset-field';
106
+ readonly id: ID;
107
+ };
108
+ export interface FormUpdate<ID extends StableID = StableID> {
109
+ readonly state: FormState<ID>;
110
+ readonly commands: readonly FormCommand<ID>[];
111
+ }
112
+ export interface FormStateInput<ID extends StableID = StableID> {
113
+ readonly validationGeneration?: number;
114
+ readonly validationStatus?: FormValidationStatus;
115
+ readonly validationTrigger?: FormValidationTrigger | null;
116
+ readonly validationIntent?: FormValidationIntent | null;
117
+ readonly submissionGeneration?: number;
118
+ readonly submissionStatus?: FormSubmissionStatus;
119
+ readonly submitCount?: number;
120
+ readonly submitted?: boolean;
121
+ readonly fields?: readonly FormFieldInput<ID>[];
122
+ readonly issues?: readonly FormIssue<ID>[];
123
+ }
124
+ export declare function createFormFieldPath(path: FormFieldPath): readonly FormPathSegment[];
125
+ export declare function tryCreateFormFieldPath(path: FormFieldPath): Result<readonly FormPathSegment[]>;
126
+ export declare function createFormRelativePath(path: FormRelativePath): readonly FormPathSegment[];
127
+ export declare function tryCreateFormRelativePath(path: FormRelativePath): Result<readonly FormPathSegment[]>;
128
+ export declare function appendFormFieldPath(base: FormFieldPath, relative: FormRelativePath): readonly FormPathSegment[];
129
+ export declare function encodeFormFieldPath(path: FormFieldPath): string;
130
+ export declare function createFormValues<Value = unknown>(entries: readonly FormValueEntry<Value>[]): FormValues;
131
+ export declare function tryCreateFormValues<Value = unknown>(entries: readonly FormValueEntry<Value>[]): Result<FormValues>;
132
+ export declare function createFormState<ID extends StableID = StableID>(input?: FormStateInput<ID>): FormState<ID>;
133
+ export declare function tryCreateFormState<ID extends StableID = StableID>(input?: FormStateInput<ID>): Result<FormState<ID>>;
134
+ export declare function applyFormEvent<ID extends StableID>(state: FormState<ID>, event: FormEvent<ID>): Result<FormUpdate<ID>>;
135
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"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"}