elements-kit 0.0.7 → 0.0.9

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 (265) hide show
  1. package/README.md +3 -3
  2. package/dist/builder/dom.d.mts +1 -1
  3. package/dist/builder/index.d.mts +1 -1
  4. package/dist/builder/index.mjs +1 -2
  5. package/dist/{element-Ddri9UFx.mjs → element-Ddk9YaoE.mjs} +2 -3
  6. package/dist/{index-BGKVkZ6y.d.mts → index-BtqiEEfc.d.mts} +1 -1
  7. package/dist/{index-Ukqj0EcT.d.mts → index-CKjDUp1B.d.mts} +1 -1
  8. package/dist/index.mjs +1 -1
  9. package/dist/jsx-runtime/index.d.mts +1 -1
  10. package/dist/jsx-runtime/index.mjs +1 -1
  11. package/dist/magic-string.es-i62WTP6J.mjs +1011 -0
  12. package/dist/signals/index.d.mts +1 -1
  13. package/dist/signals/lib/active-element.d.mts +10 -0
  14. package/dist/signals/lib/active-element.mjs +20 -0
  15. package/dist/signals/lib/active-element.test.d.mts +1 -0
  16. package/dist/signals/lib/active-element.test.mjs +39 -0
  17. package/dist/signals/lib/animation-frames.d.mts +18 -0
  18. package/dist/signals/lib/animation-frames.mjs +48 -0
  19. package/dist/signals/lib/animation-frames.test.d.mts +1 -0
  20. package/dist/signals/lib/animation-frames.test.mjs +52 -0
  21. package/dist/signals/lib/async-retry.d.mts +21 -0
  22. package/dist/signals/lib/async-retry.mjs +57 -0
  23. package/dist/signals/lib/async-retry.test.d.mts +1 -0
  24. package/dist/signals/lib/async-retry.test.mjs +57 -0
  25. package/dist/signals/lib/audio.d.mts +26 -0
  26. package/dist/signals/lib/audio.mjs +60 -0
  27. package/dist/signals/lib/audio.test.d.mts +1 -0
  28. package/dist/signals/lib/audio.test.mjs +54 -0
  29. package/dist/signals/lib/battery.d.mts +17 -0
  30. package/dist/signals/lib/battery.mjs +45 -0
  31. package/dist/signals/lib/battery.test.d.mts +1 -0
  32. package/dist/signals/lib/battery.test.mjs +38 -0
  33. package/dist/signals/lib/before-unload.d.mts +11 -0
  34. package/dist/signals/lib/before-unload.mjs +20 -0
  35. package/dist/signals/lib/before-unload.test.d.mts +1 -0
  36. package/dist/signals/lib/before-unload.test.mjs +29 -0
  37. package/dist/signals/lib/clipboard.d.mts +15 -0
  38. package/dist/signals/lib/clipboard.mjs +25 -0
  39. package/dist/signals/lib/clipboard.test.d.mts +1 -0
  40. package/dist/signals/lib/clipboard.test.mjs +53 -0
  41. package/dist/signals/lib/counter.d.mts +18 -0
  42. package/dist/signals/lib/counter.mjs +21 -0
  43. package/dist/signals/lib/counter.test.d.mts +1 -0
  44. package/dist/signals/lib/counter.test.mjs +74 -0
  45. package/dist/signals/lib/debounced.d.mts +12 -0
  46. package/dist/signals/lib/debounced.mjs +20 -0
  47. package/dist/signals/lib/debounced.test.d.mts +1 -0
  48. package/dist/signals/lib/debounced.test.mjs +66 -0
  49. package/dist/signals/lib/document-title.d.mts +10 -0
  50. package/dist/signals/lib/document-title.mjs +15 -0
  51. package/dist/signals/lib/document-title.test.d.mts +1 -0
  52. package/dist/signals/lib/document-title.test.mjs +33 -0
  53. package/dist/signals/lib/element-rect.d.mts +21 -0
  54. package/dist/signals/lib/element-rect.mjs +46 -0
  55. package/dist/signals/lib/element-rect.test.d.mts +1 -0
  56. package/dist/signals/lib/element-rect.test.mjs +99 -0
  57. package/dist/signals/lib/element-size.d.mts +16 -0
  58. package/dist/signals/lib/element-size.mjs +32 -0
  59. package/dist/signals/lib/element-size.test.d.mts +1 -0
  60. package/dist/signals/lib/element-size.test.mjs +86 -0
  61. package/dist/signals/lib/event-listener.d.mts +14 -0
  62. package/dist/signals/lib/event-listener.mjs +28 -0
  63. package/dist/signals/lib/event-listener.test.d.mts +1 -0
  64. package/dist/signals/lib/event-listener.test.mjs +58 -0
  65. package/dist/signals/lib/favicon.d.mts +10 -0
  66. package/dist/signals/lib/favicon.mjs +24 -0
  67. package/dist/signals/lib/favicon.test.d.mts +1 -0
  68. package/dist/signals/lib/favicon.test.mjs +28 -0
  69. package/dist/signals/lib/finite-state-machine.d.mts +22 -0
  70. package/dist/signals/lib/finite-state-machine.mjs +26 -0
  71. package/dist/signals/lib/finite-state-machine.test.d.mts +1 -0
  72. package/dist/signals/lib/finite-state-machine.test.mjs +66 -0
  73. package/dist/signals/lib/fullscreen.d.mts +15 -0
  74. package/dist/signals/lib/fullscreen.mjs +26 -0
  75. package/dist/signals/lib/fullscreen.test.d.mts +1 -0
  76. package/dist/signals/lib/fullscreen.test.mjs +56 -0
  77. package/dist/signals/lib/geolocation.d.mts +15 -0
  78. package/dist/signals/lib/geolocation.mjs +30 -0
  79. package/dist/signals/lib/geolocation.test.d.mts +1 -0
  80. package/dist/signals/lib/geolocation.test.mjs +37 -0
  81. package/dist/signals/lib/hash.d.mts +10 -0
  82. package/dist/signals/lib/hash.mjs +20 -0
  83. package/dist/signals/lib/hash.test.d.mts +1 -0
  84. package/dist/signals/lib/hash.test.mjs +47 -0
  85. package/dist/signals/lib/hover.d.mts +11 -0
  86. package/dist/signals/lib/hover.mjs +23 -0
  87. package/dist/signals/lib/hover.test.d.mts +1 -0
  88. package/dist/signals/lib/hover.test.mjs +63 -0
  89. package/dist/signals/lib/intersection-observer.d.mts +8 -0
  90. package/dist/signals/lib/intersection-observer.mjs +16 -0
  91. package/dist/signals/lib/intersection-observer.test.d.mts +1 -0
  92. package/dist/signals/lib/intersection-observer.test.mjs +44 -0
  93. package/dist/signals/lib/interval.d.mts +18 -0
  94. package/dist/signals/lib/interval.mjs +38 -0
  95. package/dist/signals/lib/interval.test.d.mts +1 -0
  96. package/dist/signals/lib/interval.test.mjs +68 -0
  97. package/dist/signals/lib/is-document-visible.d.mts +11 -0
  98. package/dist/signals/lib/is-document-visible.mjs +19 -0
  99. package/dist/signals/lib/is-document-visible.test.d.mts +1 -0
  100. package/dist/signals/lib/is-document-visible.test.mjs +58 -0
  101. package/dist/signals/lib/is-focus-within.d.mts +10 -0
  102. package/dist/signals/lib/is-focus-within.mjs +28 -0
  103. package/dist/signals/lib/is-focus-within.test.d.mts +1 -0
  104. package/dist/signals/lib/is-focus-within.test.mjs +50 -0
  105. package/dist/signals/lib/is-idle.d.mts +10 -0
  106. package/dist/signals/lib/is-idle.mjs +37 -0
  107. package/dist/signals/lib/is-idle.test.d.mts +1 -0
  108. package/dist/signals/lib/is-idle.test.mjs +50 -0
  109. package/dist/signals/lib/is-in-viewport.d.mts +10 -0
  110. package/dist/signals/lib/is-in-viewport.mjs +16 -0
  111. package/dist/signals/lib/is-in-viewport.test.d.mts +1 -0
  112. package/dist/signals/lib/is-in-viewport.test.mjs +74 -0
  113. package/dist/signals/lib/key-press.d.mts +13 -0
  114. package/dist/signals/lib/key-press.mjs +25 -0
  115. package/dist/signals/lib/key-press.test.d.mts +1 -0
  116. package/dist/signals/lib/key-press.test.mjs +52 -0
  117. package/dist/signals/lib/list.d.mts +19 -0
  118. package/dist/signals/lib/list.mjs +36 -0
  119. package/dist/signals/lib/list.test.d.mts +1 -0
  120. package/dist/signals/lib/list.test.mjs +104 -0
  121. package/dist/signals/lib/lock-body-scroll.d.mts +8 -0
  122. package/dist/signals/lib/lock-body-scroll.mjs +17 -0
  123. package/dist/signals/lib/lock-body-scroll.test.d.mts +1 -0
  124. package/dist/signals/lib/lock-body-scroll.test.mjs +37 -0
  125. package/dist/signals/lib/long-press.d.mts +10 -0
  126. package/dist/signals/lib/long-press.mjs +29 -0
  127. package/dist/signals/lib/long-press.test.d.mts +1 -0
  128. package/dist/signals/lib/long-press.test.mjs +52 -0
  129. package/dist/signals/lib/map.d.mts +18 -0
  130. package/dist/signals/lib/map.mjs +33 -0
  131. package/dist/signals/lib/map.test.d.mts +1 -0
  132. package/dist/signals/lib/map.test.mjs +60 -0
  133. package/dist/signals/lib/media-devices.d.mts +10 -0
  134. package/dist/signals/lib/media-devices.mjs +18 -0
  135. package/dist/signals/lib/media-devices.test.d.mts +1 -0
  136. package/dist/signals/lib/media-devices.test.mjs +44 -0
  137. package/dist/signals/lib/media.d.mts +1 -1
  138. package/dist/signals/lib/motion.d.mts +15 -0
  139. package/dist/signals/lib/motion.mjs +27 -0
  140. package/dist/signals/lib/motion.test.d.mts +1 -0
  141. package/dist/signals/lib/motion.test.mjs +51 -0
  142. package/dist/signals/lib/mouse-position.d.mts +14 -0
  143. package/dist/signals/lib/mouse-position.mjs +22 -0
  144. package/dist/signals/lib/mouse-position.test.d.mts +1 -0
  145. package/dist/signals/lib/mouse-position.test.mjs +44 -0
  146. package/dist/signals/lib/mouse-wheel.d.mts +10 -0
  147. package/dist/signals/lib/mouse-wheel.mjs +17 -0
  148. package/dist/signals/lib/mouse-wheel.test.d.mts +1 -0
  149. package/dist/signals/lib/mouse-wheel.test.mjs +38 -0
  150. package/dist/signals/lib/mutation-observer.d.mts +8 -0
  151. package/dist/signals/lib/mutation-observer.mjs +16 -0
  152. package/dist/signals/lib/mutation-observer.test.d.mts +1 -0
  153. package/dist/signals/lib/mutation-observer.test.mjs +46 -0
  154. package/dist/signals/lib/network-state.d.mts +17 -0
  155. package/dist/signals/lib/network-state.mjs +34 -0
  156. package/dist/signals/lib/network-state.test.d.mts +1 -0
  157. package/dist/signals/lib/network-state.test.mjs +61 -0
  158. package/dist/signals/lib/on-click-outside.d.mts +11 -0
  159. package/dist/signals/lib/on-click-outside.mjs +20 -0
  160. package/dist/signals/lib/on-click-outside.test.d.mts +1 -0
  161. package/dist/signals/lib/on-click-outside.test.mjs +54 -0
  162. package/dist/signals/lib/orientation.d.mts +13 -0
  163. package/dist/signals/lib/orientation.mjs +21 -0
  164. package/dist/signals/lib/orientation.test.d.mts +1 -0
  165. package/dist/signals/lib/orientation.test.mjs +43 -0
  166. package/dist/signals/lib/page-leave.d.mts +8 -0
  167. package/dist/signals/lib/page-leave.mjs +12 -0
  168. package/dist/signals/lib/page-leave.test.d.mts +1 -0
  169. package/dist/signals/lib/page-leave.test.mjs +29 -0
  170. package/dist/signals/lib/permission.d.mts +14 -0
  171. package/dist/signals/lib/permission.mjs +26 -0
  172. package/dist/signals/lib/permission.test.d.mts +1 -0
  173. package/dist/signals/lib/permission.test.mjs +50 -0
  174. package/dist/signals/lib/persisted-state.d.mts +11 -0
  175. package/dist/signals/lib/persisted-state.mjs +25 -0
  176. package/dist/signals/lib/persisted-state.test.d.mts +1 -0
  177. package/dist/signals/lib/persisted-state.test.mjs +70 -0
  178. package/dist/signals/lib/pressed-keys.d.mts +10 -0
  179. package/dist/signals/lib/pressed-keys.mjs +32 -0
  180. package/dist/signals/lib/pressed-keys.test.d.mts +1 -0
  181. package/dist/signals/lib/pressed-keys.test.mjs +54 -0
  182. package/dist/signals/lib/previous-distinct.d.mts +10 -0
  183. package/dist/signals/lib/previous-distinct.mjs +22 -0
  184. package/dist/signals/lib/previous-distinct.test.d.mts +1 -0
  185. package/dist/signals/lib/previous-distinct.test.mjs +50 -0
  186. package/dist/signals/lib/previous.d.mts +10 -0
  187. package/dist/signals/lib/previous.mjs +18 -0
  188. package/dist/signals/lib/previous.test.d.mts +1 -0
  189. package/dist/signals/lib/previous.test.mjs +47 -0
  190. package/dist/signals/lib/queue.d.mts +17 -0
  191. package/dist/signals/lib/queue.mjs +28 -0
  192. package/dist/signals/lib/queue.test.d.mts +1 -0
  193. package/dist/signals/lib/queue.test.mjs +61 -0
  194. package/dist/signals/lib/raf.d.mts +17 -0
  195. package/dist/signals/lib/raf.mjs +38 -0
  196. package/dist/signals/lib/raf.test.d.mts +1 -0
  197. package/dist/signals/lib/raf.test.mjs +58 -0
  198. package/dist/signals/lib/react.d.mts +1 -1
  199. package/dist/signals/lib/resize-observer.d.mts +8 -0
  200. package/dist/signals/lib/resize-observer.mjs +16 -0
  201. package/dist/signals/lib/resize-observer.test.d.mts +1 -0
  202. package/dist/signals/lib/resize-observer.test.mjs +44 -0
  203. package/dist/signals/lib/resource.d.mts +23 -0
  204. package/dist/signals/lib/resource.mjs +43 -0
  205. package/dist/signals/lib/resource.test.d.mts +1 -0
  206. package/dist/signals/lib/resource.test.mjs +56 -0
  207. package/dist/signals/lib/scroll-state.d.mts +19 -0
  208. package/dist/signals/lib/scroll-state.mjs +46 -0
  209. package/dist/signals/lib/scroll-state.test.d.mts +1 -0
  210. package/dist/signals/lib/scroll-state.test.mjs +94 -0
  211. package/dist/signals/lib/scrolling.d.mts +12 -0
  212. package/dist/signals/lib/scrolling.mjs +26 -0
  213. package/dist/signals/lib/scrolling.test.d.mts +1 -0
  214. package/dist/signals/lib/scrolling.test.mjs +57 -0
  215. package/dist/signals/lib/search-params.d.mts +16 -0
  216. package/dist/signals/lib/search-params.mjs +37 -0
  217. package/dist/signals/lib/search-params.test.d.mts +1 -0
  218. package/dist/signals/lib/search-params.test.mjs +56 -0
  219. package/dist/signals/lib/set.d.mts +18 -0
  220. package/dist/signals/lib/set.mjs +38 -0
  221. package/dist/signals/lib/set.test.d.mts +1 -0
  222. package/dist/signals/lib/set.test.mjs +70 -0
  223. package/dist/signals/lib/start-typing.d.mts +9 -0
  224. package/dist/signals/lib/start-typing.mjs +39 -0
  225. package/dist/signals/lib/start-typing.test.d.mts +1 -0
  226. package/dist/signals/lib/start-typing.test.mjs +64 -0
  227. package/dist/signals/lib/state-history.d.mts +21 -0
  228. package/dist/signals/lib/state-history.mjs +61 -0
  229. package/dist/signals/lib/state-history.test.d.mts +1 -0
  230. package/dist/signals/lib/state-history.test.mjs +106 -0
  231. package/dist/signals/lib/state-validator.d.mts +16 -0
  232. package/dist/signals/lib/state-validator.mjs +21 -0
  233. package/dist/signals/lib/state-validator.test.d.mts +1 -0
  234. package/dist/signals/lib/state-validator.test.mjs +41 -0
  235. package/dist/signals/lib/throttled.d.mts +13 -0
  236. package/dist/signals/lib/throttled.mjs +45 -0
  237. package/dist/signals/lib/throttled.test.d.mts +1 -0
  238. package/dist/signals/lib/throttled.test.mjs +56 -0
  239. package/dist/signals/lib/timeout.d.mts +16 -0
  240. package/dist/signals/lib/timeout.mjs +39 -0
  241. package/dist/signals/lib/timeout.test.d.mts +1 -0
  242. package/dist/signals/lib/timeout.test.mjs +64 -0
  243. package/dist/signals/lib/toggle.d.mts +12 -0
  244. package/dist/signals/lib/toggle.mjs +12 -0
  245. package/dist/signals/lib/toggle.test.d.mts +1 -0
  246. package/dist/signals/lib/toggle.test.mjs +43 -0
  247. package/dist/signals/lib/video.d.mts +25 -0
  248. package/dist/signals/lib/video.mjs +59 -0
  249. package/dist/signals/lib/video.test.d.mts +1 -0
  250. package/dist/signals/lib/video.test.mjs +51 -0
  251. package/dist/signals/lib/watch.d.mts +16 -0
  252. package/dist/signals/lib/watch.mjs +31 -0
  253. package/dist/signals/lib/watch.test.d.mts +1 -0
  254. package/dist/signals/lib/watch.test.mjs +51 -0
  255. package/dist/signals/lib/window-size.d.mts +14 -0
  256. package/dist/signals/lib/window-size.mjs +22 -0
  257. package/dist/signals/lib/window-size.test.d.mts +1 -0
  258. package/dist/signals/lib/window-size.test.mjs +50 -0
  259. package/dist/slot-Cydy7-0L.mjs +180 -0
  260. package/dist/slot.d.mts +6 -10
  261. package/dist/slot.mjs +1 -165
  262. package/dist/test.BmQO5GaM-CR2qjV1t.mjs +13314 -0
  263. package/package.json +1 -1
  264. package/dist/lib-DNd01_aS.mjs +0 -15
  265. /package/dist/{polyfill-BW_B2r6i.d.mts → polyfill-AFIi9kAN.d.mts} +0 -0
@@ -0,0 +1,56 @@
1
+ import { f as signal, o as effectScope } from "../../signals-CLAPw8kk.mjs";
2
+ import { a as describe, i as beforeEach, n as vi, o as it, r as afterEach, t as globalExpect } from "../../test.BmQO5GaM-CR2qjV1t.mjs";
3
+ import { createThrottled } from "./throttled.mjs";
4
+ //#region src/signals/lib/throttled.test.ts
5
+ beforeEach(() => {
6
+ vi.useFakeTimers();
7
+ });
8
+ afterEach(() => {
9
+ vi.useRealTimers();
10
+ });
11
+ describe("createThrottled", () => {
12
+ it("returns the initial value synchronously", () => {
13
+ const s = signal(7);
14
+ let t;
15
+ effectScope(() => {
16
+ t = createThrottled(() => s(), 200);
17
+ });
18
+ globalExpect(t()).toBe(7);
19
+ });
20
+ it("passes through the first change immediately (leading edge)", () => {
21
+ const s = signal(0);
22
+ let t;
23
+ effectScope(() => {
24
+ t = createThrottled(() => s(), 200);
25
+ });
26
+ s(1);
27
+ globalExpect(t()).toBe(1);
28
+ });
29
+ it("schedules a trailing update for rapid changes within the interval", () => {
30
+ const s = signal(0);
31
+ let t;
32
+ effectScope(() => {
33
+ t = createThrottled(() => s(), 200);
34
+ });
35
+ s(1);
36
+ globalExpect(t()).toBe(1);
37
+ s(2);
38
+ globalExpect(t()).toBe(1);
39
+ vi.advanceTimersByTime(200);
40
+ globalExpect(t()).toBe(2);
41
+ });
42
+ it("stops updating after scope disposal", () => {
43
+ const s = signal(0);
44
+ let t;
45
+ const stop = effectScope(() => {
46
+ t = createThrottled(() => s(), 200);
47
+ });
48
+ s(1);
49
+ stop();
50
+ s(99);
51
+ vi.advanceTimersByTime(400);
52
+ globalExpect(t()).toBe(1);
53
+ });
54
+ });
55
+ //#endregion
56
+ export {};
@@ -0,0 +1,16 @@
1
+ import { t as Computed } from "../../index-BtqiEEfc.mjs";
2
+
3
+ //#region src/signals/lib/timeout.d.ts
4
+ type TimeoutResult = {
5
+ isPending: Computed<boolean>;
6
+ start(): void;
7
+ stop(): void;
8
+ reset(): void;
9
+ } & Disposable;
10
+ /**
11
+ * Reactive `setTimeout` wrapper with pause/resume/reset control.
12
+ * The callback fires once after `delay` ms. Starts running immediately.
13
+ */
14
+ declare function createTimeout(callback: () => void, delay: number): TimeoutResult;
15
+ //#endregion
16
+ export { createTimeout };
@@ -0,0 +1,39 @@
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 };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,64 @@
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 { createTimeout } from "./timeout.mjs";
4
+ //#region src/signals/lib/timeout.test.ts
5
+ afterEach(() => {
6
+ document.body.innerHTML = "";
7
+ vi.useRealTimers();
8
+ });
9
+ describe("createTimeout", () => {
10
+ it("starts as pending", () => {
11
+ vi.useFakeTimers();
12
+ let t;
13
+ const cb = vi.fn();
14
+ effectScope(() => {
15
+ t = createTimeout(cb, 500);
16
+ });
17
+ globalExpect(t.isPending()).toBe(true);
18
+ });
19
+ it("fires callback after delay", () => {
20
+ vi.useFakeTimers();
21
+ const cb = vi.fn();
22
+ effectScope(() => {
23
+ createTimeout(cb, 500);
24
+ });
25
+ vi.advanceTimersByTime(600);
26
+ globalExpect(cb).toHaveBeenCalledOnce();
27
+ });
28
+ it("isPending becomes false after firing", () => {
29
+ vi.useFakeTimers();
30
+ let t;
31
+ effectScope(() => {
32
+ t = createTimeout(vi.fn(), 200);
33
+ });
34
+ vi.advanceTimersByTime(300);
35
+ globalExpect(t.isPending()).toBe(false);
36
+ });
37
+ it("stop() cancels the timeout", () => {
38
+ vi.useFakeTimers();
39
+ const cb = vi.fn();
40
+ let t;
41
+ effectScope(() => {
42
+ t = createTimeout(cb, 500);
43
+ });
44
+ t.stop();
45
+ vi.advanceTimersByTime(1e3);
46
+ globalExpect(cb).not.toHaveBeenCalled();
47
+ });
48
+ it("reset() restarts the timer", () => {
49
+ vi.useFakeTimers();
50
+ const cb = vi.fn();
51
+ let t;
52
+ effectScope(() => {
53
+ t = createTimeout(cb, 500);
54
+ });
55
+ vi.advanceTimersByTime(300);
56
+ t.reset();
57
+ vi.advanceTimersByTime(300);
58
+ globalExpect(cb).not.toHaveBeenCalled();
59
+ vi.advanceTimersByTime(300);
60
+ globalExpect(cb).toHaveBeenCalledOnce();
61
+ });
62
+ });
63
+ //#endregion
64
+ export {};
@@ -0,0 +1,12 @@
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 };
@@ -0,0 +1,12 @@
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 };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,43 @@
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 {};
@@ -0,0 +1,25 @@
1
+ import { 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: Computed<boolean>;
8
+ volume: Computed<number>;
9
+ duration: Computed<number>;
10
+ time: Computed<number>;
11
+ ended: Computed<boolean>;
12
+ play(): void;
13
+ pause(): void;
14
+ toggle(): void;
15
+ setVolume(v: number): void;
16
+ setTime(t: number): void;
17
+ mute(): void;
18
+ unmute(): void;
19
+ } & Disposable;
20
+ /**
21
+ * Wraps an `HTMLVideoElement` with reactive state and playback controls.
22
+ */
23
+ declare function createVideo(element: HTMLVideoElement): VideoResult;
24
+ //#endregion
25
+ export { createVideo };
@@ -0,0 +1,59 @@
1
+ import { f as signal } from "../../signals-CLAPw8kk.mjs";
2
+ import { createEventListener } from "./event-listener.mjs";
3
+ //#region src/signals/lib/video.ts
4
+ /**
5
+ * Wraps an `HTMLVideoElement` with reactive state and playback controls.
6
+ */
7
+ function createVideo(element) {
8
+ const el = element;
9
+ const playing = signal(!el.paused);
10
+ const muted = signal(el.muted);
11
+ const volume = signal(el.volume);
12
+ const duration = signal(el.duration || 0);
13
+ const time = signal(el.currentTime);
14
+ const ended = signal(el.ended);
15
+ const onPlay = () => playing(true);
16
+ const onPause = () => playing(false);
17
+ const onVolumeChange = () => {
18
+ muted(el.muted);
19
+ volume(el.volume);
20
+ };
21
+ const onDurationChange = () => duration(el.duration);
22
+ const onTimeUpdate = () => time(el.currentTime);
23
+ const onEnded = () => ended(true);
24
+ const cleanups = [
25
+ createEventListener(el, "play", onPlay),
26
+ createEventListener(el, "pause", onPause),
27
+ createEventListener(el, "volumechange", onVolumeChange),
28
+ createEventListener(el, "durationchange", onDurationChange),
29
+ createEventListener(el, "timeupdate", onTimeUpdate),
30
+ createEventListener(el, "ended", onEnded)
31
+ ];
32
+ const cleanup = () => cleanups.forEach((fn) => fn());
33
+ return Object.assign({
34
+ element: el,
35
+ playing,
36
+ muted,
37
+ volume,
38
+ duration,
39
+ time,
40
+ ended,
41
+ play: () => el.play(),
42
+ pause: () => el.pause(),
43
+ toggle: () => el.paused ? el.play() : el.pause(),
44
+ setVolume: (v) => {
45
+ el.volume = Math.min(1, Math.max(0, v));
46
+ },
47
+ setTime: (t) => {
48
+ el.currentTime = t;
49
+ },
50
+ mute: () => {
51
+ el.muted = true;
52
+ },
53
+ unmute: () => {
54
+ el.muted = false;
55
+ }
56
+ }, { [Symbol.dispose]: cleanup });
57
+ }
58
+ //#endregion
59
+ export { createVideo };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,51 @@
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("setTime 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.setTime(30);
36
+ globalExpect(el.currentTime).toBe(30);
37
+ });
38
+ it("removes event listeners on Symbol.dispose", () => {
39
+ const el = document.createElement("video");
40
+ document.body.appendChild(el);
41
+ let v;
42
+ effectScope(() => {
43
+ v = createVideo(el);
44
+ });
45
+ const removeSpy = vi.spyOn(el, "removeEventListener");
46
+ v[Symbol.dispose]();
47
+ globalExpect(removeSpy).toHaveBeenCalled();
48
+ });
49
+ });
50
+ //#endregion
51
+ export {};
@@ -0,0 +1,16 @@
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 };
@@ -0,0 +1,31 @@
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 };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,51 @@
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 {};
@@ -0,0 +1,14 @@
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 };
@@ -0,0 +1,22 @@
1
+ import { f as signal } from "../../signals-CLAPw8kk.mjs";
2
+ import { createEventListener } from "./event-listener.mjs";
3
+ //#region src/signals/lib/window-size.ts
4
+ /**
5
+ * Returns reactive `width` and `height` signals tracking the browser window
6
+ * inner dimensions.
7
+ */
8
+ function createWindowSize() {
9
+ const width = signal(typeof window !== "undefined" ? window.innerWidth : 0);
10
+ const height = signal(typeof window !== "undefined" ? window.innerHeight : 0);
11
+ const onResize = () => {
12
+ width(window.innerWidth);
13
+ height(window.innerHeight);
14
+ };
15
+ const cleanup = createEventListener(window, "resize", onResize);
16
+ return Object.assign({
17
+ width,
18
+ height
19
+ }, { [Symbol.dispose]: cleanup });
20
+ }
21
+ //#endregion
22
+ export { createWindowSize };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,50 @@
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 {};