foldkit-primitives 0.15.3 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/dist/device/fullscreen.d.ts +28 -0
  2. package/dist/device/fullscreen.d.ts.map +1 -0
  3. package/dist/device/fullscreen.js +69 -0
  4. package/dist/device/fullscreen.js.map +1 -0
  5. package/dist/device/geolocation.d.ts +56 -0
  6. package/dist/device/geolocation.d.ts.map +1 -0
  7. package/dist/device/geolocation.js +87 -0
  8. package/dist/device/geolocation.js.map +1 -0
  9. package/dist/device/index.d.ts +5 -0
  10. package/dist/device/index.js +6 -0
  11. package/dist/device/media-devices.d.ts +88 -0
  12. package/dist/device/media-devices.d.ts.map +1 -0
  13. package/dist/device/media-devices.js +117 -0
  14. package/dist/device/media-devices.js.map +1 -0
  15. package/dist/device/media-stream.d.ts +93 -0
  16. package/dist/device/media-stream.d.ts.map +1 -0
  17. package/dist/device/media-stream.js +106 -0
  18. package/dist/device/media-stream.js.map +1 -0
  19. package/dist/device/permissions.d.ts +106 -0
  20. package/dist/device/permissions.d.ts.map +1 -0
  21. package/dist/device/permissions.js +143 -0
  22. package/dist/device/permissions.js.map +1 -0
  23. package/dist/dom/autofocus.d.ts +15 -0
  24. package/dist/dom/autofocus.d.ts.map +1 -0
  25. package/dist/dom/autofocus.js +22 -0
  26. package/dist/dom/autofocus.js.map +1 -0
  27. package/dist/dom/clipboard.d.ts +30 -0
  28. package/dist/dom/clipboard.d.ts.map +1 -0
  29. package/dist/dom/clipboard.js +50 -0
  30. package/dist/dom/clipboard.js.map +1 -0
  31. package/dist/dom/editable-text.d.ts +72 -0
  32. package/dist/dom/editable-text.d.ts.map +1 -0
  33. package/dist/dom/editable-text.js +232 -0
  34. package/dist/dom/editable-text.js.map +1 -0
  35. package/dist/dom/fluid-hover.d.ts +93 -0
  36. package/dist/dom/fluid-hover.d.ts.map +1 -0
  37. package/dist/dom/fluid-hover.js +294 -0
  38. package/dist/dom/fluid-hover.js.map +1 -0
  39. package/dist/dom/focus-scope.d.ts +21 -0
  40. package/dist/dom/focus-scope.d.ts.map +1 -0
  41. package/dist/dom/focus-scope.js +93 -0
  42. package/dist/dom/focus-scope.js.map +1 -0
  43. package/dist/dom/follow-tab-stop.d.ts +11 -0
  44. package/dist/dom/follow-tab-stop.d.ts.map +1 -0
  45. package/dist/dom/follow-tab-stop.js +54 -0
  46. package/dist/dom/follow-tab-stop.js.map +1 -0
  47. package/dist/dom/image-decode.d.ts +27 -0
  48. package/dist/dom/image-decode.d.ts.map +1 -0
  49. package/dist/dom/image-decode.js +50 -0
  50. package/dist/dom/image-decode.js.map +1 -0
  51. package/dist/dom/index.d.ts +24 -0
  52. package/dist/dom/index.js +25 -0
  53. package/dist/dom/input-mask.d.ts +35 -0
  54. package/dist/dom/input-mask.d.ts.map +1 -0
  55. package/dist/dom/input-mask.js +90 -0
  56. package/dist/dom/input-mask.js.map +1 -0
  57. package/dist/dom/keep-in-view.d.ts +16 -0
  58. package/dist/dom/keep-in-view.d.ts.map +1 -0
  59. package/dist/dom/keep-in-view.js +38 -0
  60. package/dist/dom/keep-in-view.js.map +1 -0
  61. package/dist/dom/keyboard-inset.d.ts +29 -0
  62. package/dist/dom/keyboard-inset.d.ts.map +1 -0
  63. package/dist/dom/keyboard-inset.js +45 -0
  64. package/dist/dom/keyboard-inset.js.map +1 -0
  65. package/dist/dom/layers.d.ts +6 -0
  66. package/dist/dom/layers.d.ts.map +1 -0
  67. package/dist/dom/layers.js +35 -0
  68. package/dist/dom/layers.js.map +1 -0
  69. package/dist/dom/measure.d.ts +42 -0
  70. package/dist/dom/measure.d.ts.map +1 -0
  71. package/dist/dom/measure.js +123 -0
  72. package/dist/dom/measure.js.map +1 -0
  73. package/dist/dom/move.d.ts +45 -0
  74. package/dist/dom/move.d.ts.map +1 -0
  75. package/dist/dom/move.js +96 -0
  76. package/dist/dom/move.js.map +1 -0
  77. package/dist/dom/pointed-links.d.ts +13 -0
  78. package/dist/dom/pointed-links.d.ts.map +1 -0
  79. package/dist/dom/pointed-links.js +59 -0
  80. package/dist/dom/pointed-links.js.map +1 -0
  81. package/dist/dom/pointer-drag.d.ts +132 -0
  82. package/dist/dom/pointer-drag.d.ts.map +1 -0
  83. package/dist/dom/pointer-drag.js +307 -0
  84. package/dist/dom/pointer-drag.js.map +1 -0
  85. package/dist/dom/pointer-position.d.ts +133 -0
  86. package/dist/dom/pointer-position.d.ts.map +1 -0
  87. package/dist/dom/pointer-position.js +173 -0
  88. package/dist/dom/pointer-position.js.map +1 -0
  89. package/dist/dom/script-loader.d.ts +12 -0
  90. package/dist/dom/script-loader.d.ts.map +1 -0
  91. package/dist/dom/script-loader.js +54 -0
  92. package/dist/dom/script-loader.js.map +1 -0
  93. package/dist/dom/scroll-bars.d.ts +52 -0
  94. package/dist/dom/scroll-bars.d.ts.map +1 -0
  95. package/dist/dom/scroll-bars.js +259 -0
  96. package/dist/dom/scroll-bars.js.map +1 -0
  97. package/dist/dom/scroll-settle.d.ts +33 -0
  98. package/dist/dom/scroll-settle.d.ts.map +1 -0
  99. package/dist/dom/scroll-settle.js +84 -0
  100. package/dist/dom/scroll-settle.js.map +1 -0
  101. package/dist/dom/scroll.d.ts +21 -0
  102. package/dist/dom/scroll.d.ts.map +1 -0
  103. package/dist/dom/scroll.js +141 -0
  104. package/dist/dom/scroll.js.map +1 -0
  105. package/dist/dom/share.d.ts +19 -0
  106. package/dist/dom/share.d.ts.map +1 -0
  107. package/dist/dom/share.js +41 -0
  108. package/dist/dom/share.js.map +1 -0
  109. package/dist/dom/swipe.d.ts +121 -0
  110. package/dist/dom/swipe.d.ts.map +1 -0
  111. package/dist/dom/swipe.js +291 -0
  112. package/dist/dom/swipe.js.map +1 -0
  113. package/dist/dom/targets.d.ts +45 -0
  114. package/dist/dom/targets.d.ts.map +1 -0
  115. package/dist/dom/targets.js +70 -0
  116. package/dist/dom/targets.js.map +1 -0
  117. package/dist/dom/track-box.d.ts +61 -0
  118. package/dist/dom/track-box.d.ts.map +1 -0
  119. package/dist/dom/track-box.js +131 -0
  120. package/dist/dom/track-box.js.map +1 -0
  121. package/dist/events/active-element.d.ts +15 -0
  122. package/dist/events/active-element.d.ts.map +1 -0
  123. package/dist/events/active-element.js +33 -0
  124. package/dist/events/active-element.js.map +1 -0
  125. package/dist/events/hotkeys.d.ts +22 -0
  126. package/dist/events/hotkeys.d.ts.map +1 -0
  127. package/dist/events/hotkeys.js +56 -0
  128. package/dist/events/hotkeys.js.map +1 -0
  129. package/dist/events/idle.d.ts +29 -0
  130. package/dist/events/idle.d.ts.map +1 -0
  131. package/dist/events/idle.js +51 -0
  132. package/dist/events/idle.js.map +1 -0
  133. package/dist/events/index.d.ts +9 -0
  134. package/dist/events/index.js +10 -0
  135. package/dist/{input-modality-BY-bSrEc.d.mts → events/input-modality.d.ts} +9 -12
  136. package/dist/events/input-modality.d.ts.map +1 -0
  137. package/dist/{input-modality-BXD383jg.mjs → events/input-modality.js} +3 -4
  138. package/dist/events/input-modality.js.map +1 -0
  139. package/dist/events/keyboard.d.ts +30 -0
  140. package/dist/events/keyboard.d.ts.map +1 -0
  141. package/dist/events/keyboard.js +55 -0
  142. package/dist/events/keyboard.js.map +1 -0
  143. package/dist/events/pointer.d.ts +15 -0
  144. package/dist/events/pointer.d.ts.map +1 -0
  145. package/dist/events/pointer.js +28 -0
  146. package/dist/events/pointer.js.map +1 -0
  147. package/dist/events/scroll.d.ts +16 -0
  148. package/dist/events/scroll.d.ts.map +1 -0
  149. package/dist/events/scroll.js +29 -0
  150. package/dist/events/scroll.js.map +1 -0
  151. package/dist/events/visibility.d.ts +25 -0
  152. package/dist/events/visibility.d.ts.map +1 -0
  153. package/dist/events/visibility.js +28 -0
  154. package/dist/events/visibility.js.map +1 -0
  155. package/dist/events/window-size.d.ts +30 -0
  156. package/dist/events/window-size.d.ts.map +1 -0
  157. package/dist/events/window-size.js +63 -0
  158. package/dist/events/window-size.js.map +1 -0
  159. package/dist/index.d.ts +9 -0
  160. package/dist/index.js +10 -0
  161. package/dist/interaction/bundle-behavior.d.ts +37 -0
  162. package/dist/interaction/bundle-behavior.d.ts.map +1 -0
  163. package/dist/interaction/bundle-behavior.js +34 -0
  164. package/dist/interaction/bundle-behavior.js.map +1 -0
  165. package/dist/interaction/dismiss-layer.d.ts +100 -0
  166. package/dist/interaction/dismiss-layer.d.ts.map +1 -0
  167. package/dist/interaction/dismiss-layer.js +140 -0
  168. package/dist/interaction/dismiss-layer.js.map +1 -0
  169. package/dist/interaction/editable-text.d.ts +13 -0
  170. package/dist/interaction/editable-text.d.ts.map +1 -0
  171. package/dist/interaction/editable-text.js +17 -0
  172. package/dist/interaction/editable-text.js.map +1 -0
  173. package/dist/interaction/focus-scope.d.ts +21 -0
  174. package/dist/interaction/focus-scope.d.ts.map +1 -0
  175. package/dist/interaction/focus-scope.js +25 -0
  176. package/dist/interaction/focus-scope.js.map +1 -0
  177. package/dist/interaction/focus-visible.d.ts +9 -0
  178. package/dist/interaction/focus-visible.d.ts.map +1 -0
  179. package/dist/interaction/focus-visible.js +10 -0
  180. package/dist/interaction/focus-visible.js.map +1 -0
  181. package/dist/interaction/grid-navigation.d.ts +73 -0
  182. package/dist/interaction/grid-navigation.d.ts.map +1 -0
  183. package/dist/interaction/grid-navigation.js +137 -0
  184. package/dist/interaction/grid-navigation.js.map +1 -0
  185. package/dist/interaction/index.d.ts +21 -0
  186. package/dist/interaction/index.js +21 -0
  187. package/dist/interaction/layers.d.ts +12 -0
  188. package/dist/interaction/layers.d.ts.map +1 -0
  189. package/dist/interaction/layers.js +14 -0
  190. package/dist/interaction/layers.js.map +1 -0
  191. package/dist/interaction/list-navigation.d.ts +105 -0
  192. package/dist/interaction/list-navigation.d.ts.map +1 -0
  193. package/dist/interaction/list-navigation.js +168 -0
  194. package/dist/interaction/list-navigation.js.map +1 -0
  195. package/dist/interaction/live-announce.d.ts +70 -0
  196. package/dist/interaction/live-announce.d.ts.map +1 -0
  197. package/dist/interaction/live-announce.js +115 -0
  198. package/dist/interaction/live-announce.js.map +1 -0
  199. package/dist/interaction/long-press.d.ts +102 -0
  200. package/dist/interaction/long-press.d.ts.map +1 -0
  201. package/dist/interaction/long-press.js +115 -0
  202. package/dist/interaction/long-press.js.map +1 -0
  203. package/dist/interaction/move.d.ts +10 -0
  204. package/dist/interaction/move.d.ts.map +1 -0
  205. package/dist/interaction/move.js +17 -0
  206. package/dist/interaction/move.js.map +1 -0
  207. package/dist/interaction/overlay.d.ts +45 -0
  208. package/dist/interaction/overlay.d.ts.map +1 -0
  209. package/dist/interaction/overlay.js +57 -0
  210. package/dist/interaction/overlay.js.map +1 -0
  211. package/dist/interaction/placing.d.ts +86 -0
  212. package/dist/interaction/placing.d.ts.map +1 -0
  213. package/dist/interaction/placing.js +239 -0
  214. package/dist/interaction/placing.js.map +1 -0
  215. package/dist/interaction/pointer-drag.d.ts +23 -0
  216. package/dist/interaction/pointer-drag.d.ts.map +1 -0
  217. package/dist/interaction/pointer-drag.js +21 -0
  218. package/dist/interaction/pointer-drag.js.map +1 -0
  219. package/dist/interaction/press.d.ts +152 -0
  220. package/dist/interaction/press.d.ts.map +1 -0
  221. package/dist/interaction/press.js +229 -0
  222. package/dist/interaction/press.js.map +1 -0
  223. package/dist/interaction/roving-tabindex.d.ts +85 -0
  224. package/dist/interaction/roving-tabindex.d.ts.map +1 -0
  225. package/dist/interaction/roving-tabindex.js +142 -0
  226. package/dist/interaction/roving-tabindex.js.map +1 -0
  227. package/dist/interaction/selection.d.ts +72 -0
  228. package/dist/interaction/selection.d.ts.map +1 -0
  229. package/dist/interaction/selection.js +129 -0
  230. package/dist/interaction/selection.js.map +1 -0
  231. package/dist/interaction/targets.d.ts +15 -0
  232. package/dist/interaction/targets.d.ts.map +1 -0
  233. package/dist/interaction/targets.js +20 -0
  234. package/dist/interaction/targets.js.map +1 -0
  235. package/dist/interaction/tree-navigation.d.ts +111 -0
  236. package/dist/interaction/tree-navigation.d.ts.map +1 -0
  237. package/dist/interaction/tree-navigation.js +207 -0
  238. package/dist/interaction/tree-navigation.js.map +1 -0
  239. package/dist/interaction/typeahead.d.ts +73 -0
  240. package/dist/interaction/typeahead.d.ts.map +1 -0
  241. package/dist/interaction/typeahead.js +113 -0
  242. package/dist/interaction/typeahead.js.map +1 -0
  243. package/dist/internal.d.ts +16 -0
  244. package/dist/internal.d.ts.map +1 -0
  245. package/dist/{internal-DP-xLKbT.mjs → internal.js} +8 -7
  246. package/dist/internal.js.map +1 -0
  247. package/dist/media/breakpoints.d.ts +37 -0
  248. package/dist/media/breakpoints.d.ts.map +1 -0
  249. package/dist/media/breakpoints.js +64 -0
  250. package/dist/media/breakpoints.js.map +1 -0
  251. package/dist/media/index.d.ts +3 -0
  252. package/dist/media/index.js +4 -0
  253. package/dist/media/mediaquery.d.ts +40 -0
  254. package/dist/media/mediaquery.d.ts.map +1 -0
  255. package/dist/media/mediaquery.js +42 -0
  256. package/dist/media/mediaquery.js.map +1 -0
  257. package/dist/media/platform.d.ts +30 -0
  258. package/dist/media/platform.d.ts.map +1 -0
  259. package/dist/media/platform.js +50 -0
  260. package/dist/media/platform.js.map +1 -0
  261. package/dist/motion/index.d.ts +5 -0
  262. package/dist/motion/index.js +5 -0
  263. package/dist/motion/motion.d.ts +16 -0
  264. package/dist/motion/motion.d.ts.map +1 -0
  265. package/dist/motion/motion.js +25 -0
  266. package/dist/motion/motion.js.map +1 -0
  267. package/dist/motion/presence.d.ts +37 -0
  268. package/dist/motion/presence.d.ts.map +1 -0
  269. package/dist/motion/presence.js +65 -0
  270. package/dist/motion/presence.js.map +1 -0
  271. package/dist/motion/spring.d.ts +50 -0
  272. package/dist/motion/spring.d.ts.map +1 -0
  273. package/dist/motion/spring.js +92 -0
  274. package/dist/motion/spring.js.map +1 -0
  275. package/dist/motion/tween.d.ts +44 -0
  276. package/dist/motion/tween.d.ts.map +1 -0
  277. package/dist/motion/tween.js +65 -0
  278. package/dist/motion/tween.js.map +1 -0
  279. package/dist/net/broadcast.d.ts +39 -0
  280. package/dist/net/broadcast.d.ts.map +1 -0
  281. package/dist/net/broadcast.js +73 -0
  282. package/dist/net/broadcast.js.map +1 -0
  283. package/dist/net/index.d.ts +5 -0
  284. package/dist/net/index.js +6 -0
  285. package/dist/net/online.d.ts +24 -0
  286. package/dist/net/online.d.ts.map +1 -0
  287. package/dist/net/online.js +26 -0
  288. package/dist/net/online.js.map +1 -0
  289. package/dist/net/sharedHost.d.ts +64 -0
  290. package/dist/net/sharedHost.d.ts.map +1 -0
  291. package/dist/net/sharedHost.js +124 -0
  292. package/dist/net/sharedHost.js.map +1 -0
  293. package/dist/net/sse.d.ts +115 -0
  294. package/dist/net/sse.d.ts.map +1 -0
  295. package/dist/net/sse.js +138 -0
  296. package/dist/net/sse.js.map +1 -0
  297. package/dist/net/websocket.d.ts +172 -0
  298. package/dist/net/websocket.d.ts.map +1 -0
  299. package/dist/net/websocket.js +199 -0
  300. package/dist/net/websocket.js.map +1 -0
  301. package/dist/observers/bounds.d.ts +24 -0
  302. package/dist/observers/bounds.d.ts.map +1 -0
  303. package/dist/observers/bounds.js +51 -0
  304. package/dist/observers/bounds.js.map +1 -0
  305. package/dist/observers/index.d.ts +4 -0
  306. package/dist/observers/index.js +5 -0
  307. package/dist/observers/intersection.d.ts +18 -0
  308. package/dist/observers/intersection.d.ts.map +1 -0
  309. package/dist/observers/intersection.js +33 -0
  310. package/dist/observers/intersection.js.map +1 -0
  311. package/dist/observers/mutation.d.ts +25 -0
  312. package/dist/observers/mutation.d.ts.map +1 -0
  313. package/dist/observers/mutation.js +53 -0
  314. package/dist/observers/mutation.js.map +1 -0
  315. package/dist/observers/resize.d.ts +18 -0
  316. package/dist/observers/resize.d.ts.map +1 -0
  317. package/dist/observers/resize.js +33 -0
  318. package/dist/observers/resize.js.map +1 -0
  319. package/dist/state/history.d.ts +115 -0
  320. package/dist/state/history.d.ts.map +1 -0
  321. package/dist/state/history.js +167 -0
  322. package/dist/state/history.js.map +1 -0
  323. package/dist/state/index.d.ts +6 -0
  324. package/dist/state/index.js +7 -0
  325. package/dist/state/locale.d.ts +27 -0
  326. package/dist/state/locale.d.ts.map +1 -0
  327. package/dist/state/locale.js +25 -0
  328. package/dist/state/locale.js.map +1 -0
  329. package/dist/state/pagination.d.ts +53 -0
  330. package/dist/state/pagination.d.ts.map +1 -0
  331. package/dist/state/pagination.js +72 -0
  332. package/dist/state/pagination.js.map +1 -0
  333. package/dist/state/range.d.ts +9 -0
  334. package/dist/state/range.d.ts.map +1 -0
  335. package/dist/state/range.js +18 -0
  336. package/dist/state/range.js.map +1 -0
  337. package/dist/state/selection.d.ts +47 -0
  338. package/dist/state/selection.d.ts.map +1 -0
  339. package/dist/state/selection.js +39 -0
  340. package/dist/state/selection.js.map +1 -0
  341. package/dist/state/virtual.d.ts +201 -0
  342. package/dist/state/virtual.d.ts.map +1 -0
  343. package/dist/state/{index.mjs → virtual.js} +11 -313
  344. package/dist/state/virtual.js.map +1 -0
  345. package/dist/time/debounce.d.ts +43 -0
  346. package/dist/time/debounce.d.ts.map +1 -0
  347. package/dist/time/debounce.js +65 -0
  348. package/dist/time/debounce.js.map +1 -0
  349. package/dist/time/index.d.ts +6 -0
  350. package/dist/time/index.js +7 -0
  351. package/dist/time/interval.d.ts +37 -0
  352. package/dist/time/interval.d.ts.map +1 -0
  353. package/dist/time/interval.js +52 -0
  354. package/dist/time/interval.js.map +1 -0
  355. package/dist/time/relative.d.ts +8 -0
  356. package/dist/time/relative.d.ts.map +1 -0
  357. package/dist/time/relative.js +27 -0
  358. package/dist/time/relative.js.map +1 -0
  359. package/dist/time/throttle.d.ts +38 -0
  360. package/dist/time/throttle.d.ts.map +1 -0
  361. package/dist/time/throttle.js +39 -0
  362. package/dist/time/throttle.js.map +1 -0
  363. package/dist/time/ticks.d.ts +21 -0
  364. package/dist/time/ticks.d.ts.map +1 -0
  365. package/dist/time/ticks.js +30 -0
  366. package/dist/time/ticks.js.map +1 -0
  367. package/dist/time/timer.d.ts +32 -0
  368. package/dist/time/timer.d.ts.map +1 -0
  369. package/dist/time/timer.js +50 -0
  370. package/dist/time/timer.js.map +1 -0
  371. package/package.json +31 -31
  372. package/dist/device/index.d.mts +0 -345
  373. package/dist/device/index.d.mts.map +0 -1
  374. package/dist/device/index.mjs +0 -498
  375. package/dist/device/index.mjs.map +0 -1
  376. package/dist/dom/index.d.mts +0 -750
  377. package/dist/dom/index.d.mts.map +0 -1
  378. package/dist/dom/index.mjs +0 -1857
  379. package/dist/dom/index.mjs.map +0 -1
  380. package/dist/editable-text-1D31qthY.d.mts +0 -319
  381. package/dist/editable-text-1D31qthY.d.mts.map +0 -1
  382. package/dist/events/index.d.mts +0 -184
  383. package/dist/events/index.d.mts.map +0 -1
  384. package/dist/events/index.mjs +0 -315
  385. package/dist/events/index.mjs.map +0 -1
  386. package/dist/follow-tab-stop-Caog2qg1.mjs +0 -863
  387. package/dist/follow-tab-stop-Caog2qg1.mjs.map +0 -1
  388. package/dist/index-CmmxqSEi.d.mts +0 -149
  389. package/dist/index-CmmxqSEi.d.mts.map +0 -1
  390. package/dist/index.d.mts +0 -12
  391. package/dist/index.mjs +0 -12
  392. package/dist/input-modality-BXD383jg.mjs.map +0 -1
  393. package/dist/input-modality-BY-bSrEc.d.mts.map +0 -1
  394. package/dist/interaction/index.d.mts +0 -1194
  395. package/dist/interaction/index.d.mts.map +0 -1
  396. package/dist/interaction/index.mjs +0 -2012
  397. package/dist/interaction/index.mjs.map +0 -1
  398. package/dist/internal-DP-xLKbT.mjs.map +0 -1
  399. package/dist/media/index.d.mts +0 -109
  400. package/dist/media/index.d.mts.map +0 -1
  401. package/dist/media/index.mjs +0 -149
  402. package/dist/media/index.mjs.map +0 -1
  403. package/dist/motion/index.d.mts +0 -2
  404. package/dist/motion/index.mjs +0 -1
  405. package/dist/motion-DmFDppRn.mjs +0 -240
  406. package/dist/motion-DmFDppRn.mjs.map +0 -1
  407. package/dist/net/index.d.mts +0 -348
  408. package/dist/net/index.d.mts.map +0 -1
  409. package/dist/net/index.mjs +0 -535
  410. package/dist/net/index.mjs.map +0 -1
  411. package/dist/observers/index.d.mts +0 -84
  412. package/dist/observers/index.d.mts.map +0 -1
  413. package/dist/observers/index.mjs +0 -159
  414. package/dist/observers/index.mjs.map +0 -1
  415. package/dist/rolldown-runtime-D7D4PA-g.mjs +0 -13
  416. package/dist/state/index.d.mts +0 -444
  417. package/dist/state/index.d.mts.map +0 -1
  418. package/dist/state/index.mjs.map +0 -1
  419. package/dist/time/index.d.mts +0 -179
  420. package/dist/time/index.d.mts.map +0 -1
  421. package/dist/time/index.mjs +0 -242
  422. package/dist/time/index.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","names":[],"sources":["../../src/state/pagination.ts"],"sourcesContent":["import { Schema } from 'effect'\nimport { defineMessageUnion } from 'foldkit/message'\nimport { Bundle } from 'foldkit-bundle'\nimport { unlessSame } from '../internal.js'\n\nexport const PaginationModel = Schema.Struct({\n page: Schema.Number,\n perPage: Schema.Number,\n total: Schema.NullOr(Schema.Number),\n})\nexport type PaginationModel = typeof PaginationModel.Type\n\nexport const PaginationMessage = defineMessageUnion({\n GoToPage: { page: Schema.Number },\n NextPage: {},\n PrevPage: {},\n SetPerPage: { perPage: Schema.Number },\n SetTotal: { total: Schema.NullOr(Schema.Number) },\n})\nexport type PaginationMessage = typeof PaginationMessage.Type\n\nconst clampPage = (page: number, perPage: number, total: number | null): number => {\n if (!Number.isInteger(page)) return 1\n if (page < 1) return 1\n if (total === null) return page\n return Math.min(page, Math.max(1, Math.ceil(total / perPage)))\n}\n\n/** The number of pages, or null while the total is unknown. */\nexport const pageCount = (model: PaginationModel): number | null =>\n model.total === null ? null : Math.max(1, Math.ceil(model.total / model.perPage))\n\n/** The offset of the first item on the page, for a slice or a query. */\nexport const offset = (model: PaginationModel): number => (model.page - 1) * model.perPage\n\n/**\n * Pagination as a bundle: the page, page size, and total live in the Model,\n * so page changes replay and every transition clamps into range. Pure logic,\n * no streams: data loading stays the application's job.\n */\nexport const Pagination = Bundle.make('Pagination', {\n Model: PaginationModel,\n Message: PaginationMessage,\n args: Schema.Struct({\n perPage: Schema.Number.pipe(\n Schema.check(Schema.isGreaterThan(0)),\n Schema.check(Schema.isFinite()),\n ),\n total: Schema.optional(Schema.NullOr(Schema.Number.pipe(Schema.check(Schema.isFinite())))),\n }),\n init: args => ({\n model: { page: 1, perPage: args.perPage, total: args.total ?? null },\n }),\n update: (model, message) =>\n PaginationMessage.match(message, {\n GoToPage: ({ page }) => ({\n model: unlessSame(model, { ...model, page: clampPage(page, model.perPage, model.total) }),\n }),\n NextPage: () => ({\n model: unlessSame(model, {\n ...model,\n page: clampPage(model.page + 1, model.perPage, model.total),\n }),\n }),\n PrevPage: () => ({\n model: unlessSame(model, {\n ...model,\n page: clampPage(model.page - 1, model.perPage, model.total),\n }),\n }),\n SetPerPage: ({ perPage }) =>\n perPage > 0\n ? {\n model: unlessSame(model, {\n ...model,\n perPage,\n page: clampPage(model.page, perPage, model.total),\n }),\n }\n : { model },\n // Sent again on every refetch, usually with the total already held.\n SetTotal: ({ total }) =>\n total === null || total >= 0\n ? {\n model: unlessSame(model, {\n ...model,\n total,\n page: clampPage(model.page, model.perPage, total),\n }),\n }\n : { model },\n }),\n})\n"],"mappings":";;;;;AAKA,MAAa,kBAAkB,OAAO,OAAO;CAC3C,MAAM,OAAO;CACb,SAAS,OAAO;CAChB,OAAO,OAAO,OAAO,OAAO,MAAM;AACpC,CAAC;AAGD,MAAa,oBAAoB,mBAAmB;CAClD,UAAU,EAAE,MAAM,OAAO,OAAO;CAChC,UAAU,CAAC;CACX,UAAU,CAAC;CACX,YAAY,EAAE,SAAS,OAAO,OAAO;CACrC,UAAU,EAAE,OAAO,OAAO,OAAO,OAAO,MAAM,EAAE;AAClD,CAAC;AAGD,MAAM,aAAa,MAAc,SAAiB,UAAiC;CACjF,IAAI,CAAC,OAAO,UAAU,IAAI,GAAG,OAAO;CACpC,IAAI,OAAO,GAAG,OAAO;CACrB,IAAI,UAAU,MAAM,OAAO;CAC3B,OAAO,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,OAAO,CAAC,CAAC;AAC/D;;AAGA,MAAa,aAAa,UACxB,MAAM,UAAU,OAAO,OAAO,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,QAAQ,MAAM,OAAO,CAAC;;AAGlF,MAAa,UAAU,WAAoC,MAAM,OAAO,KAAK,MAAM;;;;;;AAOnF,MAAa,aAAa,OAAO,KAAK,cAAc;CAClD,OAAO;CACP,SAAS;CACT,MAAM,OAAO,OAAO;EAClB,SAAS,OAAO,OAAO,KACrB,OAAO,MAAM,OAAO,cAAc,CAAC,CAAC,GACpC,OAAO,MAAM,OAAO,SAAS,CAAC,CAChC;EACA,OAAO,OAAO,SAAS,OAAO,OAAO,OAAO,OAAO,KAAK,OAAO,MAAM,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;CAC3F,CAAC;CACD,OAAM,UAAS,EACb,OAAO;EAAE,MAAM;EAAG,SAAS,KAAK;EAAS,OAAO,KAAK,SAAS;CAAK,EACrE;CACA,SAAS,OAAO,YACd,kBAAkB,MAAM,SAAS;EAC/B,WAAW,EAAE,YAAY,EACvB,OAAO,WAAW,OAAO;GAAE,GAAG;GAAO,MAAM,UAAU,MAAM,MAAM,SAAS,MAAM,KAAK;EAAE,CAAC,EAC1F;EACA,iBAAiB,EACf,OAAO,WAAW,OAAO;GACvB,GAAG;GACH,MAAM,UAAU,MAAM,OAAO,GAAG,MAAM,SAAS,MAAM,KAAK;EAC5D,CAAC,EACH;EACA,iBAAiB,EACf,OAAO,WAAW,OAAO;GACvB,GAAG;GACH,MAAM,UAAU,MAAM,OAAO,GAAG,MAAM,SAAS,MAAM,KAAK;EAC5D,CAAC,EACH;EACA,aAAa,EAAE,cACb,UAAU,IACN,EACE,OAAO,WAAW,OAAO;GACvB,GAAG;GACH;GACA,MAAM,UAAU,MAAM,MAAM,SAAS,MAAM,KAAK;EAClD,CAAC,EACH,IACA,EAAE,MAAM;EAEd,WAAW,EAAE,YACX,UAAU,QAAQ,SAAS,IACvB,EACE,OAAO,WAAW,OAAO;GACvB,GAAG;GACH;GACA,MAAM,UAAU,MAAM,MAAM,MAAM,SAAS,KAAK;EAClD,CAAC,EACH,IACA,EAAE,MAAM;CAChB,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * A numeric range as an array: `range(1, 4)` is `[1, 2, 3]`, inclusive of
3
+ * the start and exclusive of the end, like `Array.from` length math. The
4
+ * pagination companion: `range(1, (pageCount(model) ?? 0) + 1)` is the page
5
+ * list. A zero or non-finite step would loop forever, so it throws, naming
6
+ * the caller — like History's capacity check.
7
+ */
8
+ export declare const range: (start: number, end: number, step?: number) => ReadonlyArray<number>;
9
+ //# sourceMappingURL=range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.ts","names":[],"sources":["../../src/state/range.ts"],"mappings":";;;;;;;qBAOa,QAAK,eAAiB,aAAa,kBAAa"}
@@ -0,0 +1,18 @@
1
+ // src/state/range.ts
2
+ /**
3
+ * A numeric range as an array: `range(1, 4)` is `[1, 2, 3]`, inclusive of
4
+ * the start and exclusive of the end, like `Array.from` length math. The
5
+ * pagination companion: `range(1, (pageCount(model) ?? 0) + 1)` is the page
6
+ * list. A zero or non-finite step would loop forever, so it throws, naming
7
+ * the caller — like History's capacity check.
8
+ */
9
+ const range = (start, end, step = 1) => {
10
+ if (!Number.isFinite(step) || step === 0) throw new Error(`range: step must be a non-zero finite number, got ${step}`);
11
+ const values = [];
12
+ if (step > 0) for (let value = start; value < end; value += step) values.push(value);
13
+ else for (let value = start; value > end; value += step) values.push(value);
14
+ return values;
15
+ };
16
+ export { range };
17
+
18
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","names":[],"sources":["../../src/state/range.ts"],"sourcesContent":["/**\n * A numeric range as an array: `range(1, 4)` is `[1, 2, 3]`, inclusive of\n * the start and exclusive of the end, like `Array.from` length math. The\n * pagination companion: `range(1, (pageCount(model) ?? 0) + 1)` is the page\n * list. A zero or non-finite step would loop forever, so it throws, naming\n * the caller — like History's capacity check.\n */\nexport const range = (start: number, end: number, step = 1): ReadonlyArray<number> => {\n if (!Number.isFinite(step) || step === 0) {\n throw new Error(`range: step must be a non-zero finite number, got ${step}`)\n }\n const values: Array<number> = []\n if (step > 0) {\n for (let value = start; value < end; value += step) {\n values.push(value)\n }\n } else {\n for (let value = start; value > end; value += step) {\n values.push(value)\n }\n }\n return values\n}\n"],"mappings":";;;;;;;;AAOA,MAAa,SAAS,OAAe,KAAa,OAAO,MAA6B;CACpF,IAAI,CAAC,OAAO,SAAS,IAAI,KAAK,SAAS,GACrC,MAAM,IAAI,MAAM,qDAAqD,MAAM;CAE7E,MAAM,SAAwB,CAAC;CAC/B,IAAI,OAAO,GACT,KAAK,IAAI,QAAQ,OAAO,QAAQ,KAAK,SAAS,MAC5C,OAAO,KAAK,KAAK;MAGnB,KAAK,IAAI,QAAQ,OAAO,QAAQ,KAAK,SAAS,MAC5C,OAAO,KAAK,KAAK;CAGrB,OAAO;AACT"}
@@ -0,0 +1,47 @@
1
+ import { Schema } from "effect";
2
+ import { Bundle } from "foldkit-bundle";
3
+ export declare const SelectionSetModel: Schema.Struct<{
4
+ readonly selected: Schema.$Array<Schema.String>;
5
+ }>;
6
+ export type SelectionSetModel = typeof SelectionSetModel.Type;
7
+ export declare const SelectionSetMessage: import("foldkit/message").MessageUnion<{
8
+ readonly Select: {
9
+ id: Schema.String;
10
+ };
11
+ readonly Deselect: {
12
+ id: Schema.String;
13
+ };
14
+ readonly Toggle: {
15
+ id: Schema.String;
16
+ };
17
+ readonly ReplaceAll: {
18
+ ids: Schema.$Array<Schema.String>;
19
+ };
20
+ readonly Clear: {};
21
+ }>;
22
+ export type SelectionSetMessage = typeof SelectionSetMessage.Type;
23
+ /** Whether the id is currently selected. */
24
+ export declare const isSelected: (model: SelectionSetModel, id: string) => boolean;
25
+ /**
26
+ * A selection set as a bundle: the selected ids in the Model, changed one at
27
+ * a time or replaced whole. Order follows first selection; toggling moves a
28
+ * reselected id to the end. Pure logic, no streams.
29
+ */
30
+ export declare const SelectionSet: Bundle.Bundle<"SelectionSet", void, {
31
+ readonly selected: readonly string[];
32
+ }, {
33
+ readonly _tag: "Clear";
34
+ } | {
35
+ readonly _tag: "Deselect";
36
+ readonly id: string;
37
+ } | {
38
+ readonly _tag: "ReplaceAll";
39
+ readonly ids: readonly string[];
40
+ } | {
41
+ readonly _tag: "Select";
42
+ readonly id: string;
43
+ } | {
44
+ readonly _tag: "Toggle";
45
+ readonly id: string;
46
+ }, never, never, never, void, {}, {}>;
47
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","names":[],"sources":["../../src/state/selection.ts"],"mappings":";;qBAKa,mBAAiB,OAAA;;;YAClB,2BAA2B,kBAAkB;qBAE5C,+CAAmB;;IACpB,IAAE,OAAA;;;IACA,IAAE,OAAA;;;IACJ,IAAE,OAAA;;;IACE,KAAG,OAAA,OAAA,OAAA;;;;YAGP,6BAA6B,oBAAoB;;qBAMhD,aAAU,OAAW,mBAAiB;;;;;;qBAQtC,cAAY,OAAA"}
@@ -0,0 +1,39 @@
1
+ import { Schema } from "effect";
2
+ import { defineMessageUnion } from "foldkit/message";
3
+ import { Bundle } from "foldkit-bundle";
4
+ import { sameIds } from "../internal.js";
5
+ // src/state/selection.ts
6
+ const SelectionSetModel = Schema.Struct({ selected: Schema.Array(Schema.String) });
7
+ const SelectionSetMessage = defineMessageUnion({
8
+ Select: { id: Schema.String },
9
+ Deselect: { id: Schema.String },
10
+ Toggle: { id: Schema.String },
11
+ ReplaceAll: { ids: Schema.Array(Schema.String) },
12
+ Clear: {}
13
+ });
14
+ const without = (selected, id) => selected.filter((other) => other !== id);
15
+ /** Whether the id is currently selected. */
16
+ const isSelected = (model, id) => model.selected.includes(id);
17
+ /**
18
+ * A selection set as a bundle: the selected ids in the Model, changed one at
19
+ * a time or replaced whole. Order follows first selection; toggling moves a
20
+ * reselected id to the end. Pure logic, no streams.
21
+ */
22
+ const SelectionSet = Bundle.make("SelectionSet", {
23
+ Model: SelectionSetModel,
24
+ Message: SelectionSetMessage,
25
+ init: () => ({ model: { selected: [] } }),
26
+ update: (model, message) => SelectionSetMessage.match(message, {
27
+ Select: ({ id }) => isSelected(model, id) ? { model } : { model: { selected: [...model.selected, id] } },
28
+ Deselect: ({ id }) => isSelected(model, id) ? { model: { selected: without(model.selected, id) } } : { model },
29
+ Toggle: ({ id }) => isSelected(model, id) ? { model: { selected: without(model.selected, id) } } : { model: { selected: [...model.selected, id] } },
30
+ ReplaceAll: ({ ids }) => {
31
+ const selected = [...new Set(ids)];
32
+ return sameIds(selected, model.selected) ? { model } : { model: { selected } };
33
+ },
34
+ Clear: () => model.selected.length === 0 ? { model } : { model: { selected: [] } }
35
+ })
36
+ });
37
+ export { SelectionSet, SelectionSetMessage, SelectionSetModel, isSelected };
38
+
39
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.js","names":[],"sources":["../../src/state/selection.ts"],"sourcesContent":["import { Schema } from 'effect'\nimport { defineMessageUnion } from 'foldkit/message'\nimport { Bundle } from 'foldkit-bundle'\nimport { sameIds } from '../internal.js'\n\nexport const SelectionSetModel = Schema.Struct({ selected: Schema.Array(Schema.String) })\nexport type SelectionSetModel = typeof SelectionSetModel.Type\n\nexport const SelectionSetMessage = defineMessageUnion({\n Select: { id: Schema.String },\n Deselect: { id: Schema.String },\n Toggle: { id: Schema.String },\n ReplaceAll: { ids: Schema.Array(Schema.String) },\n Clear: {},\n})\nexport type SelectionSetMessage = typeof SelectionSetMessage.Type\n\nconst without = (selected: ReadonlyArray<string>, id: string): ReadonlyArray<string> =>\n selected.filter(other => other !== id)\n\n/** Whether the id is currently selected. */\nexport const isSelected = (model: SelectionSetModel, id: string): boolean =>\n model.selected.includes(id)\n\n/**\n * A selection set as a bundle: the selected ids in the Model, changed one at\n * a time or replaced whole. Order follows first selection; toggling moves a\n * reselected id to the end. Pure logic, no streams.\n */\nexport const SelectionSet = Bundle.make('SelectionSet', {\n Model: SelectionSetModel,\n Message: SelectionSetMessage,\n init: () => ({ model: { selected: [] } }),\n update: (model, message) =>\n SelectionSetMessage.match(message, {\n Select: ({ id }) =>\n isSelected(model, id) ? { model } : { model: { selected: [...model.selected, id] } },\n Deselect: ({ id }) =>\n isSelected(model, id) ? { model: { selected: without(model.selected, id) } } : { model },\n Toggle: ({ id }) =>\n isSelected(model, id)\n ? { model: { selected: without(model.selected, id) } }\n : { model: { selected: [...model.selected, id] } },\n ReplaceAll: ({ ids }) => {\n const selected = [...new Set(ids)]\n return sameIds(selected, model.selected) ? { model } : { model: { selected } }\n },\n Clear: () => (model.selected.length === 0 ? { model } : { model: { selected: [] } }),\n }),\n})\n"],"mappings":";;;;;AAKA,MAAa,oBAAoB,OAAO,OAAO,EAAE,UAAU,OAAO,MAAM,OAAO,MAAM,EAAE,CAAC;AAGxF,MAAa,sBAAsB,mBAAmB;CACpD,QAAQ,EAAE,IAAI,OAAO,OAAO;CAC5B,UAAU,EAAE,IAAI,OAAO,OAAO;CAC9B,QAAQ,EAAE,IAAI,OAAO,OAAO;CAC5B,YAAY,EAAE,KAAK,OAAO,MAAM,OAAO,MAAM,EAAE;CAC/C,OAAO,CAAC;AACV,CAAC;AAGD,MAAM,WAAW,UAAiC,OAChD,SAAS,QAAO,UAAS,UAAU,EAAE;;AAGvC,MAAa,cAAc,OAA0B,OACnD,MAAM,SAAS,SAAS,EAAE;;;;;;AAO5B,MAAa,eAAe,OAAO,KAAK,gBAAgB;CACtD,OAAO;CACP,SAAS;CACT,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE;CACvC,SAAS,OAAO,YACd,oBAAoB,MAAM,SAAS;EACjC,SAAS,EAAE,SACT,WAAW,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,UAAU,EAAE,EAAE,EAAE;EACrF,WAAW,EAAE,SACX,WAAW,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,QAAQ,MAAM,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM;EACzF,SAAS,EAAE,SACT,WAAW,OAAO,EAAE,IAChB,EAAE,OAAO,EAAE,UAAU,QAAQ,MAAM,UAAU,EAAE,EAAE,EAAE,IACnD,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,UAAU,EAAE,EAAE,EAAE;EACrD,aAAa,EAAE,UAAU;GACvB,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;GACjC,OAAO,QAAQ,UAAU,MAAM,QAAQ,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;EAC/E;EACA,aAAc,MAAM,SAAS,WAAW,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE;CACpF,CAAC;AACL,CAAC"}
@@ -0,0 +1,201 @@
1
+ import { Schema } from "effect";
2
+ import { Bundle } from "foldkit-bundle";
3
+ import * as Mount from "foldkit/mount";
4
+ /** The rows to draw: a half-open range of indexes. */
5
+ export interface VirtualWindow {
6
+ /** First visible row index, inclusive. */
7
+ readonly start: number;
8
+ /** End row index, exclusive. */
9
+ readonly end: number;
10
+ }
11
+ /** Layout constants: per-row estimate, inter-row gap, and end padding. */
12
+ export interface VirtualLayout {
13
+ readonly estimatedHeight: number;
14
+ readonly gap: number;
15
+ readonly paddingStart: number;
16
+ readonly paddingEnd: number;
17
+ }
18
+ /** Total scrollable height: padding, measured rows, estimates, and gaps. */
19
+ export declare const totalHeight: (keys: ReadonlyArray<string>, heights: Readonly<Record<string, number>>, layout: VirtualLayout) => number;
20
+ /** Pixel offset of a row's top edge: padding plus the prefix before it. */
21
+ export declare const offsetFor: (index: number, keys: ReadonlyArray<string>, heights: Readonly<Record<string, number>>, layout: VirtualLayout) => number;
22
+ /**
23
+ * Which rows to render for a scroll position: the rows intersecting
24
+ * `[scrollTop, scrollTop + viewportHeight)`, widened by `overscan` on both
25
+ * sides and clamped to `[0, count]`. Gaps and padding are dead space — no
26
+ * row — so boxes are tested, not cumulative coverage. An overscan of zero
27
+ * renders exactly the visible rows.
28
+ */
29
+ export declare const visibleRange: (keys: ReadonlyArray<string>, heights: Readonly<Record<string, number>>, layout: VirtualLayout, scrollTop: number, viewportHeight: number, overscan: number) => VirtualWindow;
30
+ export declare const VirtualModel: Schema.Struct<{
31
+ readonly scrollTop: Schema.Number;
32
+ readonly heights: Schema.$Record<Schema.String, Schema.Number>;
33
+ readonly scrolling: Schema.Boolean;
34
+ readonly generation: Schema.Number;
35
+ readonly estimatedHeight: Schema.Number;
36
+ readonly overscan: Schema.Number;
37
+ readonly gap: Schema.Number;
38
+ readonly paddingStart: Schema.Number;
39
+ readonly paddingEnd: Schema.Number;
40
+ }>;
41
+ export type VirtualModel = typeof VirtualModel.Type;
42
+ export declare const VirtualMessage: import("foldkit/message").MessageUnion<{
43
+ readonly Scrolled: {
44
+ top: Schema.Number;
45
+ };
46
+ readonly Measured: {
47
+ key: Schema.String;
48
+ height: Schema.Number;
49
+ };
50
+ /** Drops heights for keys no longer listed: the bundle never sees the key
51
+ order, so the application tells it what left. */
52
+ readonly Prune: {
53
+ keys: Schema.$Array<Schema.String>;
54
+ };
55
+ /** Fires when scrolling has been silent for `settleMs`: only the latest
56
+ generation counts, so a fling's intermediate timers emit nothing. */
57
+ readonly Settled: {
58
+ generation: Schema.Number;
59
+ };
60
+ }>;
61
+ export type VirtualMessage = typeof VirtualMessage.Type;
62
+ /**
63
+ * The rows to render plus the spacer height, from the Model, the key order,
64
+ * and the viewport height. Layout and overscan come from the Model, so the
65
+ * call cannot disagree with the placement. Keys stay the application's:
66
+ * render each row keyed, and per-row placements keep identity.
67
+ */
68
+ export declare const windowFor: (model: VirtualModel, keys: ReadonlyArray<string>, viewportHeight: number) => VirtualWindow & {
69
+ readonly totalHeight: number;
70
+ };
71
+ /**
72
+ * Pixels from the viewport's bottom edge to the content's end: negative
73
+ * past it, zero exactly there. Prefetch thresholds want this number ("load
74
+ * when within 500px"), not just the boolean below.
75
+ */
76
+ export declare const distanceToEnd: (model: VirtualModel, keys: ReadonlyArray<string>, viewportHeight: number) => number;
77
+ /**
78
+ * Whether the viewport rests at (or past) the end, within `threshold`
79
+ * pixels: the infinite-scroll check. An empty list counts as ended — there
80
+ * is nothing to scroll, so more should load. Thresholds below zero clamp
81
+ * to zero.
82
+ */
83
+ export declare const isAtEnd: (model: VirtualModel, keys: ReadonlyArray<string>, viewportHeight: number, threshold?: number) => boolean;
84
+ /**
85
+ * Windowing math for virtualized lists as pure functions: which rows to
86
+ * render, how tall the scrollable area is, and where each row starts. Row
87
+ * heights come from measured values with a per-row estimate fallback, so
88
+ * unmeasured rows still occupy space and measuring later only corrects.
89
+ * Keys are strings; heights are non-negative, and non-finite measurements
90
+ * fall back to the estimate instead of poisoning the sums.
91
+ *
92
+ * The `Virtual` bundle below owns the scroll position and the measured
93
+ * heights; `Viewport` reports container scrolls and `MeasureRow` reports
94
+ * row heights, both as Mounts on the elements they observe. The application
95
+ * renders `windowFor(...)` rows with its own views (keyed, so `each`
96
+ * placements keep identity) inside a spacer of `totalHeight(...)`.
97
+ */
98
+ export declare const Virtual: Bundle.Bundle<"Virtual", {
99
+ readonly estimatedHeight: number;
100
+ readonly overscan: number;
101
+ readonly gap: number;
102
+ readonly paddingStart: number;
103
+ readonly paddingEnd: number;
104
+ readonly settleMs?: number | undefined;
105
+ readonly initialScrollTop?: number | undefined;
106
+ readonly initialHeights?: {
107
+ readonly [x: string]: number;
108
+ } | undefined;
109
+ }, {
110
+ readonly scrollTop: number;
111
+ readonly heights: {
112
+ readonly [x: string]: number;
113
+ };
114
+ readonly scrolling: boolean;
115
+ readonly generation: number;
116
+ readonly estimatedHeight: number;
117
+ readonly overscan: number;
118
+ readonly gap: number;
119
+ readonly paddingStart: number;
120
+ readonly paddingEnd: number;
121
+ }, {
122
+ readonly _tag: "Measured";
123
+ readonly key: string;
124
+ readonly height: number;
125
+ } | {
126
+ readonly _tag: "Prune";
127
+ readonly keys: readonly string[];
128
+ } | {
129
+ readonly _tag: "Scrolled";
130
+ readonly top: number;
131
+ } | {
132
+ readonly _tag: "Settled";
133
+ readonly generation: number;
134
+ }, never, never, never, void, {}, {}>;
135
+ export declare const ViewportScrolled: Schema.TaggedStruct<"ViewportScrolled", {
136
+ readonly top: Schema.Number;
137
+ }>;
138
+ export type ViewportScrolled = typeof ViewportScrolled.Type;
139
+ /**
140
+ * The scroll container's position, reported on its own scrolls starting
141
+ * with the current one. Attach to the scrolling element — viewport scrolls
142
+ * arrive through the window-level scroll entry instead.
143
+ */
144
+ export declare const Viewport: Mount.MountDefinitionNoArgs<"Viewport", {
145
+ readonly _tag: "ViewportScrolled";
146
+ readonly top: number;
147
+ }>;
148
+ export declare const RowMeasured: Schema.TaggedStruct<"RowMeasured", {
149
+ readonly key: Schema.String;
150
+ readonly height: Schema.Number;
151
+ }>;
152
+ export type RowMeasured = typeof RowMeasured.Type;
153
+ /**
154
+ * One row's height, reported on every resize starting with the current
155
+ * one. The key is the application's row identity, echoed back so the
156
+ * parent files the height without tracking which Mount sent what.
157
+ */
158
+ export declare const MeasureRow: Mount.MountDefinitionWithArgs<"MeasureRow", {
159
+ key: Schema.String;
160
+ }, {
161
+ readonly _tag: "RowMeasured";
162
+ readonly key: string;
163
+ readonly height: number;
164
+ }>;
165
+ /**
166
+ * Which section header sticks for a window: the last section starting at
167
+ * or before the first rendered row, or null above the first section. Order
168
+ * independent — the scan takes the maximum, so unsorted input still
169
+ * answers. CSS `position: sticky` does the sticking; this answers *what*
170
+ * sticks, for styling and callbacks.
171
+ */
172
+ export declare const stickyHeader: (sections: ReadonlyArray<{
173
+ readonly key: string;
174
+ readonly index: number;
175
+ }>, startIndex: number) => string | null;
176
+ /** Where `masonry` puts one item: its column and its box, in pixels. */
177
+ export interface MasonryPlacement {
178
+ readonly key: string;
179
+ readonly column: number;
180
+ readonly x: number;
181
+ readonly y: number;
182
+ readonly width: number;
183
+ readonly height: number;
184
+ }
185
+ /**
186
+ * Masonry layout as a pure function: fixed column count and width, each
187
+ * item packed into the currently shortest column. Unmeasured items use the
188
+ * estimate; poisoned heights fall back the same way. This is layout only,
189
+ * not windowing — every placed item renders, so it fits hundreds of images,
190
+ * not hundred-thousands. Needing a windowed grid is a different algorithm.
191
+ */
192
+ export declare const masonry: (keys: ReadonlyArray<string>, heights: Readonly<Record<string, number>>, options: {
193
+ readonly columns: number;
194
+ readonly columnWidth: number;
195
+ readonly gap: number;
196
+ readonly estimatedHeight: number;
197
+ }) => {
198
+ readonly placements: ReadonlyArray<MasonryPlacement>;
199
+ readonly totalHeight: number;
200
+ };
201
+ //# sourceMappingURL=virtual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual.d.ts","names":[],"sources":["../../src/state/virtual.ts"],"mappings":";;;;iBAOiB;;WAEN;;WAEA;;;iBAIM;WACN;WACA;WACA;WACA;;;qBAmEE,cAAW,MAChB,uBAAqB,SAClB,SAAS,yBAAuB,QACjC;;qBAcG,YAAS,eACP,MACP,uBAAqB,SAClB,SAAS,yBAAuB,QACjC;;;;;;;;qBAUG,eAAY,MACjB,uBAAqB,SAClB,SAAS,yBAAuB,QACjC,eAAa,mBACJ,wBACK,qBAErB;qBAmBU,cAAY,OAAA;;;;;;;;;;;YAWb,sBAAsB,aAAa;qBAElC,0CAAc;;IACb,KAAG,OAAA;;;IACH,KAAG,OAAA;IAAiB,QAAM,OAAA;;;;;IAG7B,MAAI,OAAA,OAAA,OAAA;;;;;IAGF,YAAU,OAAA;;;YAEX,wBAAwB,eAAe;;;;;;;qBAetC,YAAS,OACb,cAAY,MACb,uBAAqB,2BAE1B;WAA2B;;;;;;;qBAkBjB,gBAAa,OACjB,cAAY,MACb,uBAAqB;;;;;;;qBAahB,UAAO,OACX,cAAY,MACb,uBAAqB,wBACL;;;;;;;;;;;;;;;qBA2BX,SAAO,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAuGP,kBAAgB,OAAA;;;YACjB,0BAA0B,iBAAiB;;;;;;qBAO1C,UAAQ,MAAA;;;;qBAeR,aAAW,OAAA;;;;YAIZ,qBAAqB,YAAY;;;;;;qBAShC,YAAU,MAAA;;;;;;;;;;;;;;qBAgCV,eAAY,UACb;WAAyB;WAAsB;IAAgB;;iBAe1D;WACN;WACA;WACA;WACA;WACA;WACA;;;;;;;;;qBAUE,UAAO,MACZ,uBAAqB,SAClB,SAAS,yBAAuB;WAE9B;WACA;WACA;WACA;;WAEC,YAAY,cAAc;WAA4B"}