@vizejs/composable 0.426.3 → 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,154 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { readonly, ref, shallowRef, toValue, unref, watch } from "vue";
3
+ //#region src/use-drop-zone.ts
4
+ function matchesPattern(pattern, file) {
5
+ const normalized = pattern.trim().toLowerCase();
6
+ if (normalized === "" || normalized === "*" || normalized === "*/*") return true;
7
+ if (normalized.startsWith(".")) return file.name === "" || file.name.toLowerCase().endsWith(normalized);
8
+ const type = file.type.toLowerCase();
9
+ if (normalized.endsWith("/*")) return type.startsWith(normalized.slice(0, -1));
10
+ return type === normalized;
11
+ }
12
+ /**
13
+ * Test a file against `accept`-attribute style patterns.
14
+ *
15
+ * Supports exact MIME types, wildcard subtypes (`"image/*"`), extensions
16
+ * (`".png"`, case-insensitive), and `"*"`. An empty pattern list accepts
17
+ * everything. An empty `name` (the file is still being dragged) makes
18
+ * extension patterns match provisionally.
19
+ *
20
+ * @param accept Patterns to test.
21
+ * @param file File name and MIME type.
22
+ * @returns Whether any pattern matches.
23
+ */
24
+ function matchesAccept(accept, file) {
25
+ return accept.length === 0 || accept.some((pattern) => matchesPattern(pattern, file));
26
+ }
27
+ function dataTransferOf(event) {
28
+ if (!("dataTransfer" in event)) return void 0;
29
+ const transfer = event.dataTransfer;
30
+ if (typeof transfer !== "object" || transfer === null || !("files" in transfer)) return void 0;
31
+ return isDataTransfer(transfer) ? transfer : void 0;
32
+ }
33
+ function isDataTransfer(candidate) {
34
+ return "files" in candidate && "dropEffect" in candidate;
35
+ }
36
+ function draggedTypes(transfer) {
37
+ const types = [];
38
+ const items = transfer.items;
39
+ if (!items) return types;
40
+ for (let index = 0; index < items.length; index += 1) {
41
+ const item = items[index];
42
+ if (item?.kind === "file") types.push(item.type);
43
+ }
44
+ return types;
45
+ }
46
+ /**
47
+ * Headless drop-zone logic for any element.
48
+ *
49
+ * Tracks whether a drag is over the target (a nesting counter keeps
50
+ * `dragleave` from child elements from flickering the state), decides
51
+ * acceptance from the dragged MIME types while dragging, and filters the
52
+ * dropped files by `accept` (including extension patterns) and `multiple`.
53
+ * Rejected drags show the `"none"` drop effect. Rendering is entirely up to
54
+ * the caller. Listeners follow the reactive target and are removed when the
55
+ * owning reactive scope stops.
56
+ *
57
+ * Server rendering: no listener is attached; all state is empty/false.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * const zone = useTemplateRef<HTMLElement>("zone");
62
+ * const { isOverDropZone, files } = useDropZone(zone, { accept: ["image/*"] });
63
+ * ```
64
+ *
65
+ * @param target Reactive drop target.
66
+ * @param options Acceptance rules and lifecycle callbacks.
67
+ * @default options {}
68
+ * @returns Drag and drop state.
69
+ */
70
+ function useDropZone(target, options = {}) {
71
+ const isOverDropZone = ref(false);
72
+ const accepted = ref(false);
73
+ const files = shallowRef(null);
74
+ let depth = 0;
75
+ const acceptsTypes = (types) => {
76
+ const accept = unref(options.accept);
77
+ if (types.length === 0) return false;
78
+ if (!(toValue(options.multiple) ?? true) && types.length > 1) return false;
79
+ if (accept === void 0) return true;
80
+ if (typeof accept === "function") return accept(types);
81
+ return types.every((type) => matchesAccept(accept, {
82
+ name: "",
83
+ type
84
+ }));
85
+ };
86
+ const acceptedFiles = (transfer) => {
87
+ const dropped = Array.from(transfer.files);
88
+ const accept = unref(options.accept);
89
+ const matching = accept === void 0 ? dropped : typeof accept === "function" ? accept(dropped.map((file) => file.type)) ? dropped : [] : dropped.filter((file) => matchesAccept(accept, file));
90
+ if (matching.length !== dropped.length) return [];
91
+ return !(toValue(options.multiple) ?? true) && matching.length > 1 ? [] : matching;
92
+ };
93
+ const settleDefault = (event, transfer) => {
94
+ if (accepted.value || (options.preventDefaultForUnhandled ?? false)) event.preventDefault();
95
+ if (transfer) transfer.dropEffect = accepted.value ? "copy" : "none";
96
+ };
97
+ const onEnter = (event) => {
98
+ const transfer = dataTransferOf(event);
99
+ depth += 1;
100
+ if (depth === 1) {
101
+ accepted.value = transfer !== void 0 && acceptsTypes(draggedTypes(transfer));
102
+ isOverDropZone.value = true;
103
+ options.onEnter?.(event);
104
+ }
105
+ settleDefault(event, transfer);
106
+ };
107
+ const onOver = (event) => {
108
+ settleDefault(event, dataTransferOf(event));
109
+ options.onOver?.(event);
110
+ };
111
+ const onLeave = (event) => {
112
+ depth = Math.max(0, depth - 1);
113
+ if (depth > 0) return;
114
+ isOverDropZone.value = false;
115
+ accepted.value = false;
116
+ options.onLeave?.(event);
117
+ };
118
+ const onDrop = (event) => {
119
+ const transfer = dataTransferOf(event);
120
+ const dropped = transfer ? acceptedFiles(transfer) : [];
121
+ if (dropped.length > 0 || (options.preventDefaultForUnhandled ?? false)) event.preventDefault();
122
+ depth = 0;
123
+ isOverDropZone.value = false;
124
+ accepted.value = false;
125
+ files.value = dropped.length > 0 ? dropped : null;
126
+ options.onDrop?.(files.value, event);
127
+ };
128
+ tryOnScopeDispose(watch(() => toValue(target) ?? void 0, (element, _previous, onCleanup) => {
129
+ depth = 0;
130
+ isOverDropZone.value = false;
131
+ accepted.value = false;
132
+ if (!element) return;
133
+ element.addEventListener("dragenter", onEnter);
134
+ element.addEventListener("dragover", onOver);
135
+ element.addEventListener("dragleave", onLeave);
136
+ element.addEventListener("drop", onDrop);
137
+ onCleanup(() => {
138
+ element.removeEventListener("dragenter", onEnter);
139
+ element.removeEventListener("dragover", onOver);
140
+ element.removeEventListener("dragleave", onLeave);
141
+ element.removeEventListener("drop", onDrop);
142
+ });
143
+ }, {
144
+ immediate: true,
145
+ flush: "sync"
146
+ }));
147
+ return {
148
+ isOverDropZone: readonly(isOverDropZone),
149
+ accepted: readonly(accepted),
150
+ files
151
+ };
152
+ }
153
+ //#endregion
154
+ export { matchesAccept, useDropZone };
@@ -0,0 +1,184 @@
1
+ import { t as TimeoutScheduler } from "./timeout-scheduler-CI8RVLZs.mjs";
2
+ import { t as RetryDelayOptions } from "./retry-delay-DYsdq4SE.mjs";
3
+ import { MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
4
+
5
+ //#region src/use-event-source.d.ts
6
+ /** Connection status exposed by {@link useEventSource}. */
7
+ type EventSourceStatus = "connecting" | "open" | "closed";
8
+ /** Minimal `EventSource` instance used by {@link useEventSource}. */
9
+ interface EventSourceLike {
10
+ /** `0` connecting, `1` open, `2` closed (native values). */
11
+ readonly readyState: number;
12
+ /** Close the stream; the source never reconnects afterwards. */
13
+ close(): void;
14
+ /** Subscribe to `open`, `error`, or a named server event. */
15
+ addEventListener(type: string, listener: EventListener): void;
16
+ /** Remove a listener registered with `addEventListener`. */
17
+ removeEventListener(type: string, listener: EventListener): void;
18
+ }
19
+ /** Constructor creating {@link EventSourceLike} streams (e.g. `EventSource`). */
20
+ type EventSourceConstructorLike = new (url: string, init?: {
21
+ readonly withCredentials?: boolean;
22
+ }) => EventSourceLike;
23
+ /** Server event map: event name to decoded data type. */
24
+ type EventSourceEventMap = Record<string, unknown>;
25
+ /** Event names of a map whose data is not plain text and therefore needs a parser. */
26
+ type ParsedEventNames<Events extends EventSourceEventMap> = { [Name in keyof Events & string]: [string] extends [Events[Name]] ? never : Name }[keyof Events & string];
27
+ /**
28
+ * Per-event decoders. A decoder is required for every event whose data type
29
+ * cannot hold the raw text, and optional otherwise.
30
+ */
31
+ type EventSourceParsers<Events extends EventSourceEventMap> = { readonly [Name in ParsedEventNames<Events>]: (raw: string) => Events[Name] } & { readonly [Name in Exclude<keyof Events & string, ParsedEventNames<Events>>]?: (raw: string) => Events[Name] };
32
+ /** One decoded server event, discriminated by `event`. */
33
+ type EventSourceMessage<Events extends EventSourceEventMap> = { readonly [Name in keyof Events & string]: {
34
+ /** Server event name. */readonly event: Name; /** Decoded data. */
35
+ readonly data: Events[Name]; /** `id:` field of the event, or `""`. */
36
+ readonly lastEventId: string;
37
+ } }[keyof Events & string];
38
+ /** Discriminated failure reported by {@link useEventSource}. */
39
+ type EventSourceFailure = {
40
+ /** The stream dispatched an `error` event. */readonly kind: "error"; /** The dispatched event. */
41
+ readonly event: Event;
42
+ } | {
43
+ /** The constructor threw. */readonly kind: "connect"; /** Exact thrown value. */
44
+ readonly cause: unknown;
45
+ } | {
46
+ /** A parser threw. */readonly kind: "parse"; /** Event whose data could not be parsed. */
47
+ readonly event: string; /** Exact thrown value. */
48
+ readonly cause: unknown;
49
+ } | {
50
+ /** Automatic reconnection gave up. */readonly kind: "reconnect-exhausted"; /** Reconnection attempts performed. */
51
+ readonly attempts: number;
52
+ };
53
+ /** Options for reconnecting streams the browser gave up on. */
54
+ interface EventSourceReconnectOptions extends RetryDelayOptions {
55
+ /**
56
+ * Maximum consecutive reconnection attempts.
57
+ *
58
+ * @default Infinity
59
+ */
60
+ readonly retries?: number;
61
+ /**
62
+ * Called once reconnection gives up.
63
+ *
64
+ * @default undefined
65
+ */
66
+ readonly onFailed?: () => void;
67
+ }
68
+ /** Options for {@link useEventSource}. */
69
+ interface UseEventSourceOptions<Events extends EventSourceEventMap> {
70
+ /**
71
+ * Named server events to subscribe to.
72
+ *
73
+ * @default ["message"]
74
+ */
75
+ readonly events?: readonly (keyof Events & string)[];
76
+ /**
77
+ * Per-event decoders (required for events whose data is not text).
78
+ *
79
+ * @default raw text for every event
80
+ */
81
+ readonly parse?: EventSourceParsers<Events>;
82
+ /**
83
+ * Send cookies with cross-origin requests.
84
+ *
85
+ * @default false
86
+ */
87
+ readonly withCredentials?: boolean;
88
+ /**
89
+ * `EventSource` constructor (a plain value or ref, never a getter).
90
+ * Supplying one also enables automatic connection outside a browser.
91
+ *
92
+ * @default window.EventSource when a browser window exists
93
+ */
94
+ readonly host?: MaybeRef<EventSourceConstructorLike | null | undefined>;
95
+ /**
96
+ * Connect as soon as a URL is available (browser or explicit host only).
97
+ *
98
+ * @default true
99
+ */
100
+ readonly immediate?: boolean;
101
+ /**
102
+ * Reopen the stream with backoff after the browser closes it for good
103
+ * (native reconnection covers transient drops).
104
+ *
105
+ * @default false
106
+ */
107
+ readonly autoReconnect?: boolean | EventSourceReconnectOptions;
108
+ /**
109
+ * Timer host for reconnection.
110
+ *
111
+ * @default globalThis timer functions
112
+ */
113
+ readonly scheduler?: TimeoutScheduler;
114
+ /**
115
+ * Observe failures.
116
+ *
117
+ * @default undefined
118
+ */
119
+ readonly onError?: (failure: EventSourceFailure) => void;
120
+ }
121
+ /** Reactive state and controls returned by {@link useEventSource}. */
122
+ interface EventSourceControls<Events extends EventSourceEventMap> {
123
+ /** Connection status. */
124
+ readonly status: Readonly<Ref<EventSourceStatus>>;
125
+ /** Latest decoded event, discriminated by name. */
126
+ readonly message: Readonly<ShallowRef<EventSourceMessage<Events> | undefined>>;
127
+ /** Data of the latest event. */
128
+ readonly data: Readonly<ShallowRef<Events[keyof Events & string] | undefined>>;
129
+ /** Name of the latest event. */
130
+ readonly event: Readonly<Ref<(keyof Events & string) | undefined>>;
131
+ /** `id:` field of the latest event. */
132
+ readonly lastEventId: Readonly<Ref<string | undefined>>;
133
+ /** Latest failure, cleared when the stream opens. */
134
+ readonly error: Readonly<ShallowRef<EventSourceFailure | undefined>>;
135
+ /** Current underlying source, if any. */
136
+ readonly source: Readonly<ShallowRef<EventSourceLike | undefined>>;
137
+ /**
138
+ * Observe one subscribed event with typed data.
139
+ *
140
+ * @returns A function removing the handler.
141
+ */
142
+ readonly on: <Name extends keyof Events & string>(event: Name, handler: (data: NoInfer<Events[Name]>, lastEventId: string) => void) => () => void;
143
+ /** Open (or reopen) the stream. */
144
+ readonly open: () => void;
145
+ /** Close the stream and disable reconnection. */
146
+ readonly close: () => void;
147
+ }
148
+ /**
149
+ * Required options when the event map contains non-text data: `parse` must
150
+ * then provide those decoders.
151
+ */
152
+ type EventSourceParseRequirement<Events extends EventSourceEventMap> = [ParsedEventNames<Events>] extends [never] ? unknown : {
153
+ readonly parse: EventSourceParsers<Events>;
154
+ };
155
+ /**
156
+ * Reactive Server-Sent Events stream with typed, per-event decoding.
157
+ *
158
+ * Every subscribed event is decoded by its parser (raw text by default) and
159
+ * exposed as a discriminated `message`, plus `data`/`event`/`lastEventId`
160
+ * shortcuts and typed `on()` handlers. Transient drops use the browser's
161
+ * native reconnection; `autoReconnect` additionally reopens streams the
162
+ * browser closed for good. The stream and timers are released when the
163
+ * owning reactive scope stops (the caller owns `close()` outside a scope).
164
+ * Server rendering never connects and reports `"closed"`.
165
+ *
166
+ * @example
167
+ * ```ts
168
+ * const feed = useEventSource<{ price: number; notice: string }>("/stream", {
169
+ * events: ["price", "notice"],
170
+ * parse: { price: (raw) => Number(raw) },
171
+ * });
172
+ * feed.on("price", (price) => chart.push(price));
173
+ * ```
174
+ *
175
+ * @param url Reactive URL; changing it reconnects.
176
+ * @param options Events, decoders, host, and reconnection options.
177
+ * @default options {}
178
+ * @returns Reactive state and controls.
179
+ */
180
+ declare function useEventSource<Events extends EventSourceEventMap = {
181
+ message: string;
182
+ }>(url: MaybeRefOrGetter<string | URL | null | undefined>, ...[options]: unknown extends EventSourceParseRequirement<Events> ? [options?: UseEventSourceOptions<Events>] : [options: UseEventSourceOptions<Events> & EventSourceParseRequirement<Events>]): EventSourceControls<Events>;
183
+ //#endregion
184
+ export { EventSourceConstructorLike, EventSourceControls, EventSourceEventMap, EventSourceFailure, EventSourceLike, EventSourceMessage, EventSourceParseRequirement, EventSourceParsers, EventSourceReconnectOptions, EventSourceStatus, UseEventSourceOptions, useEventSource };
@@ -0,0 +1,226 @@
1
+ import { tryOnScopeDispose } from "./scope.mjs";
2
+ import { calculateRetryDelay } from "./retry-delay.mjs";
3
+ import { readonly, shallowRef, toValue, unref, watch } from "vue";
4
+ //#region src/use-event-source.ts
5
+ const CLOSED = 2;
6
+ function browserEventSource() {
7
+ return typeof window !== "undefined" && typeof window.EventSource === "function" ? window.EventSource : void 0;
8
+ }
9
+ function defaultScheduler() {
10
+ return {
11
+ setTimeout: (callback, delayMs) => {
12
+ const handle = globalThis.setTimeout(callback, delayMs);
13
+ return () => globalThis.clearTimeout(handle);
14
+ },
15
+ clearTimeout: (cancel) => {
16
+ if (typeof cancel === "function") cancel();
17
+ }
18
+ };
19
+ }
20
+ function eventData(value) {
21
+ return value;
22
+ }
23
+ /**
24
+ * Reactive Server-Sent Events stream with typed, per-event decoding.
25
+ *
26
+ * Every subscribed event is decoded by its parser (raw text by default) and
27
+ * exposed as a discriminated `message`, plus `data`/`event`/`lastEventId`
28
+ * shortcuts and typed `on()` handlers. Transient drops use the browser's
29
+ * native reconnection; `autoReconnect` additionally reopens streams the
30
+ * browser closed for good. The stream and timers are released when the
31
+ * owning reactive scope stops (the caller owns `close()` outside a scope).
32
+ * Server rendering never connects and reports `"closed"`.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const feed = useEventSource<{ price: number; notice: string }>("/stream", {
37
+ * events: ["price", "notice"],
38
+ * parse: { price: (raw) => Number(raw) },
39
+ * });
40
+ * feed.on("price", (price) => chart.push(price));
41
+ * ```
42
+ *
43
+ * @param url Reactive URL; changing it reconnects.
44
+ * @param options Events, decoders, host, and reconnection options.
45
+ * @default options {}
46
+ * @returns Reactive state and controls.
47
+ */
48
+ function useEventSource(url, ...[options]) {
49
+ const settings = options ?? {};
50
+ const status = shallowRef("closed");
51
+ const message = shallowRef();
52
+ const data = shallowRef();
53
+ const event = shallowRef();
54
+ const lastEventId = shallowRef(void 0);
55
+ const error = shallowRef(void 0);
56
+ const source = shallowRef(void 0);
57
+ const scheduler = settings.scheduler ?? defaultScheduler();
58
+ const reconnect = settings.autoReconnect === true ? {} : settings.autoReconnect || void 0;
59
+ const handlers = /* @__PURE__ */ new Map();
60
+ let attempts = 0;
61
+ let manuallyClosed = false;
62
+ let reconnectTimer;
63
+ let detach;
64
+ const resolveHost = () => settings.host === void 0 ? browserEventSource() : unref(settings.host) ?? void 0;
65
+ const fail = (failure) => {
66
+ error.value = failure;
67
+ settings.onError?.(failure);
68
+ };
69
+ const dispose = () => {
70
+ detach?.();
71
+ detach = void 0;
72
+ source.value?.close();
73
+ source.value = void 0;
74
+ };
75
+ const scheduleReconnect = () => {
76
+ if (!reconnect || manuallyClosed) return;
77
+ if (attempts >= (reconnect.retries ?? Number.POSITIVE_INFINITY)) {
78
+ fail({
79
+ kind: "reconnect-exhausted",
80
+ attempts
81
+ });
82
+ reconnect.onFailed?.();
83
+ return;
84
+ }
85
+ attempts += 1;
86
+ reconnectTimer = scheduler.setTimeout(() => {
87
+ reconnectTimer = void 0;
88
+ connect();
89
+ }, calculateRetryDelay(attempts, reconnect));
90
+ };
91
+ const deliver = (name, raw, id) => {
92
+ const parser = settings.parse?.[name];
93
+ let decoded;
94
+ try {
95
+ decoded = eventData(parser ? parser(raw) : raw);
96
+ } catch (cause) {
97
+ fail({
98
+ kind: "parse",
99
+ event: name,
100
+ cause
101
+ });
102
+ return;
103
+ }
104
+ message.value = {
105
+ event: name,
106
+ data: decoded,
107
+ lastEventId: id
108
+ };
109
+ data.value = decoded;
110
+ event.value = name;
111
+ lastEventId.value = id;
112
+ for (const handler of handlers.get(name) ?? []) handler(decoded, id);
113
+ };
114
+ const connect = () => {
115
+ if (reconnectTimer !== void 0) {
116
+ scheduler.clearTimeout(reconnectTimer);
117
+ reconnectTimer = void 0;
118
+ }
119
+ dispose();
120
+ const target = toValue(url);
121
+ const Host = resolveHost();
122
+ if (target === null || target === void 0 || Host === void 0) {
123
+ status.value = "closed";
124
+ return;
125
+ }
126
+ let instance;
127
+ try {
128
+ instance = new Host(String(target), { withCredentials: settings.withCredentials ?? false });
129
+ } catch (cause) {
130
+ status.value = "closed";
131
+ fail({
132
+ kind: "connect",
133
+ cause
134
+ });
135
+ scheduleReconnect();
136
+ return;
137
+ }
138
+ source.value = instance;
139
+ status.value = "connecting";
140
+ const onOpen = () => {
141
+ status.value = "open";
142
+ error.value = void 0;
143
+ attempts = 0;
144
+ };
145
+ const onError = (nativeEvent) => {
146
+ fail({
147
+ kind: "error",
148
+ event: nativeEvent
149
+ });
150
+ if (instance.readyState === CLOSED) {
151
+ dispose();
152
+ status.value = "closed";
153
+ scheduleReconnect();
154
+ } else status.value = "connecting";
155
+ };
156
+ const listeners = /* @__PURE__ */ new Map();
157
+ const names = settings.events ?? ["message"];
158
+ for (const name of names) {
159
+ const listener = (nativeEvent) => {
160
+ const raw = "data" in nativeEvent ? nativeEvent.data : "";
161
+ const id = "lastEventId" in nativeEvent ? nativeEvent.lastEventId : "";
162
+ deliver(name, typeof raw === "string" ? raw : String(raw), typeof id === "string" ? id : "");
163
+ };
164
+ listeners.set(name, listener);
165
+ instance.addEventListener(name, listener);
166
+ }
167
+ instance.addEventListener("open", onOpen);
168
+ instance.addEventListener("error", onError);
169
+ detach = () => {
170
+ instance.removeEventListener("open", onOpen);
171
+ instance.removeEventListener("error", onError);
172
+ for (const [name, listener] of listeners) instance.removeEventListener(name, listener);
173
+ };
174
+ };
175
+ const open = () => {
176
+ manuallyClosed = false;
177
+ attempts = 0;
178
+ connect();
179
+ };
180
+ const close = () => {
181
+ manuallyClosed = true;
182
+ if (reconnectTimer !== void 0) {
183
+ scheduler.clearTimeout(reconnectTimer);
184
+ reconnectTimer = void 0;
185
+ }
186
+ dispose();
187
+ status.value = "closed";
188
+ };
189
+ const on = (name, handler) => {
190
+ const wrapped = (value, id) => {
191
+ handler(eventData(value), id);
192
+ };
193
+ const set = handlers.get(name) ?? /* @__PURE__ */ new Set();
194
+ set.add(wrapped);
195
+ handlers.set(name, set);
196
+ return () => {
197
+ set.delete(wrapped);
198
+ };
199
+ };
200
+ if (settings.host !== void 0 || typeof window !== "undefined") {
201
+ let initial = true;
202
+ tryOnScopeDispose(watch([() => toValue(url), resolveHost], ([target]) => {
203
+ const first = initial;
204
+ initial = false;
205
+ if (first && !(settings.immediate ?? true)) return;
206
+ if (!first && source.value === void 0 && reconnectTimer === void 0) return;
207
+ if (target === null || target === void 0) close();
208
+ else open();
209
+ }, { immediate: true }));
210
+ }
211
+ tryOnScopeDispose(close);
212
+ return {
213
+ status: readonly(status),
214
+ message,
215
+ data,
216
+ event,
217
+ lastEventId,
218
+ error,
219
+ source,
220
+ on,
221
+ open,
222
+ close
223
+ };
224
+ }
225
+ //#endregion
226
+ export { useEventSource };
@@ -0,0 +1,79 @@
1
+ import { ComputedRef, MaybeRef, Ref } from "vue";
2
+
3
+ //#region src/use-eye-dropper.d.ts
4
+ /** Color picked by the EyeDropper API. */
5
+ interface EyeDropperColor {
6
+ /** Picked color as a `#rrggbb` string. */
7
+ readonly sRGBHex: string;
8
+ }
9
+ /** Minimal `EyeDropper` instance. */
10
+ interface EyeDropperLike {
11
+ /** Open the picker. Rejects with AbortError when dismissed or aborted. */
12
+ open(options?: {
13
+ signal?: AbortSignal;
14
+ }): Promise<EyeDropperColor>;
15
+ }
16
+ /** Minimal `EyeDropper` constructor. */
17
+ type EyeDropperHost = new () => EyeDropperLike;
18
+ /** Options for {@link useEyeDropper}. */
19
+ interface UseEyeDropperOptions {
20
+ /**
21
+ * EyeDropper constructor for alternate runtimes and tests. A ref (not a
22
+ * getter) because the host itself is a constructor function.
23
+ *
24
+ * @default window.EyeDropper when it exists
25
+ */
26
+ readonly host?: MaybeRef<EyeDropperHost | null | undefined>;
27
+ /**
28
+ * Initial `sRGBHex` value.
29
+ *
30
+ * @default ""
31
+ */
32
+ readonly initialValue?: string;
33
+ }
34
+ /** Discriminated outcome of {@link EyeDropperControls.open}. */
35
+ type EyeDropperResult = {
36
+ /** A color was picked. */readonly status: "picked"; /** Picked color. */
37
+ readonly sRGBHex: string;
38
+ } | {
39
+ /** Dismissed/aborted, missing API, or another failure. */readonly status: "cancelled" | "unsupported" | "failed"; /** Exact error thrown by the host, when one was thrown. */
40
+ readonly error: unknown;
41
+ };
42
+ /** Reactive state and actions returned by {@link useEyeDropper}. */
43
+ interface EyeDropperControls {
44
+ /** Whether the EyeDropper API is available. */
45
+ readonly supported: ComputedRef<boolean>;
46
+ /** Most recently picked color. */
47
+ readonly sRGBHex: Readonly<Ref<string>>;
48
+ /** Whether the picker is open. */
49
+ readonly picking: Readonly<Ref<boolean>>;
50
+ /**
51
+ * Open the picker. Browsers require a user gesture.
52
+ *
53
+ * @param signal Aborts the open picker.
54
+ * @returns The discriminated outcome; never rejects.
55
+ */
56
+ readonly open: (signal?: AbortSignal) => Promise<EyeDropperResult>;
57
+ }
58
+ /**
59
+ * Pick a color from anywhere on screen with the EyeDropper API.
60
+ *
61
+ * `open` resolves to a discriminated {@link EyeDropperResult}; dismissing
62
+ * the picker (Escape) or aborting via `signal` yields `"cancelled"`.
63
+ * The composable holds no resources beyond an open picker, which the
64
+ * caller controls through `signal`.
65
+ *
66
+ * Server rendering: `supported` is false and `sRGBHex` is `initialValue`.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * const { open, sRGBHex, supported } = useEyeDropper();
71
+ * ```
72
+ *
73
+ * @param options Capability and initial color.
74
+ * @default options {}
75
+ * @returns Picker state and the open action.
76
+ */
77
+ declare function useEyeDropper(options?: UseEyeDropperOptions): EyeDropperControls;
78
+ //#endregion
79
+ export { EyeDropperColor, EyeDropperControls, EyeDropperHost, EyeDropperLike, EyeDropperResult, UseEyeDropperOptions, useEyeDropper };