elements-kit 0.0.9 → 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/utilities/event-driven.d.mts +47 -0
- package/dist/utilities/event-driven.mjs +38 -0
- 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/utilities/media-player.mjs +36 -0
- 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/utilities/media-query.mjs +19 -0
- 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/utilities/orientation.mjs +21 -0
- 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 -20
- 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 -26
- package/dist/signals/lib/audio.mjs +0 -60
- package/dist/signals/lib/audio.test.mjs +0 -54
- 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 -26
- package/dist/signals/lib/fullscreen.test.d.mts +0 -1
- package/dist/signals/lib/fullscreen.test.mjs +0 -56
- 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 -20
- package/dist/signals/lib/hash.test.d.mts +0 -1
- package/dist/signals/lib/hash.test.mjs +0 -47
- 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 -19
- 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/media.mjs +0 -26
- 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.mjs +0 -21
- 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 -25
- package/dist/signals/lib/video.mjs +0 -59
- 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 -22
- 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
package/README.md
CHANGED
|
@@ -224,7 +224,7 @@ customElements.define("x-counter", CounterElement);
|
|
|
224
224
|
Connect signals and stores to React components via `useSyncExternalStore`:
|
|
225
225
|
|
|
226
226
|
```tsx
|
|
227
|
-
import { useSignal, useScope } from "elements-kit/
|
|
227
|
+
import { useSignal, useScope } from "elements-kit/integrations/react";
|
|
228
228
|
import { cart } from "./cart-store";
|
|
229
229
|
|
|
230
230
|
function CartSummary() {
|
|
@@ -245,12 +245,12 @@ The same `cart` store drives custom elements, React trees, and plain scripts —
|
|
|
245
245
|
|
|
246
246
|
---
|
|
247
247
|
|
|
248
|
-
##
|
|
248
|
+
## Utilities
|
|
249
249
|
|
|
250
250
|
Pre-built signal factories for common browser APIs:
|
|
251
251
|
|
|
252
252
|
```ts
|
|
253
|
-
import { createMediaQuery } from "elements-kit/
|
|
253
|
+
import { createMediaQuery } from "elements-kit/utilities/media-query";
|
|
254
254
|
|
|
255
255
|
const isDark = createMediaQuery("(prefers-color-scheme: dark)");
|
|
256
256
|
const isMobile = createMediaQuery("(max-width: 640px)");
|
|
@@ -323,7 +323,6 @@ class MyElement extends HTMLElement {
|
|
|
323
323
|
|
|
324
324
|
## Roadmap
|
|
325
325
|
|
|
326
|
-
- [ ] More signal helpers (`localStorage`, `IntersectionObserver`, `ResizeObserver`, …)
|
|
327
326
|
- [ ] Context — share state across a subtree without prop drilling
|
|
328
327
|
- [ ] Async signal — `signal.from(promise)`, `signal.from(observable)`
|
|
329
328
|
- [ ] UI library — pre-built reactive components built on ElementsKit primitives
|
package/dist/builder/dom.d.mts
CHANGED
package/dist/builder/index.d.mts
CHANGED
|
@@ -1,2 +1,88 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as PrimitiveNodeType } from "../lib-BYJ5jPTG.mjs";
|
|
2
|
+
//#region src/builder/index.d.ts
|
|
3
|
+
declare const DISPOSABLES: unique symbol;
|
|
4
|
+
declare const DISPOSE: symbol;
|
|
5
|
+
declare const VALUE: unique symbol;
|
|
6
|
+
declare const EFFECT: unique symbol;
|
|
7
|
+
declare class ElementBuilder<T extends Element = Element> {
|
|
8
|
+
/** Dispose the reactive element and run all cleanup functions */
|
|
9
|
+
[DISPOSE]: () => void;
|
|
10
|
+
/** The underlying DOM element */
|
|
11
|
+
private [VALUE];
|
|
12
|
+
/** A set of cleanup functions to run when disposing the element */
|
|
13
|
+
private [DISPOSABLES];
|
|
14
|
+
[EFFECT](fn: () => void): this;
|
|
15
|
+
private constructor();
|
|
16
|
+
static create<T extends Element>(el: T): ReactiveElement<T>;
|
|
17
|
+
children(...children: ValueOrReactive<ElementBuilder | Node | string | number>[]): T;
|
|
18
|
+
ref(): T;
|
|
19
|
+
ref(apply: (ref: T) => void | (() => void)): this;
|
|
20
|
+
on<K extends keyof HTMLElementEventMap>(eventType: K, listener: (ev: HTMLElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions): this;
|
|
21
|
+
}
|
|
22
|
+
declare function toNode(c: ElementBuilder | PrimitiveNodeType): Node;
|
|
23
|
+
declare function builder<T extends Element>(el: T): ReactiveElementOf<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Callable overloads matching the Proxy apply trap → ref() behavior.
|
|
26
|
+
* Calling a reactive element as a function delegates to ref():
|
|
27
|
+
* el() → returns the raw DOM element
|
|
28
|
+
* el((ref) => {}) → applies a side-effect, returns the builder for chaining
|
|
29
|
+
*/
|
|
30
|
+
interface RefCallable<T extends Element> {
|
|
31
|
+
(): T;
|
|
32
|
+
(apply: (ref: T) => void | (() => void)): this;
|
|
33
|
+
}
|
|
34
|
+
type ReactiveElement<T extends Element> = ElementBuilder<T> & RefCallable<T>;
|
|
35
|
+
type ValueOrReactive<T> = (() => T) | T;
|
|
36
|
+
type ValueOrReactiveArray<T extends any[]> = { [K in keyof T]: ValueOrReactive<T[K]> | T[K] };
|
|
37
|
+
/**
|
|
38
|
+
* Filter keys that are writable (exclude readonly and getter-only).
|
|
39
|
+
*/
|
|
40
|
+
type WritableKeys<T> = { [K in keyof T]: (<U>() => U extends { [Q in K]: T[K] } ? 1 : 2) extends (<U>() => U extends { readonly [Q in K]: T[K] } ? 1 : 2) ? never : K }[keyof T];
|
|
41
|
+
/**
|
|
42
|
+
* Extracts the object chaining part of ReactiveBuilder.
|
|
43
|
+
* Used for properties like `style` where you can do both:
|
|
44
|
+
* .style("padding: 20px;") // setter
|
|
45
|
+
* .style.padding("20px") // sub-property chaining
|
|
46
|
+
*/
|
|
47
|
+
type Chain<R, T> = T extends object ? { [K in WritableKeys<T>]: Builder<R, T[K]> } : {};
|
|
48
|
+
type Builder<R, T = R> = T extends ((...args: infer U) => unknown) ? (...value: ValueOrReactiveArray<U>) => R : (value?: ValueOrReactive<T>) => R;
|
|
49
|
+
/**
|
|
50
|
+
* Types eligible for sub-property chaining (e.g., `.style.padding("20px")`).
|
|
51
|
+
*/
|
|
52
|
+
type ChainableType = CSSStyleDeclaration | DOMTokenList | DOMStringMap | StylePropertyMap;
|
|
53
|
+
/**
|
|
54
|
+
* Filters keys to only writable data properties.
|
|
55
|
+
* Excludes methods (function-valued properties) and event handlers (`on*`).
|
|
56
|
+
*/
|
|
57
|
+
type DataPropertyKeys<T> = { [K in keyof T]: K extends `on${string}` ? never : T[K] extends ((...args: any[]) => any) ? never : K }[keyof T];
|
|
58
|
+
/**
|
|
59
|
+
* Reactive setter for a single property.
|
|
60
|
+
* Chainable types (CSSStyleDeclaration, DOMTokenList, etc.) get both
|
|
61
|
+
* sub-property chaining and direct setter support.
|
|
62
|
+
*/
|
|
63
|
+
type ReactiveSetter<R, T> = T extends ChainableType ? Chain<R, T> & ((value: ValueOrReactive<T>) => R) : (value: ValueOrReactive<T>) => R;
|
|
64
|
+
/**
|
|
65
|
+
* A fully-typed reactive element builder for any Element type.
|
|
66
|
+
* Automatically maps all writable data properties into reactive setters.
|
|
67
|
+
*
|
|
68
|
+
* Use this for custom elements instead of needing generated builder interfaces.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* import { reactive, type ReactiveElementOf } from "elements-kit";
|
|
73
|
+
*
|
|
74
|
+
* class MyElement extends HTMLElement {
|
|
75
|
+
* greeting = "hello";
|
|
76
|
+
* }
|
|
77
|
+
* customElements.define("my-element", MyElement);
|
|
78
|
+
*
|
|
79
|
+
* const myEl = () =>
|
|
80
|
+
* reactive(document.createElement("my-element") as MyElement);
|
|
81
|
+
*
|
|
82
|
+
* // Full type support for both own and inherited properties:
|
|
83
|
+
* myEl().greeting("world").style.padding("20px").id("main");
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
type ReactiveElementOf<T extends Element> = ElementBuilder<T> & { [K in WritableKeys<T> & DataPropertyKeys<T> & keyof T]: ReactiveSetter<ReactiveElementOf<T>, T[K]> };
|
|
87
|
+
//#endregion
|
|
2
88
|
export { Builder, Chain, DISPOSABLES, DISPOSE, EFFECT, ElementBuilder, ReactiveElement, ReactiveElementOf, VALUE, ValueOrReactive, builder, toNode };
|
package/dist/builder/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as effect, t as isReactive } from "../signals-DcgXhkU2.mjs";
|
|
2
2
|
import "../polyfill-B1lNNcum.mjs";
|
|
3
3
|
import { i as resolveNode, n as Slot } from "../slot-Cydy7-0L.mjs";
|
|
4
4
|
//#region src/builder/index.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { f as onCleanup, h as untracked, o as effect, s as effectScope, t as isReactive } from "./signals-DcgXhkU2.mjs";
|
|
2
2
|
import "./polyfill-B1lNNcum.mjs";
|
|
3
3
|
import { i as resolveNode$1, n as Slot, r as Slots, t as $slots } from "./slot-Cydy7-0L.mjs";
|
|
4
4
|
//#region \0rolldown/runtime.js
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { u as ValueOrReactive } from "./index-CKjDUp1B.mjs";
|
|
2
|
-
|
|
3
1
|
//#region src/signals/lib.d.ts
|
|
4
2
|
/**
|
|
5
3
|
* Returns `true` if `fn` is a signal handle created by {@link signal}.
|
|
@@ -220,7 +218,7 @@ declare function untracked<T>(fn: Computed<T>): T;
|
|
|
220
218
|
declare function trigger<T = void>(fn: Computed<T>): void;
|
|
221
219
|
//#endregion
|
|
222
220
|
//#region src/signals/index.d.ts
|
|
223
|
-
declare function isReactive<T>(value:
|
|
221
|
+
declare function isReactive<T>(value: MaybeReactive<T>): value is () => T;
|
|
224
222
|
type Updater<T> = (value: T) => void;
|
|
225
223
|
type Computed<T> = () => T;
|
|
226
224
|
type Signal<T> = Updater<T> & Computed<T>;
|
|
@@ -253,5 +251,11 @@ type Signal<T> = Updater<T> & Computed<T>;
|
|
|
253
251
|
* ```
|
|
254
252
|
*/
|
|
255
253
|
declare function reactive<This extends object, Value>(source?: (self: This) => Signal<Value>): (_target: unknown, context: ClassFieldDecoratorContext<This, Value>) => (this: This, initialValue: Value) => Value;
|
|
254
|
+
type MaybeReactive<T> = T | Computed<T>;
|
|
255
|
+
/**
|
|
256
|
+
* Resolves a MaybeReactive<T> to its current value.
|
|
257
|
+
* If the input is a function, calls it; otherwise returns as-is.
|
|
258
|
+
*/
|
|
259
|
+
declare function resolve<T>(value: MaybeReactive<T>): T;
|
|
256
260
|
//#endregion
|
|
257
|
-
export {
|
|
261
|
+
export { signal as _, isReactive as a, batch as c, effectScope as d, isComputed as f, onCleanup as g, isSignal as h, Updater as i, computed as l, isEffectScope as m, MaybeReactive as n, reactive as o, isEffect as p, Signal as r, resolve as s, Computed as t, effect as u, trigger as v, untracked as y };
|
package/dist/index.d.mts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as disposeElement } from "./element-
|
|
2
|
-
import {
|
|
3
|
-
//#region src/
|
|
1
|
+
import { n as disposeElement } from "./element-MXzFk4G2.mjs";
|
|
2
|
+
import { f as onCleanup, h as untracked, m as trigger, o as effect, p as signal } from "./signals-DcgXhkU2.mjs";
|
|
3
|
+
//#region src/jsx-runtime/for.ts
|
|
4
4
|
/**
|
|
5
5
|
* Keyed list renderer. Reconciles a reactive array into the DOM using a key
|
|
6
6
|
* function to match existing nodes — minimising create/destroy churn.
|
|
@@ -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/integrations/react.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Subscribe to any readable signal — writable or computed — returning its current value.
|
|
6
6
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as effect, p as signal, s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
2
|
import { useEffect, useMemo, useRef, useSyncExternalStore } from "react";
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/integrations/react.ts
|
|
4
4
|
/**
|
|
5
5
|
* Subscribe to any readable signal — writable or computed — returning its current value.
|
|
6
6
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as PrimitiveNodeType } from "../
|
|
1
|
+
import { t as PrimitiveNodeType } from "../lib-BYJ5jPTG.mjs";
|
|
2
2
|
import { JSX as JSX$1 } from "dom-expressions/src/jsx-h";
|
|
3
3
|
|
|
4
4
|
//#region src/jsx-runtime/types.d.ts
|
|
@@ -20,7 +20,7 @@ declare function createElement(type: string | Element | DocumentFragment | Compo
|
|
|
20
20
|
//#region src/jsx-runtime/ref.d.ts
|
|
21
21
|
declare const $ref: unique symbol;
|
|
22
22
|
//#endregion
|
|
23
|
-
//#region src/
|
|
23
|
+
//#region src/jsx-runtime/fragment.d.ts
|
|
24
24
|
/**
|
|
25
25
|
* Used by the JSX transform for `<>...</>` fragments.
|
|
26
26
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as createElement } from "../element-
|
|
2
|
-
import {
|
|
3
|
-
//#region src/
|
|
1
|
+
import { t as createElement } from "../element-MXzFk4G2.mjs";
|
|
2
|
+
import { f as onCleanup } from "../signals-DcgXhkU2.mjs";
|
|
3
|
+
//#region src/jsx-runtime/fragment.ts
|
|
4
4
|
/**
|
|
5
5
|
* Used by the JSX transform for `<>...</>` fragments.
|
|
6
6
|
*
|
package/dist/signals/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as
|
|
2
|
-
export { Computed, Signal, Updater, batch, computed, effect, effectScope, isComputed, isEffect, isEffectScope, isReactive, isSignal, onCleanup, reactive, signal, trigger, untracked };
|
|
1
|
+
import { _ as signal, a as isReactive, c as batch, d as effectScope, f as isComputed, g as onCleanup, h as isSignal, i as Updater, l as computed, m as isEffectScope, n as MaybeReactive, o as reactive, p as isEffect, r as Signal, s as resolve, t as Computed, u as effect, v as trigger, y as untracked } from "../index-Cvdhuy6Y.mjs";
|
|
2
|
+
export { Computed, MaybeReactive, Signal, Updater, batch, computed, effect, effectScope, isComputed, isEffect, isEffectScope, isReactive, isSignal, onCleanup, reactive, resolve, signal, trigger, untracked };
|
package/dist/signals/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
export { batch, computed, effect, effectScope, isComputed, isEffect, isEffectScope, isReactive, isSignal, onCleanup, reactive, signal, trigger, untracked };
|
|
1
|
+
import { a as computed, c as isComputed, d as isSignal, f as onCleanup, h as untracked, i as batch, l as isEffect, m as trigger, n as reactive, o as effect, p as signal, r as resolve, s as effectScope, t as isReactive, u as isEffectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
export { batch, computed, effect, effectScope, isComputed, isEffect, isEffectScope, isReactive, isSignal, onCleanup, reactive, resolve, signal, trigger, untracked };
|
|
@@ -290,6 +290,12 @@ let queuedLength = 0;
|
|
|
290
290
|
* link back to this node.
|
|
291
291
|
*/
|
|
292
292
|
let activeSub;
|
|
293
|
+
/**
|
|
294
|
+
* The innermost effect or effectScope that owns the current execution frame.
|
|
295
|
+
* Unlike `activeSub`, this is **not** cleared by `untracked`, so `onCleanup`
|
|
296
|
+
* can be called from inside an untracked block and still register correctly.
|
|
297
|
+
*/
|
|
298
|
+
let activeOwner;
|
|
293
299
|
/** Ring-buffer of effects waiting to be flushed. */
|
|
294
300
|
const queued = [];
|
|
295
301
|
const { link, unlink, propagate, checkDirty, shallowPropagate } = createReactiveSystem({
|
|
@@ -471,11 +477,14 @@ function effect(fn) {
|
|
|
471
477
|
flags: ReactiveFlags.Watching | ReactiveFlags.RecursedCheck
|
|
472
478
|
};
|
|
473
479
|
const prevSub = setActiveSub(e);
|
|
480
|
+
const prevOwner = activeOwner;
|
|
481
|
+
activeOwner = e;
|
|
474
482
|
if (prevSub !== void 0) link(e, prevSub, 0);
|
|
475
483
|
try {
|
|
476
484
|
e.fn();
|
|
477
485
|
} finally {
|
|
478
486
|
activeSub = prevSub;
|
|
487
|
+
activeOwner = prevOwner;
|
|
479
488
|
e.flags &= ~ReactiveFlags.RecursedCheck;
|
|
480
489
|
}
|
|
481
490
|
return effectOper.bind(e);
|
|
@@ -513,11 +522,14 @@ function effectScope(fn) {
|
|
|
513
522
|
flags: ReactiveFlags.None
|
|
514
523
|
};
|
|
515
524
|
const prevSub = setActiveSub(e);
|
|
525
|
+
const prevOwner = activeOwner;
|
|
526
|
+
activeOwner = e;
|
|
516
527
|
if (prevSub !== void 0) link(e, prevSub, 0);
|
|
517
528
|
try {
|
|
518
529
|
fn();
|
|
519
530
|
} finally {
|
|
520
531
|
activeSub = prevSub;
|
|
532
|
+
activeOwner = prevOwner;
|
|
521
533
|
}
|
|
522
534
|
return effectScopeOper.bind(e);
|
|
523
535
|
}
|
|
@@ -560,7 +572,11 @@ function effectScope(fn) {
|
|
|
560
572
|
* ```
|
|
561
573
|
*/
|
|
562
574
|
function onCleanup(fn) {
|
|
563
|
-
if (
|
|
575
|
+
if (activeOwner !== void 0) {
|
|
576
|
+
const node = activeOwner;
|
|
577
|
+
if (node.onCleanup === void 0) node.onCleanup = [fn];
|
|
578
|
+
else node.onCleanup.push(fn);
|
|
579
|
+
}
|
|
564
580
|
}
|
|
565
581
|
/**
|
|
566
582
|
* Runs `fn` as a single atomic update: all signal writes inside `fn` are
|
|
@@ -698,17 +714,22 @@ function run(e) {
|
|
|
698
714
|
if (flags & ReactiveFlags.Dirty || flags & ReactiveFlags.Pending && checkDirty(e.deps, e)) {
|
|
699
715
|
++cycle;
|
|
700
716
|
if (e.onCleanup !== void 0) {
|
|
701
|
-
const
|
|
717
|
+
const cleanups = e.onCleanup;
|
|
702
718
|
e.onCleanup = void 0;
|
|
703
|
-
|
|
719
|
+
untracked(() => {
|
|
720
|
+
for (const fn of cleanups) fn();
|
|
721
|
+
});
|
|
704
722
|
}
|
|
705
723
|
e.depsTail = void 0;
|
|
706
724
|
e.flags = ReactiveFlags.Watching | ReactiveFlags.RecursedCheck;
|
|
707
725
|
const prevSub = setActiveSub(e);
|
|
726
|
+
const prevOwner = activeOwner;
|
|
727
|
+
activeOwner = e;
|
|
708
728
|
try {
|
|
709
729
|
e.fn();
|
|
710
730
|
} finally {
|
|
711
731
|
activeSub = prevSub;
|
|
732
|
+
activeOwner = prevOwner;
|
|
712
733
|
e.flags &= ~ReactiveFlags.RecursedCheck;
|
|
713
734
|
purgeDeps(e);
|
|
714
735
|
}
|
|
@@ -822,9 +843,11 @@ function signalOper(...value) {
|
|
|
822
843
|
*/
|
|
823
844
|
function effectOper() {
|
|
824
845
|
if (this.onCleanup !== void 0) {
|
|
825
|
-
const
|
|
846
|
+
const cleanups = this.onCleanup;
|
|
826
847
|
this.onCleanup = void 0;
|
|
827
|
-
|
|
848
|
+
untracked(() => {
|
|
849
|
+
for (const fn of cleanups) fn();
|
|
850
|
+
});
|
|
828
851
|
}
|
|
829
852
|
effectScopeOper.call(this);
|
|
830
853
|
}
|
|
@@ -847,10 +870,12 @@ function effectOper() {
|
|
|
847
870
|
* @internal
|
|
848
871
|
*/
|
|
849
872
|
function effectScopeOper() {
|
|
850
|
-
const
|
|
851
|
-
if (
|
|
873
|
+
const cleanups = this.onCleanup;
|
|
874
|
+
if (cleanups !== void 0) {
|
|
852
875
|
this.onCleanup = void 0;
|
|
853
|
-
|
|
876
|
+
untracked(() => {
|
|
877
|
+
for (const fn of cleanups) fn();
|
|
878
|
+
});
|
|
854
879
|
}
|
|
855
880
|
this.depsTail = void 0;
|
|
856
881
|
this.flags = ReactiveFlags.None;
|
|
@@ -928,5 +953,12 @@ function reactive(source) {
|
|
|
928
953
|
};
|
|
929
954
|
};
|
|
930
955
|
}
|
|
956
|
+
/**
|
|
957
|
+
* Resolves a MaybeReactive<T> to its current value.
|
|
958
|
+
* If the input is a function, calls it; otherwise returns as-is.
|
|
959
|
+
*/
|
|
960
|
+
function resolve(value) {
|
|
961
|
+
return isReactive(value) ? value() : value;
|
|
962
|
+
}
|
|
931
963
|
//#endregion
|
|
932
|
-
export {
|
|
964
|
+
export { computed as a, isComputed as c, isSignal as d, onCleanup as f, untracked as h, batch as i, isEffect as l, trigger as m, reactive as n, effect as o, signal as p, resolve as r, effectScope as s, isReactive as t, isEffectScope as u };
|
package/dist/slot.d.mts
CHANGED
|
@@ -13311,4 +13311,4 @@ Object.defineProperty(globalThis, GLOBAL_EXPECT, {
|
|
|
13311
13311
|
configurable: true
|
|
13312
13312
|
});
|
|
13313
13313
|
//#endregion
|
|
13314
|
-
export {
|
|
13314
|
+
export { beforeEach as a, beforeAll as i, vi as n, describe as o, afterEach as r, it as s, globalExpect as t };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { fromEvent, sync } from "./event-driven.mjs";
|
|
2
|
+
//#region src/utilities/active-element.ts
|
|
3
|
+
/**
|
|
4
|
+
* Returns a read-only `Computed<Element | null>` bound to `document.activeElement`.
|
|
5
|
+
* Reacts to `focusin` and `focusout` events on the document.
|
|
6
|
+
*/
|
|
7
|
+
function createActiveElement() {
|
|
8
|
+
const [active] = sync(fromEvent(document, ["focusin", "focusout"]), () => typeof document !== "undefined" ? document.activeElement : null);
|
|
9
|
+
return active;
|
|
10
|
+
}
|
|
11
|
+
const activeElement = createActiveElement();
|
|
12
|
+
//#endregion
|
|
13
|
+
export { activeElement };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { o as describe, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
2
|
+
import { activeElement } from "./active-element.mjs";
|
|
3
|
+
//#region src/utilities/active-element.test.ts
|
|
4
|
+
describe("activeElement (singleton)", () => {
|
|
5
|
+
it("returns a computed that reads the current activeElement", () => {
|
|
6
|
+
globalExpect(activeElement()).toBe(document.activeElement);
|
|
7
|
+
});
|
|
8
|
+
it("updates when focus changes", () => {
|
|
9
|
+
const input = document.createElement("input");
|
|
10
|
+
document.body.appendChild(input);
|
|
11
|
+
input.focus();
|
|
12
|
+
globalExpect(activeElement()).toBe(input);
|
|
13
|
+
document.body.removeChild(input);
|
|
14
|
+
});
|
|
15
|
+
it("remains reactive after scope disposal", () => {
|
|
16
|
+
const input = document.createElement("input");
|
|
17
|
+
document.body.appendChild(input);
|
|
18
|
+
input.focus();
|
|
19
|
+
globalExpect(activeElement()).toBe(input);
|
|
20
|
+
document.body.removeChild(input);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//#endregion
|
|
24
|
+
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { t as Computed } from "
|
|
1
|
+
import { t as Computed } from "../index-Cvdhuy6Y.mjs";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/utilities/debounced.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Returns a `Computed` that mirrors `getter` but only updates after `delay`
|
|
6
6
|
* milliseconds of silence (i.e. no new values from `getter`).
|
|
7
7
|
*
|
|
8
8
|
* The initial value is read synchronously, so the computed is never undefined.
|
|
9
9
|
*/
|
|
10
|
-
declare function createDebounced<T>(getter: () => T, delay: number): Computed<T>;
|
|
10
|
+
declare function createDebounced<T>(getter: () => T, delay: number | (() => number)): Computed<T>;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { createDebounced };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { o as effect, p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { createTimeout } from "./timeout.mjs";
|
|
3
|
+
//#region src/utilities/debounced.ts
|
|
3
4
|
/**
|
|
4
5
|
* Returns a `Computed` that mirrors `getter` but only updates after `delay`
|
|
5
6
|
* milliseconds of silence (i.e. no new values from `getter`).
|
|
@@ -8,11 +9,11 @@ import { a as effect, d as onCleanup, f as signal } from "../../signals-CLAPw8kk
|
|
|
8
9
|
*/
|
|
9
10
|
function createDebounced(getter, delay) {
|
|
10
11
|
const s = signal(getter());
|
|
11
|
-
let
|
|
12
|
+
let latest;
|
|
13
|
+
const { reset } = createTimeout(() => s(latest), delay, false);
|
|
12
14
|
effect(() => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
onCleanup(() => clearTimeout(timer));
|
|
15
|
+
latest = getter();
|
|
16
|
+
reset();
|
|
16
17
|
});
|
|
17
18
|
return s;
|
|
18
19
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
1
|
+
import { p as signal, s as effectScope } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { a as beforeEach, n as vi, o as describe, r as afterEach, s as it, t as globalExpect } from "../test.BmQO5GaM-ANkhHvbr.mjs";
|
|
3
3
|
import { createDebounced } from "./debounced.mjs";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/utilities/debounced.test.ts
|
|
5
5
|
beforeEach(() => {
|
|
6
6
|
vi.useFakeTimers();
|
|
7
7
|
});
|
|
@@ -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/element-rect.d.ts
|
|
4
4
|
type RectResult = {
|
|
5
5
|
x: Computed<number>;
|
|
6
6
|
y: Computed<number>;
|
|
@@ -16,6 +16,6 @@ type RectResult = {
|
|
|
16
16
|
* fires on size changes) and returns all eight DOMRect properties as reactive
|
|
17
17
|
* computeds.
|
|
18
18
|
*/
|
|
19
|
-
declare function createElementRect(target: Element
|
|
19
|
+
declare function createElementRect(target: Element): RectResult;
|
|
20
20
|
//#endregion
|
|
21
21
|
export { createElementRect };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
2
|
import { createResizeObserver } from "./resize-observer.mjs";
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/utilities/element-rect.ts
|
|
4
4
|
/**
|
|
5
5
|
* Observes the full bounding rect of `target` using a `ResizeObserver` (which
|
|
6
6
|
* fires on size changes) and returns all eight DOMRect properties as reactive
|
|
@@ -29,9 +29,8 @@ function createElementRect(target) {
|
|
|
29
29
|
const observer = createResizeObserver(target, (entries) => {
|
|
30
30
|
for (const entry of entries) updateRect(entry.target);
|
|
31
31
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return Object.assign({
|
|
32
|
+
updateRect(target);
|
|
33
|
+
return {
|
|
35
34
|
x,
|
|
36
35
|
y,
|
|
37
36
|
width,
|
|
@@ -39,8 +38,9 @@ function createElementRect(target) {
|
|
|
39
38
|
top,
|
|
40
39
|
right,
|
|
41
40
|
bottom,
|
|
42
|
-
left
|
|
43
|
-
|
|
41
|
+
left,
|
|
42
|
+
[Symbol.dispose]: observer[Symbol.dispose]
|
|
43
|
+
};
|
|
44
44
|
}
|
|
45
45
|
//#endregion
|
|
46
46
|
export { createElementRect };
|
|
@@ -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 { createElementRect } from "./element-rect.mjs";
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/utilities/element-rect.test.ts
|
|
5
5
|
afterEach(() => {
|
|
6
6
|
document.body.innerHTML = "";
|
|
7
7
|
vi.restoreAllMocks();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { r as Signal } from "../index-Cvdhuy6Y.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/utilities/element-scroll.d.ts
|
|
4
|
+
type ElementScrollResult = {
|
|
5
|
+
/** Horizontal scroll position (writable — setting it scrolls the element). */x: Signal<number>; /** Vertical scroll position (writable — setting it scrolls the element). */
|
|
6
|
+
y: Signal<number>;
|
|
7
|
+
} & Disposable;
|
|
8
|
+
/**
|
|
9
|
+
* Returns writable signals for an element's scroll position.
|
|
10
|
+
*
|
|
11
|
+
* Reading `x()` / `y()` returns the current `scrollLeft` / `scrollTop`.
|
|
12
|
+
* Writing `x(100)` or `y(200)` scrolls the element to that position.
|
|
13
|
+
*/
|
|
14
|
+
declare function createElementScroll(target: Element): ElementScrollResult;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { createElementScroll };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { f as onCleanup, o as effect, p as signal } from "../signals-DcgXhkU2.mjs";
|
|
2
|
+
import { on } from "./event-listener.mjs";
|
|
3
|
+
//#region src/utilities/element-scroll.ts
|
|
4
|
+
/**
|
|
5
|
+
* Returns writable signals for an element's scroll position.
|
|
6
|
+
*
|
|
7
|
+
* Reading `x()` / `y()` returns the current `scrollLeft` / `scrollTop`.
|
|
8
|
+
* Writing `x(100)` or `y(200)` scrolls the element to that position.
|
|
9
|
+
*/
|
|
10
|
+
function createElementScroll(target) {
|
|
11
|
+
const el = target;
|
|
12
|
+
const x = signal(el?.scrollLeft ?? 0);
|
|
13
|
+
const y = signal(el?.scrollTop ?? 0);
|
|
14
|
+
let skipEvent = false;
|
|
15
|
+
const handler = () => {
|
|
16
|
+
if (skipEvent) {
|
|
17
|
+
skipEvent = false;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (!el) return;
|
|
21
|
+
x(el.scrollLeft);
|
|
22
|
+
y(el.scrollTop);
|
|
23
|
+
};
|
|
24
|
+
const cleanup = el ? on(el, "scroll", handler, { passive: true }) : () => {};
|
|
25
|
+
const stopX = effect(() => {
|
|
26
|
+
const val = x();
|
|
27
|
+
if (el && el.scrollLeft !== val) {
|
|
28
|
+
skipEvent = true;
|
|
29
|
+
el.scrollLeft = val;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const stopY = effect(() => {
|
|
33
|
+
const val = y();
|
|
34
|
+
if (el && el.scrollTop !== val) {
|
|
35
|
+
skipEvent = true;
|
|
36
|
+
el.scrollTop = val;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
const dispose = () => {
|
|
40
|
+
cleanup();
|
|
41
|
+
stopX();
|
|
42
|
+
stopY();
|
|
43
|
+
};
|
|
44
|
+
onCleanup(dispose);
|
|
45
|
+
return {
|
|
46
|
+
x,
|
|
47
|
+
y,
|
|
48
|
+
[Symbol.dispose]: dispose
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { createElementScroll };
|