elements-kit 0.0.10 → 0.0.11

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 (310) hide show
  1. package/README.md +3 -4
  2. package/dist/builder/dom.d.mts +1 -1
  3. package/dist/builder/index.d.mts +87 -1
  4. package/dist/builder/index.mjs +1 -1
  5. package/dist/{element-Ddk9YaoE.mjs → element-MXzFk4G2.mjs} +1 -1
  6. package/dist/{index-BtqiEEfc.d.mts → index-Cvdhuy6Y.d.mts} +8 -4
  7. package/dist/index.d.mts +1 -1
  8. package/dist/index.mjs +3 -3
  9. package/dist/{signals/lib → integrations}/react.d.mts +2 -2
  10. package/dist/{signals/lib → integrations}/react.mjs +2 -2
  11. package/dist/jsx-runtime/index.d.mts +2 -2
  12. package/dist/jsx-runtime/index.mjs +3 -3
  13. package/dist/lib-BYJ5jPTG.d.mts +4 -0
  14. package/dist/polyfill-DR5XVnh_.d.mts +9 -0
  15. package/dist/signals/index.d.mts +2 -2
  16. package/dist/signals/index.mjs +2 -2
  17. package/dist/{signals-CLAPw8kk.mjs → signals-DcgXhkU2.mjs} +41 -9
  18. package/dist/slot.d.mts +1 -2
  19. package/dist/{test.BmQO5GaM-CR2qjV1t.mjs → test.BmQO5GaM-ANkhHvbr.mjs} +1 -1
  20. package/dist/utilities/active-element.d.mts +6 -0
  21. package/dist/utilities/active-element.mjs +13 -0
  22. package/dist/utilities/active-element.test.mjs +24 -0
  23. package/dist/{signals/lib → utilities}/debounced.d.mts +3 -3
  24. package/dist/{signals/lib → utilities}/debounced.mjs +7 -6
  25. package/dist/{signals/lib → utilities}/debounced.test.mjs +3 -3
  26. package/dist/{signals/lib → utilities}/element-rect.d.mts +3 -3
  27. package/dist/{signals/lib → utilities}/element-rect.mjs +7 -7
  28. package/dist/{signals/lib → utilities}/element-rect.test.mjs +3 -3
  29. package/dist/utilities/element-scroll.d.mts +16 -0
  30. package/dist/utilities/element-scroll.mjs +52 -0
  31. package/dist/utilities/element-scroll.test.mjs +25 -0
  32. package/dist/{signals/lib → utilities}/event-driven.d.mts +2 -2
  33. package/dist/{signals/lib → utilities}/event-driven.mjs +2 -2
  34. package/dist/utilities/event-listener.d.mts +16 -0
  35. package/dist/{signals/lib → utilities}/event-listener.mjs +4 -4
  36. package/dist/{signals/lib → utilities}/event-listener.test.mjs +8 -8
  37. package/dist/utilities/focus-within.d.mts +10 -0
  38. package/dist/utilities/focus-within.mjs +20 -0
  39. package/dist/{signals/lib/is-focus-within.test.mjs → utilities/focus-within.test.mjs} +10 -11
  40. package/dist/utilities/hover.d.mts +11 -0
  41. package/dist/utilities/hover.mjs +20 -0
  42. package/dist/{signals/lib → utilities}/hover.test.mjs +5 -16
  43. package/dist/utilities/intersection-observer.d.mts +8 -0
  44. package/dist/{signals/lib → utilities}/intersection-observer.mjs +3 -4
  45. package/dist/{signals/lib → utilities}/intersection-observer.test.mjs +3 -3
  46. package/dist/{signals/lib → utilities}/interval.d.mts +2 -2
  47. package/dist/{signals/lib → utilities}/interval.mjs +6 -5
  48. package/dist/{signals/lib → utilities}/interval.test.mjs +3 -3
  49. package/dist/utilities/location.d.mts +24 -0
  50. package/dist/utilities/location.mjs +54 -0
  51. package/dist/utilities/location.test.mjs +60 -0
  52. package/dist/utilities/long-press.d.mts +10 -0
  53. package/dist/utilities/long-press.mjs +27 -0
  54. package/dist/{signals/lib → utilities}/long-press.test.mjs +3 -3
  55. package/dist/{signals/lib → utilities}/media-devices.d.mts +3 -3
  56. package/dist/{signals/lib → utilities}/media-devices.mjs +5 -5
  57. package/dist/{signals/lib → utilities}/media-devices.test.mjs +6 -8
  58. package/dist/utilities/media-player.d.mts +22 -0
  59. package/dist/{signals/lib/video.mjs → utilities/media-player.mjs} +5 -4
  60. package/dist/utilities/media-player.test.mjs +100 -0
  61. package/dist/{signals/lib/media.d.mts → utilities/media-query.d.mts} +4 -4
  62. package/dist/{signals/lib/media.mjs → utilities/media-query.mjs} +6 -6
  63. package/dist/utilities/mutation-observer.d.mts +8 -0
  64. package/dist/{signals/lib → utilities}/mutation-observer.mjs +3 -3
  65. package/dist/{signals/lib → utilities}/mutation-observer.test.mjs +3 -3
  66. package/dist/{signals/lib → utilities}/on-click-outside.d.mts +3 -3
  67. package/dist/utilities/on-click-outside.mjs +17 -0
  68. package/dist/{signals/lib → utilities}/on-click-outside.test.mjs +7 -18
  69. package/dist/utilities/orientation.d.mts +10 -0
  70. package/dist/{signals/lib → utilities}/orientation.mjs +3 -2
  71. package/dist/utilities/previous.d.mts +12 -0
  72. package/dist/utilities/previous.mjs +24 -0
  73. package/dist/utilities/previous.test.mjs +88 -0
  74. package/dist/utilities/resize-observer.d.mts +8 -0
  75. package/dist/{signals/lib → utilities}/resize-observer.mjs +4 -5
  76. package/dist/utilities/routing.d.mts +59 -0
  77. package/dist/utilities/routing.mjs +89 -0
  78. package/dist/utilities/routing.test.mjs +128 -0
  79. package/dist/utilities/search-params.d.mts +13 -0
  80. package/dist/utilities/search-params.mjs +23 -0
  81. package/dist/utilities/search-params.test.mjs +35 -0
  82. package/dist/utilities/storage.d.mts +22 -0
  83. package/dist/utilities/storage.mjs +65 -0
  84. package/dist/utilities/storage.test.mjs +137 -0
  85. package/dist/{signals/lib → utilities}/throttled.d.mts +2 -2
  86. package/dist/utilities/throttled.mjs +36 -0
  87. package/dist/{signals/lib → utilities}/throttled.test.mjs +3 -3
  88. package/dist/{signals/lib → utilities}/timeout.d.mts +6 -5
  89. package/dist/utilities/timeout.mjs +42 -0
  90. package/dist/{signals/lib → utilities}/timeout.test.mjs +7 -7
  91. package/dist/utilities/window-size.d.mts +10 -0
  92. package/dist/utilities/window-size.mjs +22 -0
  93. package/dist/utilities/window-size.test.mjs +42 -0
  94. package/package.json +11 -6
  95. package/dist/index-CKjDUp1B.d.mts +0 -89
  96. package/dist/polyfill-AFIi9kAN.d.mts +0 -14
  97. package/dist/signals/lib/active-element.d.mts +0 -10
  98. package/dist/signals/lib/active-element.mjs +0 -12
  99. package/dist/signals/lib/active-element.test.mjs +0 -39
  100. package/dist/signals/lib/animation-frames.d.mts +0 -18
  101. package/dist/signals/lib/animation-frames.mjs +0 -48
  102. package/dist/signals/lib/animation-frames.test.mjs +0 -52
  103. package/dist/signals/lib/async-retry.d.mts +0 -21
  104. package/dist/signals/lib/async-retry.mjs +0 -57
  105. package/dist/signals/lib/async-retry.test.mjs +0 -57
  106. package/dist/signals/lib/audio.d.mts +0 -21
  107. package/dist/signals/lib/audio.mjs +0 -35
  108. package/dist/signals/lib/audio.test.mjs +0 -57
  109. package/dist/signals/lib/battery.d.mts +0 -17
  110. package/dist/signals/lib/battery.mjs +0 -45
  111. package/dist/signals/lib/battery.test.mjs +0 -38
  112. package/dist/signals/lib/before-unload.d.mts +0 -11
  113. package/dist/signals/lib/before-unload.mjs +0 -20
  114. package/dist/signals/lib/before-unload.test.mjs +0 -29
  115. package/dist/signals/lib/clipboard.d.mts +0 -15
  116. package/dist/signals/lib/clipboard.mjs +0 -25
  117. package/dist/signals/lib/clipboard.test.mjs +0 -53
  118. package/dist/signals/lib/counter.d.mts +0 -18
  119. package/dist/signals/lib/counter.mjs +0 -21
  120. package/dist/signals/lib/counter.test.d.mts +0 -1
  121. package/dist/signals/lib/counter.test.mjs +0 -74
  122. package/dist/signals/lib/document-title.d.mts +0 -10
  123. package/dist/signals/lib/document-title.mjs +0 -15
  124. package/dist/signals/lib/document-title.test.d.mts +0 -1
  125. package/dist/signals/lib/document-title.test.mjs +0 -33
  126. package/dist/signals/lib/element-size.d.mts +0 -16
  127. package/dist/signals/lib/element-size.mjs +0 -32
  128. package/dist/signals/lib/element-size.test.d.mts +0 -1
  129. package/dist/signals/lib/element-size.test.mjs +0 -86
  130. package/dist/signals/lib/event-listener.d.mts +0 -14
  131. package/dist/signals/lib/favicon.d.mts +0 -10
  132. package/dist/signals/lib/favicon.mjs +0 -24
  133. package/dist/signals/lib/favicon.test.d.mts +0 -1
  134. package/dist/signals/lib/favicon.test.mjs +0 -28
  135. package/dist/signals/lib/finite-state-machine.d.mts +0 -22
  136. package/dist/signals/lib/finite-state-machine.mjs +0 -26
  137. package/dist/signals/lib/finite-state-machine.test.d.mts +0 -1
  138. package/dist/signals/lib/finite-state-machine.test.mjs +0 -66
  139. package/dist/signals/lib/fullscreen.d.mts +0 -15
  140. package/dist/signals/lib/fullscreen.mjs +0 -24
  141. package/dist/signals/lib/fullscreen.test.d.mts +0 -1
  142. package/dist/signals/lib/fullscreen.test.mjs +0 -48
  143. package/dist/signals/lib/geolocation.d.mts +0 -15
  144. package/dist/signals/lib/geolocation.mjs +0 -30
  145. package/dist/signals/lib/geolocation.test.d.mts +0 -1
  146. package/dist/signals/lib/geolocation.test.mjs +0 -37
  147. package/dist/signals/lib/hash.d.mts +0 -10
  148. package/dist/signals/lib/hash.mjs +0 -14
  149. package/dist/signals/lib/hash.test.d.mts +0 -1
  150. package/dist/signals/lib/hash.test.mjs +0 -46
  151. package/dist/signals/lib/hover.d.mts +0 -11
  152. package/dist/signals/lib/hover.mjs +0 -23
  153. package/dist/signals/lib/intersection-observer.d.mts +0 -8
  154. package/dist/signals/lib/is-document-visible.d.mts +0 -11
  155. package/dist/signals/lib/is-document-visible.mjs +0 -13
  156. package/dist/signals/lib/is-document-visible.test.d.mts +0 -1
  157. package/dist/signals/lib/is-document-visible.test.mjs +0 -58
  158. package/dist/signals/lib/is-focus-within.d.mts +0 -10
  159. package/dist/signals/lib/is-focus-within.mjs +0 -28
  160. package/dist/signals/lib/is-focus-within.test.d.mts +0 -1
  161. package/dist/signals/lib/is-idle.d.mts +0 -10
  162. package/dist/signals/lib/is-idle.mjs +0 -37
  163. package/dist/signals/lib/is-idle.test.d.mts +0 -1
  164. package/dist/signals/lib/is-idle.test.mjs +0 -50
  165. package/dist/signals/lib/is-in-viewport.d.mts +0 -10
  166. package/dist/signals/lib/is-in-viewport.mjs +0 -16
  167. package/dist/signals/lib/is-in-viewport.test.d.mts +0 -1
  168. package/dist/signals/lib/is-in-viewport.test.mjs +0 -74
  169. package/dist/signals/lib/key-press.d.mts +0 -13
  170. package/dist/signals/lib/key-press.mjs +0 -25
  171. package/dist/signals/lib/key-press.test.d.mts +0 -1
  172. package/dist/signals/lib/key-press.test.mjs +0 -52
  173. package/dist/signals/lib/list.d.mts +0 -19
  174. package/dist/signals/lib/list.mjs +0 -36
  175. package/dist/signals/lib/list.test.d.mts +0 -1
  176. package/dist/signals/lib/list.test.mjs +0 -104
  177. package/dist/signals/lib/lock-body-scroll.d.mts +0 -8
  178. package/dist/signals/lib/lock-body-scroll.mjs +0 -17
  179. package/dist/signals/lib/lock-body-scroll.test.d.mts +0 -1
  180. package/dist/signals/lib/lock-body-scroll.test.mjs +0 -37
  181. package/dist/signals/lib/long-press.d.mts +0 -10
  182. package/dist/signals/lib/long-press.mjs +0 -29
  183. package/dist/signals/lib/map.d.mts +0 -18
  184. package/dist/signals/lib/map.mjs +0 -33
  185. package/dist/signals/lib/map.test.d.mts +0 -1
  186. package/dist/signals/lib/map.test.mjs +0 -60
  187. package/dist/signals/lib/motion.d.mts +0 -15
  188. package/dist/signals/lib/motion.mjs +0 -27
  189. package/dist/signals/lib/motion.test.d.mts +0 -1
  190. package/dist/signals/lib/motion.test.mjs +0 -51
  191. package/dist/signals/lib/mouse-position.d.mts +0 -14
  192. package/dist/signals/lib/mouse-position.mjs +0 -22
  193. package/dist/signals/lib/mouse-position.test.d.mts +0 -1
  194. package/dist/signals/lib/mouse-position.test.mjs +0 -44
  195. package/dist/signals/lib/mouse-wheel.d.mts +0 -10
  196. package/dist/signals/lib/mouse-wheel.mjs +0 -17
  197. package/dist/signals/lib/mouse-wheel.test.d.mts +0 -1
  198. package/dist/signals/lib/mouse-wheel.test.mjs +0 -38
  199. package/dist/signals/lib/mutation-observer.d.mts +0 -8
  200. package/dist/signals/lib/network-state.d.mts +0 -17
  201. package/dist/signals/lib/network-state.mjs +0 -34
  202. package/dist/signals/lib/network-state.test.d.mts +0 -1
  203. package/dist/signals/lib/network-state.test.mjs +0 -61
  204. package/dist/signals/lib/on-click-outside.mjs +0 -20
  205. package/dist/signals/lib/orientation.d.mts +0 -13
  206. package/dist/signals/lib/orientation.test.d.mts +0 -1
  207. package/dist/signals/lib/orientation.test.mjs +0 -43
  208. package/dist/signals/lib/page-leave.d.mts +0 -8
  209. package/dist/signals/lib/page-leave.mjs +0 -12
  210. package/dist/signals/lib/page-leave.test.d.mts +0 -1
  211. package/dist/signals/lib/page-leave.test.mjs +0 -29
  212. package/dist/signals/lib/permission.d.mts +0 -14
  213. package/dist/signals/lib/permission.mjs +0 -26
  214. package/dist/signals/lib/permission.test.d.mts +0 -1
  215. package/dist/signals/lib/permission.test.mjs +0 -50
  216. package/dist/signals/lib/persisted-state.d.mts +0 -11
  217. package/dist/signals/lib/persisted-state.mjs +0 -25
  218. package/dist/signals/lib/persisted-state.test.d.mts +0 -1
  219. package/dist/signals/lib/persisted-state.test.mjs +0 -70
  220. package/dist/signals/lib/pressed-keys.d.mts +0 -10
  221. package/dist/signals/lib/pressed-keys.mjs +0 -32
  222. package/dist/signals/lib/pressed-keys.test.d.mts +0 -1
  223. package/dist/signals/lib/pressed-keys.test.mjs +0 -54
  224. package/dist/signals/lib/previous-distinct.d.mts +0 -10
  225. package/dist/signals/lib/previous-distinct.mjs +0 -22
  226. package/dist/signals/lib/previous-distinct.test.d.mts +0 -1
  227. package/dist/signals/lib/previous-distinct.test.mjs +0 -50
  228. package/dist/signals/lib/previous.d.mts +0 -10
  229. package/dist/signals/lib/previous.mjs +0 -18
  230. package/dist/signals/lib/previous.test.mjs +0 -47
  231. package/dist/signals/lib/queue.d.mts +0 -17
  232. package/dist/signals/lib/queue.mjs +0 -28
  233. package/dist/signals/lib/queue.test.d.mts +0 -1
  234. package/dist/signals/lib/queue.test.mjs +0 -61
  235. package/dist/signals/lib/raf.d.mts +0 -17
  236. package/dist/signals/lib/raf.mjs +0 -38
  237. package/dist/signals/lib/raf.test.d.mts +0 -1
  238. package/dist/signals/lib/raf.test.mjs +0 -58
  239. package/dist/signals/lib/resize-observer.d.mts +0 -8
  240. package/dist/signals/lib/resize-observer.test.d.mts +0 -1
  241. package/dist/signals/lib/resize-observer.test.mjs +0 -44
  242. package/dist/signals/lib/resource.d.mts +0 -23
  243. package/dist/signals/lib/resource.mjs +0 -43
  244. package/dist/signals/lib/resource.test.d.mts +0 -1
  245. package/dist/signals/lib/resource.test.mjs +0 -56
  246. package/dist/signals/lib/scroll-state.d.mts +0 -19
  247. package/dist/signals/lib/scroll-state.mjs +0 -46
  248. package/dist/signals/lib/scroll-state.test.d.mts +0 -1
  249. package/dist/signals/lib/scroll-state.test.mjs +0 -94
  250. package/dist/signals/lib/scrolling.d.mts +0 -12
  251. package/dist/signals/lib/scrolling.mjs +0 -26
  252. package/dist/signals/lib/scrolling.test.d.mts +0 -1
  253. package/dist/signals/lib/scrolling.test.mjs +0 -57
  254. package/dist/signals/lib/search-params.d.mts +0 -16
  255. package/dist/signals/lib/search-params.mjs +0 -37
  256. package/dist/signals/lib/search-params.test.mjs +0 -56
  257. package/dist/signals/lib/set.d.mts +0 -18
  258. package/dist/signals/lib/set.mjs +0 -38
  259. package/dist/signals/lib/set.test.d.mts +0 -1
  260. package/dist/signals/lib/set.test.mjs +0 -70
  261. package/dist/signals/lib/start-typing.d.mts +0 -9
  262. package/dist/signals/lib/start-typing.mjs +0 -39
  263. package/dist/signals/lib/start-typing.test.d.mts +0 -1
  264. package/dist/signals/lib/start-typing.test.mjs +0 -64
  265. package/dist/signals/lib/state-history.d.mts +0 -21
  266. package/dist/signals/lib/state-history.mjs +0 -61
  267. package/dist/signals/lib/state-history.test.d.mts +0 -1
  268. package/dist/signals/lib/state-history.test.mjs +0 -106
  269. package/dist/signals/lib/state-validator.d.mts +0 -16
  270. package/dist/signals/lib/state-validator.mjs +0 -21
  271. package/dist/signals/lib/state-validator.test.d.mts +0 -1
  272. package/dist/signals/lib/state-validator.test.mjs +0 -41
  273. package/dist/signals/lib/throttled.mjs +0 -45
  274. package/dist/signals/lib/timeout.mjs +0 -39
  275. package/dist/signals/lib/toggle.d.mts +0 -12
  276. package/dist/signals/lib/toggle.mjs +0 -12
  277. package/dist/signals/lib/toggle.test.d.mts +0 -1
  278. package/dist/signals/lib/toggle.test.mjs +0 -43
  279. package/dist/signals/lib/video.d.mts +0 -21
  280. package/dist/signals/lib/video.test.d.mts +0 -1
  281. package/dist/signals/lib/video.test.mjs +0 -51
  282. package/dist/signals/lib/watch.d.mts +0 -16
  283. package/dist/signals/lib/watch.mjs +0 -31
  284. package/dist/signals/lib/watch.test.d.mts +0 -1
  285. package/dist/signals/lib/watch.test.mjs +0 -51
  286. package/dist/signals/lib/window-size.d.mts +0 -14
  287. package/dist/signals/lib/window-size.mjs +0 -21
  288. package/dist/signals/lib/window-size.test.mjs +0 -50
  289. /package/dist/{signals/lib → utilities}/active-element.test.d.mts +0 -0
  290. /package/dist/{signals/lib → utilities}/debounced.test.d.mts +0 -0
  291. /package/dist/{signals/lib → utilities}/element-rect.test.d.mts +0 -0
  292. /package/dist/{signals/lib/animation-frames.test.d.mts → utilities/element-scroll.test.d.mts} +0 -0
  293. /package/dist/{signals/lib → utilities}/event-listener.test.d.mts +0 -0
  294. /package/dist/{signals/lib/async-retry.test.d.mts → utilities/focus-within.test.d.mts} +0 -0
  295. /package/dist/{signals/lib → utilities}/hover.test.d.mts +0 -0
  296. /package/dist/{signals/lib → utilities}/intersection-observer.test.d.mts +0 -0
  297. /package/dist/{signals/lib → utilities}/interval.test.d.mts +0 -0
  298. /package/dist/{signals/lib/audio.test.d.mts → utilities/location.test.d.mts} +0 -0
  299. /package/dist/{signals/lib → utilities}/long-press.test.d.mts +0 -0
  300. /package/dist/{signals/lib → utilities}/media-devices.test.d.mts +0 -0
  301. /package/dist/{signals/lib/battery.test.d.mts → utilities/media-player.test.d.mts} +0 -0
  302. /package/dist/{signals/lib → utilities}/mutation-observer.test.d.mts +0 -0
  303. /package/dist/{signals/lib → utilities}/on-click-outside.test.d.mts +0 -0
  304. /package/dist/{signals/lib → utilities}/previous.test.d.mts +0 -0
  305. /package/dist/{signals/lib/before-unload.test.d.mts → utilities/routing.test.d.mts} +0 -0
  306. /package/dist/{signals/lib → utilities}/search-params.test.d.mts +0 -0
  307. /package/dist/{signals/lib/clipboard.test.d.mts → utilities/storage.test.d.mts} +0 -0
  308. /package/dist/{signals/lib → utilities}/throttled.test.d.mts +0 -0
  309. /package/dist/{signals/lib → utilities}/timeout.test.d.mts +0 -0
  310. /package/dist/{signals/lib → utilities}/window-size.test.d.mts +0 -0
@@ -1,61 +0,0 @@
1
- import { a as effect, f as signal } from "../../signals-CLAPw8kk.mjs";
2
- //#region src/signals/lib/state-history.ts
3
- /**
4
- * Tracks the history of a reactive getter, providing `undo` and `redo`.
5
- *
6
- * @param getter - A reactive getter whose value is tracked.
7
- * @param capacity - Maximum number of history entries (default: 100).
8
- */
9
- function createStateHistory(getter, capacity = 100) {
10
- const history = signal([getter()]);
11
- const index = signal(0);
12
- let paused = false;
13
- let firstRun = true;
14
- effect(() => {
15
- const next = getter();
16
- if (paused) return;
17
- if (firstRun) {
18
- firstRun = false;
19
- return;
20
- }
21
- const hist = history();
22
- const idx = index();
23
- const trimmed = hist.slice(0, idx + 1);
24
- trimmed.push(next);
25
- if (trimmed.length > capacity) trimmed.shift();
26
- history(trimmed);
27
- index(trimmed.length - 1);
28
- });
29
- const canUndo = () => index() > 0;
30
- const canRedo = () => index() < history().length - 1;
31
- const undo = () => {
32
- if (!canUndo()) return;
33
- paused = true;
34
- index(index() - 1);
35
- paused = false;
36
- };
37
- const redo = () => {
38
- if (!canRedo()) return;
39
- paused = true;
40
- index(index() + 1);
41
- paused = false;
42
- };
43
- const clear = () => {
44
- const current = getter();
45
- paused = true;
46
- history([current]);
47
- index(0);
48
- paused = false;
49
- };
50
- return {
51
- history,
52
- index,
53
- canUndo,
54
- canRedo,
55
- undo,
56
- redo,
57
- clear
58
- };
59
- }
60
- //#endregion
61
- export { createStateHistory };
@@ -1 +0,0 @@
1
- export { };
@@ -1,106 +0,0 @@
1
- import { f as signal, o as effectScope } from "../../signals-CLAPw8kk.mjs";
2
- import { a as describe, o as it, r as afterEach, t as globalExpect } from "../../test.BmQO5GaM-CR2qjV1t.mjs";
3
- import { createStateHistory } from "./state-history.mjs";
4
- //#region src/signals/lib/state-history.test.ts
5
- afterEach(() => {
6
- document.body.innerHTML = "";
7
- });
8
- describe("createStateHistory", () => {
9
- it("starts with the current getter value in history", () => {
10
- const s = signal(0);
11
- let h;
12
- effectScope(() => {
13
- h = createStateHistory(() => s());
14
- });
15
- globalExpect(h.history()).toEqual([0]);
16
- globalExpect(h.index()).toBe(0);
17
- });
18
- it("records new values", () => {
19
- const s = signal(0);
20
- let h;
21
- effectScope(() => {
22
- h = createStateHistory(() => s());
23
- });
24
- s(1);
25
- s(2);
26
- globalExpect(h.history()).toEqual([
27
- 0,
28
- 1,
29
- 2
30
- ]);
31
- globalExpect(h.index()).toBe(2);
32
- });
33
- it("canUndo is false initially", () => {
34
- const s = signal(0);
35
- let h;
36
- effectScope(() => {
37
- h = createStateHistory(() => s());
38
- });
39
- globalExpect(h.canUndo()).toBe(false);
40
- });
41
- it("canUndo is true after a change", () => {
42
- const s = signal(0);
43
- let h;
44
- effectScope(() => {
45
- h = createStateHistory(() => s());
46
- });
47
- s(1);
48
- globalExpect(h.canUndo()).toBe(true);
49
- });
50
- it("undo moves the index back", () => {
51
- const s = signal(0);
52
- let h;
53
- effectScope(() => {
54
- h = createStateHistory(() => s());
55
- });
56
- s(1);
57
- s(2);
58
- h.undo();
59
- globalExpect(h.index()).toBe(1);
60
- globalExpect(h.canRedo()).toBe(true);
61
- });
62
- it("redo moves the index forward", () => {
63
- const s = signal(0);
64
- let h;
65
- effectScope(() => {
66
- h = createStateHistory(() => s());
67
- });
68
- s(1);
69
- s(2);
70
- h.undo();
71
- h.redo();
72
- globalExpect(h.index()).toBe(2);
73
- globalExpect(h.canRedo()).toBe(false);
74
- });
75
- it("new change after undo drops the future", () => {
76
- const s = signal(0);
77
- let h;
78
- effectScope(() => {
79
- h = createStateHistory(() => s());
80
- });
81
- s(1);
82
- s(2);
83
- h.undo();
84
- s(3);
85
- globalExpect(h.history()).toEqual([
86
- 0,
87
- 1,
88
- 3
89
- ]);
90
- globalExpect(h.canRedo()).toBe(false);
91
- });
92
- it("clear resets history to the current value", () => {
93
- const s = signal(0);
94
- let h;
95
- effectScope(() => {
96
- h = createStateHistory(() => s());
97
- });
98
- s(1);
99
- s(2);
100
- h.clear();
101
- globalExpect(h.history()).toEqual([2]);
102
- globalExpect(h.index()).toBe(0);
103
- });
104
- });
105
- //#endregion
106
- export {};
@@ -1,16 +0,0 @@
1
- import { t as Computed } from "../../index-BtqiEEfc.mjs";
2
-
3
- //#region src/signals/lib/state-validator.d.ts
4
- type StateValidatorResult<E> = {
5
- errors: Computed<E | null>;
6
- isValid: Computed<boolean>;
7
- };
8
- /**
9
- * Runs `validator` reactively against a getter's value and exposes the result
10
- * as `errors` and `isValid` computeds.
11
- *
12
- * Return `null` from `validator` to indicate no error.
13
- */
14
- declare function createStateValidator<T, E>(getter: () => T, validator: (value: T) => E | null): StateValidatorResult<E>;
15
- //#endregion
16
- export { createStateValidator };
@@ -1,21 +0,0 @@
1
- import { a as effect, f as signal } from "../../signals-CLAPw8kk.mjs";
2
- //#region src/signals/lib/state-validator.ts
3
- /**
4
- * Runs `validator` reactively against a getter's value and exposes the result
5
- * as `errors` and `isValid` computeds.
6
- *
7
- * Return `null` from `validator` to indicate no error.
8
- */
9
- function createStateValidator(getter, validator) {
10
- const errors = signal(null);
11
- effect(() => {
12
- errors(validator(getter()));
13
- });
14
- const isValid = () => errors() === null;
15
- return {
16
- errors,
17
- isValid
18
- };
19
- }
20
- //#endregion
21
- export { createStateValidator };
@@ -1 +0,0 @@
1
- export { };
@@ -1,41 +0,0 @@
1
- import { f as signal, o as effectScope } from "../../signals-CLAPw8kk.mjs";
2
- import { a as describe, o as it, r as afterEach, t as globalExpect } from "../../test.BmQO5GaM-CR2qjV1t.mjs";
3
- import { createStateValidator } from "./state-validator.mjs";
4
- //#region src/signals/lib/state-validator.test.ts
5
- afterEach(() => {
6
- document.body.innerHTML = "";
7
- });
8
- describe("createStateValidator", () => {
9
- it("starts with validator result of the initial value", () => {
10
- const s = signal("");
11
- let v;
12
- effectScope(() => {
13
- v = createStateValidator(() => s(), (value) => value.length < 3 ? "Too short" : null);
14
- });
15
- globalExpect(v.errors()).toBe("Too short");
16
- globalExpect(v.isValid()).toBe(false);
17
- });
18
- it("becomes valid when constraint is met", () => {
19
- const s = signal("");
20
- let v;
21
- effectScope(() => {
22
- v = createStateValidator(() => s(), (value) => value.length < 3 ? "Too short" : null);
23
- });
24
- s("hello");
25
- globalExpect(v.errors()).toBeNull();
26
- globalExpect(v.isValid()).toBe(true);
27
- });
28
- it("re-validates when the source changes", () => {
29
- const s = signal(5);
30
- let v;
31
- effectScope(() => {
32
- v = createStateValidator(() => s(), (n) => n > 10 ? "Too big" : null);
33
- });
34
- globalExpect(v.isValid()).toBe(true);
35
- s(15);
36
- globalExpect(v.errors()).toBe("Too big");
37
- globalExpect(v.isValid()).toBe(false);
38
- });
39
- });
40
- //#endregion
41
- export {};
@@ -1,45 +0,0 @@
1
- import { a as effect, d as onCleanup, f as signal } from "../../signals-CLAPw8kk.mjs";
2
- //#region src/signals/lib/throttled.ts
3
- /**
4
- * Returns a `Computed` that mirrors `getter` but updates at most once per
5
- * `interval` milliseconds. A trailing-edge update is scheduled so the final
6
- * value is never lost.
7
- *
8
- * The initial value is read synchronously.
9
- */
10
- function createThrottled(getter, interval) {
11
- const s = signal(getter());
12
- let lastRun = -Infinity;
13
- let trailingTimer;
14
- let firstRun = true;
15
- effect(() => {
16
- const latest = getter();
17
- if (firstRun) {
18
- firstRun = false;
19
- return;
20
- }
21
- const now = Date.now();
22
- const elapsed = now - lastRun;
23
- if (trailingTimer !== void 0) {
24
- clearTimeout(trailingTimer);
25
- trailingTimer = void 0;
26
- }
27
- if (elapsed >= interval) {
28
- lastRun = now;
29
- s(latest);
30
- } else {
31
- trailingTimer = setTimeout(() => {
32
- lastRun = Date.now();
33
- trailingTimer = void 0;
34
- s(latest);
35
- }, interval - elapsed);
36
- onCleanup(() => {
37
- clearTimeout(trailingTimer);
38
- trailingTimer = void 0;
39
- });
40
- }
41
- });
42
- return s;
43
- }
44
- //#endregion
45
- export { createThrottled };
@@ -1,39 +0,0 @@
1
- import { d as onCleanup, f as signal } from "../../signals-CLAPw8kk.mjs";
2
- //#region src/signals/lib/timeout.ts
3
- /**
4
- * Reactive `setTimeout` wrapper with pause/resume/reset control.
5
- * The callback fires once after `delay` ms. Starts running immediately.
6
- */
7
- function createTimeout(callback, delay) {
8
- const isPending = signal(false);
9
- let id;
10
- const stop = () => {
11
- clearTimeout(id);
12
- id = void 0;
13
- isPending(false);
14
- };
15
- const start = () => {
16
- if (isPending()) return;
17
- isPending(true);
18
- id = setTimeout(() => {
19
- isPending(false);
20
- id = void 0;
21
- callback();
22
- }, delay);
23
- };
24
- const reset = () => {
25
- stop();
26
- start();
27
- };
28
- start();
29
- const cleanup = () => stop();
30
- onCleanup(cleanup);
31
- return Object.assign({
32
- isPending,
33
- start,
34
- stop,
35
- reset
36
- }, { [Symbol.dispose]: cleanup });
37
- }
38
- //#endregion
39
- export { createTimeout };
@@ -1,12 +0,0 @@
1
- import { n as Signal } from "../../index-BtqiEEfc.mjs";
2
-
3
- //#region src/signals/lib/toggle.d.ts
4
- type ToggleResult = Signal<boolean> & {
5
- toggle(): void;
6
- };
7
- /**
8
- * Returns a boolean `Signal` with an additional `toggle()` helper.
9
- */
10
- declare function createToggle(initial?: boolean): ToggleResult;
11
- //#endregion
12
- export { createToggle };
@@ -1,12 +0,0 @@
1
- import { f as signal } from "../../signals-CLAPw8kk.mjs";
2
- //#region src/signals/lib/toggle.ts
3
- /**
4
- * Returns a boolean `Signal` with an additional `toggle()` helper.
5
- */
6
- function createToggle(initial = false) {
7
- const s = signal(initial);
8
- const toggle = () => s(!s());
9
- return Object.assign(s, { toggle });
10
- }
11
- //#endregion
12
- export { createToggle };
@@ -1 +0,0 @@
1
- export { };
@@ -1,43 +0,0 @@
1
- import { o as effectScope } from "../../signals-CLAPw8kk.mjs";
2
- import { a as describe, o as it, r as afterEach, t as globalExpect } from "../../test.BmQO5GaM-CR2qjV1t.mjs";
3
- import { createToggle } from "./toggle.mjs";
4
- //#region src/signals/lib/toggle.test.ts
5
- afterEach(() => {
6
- document.body.innerHTML = "";
7
- });
8
- describe("createToggle", () => {
9
- it("starts as false by default", () => {
10
- let t;
11
- effectScope(() => {
12
- t = createToggle();
13
- });
14
- globalExpect(t()).toBe(false);
15
- });
16
- it("starts with provided initial value", () => {
17
- let t;
18
- effectScope(() => {
19
- t = createToggle(true);
20
- });
21
- globalExpect(t()).toBe(true);
22
- });
23
- it("toggle() flips the value", () => {
24
- let t;
25
- effectScope(() => {
26
- t = createToggle(false);
27
- });
28
- t.toggle();
29
- globalExpect(t()).toBe(true);
30
- t.toggle();
31
- globalExpect(t()).toBe(false);
32
- });
33
- it("can be set directly via signal call", () => {
34
- let t;
35
- effectScope(() => {
36
- t = createToggle();
37
- });
38
- t(true);
39
- globalExpect(t()).toBe(true);
40
- });
41
- });
42
- //#endregion
43
- export {};
@@ -1,21 +0,0 @@
1
- import { n as Signal, t as Computed } from "../../index-BtqiEEfc.mjs";
2
-
3
- //#region src/signals/lib/video.d.ts
4
- type VideoResult = {
5
- element: HTMLVideoElement;
6
- playing: Computed<boolean>;
7
- muted: Signal<boolean>;
8
- volume: Signal<number>;
9
- duration: Computed<number>;
10
- time: Signal<number>;
11
- ended: Computed<boolean>;
12
- play(): void;
13
- pause(): void;
14
- toggle(): void;
15
- } & Disposable;
16
- /**
17
- * Wraps an `HTMLVideoElement` with reactive state and playback controls.
18
- */
19
- declare function createVideo(element: HTMLVideoElement): VideoResult;
20
- //#endregion
21
- export { createVideo };
@@ -1 +0,0 @@
1
- export { };
@@ -1,51 +0,0 @@
1
- import { o as effectScope } from "../../signals-CLAPw8kk.mjs";
2
- import { a as describe, n as vi, o as it, r as afterEach, t as globalExpect } from "../../test.BmQO5GaM-CR2qjV1t.mjs";
3
- import { createVideo } from "./video.mjs";
4
- //#region src/signals/lib/video.test.ts
5
- afterEach(() => {
6
- document.body.innerHTML = "";
7
- vi.restoreAllMocks();
8
- });
9
- describe("createVideo", () => {
10
- it("accepts an HTMLVideoElement", () => {
11
- const el = document.createElement("video");
12
- document.body.appendChild(el);
13
- let v;
14
- effectScope(() => {
15
- v = createVideo(el);
16
- });
17
- globalExpect(v.element).toBe(el);
18
- });
19
- it("starts as paused", () => {
20
- const el = document.createElement("video");
21
- document.body.appendChild(el);
22
- let v;
23
- effectScope(() => {
24
- v = createVideo(el);
25
- });
26
- globalExpect(v.playing()).toBe(false);
27
- });
28
- it("time(v) updates currentTime", () => {
29
- const el = document.createElement("video");
30
- document.body.appendChild(el);
31
- let v;
32
- effectScope(() => {
33
- v = createVideo(el);
34
- });
35
- v.time(30);
36
- globalExpect(el.currentTime).toBe(30);
37
- });
38
- it("removes event listeners when scope is disposed", () => {
39
- const el = document.createElement("video");
40
- document.body.appendChild(el);
41
- let dispose;
42
- dispose = effectScope(() => {
43
- createVideo(el);
44
- });
45
- const removeSpy = vi.spyOn(el, "removeEventListener");
46
- dispose();
47
- globalExpect(removeSpy).toHaveBeenCalled();
48
- });
49
- });
50
- //#endregion
51
- export {};
@@ -1,16 +0,0 @@
1
- //#region src/signals/lib/watch.d.ts
2
- /**
3
- * Watches a reactive `source` getter and runs `callback` whenever the source
4
- * changes, skipping the initial run.
5
- *
6
- * ```ts
7
- * const count = signal(0);
8
- * createWatch(() => count(), (value, prev) => console.log(value, prev));
9
- * count(1); // logs: 1, 0
10
- * ```
11
- *
12
- * @returns A disposal function.
13
- */
14
- declare function createWatch<T>(source: () => T, callback: (value: T, prev: T | undefined) => void): () => void;
15
- //#endregion
16
- export { createWatch };
@@ -1,31 +0,0 @@
1
- import { a as effect, m as untracked } from "../../signals-CLAPw8kk.mjs";
2
- //#region src/signals/lib/watch.ts
3
- /**
4
- * Watches a reactive `source` getter and runs `callback` whenever the source
5
- * changes, skipping the initial run.
6
- *
7
- * ```ts
8
- * const count = signal(0);
9
- * createWatch(() => count(), (value, prev) => console.log(value, prev));
10
- * count(1); // logs: 1, 0
11
- * ```
12
- *
13
- * @returns A disposal function.
14
- */
15
- function createWatch(source, callback) {
16
- let prev;
17
- let firstRun = true;
18
- return effect(() => {
19
- const value = source();
20
- if (firstRun) {
21
- firstRun = false;
22
- prev = value;
23
- return;
24
- }
25
- const p = prev;
26
- prev = value;
27
- untracked(() => callback(value, p));
28
- });
29
- }
30
- //#endregion
31
- export { createWatch };
@@ -1 +0,0 @@
1
- export { };
@@ -1,51 +0,0 @@
1
- import { f as signal, o as effectScope } from "../../signals-CLAPw8kk.mjs";
2
- import { a as describe, n as vi, o as it, r as afterEach, t as globalExpect } from "../../test.BmQO5GaM-CR2qjV1t.mjs";
3
- import { createWatch } from "./watch.mjs";
4
- //#region src/signals/lib/watch.test.ts
5
- afterEach(() => {
6
- document.body.innerHTML = "";
7
- });
8
- describe("createWatch", () => {
9
- it("does not call callback on initial run", () => {
10
- const s = signal(0);
11
- const cb = vi.fn();
12
- effectScope(() => {
13
- createWatch(() => s(), cb);
14
- });
15
- globalExpect(cb).not.toHaveBeenCalled();
16
- });
17
- it("calls callback when the source changes", () => {
18
- const s = signal(0);
19
- const cb = vi.fn();
20
- effectScope(() => {
21
- createWatch(() => s(), cb);
22
- });
23
- s(1);
24
- globalExpect(cb).toHaveBeenCalledOnce();
25
- globalExpect(cb).toHaveBeenCalledWith(1, 0);
26
- });
27
- it("passes the previous value correctly", () => {
28
- const s = signal("a");
29
- const cb = vi.fn();
30
- effectScope(() => {
31
- createWatch(() => s(), cb);
32
- });
33
- s("b");
34
- s("c");
35
- globalExpect(cb).toHaveBeenNthCalledWith(1, "b", "a");
36
- globalExpect(cb).toHaveBeenNthCalledWith(2, "c", "b");
37
- });
38
- it("disposal stops the watch", () => {
39
- const s = signal(0);
40
- const cb = vi.fn();
41
- let stop;
42
- effectScope(() => {
43
- stop = createWatch(() => s(), cb);
44
- });
45
- stop();
46
- s(1);
47
- globalExpect(cb).not.toHaveBeenCalled();
48
- });
49
- });
50
- //#endregion
51
- export {};
@@ -1,14 +0,0 @@
1
- import { t as Computed } from "../../index-BtqiEEfc.mjs";
2
-
3
- //#region src/signals/lib/window-size.d.ts
4
- type WindowSizeResult = {
5
- width: Computed<number>;
6
- height: Computed<number>;
7
- } & Disposable;
8
- /**
9
- * Returns reactive `width` and `height` signals tracking the browser window
10
- * inner dimensions.
11
- */
12
- declare function createWindowSize(): WindowSizeResult;
13
- //#endregion
14
- export { createWindowSize };
@@ -1,21 +0,0 @@
1
- import { fromEvent, sync } from "./event-driven.mjs";
2
- //#region src/signals/lib/window-size.ts
3
- /**
4
- * Returns reactive `width` and `height` signals tracking the browser window
5
- * inner dimensions.
6
- */
7
- function createWindowSize() {
8
- const subscribe = fromEvent(window, "resize");
9
- const [width, stopWidth] = sync(subscribe, () => typeof window !== "undefined" ? window.innerWidth : 0);
10
- const [height, stopHeight] = sync(subscribe, () => typeof window !== "undefined" ? window.innerHeight : 0);
11
- return {
12
- width,
13
- height,
14
- [Symbol.dispose]: () => {
15
- stopWidth();
16
- stopHeight();
17
- }
18
- };
19
- }
20
- //#endregion
21
- export { createWindowSize };
@@ -1,50 +0,0 @@
1
- import { o as effectScope } from "../../signals-CLAPw8kk.mjs";
2
- import { a as describe, o as it, r as afterEach, t as globalExpect } from "../../test.BmQO5GaM-CR2qjV1t.mjs";
3
- import { createWindowSize } from "./window-size.mjs";
4
- //#region src/signals/lib/window-size.test.ts
5
- afterEach(() => {
6
- document.body.innerHTML = "";
7
- });
8
- describe("createWindowSize", () => {
9
- it("starts with current window dimensions", () => {
10
- let ws;
11
- effectScope(() => {
12
- ws = createWindowSize();
13
- });
14
- globalExpect(ws.width()).toBe(window.innerWidth);
15
- globalExpect(ws.height()).toBe(window.innerHeight);
16
- });
17
- it("updates on resize event", () => {
18
- let ws;
19
- effectScope(() => {
20
- ws = createWindowSize();
21
- });
22
- Object.defineProperty(window, "innerWidth", {
23
- configurable: true,
24
- get: () => 1024
25
- });
26
- Object.defineProperty(window, "innerHeight", {
27
- configurable: true,
28
- get: () => 768
29
- });
30
- window.dispatchEvent(new Event("resize"));
31
- globalExpect(ws.width()).toBe(1024);
32
- globalExpect(ws.height()).toBe(768);
33
- });
34
- it("stops reacting after Symbol.dispose", () => {
35
- let ws;
36
- effectScope(() => {
37
- ws = createWindowSize();
38
- });
39
- const w0 = ws.width();
40
- ws[Symbol.dispose]();
41
- Object.defineProperty(window, "innerWidth", {
42
- configurable: true,
43
- get: () => 9999
44
- });
45
- window.dispatchEvent(new Event("resize"));
46
- globalExpect(ws.width()).toBe(w0);
47
- });
48
- });
49
- //#endregion
50
- export {};