@signality/core 0.0.1-alpha.2
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 +60 -0
- package/browser/battery/index.d.ts +34 -0
- package/browser/bluetooth/index.d.ts +56 -0
- package/browser/breakpoints/index.d.ts +32 -0
- package/browser/broadcast-channel/index.d.ts +42 -0
- package/browser/browser-language/index.d.ts +34 -0
- package/browser/clipboard/index.d.ts +48 -0
- package/browser/device-posture/index.d.ts +18 -0
- package/browser/display-media/index.d.ts +80 -0
- package/browser/eye-dropper/index.d.ts +47 -0
- package/browser/favicon/index.d.ts +39 -0
- package/browser/fps/index.d.ts +46 -0
- package/browser/gamepad/index.d.ts +28 -0
- package/browser/geolocation/index.d.ts +64 -0
- package/browser/index.d.ts +29 -0
- package/browser/input-modality/index.d.ts +26 -0
- package/browser/listener/index.d.ts +61 -0
- package/browser/media-query/index.d.ts +36 -0
- package/browser/network/index.d.ts +44 -0
- package/browser/online/index.d.ts +27 -0
- package/browser/page-visibility/index.d.ts +27 -0
- package/browser/picture-in-picture/index.d.ts +42 -0
- package/browser/pointer-lock-element/index.d.ts +22 -0
- package/browser/screen-orientation/index.d.ts +29 -0
- package/browser/speech-recognition/index.d.ts +77 -0
- package/browser/speech-synthesis/index.d.ts +76 -0
- package/browser/storage/index.d.ts +142 -0
- package/browser/text-direction/index.d.ts +43 -0
- package/browser/vibration/index.d.ts +37 -0
- package/browser/wake-lock/index.d.ts +37 -0
- package/browser/web-notification/index.d.ts +58 -0
- package/browser/web-share/index.d.ts +42 -0
- package/browser/web-worker/index.d.ts +52 -0
- package/elements/active-element/index.d.ts +27 -0
- package/elements/dropzone/index.d.ts +61 -0
- package/elements/element-focus/index.d.ts +38 -0
- package/elements/element-focus-within/index.d.ts +29 -0
- package/elements/element-hover/index.d.ts +27 -0
- package/elements/element-size/index.d.ts +40 -0
- package/elements/element-visibility/index.d.ts +53 -0
- package/elements/index.d.ts +16 -0
- package/elements/mouse-position/index.d.ts +64 -0
- package/elements/on-click-outside/index.d.ts +42 -0
- package/elements/on-disconnect/index.d.ts +45 -0
- package/elements/on-long-press/index.d.ts +44 -0
- package/elements/pointer-swipe/index.d.ts +58 -0
- package/elements/scroll-position/index.d.ts +96 -0
- package/elements/swipe/index.d.ts +49 -0
- package/elements/text-selection/index.d.ts +39 -0
- package/elements/window-size/index.d.ts +46 -0
- package/fesm2022/signality-core-browser-battery.mjs +80 -0
- package/fesm2022/signality-core-browser-battery.mjs.map +1 -0
- package/fesm2022/signality-core-browser-bluetooth.mjs +112 -0
- package/fesm2022/signality-core-browser-bluetooth.mjs.map +1 -0
- package/fesm2022/signality-core-browser-breakpoints.mjs +51 -0
- package/fesm2022/signality-core-browser-breakpoints.mjs.map +1 -0
- package/fesm2022/signality-core-browser-broadcast-channel.mjs +74 -0
- package/fesm2022/signality-core-browser-broadcast-channel.mjs.map +1 -0
- package/fesm2022/signality-core-browser-browser-language.mjs +48 -0
- package/fesm2022/signality-core-browser-browser-language.mjs.map +1 -0
- package/fesm2022/signality-core-browser-clipboard.mjs +102 -0
- package/fesm2022/signality-core-browser-clipboard.mjs.map +1 -0
- package/fesm2022/signality-core-browser-device-posture.mjs +40 -0
- package/fesm2022/signality-core-browser-device-posture.mjs.map +1 -0
- package/fesm2022/signality-core-browser-display-media.mjs +121 -0
- package/fesm2022/signality-core-browser-display-media.mjs.map +1 -0
- package/fesm2022/signality-core-browser-eye-dropper.mjs +82 -0
- package/fesm2022/signality-core-browser-eye-dropper.mjs.map +1 -0
- package/fesm2022/signality-core-browser-favicon.mjs +100 -0
- package/fesm2022/signality-core-browser-favicon.mjs.map +1 -0
- package/fesm2022/signality-core-browser-fps.mjs +103 -0
- package/fesm2022/signality-core-browser-fps.mjs.map +1 -0
- package/fesm2022/signality-core-browser-gamepad.mjs +93 -0
- package/fesm2022/signality-core-browser-gamepad.mjs.map +1 -0
- package/fesm2022/signality-core-browser-geolocation.mjs +120 -0
- package/fesm2022/signality-core-browser-geolocation.mjs.map +1 -0
- package/fesm2022/signality-core-browser-input-modality.mjs +64 -0
- package/fesm2022/signality-core-browser-input-modality.mjs.map +1 -0
- package/fesm2022/signality-core-browser-listener.mjs +132 -0
- package/fesm2022/signality-core-browser-listener.mjs.map +1 -0
- package/fesm2022/signality-core-browser-media-query.mjs +55 -0
- package/fesm2022/signality-core-browser-media-query.mjs.map +1 -0
- package/fesm2022/signality-core-browser-network.mjs +76 -0
- package/fesm2022/signality-core-browser-network.mjs.map +1 -0
- package/fesm2022/signality-core-browser-online.mjs +49 -0
- package/fesm2022/signality-core-browser-online.mjs.map +1 -0
- package/fesm2022/signality-core-browser-page-visibility.mjs +47 -0
- package/fesm2022/signality-core-browser-page-visibility.mjs.map +1 -0
- package/fesm2022/signality-core-browser-picture-in-picture.mjs +93 -0
- package/fesm2022/signality-core-browser-picture-in-picture.mjs.map +1 -0
- package/fesm2022/signality-core-browser-pointer-lock-element.mjs +43 -0
- package/fesm2022/signality-core-browser-pointer-lock-element.mjs.map +1 -0
- package/fesm2022/signality-core-browser-screen-orientation.mjs +43 -0
- package/fesm2022/signality-core-browser-screen-orientation.mjs.map +1 -0
- package/fesm2022/signality-core-browser-speech-recognition.mjs +171 -0
- package/fesm2022/signality-core-browser-speech-recognition.mjs.map +1 -0
- package/fesm2022/signality-core-browser-speech-synthesis.mjs +146 -0
- package/fesm2022/signality-core-browser-speech-synthesis.mjs.map +1 -0
- package/fesm2022/signality-core-browser-storage.mjs +261 -0
- package/fesm2022/signality-core-browser-storage.mjs.map +1 -0
- package/fesm2022/signality-core-browser-text-direction.mjs +62 -0
- package/fesm2022/signality-core-browser-text-direction.mjs.map +1 -0
- package/fesm2022/signality-core-browser-vibration.mjs +94 -0
- package/fesm2022/signality-core-browser-vibration.mjs.map +1 -0
- package/fesm2022/signality-core-browser-wake-lock.mjs +149 -0
- package/fesm2022/signality-core-browser-wake-lock.mjs.map +1 -0
- package/fesm2022/signality-core-browser-web-notification.mjs +137 -0
- package/fesm2022/signality-core-browser-web-notification.mjs.map +1 -0
- package/fesm2022/signality-core-browser-web-share.mjs +92 -0
- package/fesm2022/signality-core-browser-web-share.mjs.map +1 -0
- package/fesm2022/signality-core-browser-web-worker.mjs +105 -0
- package/fesm2022/signality-core-browser-web-worker.mjs.map +1 -0
- package/fesm2022/signality-core-browser.mjs +34 -0
- package/fesm2022/signality-core-browser.mjs.map +1 -0
- package/fesm2022/signality-core-elements-active-element.mjs +88 -0
- package/fesm2022/signality-core-elements-active-element.mjs.map +1 -0
- package/fesm2022/signality-core-elements-dropzone.mjs +158 -0
- package/fesm2022/signality-core-elements-dropzone.mjs.map +1 -0
- package/fesm2022/signality-core-elements-element-focus-within.mjs +56 -0
- package/fesm2022/signality-core-elements-element-focus-within.mjs.map +1 -0
- package/fesm2022/signality-core-elements-element-focus.mjs +54 -0
- package/fesm2022/signality-core-elements-element-focus.mjs.map +1 -0
- package/fesm2022/signality-core-elements-element-hover.mjs +48 -0
- package/fesm2022/signality-core-elements-element-hover.mjs.map +1 -0
- package/fesm2022/signality-core-elements-element-size.mjs +73 -0
- package/fesm2022/signality-core-elements-element-size.mjs.map +1 -0
- package/fesm2022/signality-core-elements-element-visibility.mjs +76 -0
- package/fesm2022/signality-core-elements-element-visibility.mjs.map +1 -0
- package/fesm2022/signality-core-elements-mouse-position.mjs +109 -0
- package/fesm2022/signality-core-elements-mouse-position.mjs.map +1 -0
- package/fesm2022/signality-core-elements-on-click-outside.mjs +97 -0
- package/fesm2022/signality-core-elements-on-click-outside.mjs.map +1 -0
- package/fesm2022/signality-core-elements-on-disconnect.mjs +99 -0
- package/fesm2022/signality-core-elements-on-disconnect.mjs.map +1 -0
- package/fesm2022/signality-core-elements-on-long-press.mjs +84 -0
- package/fesm2022/signality-core-elements-on-long-press.mjs.map +1 -0
- package/fesm2022/signality-core-elements-pointer-swipe.mjs +116 -0
- package/fesm2022/signality-core-elements-pointer-swipe.mjs.map +1 -0
- package/fesm2022/signality-core-elements-scroll-position.mjs +175 -0
- package/fesm2022/signality-core-elements-scroll-position.mjs.map +1 -0
- package/fesm2022/signality-core-elements-swipe.mjs +107 -0
- package/fesm2022/signality-core-elements-swipe.mjs.map +1 -0
- package/fesm2022/signality-core-elements-text-selection.mjs +70 -0
- package/fesm2022/signality-core-elements-text-selection.mjs.map +1 -0
- package/fesm2022/signality-core-elements-window-size.mjs +81 -0
- package/fesm2022/signality-core-elements-window-size.mjs.map +1 -0
- package/fesm2022/signality-core-elements.mjs +21 -0
- package/fesm2022/signality-core-elements.mjs.map +1 -0
- package/fesm2022/signality-core-forms-cva.mjs +140 -0
- package/fesm2022/signality-core-forms-cva.mjs.map +1 -0
- package/fesm2022/signality-core-forms.mjs +6 -0
- package/fesm2022/signality-core-forms.mjs.map +1 -0
- package/fesm2022/signality-core-internal.mjs +268 -0
- package/fesm2022/signality-core-internal.mjs.map +1 -0
- package/fesm2022/signality-core-observers-intersection-observer.mjs +70 -0
- package/fesm2022/signality-core-observers-intersection-observer.mjs.map +1 -0
- package/fesm2022/signality-core-observers-mutation-observer.mjs +77 -0
- package/fesm2022/signality-core-observers-mutation-observer.mjs.map +1 -0
- package/fesm2022/signality-core-observers-performance-observer.mjs +84 -0
- package/fesm2022/signality-core-observers-performance-observer.mjs.map +1 -0
- package/fesm2022/signality-core-observers-resize-observer.mjs +69 -0
- package/fesm2022/signality-core-observers-resize-observer.mjs.map +1 -0
- package/fesm2022/signality-core-observers.mjs +9 -0
- package/fesm2022/signality-core-observers.mjs.map +1 -0
- package/fesm2022/signality-core-reactivity-debounced.mjs +27 -0
- package/fesm2022/signality-core-reactivity-debounced.mjs.map +1 -0
- package/fesm2022/signality-core-reactivity-throttled.mjs +27 -0
- package/fesm2022/signality-core-reactivity-throttled.mjs.map +1 -0
- package/fesm2022/signality-core-reactivity-watcher.mjs +36 -0
- package/fesm2022/signality-core-reactivity-watcher.mjs.map +1 -0
- package/fesm2022/signality-core-reactivity.mjs +8 -0
- package/fesm2022/signality-core-reactivity.mjs.map +1 -0
- package/fesm2022/signality-core-router-fragment.mjs +41 -0
- package/fesm2022/signality-core-router-fragment.mjs.map +1 -0
- package/fesm2022/signality-core-router-params.mjs +45 -0
- package/fesm2022/signality-core-router-params.mjs.map +1 -0
- package/fesm2022/signality-core-router-query-params.mjs +67 -0
- package/fesm2022/signality-core-router-query-params.mjs.map +1 -0
- package/fesm2022/signality-core-router-route-data.mjs +46 -0
- package/fesm2022/signality-core-router-route-data.mjs.map +1 -0
- package/fesm2022/signality-core-router-router-listener.mjs +50 -0
- package/fesm2022/signality-core-router-router-listener.mjs.map +1 -0
- package/fesm2022/signality-core-router-title.mjs +54 -0
- package/fesm2022/signality-core-router-title.mjs.map +1 -0
- package/fesm2022/signality-core-router-url.mjs +53 -0
- package/fesm2022/signality-core-router-url.mjs.map +1 -0
- package/fesm2022/signality-core-router.mjs +12 -0
- package/fesm2022/signality-core-router.mjs.map +1 -0
- package/fesm2022/signality-core-scheduling-debounce-callback.mjs +59 -0
- package/fesm2022/signality-core-scheduling-debounce-callback.mjs.map +1 -0
- package/fesm2022/signality-core-scheduling-interval.mjs +110 -0
- package/fesm2022/signality-core-scheduling-interval.mjs.map +1 -0
- package/fesm2022/signality-core-scheduling-throttle-callback.mjs +66 -0
- package/fesm2022/signality-core-scheduling-throttle-callback.mjs.map +1 -0
- package/fesm2022/signality-core-scheduling.mjs +8 -0
- package/fesm2022/signality-core-scheduling.mjs.map +1 -0
- package/fesm2022/signality-core-types.mjs +4 -0
- package/fesm2022/signality-core-types.mjs.map +1 -0
- package/fesm2022/signality-core.mjs +13 -0
- package/fesm2022/signality-core.mjs.map +1 -0
- package/forms/cva/index.d.ts +60 -0
- package/forms/index.d.ts +1 -0
- package/index.d.ts +8 -0
- package/internal/constants/index.d.ts +2 -0
- package/internal/constants/mobile-regex.d.ts +1 -0
- package/internal/constants/stubs.d.ts +32 -0
- package/internal/index.d.ts +4 -0
- package/internal/providers/index.d.ts +3 -0
- package/internal/providers/is-browser.d.ts +2 -0
- package/internal/providers/is-mobile.d.ts +2 -0
- package/internal/providers/is-server.d.ts +2 -0
- package/internal/types/index.d.ts +2 -0
- package/internal/types/timer.d.ts +1 -0
- package/internal/types/union.d.ts +1 -0
- package/internal/utils/bom/index.d.ts +1 -0
- package/internal/utils/bom/is-window.d.ts +1 -0
- package/internal/utils/const-signal.d.ts +10 -0
- package/internal/utils/context.d.ts +18 -0
- package/internal/utils/create-token.d.ts +8 -0
- package/internal/utils/dom/get-active-element.d.ts +1 -0
- package/internal/utils/dom/get-event-target.d.ts +1 -0
- package/internal/utils/dom/get-pip-element.d.ts +1 -0
- package/internal/utils/dom/get-shadow-root.d.ts +1 -0
- package/internal/utils/dom/index.d.ts +6 -0
- package/internal/utils/dom/is-element.d.ts +1 -0
- package/internal/utils/dom/is-node-within.d.ts +1 -0
- package/internal/utils/index.d.ts +10 -0
- package/internal/utils/is-plain-object.d.ts +1 -0
- package/internal/utils/is-query-signal.d.ts +10 -0
- package/internal/utils/proxy-signal.d.ts +18 -0
- package/internal/utils/to-element.d.ts +12 -0
- package/internal/utils/to-value.d.ts +6 -0
- package/observers/index.d.ts +4 -0
- package/observers/intersection-observer/index.d.ts +42 -0
- package/observers/mutation-observer/index.d.ts +45 -0
- package/observers/performance-observer/index.d.ts +58 -0
- package/observers/resize-observer/index.d.ts +40 -0
- package/package.json +343 -0
- package/reactivity/debounced/index.d.ts +50 -0
- package/reactivity/index.d.ts +3 -0
- package/reactivity/throttled/index.d.ts +53 -0
- package/reactivity/watcher/index.d.ts +68 -0
- package/router/fragment/index.d.ts +26 -0
- package/router/index.d.ts +7 -0
- package/router/params/index.d.ts +28 -0
- package/router/query-params/index.d.ts +80 -0
- package/router/route-data/index.d.ts +28 -0
- package/router/router-listener/index.d.ts +83 -0
- package/router/title/index.d.ts +29 -0
- package/router/url/index.d.ts +32 -0
- package/scheduling/debounce-callback/index.d.ts +28 -0
- package/scheduling/index.d.ts +3 -0
- package/scheduling/interval/index.d.ts +51 -0
- package/scheduling/throttle-callback/index.d.ts +30 -0
- package/types/index.d.ts +6 -0
- package/types/maybe-element-signal.d.ts +2 -0
- package/types/maybe-signal.d.ts +2 -0
- package/types/signal-value.d.ts +2 -0
- package/types/signal-values.d.ts +5 -0
- package/types/unref-element.d.ts +2 -0
- package/types/with-injector.d.ts +8 -0
package/package.json
ADDED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@signality/core",
|
|
3
|
+
"version": "0.0.1-alpha.2",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"author": "Vyacheslav Borodin <https://github.com/vs-borodin>",
|
|
6
|
+
"description": "A foundational toolkit for Angular Signals",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"signality",
|
|
9
|
+
"angular",
|
|
10
|
+
"signals",
|
|
11
|
+
"utilities",
|
|
12
|
+
"reactive",
|
|
13
|
+
"typescript",
|
|
14
|
+
"ssr",
|
|
15
|
+
"browser-api",
|
|
16
|
+
"web-api"
|
|
17
|
+
],
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://github.com/signalityjs/signality"
|
|
21
|
+
},
|
|
22
|
+
"bugs": "https://github.com/signalityjs/signality/issues",
|
|
23
|
+
"homepage": "https://signality.dev",
|
|
24
|
+
"sideEffects": false,
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@angular/common": ">=19.2.0",
|
|
27
|
+
"@angular/core": ">=19.2.0",
|
|
28
|
+
"@angular/forms": ">=19.2.0",
|
|
29
|
+
"@angular/router": ">=19.2.0",
|
|
30
|
+
"@angular/platform-browser": ">=19.2.0",
|
|
31
|
+
"rxjs": ">=7.8.1"
|
|
32
|
+
},
|
|
33
|
+
"module": "fesm2022/signality-core.mjs",
|
|
34
|
+
"typings": "index.d.ts",
|
|
35
|
+
"exports": {
|
|
36
|
+
"./package.json": {
|
|
37
|
+
"default": "./package.json"
|
|
38
|
+
},
|
|
39
|
+
".": {
|
|
40
|
+
"types": "./index.d.ts",
|
|
41
|
+
"default": "./fesm2022/signality-core.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./browser": {
|
|
44
|
+
"types": "./browser/index.d.ts",
|
|
45
|
+
"default": "./fesm2022/signality-core-browser.mjs"
|
|
46
|
+
},
|
|
47
|
+
"./elements": {
|
|
48
|
+
"types": "./elements/index.d.ts",
|
|
49
|
+
"default": "./fesm2022/signality-core-elements.mjs"
|
|
50
|
+
},
|
|
51
|
+
"./forms": {
|
|
52
|
+
"types": "./forms/index.d.ts",
|
|
53
|
+
"default": "./fesm2022/signality-core-forms.mjs"
|
|
54
|
+
},
|
|
55
|
+
"./internal": {
|
|
56
|
+
"types": "./internal/index.d.ts",
|
|
57
|
+
"default": "./fesm2022/signality-core-internal.mjs"
|
|
58
|
+
},
|
|
59
|
+
"./observers": {
|
|
60
|
+
"types": "./observers/index.d.ts",
|
|
61
|
+
"default": "./fesm2022/signality-core-observers.mjs"
|
|
62
|
+
},
|
|
63
|
+
"./reactivity": {
|
|
64
|
+
"types": "./reactivity/index.d.ts",
|
|
65
|
+
"default": "./fesm2022/signality-core-reactivity.mjs"
|
|
66
|
+
},
|
|
67
|
+
"./router": {
|
|
68
|
+
"types": "./router/index.d.ts",
|
|
69
|
+
"default": "./fesm2022/signality-core-router.mjs"
|
|
70
|
+
},
|
|
71
|
+
"./scheduling": {
|
|
72
|
+
"types": "./scheduling/index.d.ts",
|
|
73
|
+
"default": "./fesm2022/signality-core-scheduling.mjs"
|
|
74
|
+
},
|
|
75
|
+
"./types": {
|
|
76
|
+
"types": "./types/index.d.ts",
|
|
77
|
+
"default": "./fesm2022/signality-core-types.mjs"
|
|
78
|
+
},
|
|
79
|
+
"./browser/battery": {
|
|
80
|
+
"types": "./browser/battery/index.d.ts",
|
|
81
|
+
"default": "./fesm2022/signality-core-browser-battery.mjs"
|
|
82
|
+
},
|
|
83
|
+
"./browser/bluetooth": {
|
|
84
|
+
"types": "./browser/bluetooth/index.d.ts",
|
|
85
|
+
"default": "./fesm2022/signality-core-browser-bluetooth.mjs"
|
|
86
|
+
},
|
|
87
|
+
"./browser/breakpoints": {
|
|
88
|
+
"types": "./browser/breakpoints/index.d.ts",
|
|
89
|
+
"default": "./fesm2022/signality-core-browser-breakpoints.mjs"
|
|
90
|
+
},
|
|
91
|
+
"./browser/broadcast-channel": {
|
|
92
|
+
"types": "./browser/broadcast-channel/index.d.ts",
|
|
93
|
+
"default": "./fesm2022/signality-core-browser-broadcast-channel.mjs"
|
|
94
|
+
},
|
|
95
|
+
"./browser/browser-language": {
|
|
96
|
+
"types": "./browser/browser-language/index.d.ts",
|
|
97
|
+
"default": "./fesm2022/signality-core-browser-browser-language.mjs"
|
|
98
|
+
},
|
|
99
|
+
"./browser/clipboard": {
|
|
100
|
+
"types": "./browser/clipboard/index.d.ts",
|
|
101
|
+
"default": "./fesm2022/signality-core-browser-clipboard.mjs"
|
|
102
|
+
},
|
|
103
|
+
"./browser/device-posture": {
|
|
104
|
+
"types": "./browser/device-posture/index.d.ts",
|
|
105
|
+
"default": "./fesm2022/signality-core-browser-device-posture.mjs"
|
|
106
|
+
},
|
|
107
|
+
"./browser/display-media": {
|
|
108
|
+
"types": "./browser/display-media/index.d.ts",
|
|
109
|
+
"default": "./fesm2022/signality-core-browser-display-media.mjs"
|
|
110
|
+
},
|
|
111
|
+
"./browser/eye-dropper": {
|
|
112
|
+
"types": "./browser/eye-dropper/index.d.ts",
|
|
113
|
+
"default": "./fesm2022/signality-core-browser-eye-dropper.mjs"
|
|
114
|
+
},
|
|
115
|
+
"./browser/favicon": {
|
|
116
|
+
"types": "./browser/favicon/index.d.ts",
|
|
117
|
+
"default": "./fesm2022/signality-core-browser-favicon.mjs"
|
|
118
|
+
},
|
|
119
|
+
"./browser/fps": {
|
|
120
|
+
"types": "./browser/fps/index.d.ts",
|
|
121
|
+
"default": "./fesm2022/signality-core-browser-fps.mjs"
|
|
122
|
+
},
|
|
123
|
+
"./browser/gamepad": {
|
|
124
|
+
"types": "./browser/gamepad/index.d.ts",
|
|
125
|
+
"default": "./fesm2022/signality-core-browser-gamepad.mjs"
|
|
126
|
+
},
|
|
127
|
+
"./browser/geolocation": {
|
|
128
|
+
"types": "./browser/geolocation/index.d.ts",
|
|
129
|
+
"default": "./fesm2022/signality-core-browser-geolocation.mjs"
|
|
130
|
+
},
|
|
131
|
+
"./browser/input-modality": {
|
|
132
|
+
"types": "./browser/input-modality/index.d.ts",
|
|
133
|
+
"default": "./fesm2022/signality-core-browser-input-modality.mjs"
|
|
134
|
+
},
|
|
135
|
+
"./browser/listener": {
|
|
136
|
+
"types": "./browser/listener/index.d.ts",
|
|
137
|
+
"default": "./fesm2022/signality-core-browser-listener.mjs"
|
|
138
|
+
},
|
|
139
|
+
"./browser/media-query": {
|
|
140
|
+
"types": "./browser/media-query/index.d.ts",
|
|
141
|
+
"default": "./fesm2022/signality-core-browser-media-query.mjs"
|
|
142
|
+
},
|
|
143
|
+
"./browser/network": {
|
|
144
|
+
"types": "./browser/network/index.d.ts",
|
|
145
|
+
"default": "./fesm2022/signality-core-browser-network.mjs"
|
|
146
|
+
},
|
|
147
|
+
"./browser/online": {
|
|
148
|
+
"types": "./browser/online/index.d.ts",
|
|
149
|
+
"default": "./fesm2022/signality-core-browser-online.mjs"
|
|
150
|
+
},
|
|
151
|
+
"./browser/page-visibility": {
|
|
152
|
+
"types": "./browser/page-visibility/index.d.ts",
|
|
153
|
+
"default": "./fesm2022/signality-core-browser-page-visibility.mjs"
|
|
154
|
+
},
|
|
155
|
+
"./browser/picture-in-picture": {
|
|
156
|
+
"types": "./browser/picture-in-picture/index.d.ts",
|
|
157
|
+
"default": "./fesm2022/signality-core-browser-picture-in-picture.mjs"
|
|
158
|
+
},
|
|
159
|
+
"./browser/pointer-lock-element": {
|
|
160
|
+
"types": "./browser/pointer-lock-element/index.d.ts",
|
|
161
|
+
"default": "./fesm2022/signality-core-browser-pointer-lock-element.mjs"
|
|
162
|
+
},
|
|
163
|
+
"./browser/screen-orientation": {
|
|
164
|
+
"types": "./browser/screen-orientation/index.d.ts",
|
|
165
|
+
"default": "./fesm2022/signality-core-browser-screen-orientation.mjs"
|
|
166
|
+
},
|
|
167
|
+
"./browser/speech-recognition": {
|
|
168
|
+
"types": "./browser/speech-recognition/index.d.ts",
|
|
169
|
+
"default": "./fesm2022/signality-core-browser-speech-recognition.mjs"
|
|
170
|
+
},
|
|
171
|
+
"./browser/speech-synthesis": {
|
|
172
|
+
"types": "./browser/speech-synthesis/index.d.ts",
|
|
173
|
+
"default": "./fesm2022/signality-core-browser-speech-synthesis.mjs"
|
|
174
|
+
},
|
|
175
|
+
"./browser/storage": {
|
|
176
|
+
"types": "./browser/storage/index.d.ts",
|
|
177
|
+
"default": "./fesm2022/signality-core-browser-storage.mjs"
|
|
178
|
+
},
|
|
179
|
+
"./browser/text-direction": {
|
|
180
|
+
"types": "./browser/text-direction/index.d.ts",
|
|
181
|
+
"default": "./fesm2022/signality-core-browser-text-direction.mjs"
|
|
182
|
+
},
|
|
183
|
+
"./browser/vibration": {
|
|
184
|
+
"types": "./browser/vibration/index.d.ts",
|
|
185
|
+
"default": "./fesm2022/signality-core-browser-vibration.mjs"
|
|
186
|
+
},
|
|
187
|
+
"./browser/wake-lock": {
|
|
188
|
+
"types": "./browser/wake-lock/index.d.ts",
|
|
189
|
+
"default": "./fesm2022/signality-core-browser-wake-lock.mjs"
|
|
190
|
+
},
|
|
191
|
+
"./browser/web-notification": {
|
|
192
|
+
"types": "./browser/web-notification/index.d.ts",
|
|
193
|
+
"default": "./fesm2022/signality-core-browser-web-notification.mjs"
|
|
194
|
+
},
|
|
195
|
+
"./browser/web-share": {
|
|
196
|
+
"types": "./browser/web-share/index.d.ts",
|
|
197
|
+
"default": "./fesm2022/signality-core-browser-web-share.mjs"
|
|
198
|
+
},
|
|
199
|
+
"./browser/web-worker": {
|
|
200
|
+
"types": "./browser/web-worker/index.d.ts",
|
|
201
|
+
"default": "./fesm2022/signality-core-browser-web-worker.mjs"
|
|
202
|
+
},
|
|
203
|
+
"./elements/active-element": {
|
|
204
|
+
"types": "./elements/active-element/index.d.ts",
|
|
205
|
+
"default": "./fesm2022/signality-core-elements-active-element.mjs"
|
|
206
|
+
},
|
|
207
|
+
"./elements/dropzone": {
|
|
208
|
+
"types": "./elements/dropzone/index.d.ts",
|
|
209
|
+
"default": "./fesm2022/signality-core-elements-dropzone.mjs"
|
|
210
|
+
},
|
|
211
|
+
"./elements/element-focus": {
|
|
212
|
+
"types": "./elements/element-focus/index.d.ts",
|
|
213
|
+
"default": "./fesm2022/signality-core-elements-element-focus.mjs"
|
|
214
|
+
},
|
|
215
|
+
"./elements/element-focus-within": {
|
|
216
|
+
"types": "./elements/element-focus-within/index.d.ts",
|
|
217
|
+
"default": "./fesm2022/signality-core-elements-element-focus-within.mjs"
|
|
218
|
+
},
|
|
219
|
+
"./elements/element-hover": {
|
|
220
|
+
"types": "./elements/element-hover/index.d.ts",
|
|
221
|
+
"default": "./fesm2022/signality-core-elements-element-hover.mjs"
|
|
222
|
+
},
|
|
223
|
+
"./elements/element-size": {
|
|
224
|
+
"types": "./elements/element-size/index.d.ts",
|
|
225
|
+
"default": "./fesm2022/signality-core-elements-element-size.mjs"
|
|
226
|
+
},
|
|
227
|
+
"./elements/element-visibility": {
|
|
228
|
+
"types": "./elements/element-visibility/index.d.ts",
|
|
229
|
+
"default": "./fesm2022/signality-core-elements-element-visibility.mjs"
|
|
230
|
+
},
|
|
231
|
+
"./elements/mouse-position": {
|
|
232
|
+
"types": "./elements/mouse-position/index.d.ts",
|
|
233
|
+
"default": "./fesm2022/signality-core-elements-mouse-position.mjs"
|
|
234
|
+
},
|
|
235
|
+
"./elements/on-click-outside": {
|
|
236
|
+
"types": "./elements/on-click-outside/index.d.ts",
|
|
237
|
+
"default": "./fesm2022/signality-core-elements-on-click-outside.mjs"
|
|
238
|
+
},
|
|
239
|
+
"./elements/on-disconnect": {
|
|
240
|
+
"types": "./elements/on-disconnect/index.d.ts",
|
|
241
|
+
"default": "./fesm2022/signality-core-elements-on-disconnect.mjs"
|
|
242
|
+
},
|
|
243
|
+
"./elements/on-long-press": {
|
|
244
|
+
"types": "./elements/on-long-press/index.d.ts",
|
|
245
|
+
"default": "./fesm2022/signality-core-elements-on-long-press.mjs"
|
|
246
|
+
},
|
|
247
|
+
"./elements/pointer-swipe": {
|
|
248
|
+
"types": "./elements/pointer-swipe/index.d.ts",
|
|
249
|
+
"default": "./fesm2022/signality-core-elements-pointer-swipe.mjs"
|
|
250
|
+
},
|
|
251
|
+
"./elements/scroll-position": {
|
|
252
|
+
"types": "./elements/scroll-position/index.d.ts",
|
|
253
|
+
"default": "./fesm2022/signality-core-elements-scroll-position.mjs"
|
|
254
|
+
},
|
|
255
|
+
"./elements/swipe": {
|
|
256
|
+
"types": "./elements/swipe/index.d.ts",
|
|
257
|
+
"default": "./fesm2022/signality-core-elements-swipe.mjs"
|
|
258
|
+
},
|
|
259
|
+
"./elements/text-selection": {
|
|
260
|
+
"types": "./elements/text-selection/index.d.ts",
|
|
261
|
+
"default": "./fesm2022/signality-core-elements-text-selection.mjs"
|
|
262
|
+
},
|
|
263
|
+
"./elements/window-size": {
|
|
264
|
+
"types": "./elements/window-size/index.d.ts",
|
|
265
|
+
"default": "./fesm2022/signality-core-elements-window-size.mjs"
|
|
266
|
+
},
|
|
267
|
+
"./forms/cva": {
|
|
268
|
+
"types": "./forms/cva/index.d.ts",
|
|
269
|
+
"default": "./fesm2022/signality-core-forms-cva.mjs"
|
|
270
|
+
},
|
|
271
|
+
"./observers/intersection-observer": {
|
|
272
|
+
"types": "./observers/intersection-observer/index.d.ts",
|
|
273
|
+
"default": "./fesm2022/signality-core-observers-intersection-observer.mjs"
|
|
274
|
+
},
|
|
275
|
+
"./observers/mutation-observer": {
|
|
276
|
+
"types": "./observers/mutation-observer/index.d.ts",
|
|
277
|
+
"default": "./fesm2022/signality-core-observers-mutation-observer.mjs"
|
|
278
|
+
},
|
|
279
|
+
"./observers/performance-observer": {
|
|
280
|
+
"types": "./observers/performance-observer/index.d.ts",
|
|
281
|
+
"default": "./fesm2022/signality-core-observers-performance-observer.mjs"
|
|
282
|
+
},
|
|
283
|
+
"./observers/resize-observer": {
|
|
284
|
+
"types": "./observers/resize-observer/index.d.ts",
|
|
285
|
+
"default": "./fesm2022/signality-core-observers-resize-observer.mjs"
|
|
286
|
+
},
|
|
287
|
+
"./reactivity/debounced": {
|
|
288
|
+
"types": "./reactivity/debounced/index.d.ts",
|
|
289
|
+
"default": "./fesm2022/signality-core-reactivity-debounced.mjs"
|
|
290
|
+
},
|
|
291
|
+
"./reactivity/throttled": {
|
|
292
|
+
"types": "./reactivity/throttled/index.d.ts",
|
|
293
|
+
"default": "./fesm2022/signality-core-reactivity-throttled.mjs"
|
|
294
|
+
},
|
|
295
|
+
"./reactivity/watcher": {
|
|
296
|
+
"types": "./reactivity/watcher/index.d.ts",
|
|
297
|
+
"default": "./fesm2022/signality-core-reactivity-watcher.mjs"
|
|
298
|
+
},
|
|
299
|
+
"./router/fragment": {
|
|
300
|
+
"types": "./router/fragment/index.d.ts",
|
|
301
|
+
"default": "./fesm2022/signality-core-router-fragment.mjs"
|
|
302
|
+
},
|
|
303
|
+
"./router/params": {
|
|
304
|
+
"types": "./router/params/index.d.ts",
|
|
305
|
+
"default": "./fesm2022/signality-core-router-params.mjs"
|
|
306
|
+
},
|
|
307
|
+
"./router/query-params": {
|
|
308
|
+
"types": "./router/query-params/index.d.ts",
|
|
309
|
+
"default": "./fesm2022/signality-core-router-query-params.mjs"
|
|
310
|
+
},
|
|
311
|
+
"./router/route-data": {
|
|
312
|
+
"types": "./router/route-data/index.d.ts",
|
|
313
|
+
"default": "./fesm2022/signality-core-router-route-data.mjs"
|
|
314
|
+
},
|
|
315
|
+
"./router/router-listener": {
|
|
316
|
+
"types": "./router/router-listener/index.d.ts",
|
|
317
|
+
"default": "./fesm2022/signality-core-router-router-listener.mjs"
|
|
318
|
+
},
|
|
319
|
+
"./router/title": {
|
|
320
|
+
"types": "./router/title/index.d.ts",
|
|
321
|
+
"default": "./fesm2022/signality-core-router-title.mjs"
|
|
322
|
+
},
|
|
323
|
+
"./router/url": {
|
|
324
|
+
"types": "./router/url/index.d.ts",
|
|
325
|
+
"default": "./fesm2022/signality-core-router-url.mjs"
|
|
326
|
+
},
|
|
327
|
+
"./scheduling/debounce-callback": {
|
|
328
|
+
"types": "./scheduling/debounce-callback/index.d.ts",
|
|
329
|
+
"default": "./fesm2022/signality-core-scheduling-debounce-callback.mjs"
|
|
330
|
+
},
|
|
331
|
+
"./scheduling/interval": {
|
|
332
|
+
"types": "./scheduling/interval/index.d.ts",
|
|
333
|
+
"default": "./fesm2022/signality-core-scheduling-interval.mjs"
|
|
334
|
+
},
|
|
335
|
+
"./scheduling/throttle-callback": {
|
|
336
|
+
"types": "./scheduling/throttle-callback/index.d.ts",
|
|
337
|
+
"default": "./fesm2022/signality-core-scheduling-throttle-callback.mjs"
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
"dependencies": {
|
|
341
|
+
"tslib": "^2.3.0"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type CreateSignalOptions, type Signal, type WritableSignal } from '@angular/core';
|
|
2
|
+
import type { MaybeSignal, SignalValue, WithInjector } from '@signality/core/types';
|
|
3
|
+
export type DebouncedOptions<T> = CreateSignalOptions<T> & WithInjector;
|
|
4
|
+
/**
|
|
5
|
+
* Creates a debounced readonly signal from a source signal.
|
|
6
|
+
* Updates to the source signal are debounced before propagating to the returned signal.
|
|
7
|
+
*
|
|
8
|
+
* @param source - Source signal to debounce
|
|
9
|
+
* @param timeMs - Debounce delay in milliseconds
|
|
10
|
+
* @param options - Optional configuration including signal options and injector
|
|
11
|
+
* @returns A readonly signal that updates after the debounce delay
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* @Component({
|
|
16
|
+
* template: `
|
|
17
|
+
* <input [(ngModel)]="query" />
|
|
18
|
+
* <p>Debounced value: {{ debouncedQuery() }}</p>
|
|
19
|
+
* `
|
|
20
|
+
* })
|
|
21
|
+
* class SearchInput {
|
|
22
|
+
* readonly query = signal('');
|
|
23
|
+
* readonly debouncedQuery = debounced(this.query, 300);
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function debounced<S extends Signal<any>>(source: S, timeMs: MaybeSignal<number>, options?: DebouncedOptions<SignalValue<S>>): Signal<SignalValue<S>>;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a debounced writable signal from an initial value.
|
|
30
|
+
* Both `set()` and `update()` calls are debounced.
|
|
31
|
+
*
|
|
32
|
+
* @param value - Initial value
|
|
33
|
+
* @param timeMs - Debounce delay in milliseconds
|
|
34
|
+
* @param options - Optional configuration including signal options and injector
|
|
35
|
+
* @returns A writable signal where updates are debounced
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* @Component({
|
|
40
|
+
* template: `
|
|
41
|
+
* <input [(ngModel)]="query" />
|
|
42
|
+
* <p>Search results for: {{ query() }}</p>
|
|
43
|
+
* `
|
|
44
|
+
* })
|
|
45
|
+
* class SearchInput {
|
|
46
|
+
* readonly query = debounced('', 300);
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function debounced<V>(value: V, timeMs: MaybeSignal<number>, options?: DebouncedOptions<V>): WritableSignal<V>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type CreateSignalOptions, type Signal, type WritableSignal } from '@angular/core';
|
|
2
|
+
import type { MaybeSignal, SignalValue, WithInjector } from '@signality/core/types';
|
|
3
|
+
export type ThrottledOptions<T> = CreateSignalOptions<T> & WithInjector;
|
|
4
|
+
/**
|
|
5
|
+
* Creates a throttled readonly signal from a source signal.
|
|
6
|
+
* Updates to the source signal are throttled to occur at most once per time interval.
|
|
7
|
+
*
|
|
8
|
+
* @param source - Source signal to throttle
|
|
9
|
+
* @param timeMs - Throttle interval in milliseconds
|
|
10
|
+
* @param options - Optional configuration including signal options and injector
|
|
11
|
+
* @returns A readonly signal that updates at most once per throttle interval
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* @Component({
|
|
16
|
+
* template: `
|
|
17
|
+
* <div (scroll)="scrollY.set($event.target.scrollTop)">
|
|
18
|
+
* <p>Scroll position: {{ scrollY() }}</p>
|
|
19
|
+
* <p>Throttled position: {{ throttledScrollY() }}</p>
|
|
20
|
+
* </div>
|
|
21
|
+
* `
|
|
22
|
+
* })
|
|
23
|
+
* class ScrollTracker {
|
|
24
|
+
* readonly scrollY = signal(0);
|
|
25
|
+
* readonly throttledScrollY = throttled(this.scrollY, 100);
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function throttled<S extends Signal<any>>(source: S, timeMs: MaybeSignal<number>, options?: ThrottledOptions<SignalValue<S>>): Signal<SignalValue<S>>;
|
|
30
|
+
/**
|
|
31
|
+
* Creates a throttled writable signal from an initial value.
|
|
32
|
+
* Both `set()` and `update()` calls are throttled.
|
|
33
|
+
*
|
|
34
|
+
* @param value - Initial value
|
|
35
|
+
* @param timeMs - Throttle interval in milliseconds
|
|
36
|
+
* @param options - Optional configuration including signal options and injector
|
|
37
|
+
* @returns A writable signal where updates are throttled
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* @Component({
|
|
42
|
+
* template: `
|
|
43
|
+
* <div (mousemove)="mousePosition.set({ x: $event.clientX, y: $event.clientY })">
|
|
44
|
+
* <p>Mouse position: X={{ mousePosition().x }}, Y={{ mousePosition().y }}</p>
|
|
45
|
+
* </div>
|
|
46
|
+
* `
|
|
47
|
+
* })
|
|
48
|
+
* class MouseTracker {
|
|
49
|
+
* readonly mousePosition = throttled({ x: 0, y: 0 }, 16);
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function throttled<V>(value: V, timeMs: MaybeSignal<number>, options?: ThrottledOptions<V>): WritableSignal<V>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type CreateEffectOptions, type EffectCleanupRegisterFn, type EffectRef, type Signal } from '@angular/core';
|
|
2
|
+
import type { SignalValues } from '@signality/core/types';
|
|
3
|
+
export interface CreateWatcherOptions extends Omit<CreateEffectOptions, 'allowSignalWrites'> {
|
|
4
|
+
/**
|
|
5
|
+
* If `true`, the watcher will automatically destroy itself after the first change.
|
|
6
|
+
* @default false
|
|
7
|
+
*/
|
|
8
|
+
readonly once?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export type WatcherRef = EffectRef;
|
|
11
|
+
/**
|
|
12
|
+
* Watches a single signal and calls a callback when it changes, skipping the initial call.
|
|
13
|
+
* Unlike `effect()`, this responds to the fact of state change, enabling event-like orchestration of side effects.
|
|
14
|
+
*
|
|
15
|
+
* @param source - Signal to watch
|
|
16
|
+
* @param fn - Callback function called when signal changes. Receives current value, previous value, and cleanup function
|
|
17
|
+
* @param options - Optional configuration including effect options and injector
|
|
18
|
+
* @returns A WatcherRef (alias for EffectRef) that can be used to manually destroy the watcher
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* @Component({
|
|
23
|
+
* template: `
|
|
24
|
+
* <button (click)="count.set(count() + 1)">Count: {{ count() }}</button>
|
|
25
|
+
* `
|
|
26
|
+
* })
|
|
27
|
+
* class CounterComponent {
|
|
28
|
+
* readonly count = signal(0);
|
|
29
|
+
*
|
|
30
|
+
* constructor() {
|
|
31
|
+
* watcher(this.count, (curr, prev) => {
|
|
32
|
+
* console.log('Count changed from', prev, 'to', curr);
|
|
33
|
+
* });
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function watcher<V>(source: Signal<V>, fn: (curr: V, prev: V, onCleanup: EffectCleanupRegisterFn) => void, options?: CreateWatcherOptions): WatcherRef;
|
|
39
|
+
/**
|
|
40
|
+
* Watches multiple signals and calls a callback when any of them changes, skipping the initial call.
|
|
41
|
+
* Unlike `effect()`, this responds to the fact of state change, enabling event-like orchestration of side effects.
|
|
42
|
+
*
|
|
43
|
+
* @param sources - Array of signals to watch
|
|
44
|
+
* @param fn - Callback function called when any signal changes. Receives current values array, previous values array, and cleanup function
|
|
45
|
+
* @param options - Optional configuration including effect options and injector
|
|
46
|
+
* @returns A WatcherRef (alias for EffectRef) that can be used to manually destroy the watcher
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* @Component({
|
|
51
|
+
* template: `
|
|
52
|
+
* <input [(ngModel)]="name" />
|
|
53
|
+
* <input [(ngModel)]="age" type="number" />
|
|
54
|
+
* `
|
|
55
|
+
* })
|
|
56
|
+
* class UserComponent {
|
|
57
|
+
* readonly name = signal('John');
|
|
58
|
+
* readonly age = signal(25);
|
|
59
|
+
*
|
|
60
|
+
* constructor() {
|
|
61
|
+
* watcher([this.name, this.age], ([name, age], [prevName, prevAge]) => {
|
|
62
|
+
* console.log('User changed:', { name, age });
|
|
63
|
+
* });
|
|
64
|
+
* }
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function watcher<T extends readonly Signal<any>[]>(sources: T, fn: (curr: SignalValues<T>, prev: SignalValues<T>, onCleanup: EffectCleanupRegisterFn) => void, options?: CreateWatcherOptions): WatcherRef;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type CreateSignalOptions, type Signal } from '@angular/core';
|
|
2
|
+
import type { WithInjector } from '@signality/core/types';
|
|
3
|
+
export type FragmentOptions = CreateSignalOptions<string | null> & WithInjector;
|
|
4
|
+
/**
|
|
5
|
+
* Reactive wrapper around the [Angular Router](https://angular.dev/guide/routing) URL fragment.
|
|
6
|
+
*
|
|
7
|
+
* @param options - Optional configuration including signal options and injector
|
|
8
|
+
* @returns A signal containing the current URL fragment (without #), or null
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* @Component({
|
|
13
|
+
* template: `
|
|
14
|
+
* @if (currentFragment(); as fragment) {
|
|
15
|
+
* <p>Current section: {{ fragment }}</p>
|
|
16
|
+
* } @else {
|
|
17
|
+
* <p>No fragment in URL</p>
|
|
18
|
+
* }
|
|
19
|
+
* `
|
|
20
|
+
* })
|
|
21
|
+
* class FragmentComponent {
|
|
22
|
+
* readonly currentFragment = fragment();
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function fragment(options?: FragmentOptions): Signal<string | null>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from '@signality/core/router/params';
|
|
2
|
+
export * from '@signality/core/router/query-params';
|
|
3
|
+
export * from '@signality/core/router/fragment';
|
|
4
|
+
export * from '@signality/core/router/title';
|
|
5
|
+
export * from '@signality/core/router/url';
|
|
6
|
+
export * from '@signality/core/router/route-data';
|
|
7
|
+
export * from '@signality/core/router/router-listener';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type CreateSignalOptions, type Signal } from '@angular/core';
|
|
2
|
+
import { type Params } from '@angular/router';
|
|
3
|
+
import type { WithInjector } from '@signality/core/types';
|
|
4
|
+
export type ParamsOptions<T extends Params = Params> = CreateSignalOptions<T> & WithInjector;
|
|
5
|
+
/**
|
|
6
|
+
* Reactive wrapper around Angular Router's route parameters.
|
|
7
|
+
* Access route parameters as a signal that updates when navigation occurs.
|
|
8
|
+
*
|
|
9
|
+
* @param options - Optional configuration including signal options and injector
|
|
10
|
+
* @returns A signal containing the current route parameters
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* @Component({
|
|
15
|
+
* template: `
|
|
16
|
+
* <div>
|
|
17
|
+
* <p>User ID: {{ routeParams().id }}</p>
|
|
18
|
+
* <p>Slug: {{ routeParams().slug }}</p>
|
|
19
|
+
* </div>
|
|
20
|
+
* `
|
|
21
|
+
* })
|
|
22
|
+
* class UserComponent {
|
|
23
|
+
* // Route: /user/:id/:slug
|
|
24
|
+
* readonly routeParams = params<{ id: string; slug: string }>();
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function params<T extends Params = Params>(options?: ParamsOptions<T>): Signal<T>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type CreateSignalOptions, type Signal } from '@angular/core';
|
|
2
|
+
import { type Params } from '@angular/router';
|
|
3
|
+
import type { WithInjector } from '@signality/core/types';
|
|
4
|
+
export interface QueryParamsValidator<T> {
|
|
5
|
+
/**
|
|
6
|
+
* Parse and validate data, throwing an error if validation fails.
|
|
7
|
+
*/
|
|
8
|
+
parse(data: unknown): T;
|
|
9
|
+
}
|
|
10
|
+
export interface QueryParamsRef<T> {
|
|
11
|
+
/**
|
|
12
|
+
* Signal containing validated query parameters.
|
|
13
|
+
* Throws an error if validation failed. Use `isValid()` to check before reading.
|
|
14
|
+
*/
|
|
15
|
+
readonly value: Signal<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Signal indicating whether the current query parameters are valid.
|
|
18
|
+
* Returns `true` when validation succeeded, `false` when validation failed.
|
|
19
|
+
*/
|
|
20
|
+
readonly isValid: Signal<boolean>;
|
|
21
|
+
/** Signal containing validation error, or null if valid */
|
|
22
|
+
readonly error: Signal<unknown | null>;
|
|
23
|
+
}
|
|
24
|
+
export type QueryParamsOptions<T extends Params = Params> = CreateSignalOptions<T> & WithInjector;
|
|
25
|
+
export type QueryParamsWithSchemaOptions<T extends Params = Params> = QueryParamsOptions<T> & {
|
|
26
|
+
/** Validator schema (e.g., Zod schema) */
|
|
27
|
+
readonly schema: QueryParamsValidator<T>;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Reactive wrapper around the [Angular Router](https://angular.dev/guide/routing) query parameters.
|
|
31
|
+
*
|
|
32
|
+
* @param options - Optional configuration including signal options and injector
|
|
33
|
+
* @returns A signal containing the current query parameters
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* @Component({
|
|
38
|
+
* template: `
|
|
39
|
+
* <div>
|
|
40
|
+
* <p>Search: {{ searchParams().q }}</p>
|
|
41
|
+
* <p>Sort: {{ searchParams().sort }}</p>
|
|
42
|
+
* </div>
|
|
43
|
+
* `
|
|
44
|
+
* })
|
|
45
|
+
* class SearchComponent {
|
|
46
|
+
* // Route: /search?q=angular&sort=name
|
|
47
|
+
* readonly searchParams = queryParams<{ q: string; sort: string }>();
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function queryParams<T extends Params = Params>(options?: QueryParamsOptions<T>): Signal<T>;
|
|
52
|
+
/**
|
|
53
|
+
* Reactive wrapper around the [Angular Router](https://angular.dev/guide/routing) query parameters with schema validation.
|
|
54
|
+
*
|
|
55
|
+
* @param options - Configuration including schema validator
|
|
56
|
+
* @returns A QueryParamsRef object with value, isValid, and error signals
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* @Component({
|
|
61
|
+
* template: `
|
|
62
|
+
* @if (params.isValid()) {
|
|
63
|
+
* <p>Search: {{ params.value().q }}</p>
|
|
64
|
+
* <p>Page: {{ params.value().page }}</p>
|
|
65
|
+
* } @else {
|
|
66
|
+
* <p>Invalid parameters</p>
|
|
67
|
+
* }
|
|
68
|
+
* `
|
|
69
|
+
* })
|
|
70
|
+
* class ValidatedSearchComponent {
|
|
71
|
+
* readonly schema = z.object({
|
|
72
|
+
* q: z.string().min(1).optional(),
|
|
73
|
+
* page: z.coerce.number().int().positive().default(1),
|
|
74
|
+
* });
|
|
75
|
+
*
|
|
76
|
+
* readonly params = queryParams({ schema: this.schema });
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export declare function queryParams<T extends Params = Params>(options: QueryParamsWithSchemaOptions<T>): QueryParamsRef<T>;
|