elements-kit 0.0.8 → 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.
- package/README.md +3 -3
- package/dist/builder/dom.d.mts +1 -1
- package/dist/builder/index.d.mts +1 -1
- package/dist/{index-BGKVkZ6y.d.mts → index-BtqiEEfc.d.mts} +1 -1
- package/dist/{index-Ukqj0EcT.d.mts → index-CKjDUp1B.d.mts} +1 -1
- package/dist/jsx-runtime/index.d.mts +1 -1
- package/dist/magic-string.es-i62WTP6J.mjs +1011 -0
- package/dist/signals/index.d.mts +1 -1
- package/dist/signals/lib/active-element.d.mts +10 -0
- package/dist/signals/lib/active-element.mjs +20 -0
- package/dist/signals/lib/active-element.test.d.mts +1 -0
- package/dist/signals/lib/active-element.test.mjs +39 -0
- package/dist/signals/lib/animation-frames.d.mts +18 -0
- package/dist/signals/lib/animation-frames.mjs +48 -0
- package/dist/signals/lib/animation-frames.test.d.mts +1 -0
- package/dist/signals/lib/animation-frames.test.mjs +52 -0
- package/dist/signals/lib/async-retry.d.mts +21 -0
- package/dist/signals/lib/async-retry.mjs +57 -0
- package/dist/signals/lib/async-retry.test.d.mts +1 -0
- package/dist/signals/lib/async-retry.test.mjs +57 -0
- package/dist/signals/lib/audio.d.mts +26 -0
- package/dist/signals/lib/audio.mjs +60 -0
- package/dist/signals/lib/audio.test.d.mts +1 -0
- package/dist/signals/lib/audio.test.mjs +54 -0
- package/dist/signals/lib/battery.d.mts +17 -0
- package/dist/signals/lib/battery.mjs +45 -0
- package/dist/signals/lib/battery.test.d.mts +1 -0
- package/dist/signals/lib/battery.test.mjs +38 -0
- package/dist/signals/lib/before-unload.d.mts +11 -0
- package/dist/signals/lib/before-unload.mjs +20 -0
- package/dist/signals/lib/before-unload.test.d.mts +1 -0
- package/dist/signals/lib/before-unload.test.mjs +29 -0
- package/dist/signals/lib/clipboard.d.mts +15 -0
- package/dist/signals/lib/clipboard.mjs +25 -0
- package/dist/signals/lib/clipboard.test.d.mts +1 -0
- package/dist/signals/lib/clipboard.test.mjs +53 -0
- package/dist/signals/lib/counter.d.mts +18 -0
- package/dist/signals/lib/counter.mjs +21 -0
- package/dist/signals/lib/counter.test.d.mts +1 -0
- package/dist/signals/lib/counter.test.mjs +74 -0
- package/dist/signals/lib/debounced.d.mts +12 -0
- package/dist/signals/lib/debounced.mjs +20 -0
- package/dist/signals/lib/debounced.test.d.mts +1 -0
- package/dist/signals/lib/debounced.test.mjs +66 -0
- package/dist/signals/lib/document-title.d.mts +10 -0
- package/dist/signals/lib/document-title.mjs +15 -0
- package/dist/signals/lib/document-title.test.d.mts +1 -0
- package/dist/signals/lib/document-title.test.mjs +33 -0
- package/dist/signals/lib/element-rect.d.mts +21 -0
- package/dist/signals/lib/element-rect.mjs +46 -0
- package/dist/signals/lib/element-rect.test.d.mts +1 -0
- package/dist/signals/lib/element-rect.test.mjs +99 -0
- package/dist/signals/lib/element-size.d.mts +16 -0
- package/dist/signals/lib/element-size.mjs +32 -0
- package/dist/signals/lib/element-size.test.d.mts +1 -0
- package/dist/signals/lib/element-size.test.mjs +86 -0
- package/dist/signals/lib/event-listener.d.mts +14 -0
- package/dist/signals/lib/event-listener.mjs +28 -0
- package/dist/signals/lib/event-listener.test.d.mts +1 -0
- package/dist/signals/lib/event-listener.test.mjs +58 -0
- package/dist/signals/lib/favicon.d.mts +10 -0
- package/dist/signals/lib/favicon.mjs +24 -0
- package/dist/signals/lib/favicon.test.d.mts +1 -0
- package/dist/signals/lib/favicon.test.mjs +28 -0
- package/dist/signals/lib/finite-state-machine.d.mts +22 -0
- package/dist/signals/lib/finite-state-machine.mjs +26 -0
- package/dist/signals/lib/finite-state-machine.test.d.mts +1 -0
- package/dist/signals/lib/finite-state-machine.test.mjs +66 -0
- package/dist/signals/lib/fullscreen.d.mts +15 -0
- package/dist/signals/lib/fullscreen.mjs +26 -0
- package/dist/signals/lib/fullscreen.test.d.mts +1 -0
- package/dist/signals/lib/fullscreen.test.mjs +56 -0
- package/dist/signals/lib/geolocation.d.mts +15 -0
- package/dist/signals/lib/geolocation.mjs +30 -0
- package/dist/signals/lib/geolocation.test.d.mts +1 -0
- package/dist/signals/lib/geolocation.test.mjs +37 -0
- package/dist/signals/lib/hash.d.mts +10 -0
- package/dist/signals/lib/hash.mjs +20 -0
- package/dist/signals/lib/hash.test.d.mts +1 -0
- package/dist/signals/lib/hash.test.mjs +47 -0
- package/dist/signals/lib/hover.d.mts +11 -0
- package/dist/signals/lib/hover.mjs +23 -0
- package/dist/signals/lib/hover.test.d.mts +1 -0
- package/dist/signals/lib/hover.test.mjs +63 -0
- package/dist/signals/lib/intersection-observer.d.mts +8 -0
- package/dist/signals/lib/intersection-observer.mjs +16 -0
- package/dist/signals/lib/intersection-observer.test.d.mts +1 -0
- package/dist/signals/lib/intersection-observer.test.mjs +44 -0
- package/dist/signals/lib/interval.d.mts +18 -0
- package/dist/signals/lib/interval.mjs +38 -0
- package/dist/signals/lib/interval.test.d.mts +1 -0
- package/dist/signals/lib/interval.test.mjs +68 -0
- package/dist/signals/lib/is-document-visible.d.mts +11 -0
- package/dist/signals/lib/is-document-visible.mjs +19 -0
- package/dist/signals/lib/is-document-visible.test.d.mts +1 -0
- package/dist/signals/lib/is-document-visible.test.mjs +58 -0
- package/dist/signals/lib/is-focus-within.d.mts +10 -0
- package/dist/signals/lib/is-focus-within.mjs +28 -0
- package/dist/signals/lib/is-focus-within.test.d.mts +1 -0
- package/dist/signals/lib/is-focus-within.test.mjs +50 -0
- package/dist/signals/lib/is-idle.d.mts +10 -0
- package/dist/signals/lib/is-idle.mjs +37 -0
- package/dist/signals/lib/is-idle.test.d.mts +1 -0
- package/dist/signals/lib/is-idle.test.mjs +50 -0
- package/dist/signals/lib/is-in-viewport.d.mts +10 -0
- package/dist/signals/lib/is-in-viewport.mjs +16 -0
- package/dist/signals/lib/is-in-viewport.test.d.mts +1 -0
- package/dist/signals/lib/is-in-viewport.test.mjs +74 -0
- package/dist/signals/lib/key-press.d.mts +13 -0
- package/dist/signals/lib/key-press.mjs +25 -0
- package/dist/signals/lib/key-press.test.d.mts +1 -0
- package/dist/signals/lib/key-press.test.mjs +52 -0
- package/dist/signals/lib/list.d.mts +19 -0
- package/dist/signals/lib/list.mjs +36 -0
- package/dist/signals/lib/list.test.d.mts +1 -0
- package/dist/signals/lib/list.test.mjs +104 -0
- package/dist/signals/lib/lock-body-scroll.d.mts +8 -0
- package/dist/signals/lib/lock-body-scroll.mjs +17 -0
- package/dist/signals/lib/lock-body-scroll.test.d.mts +1 -0
- package/dist/signals/lib/lock-body-scroll.test.mjs +37 -0
- package/dist/signals/lib/long-press.d.mts +10 -0
- package/dist/signals/lib/long-press.mjs +29 -0
- package/dist/signals/lib/long-press.test.d.mts +1 -0
- package/dist/signals/lib/long-press.test.mjs +52 -0
- package/dist/signals/lib/map.d.mts +18 -0
- package/dist/signals/lib/map.mjs +33 -0
- package/dist/signals/lib/map.test.d.mts +1 -0
- package/dist/signals/lib/map.test.mjs +60 -0
- package/dist/signals/lib/media-devices.d.mts +10 -0
- package/dist/signals/lib/media-devices.mjs +18 -0
- package/dist/signals/lib/media-devices.test.d.mts +1 -0
- package/dist/signals/lib/media-devices.test.mjs +44 -0
- package/dist/signals/lib/media.d.mts +1 -1
- package/dist/signals/lib/motion.d.mts +15 -0
- package/dist/signals/lib/motion.mjs +27 -0
- package/dist/signals/lib/motion.test.d.mts +1 -0
- package/dist/signals/lib/motion.test.mjs +51 -0
- package/dist/signals/lib/mouse-position.d.mts +14 -0
- package/dist/signals/lib/mouse-position.mjs +22 -0
- package/dist/signals/lib/mouse-position.test.d.mts +1 -0
- package/dist/signals/lib/mouse-position.test.mjs +44 -0
- package/dist/signals/lib/mouse-wheel.d.mts +10 -0
- package/dist/signals/lib/mouse-wheel.mjs +17 -0
- package/dist/signals/lib/mouse-wheel.test.d.mts +1 -0
- package/dist/signals/lib/mouse-wheel.test.mjs +38 -0
- package/dist/signals/lib/mutation-observer.d.mts +8 -0
- package/dist/signals/lib/mutation-observer.mjs +16 -0
- package/dist/signals/lib/mutation-observer.test.d.mts +1 -0
- package/dist/signals/lib/mutation-observer.test.mjs +46 -0
- package/dist/signals/lib/network-state.d.mts +17 -0
- package/dist/signals/lib/network-state.mjs +34 -0
- package/dist/signals/lib/network-state.test.d.mts +1 -0
- package/dist/signals/lib/network-state.test.mjs +61 -0
- package/dist/signals/lib/on-click-outside.d.mts +11 -0
- package/dist/signals/lib/on-click-outside.mjs +20 -0
- package/dist/signals/lib/on-click-outside.test.d.mts +1 -0
- package/dist/signals/lib/on-click-outside.test.mjs +54 -0
- package/dist/signals/lib/orientation.d.mts +13 -0
- package/dist/signals/lib/orientation.mjs +21 -0
- package/dist/signals/lib/orientation.test.d.mts +1 -0
- package/dist/signals/lib/orientation.test.mjs +43 -0
- package/dist/signals/lib/page-leave.d.mts +8 -0
- package/dist/signals/lib/page-leave.mjs +12 -0
- package/dist/signals/lib/page-leave.test.d.mts +1 -0
- package/dist/signals/lib/page-leave.test.mjs +29 -0
- package/dist/signals/lib/permission.d.mts +14 -0
- package/dist/signals/lib/permission.mjs +26 -0
- package/dist/signals/lib/permission.test.d.mts +1 -0
- package/dist/signals/lib/permission.test.mjs +50 -0
- package/dist/signals/lib/persisted-state.d.mts +11 -0
- package/dist/signals/lib/persisted-state.mjs +25 -0
- package/dist/signals/lib/persisted-state.test.d.mts +1 -0
- package/dist/signals/lib/persisted-state.test.mjs +70 -0
- package/dist/signals/lib/pressed-keys.d.mts +10 -0
- package/dist/signals/lib/pressed-keys.mjs +32 -0
- package/dist/signals/lib/pressed-keys.test.d.mts +1 -0
- package/dist/signals/lib/pressed-keys.test.mjs +54 -0
- package/dist/signals/lib/previous-distinct.d.mts +10 -0
- package/dist/signals/lib/previous-distinct.mjs +22 -0
- package/dist/signals/lib/previous-distinct.test.d.mts +1 -0
- package/dist/signals/lib/previous-distinct.test.mjs +50 -0
- package/dist/signals/lib/previous.d.mts +10 -0
- package/dist/signals/lib/previous.mjs +18 -0
- package/dist/signals/lib/previous.test.d.mts +1 -0
- package/dist/signals/lib/previous.test.mjs +47 -0
- package/dist/signals/lib/queue.d.mts +17 -0
- package/dist/signals/lib/queue.mjs +28 -0
- package/dist/signals/lib/queue.test.d.mts +1 -0
- package/dist/signals/lib/queue.test.mjs +61 -0
- package/dist/signals/lib/raf.d.mts +17 -0
- package/dist/signals/lib/raf.mjs +38 -0
- package/dist/signals/lib/raf.test.d.mts +1 -0
- package/dist/signals/lib/raf.test.mjs +58 -0
- package/dist/signals/lib/react.d.mts +1 -1
- package/dist/signals/lib/resize-observer.d.mts +8 -0
- package/dist/signals/lib/resize-observer.mjs +16 -0
- package/dist/signals/lib/resize-observer.test.d.mts +1 -0
- package/dist/signals/lib/resize-observer.test.mjs +44 -0
- package/dist/signals/lib/resource.d.mts +23 -0
- package/dist/signals/lib/resource.mjs +43 -0
- package/dist/signals/lib/resource.test.d.mts +1 -0
- package/dist/signals/lib/resource.test.mjs +56 -0
- package/dist/signals/lib/scroll-state.d.mts +19 -0
- package/dist/signals/lib/scroll-state.mjs +46 -0
- package/dist/signals/lib/scroll-state.test.d.mts +1 -0
- package/dist/signals/lib/scroll-state.test.mjs +94 -0
- package/dist/signals/lib/scrolling.d.mts +12 -0
- package/dist/signals/lib/scrolling.mjs +26 -0
- package/dist/signals/lib/scrolling.test.d.mts +1 -0
- package/dist/signals/lib/scrolling.test.mjs +57 -0
- package/dist/signals/lib/search-params.d.mts +16 -0
- package/dist/signals/lib/search-params.mjs +37 -0
- package/dist/signals/lib/search-params.test.d.mts +1 -0
- package/dist/signals/lib/search-params.test.mjs +56 -0
- package/dist/signals/lib/set.d.mts +18 -0
- package/dist/signals/lib/set.mjs +38 -0
- package/dist/signals/lib/set.test.d.mts +1 -0
- package/dist/signals/lib/set.test.mjs +70 -0
- package/dist/signals/lib/start-typing.d.mts +9 -0
- package/dist/signals/lib/start-typing.mjs +39 -0
- package/dist/signals/lib/start-typing.test.d.mts +1 -0
- package/dist/signals/lib/start-typing.test.mjs +64 -0
- package/dist/signals/lib/state-history.d.mts +21 -0
- package/dist/signals/lib/state-history.mjs +61 -0
- package/dist/signals/lib/state-history.test.d.mts +1 -0
- package/dist/signals/lib/state-history.test.mjs +106 -0
- package/dist/signals/lib/state-validator.d.mts +16 -0
- package/dist/signals/lib/state-validator.mjs +21 -0
- package/dist/signals/lib/state-validator.test.d.mts +1 -0
- package/dist/signals/lib/state-validator.test.mjs +41 -0
- package/dist/signals/lib/throttled.d.mts +13 -0
- package/dist/signals/lib/throttled.mjs +45 -0
- package/dist/signals/lib/throttled.test.d.mts +1 -0
- package/dist/signals/lib/throttled.test.mjs +56 -0
- package/dist/signals/lib/timeout.d.mts +16 -0
- package/dist/signals/lib/timeout.mjs +39 -0
- package/dist/signals/lib/timeout.test.d.mts +1 -0
- package/dist/signals/lib/timeout.test.mjs +64 -0
- package/dist/signals/lib/toggle.d.mts +12 -0
- package/dist/signals/lib/toggle.mjs +12 -0
- package/dist/signals/lib/toggle.test.d.mts +1 -0
- package/dist/signals/lib/toggle.test.mjs +43 -0
- package/dist/signals/lib/video.d.mts +25 -0
- package/dist/signals/lib/video.mjs +59 -0
- package/dist/signals/lib/video.test.d.mts +1 -0
- package/dist/signals/lib/video.test.mjs +51 -0
- package/dist/signals/lib/watch.d.mts +16 -0
- package/dist/signals/lib/watch.mjs +31 -0
- package/dist/signals/lib/watch.test.d.mts +1 -0
- package/dist/signals/lib/watch.test.mjs +51 -0
- package/dist/signals/lib/window-size.d.mts +14 -0
- package/dist/signals/lib/window-size.mjs +22 -0
- package/dist/signals/lib/window-size.test.d.mts +1 -0
- package/dist/signals/lib/window-size.test.mjs +50 -0
- package/dist/slot.d.mts +1 -1
- package/dist/test.BmQO5GaM-CR2qjV1t.mjs +13314 -0
- package/package.json +1 -1
- /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 {};
|
package/dist/slot.d.mts
CHANGED