@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.
Files changed (261) hide show
  1. package/README.md +60 -0
  2. package/browser/battery/index.d.ts +34 -0
  3. package/browser/bluetooth/index.d.ts +56 -0
  4. package/browser/breakpoints/index.d.ts +32 -0
  5. package/browser/broadcast-channel/index.d.ts +42 -0
  6. package/browser/browser-language/index.d.ts +34 -0
  7. package/browser/clipboard/index.d.ts +48 -0
  8. package/browser/device-posture/index.d.ts +18 -0
  9. package/browser/display-media/index.d.ts +80 -0
  10. package/browser/eye-dropper/index.d.ts +47 -0
  11. package/browser/favicon/index.d.ts +39 -0
  12. package/browser/fps/index.d.ts +46 -0
  13. package/browser/gamepad/index.d.ts +28 -0
  14. package/browser/geolocation/index.d.ts +64 -0
  15. package/browser/index.d.ts +29 -0
  16. package/browser/input-modality/index.d.ts +26 -0
  17. package/browser/listener/index.d.ts +61 -0
  18. package/browser/media-query/index.d.ts +36 -0
  19. package/browser/network/index.d.ts +44 -0
  20. package/browser/online/index.d.ts +27 -0
  21. package/browser/page-visibility/index.d.ts +27 -0
  22. package/browser/picture-in-picture/index.d.ts +42 -0
  23. package/browser/pointer-lock-element/index.d.ts +22 -0
  24. package/browser/screen-orientation/index.d.ts +29 -0
  25. package/browser/speech-recognition/index.d.ts +77 -0
  26. package/browser/speech-synthesis/index.d.ts +76 -0
  27. package/browser/storage/index.d.ts +142 -0
  28. package/browser/text-direction/index.d.ts +43 -0
  29. package/browser/vibration/index.d.ts +37 -0
  30. package/browser/wake-lock/index.d.ts +37 -0
  31. package/browser/web-notification/index.d.ts +58 -0
  32. package/browser/web-share/index.d.ts +42 -0
  33. package/browser/web-worker/index.d.ts +52 -0
  34. package/elements/active-element/index.d.ts +27 -0
  35. package/elements/dropzone/index.d.ts +61 -0
  36. package/elements/element-focus/index.d.ts +38 -0
  37. package/elements/element-focus-within/index.d.ts +29 -0
  38. package/elements/element-hover/index.d.ts +27 -0
  39. package/elements/element-size/index.d.ts +40 -0
  40. package/elements/element-visibility/index.d.ts +53 -0
  41. package/elements/index.d.ts +16 -0
  42. package/elements/mouse-position/index.d.ts +64 -0
  43. package/elements/on-click-outside/index.d.ts +42 -0
  44. package/elements/on-disconnect/index.d.ts +45 -0
  45. package/elements/on-long-press/index.d.ts +44 -0
  46. package/elements/pointer-swipe/index.d.ts +58 -0
  47. package/elements/scroll-position/index.d.ts +96 -0
  48. package/elements/swipe/index.d.ts +49 -0
  49. package/elements/text-selection/index.d.ts +39 -0
  50. package/elements/window-size/index.d.ts +46 -0
  51. package/fesm2022/signality-core-browser-battery.mjs +80 -0
  52. package/fesm2022/signality-core-browser-battery.mjs.map +1 -0
  53. package/fesm2022/signality-core-browser-bluetooth.mjs +112 -0
  54. package/fesm2022/signality-core-browser-bluetooth.mjs.map +1 -0
  55. package/fesm2022/signality-core-browser-breakpoints.mjs +51 -0
  56. package/fesm2022/signality-core-browser-breakpoints.mjs.map +1 -0
  57. package/fesm2022/signality-core-browser-broadcast-channel.mjs +74 -0
  58. package/fesm2022/signality-core-browser-broadcast-channel.mjs.map +1 -0
  59. package/fesm2022/signality-core-browser-browser-language.mjs +48 -0
  60. package/fesm2022/signality-core-browser-browser-language.mjs.map +1 -0
  61. package/fesm2022/signality-core-browser-clipboard.mjs +102 -0
  62. package/fesm2022/signality-core-browser-clipboard.mjs.map +1 -0
  63. package/fesm2022/signality-core-browser-device-posture.mjs +40 -0
  64. package/fesm2022/signality-core-browser-device-posture.mjs.map +1 -0
  65. package/fesm2022/signality-core-browser-display-media.mjs +121 -0
  66. package/fesm2022/signality-core-browser-display-media.mjs.map +1 -0
  67. package/fesm2022/signality-core-browser-eye-dropper.mjs +82 -0
  68. package/fesm2022/signality-core-browser-eye-dropper.mjs.map +1 -0
  69. package/fesm2022/signality-core-browser-favicon.mjs +100 -0
  70. package/fesm2022/signality-core-browser-favicon.mjs.map +1 -0
  71. package/fesm2022/signality-core-browser-fps.mjs +103 -0
  72. package/fesm2022/signality-core-browser-fps.mjs.map +1 -0
  73. package/fesm2022/signality-core-browser-gamepad.mjs +93 -0
  74. package/fesm2022/signality-core-browser-gamepad.mjs.map +1 -0
  75. package/fesm2022/signality-core-browser-geolocation.mjs +120 -0
  76. package/fesm2022/signality-core-browser-geolocation.mjs.map +1 -0
  77. package/fesm2022/signality-core-browser-input-modality.mjs +64 -0
  78. package/fesm2022/signality-core-browser-input-modality.mjs.map +1 -0
  79. package/fesm2022/signality-core-browser-listener.mjs +132 -0
  80. package/fesm2022/signality-core-browser-listener.mjs.map +1 -0
  81. package/fesm2022/signality-core-browser-media-query.mjs +55 -0
  82. package/fesm2022/signality-core-browser-media-query.mjs.map +1 -0
  83. package/fesm2022/signality-core-browser-network.mjs +76 -0
  84. package/fesm2022/signality-core-browser-network.mjs.map +1 -0
  85. package/fesm2022/signality-core-browser-online.mjs +49 -0
  86. package/fesm2022/signality-core-browser-online.mjs.map +1 -0
  87. package/fesm2022/signality-core-browser-page-visibility.mjs +47 -0
  88. package/fesm2022/signality-core-browser-page-visibility.mjs.map +1 -0
  89. package/fesm2022/signality-core-browser-picture-in-picture.mjs +93 -0
  90. package/fesm2022/signality-core-browser-picture-in-picture.mjs.map +1 -0
  91. package/fesm2022/signality-core-browser-pointer-lock-element.mjs +43 -0
  92. package/fesm2022/signality-core-browser-pointer-lock-element.mjs.map +1 -0
  93. package/fesm2022/signality-core-browser-screen-orientation.mjs +43 -0
  94. package/fesm2022/signality-core-browser-screen-orientation.mjs.map +1 -0
  95. package/fesm2022/signality-core-browser-speech-recognition.mjs +171 -0
  96. package/fesm2022/signality-core-browser-speech-recognition.mjs.map +1 -0
  97. package/fesm2022/signality-core-browser-speech-synthesis.mjs +146 -0
  98. package/fesm2022/signality-core-browser-speech-synthesis.mjs.map +1 -0
  99. package/fesm2022/signality-core-browser-storage.mjs +261 -0
  100. package/fesm2022/signality-core-browser-storage.mjs.map +1 -0
  101. package/fesm2022/signality-core-browser-text-direction.mjs +62 -0
  102. package/fesm2022/signality-core-browser-text-direction.mjs.map +1 -0
  103. package/fesm2022/signality-core-browser-vibration.mjs +94 -0
  104. package/fesm2022/signality-core-browser-vibration.mjs.map +1 -0
  105. package/fesm2022/signality-core-browser-wake-lock.mjs +149 -0
  106. package/fesm2022/signality-core-browser-wake-lock.mjs.map +1 -0
  107. package/fesm2022/signality-core-browser-web-notification.mjs +137 -0
  108. package/fesm2022/signality-core-browser-web-notification.mjs.map +1 -0
  109. package/fesm2022/signality-core-browser-web-share.mjs +92 -0
  110. package/fesm2022/signality-core-browser-web-share.mjs.map +1 -0
  111. package/fesm2022/signality-core-browser-web-worker.mjs +105 -0
  112. package/fesm2022/signality-core-browser-web-worker.mjs.map +1 -0
  113. package/fesm2022/signality-core-browser.mjs +34 -0
  114. package/fesm2022/signality-core-browser.mjs.map +1 -0
  115. package/fesm2022/signality-core-elements-active-element.mjs +88 -0
  116. package/fesm2022/signality-core-elements-active-element.mjs.map +1 -0
  117. package/fesm2022/signality-core-elements-dropzone.mjs +158 -0
  118. package/fesm2022/signality-core-elements-dropzone.mjs.map +1 -0
  119. package/fesm2022/signality-core-elements-element-focus-within.mjs +56 -0
  120. package/fesm2022/signality-core-elements-element-focus-within.mjs.map +1 -0
  121. package/fesm2022/signality-core-elements-element-focus.mjs +54 -0
  122. package/fesm2022/signality-core-elements-element-focus.mjs.map +1 -0
  123. package/fesm2022/signality-core-elements-element-hover.mjs +48 -0
  124. package/fesm2022/signality-core-elements-element-hover.mjs.map +1 -0
  125. package/fesm2022/signality-core-elements-element-size.mjs +73 -0
  126. package/fesm2022/signality-core-elements-element-size.mjs.map +1 -0
  127. package/fesm2022/signality-core-elements-element-visibility.mjs +76 -0
  128. package/fesm2022/signality-core-elements-element-visibility.mjs.map +1 -0
  129. package/fesm2022/signality-core-elements-mouse-position.mjs +109 -0
  130. package/fesm2022/signality-core-elements-mouse-position.mjs.map +1 -0
  131. package/fesm2022/signality-core-elements-on-click-outside.mjs +97 -0
  132. package/fesm2022/signality-core-elements-on-click-outside.mjs.map +1 -0
  133. package/fesm2022/signality-core-elements-on-disconnect.mjs +99 -0
  134. package/fesm2022/signality-core-elements-on-disconnect.mjs.map +1 -0
  135. package/fesm2022/signality-core-elements-on-long-press.mjs +84 -0
  136. package/fesm2022/signality-core-elements-on-long-press.mjs.map +1 -0
  137. package/fesm2022/signality-core-elements-pointer-swipe.mjs +116 -0
  138. package/fesm2022/signality-core-elements-pointer-swipe.mjs.map +1 -0
  139. package/fesm2022/signality-core-elements-scroll-position.mjs +175 -0
  140. package/fesm2022/signality-core-elements-scroll-position.mjs.map +1 -0
  141. package/fesm2022/signality-core-elements-swipe.mjs +107 -0
  142. package/fesm2022/signality-core-elements-swipe.mjs.map +1 -0
  143. package/fesm2022/signality-core-elements-text-selection.mjs +70 -0
  144. package/fesm2022/signality-core-elements-text-selection.mjs.map +1 -0
  145. package/fesm2022/signality-core-elements-window-size.mjs +81 -0
  146. package/fesm2022/signality-core-elements-window-size.mjs.map +1 -0
  147. package/fesm2022/signality-core-elements.mjs +21 -0
  148. package/fesm2022/signality-core-elements.mjs.map +1 -0
  149. package/fesm2022/signality-core-forms-cva.mjs +140 -0
  150. package/fesm2022/signality-core-forms-cva.mjs.map +1 -0
  151. package/fesm2022/signality-core-forms.mjs +6 -0
  152. package/fesm2022/signality-core-forms.mjs.map +1 -0
  153. package/fesm2022/signality-core-internal.mjs +268 -0
  154. package/fesm2022/signality-core-internal.mjs.map +1 -0
  155. package/fesm2022/signality-core-observers-intersection-observer.mjs +70 -0
  156. package/fesm2022/signality-core-observers-intersection-observer.mjs.map +1 -0
  157. package/fesm2022/signality-core-observers-mutation-observer.mjs +77 -0
  158. package/fesm2022/signality-core-observers-mutation-observer.mjs.map +1 -0
  159. package/fesm2022/signality-core-observers-performance-observer.mjs +84 -0
  160. package/fesm2022/signality-core-observers-performance-observer.mjs.map +1 -0
  161. package/fesm2022/signality-core-observers-resize-observer.mjs +69 -0
  162. package/fesm2022/signality-core-observers-resize-observer.mjs.map +1 -0
  163. package/fesm2022/signality-core-observers.mjs +9 -0
  164. package/fesm2022/signality-core-observers.mjs.map +1 -0
  165. package/fesm2022/signality-core-reactivity-debounced.mjs +27 -0
  166. package/fesm2022/signality-core-reactivity-debounced.mjs.map +1 -0
  167. package/fesm2022/signality-core-reactivity-throttled.mjs +27 -0
  168. package/fesm2022/signality-core-reactivity-throttled.mjs.map +1 -0
  169. package/fesm2022/signality-core-reactivity-watcher.mjs +36 -0
  170. package/fesm2022/signality-core-reactivity-watcher.mjs.map +1 -0
  171. package/fesm2022/signality-core-reactivity.mjs +8 -0
  172. package/fesm2022/signality-core-reactivity.mjs.map +1 -0
  173. package/fesm2022/signality-core-router-fragment.mjs +41 -0
  174. package/fesm2022/signality-core-router-fragment.mjs.map +1 -0
  175. package/fesm2022/signality-core-router-params.mjs +45 -0
  176. package/fesm2022/signality-core-router-params.mjs.map +1 -0
  177. package/fesm2022/signality-core-router-query-params.mjs +67 -0
  178. package/fesm2022/signality-core-router-query-params.mjs.map +1 -0
  179. package/fesm2022/signality-core-router-route-data.mjs +46 -0
  180. package/fesm2022/signality-core-router-route-data.mjs.map +1 -0
  181. package/fesm2022/signality-core-router-router-listener.mjs +50 -0
  182. package/fesm2022/signality-core-router-router-listener.mjs.map +1 -0
  183. package/fesm2022/signality-core-router-title.mjs +54 -0
  184. package/fesm2022/signality-core-router-title.mjs.map +1 -0
  185. package/fesm2022/signality-core-router-url.mjs +53 -0
  186. package/fesm2022/signality-core-router-url.mjs.map +1 -0
  187. package/fesm2022/signality-core-router.mjs +12 -0
  188. package/fesm2022/signality-core-router.mjs.map +1 -0
  189. package/fesm2022/signality-core-scheduling-debounce-callback.mjs +59 -0
  190. package/fesm2022/signality-core-scheduling-debounce-callback.mjs.map +1 -0
  191. package/fesm2022/signality-core-scheduling-interval.mjs +110 -0
  192. package/fesm2022/signality-core-scheduling-interval.mjs.map +1 -0
  193. package/fesm2022/signality-core-scheduling-throttle-callback.mjs +66 -0
  194. package/fesm2022/signality-core-scheduling-throttle-callback.mjs.map +1 -0
  195. package/fesm2022/signality-core-scheduling.mjs +8 -0
  196. package/fesm2022/signality-core-scheduling.mjs.map +1 -0
  197. package/fesm2022/signality-core-types.mjs +4 -0
  198. package/fesm2022/signality-core-types.mjs.map +1 -0
  199. package/fesm2022/signality-core.mjs +13 -0
  200. package/fesm2022/signality-core.mjs.map +1 -0
  201. package/forms/cva/index.d.ts +60 -0
  202. package/forms/index.d.ts +1 -0
  203. package/index.d.ts +8 -0
  204. package/internal/constants/index.d.ts +2 -0
  205. package/internal/constants/mobile-regex.d.ts +1 -0
  206. package/internal/constants/stubs.d.ts +32 -0
  207. package/internal/index.d.ts +4 -0
  208. package/internal/providers/index.d.ts +3 -0
  209. package/internal/providers/is-browser.d.ts +2 -0
  210. package/internal/providers/is-mobile.d.ts +2 -0
  211. package/internal/providers/is-server.d.ts +2 -0
  212. package/internal/types/index.d.ts +2 -0
  213. package/internal/types/timer.d.ts +1 -0
  214. package/internal/types/union.d.ts +1 -0
  215. package/internal/utils/bom/index.d.ts +1 -0
  216. package/internal/utils/bom/is-window.d.ts +1 -0
  217. package/internal/utils/const-signal.d.ts +10 -0
  218. package/internal/utils/context.d.ts +18 -0
  219. package/internal/utils/create-token.d.ts +8 -0
  220. package/internal/utils/dom/get-active-element.d.ts +1 -0
  221. package/internal/utils/dom/get-event-target.d.ts +1 -0
  222. package/internal/utils/dom/get-pip-element.d.ts +1 -0
  223. package/internal/utils/dom/get-shadow-root.d.ts +1 -0
  224. package/internal/utils/dom/index.d.ts +6 -0
  225. package/internal/utils/dom/is-element.d.ts +1 -0
  226. package/internal/utils/dom/is-node-within.d.ts +1 -0
  227. package/internal/utils/index.d.ts +10 -0
  228. package/internal/utils/is-plain-object.d.ts +1 -0
  229. package/internal/utils/is-query-signal.d.ts +10 -0
  230. package/internal/utils/proxy-signal.d.ts +18 -0
  231. package/internal/utils/to-element.d.ts +12 -0
  232. package/internal/utils/to-value.d.ts +6 -0
  233. package/observers/index.d.ts +4 -0
  234. package/observers/intersection-observer/index.d.ts +42 -0
  235. package/observers/mutation-observer/index.d.ts +45 -0
  236. package/observers/performance-observer/index.d.ts +58 -0
  237. package/observers/resize-observer/index.d.ts +40 -0
  238. package/package.json +343 -0
  239. package/reactivity/debounced/index.d.ts +50 -0
  240. package/reactivity/index.d.ts +3 -0
  241. package/reactivity/throttled/index.d.ts +53 -0
  242. package/reactivity/watcher/index.d.ts +68 -0
  243. package/router/fragment/index.d.ts +26 -0
  244. package/router/index.d.ts +7 -0
  245. package/router/params/index.d.ts +28 -0
  246. package/router/query-params/index.d.ts +80 -0
  247. package/router/route-data/index.d.ts +28 -0
  248. package/router/router-listener/index.d.ts +83 -0
  249. package/router/title/index.d.ts +29 -0
  250. package/router/url/index.d.ts +32 -0
  251. package/scheduling/debounce-callback/index.d.ts +28 -0
  252. package/scheduling/index.d.ts +3 -0
  253. package/scheduling/interval/index.d.ts +51 -0
  254. package/scheduling/throttle-callback/index.d.ts +30 -0
  255. package/types/index.d.ts +6 -0
  256. package/types/maybe-element-signal.d.ts +2 -0
  257. package/types/maybe-signal.d.ts +2 -0
  258. package/types/signal-value.d.ts +2 -0
  259. package/types/signal-values.d.ts +5 -0
  260. package/types/unref-element.d.ts +2 -0
  261. package/types/with-injector.d.ts +8 -0
@@ -0,0 +1,28 @@
1
+ import { type CreateSignalOptions, type Signal } from '@angular/core';
2
+ import type { WithInjector } from '@signality/core/types';
3
+ export type RouteDataOptions<T = unknown> = CreateSignalOptions<T> & WithInjector;
4
+ /**
5
+ * Reactive wrapper around the [Angular Router](https://angular.dev/guide/routing) route data.
6
+ *
7
+ * @param options - Optional configuration including signal options and injector
8
+ * @returns A signal containing the current route data
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * @Component({
13
+ * template: `
14
+ * <div>
15
+ * <h1>{{ data().name }}</h1>
16
+ * @if (data().showBreadcrumbs) {
17
+ * <nav>Breadcrumbs here</nav>
18
+ * }
19
+ * </div>
20
+ * `
21
+ * })
22
+ * class ProductComponent {
23
+ * // Route with data: { name: 'Product Page', showBreadcrumbs: true }
24
+ * readonly data = routeData<{ name: string; showBreadcrumbs: boolean }>();
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function routeData<T = unknown>(options?: RouteDataOptions<T>): Signal<T>;
@@ -0,0 +1,83 @@
1
+ import { ActivationEnd, ActivationStart, ChildActivationEnd, ChildActivationStart, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RoutesRecognized, Scroll } from '@angular/router';
2
+ import type { WithInjector } from '@signality/core/types';
3
+ export interface RouterListenerOptions extends WithInjector {
4
+ /** If true, automatically unsubscribe after the first event */
5
+ readonly once?: boolean;
6
+ }
7
+ export interface RouterListenerRef {
8
+ /** Manually unsubscribe from router events */
9
+ readonly destroy: () => void;
10
+ }
11
+ export type RouterEventType = 'navigationstart' | 'navigationend' | 'navigationcancel' | 'navigationerror' | 'navigationskipped' | 'routesrecognized' | 'guardscheckstart' | 'guardscheckend' | 'resolvestart' | 'resolveend' | 'routeconfigloadstart' | 'routeconfigloadend' | 'childactivationstart' | 'childactivationend' | 'activationstart' | 'activationend' | 'scroll';
12
+ /**
13
+ * Event-driven listener for [Angular Router](https://angular.dev/guide/routing) events.
14
+ *
15
+ * @param event - Router event name in lowercase (e.g., 'navigationstart') or array of event names
16
+ * @param handler - Type-safe handler function for the specific event(s)
17
+ * @param options - Optional configuration
18
+ * @returns RouterListenerRef with destroy method for manual unsubscribe
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * @Component({
23
+ * template: `
24
+ * @if (isLoading()) {
25
+ * <p>Navigation in progress...</p>
26
+ * }
27
+ * `
28
+ * })
29
+ * class NavigationComponent {
30
+ * readonly isLoading = signal(false);
31
+ *
32
+ * constructor() {
33
+ * routerListener('navigationstart', event => {
34
+ * this.isLoading.set(true);
35
+ * });
36
+ *
37
+ * routerListener('navigationend', event => {
38
+ * this.isLoading.set(false);
39
+ * });
40
+ * }
41
+ * }
42
+ * ```
43
+ */
44
+ export declare function routerListener(event: 'navigationstart', handler: (event: NavigationStart) => void, options?: RouterListenerOptions): RouterListenerRef;
45
+ export declare function routerListener(event: 'navigationend', handler: (event: NavigationEnd) => void, options?: RouterListenerOptions): RouterListenerRef;
46
+ export declare function routerListener(event: 'navigationcancel', handler: (event: NavigationCancel) => void, options?: RouterListenerOptions): RouterListenerRef;
47
+ export declare function routerListener(event: 'navigationerror', handler: (event: NavigationError) => void, options?: RouterListenerOptions): RouterListenerRef;
48
+ export declare function routerListener(event: 'navigationskipped', handler: (event: NavigationSkipped) => void, options?: RouterListenerOptions): RouterListenerRef;
49
+ export declare function routerListener(event: 'routesrecognized', handler: (event: RoutesRecognized) => void, options?: RouterListenerOptions): RouterListenerRef;
50
+ export declare function routerListener(event: 'guardscheckstart', handler: (event: GuardsCheckStart) => void, options?: RouterListenerOptions): RouterListenerRef;
51
+ export declare function routerListener(event: 'guardscheckend', handler: (event: GuardsCheckEnd) => void, options?: RouterListenerOptions): RouterListenerRef;
52
+ export declare function routerListener(event: 'resolvestart', handler: (event: ResolveStart) => void, options?: RouterListenerOptions): RouterListenerRef;
53
+ export declare function routerListener(event: 'resolveend', handler: (event: ResolveEnd) => void, options?: RouterListenerOptions): RouterListenerRef;
54
+ export declare function routerListener(event: 'routeconfigloadstart', handler: (event: RouteConfigLoadStart) => void, options?: RouterListenerOptions): RouterListenerRef;
55
+ export declare function routerListener(event: 'routeconfigloadend', handler: (event: RouteConfigLoadEnd) => void, options?: RouterListenerOptions): RouterListenerRef;
56
+ export declare function routerListener(event: 'childactivationstart', handler: (event: ChildActivationStart) => void, options?: RouterListenerOptions): RouterListenerRef;
57
+ export declare function routerListener(event: 'childactivationend', handler: (event: ChildActivationEnd) => void, options?: RouterListenerOptions): RouterListenerRef;
58
+ export declare function routerListener(event: 'activationstart', handler: (event: ActivationStart) => void, options?: RouterListenerOptions): RouterListenerRef;
59
+ export declare function routerListener(event: 'activationend', handler: (event: ActivationEnd) => void, options?: RouterListenerOptions): RouterListenerRef;
60
+ export declare function routerListener(event: 'scroll', handler: (event: Scroll) => void, options?: RouterListenerOptions): RouterListenerRef;
61
+ export declare function routerListener<T extends readonly [RouterEventType, ...RouterEventType[]]>(events: T, handler: (event: RouterEventTypeArrayToUnion<T>) => void, options?: RouterListenerOptions): RouterListenerRef;
62
+ type RouterEventTypeMap = {
63
+ navigationstart: NavigationStart;
64
+ navigationend: NavigationEnd;
65
+ navigationcancel: NavigationCancel;
66
+ navigationerror: NavigationError;
67
+ navigationskipped: NavigationSkipped;
68
+ routesrecognized: RoutesRecognized;
69
+ guardscheckstart: GuardsCheckStart;
70
+ guardscheckend: GuardsCheckEnd;
71
+ resolvestart: ResolveStart;
72
+ resolveend: ResolveEnd;
73
+ routeconfigloadstart: RouteConfigLoadStart;
74
+ routeconfigloadend: RouteConfigLoadEnd;
75
+ childactivationstart: ChildActivationStart;
76
+ childactivationend: ChildActivationEnd;
77
+ activationstart: ActivationStart;
78
+ activationend: ActivationEnd;
79
+ scroll: Scroll;
80
+ };
81
+ type RouterEventTypeToEventType<T extends RouterEventType> = RouterEventTypeMap[T];
82
+ type RouterEventTypeArrayToUnion<T extends readonly RouterEventType[]> = T[number] extends infer U ? U extends RouterEventType ? RouterEventTypeToEventType<U> : never : never;
83
+ export {};
@@ -0,0 +1,29 @@
1
+ import { type CreateSignalOptions, type WritableSignal } from '@angular/core';
2
+ import type { WithInjector } from '@signality/core/types';
3
+ export type TitleOptions = CreateSignalOptions<string> & WithInjector;
4
+ /**
5
+ * Reactive wrapper around the [Angular Router](https://angular.dev/guide/routing) route title.
6
+ *
7
+ * @param options - Optional configuration
8
+ * @returns A writable signal containing the current route title (string)
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * @Component({
13
+ * template: `
14
+ * <div>
15
+ * <h1>{{ pageTitle() }}</h1>
16
+ * <button (click)="updateTitle()">Update Title</button>
17
+ * </div>
18
+ * `
19
+ * })
20
+ * class PageComponent {
21
+ * readonly pageTitle = title();
22
+ *
23
+ * updateTitle() {
24
+ * this.pageTitle.set('New Page Title');
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+ export declare function title(options?: TitleOptions): WritableSignal<string>;
@@ -0,0 +1,32 @@
1
+ import { type CreateSignalOptions, type Signal } from '@angular/core';
2
+ import type { WithInjector } from '@signality/core/types';
3
+ export interface UrlOptions extends CreateSignalOptions<string>, WithInjector {
4
+ /**
5
+ * Include origin (protocol + host) for absolute URL.
6
+ * @default false
7
+ */
8
+ readonly absolute?: boolean;
9
+ }
10
+ /**
11
+ * Reactive wrapper around the [Angular Router](https://angular.dev/guide/routing) current URL.
12
+ *
13
+ * @param options - Optional configuration
14
+ * @returns A signal containing the current URL
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * @Component({
19
+ * template: `
20
+ * <div>
21
+ * <p>Current URL: {{ currentUrl() }}</p>
22
+ * <p>Absolute URL: {{ absoluteUrl() }}</p>
23
+ * </div>
24
+ * `
25
+ * })
26
+ * class UrlComponent {
27
+ * readonly currentUrl = url();
28
+ * readonly absoluteUrl = url({ absolute: true });
29
+ * }
30
+ * ```
31
+ */
32
+ export declare function url(options?: UrlOptions): Signal<string>;
@@ -0,0 +1,28 @@
1
+ import type { MaybeSignal, WithInjector } from '@signality/core/types';
2
+ /**
3
+ * Creates a debounced version of a callback function.
4
+ * The callback will only be executed after the specified wait time has elapsed since the last invocation.
5
+ *
6
+ * @param callback - The function to debounce
7
+ * @param wait - Debounce delay in milliseconds (can be a reactive signal)
8
+ * @param options - Optional configuration including injector
9
+ * @returns A debounced version of the callback function
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * @Component({
14
+ * template: `
15
+ * <input (input)="handleInput($event.target.value)" />
16
+ * `,
17
+ * })
18
+ * export class SearchComponent {
19
+ * readonly debounceTime = input(300);
20
+ * readonly searchChange = output<string>();
21
+ *
22
+ * readonly handleInput = debounceCallback(value => {
23
+ * this.searchChange.emit(value);
24
+ * }, this.debounceTime);
25
+ * }
26
+ * ```
27
+ */
28
+ export declare function debounceCallback<T extends (...args: any[]) => any>(callback: T, wait: MaybeSignal<number>, options?: WithInjector): T;
@@ -0,0 +1,3 @@
1
+ export * from '@signality/core/scheduling/debounce-callback';
2
+ export * from '@signality/core/scheduling/interval';
3
+ export * from '@signality/core/scheduling/throttle-callback';
@@ -0,0 +1,51 @@
1
+ import { type Signal } from '@angular/core';
2
+ import type { MaybeSignal, WithInjector } from '@signality/core/types';
3
+ export interface IntervalOptions extends WithInjector {
4
+ /**
5
+ * Whether to start the interval immediately.
6
+ * @default false
7
+ */
8
+ readonly immediate?: boolean;
9
+ }
10
+ export interface IntervalRef {
11
+ /** Whether the interval is currently active */
12
+ readonly isActive: Signal<boolean>;
13
+ /** Number of times the callback has been executed */
14
+ readonly counter: Signal<number>;
15
+ /** Pause the interval */
16
+ readonly pause: () => void;
17
+ /** Resume the interval */
18
+ readonly resume: () => void;
19
+ /** Reset the counter to 0 */
20
+ readonly reset: () => void;
21
+ }
22
+ /**
23
+ * Creates a reactive interval that executes a callback function at specified intervals.
24
+ * Automatically handles cleanup and supports reactive interval duration.
25
+ *
26
+ * @param callback - Function to execute on each interval tick, receives current counter value
27
+ * @param intervalMs - Interval duration in milliseconds (can be a reactive signal)
28
+ * @param options - Optional configuration including immediate start and injector
29
+ * @returns An IntervalRef with control methods and state signals
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * @Component({
34
+ * template: `
35
+ * <p>Status: {{ polling.isActive() ? 'Polling' : 'Stopped' }}</p>
36
+ * <button (click)="polling.pause()">Stop</button>
37
+ * <button (click)="polling.resume()">Start</button>
38
+ * `,
39
+ * })
40
+ * export class PeriodicTask {
41
+ * readonly polling = interval(async () => {
42
+ * await this.checkStatus();
43
+ * }, 5000);
44
+ *
45
+ * async checkStatus() {
46
+ * // async operation
47
+ * }
48
+ * }
49
+ * ```
50
+ */
51
+ export declare function interval(callback: (counter: number) => void, intervalMs: MaybeSignal<number>, options?: IntervalOptions): IntervalRef;
@@ -0,0 +1,30 @@
1
+ import type { MaybeSignal, WithInjector } from '@signality/core/types';
2
+ /**
3
+ * Creates a throttled version of a callback function.
4
+ * The callback will be executed at most once per specified wait interval.
5
+ *
6
+ * @param callback - The function to throttle
7
+ * @param wait - Throttle interval in milliseconds (can be a reactive signal)
8
+ * @param options - Optional configuration including injector
9
+ * @returns A throttled version of the callback function
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * @Component({
14
+ * template: `
15
+ * <div (scroll)="handleScroll($event)">
16
+ * Scrollable content
17
+ * </div>
18
+ * `,
19
+ * })
20
+ * export class ScrollComponent {
21
+ * readonly throttleTime = input(300);
22
+ * readonly scrollChange = output<Event>();
23
+ *
24
+ * readonly handleScroll = throttleCallback(e => {
25
+ * this.scrollChange.emit(e);
26
+ * }, this.throttleTime);
27
+ * }
28
+ * ```
29
+ */
30
+ export declare function throttleCallback<T extends (...args: any[]) => any>(callback: T, wait: MaybeSignal<number>, options?: WithInjector): T;
@@ -0,0 +1,6 @@
1
+ export * from './maybe-element-signal';
2
+ export * from './maybe-signal';
3
+ export * from './signal-value';
4
+ export * from './signal-values';
5
+ export * from './unref-element';
6
+ export * from './with-injector';
@@ -0,0 +1,2 @@
1
+ import type { ElementRef, Signal } from '@angular/core';
2
+ export type MaybeElementSignal<T extends Element> = T | ElementRef<T> | Signal<T | ElementRef<T> | null | undefined>;
@@ -0,0 +1,2 @@
1
+ import type { Signal } from '@angular/core';
2
+ export type MaybeSignal<T> = T | Signal<T>;
@@ -0,0 +1,2 @@
1
+ import type { Signal } from '@angular/core';
2
+ export type SignalValue<S> = S extends Signal<infer V> ? V : never;
@@ -0,0 +1,5 @@
1
+ import type { Signal } from '@angular/core';
2
+ import type { SignalValue } from './signal-value';
3
+ export type SignalValues<T extends readonly Signal<any>[]> = {
4
+ readonly [K in keyof T]: SignalValue<T[K]>;
5
+ };
@@ -0,0 +1,2 @@
1
+ import type { ElementRef } from '@angular/core';
2
+ export type UnrefElement<T> = T extends ElementRef<infer E> ? E : T;
@@ -0,0 +1,8 @@
1
+ import type { Injector } from '@angular/core';
2
+ /**
3
+ * Provides optional injector property.
4
+ * Use `Required<WithInjector>` when the injector is required.
5
+ */
6
+ export interface WithInjector {
7
+ readonly injector?: Injector;
8
+ }