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.
- package/README.md +3 -4
- package/dist/builder/dom.d.mts +1 -1
- package/dist/builder/index.d.mts +87 -1
- package/dist/builder/index.mjs +1 -1
- package/dist/{element-Ddk9YaoE.mjs → element-MXzFk4G2.mjs} +1 -1
- package/dist/{index-BtqiEEfc.d.mts → index-Cvdhuy6Y.d.mts} +8 -4
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +3 -3
- package/dist/{signals/lib → integrations}/react.d.mts +2 -2
- package/dist/{signals/lib → integrations}/react.mjs +2 -2
- package/dist/jsx-runtime/index.d.mts +2 -2
- package/dist/jsx-runtime/index.mjs +3 -3
- package/dist/lib-BYJ5jPTG.d.mts +4 -0
- package/dist/polyfill-DR5XVnh_.d.mts +9 -0
- package/dist/signals/index.d.mts +2 -2
- package/dist/signals/index.mjs +2 -2
- package/dist/{signals-CLAPw8kk.mjs → signals-DcgXhkU2.mjs} +41 -9
- package/dist/slot.d.mts +1 -2
- package/dist/{test.BmQO5GaM-CR2qjV1t.mjs → test.BmQO5GaM-ANkhHvbr.mjs} +1 -1
- package/dist/utilities/active-element.d.mts +6 -0
- package/dist/utilities/active-element.mjs +13 -0
- package/dist/utilities/active-element.test.mjs +24 -0
- package/dist/{signals/lib → utilities}/debounced.d.mts +3 -3
- package/dist/{signals/lib → utilities}/debounced.mjs +7 -6
- package/dist/{signals/lib → utilities}/debounced.test.mjs +3 -3
- package/dist/{signals/lib → utilities}/element-rect.d.mts +3 -3
- package/dist/{signals/lib → utilities}/element-rect.mjs +7 -7
- package/dist/{signals/lib → utilities}/element-rect.test.mjs +3 -3
- package/dist/utilities/element-scroll.d.mts +16 -0
- package/dist/utilities/element-scroll.mjs +52 -0
- package/dist/utilities/element-scroll.test.mjs +25 -0
- package/dist/{signals/lib → utilities}/event-driven.d.mts +2 -2
- package/dist/{signals/lib → utilities}/event-driven.mjs +2 -2
- package/dist/utilities/event-listener.d.mts +16 -0
- package/dist/{signals/lib → utilities}/event-listener.mjs +4 -4
- package/dist/{signals/lib → utilities}/event-listener.test.mjs +8 -8
- package/dist/utilities/focus-within.d.mts +10 -0
- package/dist/utilities/focus-within.mjs +20 -0
- package/dist/{signals/lib/is-focus-within.test.mjs → utilities/focus-within.test.mjs} +10 -11
- package/dist/utilities/hover.d.mts +11 -0
- package/dist/utilities/hover.mjs +20 -0
- package/dist/{signals/lib → utilities}/hover.test.mjs +5 -16
- package/dist/utilities/intersection-observer.d.mts +8 -0
- package/dist/{signals/lib → utilities}/intersection-observer.mjs +3 -4
- package/dist/{signals/lib → utilities}/intersection-observer.test.mjs +3 -3
- package/dist/{signals/lib → utilities}/interval.d.mts +2 -2
- package/dist/{signals/lib → utilities}/interval.mjs +6 -5
- package/dist/{signals/lib → utilities}/interval.test.mjs +3 -3
- package/dist/utilities/location.d.mts +24 -0
- package/dist/utilities/location.mjs +54 -0
- package/dist/utilities/location.test.mjs +60 -0
- package/dist/utilities/long-press.d.mts +10 -0
- package/dist/utilities/long-press.mjs +27 -0
- package/dist/{signals/lib → utilities}/long-press.test.mjs +3 -3
- package/dist/{signals/lib → utilities}/media-devices.d.mts +3 -3
- package/dist/{signals/lib → utilities}/media-devices.mjs +5 -5
- package/dist/{signals/lib → utilities}/media-devices.test.mjs +6 -8
- package/dist/utilities/media-player.d.mts +22 -0
- package/dist/{signals/lib/video.mjs → utilities/media-player.mjs} +5 -4
- package/dist/utilities/media-player.test.mjs +100 -0
- package/dist/{signals/lib/media.d.mts → utilities/media-query.d.mts} +4 -4
- package/dist/{signals/lib/media.mjs → utilities/media-query.mjs} +6 -6
- package/dist/utilities/mutation-observer.d.mts +8 -0
- package/dist/{signals/lib → utilities}/mutation-observer.mjs +3 -3
- package/dist/{signals/lib → utilities}/mutation-observer.test.mjs +3 -3
- package/dist/{signals/lib → utilities}/on-click-outside.d.mts +3 -3
- package/dist/utilities/on-click-outside.mjs +17 -0
- package/dist/{signals/lib → utilities}/on-click-outside.test.mjs +7 -18
- package/dist/utilities/orientation.d.mts +10 -0
- package/dist/{signals/lib → utilities}/orientation.mjs +3 -2
- package/dist/utilities/previous.d.mts +12 -0
- package/dist/utilities/previous.mjs +24 -0
- package/dist/utilities/previous.test.mjs +88 -0
- package/dist/utilities/resize-observer.d.mts +8 -0
- package/dist/{signals/lib → utilities}/resize-observer.mjs +4 -5
- package/dist/utilities/routing.d.mts +59 -0
- package/dist/utilities/routing.mjs +89 -0
- package/dist/utilities/routing.test.mjs +128 -0
- package/dist/utilities/search-params.d.mts +13 -0
- package/dist/utilities/search-params.mjs +23 -0
- package/dist/utilities/search-params.test.mjs +35 -0
- package/dist/utilities/storage.d.mts +22 -0
- package/dist/utilities/storage.mjs +65 -0
- package/dist/utilities/storage.test.mjs +137 -0
- package/dist/{signals/lib → utilities}/throttled.d.mts +2 -2
- package/dist/utilities/throttled.mjs +36 -0
- package/dist/{signals/lib → utilities}/throttled.test.mjs +3 -3
- package/dist/{signals/lib → utilities}/timeout.d.mts +6 -5
- package/dist/utilities/timeout.mjs +42 -0
- package/dist/{signals/lib → utilities}/timeout.test.mjs +7 -7
- package/dist/utilities/window-size.d.mts +10 -0
- package/dist/utilities/window-size.mjs +22 -0
- package/dist/utilities/window-size.test.mjs +42 -0
- package/package.json +11 -6
- package/dist/index-CKjDUp1B.d.mts +0 -89
- package/dist/polyfill-AFIi9kAN.d.mts +0 -14
- package/dist/signals/lib/active-element.d.mts +0 -10
- package/dist/signals/lib/active-element.mjs +0 -12
- package/dist/signals/lib/active-element.test.mjs +0 -39
- package/dist/signals/lib/animation-frames.d.mts +0 -18
- package/dist/signals/lib/animation-frames.mjs +0 -48
- package/dist/signals/lib/animation-frames.test.mjs +0 -52
- package/dist/signals/lib/async-retry.d.mts +0 -21
- package/dist/signals/lib/async-retry.mjs +0 -57
- package/dist/signals/lib/async-retry.test.mjs +0 -57
- package/dist/signals/lib/audio.d.mts +0 -21
- package/dist/signals/lib/audio.mjs +0 -35
- package/dist/signals/lib/audio.test.mjs +0 -57
- package/dist/signals/lib/battery.d.mts +0 -17
- package/dist/signals/lib/battery.mjs +0 -45
- package/dist/signals/lib/battery.test.mjs +0 -38
- package/dist/signals/lib/before-unload.d.mts +0 -11
- package/dist/signals/lib/before-unload.mjs +0 -20
- package/dist/signals/lib/before-unload.test.mjs +0 -29
- package/dist/signals/lib/clipboard.d.mts +0 -15
- package/dist/signals/lib/clipboard.mjs +0 -25
- package/dist/signals/lib/clipboard.test.mjs +0 -53
- package/dist/signals/lib/counter.d.mts +0 -18
- package/dist/signals/lib/counter.mjs +0 -21
- package/dist/signals/lib/counter.test.d.mts +0 -1
- package/dist/signals/lib/counter.test.mjs +0 -74
- package/dist/signals/lib/document-title.d.mts +0 -10
- package/dist/signals/lib/document-title.mjs +0 -15
- package/dist/signals/lib/document-title.test.d.mts +0 -1
- package/dist/signals/lib/document-title.test.mjs +0 -33
- package/dist/signals/lib/element-size.d.mts +0 -16
- package/dist/signals/lib/element-size.mjs +0 -32
- package/dist/signals/lib/element-size.test.d.mts +0 -1
- package/dist/signals/lib/element-size.test.mjs +0 -86
- package/dist/signals/lib/event-listener.d.mts +0 -14
- package/dist/signals/lib/favicon.d.mts +0 -10
- package/dist/signals/lib/favicon.mjs +0 -24
- package/dist/signals/lib/favicon.test.d.mts +0 -1
- package/dist/signals/lib/favicon.test.mjs +0 -28
- package/dist/signals/lib/finite-state-machine.d.mts +0 -22
- package/dist/signals/lib/finite-state-machine.mjs +0 -26
- package/dist/signals/lib/finite-state-machine.test.d.mts +0 -1
- package/dist/signals/lib/finite-state-machine.test.mjs +0 -66
- package/dist/signals/lib/fullscreen.d.mts +0 -15
- package/dist/signals/lib/fullscreen.mjs +0 -24
- package/dist/signals/lib/fullscreen.test.d.mts +0 -1
- package/dist/signals/lib/fullscreen.test.mjs +0 -48
- package/dist/signals/lib/geolocation.d.mts +0 -15
- package/dist/signals/lib/geolocation.mjs +0 -30
- package/dist/signals/lib/geolocation.test.d.mts +0 -1
- package/dist/signals/lib/geolocation.test.mjs +0 -37
- package/dist/signals/lib/hash.d.mts +0 -10
- package/dist/signals/lib/hash.mjs +0 -14
- package/dist/signals/lib/hash.test.d.mts +0 -1
- package/dist/signals/lib/hash.test.mjs +0 -46
- package/dist/signals/lib/hover.d.mts +0 -11
- package/dist/signals/lib/hover.mjs +0 -23
- package/dist/signals/lib/intersection-observer.d.mts +0 -8
- package/dist/signals/lib/is-document-visible.d.mts +0 -11
- package/dist/signals/lib/is-document-visible.mjs +0 -13
- package/dist/signals/lib/is-document-visible.test.d.mts +0 -1
- package/dist/signals/lib/is-document-visible.test.mjs +0 -58
- package/dist/signals/lib/is-focus-within.d.mts +0 -10
- package/dist/signals/lib/is-focus-within.mjs +0 -28
- package/dist/signals/lib/is-focus-within.test.d.mts +0 -1
- package/dist/signals/lib/is-idle.d.mts +0 -10
- package/dist/signals/lib/is-idle.mjs +0 -37
- package/dist/signals/lib/is-idle.test.d.mts +0 -1
- package/dist/signals/lib/is-idle.test.mjs +0 -50
- package/dist/signals/lib/is-in-viewport.d.mts +0 -10
- package/dist/signals/lib/is-in-viewport.mjs +0 -16
- package/dist/signals/lib/is-in-viewport.test.d.mts +0 -1
- package/dist/signals/lib/is-in-viewport.test.mjs +0 -74
- package/dist/signals/lib/key-press.d.mts +0 -13
- package/dist/signals/lib/key-press.mjs +0 -25
- package/dist/signals/lib/key-press.test.d.mts +0 -1
- package/dist/signals/lib/key-press.test.mjs +0 -52
- package/dist/signals/lib/list.d.mts +0 -19
- package/dist/signals/lib/list.mjs +0 -36
- package/dist/signals/lib/list.test.d.mts +0 -1
- package/dist/signals/lib/list.test.mjs +0 -104
- package/dist/signals/lib/lock-body-scroll.d.mts +0 -8
- package/dist/signals/lib/lock-body-scroll.mjs +0 -17
- package/dist/signals/lib/lock-body-scroll.test.d.mts +0 -1
- package/dist/signals/lib/lock-body-scroll.test.mjs +0 -37
- package/dist/signals/lib/long-press.d.mts +0 -10
- package/dist/signals/lib/long-press.mjs +0 -29
- package/dist/signals/lib/map.d.mts +0 -18
- package/dist/signals/lib/map.mjs +0 -33
- package/dist/signals/lib/map.test.d.mts +0 -1
- package/dist/signals/lib/map.test.mjs +0 -60
- package/dist/signals/lib/motion.d.mts +0 -15
- package/dist/signals/lib/motion.mjs +0 -27
- package/dist/signals/lib/motion.test.d.mts +0 -1
- package/dist/signals/lib/motion.test.mjs +0 -51
- package/dist/signals/lib/mouse-position.d.mts +0 -14
- package/dist/signals/lib/mouse-position.mjs +0 -22
- package/dist/signals/lib/mouse-position.test.d.mts +0 -1
- package/dist/signals/lib/mouse-position.test.mjs +0 -44
- package/dist/signals/lib/mouse-wheel.d.mts +0 -10
- package/dist/signals/lib/mouse-wheel.mjs +0 -17
- package/dist/signals/lib/mouse-wheel.test.d.mts +0 -1
- package/dist/signals/lib/mouse-wheel.test.mjs +0 -38
- package/dist/signals/lib/mutation-observer.d.mts +0 -8
- package/dist/signals/lib/network-state.d.mts +0 -17
- package/dist/signals/lib/network-state.mjs +0 -34
- package/dist/signals/lib/network-state.test.d.mts +0 -1
- package/dist/signals/lib/network-state.test.mjs +0 -61
- package/dist/signals/lib/on-click-outside.mjs +0 -20
- package/dist/signals/lib/orientation.d.mts +0 -13
- package/dist/signals/lib/orientation.test.d.mts +0 -1
- package/dist/signals/lib/orientation.test.mjs +0 -43
- package/dist/signals/lib/page-leave.d.mts +0 -8
- package/dist/signals/lib/page-leave.mjs +0 -12
- package/dist/signals/lib/page-leave.test.d.mts +0 -1
- package/dist/signals/lib/page-leave.test.mjs +0 -29
- package/dist/signals/lib/permission.d.mts +0 -14
- package/dist/signals/lib/permission.mjs +0 -26
- package/dist/signals/lib/permission.test.d.mts +0 -1
- package/dist/signals/lib/permission.test.mjs +0 -50
- package/dist/signals/lib/persisted-state.d.mts +0 -11
- package/dist/signals/lib/persisted-state.mjs +0 -25
- package/dist/signals/lib/persisted-state.test.d.mts +0 -1
- package/dist/signals/lib/persisted-state.test.mjs +0 -70
- package/dist/signals/lib/pressed-keys.d.mts +0 -10
- package/dist/signals/lib/pressed-keys.mjs +0 -32
- package/dist/signals/lib/pressed-keys.test.d.mts +0 -1
- package/dist/signals/lib/pressed-keys.test.mjs +0 -54
- package/dist/signals/lib/previous-distinct.d.mts +0 -10
- package/dist/signals/lib/previous-distinct.mjs +0 -22
- package/dist/signals/lib/previous-distinct.test.d.mts +0 -1
- package/dist/signals/lib/previous-distinct.test.mjs +0 -50
- package/dist/signals/lib/previous.d.mts +0 -10
- package/dist/signals/lib/previous.mjs +0 -18
- package/dist/signals/lib/previous.test.mjs +0 -47
- package/dist/signals/lib/queue.d.mts +0 -17
- package/dist/signals/lib/queue.mjs +0 -28
- package/dist/signals/lib/queue.test.d.mts +0 -1
- package/dist/signals/lib/queue.test.mjs +0 -61
- package/dist/signals/lib/raf.d.mts +0 -17
- package/dist/signals/lib/raf.mjs +0 -38
- package/dist/signals/lib/raf.test.d.mts +0 -1
- package/dist/signals/lib/raf.test.mjs +0 -58
- package/dist/signals/lib/resize-observer.d.mts +0 -8
- package/dist/signals/lib/resize-observer.test.d.mts +0 -1
- package/dist/signals/lib/resize-observer.test.mjs +0 -44
- package/dist/signals/lib/resource.d.mts +0 -23
- package/dist/signals/lib/resource.mjs +0 -43
- package/dist/signals/lib/resource.test.d.mts +0 -1
- package/dist/signals/lib/resource.test.mjs +0 -56
- package/dist/signals/lib/scroll-state.d.mts +0 -19
- package/dist/signals/lib/scroll-state.mjs +0 -46
- package/dist/signals/lib/scroll-state.test.d.mts +0 -1
- package/dist/signals/lib/scroll-state.test.mjs +0 -94
- package/dist/signals/lib/scrolling.d.mts +0 -12
- package/dist/signals/lib/scrolling.mjs +0 -26
- package/dist/signals/lib/scrolling.test.d.mts +0 -1
- package/dist/signals/lib/scrolling.test.mjs +0 -57
- package/dist/signals/lib/search-params.d.mts +0 -16
- package/dist/signals/lib/search-params.mjs +0 -37
- package/dist/signals/lib/search-params.test.mjs +0 -56
- package/dist/signals/lib/set.d.mts +0 -18
- package/dist/signals/lib/set.mjs +0 -38
- package/dist/signals/lib/set.test.d.mts +0 -1
- package/dist/signals/lib/set.test.mjs +0 -70
- package/dist/signals/lib/start-typing.d.mts +0 -9
- package/dist/signals/lib/start-typing.mjs +0 -39
- package/dist/signals/lib/start-typing.test.d.mts +0 -1
- package/dist/signals/lib/start-typing.test.mjs +0 -64
- package/dist/signals/lib/state-history.d.mts +0 -21
- package/dist/signals/lib/state-history.mjs +0 -61
- package/dist/signals/lib/state-history.test.d.mts +0 -1
- package/dist/signals/lib/state-history.test.mjs +0 -106
- package/dist/signals/lib/state-validator.d.mts +0 -16
- package/dist/signals/lib/state-validator.mjs +0 -21
- package/dist/signals/lib/state-validator.test.d.mts +0 -1
- package/dist/signals/lib/state-validator.test.mjs +0 -41
- package/dist/signals/lib/throttled.mjs +0 -45
- package/dist/signals/lib/timeout.mjs +0 -39
- package/dist/signals/lib/toggle.d.mts +0 -12
- package/dist/signals/lib/toggle.mjs +0 -12
- package/dist/signals/lib/toggle.test.d.mts +0 -1
- package/dist/signals/lib/toggle.test.mjs +0 -43
- package/dist/signals/lib/video.d.mts +0 -21
- package/dist/signals/lib/video.test.d.mts +0 -1
- package/dist/signals/lib/video.test.mjs +0 -51
- package/dist/signals/lib/watch.d.mts +0 -16
- package/dist/signals/lib/watch.mjs +0 -31
- package/dist/signals/lib/watch.test.d.mts +0 -1
- package/dist/signals/lib/watch.test.mjs +0 -51
- package/dist/signals/lib/window-size.d.mts +0 -14
- package/dist/signals/lib/window-size.mjs +0 -21
- package/dist/signals/lib/window-size.test.mjs +0 -50
- /package/dist/{signals/lib → utilities}/active-element.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/debounced.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/element-rect.test.d.mts +0 -0
- /package/dist/{signals/lib/animation-frames.test.d.mts → utilities/element-scroll.test.d.mts} +0 -0
- /package/dist/{signals/lib → utilities}/event-listener.test.d.mts +0 -0
- /package/dist/{signals/lib/async-retry.test.d.mts → utilities/focus-within.test.d.mts} +0 -0
- /package/dist/{signals/lib → utilities}/hover.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/intersection-observer.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/interval.test.d.mts +0 -0
- /package/dist/{signals/lib/audio.test.d.mts → utilities/location.test.d.mts} +0 -0
- /package/dist/{signals/lib → utilities}/long-press.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/media-devices.test.d.mts +0 -0
- /package/dist/{signals/lib/battery.test.d.mts → utilities/media-player.test.d.mts} +0 -0
- /package/dist/{signals/lib → utilities}/mutation-observer.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/on-click-outside.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/previous.test.d.mts +0 -0
- /package/dist/{signals/lib/before-unload.test.d.mts → utilities/routing.test.d.mts} +0 -0
- /package/dist/{signals/lib → utilities}/search-params.test.d.mts +0 -0
- /package/dist/{signals/lib/clipboard.test.d.mts → utilities/storage.test.d.mts} +0 -0
- /package/dist/{signals/lib → utilities}/throttled.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/timeout.test.d.mts +0 -0
- /package/dist/{signals/lib → utilities}/window-size.test.d.mts +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { o as describe, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
|
+
import { createElementScroll } from "./element-scroll.mjs";
|
|
4
|
+
//#region src/utilities/element-scroll.test.ts
|
|
5
|
+
describe("createElementScroll", () => {
|
|
6
|
+
it("starts at 0,0 for a new element", () => {
|
|
7
|
+
const el = document.createElement("div");
|
|
8
|
+
let scroll;
|
|
9
|
+
effectScope(() => {
|
|
10
|
+
scroll = createElementScroll(el);
|
|
11
|
+
});
|
|
12
|
+
globalExpect(scroll.x()).toBe(0);
|
|
13
|
+
globalExpect(scroll.y()).toBe(0);
|
|
14
|
+
});
|
|
15
|
+
it("cleans up on dispose", () => {
|
|
16
|
+
const el = document.createElement("div");
|
|
17
|
+
let scroll;
|
|
18
|
+
effectScope(() => {
|
|
19
|
+
scroll = createElementScroll(el);
|
|
20
|
+
});
|
|
21
|
+
scroll[Symbol.dispose]();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//#endregion
|
|
25
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as Signal, t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/utilities/event-driven.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* A subscribe function: registers a `notify` callback and returns an
|
|
6
6
|
* unsubscribe cleanup. Same contract as `useSyncExternalStore`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/
|
|
1
|
+
import { a as computed, f as onCleanup, m as trigger, p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
//#region src/utilities/event-driven.ts
|
|
3
3
|
/**
|
|
4
4
|
* Returns a `Subscribe` for one or more DOM events on a target.
|
|
5
5
|
*
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/utilities/event-listener.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Attaches a type-safe event listener to a target, with automatic cleanup.
|
|
6
|
+
*
|
|
7
|
+
* When called inside an `effect` or `effectScope` the listener is removed
|
|
8
|
+
* when the scope is disposed. When the target is a reactive getter the
|
|
9
|
+
* listener is re-registered whenever the target changes.
|
|
10
|
+
*/
|
|
11
|
+
declare function on<K extends keyof HTMLElementEventMap>(target: HTMLElement | Computed<HTMLElement | null>, type: K, handler: (e: HTMLElementEventMap[K]) => void, options?: AddEventListenerOptions): () => void;
|
|
12
|
+
declare function on<K extends keyof DocumentEventMap>(target: Document | Computed<Document | null>, type: K, handler: (e: DocumentEventMap[K]) => void, options?: AddEventListenerOptions): () => void;
|
|
13
|
+
declare function on<K extends keyof WindowEventMap>(target: Window | Computed<Window | null>, type: K, handler: (e: WindowEventMap[K]) => void, options?: AddEventListenerOptions): () => void;
|
|
14
|
+
declare function on(target: EventTarget | Computed<EventTarget | null>, type: string, handler: EventListener, options?: AddEventListenerOptions): () => void;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { on };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/
|
|
3
|
-
function
|
|
1
|
+
import { f as onCleanup, o as effect } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
//#region src/utilities/event-listener.ts
|
|
3
|
+
function on(target, type, handler, options) {
|
|
4
4
|
const add = (t) => options !== void 0 ? t.addEventListener(type, handler, options) : t.addEventListener(type, handler);
|
|
5
5
|
const del = (t) => options !== void 0 ? t.removeEventListener(type, handler, options) : t.removeEventListener(type, handler);
|
|
6
6
|
if (typeof target === "function") {
|
|
@@ -25,4 +25,4 @@ function createEventListener(target, type, handler, options) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
//#endregion
|
|
28
|
-
export {
|
|
28
|
+
export { on };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
//#region src/
|
|
1
|
+
import { o as effect, p as signal, s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { n as vi, o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
|
+
import { on } from "./event-listener.mjs";
|
|
4
|
+
//#region src/utilities/event-listener.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
});
|
|
@@ -11,7 +11,7 @@ describe("createEventListener", () => {
|
|
|
11
11
|
document.body.appendChild(el);
|
|
12
12
|
const handler = vi.fn();
|
|
13
13
|
effect(() => {
|
|
14
|
-
|
|
14
|
+
on(el, "click", handler);
|
|
15
15
|
});
|
|
16
16
|
el.dispatchEvent(new MouseEvent("click", { bubbles: true }));
|
|
17
17
|
globalExpect(handler).toHaveBeenCalledOnce();
|
|
@@ -21,7 +21,7 @@ describe("createEventListener", () => {
|
|
|
21
21
|
document.body.appendChild(el);
|
|
22
22
|
const handler = vi.fn();
|
|
23
23
|
effect(() => {
|
|
24
|
-
|
|
24
|
+
on(el, "click", handler);
|
|
25
25
|
})();
|
|
26
26
|
el.dispatchEvent(new MouseEvent("click", { bubbles: true }));
|
|
27
27
|
globalExpect(handler).not.toHaveBeenCalled();
|
|
@@ -31,7 +31,7 @@ describe("createEventListener", () => {
|
|
|
31
31
|
document.body.appendChild(el);
|
|
32
32
|
const handler = vi.fn();
|
|
33
33
|
effectScope(() => {
|
|
34
|
-
|
|
34
|
+
on(el, "click", handler);
|
|
35
35
|
})();
|
|
36
36
|
el.dispatchEvent(new MouseEvent("click", { bubbles: true }));
|
|
37
37
|
globalExpect(handler).not.toHaveBeenCalled();
|
|
@@ -43,7 +43,7 @@ describe("createEventListener", () => {
|
|
|
43
43
|
const target = signal(el1);
|
|
44
44
|
const handler = vi.fn();
|
|
45
45
|
effectScope(() => {
|
|
46
|
-
|
|
46
|
+
on(() => target(), "click", handler);
|
|
47
47
|
});
|
|
48
48
|
el1.dispatchEvent(new MouseEvent("click"));
|
|
49
49
|
globalExpect(handler).toHaveBeenCalledTimes(1);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/utilities/focus-within.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Returns a `Computed<boolean>` that is `true` while focus is anywhere inside
|
|
6
|
+
* `target` (including `target` itself).
|
|
7
|
+
*/
|
|
8
|
+
declare function createFocusWithin(target: Element): Computed<boolean>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { createFocusWithin };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { on } from "./event-listener.mjs";
|
|
3
|
+
//#region src/utilities/focus-within.ts
|
|
4
|
+
/**
|
|
5
|
+
* Returns a `Computed<boolean>` that is `true` while focus is anywhere inside
|
|
6
|
+
* `target` (including `target` itself).
|
|
7
|
+
*/
|
|
8
|
+
function createFocusWithin(target) {
|
|
9
|
+
const focused = signal(false);
|
|
10
|
+
const el = target;
|
|
11
|
+
if (el) {
|
|
12
|
+
on(el, "focusin", () => focused(true));
|
|
13
|
+
on(el, "focusout", (e) => {
|
|
14
|
+
if (!el.contains(e.relatedTarget)) focused(false);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return focused;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { createFocusWithin };
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
//#region src/
|
|
1
|
+
import { s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
|
+
import { createFocusWithin } from "./focus-within.mjs";
|
|
4
|
+
//#region src/utilities/focus-within.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
});
|
|
8
|
-
describe("
|
|
8
|
+
describe("createFocusWithin", () => {
|
|
9
9
|
it("starts as false", () => {
|
|
10
10
|
const el = document.createElement("div");
|
|
11
11
|
document.body.appendChild(el);
|
|
12
12
|
let focused;
|
|
13
13
|
effectScope(() => {
|
|
14
|
-
focused =
|
|
14
|
+
focused = createFocusWithin(el);
|
|
15
15
|
});
|
|
16
16
|
globalExpect(focused()).toBe(false);
|
|
17
17
|
});
|
|
@@ -22,7 +22,7 @@ describe("createIsFocusWithin", () => {
|
|
|
22
22
|
document.body.appendChild(outer);
|
|
23
23
|
let focused;
|
|
24
24
|
effectScope(() => {
|
|
25
|
-
focused =
|
|
25
|
+
focused = createFocusWithin(outer);
|
|
26
26
|
});
|
|
27
27
|
document.dispatchEvent(new FocusEvent("focusin", {
|
|
28
28
|
bubbles: true,
|
|
@@ -35,14 +35,13 @@ describe("createIsFocusWithin", () => {
|
|
|
35
35
|
outer.dispatchEvent(new FocusEvent("focusin", { bubbles: true }));
|
|
36
36
|
globalExpect(typeof focused()).toBe("boolean");
|
|
37
37
|
});
|
|
38
|
-
it("stops reacting after
|
|
38
|
+
it("stops reacting after scope disposal", () => {
|
|
39
39
|
const el = document.createElement("div");
|
|
40
40
|
document.body.appendChild(el);
|
|
41
41
|
let focused;
|
|
42
42
|
effectScope(() => {
|
|
43
|
-
focused =
|
|
44
|
-
});
|
|
45
|
-
focused[Symbol.dispose]();
|
|
43
|
+
focused = createFocusWithin(el);
|
|
44
|
+
})();
|
|
46
45
|
globalExpect(focused()).toBe(false);
|
|
47
46
|
});
|
|
48
47
|
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/utilities/hover.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Returns a `Computed<boolean>` that is `true` while the pointer is over
|
|
6
|
+
* `target`. Uses `pointerenter` / `pointerleave` so it works for both mouse
|
|
7
|
+
* and touch/stylus input.
|
|
8
|
+
*/
|
|
9
|
+
declare function createHover(target: Element): Computed<boolean>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { createHover };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { on } from "./event-listener.mjs";
|
|
3
|
+
//#region src/utilities/hover.ts
|
|
4
|
+
/**
|
|
5
|
+
* Returns a `Computed<boolean>` that is `true` while the pointer is over
|
|
6
|
+
* `target`. Uses `pointerenter` / `pointerleave` so it works for both mouse
|
|
7
|
+
* and touch/stylus input.
|
|
8
|
+
*/
|
|
9
|
+
function createHover(target) {
|
|
10
|
+
const hovered = signal(false);
|
|
11
|
+
const onEnter = () => hovered(true);
|
|
12
|
+
const onLeave = () => hovered(false);
|
|
13
|
+
if (target) {
|
|
14
|
+
on(target, "pointerenter", onEnter);
|
|
15
|
+
on(target, "pointerleave", onLeave);
|
|
16
|
+
}
|
|
17
|
+
return hovered;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { createHover };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { n as vi, o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
3
|
import { createHover } from "./hover.mjs";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/utilities/hover.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
vi.restoreAllMocks();
|
|
@@ -37,27 +37,16 @@ describe("createHover", () => {
|
|
|
37
37
|
el.dispatchEvent(new PointerEvent("pointerleave"));
|
|
38
38
|
globalExpect(hovered()).toBe(false);
|
|
39
39
|
});
|
|
40
|
-
it("removes listeners on
|
|
40
|
+
it("removes listeners on scope disposal", () => {
|
|
41
41
|
const el = document.createElement("div");
|
|
42
42
|
document.body.appendChild(el);
|
|
43
43
|
let hovered;
|
|
44
44
|
effectScope(() => {
|
|
45
45
|
hovered = createHover(el);
|
|
46
|
-
});
|
|
47
|
-
hovered[Symbol.dispose]();
|
|
46
|
+
})();
|
|
48
47
|
el.dispatchEvent(new PointerEvent("pointerenter"));
|
|
49
48
|
globalExpect(hovered()).toBe(false);
|
|
50
49
|
});
|
|
51
|
-
it("works with a reactive getter target", () => {
|
|
52
|
-
const el = document.createElement("div");
|
|
53
|
-
document.body.appendChild(el);
|
|
54
|
-
let hovered;
|
|
55
|
-
effectScope(() => {
|
|
56
|
-
hovered = createHover(() => el);
|
|
57
|
-
});
|
|
58
|
-
el.dispatchEvent(new PointerEvent("pointerenter"));
|
|
59
|
-
globalExpect(hovered()).toBe(true);
|
|
60
|
-
});
|
|
61
50
|
});
|
|
62
51
|
//#endregion
|
|
63
52
|
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/utilities/intersection-observer.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Raw `IntersectionObserver` wrapper with automatic cleanup.
|
|
4
|
+
* Use `createIsInViewport` for the common boolean case.
|
|
5
|
+
*/
|
|
6
|
+
declare function createIntersectionObserver(target: Element, callback: IntersectionObserverCallback, options?: IntersectionObserverInit): Disposable;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { createIntersectionObserver };
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/
|
|
1
|
+
import { f as onCleanup } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
//#region src/utilities/intersection-observer.ts
|
|
3
3
|
/**
|
|
4
4
|
* Raw `IntersectionObserver` wrapper with automatic cleanup.
|
|
5
5
|
* Use `createIsInViewport` for the common boolean case.
|
|
6
6
|
*/
|
|
7
7
|
function createIntersectionObserver(target, callback, options) {
|
|
8
8
|
const observer = new IntersectionObserver(callback, options);
|
|
9
|
-
|
|
10
|
-
if (el) observer.observe(el);
|
|
9
|
+
if (target) observer.observe(target);
|
|
11
10
|
const cleanup = () => observer.disconnect();
|
|
12
11
|
onCleanup(cleanup);
|
|
13
12
|
return { [Symbol.dispose]: cleanup };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { n as vi, o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
3
|
import { createIntersectionObserver } from "./intersection-observer.mjs";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/utilities/intersection-observer.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
vi.unstubAllGlobals();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as Computed } from "
|
|
1
|
+
import { t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/utilities/interval.d.ts
|
|
4
4
|
type IntervalResult = {
|
|
5
5
|
isRunning: Computed<boolean>;
|
|
6
6
|
start(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/
|
|
1
|
+
import { f as onCleanup, p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
//#region src/utilities/interval.ts
|
|
3
3
|
/**
|
|
4
4
|
* Pausable `setInterval` wrapper. Starts running immediately on creation.
|
|
5
5
|
*
|
|
@@ -27,12 +27,13 @@ function createInterval(callback, delay) {
|
|
|
27
27
|
start();
|
|
28
28
|
const cleanup = () => stop();
|
|
29
29
|
onCleanup(cleanup);
|
|
30
|
-
return
|
|
30
|
+
return {
|
|
31
31
|
isRunning,
|
|
32
32
|
start,
|
|
33
33
|
stop,
|
|
34
|
-
reset
|
|
35
|
-
|
|
34
|
+
reset,
|
|
35
|
+
[Symbol.dispose]: cleanup
|
|
36
|
+
};
|
|
36
37
|
}
|
|
37
38
|
//#endregion
|
|
38
39
|
export { createInterval };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { n as vi, o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
3
|
import { createInterval } from "./interval.mjs";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/utilities/interval.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
vi.useRealTimers();
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/utilities/location.d.ts
|
|
4
|
+
type LocationResult = {
|
|
5
|
+
hash: Computed<string>;
|
|
6
|
+
href: Computed<string>;
|
|
7
|
+
pathname: Computed<string>;
|
|
8
|
+
search: Computed<string>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Returns reactive signals for the four commonly used `location` properties:
|
|
12
|
+
* `hash`, `href`, `pathname`, and `search`.
|
|
13
|
+
*
|
|
14
|
+
* All four share a single event listener set, so creating one `LocationResult`
|
|
15
|
+
* is cheaper than creating four separate signals.
|
|
16
|
+
*
|
|
17
|
+
* **Custom events note:** `pushstate` and `replacestate` are not native DOM
|
|
18
|
+
* events — they must be dispatched by your router or by patching `history`.
|
|
19
|
+
* Back/forward navigation via `popstate` always works without any setup.
|
|
20
|
+
*/
|
|
21
|
+
declare function createLocation(): LocationResult;
|
|
22
|
+
declare const currentLocation: LocationResult;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { createLocation, currentLocation };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { a as computed, f as onCleanup, m as trigger, p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { fromEvent } from "./event-driven.mjs";
|
|
3
|
+
//#region src/utilities/location.ts
|
|
4
|
+
const EVENTS = [
|
|
5
|
+
"popstate",
|
|
6
|
+
"pushstate",
|
|
7
|
+
"replacestate",
|
|
8
|
+
"hashchange"
|
|
9
|
+
];
|
|
10
|
+
const read = (prop) => typeof location !== "undefined" ? String(location[prop]) : "";
|
|
11
|
+
/**
|
|
12
|
+
* Returns reactive signals for the four commonly used `location` properties:
|
|
13
|
+
* `hash`, `href`, `pathname`, and `search`.
|
|
14
|
+
*
|
|
15
|
+
* All four share a single event listener set, so creating one `LocationResult`
|
|
16
|
+
* is cheaper than creating four separate signals.
|
|
17
|
+
*
|
|
18
|
+
* **Custom events note:** `pushstate` and `replacestate` are not native DOM
|
|
19
|
+
* events — they must be dispatched by your router or by patching `history`.
|
|
20
|
+
* Back/forward navigation via `popstate` always works without any setup.
|
|
21
|
+
*/
|
|
22
|
+
function createLocation() {
|
|
23
|
+
const tick = signal(void 0);
|
|
24
|
+
onCleanup(fromEvent(window, EVENTS)(() => trigger(tick)));
|
|
25
|
+
const hash = computed(() => {
|
|
26
|
+
tick();
|
|
27
|
+
return read("hash");
|
|
28
|
+
});
|
|
29
|
+
const href = computed(() => {
|
|
30
|
+
tick();
|
|
31
|
+
return read("href");
|
|
32
|
+
});
|
|
33
|
+
const pathname = computed(() => {
|
|
34
|
+
tick();
|
|
35
|
+
return read("pathname");
|
|
36
|
+
});
|
|
37
|
+
const search = computed(() => {
|
|
38
|
+
tick();
|
|
39
|
+
return read("search");
|
|
40
|
+
});
|
|
41
|
+
hash();
|
|
42
|
+
href();
|
|
43
|
+
pathname();
|
|
44
|
+
search();
|
|
45
|
+
return {
|
|
46
|
+
hash,
|
|
47
|
+
href,
|
|
48
|
+
pathname,
|
|
49
|
+
search
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const currentLocation = createLocation();
|
|
53
|
+
//#endregion
|
|
54
|
+
export { createLocation, currentLocation };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
2
|
+
import { createLocation, currentLocation } from "./location.mjs";
|
|
3
|
+
//#region src/utilities/location.test.ts
|
|
4
|
+
afterEach(() => {
|
|
5
|
+
location.hash = "";
|
|
6
|
+
history.replaceState(null, "", "/");
|
|
7
|
+
});
|
|
8
|
+
describe("currentLocation (singleton)", () => {
|
|
9
|
+
it("reads current hash", () => {
|
|
10
|
+
globalExpect(currentLocation.hash()).toBe(location.hash);
|
|
11
|
+
});
|
|
12
|
+
it("reads current href", () => {
|
|
13
|
+
globalExpect(typeof currentLocation.href()).toBe("string");
|
|
14
|
+
});
|
|
15
|
+
it("reads current pathname", () => {
|
|
16
|
+
globalExpect(typeof currentLocation.pathname()).toBe("string");
|
|
17
|
+
});
|
|
18
|
+
it("reads current search", () => {
|
|
19
|
+
globalExpect(typeof currentLocation.search()).toBe("string");
|
|
20
|
+
});
|
|
21
|
+
it("updates hash on hashchange", () => {
|
|
22
|
+
location.hash = "#foo";
|
|
23
|
+
window.dispatchEvent(new HashChangeEvent("hashchange"));
|
|
24
|
+
globalExpect(currentLocation.hash()).toBe("#foo");
|
|
25
|
+
});
|
|
26
|
+
it("updates href on popstate", () => {
|
|
27
|
+
history.replaceState(null, "", "/foo");
|
|
28
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
29
|
+
globalExpect(currentLocation.href()).toMatch(/\/foo$/);
|
|
30
|
+
});
|
|
31
|
+
it("updates pathname on popstate", () => {
|
|
32
|
+
history.replaceState(null, "", "/new-page");
|
|
33
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
34
|
+
globalExpect(currentLocation.pathname()).toBe("/new-page");
|
|
35
|
+
});
|
|
36
|
+
it("updates href on hashchange", () => {
|
|
37
|
+
history.replaceState(null, "", "/bar#baz");
|
|
38
|
+
window.dispatchEvent(new HashChangeEvent("hashchange"));
|
|
39
|
+
globalExpect(currentLocation.href()).toMatch(/#baz$/);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe("createLocation (factory)", () => {
|
|
43
|
+
it("returns independent location signals", () => {
|
|
44
|
+
const loc = createLocation();
|
|
45
|
+
globalExpect(typeof loc.hash()).toBe("string");
|
|
46
|
+
globalExpect(typeof loc.href()).toBe("string");
|
|
47
|
+
globalExpect(typeof loc.pathname()).toBe("string");
|
|
48
|
+
globalExpect(typeof loc.search()).toBe("string");
|
|
49
|
+
});
|
|
50
|
+
it("all four properties update from a single event", () => {
|
|
51
|
+
const loc = createLocation();
|
|
52
|
+
history.replaceState(null, "", "/factory-test?q=1#section");
|
|
53
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
54
|
+
globalExpect(loc.pathname()).toBe("/factory-test");
|
|
55
|
+
globalExpect(loc.search()).toBe("?q=1");
|
|
56
|
+
globalExpect(loc.hash()).toBe("#section");
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//#endregion
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/utilities/long-press.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Fires `handler` when a pointer is held over `target` for at least `delay`
|
|
4
|
+
* milliseconds (default: 500 ms).
|
|
5
|
+
*/
|
|
6
|
+
declare function createLongPress(target: Element, handler: (e: PointerEvent) => void, options?: {
|
|
7
|
+
delay?: number;
|
|
8
|
+
}): () => void;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { createLongPress };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createTimeout } from "./timeout.mjs";
|
|
2
|
+
import { on } from "./event-listener.mjs";
|
|
3
|
+
//#region src/utilities/long-press.ts
|
|
4
|
+
/**
|
|
5
|
+
* Fires `handler` when a pointer is held over `target` for at least `delay`
|
|
6
|
+
* milliseconds (default: 500 ms).
|
|
7
|
+
*/
|
|
8
|
+
function createLongPress(target, handler, options = {}) {
|
|
9
|
+
const { delay = 500 } = options;
|
|
10
|
+
let lastEvent;
|
|
11
|
+
const { reset, stop } = createTimeout(() => handler(lastEvent), delay, false);
|
|
12
|
+
const cleanups = [
|
|
13
|
+
on(target, "pointerdown", (e) => {
|
|
14
|
+
lastEvent = e;
|
|
15
|
+
reset();
|
|
16
|
+
}),
|
|
17
|
+
on(target, "pointerup", stop),
|
|
18
|
+
on(target, "pointerleave", stop),
|
|
19
|
+
on(target, "pointermove", stop)
|
|
20
|
+
];
|
|
21
|
+
return () => {
|
|
22
|
+
stop();
|
|
23
|
+
cleanups.forEach((fn) => fn());
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { createLongPress };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { n as vi, o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
3
|
import { createLongPress } from "./long-press.mjs";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/utilities/long-press.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
vi.useRealTimers();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { t as Computed } from "
|
|
1
|
+
import { t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/utilities/media-devices.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Returns a reactive list of available media devices, refreshed whenever
|
|
6
6
|
* devices are added or removed.
|
|
7
7
|
*/
|
|
8
|
-
declare function createMediaDevices(): Computed<MediaDeviceInfo[]
|
|
8
|
+
declare function createMediaDevices(): Computed<MediaDeviceInfo[]>;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { createMediaDevices };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
//#region src/
|
|
1
|
+
import { p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { on } from "./event-listener.mjs";
|
|
3
|
+
//#region src/utilities/media-devices.ts
|
|
4
4
|
/**
|
|
5
5
|
* Returns a reactive list of available media devices, refreshed whenever
|
|
6
6
|
* devices are added or removed.
|
|
@@ -11,8 +11,8 @@ function createMediaDevices() {
|
|
|
11
11
|
navigator.mediaDevices.enumerateDevices().then((list) => devices(list));
|
|
12
12
|
};
|
|
13
13
|
refresh();
|
|
14
|
-
|
|
15
|
-
return
|
|
14
|
+
on(navigator.mediaDevices, "devicechange", refresh);
|
|
15
|
+
return devices;
|
|
16
16
|
}
|
|
17
17
|
//#endregion
|
|
18
18
|
export { createMediaDevices };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { n as vi, o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
3
|
import { createMediaDevices } from "./media-devices.mjs";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/utilities/media-devices.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
vi.unstubAllGlobals();
|
|
@@ -25,18 +25,16 @@ describe("createMediaDevices", () => {
|
|
|
25
25
|
await new Promise((res) => setTimeout(res, 0));
|
|
26
26
|
globalExpect(d()).toEqual(mockDevices);
|
|
27
27
|
});
|
|
28
|
-
it("removes devicechange listener on
|
|
28
|
+
it("removes devicechange listener on scope disposal", () => {
|
|
29
29
|
const removeListener = vi.fn();
|
|
30
30
|
vi.stubGlobal("navigator", { mediaDevices: {
|
|
31
31
|
enumerateDevices: vi.fn().mockResolvedValue([]),
|
|
32
32
|
addEventListener: vi.fn(),
|
|
33
33
|
removeEventListener: removeListener
|
|
34
34
|
} });
|
|
35
|
-
let d;
|
|
36
35
|
effectScope(() => {
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
d[Symbol.dispose]();
|
|
36
|
+
createMediaDevices();
|
|
37
|
+
})();
|
|
40
38
|
globalExpect(removeListener).toHaveBeenCalledWith("devicechange", globalExpect.any(Function));
|
|
41
39
|
});
|
|
42
40
|
});
|