@vizejs/composable 0.426.2 → 0.427.0

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 (544) hide show
  1. package/dist/abort-signal.d.mts +1 -1
  2. package/dist/active-element.d.mts +37 -0
  3. package/dist/active-element.mjs +56 -0
  4. package/dist/animate.d.mts +114 -0
  5. package/dist/animate.mjs +157 -0
  6. package/dist/battery.d.mts +61 -0
  7. package/dist/battery.mjs +90 -0
  8. package/dist/breakpoints.d.mts +82 -0
  9. package/dist/breakpoints.mjs +91 -0
  10. package/dist/catalog-BeTXFKxF.d.mts +4188 -0
  11. package/dist/catalog-r4Z5nptX.mjs +5144 -0
  12. package/dist/catalog.d.mts +1 -1
  13. package/dist/catalog.mjs +1 -1
  14. package/dist/color-mode.d.mts +131 -0
  15. package/dist/color-mode.mjs +133 -0
  16. package/dist/computed-async.d.mts +63 -0
  17. package/dist/computed-async.mjs +43 -0
  18. package/dist/computed-with-control.d.mts +44 -0
  19. package/dist/computed-with-control.mjs +54 -0
  20. package/dist/create-event-hook.d.mts +77 -0
  21. package/dist/create-event-hook.mjs +66 -0
  22. package/dist/create-global-state.d.mts +24 -0
  23. package/dist/create-global-state.mjs +34 -0
  24. package/dist/create-injection-state.d.mts +51 -0
  25. package/dist/create-injection-state.mjs +19 -0
  26. package/dist/create-shared-composable.d.mts +38 -0
  27. package/dist/create-shared-composable.mjs +54 -0
  28. package/dist/device-motion.d.mts +71 -0
  29. package/dist/device-motion.mjs +75 -0
  30. package/dist/device-orientation.d.mts +82 -0
  31. package/dist/device-orientation.mjs +86 -0
  32. package/dist/device-pixel-ratio.d.mts +45 -0
  33. package/dist/device-pixel-ratio.mjs +50 -0
  34. package/dist/document-visibility.mjs +6 -2
  35. package/dist/draggable.d.mts +121 -0
  36. package/dist/draggable.mjs +153 -0
  37. package/dist/element-bounding.d.mts +87 -0
  38. package/dist/element-bounding.mjs +95 -0
  39. package/dist/element-by-point.d.mts +70 -0
  40. package/dist/element-by-point.mjs +69 -0
  41. package/dist/element-hover.d.mts +42 -0
  42. package/dist/element-hover.mjs +70 -0
  43. package/dist/element-ref.d.mts +34 -0
  44. package/dist/element-ref.mjs +23 -0
  45. package/dist/element-target-Crpxl4D9.d.mts +60 -0
  46. package/dist/element-target.d.mts +2 -0
  47. package/dist/element-target.mjs +58 -0
  48. package/dist/event-listener.mjs +7 -3
  49. package/dist/focus.d.mts +69 -0
  50. package/dist/focus.mjs +124 -0
  51. package/dist/fps.d.mts +59 -0
  52. package/dist/fps.mjs +64 -0
  53. package/dist/geolocation.d.mts +98 -0
  54. package/dist/geolocation.mjs +86 -0
  55. package/dist/i18n.d.mts +237 -0
  56. package/dist/i18n.mjs +215 -0
  57. package/dist/icu-message.d.mts +235 -0
  58. package/dist/icu-message.mjs +343 -0
  59. package/dist/idle.d.mts +79 -0
  60. package/dist/idle.mjs +90 -0
  61. package/dist/index.d.mts +172 -6
  62. package/dist/index.mjs +173 -7
  63. package/dist/infinite-scroll.d.mts +56 -0
  64. package/dist/infinite-scroll.mjs +72 -0
  65. package/dist/intersection-observer.d.mts +122 -0
  66. package/dist/intersection-observer.mjs +117 -0
  67. package/dist/magic-keys.d.mts +121 -0
  68. package/dist/magic-keys.mjs +163 -0
  69. package/dist/math.d.mts +96 -0
  70. package/dist/math.mjs +84 -0
  71. package/dist/media-query.d.mts +3 -1
  72. package/dist/media-query.mjs +5 -3
  73. package/dist/mouse-in-element.d.mts +49 -0
  74. package/dist/mouse-in-element.mjs +66 -0
  75. package/dist/mouse.d.mts +77 -0
  76. package/dist/mouse.mjs +100 -0
  77. package/dist/mutation-observer.d.mts +98 -0
  78. package/dist/mutation-observer.mjs +69 -0
  79. package/dist/network.d.mts +96 -0
  80. package/dist/network.mjs +117 -0
  81. package/dist/on-click-outside.d.mts +69 -0
  82. package/dist/on-click-outside.mjs +115 -0
  83. package/dist/on-key-stroke.d.mts +71 -0
  84. package/dist/on-key-stroke.mjs +79 -0
  85. package/dist/on-long-press.d.mts +82 -0
  86. package/dist/on-long-press.mjs +105 -0
  87. package/dist/on-start-typing.d.mts +44 -0
  88. package/dist/on-start-typing.mjs +61 -0
  89. package/dist/page-leave.d.mts +26 -0
  90. package/dist/page-leave.mjs +40 -0
  91. package/dist/parent-element.d.mts +16 -0
  92. package/dist/parent-element.mjs +27 -0
  93. package/dist/pinch.d.mts +73 -0
  94. package/dist/pinch.mjs +138 -0
  95. package/dist/pointer-lock.d.mts +79 -0
  96. package/dist/pointer-lock.mjs +126 -0
  97. package/dist/pointer.d.mts +78 -0
  98. package/dist/pointer.mjs +95 -0
  99. package/dist/preferences.d.mts +55 -0
  100. package/dist/preferences.mjs +63 -0
  101. package/dist/preferred-languages.d.mts +43 -0
  102. package/dist/preferred-languages.mjs +44 -0
  103. package/dist/reactify.d.mts +28 -0
  104. package/dist/reactify.mjs +7 -0
  105. package/dist/ref-auto-reset.d.mts +47 -0
  106. package/dist/ref-auto-reset.mjs +70 -0
  107. package/dist/ref-debounced.d.mts +29 -0
  108. package/dist/ref-debounced.mjs +29 -0
  109. package/dist/ref-default.d.mts +27 -0
  110. package/dist/ref-default.mjs +33 -0
  111. package/dist/resize-observer.d.mts +96 -0
  112. package/dist/resize-observer.mjs +111 -0
  113. package/dist/resolver.d.mts +124 -0
  114. package/dist/resolver.mjs +138 -0
  115. package/dist/retry-async.d.mts +2 -2
  116. package/dist/retry-delay-DYsdq4SE.d.mts +73 -0
  117. package/dist/retry-delay.d.mts +1 -72
  118. package/dist/screen-orientation.d.mts +77 -0
  119. package/dist/screen-orientation.mjs +74 -0
  120. package/dist/scroll-lock.d.mts +37 -0
  121. package/dist/scroll-lock.mjs +50 -0
  122. package/dist/scroll.d.mts +158 -0
  123. package/dist/scroll.mjs +172 -0
  124. package/dist/standard-schema-DmNgFVK5.d.mts +107 -0
  125. package/dist/standard-schema.d.mts +2 -0
  126. package/dist/standard-schema.mjs +60 -0
  127. package/dist/swipe.d.mts +125 -0
  128. package/dist/swipe.mjs +225 -0
  129. package/dist/sync-ref.d.mts +80 -0
  130. package/dist/sync-ref.mjs +43 -0
  131. package/dist/text-selection.d.mts +46 -0
  132. package/dist/text-selection.mjs +62 -0
  133. package/dist/textarea-autosize.d.mts +58 -0
  134. package/dist/textarea-autosize.mjs +54 -0
  135. package/dist/timeout-scheduler-CI8RVLZs.d.mts +18 -0
  136. package/dist/timeout-scheduler.d.mts +1 -17
  137. package/dist/to-reactive.d.mts +26 -0
  138. package/dist/to-reactive.mjs +46 -0
  139. package/dist/transition.d.mts +125 -0
  140. package/dist/transition.mjs +266 -0
  141. package/dist/until.d.mts +177 -0
  142. package/dist/until.mjs +111 -0
  143. package/dist/use-array.d.mts +112 -0
  144. package/dist/use-array.mjs +90 -0
  145. package/dist/use-async-queue.d.mts +109 -0
  146. package/dist/use-async-queue.mjs +96 -0
  147. package/dist/use-async-state.d.mts +86 -0
  148. package/dist/use-async-state.mjs +41 -0
  149. package/dist/use-barcode-detector.d.mts +159 -0
  150. package/dist/use-barcode-detector.mjs +143 -0
  151. package/dist/use-bluetooth.d.mts +164 -0
  152. package/dist/use-bluetooth.mjs +183 -0
  153. package/dist/use-broadcast-channel.d.mts +115 -0
  154. package/dist/use-broadcast-channel.mjs +121 -0
  155. package/dist/use-builtin-ai.d.mts +342 -0
  156. package/dist/use-builtin-ai.mjs +261 -0
  157. package/dist/use-clipboard.d.mts +169 -0
  158. package/dist/use-clipboard.mjs +226 -0
  159. package/dist/use-compression-stream.d.mts +173 -0
  160. package/dist/use-compression-stream.mjs +166 -0
  161. package/dist/use-confirm-dialog.d.mts +70 -0
  162. package/dist/use-confirm-dialog.mjs +57 -0
  163. package/dist/use-contact-picker.d.mts +117 -0
  164. package/dist/use-contact-picker.mjs +103 -0
  165. package/dist/use-cookie.d.mts +196 -0
  166. package/dist/use-cookie.mjs +259 -0
  167. package/dist/use-countdown.d.mts +85 -0
  168. package/dist/use-countdown.mjs +74 -0
  169. package/dist/use-css-var.d.mts +96 -0
  170. package/dist/use-css-var.mjs +104 -0
  171. package/dist/use-cycle-list.d.mts +76 -0
  172. package/dist/use-cycle-list.mjs +39 -0
  173. package/dist/use-date-format.d.mts +103 -0
  174. package/dist/use-date-format.mjs +147 -0
  175. package/dist/use-date-time-format.d.mts +75 -0
  176. package/dist/use-date-time-format.mjs +53 -0
  177. package/dist/use-debounced.d.mts +1 -1
  178. package/dist/use-display-media.d.mts +62 -0
  179. package/dist/use-display-media.mjs +46 -0
  180. package/dist/use-display-names.d.mts +75 -0
  181. package/dist/use-display-names.mjs +52 -0
  182. package/dist/use-document-title.d.mts +88 -0
  183. package/dist/use-document-title.mjs +100 -0
  184. package/dist/use-drop-zone.d.mts +128 -0
  185. package/dist/use-drop-zone.mjs +154 -0
  186. package/dist/use-event-source.d.mts +184 -0
  187. package/dist/use-event-source.mjs +226 -0
  188. package/dist/use-eye-dropper.d.mts +79 -0
  189. package/dist/use-eye-dropper.mjs +68 -0
  190. package/dist/use-favicon.d.mts +78 -0
  191. package/dist/use-favicon.mjs +68 -0
  192. package/dist/use-fetch.d.mts +230 -0
  193. package/dist/use-fetch.mjs +263 -0
  194. package/dist/use-field.d.mts +107 -0
  195. package/dist/use-field.mjs +117 -0
  196. package/dist/use-file-dialog.d.mts +139 -0
  197. package/dist/use-file-dialog.mjs +101 -0
  198. package/dist/use-file-system-access.d.mts +184 -0
  199. package/dist/use-file-system-access.mjs +151 -0
  200. package/dist/use-form-field-props.d.mts +235 -0
  201. package/dist/use-form-field-props.mjs +164 -0
  202. package/dist/use-form.d.mts +324 -0
  203. package/dist/use-form.mjs +482 -0
  204. package/dist/use-fullscreen.d.mts +104 -0
  205. package/dist/use-fullscreen.mjs +95 -0
  206. package/dist/use-gamepad.d.mts +242 -0
  207. package/dist/use-gamepad.mjs +218 -0
  208. package/dist/use-hid.d.mts +160 -0
  209. package/dist/use-hid.mjs +156 -0
  210. package/dist/use-id-generator.d.mts +44 -0
  211. package/dist/use-id-generator.mjs +38 -0
  212. package/dist/use-image.d.mts +125 -0
  213. package/dist/use-image.mjs +109 -0
  214. package/dist/use-indexed-db.d.mts +207 -0
  215. package/dist/use-indexed-db.mjs +251 -0
  216. package/dist/use-interval-BA55gTHT.d.mts +140 -0
  217. package/dist/use-interval.d.mts +2 -0
  218. package/dist/use-interval.mjs +100 -0
  219. package/dist/use-list-format.d.mts +60 -0
  220. package/dist/use-list-format.mjs +40 -0
  221. package/dist/use-machine.d.mts +90 -0
  222. package/dist/use-machine.mjs +78 -0
  223. package/dist/use-map.d.mts +90 -0
  224. package/dist/use-map.mjs +70 -0
  225. package/dist/use-media-controls.d.mts +198 -0
  226. package/dist/use-media-controls.mjs +264 -0
  227. package/dist/use-memoize.d.mts +73 -0
  228. package/dist/use-memoize.mjs +28 -0
  229. package/dist/use-mounted.d.mts +24 -0
  230. package/dist/use-mounted.mjs +29 -0
  231. package/dist/use-navigation-api.d.mts +360 -0
  232. package/dist/use-navigation-api.mjs +231 -0
  233. package/dist/use-notification.d.mts +139 -0
  234. package/dist/use-notification.mjs +131 -0
  235. package/dist/use-now.d.mts +137 -0
  236. package/dist/use-now.mjs +44 -0
  237. package/dist/use-number-format.d.mts +73 -0
  238. package/dist/use-number-format.mjs +58 -0
  239. package/dist/use-object-url.d.mts +47 -0
  240. package/dist/use-object-url.mjs +54 -0
  241. package/dist/use-offset-pagination.d.mts +91 -0
  242. package/dist/use-offset-pagination.mjs +80 -0
  243. package/dist/use-payment-request.d.mts +239 -0
  244. package/dist/use-payment-request.mjs +206 -0
  245. package/dist/use-performance-observer.d.mts +285 -0
  246. package/dist/use-performance-observer.mjs +132 -0
  247. package/dist/use-permission.d.mts +99 -0
  248. package/dist/use-permission.mjs +92 -0
  249. package/dist/use-plural-rules.d.mts +79 -0
  250. package/dist/use-plural-rules.mjs +59 -0
  251. package/dist/use-push-subscription.d.mts +154 -0
  252. package/dist/use-push-subscription.mjs +146 -0
  253. package/dist/use-queue.d.mts +89 -0
  254. package/dist/use-queue.mjs +116 -0
  255. package/dist/use-raf-fn.d.mts +87 -0
  256. package/dist/use-raf-fn.mjs +99 -0
  257. package/dist/use-relative-time-format.d.mts +111 -0
  258. package/dist/use-relative-time-format.mjs +119 -0
  259. package/dist/use-request-idle-callback.d.mts +122 -0
  260. package/dist/use-request-idle-callback.mjs +147 -0
  261. package/dist/use-route-query.d.mts +149 -0
  262. package/dist/use-route-query.mjs +86 -0
  263. package/dist/use-scheduler-post-task.d.mts +156 -0
  264. package/dist/use-scheduler-post-task.mjs +182 -0
  265. package/dist/use-screen-details.d.mts +205 -0
  266. package/dist/use-screen-details.mjs +188 -0
  267. package/dist/use-script-tag.d.mts +162 -0
  268. package/dist/use-script-tag.mjs +171 -0
  269. package/dist/use-segmenter.d.mts +78 -0
  270. package/dist/use-segmenter.mjs +66 -0
  271. package/dist/use-selection.d.mts +125 -0
  272. package/dist/use-selection.mjs +77 -0
  273. package/dist/use-serial.d.mts +165 -0
  274. package/dist/use-serial.mjs +205 -0
  275. package/dist/use-service-worker.d.mts +177 -0
  276. package/dist/use-service-worker.mjs +178 -0
  277. package/dist/use-set.d.mts +96 -0
  278. package/dist/use-set.mjs +74 -0
  279. package/dist/use-share.d.mts +92 -0
  280. package/dist/use-share.mjs +99 -0
  281. package/dist/use-sorted-locale.d.mts +62 -0
  282. package/dist/use-sorted-locale.mjs +52 -0
  283. package/dist/use-sorted.d.mts +29 -0
  284. package/dist/use-sorted.mjs +14 -0
  285. package/dist/use-speech-recognition.d.mts +150 -0
  286. package/dist/use-speech-recognition.mjs +168 -0
  287. package/dist/use-speech-synthesis.d.mts +148 -0
  288. package/dist/use-speech-synthesis.mjs +152 -0
  289. package/dist/use-stack.d.mts +83 -0
  290. package/dist/use-stack.mjs +93 -0
  291. package/dist/use-stepper.d.mts +79 -0
  292. package/dist/use-stepper.mjs +52 -0
  293. package/dist/use-storage-estimate.d.mts +151 -0
  294. package/dist/use-storage-estimate.mjs +170 -0
  295. package/dist/use-storage.d.mts +214 -0
  296. package/dist/use-storage.mjs +415 -0
  297. package/dist/use-style-tag.d.mts +102 -0
  298. package/dist/use-style-tag.mjs +91 -0
  299. package/dist/use-supported.d.mts +23 -0
  300. package/dist/use-supported.mjs +26 -0
  301. package/dist/use-throttled.d.mts +1 -1
  302. package/dist/use-time-ago.d.mts +163 -0
  303. package/dist/use-time-ago.mjs +95 -0
  304. package/dist/use-timeout.d.mts +122 -0
  305. package/dist/use-timeout.mjs +65 -0
  306. package/dist/use-url-hash.d.mts +88 -0
  307. package/dist/use-url-hash.mjs +145 -0
  308. package/dist/use-url-search-params.d.mts +223 -0
  309. package/dist/use-url-search-params.mjs +295 -0
  310. package/dist/use-usb.d.mts +212 -0
  311. package/dist/use-usb.mjs +137 -0
  312. package/dist/use-user-activation.d.mts +83 -0
  313. package/dist/use-user-activation.mjs +113 -0
  314. package/dist/use-user-media.d.mts +194 -0
  315. package/dist/use-user-media.mjs +214 -0
  316. package/dist/use-v-model.d.mts +113 -0
  317. package/dist/use-v-model.mjs +40 -0
  318. package/dist/use-vibrate.d.mts +81 -0
  319. package/dist/use-vibrate.mjs +90 -0
  320. package/dist/use-view-transition.d.mts +106 -0
  321. package/dist/use-view-transition.mjs +101 -0
  322. package/dist/use-visual-viewport.d.mts +105 -0
  323. package/dist/use-visual-viewport.mjs +104 -0
  324. package/dist/use-wake-lock.d.mts +96 -0
  325. package/dist/use-wake-lock.mjs +106 -0
  326. package/dist/use-web-authn.d.mts +404 -0
  327. package/dist/use-web-authn.mjs +323 -0
  328. package/dist/use-web-locks.d.mts +180 -0
  329. package/dist/use-web-locks.mjs +136 -0
  330. package/dist/use-web-midi.d.mts +148 -0
  331. package/dist/use-web-midi.mjs +140 -0
  332. package/dist/use-web-vitals.d.mts +142 -0
  333. package/dist/use-web-vitals.mjs +248 -0
  334. package/dist/use-websocket.d.mts +218 -0
  335. package/dist/use-websocket.mjs +257 -0
  336. package/dist/use-worker-fn.d.mts +119 -0
  337. package/dist/use-worker-fn.mjs +162 -0
  338. package/dist/virtual-list.d.mts +105 -0
  339. package/dist/virtual-list.mjs +128 -0
  340. package/dist/watch-debounced.d.mts +84 -0
  341. package/dist/watch-debounced.mjs +84 -0
  342. package/dist/watch-ignorable.d.mts +47 -0
  343. package/dist/watch-ignorable.mjs +61 -0
  344. package/dist/watch-once.d.mts +29 -0
  345. package/dist/watch-once.mjs +10 -0
  346. package/dist/watch-pausable.d.mts +51 -0
  347. package/dist/watch-pausable.mjs +23 -0
  348. package/dist/watch-source.d.mts +29 -0
  349. package/dist/watch-source.mjs +1 -0
  350. package/dist/watch-throttled.d.mts +70 -0
  351. package/dist/watch-throttled.mjs +94 -0
  352. package/dist/whenever.d.mts +39 -0
  353. package/dist/whenever.mjs +41 -0
  354. package/dist/window-size.d.mts +87 -0
  355. package/dist/window-size.mjs +65 -0
  356. package/package.json +846 -5
  357. package/registry/files/abort-signal.ts +292 -0
  358. package/registry/files/active-element.ts +93 -0
  359. package/registry/files/animate.ts +322 -0
  360. package/registry/files/async-resource.ts +190 -0
  361. package/registry/files/battery.ts +166 -0
  362. package/registry/files/breakpoints.ts +166 -0
  363. package/registry/files/capability.ts +171 -0
  364. package/registry/files/color-mode.ts +274 -0
  365. package/registry/files/computed-async.ts +123 -0
  366. package/registry/files/computed-with-control.ts +80 -0
  367. package/registry/files/create-event-hook.ts +139 -0
  368. package/registry/files/create-global-state.ts +34 -0
  369. package/registry/files/create-injection-state.ts +75 -0
  370. package/registry/files/create-shared-composable.ts +74 -0
  371. package/registry/files/device-motion.ts +152 -0
  372. package/registry/files/device-orientation.ts +168 -0
  373. package/registry/files/device-pixel-ratio.ts +100 -0
  374. package/registry/files/disposal-scope.ts +201 -0
  375. package/registry/files/document-visibility.ts +152 -0
  376. package/registry/files/draggable.ts +273 -0
  377. package/registry/files/element-bounding.ts +175 -0
  378. package/registry/files/element-by-point.ts +149 -0
  379. package/registry/files/element-hover.ts +104 -0
  380. package/registry/files/element-ref.ts +58 -0
  381. package/registry/files/element-target.ts +99 -0
  382. package/registry/files/event-listener.ts +188 -0
  383. package/registry/files/focus.ts +181 -0
  384. package/registry/files/fps.ts +133 -0
  385. package/registry/files/geolocation.ts +214 -0
  386. package/registry/files/i18n.ts +524 -0
  387. package/registry/files/icu-message.ts +701 -0
  388. package/registry/files/idle.ts +176 -0
  389. package/registry/files/infinite-scroll.ts +135 -0
  390. package/registry/files/intersection-observer.ts +261 -0
  391. package/registry/files/locale.ts +148 -0
  392. package/registry/files/magic-keys.ts +298 -0
  393. package/registry/files/math.ts +175 -0
  394. package/registry/files/media-query.ts +102 -0
  395. package/registry/files/mouse-in-element.ts +107 -0
  396. package/registry/files/mouse.ts +167 -0
  397. package/registry/files/mutation-observer.ts +183 -0
  398. package/registry/files/network.ts +229 -0
  399. package/registry/files/on-click-outside.ts +178 -0
  400. package/registry/files/on-key-stroke.ts +135 -0
  401. package/registry/files/on-long-press.ts +188 -0
  402. package/registry/files/on-start-typing.ts +88 -0
  403. package/registry/files/page-leave.ts +57 -0
  404. package/registry/files/parent-element.ts +29 -0
  405. package/registry/files/pinch.ts +187 -0
  406. package/registry/files/pointer-lock.ts +232 -0
  407. package/registry/files/pointer.ts +153 -0
  408. package/registry/files/preferences.ts +98 -0
  409. package/registry/files/preferred-languages.ts +88 -0
  410. package/registry/files/reactify.ts +39 -0
  411. package/registry/files/ref-auto-reset.ts +102 -0
  412. package/registry/files/ref-debounced.ts +34 -0
  413. package/registry/files/ref-default.ts +35 -0
  414. package/registry/files/resize-observer.ts +220 -0
  415. package/registry/files/retry-async.ts +261 -0
  416. package/registry/files/retry-delay.ts +132 -0
  417. package/registry/files/scope.ts +21 -0
  418. package/registry/files/screen-orientation.ts +165 -0
  419. package/registry/files/scroll-lock.ts +80 -0
  420. package/registry/files/scroll.ts +338 -0
  421. package/registry/files/standard-schema.ts +163 -0
  422. package/registry/files/swipe.ts +321 -0
  423. package/registry/files/sync-ref.ts +166 -0
  424. package/registry/files/temporal.ts +182 -0
  425. package/registry/files/text-selection.ts +110 -0
  426. package/registry/files/textarea-autosize.ts +114 -0
  427. package/registry/files/timeout-scheduler.ts +16 -0
  428. package/registry/files/to-reactive.ts +44 -0
  429. package/registry/files/transition.ts +271 -0
  430. package/registry/files/until.ts +352 -0
  431. package/registry/files/use-array.ts +201 -0
  432. package/registry/files/use-async-queue.ts +278 -0
  433. package/registry/files/use-async-state.ts +139 -0
  434. package/registry/files/use-barcode-detector.ts +321 -0
  435. package/registry/files/use-bluetooth.ts +409 -0
  436. package/registry/files/use-broadcast-channel.ts +250 -0
  437. package/registry/files/use-builtin-ai.ts +674 -0
  438. package/registry/files/use-clipboard.ts +425 -0
  439. package/registry/files/use-compression-stream.ts +364 -0
  440. package/registry/files/use-confirm-dialog.ts +137 -0
  441. package/registry/files/use-contact-picker.ts +246 -0
  442. package/registry/files/use-cookie.ts +500 -0
  443. package/registry/files/use-countdown.ts +161 -0
  444. package/registry/files/use-counter.ts +147 -0
  445. package/registry/files/use-css-var.ts +191 -0
  446. package/registry/files/use-cycle-list.ts +136 -0
  447. package/registry/files/use-date-format.ts +281 -0
  448. package/registry/files/use-date-time-format.ts +113 -0
  449. package/registry/files/use-debounced.ts +163 -0
  450. package/registry/files/use-display-media.ts +89 -0
  451. package/registry/files/use-display-names.ts +122 -0
  452. package/registry/files/use-document-title.ts +196 -0
  453. package/registry/files/use-drop-zone.ts +287 -0
  454. package/registry/files/use-event-source.ts +470 -0
  455. package/registry/files/use-eye-dropper.ts +134 -0
  456. package/registry/files/use-favicon.ts +140 -0
  457. package/registry/files/use-fetch.ts +578 -0
  458. package/registry/files/use-field.ts +247 -0
  459. package/registry/files/use-file-dialog.ts +257 -0
  460. package/registry/files/use-file-system-access.ts +383 -0
  461. package/registry/files/use-form-field-props.ts +381 -0
  462. package/registry/files/use-form.ts +980 -0
  463. package/registry/files/use-fullscreen.ts +214 -0
  464. package/registry/files/use-gamepad.ts +463 -0
  465. package/registry/files/use-hid.ts +359 -0
  466. package/registry/files/use-history.ts +231 -0
  467. package/registry/files/use-id-generator.ts +61 -0
  468. package/registry/files/use-image.ts +253 -0
  469. package/registry/files/use-indexed-db.ts +508 -0
  470. package/registry/files/use-interval.ts +253 -0
  471. package/registry/files/use-list-format.ts +85 -0
  472. package/registry/files/use-machine.ts +171 -0
  473. package/registry/files/use-map.ts +145 -0
  474. package/registry/files/use-media-controls.ts +545 -0
  475. package/registry/files/use-memoize.ts +118 -0
  476. package/registry/files/use-mounted.ts +30 -0
  477. package/registry/files/use-navigation-api.ts +641 -0
  478. package/registry/files/use-notification.ts +285 -0
  479. package/registry/files/use-now.ts +194 -0
  480. package/registry/files/use-number-format.ts +120 -0
  481. package/registry/files/use-object-url.ts +87 -0
  482. package/registry/files/use-offset-pagination.ts +168 -0
  483. package/registry/files/use-payment-request.ts +465 -0
  484. package/registry/files/use-performance-observer.ts +469 -0
  485. package/registry/files/use-permission.ts +220 -0
  486. package/registry/files/use-plural-rules.ts +134 -0
  487. package/registry/files/use-previous.ts +62 -0
  488. package/registry/files/use-push-subscription.ts +352 -0
  489. package/registry/files/use-queue.ts +197 -0
  490. package/registry/files/use-raf-fn.ts +176 -0
  491. package/registry/files/use-relative-time-format.ts +201 -0
  492. package/registry/files/use-request-idle-callback.ts +278 -0
  493. package/registry/files/use-route-query.ts +300 -0
  494. package/registry/files/use-scheduler-post-task.ts +397 -0
  495. package/registry/files/use-screen-details.ts +393 -0
  496. package/registry/files/use-script-tag.ts +341 -0
  497. package/registry/files/use-segmenter.ts +147 -0
  498. package/registry/files/use-selection.ts +233 -0
  499. package/registry/files/use-serial.ts +404 -0
  500. package/registry/files/use-service-worker.ts +413 -0
  501. package/registry/files/use-set.ts +154 -0
  502. package/registry/files/use-share.ts +168 -0
  503. package/registry/files/use-sorted-locale.ts +130 -0
  504. package/registry/files/use-sorted.ts +49 -0
  505. package/registry/files/use-speech-recognition.ts +357 -0
  506. package/registry/files/use-speech-synthesis.ts +333 -0
  507. package/registry/files/use-stack.ts +164 -0
  508. package/registry/files/use-stepper.ts +166 -0
  509. package/registry/files/use-storage-estimate.ts +352 -0
  510. package/registry/files/use-storage.ts +635 -0
  511. package/registry/files/use-style-tag.ts +200 -0
  512. package/registry/files/use-supported.ts +26 -0
  513. package/registry/files/use-throttled.ts +215 -0
  514. package/registry/files/use-time-ago.ts +276 -0
  515. package/registry/files/use-timeout.ts +218 -0
  516. package/registry/files/use-toggle.ts +54 -0
  517. package/registry/files/use-url-hash.ts +280 -0
  518. package/registry/files/use-url-search-params.ts +497 -0
  519. package/registry/files/use-usb.ts +395 -0
  520. package/registry/files/use-user-activation.ts +215 -0
  521. package/registry/files/use-user-media.ts +422 -0
  522. package/registry/files/use-v-model.ts +210 -0
  523. package/registry/files/use-vibrate.ts +174 -0
  524. package/registry/files/use-view-transition.ts +229 -0
  525. package/registry/files/use-visual-viewport.ts +228 -0
  526. package/registry/files/use-wake-lock.ts +206 -0
  527. package/registry/files/use-web-authn.ts +793 -0
  528. package/registry/files/use-web-locks.ts +363 -0
  529. package/registry/files/use-web-midi.ts +306 -0
  530. package/registry/files/use-web-vitals.ts +409 -0
  531. package/registry/files/use-websocket.ts +553 -0
  532. package/registry/files/use-worker-fn.ts +306 -0
  533. package/registry/files/virtual-list.ts +230 -0
  534. package/registry/files/watch-debounced.ts +206 -0
  535. package/registry/files/watch-ignorable.ts +128 -0
  536. package/registry/files/watch-once.ts +46 -0
  537. package/registry/files/watch-pausable.ts +93 -0
  538. package/registry/files/watch-source.ts +51 -0
  539. package/registry/files/watch-throttled.ts +201 -0
  540. package/registry/files/whenever.ts +70 -0
  541. package/registry/files/window-size.ts +151 -0
  542. package/registry/registry.json +5792 -0
  543. package/dist/catalog-D2AL3xYl.d.mts +0 -523
  544. package/dist/catalog-D5SYCsgW.mjs +0 -549
@@ -0,0 +1,231 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { computed, hasInjectionContext, readonly, shallowRef, toValue, watch, watchPostEffect } from "vue";
3
+ //#region src/use-navigation-api.ts
4
+ function isNavigationHost(candidate) {
5
+ return typeof candidate === "object" && candidate !== null && typeof Reflect.get(candidate, "navigate") === "function" && typeof Reflect.get(candidate, "addEventListener") === "function";
6
+ }
7
+ function browserNavigation() {
8
+ if (typeof window === "undefined") return void 0;
9
+ const candidate = Reflect.get(window, "navigation");
10
+ return isNavigationHost(candidate) ? candidate : void 0;
11
+ }
12
+ function isNavigateEvent(event) {
13
+ return "destination" in event && "canIntercept" in event && "intercept" in event;
14
+ }
15
+ function isEntryChangeEvent(event) {
16
+ return "from" in event && "navigationType" in event;
17
+ }
18
+ function snapshot(entry) {
19
+ return {
20
+ url: entry.url,
21
+ key: entry.key,
22
+ id: entry.id,
23
+ index: entry.index,
24
+ sameDocument: entry.sameDocument
25
+ };
26
+ }
27
+ function ignore() {}
28
+ /**
29
+ * Reactive access to the Navigation API (`window.navigation`).
30
+ *
31
+ * Entry snapshots refresh on `currententrychange`, `navigatesuccess` and
32
+ * `navigateerror`. Actions resolve to a {@link NavigationOutcome} and never
33
+ * reject; failures also land in `error`. Listeners (including interceptors)
34
+ * are removed when the owning reactive scope stops; outside a scope the
35
+ * caller removes them with the returned functions.
36
+ *
37
+ * Server rendering: nothing is read or subscribed; `supported` is false,
38
+ * `currentEntry` null, `entries` empty, and actions resolve to
39
+ * `{ status: "unsupported" }`.
40
+ * Inside a component the host is resolved after mounting, so hydration
41
+ * renders this server state first.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const nav = useNavigationApi<{ tab: string }>();
46
+ * nav.intercept((url) => url.pathname.startsWith("/app/"), {
47
+ * handler: async () => renderRoute(location.pathname),
48
+ * });
49
+ * ```
50
+ *
51
+ * @param options Navigation host and state parser.
52
+ * @default options {}
53
+ * @returns Navigation state, hooks and actions.
54
+ */
55
+ function useNavigationApi(options = {}) {
56
+ const currentEntry = shallowRef(null);
57
+ const entries = shallowRef([]);
58
+ const canGoBack = shallowRef(false);
59
+ const canGoForward = shallowRef(false);
60
+ const transition = shallowRef(null);
61
+ const state = shallowRef(void 0);
62
+ const error = shallowRef(void 0);
63
+ const navigateListeners = /* @__PURE__ */ new Set();
64
+ const successListeners = /* @__PURE__ */ new Set();
65
+ const errorListeners = /* @__PURE__ */ new Set();
66
+ const changeListeners = /* @__PURE__ */ new Set();
67
+ const hydrated = shallowRef(!hasInjectionContext());
68
+ if (!hydrated.value) watchPostEffect(() => {
69
+ hydrated.value = true;
70
+ });
71
+ const resolveHost = () => {
72
+ if (!hydrated.value) return void 0;
73
+ if (options.navigation === void 0) return browserNavigation();
74
+ return toValue(options.navigation) ?? void 0;
75
+ };
76
+ const parse = (raw) => {
77
+ if (options.parseState) return options.parseState(raw);
78
+ return raw;
79
+ };
80
+ const getState = () => {
81
+ const entry = resolveHost()?.currentEntry;
82
+ return entry ? parse(entry.getState()) : void 0;
83
+ };
84
+ const refresh = (host) => {
85
+ const entry = host?.currentEntry ?? null;
86
+ currentEntry.value = entry ? snapshot(entry) : null;
87
+ entries.value = host ? host.entries().map(snapshot) : [];
88
+ canGoBack.value = host?.canGoBack ?? false;
89
+ canGoForward.value = host?.canGoForward ?? false;
90
+ const active = host?.transition ?? null;
91
+ transition.value = active ? {
92
+ navigationType: active.navigationType,
93
+ from: snapshot(active.from)
94
+ } : null;
95
+ state.value = entry ? parse(entry.getState()) : void 0;
96
+ };
97
+ const add = (set, listener) => {
98
+ set.add(listener);
99
+ return () => {
100
+ set.delete(listener);
101
+ };
102
+ };
103
+ const stopWatch = watch(resolveHost, (host, _previous, onCleanup) => {
104
+ refresh(host);
105
+ if (!host) return;
106
+ const onNavigate = (event) => {
107
+ if (!isNavigateEvent(event)) return;
108
+ for (const listener of Array.from(navigateListeners)) listener(event);
109
+ };
110
+ const onSuccess = () => {
111
+ refresh(host);
112
+ for (const listener of Array.from(successListeners)) listener();
113
+ };
114
+ const onError = (event) => {
115
+ refresh(host);
116
+ const cause = Reflect.get(event, "error");
117
+ error.value = cause;
118
+ for (const listener of Array.from(errorListeners)) listener(cause);
119
+ };
120
+ const onChange = (event) => {
121
+ refresh(host);
122
+ if (!isEntryChangeEvent(event)) return;
123
+ const change = {
124
+ navigationType: event.navigationType,
125
+ from: snapshot(event.from)
126
+ };
127
+ for (const listener of Array.from(changeListeners)) listener(change);
128
+ };
129
+ host.addEventListener("navigate", onNavigate);
130
+ host.addEventListener("navigatesuccess", onSuccess);
131
+ host.addEventListener("navigateerror", onError);
132
+ host.addEventListener("currententrychange", onChange);
133
+ onCleanup(() => {
134
+ host.removeEventListener("navigate", onNavigate);
135
+ host.removeEventListener("navigatesuccess", onSuccess);
136
+ host.removeEventListener("navigateerror", onError);
137
+ host.removeEventListener("currententrychange", onChange);
138
+ });
139
+ }, {
140
+ immediate: true,
141
+ flush: "sync"
142
+ });
143
+ const perform = async (action) => {
144
+ const host = resolveHost();
145
+ if (!host) return { status: "unsupported" };
146
+ try {
147
+ const result = action(host);
148
+ result.committed?.catch(ignore);
149
+ const entry = await result.finished ?? host.currentEntry;
150
+ error.value = void 0;
151
+ refresh(host);
152
+ return entry ? {
153
+ status: "success",
154
+ entry: snapshot(entry)
155
+ } : {
156
+ status: "error",
157
+ error: void 0
158
+ };
159
+ } catch (cause) {
160
+ error.value = cause;
161
+ return {
162
+ status: "error",
163
+ error: cause
164
+ };
165
+ }
166
+ };
167
+ const intercept = (predicate, interceptOptions = {}) => add(navigateListeners, (event) => {
168
+ if (!event.canIntercept || event.hashChange || event.downloadRequest !== null) return;
169
+ const url = new URL(event.destination.url);
170
+ const current = resolveHost()?.currentEntry?.url;
171
+ if (current && new URL(current).origin !== url.origin) return;
172
+ if (!predicate(url, event)) return;
173
+ const { handler, focusReset, scroll } = interceptOptions;
174
+ event.intercept({
175
+ ...handler ? { handler: async () => handler(event) } : {},
176
+ ...focusReset ? { focusReset } : {},
177
+ ...scroll ? { scroll } : {}
178
+ });
179
+ });
180
+ const infoOption = (info) => info === void 0 ? {} : { info };
181
+ tryOnScopeDispose(() => {
182
+ stopWatch();
183
+ navigateListeners.clear();
184
+ successListeners.clear();
185
+ errorListeners.clear();
186
+ changeListeners.clear();
187
+ });
188
+ return {
189
+ supported: computed(() => resolveHost() !== void 0),
190
+ currentEntry: readonly(currentEntry),
191
+ entries: readonly(entries),
192
+ canGoBack: readonly(canGoBack),
193
+ canGoForward: readonly(canGoForward),
194
+ transition: readonly(transition),
195
+ state: computed(() => state.value),
196
+ error: readonly(error),
197
+ getState,
198
+ onNavigate: (listener) => add(navigateListeners, listener),
199
+ onNavigateSuccess: (listener) => add(successListeners, listener),
200
+ onNavigateError: (listener) => add(errorListeners, listener),
201
+ onCurrentEntryChange: (listener) => add(changeListeners, listener),
202
+ intercept,
203
+ navigate: (url, navigateOptions = {}) => perform((host) => host.navigate(url, {
204
+ ..."state" in navigateOptions ? { state: navigateOptions.state } : {},
205
+ ...navigateOptions.history ? { history: navigateOptions.history } : {},
206
+ ...infoOption(navigateOptions.info)
207
+ })),
208
+ back: (info) => perform((host) => host.back(infoOption(info))),
209
+ forward: (info) => perform((host) => host.forward(infoOption(info))),
210
+ traverseTo: (key, info) => perform((host) => host.traverseTo(key, infoOption(info))),
211
+ reload: (reloadOptions = {}) => perform((host) => host.reload({
212
+ ..."state" in reloadOptions ? { state: reloadOptions.state } : {},
213
+ ...infoOption(reloadOptions.info)
214
+ })),
215
+ updateCurrentEntry: ({ state: next }) => {
216
+ const host = resolveHost();
217
+ if (!host) return false;
218
+ try {
219
+ host.updateCurrentEntry({ state: next });
220
+ error.value = void 0;
221
+ refresh(host);
222
+ return true;
223
+ } catch (cause) {
224
+ error.value = cause;
225
+ return false;
226
+ }
227
+ }
228
+ };
229
+ }
230
+ //#endregion
231
+ export { useNavigationApi };
@@ -0,0 +1,139 @@
1
+ import { ComputedRef, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
2
+
3
+ //#region src/use-notification.d.ts
4
+ /** Notification permission, plus `"unsupported"` when the API is missing. */
5
+ type NotificationPermissionState = "default" | "granted" | "denied" | "unsupported";
6
+ /** Options accepted by the `Notification` constructor. */
7
+ interface NotificationOptionsLike<Data> {
8
+ /** Body text. */
9
+ readonly body?: string;
10
+ /** Icon URL. */
11
+ readonly icon?: string;
12
+ /** Monochrome badge URL for constrained surfaces. */
13
+ readonly badge?: string;
14
+ /** Grouping tag; a new notification with the same tag replaces the old one. */
15
+ readonly tag?: string;
16
+ /** BCP 47 language tag. */
17
+ readonly lang?: string;
18
+ /** Text direction. */
19
+ readonly dir?: "auto" | "ltr" | "rtl";
20
+ /** Keep the notification visible until the user interacts with it. */
21
+ readonly requireInteraction?: boolean;
22
+ /** Suppress sounds and vibration. */
23
+ readonly silent?: boolean | null;
24
+ /** Application data attached to the notification. */
25
+ readonly data?: Data;
26
+ }
27
+ /** Minimal `Notification` instance consumed by {@link useWebNotification}. */
28
+ interface NotificationLike extends EventTarget {
29
+ /** Dismiss the notification. */
30
+ close(): void;
31
+ }
32
+ /** Minimal `Notification` constructor (with its static members). */
33
+ interface NotificationHost {
34
+ /** Current permission. */
35
+ readonly permission: string;
36
+ /** Ask the user for permission. */
37
+ requestPermission(): Promise<string>;
38
+ /** Show a notification. */
39
+ new (title: string, options?: NotificationOptionsLike<unknown>): NotificationLike;
40
+ }
41
+ /** Default notification content for {@link useWebNotification}. */
42
+ interface WebNotificationDefaults<Data> extends NotificationOptionsLike<Data> {
43
+ /** Default title. */
44
+ readonly title?: string;
45
+ }
46
+ /** Options for {@link useWebNotification}. */
47
+ interface UseWebNotificationOptions<Data> {
48
+ /**
49
+ * Notification constructor for alternate runtimes and tests. A ref (not a
50
+ * getter) because the host itself is a constructor function.
51
+ *
52
+ * @default window.Notification when it exists
53
+ */
54
+ readonly host?: MaybeRef<NotificationHost | null | undefined>;
55
+ /**
56
+ * Reactive default title and options merged into every `show` call.
57
+ *
58
+ * @default {}
59
+ */
60
+ readonly defaults?: MaybeRefOrGetter<WebNotificationDefaults<Data>>;
61
+ /**
62
+ * Request permission from `show` when it has not been decided yet.
63
+ *
64
+ * @default true
65
+ */
66
+ readonly requestPermissionOnShow?: boolean;
67
+ }
68
+ /** Discriminated outcome of {@link WebNotificationControls.show}. */
69
+ type WebNotificationResult = {
70
+ /** The notification is showing. */readonly status: "shown"; /** The shown notification. */
71
+ readonly notification: NotificationLike;
72
+ } | {
73
+ /** Permission is not granted, the API is missing, or construction failed. */readonly status: "denied" | "unsupported" | "failed"; /** Exact error thrown by the host, when one was thrown. */
74
+ readonly error: unknown;
75
+ };
76
+ /** Notification lifecycle events exposed by {@link useWebNotification}. */
77
+ type WebNotificationEvent = "click" | "show" | "error" | "close";
78
+ /** Reactive state and actions returned by {@link useWebNotification}. */
79
+ interface WebNotificationControls<Data> {
80
+ /** Whether the Notifications API is available. */
81
+ readonly supported: ComputedRef<boolean>;
82
+ /** Current permission state. */
83
+ readonly permission: Readonly<Ref<NotificationPermissionState>>;
84
+ /** Most recently shown notification, cleared when it closes. */
85
+ readonly notification: Readonly<ShallowRef<NotificationLike | undefined>>;
86
+ /** Data attached to the current notification. */
87
+ readonly data: Readonly<ShallowRef<Data | undefined>>;
88
+ /**
89
+ * Ask the user for permission.
90
+ *
91
+ * @returns The resulting permission state.
92
+ */
93
+ readonly requestPermission: () => Promise<NotificationPermissionState>;
94
+ /**
95
+ * Show a notification, replacing the current one.
96
+ *
97
+ * @param title Title overriding the default.
98
+ * @param options Options merged over the defaults.
99
+ * @returns The discriminated outcome; never rejects.
100
+ */
101
+ readonly show: (title?: string, options?: NotificationOptionsLike<Data>) => Promise<WebNotificationResult>;
102
+ /** Close the current notification. */
103
+ readonly close: () => void;
104
+ /**
105
+ * Subscribe to an event of every notification shown by this composable.
106
+ *
107
+ * @param event Lifecycle event.
108
+ * @param handler Called with the native event and its notification.
109
+ * @returns Unsubscribe function.
110
+ */
111
+ readonly on: (event: WebNotificationEvent, handler: (event: Event, notification: NotificationLike) => void) => () => void;
112
+ }
113
+ /**
114
+ * Show typed Web Notifications with permission handling.
115
+ *
116
+ * `show` merges reactive defaults with per-call options, asks for
117
+ * permission first when it is still undecided (configurable), and resolves
118
+ * to a discriminated {@link WebNotificationResult}. Handlers registered with
119
+ * `on` apply to every notification this composable shows. The current
120
+ * notification is closed when the owning reactive scope stops.
121
+ *
122
+ * Server rendering: the API is never touched; `permission` is
123
+ * `"unsupported"` and `supported` is false.
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * const notify = useWebNotification<{ id: string }>({ defaults: { icon: "/icon.png" } });
128
+ * notify.on("click", () => window.focus());
129
+ * await notify.show("Build finished", { data: { id: "42" } });
130
+ * ```
131
+ *
132
+ * @typeParam Data Application data attached to notifications.
133
+ * @param options Capability, defaults, and permission policy.
134
+ * @default options {}
135
+ * @returns Notification state and actions.
136
+ */
137
+ declare function useWebNotification<Data = unknown>(options?: UseWebNotificationOptions<Data>): WebNotificationControls<Data>;
138
+ //#endregion
139
+ export { NotificationHost, NotificationLike, NotificationOptionsLike, NotificationPermissionState, UseWebNotificationOptions, WebNotificationControls, WebNotificationDefaults, WebNotificationEvent, WebNotificationResult, useWebNotification };
@@ -0,0 +1,131 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { computed, readonly, ref, shallowRef, toValue, unref } from "vue";
3
+ //#region src/use-notification.ts
4
+ function browserNotificationHost() {
5
+ if (typeof window === "undefined") return void 0;
6
+ return "Notification" in window ? window.Notification : void 0;
7
+ }
8
+ function normalizePermission(permission) {
9
+ return permission === "granted" || permission === "denied" ? permission : "default";
10
+ }
11
+ const notificationEvents = [
12
+ "click",
13
+ "show",
14
+ "error",
15
+ "close"
16
+ ];
17
+ /**
18
+ * Show typed Web Notifications with permission handling.
19
+ *
20
+ * `show` merges reactive defaults with per-call options, asks for
21
+ * permission first when it is still undecided (configurable), and resolves
22
+ * to a discriminated {@link WebNotificationResult}. Handlers registered with
23
+ * `on` apply to every notification this composable shows. The current
24
+ * notification is closed when the owning reactive scope stops.
25
+ *
26
+ * Server rendering: the API is never touched; `permission` is
27
+ * `"unsupported"` and `supported` is false.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const notify = useWebNotification<{ id: string }>({ defaults: { icon: "/icon.png" } });
32
+ * notify.on("click", () => window.focus());
33
+ * await notify.show("Build finished", { data: { id: "42" } });
34
+ * ```
35
+ *
36
+ * @typeParam Data Application data attached to notifications.
37
+ * @param options Capability, defaults, and permission policy.
38
+ * @default options {}
39
+ * @returns Notification state and actions.
40
+ */
41
+ function useWebNotification(options = {}) {
42
+ const resolveHost = () => options.host === void 0 ? browserNotificationHost() : unref(options.host) ?? void 0;
43
+ const readPermission = () => {
44
+ const host = resolveHost();
45
+ return host ? normalizePermission(host.permission) : "unsupported";
46
+ };
47
+ const permission = ref(readPermission());
48
+ const notification = shallowRef(void 0);
49
+ const data = shallowRef(void 0);
50
+ const handlers = /* @__PURE__ */ new Map();
51
+ const requestPermission = async () => {
52
+ const host = resolveHost();
53
+ if (!host) return permission.value = "unsupported";
54
+ try {
55
+ permission.value = normalizePermission(await host.requestPermission());
56
+ } catch {
57
+ permission.value = readPermission();
58
+ }
59
+ return permission.value;
60
+ };
61
+ const close = () => {
62
+ notification.value?.close();
63
+ notification.value = void 0;
64
+ data.value = void 0;
65
+ };
66
+ const show = async (title, overrides) => {
67
+ const host = resolveHost();
68
+ if (!host) return {
69
+ status: "unsupported",
70
+ error: void 0
71
+ };
72
+ permission.value = readPermission();
73
+ if (permission.value === "default" && (options.requestPermissionOnShow ?? true)) await requestPermission();
74
+ if (permission.value !== "granted") return {
75
+ status: "denied",
76
+ error: void 0
77
+ };
78
+ const { title: defaultTitle = "", ...defaults } = toValue(options.defaults) ?? {};
79
+ const merged = {
80
+ ...defaults,
81
+ ...overrides
82
+ };
83
+ let created;
84
+ try {
85
+ created = new host(title ?? defaultTitle, merged);
86
+ } catch (error) {
87
+ return {
88
+ status: "failed",
89
+ error
90
+ };
91
+ }
92
+ close();
93
+ notification.value = created;
94
+ data.value = merged.data;
95
+ for (const event of notificationEvents) created.addEventListener(event, (nativeEvent) => {
96
+ for (const handler of handlers.get(event) ?? []) handler(nativeEvent, created);
97
+ if (event === "close" && notification.value === created) {
98
+ notification.value = void 0;
99
+ data.value = void 0;
100
+ }
101
+ });
102
+ return {
103
+ status: "shown",
104
+ notification: created
105
+ };
106
+ };
107
+ const on = (event, handler) => {
108
+ let set = handlers.get(event);
109
+ if (!set) handlers.set(event, set = /* @__PURE__ */ new Set());
110
+ set.add(handler);
111
+ return () => {
112
+ set.delete(handler);
113
+ };
114
+ };
115
+ tryOnScopeDispose(() => {
116
+ close();
117
+ handlers.clear();
118
+ });
119
+ return {
120
+ supported: computed(() => resolveHost() !== void 0),
121
+ permission: readonly(permission),
122
+ notification,
123
+ data,
124
+ requestPermission,
125
+ show,
126
+ close,
127
+ on
128
+ };
129
+ }
130
+ //#endregion
131
+ export { useWebNotification };
@@ -0,0 +1,137 @@
1
+ import { n as IntervalScheduler, r as PausableControls } from "./use-interval-BA55gTHT.mjs";
2
+ import { FrameScheduler } from "./use-raf-fn.mjs";
3
+ import { ComputedRef, MaybeRefOrGetter, ShallowRef } from "vue";
4
+
5
+ //#region src/use-now.d.ts
6
+ /** Options for {@link useTimestamp}. */
7
+ interface UseTimestampOptions<Controls extends boolean = false> {
8
+ /**
9
+ * Update cadence: a period in milliseconds (reactive), or
10
+ * `"requestAnimationFrame"` to update on every animation frame.
11
+ *
12
+ * @default 1000
13
+ */
14
+ readonly interval?: MaybeRefOrGetter<number> | "requestAnimationFrame";
15
+ /**
16
+ * Milliseconds added to every reading, for example a server clock skew.
17
+ *
18
+ * @default 0
19
+ */
20
+ readonly offset?: number;
21
+ /**
22
+ * Clock source returning Unix epoch milliseconds.
23
+ *
24
+ * @default Date.now
25
+ */
26
+ readonly now?: () => number;
27
+ /**
28
+ * Hydration-stable starting value. When set, the first reading is this
29
+ * value on both server and client instead of the live clock, and the live
30
+ * clock takes over on the first tick. Pass the server's render time here
31
+ * (for example through a payload) to avoid hydration mismatches.
32
+ *
33
+ * @default undefined (read the clock immediately)
34
+ */
35
+ readonly initial?: number;
36
+ /**
37
+ * Start updating as soon as the composable is created.
38
+ *
39
+ * @default true
40
+ */
41
+ readonly immediate?: boolean;
42
+ /**
43
+ * Starts host timers or frames when no browser `window` is available.
44
+ *
45
+ * @default false
46
+ */
47
+ readonly runOnServer?: boolean;
48
+ /**
49
+ * Repeating timer host for millisecond cadences.
50
+ *
51
+ * @default globalThis timer functions
52
+ */
53
+ readonly scheduler?: IntervalScheduler;
54
+ /**
55
+ * Frame host for the `"requestAnimationFrame"` cadence.
56
+ *
57
+ * @default globalThis animation-frame functions when available
58
+ */
59
+ readonly frameScheduler?: FrameScheduler;
60
+ /**
61
+ * Invoked after every update with the new timestamp.
62
+ *
63
+ * @default undefined
64
+ */
65
+ readonly callback?: (timestamp: number) => void;
66
+ /**
67
+ * Return the full control object instead of the bare ref.
68
+ *
69
+ * @default false
70
+ */
71
+ readonly controls?: Controls;
72
+ }
73
+ /** Options for {@link useNow}; identical to {@link UseTimestampOptions}. */
74
+ type UseNowOptions<Controls extends boolean = false> = UseTimestampOptions<Controls>;
75
+ /** Timestamp and controls returned by `useTimestamp({ controls: true })`. */
76
+ interface TimestampControls extends PausableControls {
77
+ /** Latest reading in Unix epoch milliseconds. */
78
+ readonly timestamp: Readonly<ShallowRef<number>>;
79
+ /**
80
+ * Read the clock immediately, store the value, and return it.
81
+ *
82
+ * @returns The new timestamp.
83
+ */
84
+ readonly refresh: () => number;
85
+ }
86
+ /** Date and controls returned by `useNow({ controls: true })`. */
87
+ interface NowControls extends PausableControls {
88
+ /** Latest reading as a `Date`; a fresh instance per update. */
89
+ readonly now: ComputedRef<Date>;
90
+ /**
91
+ * Read the clock immediately, store the value, and return it.
92
+ *
93
+ * @returns The new date.
94
+ */
95
+ readonly refresh: () => Date;
96
+ }
97
+ /**
98
+ * Reactive Unix timestamp in milliseconds.
99
+ *
100
+ * Updates on a millisecond interval or every animation frame. For SSR,
101
+ * supply {@link UseTimestampOptions.initial} (or an injected `now`) so the
102
+ * server and the hydrating client render the same value; no timer runs on
103
+ * the server. Timers stop with the owning reactive scope.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * const timestamp = useTimestamp({ interval: 250 });
108
+ * const { timestamp: t, pause } = useTimestamp({ controls: true });
109
+ * ```
110
+ *
111
+ * @param options Cadence, clock, SSR, and scheduler policy.
112
+ * @default options {}
113
+ * @throws `RangeError` for invalid millisecond cadences (see `useIntervalFn`).
114
+ * @returns The timestamp ref, or the full controls when `controls` is `true`.
115
+ */
116
+ declare function useTimestamp(options?: UseTimestampOptions<false>): Readonly<ShallowRef<number>>;
117
+ declare function useTimestamp(options: UseTimestampOptions<true>): TimestampControls;
118
+ /**
119
+ * Reactive current `Date`.
120
+ *
121
+ * Same cadence, SSR, and cleanup rules as {@link useTimestamp}; the value is
122
+ * a fresh `Date` derived from the latest timestamp.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * const now = useNow({ initial: serverRenderedAt });
127
+ * ```
128
+ *
129
+ * @param options Cadence, clock, SSR, and scheduler policy.
130
+ * @default options {}
131
+ * @throws `RangeError` for invalid millisecond cadences (see `useIntervalFn`).
132
+ * @returns The date ref, or the full controls when `controls` is `true`.
133
+ */
134
+ declare function useNow(options?: UseNowOptions<false>): ComputedRef<Date>;
135
+ declare function useNow(options: UseNowOptions<true>): NowControls;
136
+ //#endregion
137
+ export { NowControls, TimestampControls, UseNowOptions, UseTimestampOptions, useNow, useTimestamp };
@@ -0,0 +1,44 @@
1
+ import { useRafFn } from "./use-raf-fn.mjs";
2
+ import { useIntervalFn } from "./use-interval.mjs";
3
+ import { computed, shallowRef } from "vue";
4
+ //#region src/use-now.ts
5
+ function createTimestamp(options) {
6
+ const offset = options.offset ?? 0;
7
+ const read = options.now ?? Date.now;
8
+ const timestamp = shallowRef(options.initial ?? read() + offset);
9
+ const refresh = () => {
10
+ timestamp.value = read() + offset;
11
+ options.callback?.(timestamp.value);
12
+ return timestamp.value;
13
+ };
14
+ const interval = options.interval ?? 1e3;
15
+ return {
16
+ ...interval === "requestAnimationFrame" ? useRafFn(refresh, {
17
+ immediate: options.immediate ?? true,
18
+ runOnServer: options.runOnServer ?? false,
19
+ ...options.frameScheduler === void 0 ? {} : { scheduler: options.frameScheduler }
20
+ }) : useIntervalFn(refresh, interval, {
21
+ immediate: options.immediate ?? true,
22
+ runOnServer: options.runOnServer ?? false,
23
+ ...options.scheduler === void 0 ? {} : { scheduler: options.scheduler }
24
+ }),
25
+ timestamp,
26
+ refresh
27
+ };
28
+ }
29
+ function useTimestamp(options = {}) {
30
+ const controls = createTimestamp(options);
31
+ return options.controls === true ? controls : controls.timestamp;
32
+ }
33
+ function useNow(options = {}) {
34
+ const { timestamp, refresh, ...pausable } = createTimestamp(options);
35
+ const now = computed(() => new Date(timestamp.value));
36
+ if (options.controls !== true) return now;
37
+ return {
38
+ ...pausable,
39
+ now,
40
+ refresh: () => new Date(refresh())
41
+ };
42
+ }
43
+ //#endregion
44
+ export { useNow, useTimestamp };