@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,102 @@
1
+ import { computed, hasInjectionContext, readonly, ref, toValue, watchEffect } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter, Ref } from "vue";
3
+
4
+ /** Capability required to evaluate media queries. */
5
+ export interface MediaQueryHost {
6
+ /** Create an observable result for a media query. */
7
+ readonly matchMedia: (query: string) => MediaQueryList;
8
+ }
9
+
10
+ /** Options for {@link useMediaQuery}. */
11
+ export interface UseMediaQueryOptions {
12
+ /**
13
+ * Value exposed when no media-query capability is available.
14
+ *
15
+ * @default false
16
+ */
17
+ readonly ssrValue?: boolean;
18
+
19
+ /**
20
+ * Reactive media-query capability for alternate runtimes and tests.
21
+ *
22
+ * @default globalThis.window when available
23
+ */
24
+ readonly host?: MaybeRefOrGetter<MediaQueryHost | null | undefined>;
25
+ }
26
+
27
+ /**
28
+ * Evaluate a reactive media query without requiring browser globals.
29
+ *
30
+ * During server rendering (or whenever no capability host resolves) the ref
31
+ * holds the configured server value and no subscription is created. Inside a
32
+ * component the first match is read after mounting, so hydration renders the
33
+ * server value first and never mismatches. The
34
+ * change subscription follows the reactive query and host: each
35
+ * re-evaluation removes the previous listener, and the final listener is
36
+ * removed when the owning reactive scope stops. Call inside an active scope
37
+ * so the subscription is released. A host whose matcher throws propagates
38
+ * the error to the active effect run; the browser default never throws.
39
+ *
40
+ * @param query Reactive media-query source.
41
+ * @param options Runtime capability and server-rendered fallback.
42
+ * @default options {}
43
+ * @returns Readonly ref that is `true` while the query matches.
44
+ */
45
+ export function useMediaQuery(
46
+ query: MaybeRefOrGetter<string>,
47
+ options: UseMediaQueryOptions = {},
48
+ ): Readonly<Ref<boolean>> {
49
+ const matches = ref(options.ssrValue ?? false);
50
+
51
+ // Inside a component the first read waits for the post-render flush, so a
52
+ // hydrating client renders the same `ssrValue` the server did and then
53
+ // switches to the live result. Outside components the read is synchronous.
54
+ const flush = hasInjectionContext() ? "post" : "pre";
55
+ watchEffect(
56
+ (onCleanup) => {
57
+ const host = options.host === undefined ? browserMediaQueryHost() : toValue(options.host);
58
+ if (!host) {
59
+ matches.value = options.ssrValue ?? false;
60
+ return;
61
+ }
62
+
63
+ const media = host.matchMedia(toValue(query));
64
+ const update = (): void => {
65
+ matches.value = media.matches;
66
+ };
67
+ update();
68
+ media.addEventListener("change", update);
69
+ onCleanup(() => media.removeEventListener("change", update));
70
+ },
71
+ { flush },
72
+ );
73
+
74
+ return readonly(matches);
75
+ }
76
+
77
+ /** User motion preference exposed by {@link useReducedMotion}. */
78
+ export type MotionPreference = "reduce" | "no-preference";
79
+
80
+ /**
81
+ * Return the reactive user motion preference.
82
+ *
83
+ * Shares {@link useMediaQuery} semantics: during server rendering the
84
+ * preference is `"no-preference"` unless `ssrValue` is `true`, and the
85
+ * underlying subscription is removed when the owning reactive scope stops.
86
+ *
87
+ * @param options Runtime capability and server-rendered fallback.
88
+ * @default options {}
89
+ * @returns Computed preference for `(prefers-reduced-motion: reduce)`.
90
+ */
91
+ export function useReducedMotion(
92
+ options: UseMediaQueryOptions = {},
93
+ ): ComputedRef<MotionPreference> {
94
+ const reduced = useMediaQuery("(prefers-reduced-motion: reduce)", options);
95
+ return computed(() => (reduced.value ? "reduce" : "no-preference"));
96
+ }
97
+
98
+ function browserMediaQueryHost(): MediaQueryHost | undefined {
99
+ return typeof window !== "undefined" && typeof window.matchMedia === "function"
100
+ ? window
101
+ : undefined;
102
+ }
@@ -0,0 +1,107 @@
1
+ import { computed, readonly, ref, watch } from "vue";
2
+ import type { Ref } from "vue";
3
+
4
+ import { resolveElement } from "./element-target.ts";
5
+ import type { MaybeElementTarget } from "./element-target.ts";
6
+ import { useMouse } from "./mouse.ts";
7
+ import type { MouseControls, UseMouseOptions } from "./mouse.ts";
8
+ import { tryOnScopeDispose } from "./scope.ts";
9
+
10
+ /** Options for {@link useMouseInElement}. */
11
+ export interface UseMouseInElementOptions extends Omit<UseMouseOptions, "type"> {
12
+ /**
13
+ * Keep updating element-relative coordinates while the pointer is outside
14
+ * the element. When `false`, they freeze at the last inside position.
15
+ *
16
+ * @default true
17
+ */
18
+ readonly handleOutside?: boolean;
19
+ }
20
+
21
+ /** Reactive state returned by {@link useMouseInElement}. */
22
+ export interface MouseInElementControls extends MouseControls {
23
+ /** Pointer position relative to the element's left edge. */
24
+ readonly elementX: Readonly<Ref<number>>;
25
+ /** Pointer position relative to the element's top edge. */
26
+ readonly elementY: Readonly<Ref<number>>;
27
+ /** Element left edge in viewport coordinates at the latest update. */
28
+ readonly elementPositionX: Readonly<Ref<number>>;
29
+ /** Element top edge in viewport coordinates at the latest update. */
30
+ readonly elementPositionY: Readonly<Ref<number>>;
31
+ /** Element width at the latest update. */
32
+ readonly elementWidth: Readonly<Ref<number>>;
33
+ /** Element height at the latest update. */
34
+ readonly elementHeight: Readonly<Ref<number>>;
35
+ /** Whether the pointer is outside the element. `true` during server rendering. */
36
+ readonly isOutside: Readonly<Ref<boolean>>;
37
+ /** Stop updating element-relative state. Idempotent. */
38
+ readonly stop: () => void;
39
+ }
40
+
41
+ /**
42
+ * Track the pointer position relative to an element.
43
+ *
44
+ * Built on {@link useMouse} in client coordinates: every move re-reads the
45
+ * element rectangle, so transforms and scrolling are reflected. Server
46
+ * renders report zero geometry and `isOutside: true`.
47
+ *
48
+ * @param target Reactive element target.
49
+ * @param options Outside handling plus {@link useMouse} options.
50
+ * @default options {}
51
+ * @returns Pointer, element-relative, and geometry refs.
52
+ */
53
+ export function useMouseInElement(
54
+ target: MaybeElementTarget,
55
+ options: UseMouseInElementOptions = {},
56
+ ): MouseInElementControls {
57
+ const handleOutside = options.handleOutside ?? true;
58
+ const mouse = useMouse({ ...options, type: "client" });
59
+ const elementX = ref(0);
60
+ const elementY = ref(0);
61
+ const elementPositionX = ref(0);
62
+ const elementPositionY = ref(0);
63
+ const elementWidth = ref(0);
64
+ const elementHeight = ref(0);
65
+ const isOutside = ref(true);
66
+ const element = computed(() => resolveElement(target));
67
+
68
+ const stopWatch = watch(
69
+ [element, mouse.x, mouse.y, mouse.sourceType],
70
+ ([currentElement, x, y, source]) => {
71
+ if (!currentElement || source === null) return;
72
+ const rect = currentElement.getBoundingClientRect();
73
+ elementPositionX.value = rect.left;
74
+ elementPositionY.value = rect.top;
75
+ elementWidth.value = rect.width;
76
+ elementHeight.value = rect.height;
77
+ const relativeX = x - rect.left;
78
+ const relativeY = y - rect.top;
79
+ isOutside.value =
80
+ rect.width === 0 ||
81
+ rect.height === 0 ||
82
+ relativeX < 0 ||
83
+ relativeY < 0 ||
84
+ relativeX > rect.width ||
85
+ relativeY > rect.height;
86
+ if (handleOutside || !isOutside.value) {
87
+ elementX.value = relativeX;
88
+ elementY.value = relativeY;
89
+ }
90
+ },
91
+ { flush: "sync" },
92
+ );
93
+ const stop = (): void => stopWatch.stop();
94
+ tryOnScopeDispose(stop);
95
+
96
+ return {
97
+ ...mouse,
98
+ elementX: readonly(elementX),
99
+ elementY: readonly(elementY),
100
+ elementPositionX: readonly(elementPositionX),
101
+ elementPositionY: readonly(elementPositionY),
102
+ elementWidth: readonly(elementWidth),
103
+ elementHeight: readonly(elementHeight),
104
+ isOutside: readonly(isOutside),
105
+ stop,
106
+ };
107
+ }
@@ -0,0 +1,167 @@
1
+ import { readonly, ref, toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, Ref } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+
6
+ /** Coordinate space reported by {@link useMouse}. */
7
+ export type MouseCoordinateType = "page" | "client" | "screen" | "movement";
8
+
9
+ /** Input device that produced the latest coordinates. */
10
+ export type MouseSourceType = "mouse" | "touch";
11
+
12
+ /** Two-dimensional coordinate in CSS pixels. */
13
+ export interface Point {
14
+ /** Horizontal coordinate. */
15
+ readonly x: number;
16
+ /** Vertical coordinate. */
17
+ readonly y: number;
18
+ }
19
+
20
+ /**
21
+ * Custom coordinate extractor. Return `null` to ignore an event.
22
+ *
23
+ * Receives the mouse event, or the first touch point for touch input.
24
+ */
25
+ export type MouseCoordinateExtractor = (input: MouseEvent | Touch) => Point | null;
26
+
27
+ /** Options for {@link useMouse}. */
28
+ export interface UseMouseOptions {
29
+ /**
30
+ * Coordinate space, or a custom extractor.
31
+ *
32
+ * @default "page"
33
+ */
34
+ readonly type?: MouseCoordinateType | MouseCoordinateExtractor;
35
+
36
+ /**
37
+ * Event target to listen on.
38
+ *
39
+ * @default globalThis.window when available
40
+ */
41
+ readonly target?: MaybeRefOrGetter<EventTarget | null | undefined>;
42
+
43
+ /**
44
+ * Track touch input in addition to mouse input.
45
+ *
46
+ * @default true
47
+ */
48
+ readonly touch?: boolean;
49
+
50
+ /**
51
+ * Restore `initialValue` when a touch ends.
52
+ *
53
+ * @default false
54
+ */
55
+ readonly resetOnTouchEnds?: boolean;
56
+
57
+ /**
58
+ * Coordinates exposed before any input and during server rendering.
59
+ *
60
+ * @default { x: 0, y: 0 }
61
+ */
62
+ readonly initialValue?: Point;
63
+ }
64
+
65
+ /** Reactive pointer position returned by {@link useMouse}. */
66
+ export interface MouseControls {
67
+ /** Latest horizontal coordinate. */
68
+ readonly x: Readonly<Ref<number>>;
69
+ /** Latest vertical coordinate. */
70
+ readonly y: Readonly<Ref<number>>;
71
+ /** Device that produced the latest coordinates; `null` before any input. */
72
+ readonly sourceType: Readonly<Ref<MouseSourceType | null>>;
73
+ }
74
+
75
+ /**
76
+ * Track the mouse (and optionally touch) position.
77
+ *
78
+ * Listens passively for `mousemove`, `dragover`, and touch events on the
79
+ * target; listeners follow the reactive target and are removed with the
80
+ * owning reactive scope. Server renders expose `initialValue` with a `null`
81
+ * source type.
82
+ *
83
+ * @param options Coordinate space, target, touch handling, and initial value.
84
+ * @default options {}
85
+ * @returns Reactive coordinates and input source.
86
+ */
87
+ export function useMouse(options: UseMouseOptions = {}): MouseControls {
88
+ const { touch = true, resetOnTouchEnds = false } = options;
89
+ const initial = options.initialValue ?? { x: 0, y: 0 };
90
+ const extract = extractorFor(options.type ?? "page");
91
+ const x = ref(initial.x);
92
+ const y = ref(initial.y);
93
+ const sourceType = ref<MouseSourceType | null>(null);
94
+
95
+ const apply = (point: Point | null, source: MouseSourceType): void => {
96
+ if (!point) return;
97
+ x.value = point.x;
98
+ y.value = point.y;
99
+ sourceType.value = source;
100
+ };
101
+ const onMouse = (event: Event): void => {
102
+ if (isMouseEvent(event)) apply(extract(event), "mouse");
103
+ };
104
+ const onTouch = (event: Event): void => {
105
+ if (!isTouchEvent(event)) return;
106
+ const first = event.touches[0];
107
+ if (first) apply(extract(first), "touch");
108
+ };
109
+ const onTouchEnd = (): void => {
110
+ x.value = initial.x;
111
+ y.value = initial.y;
112
+ };
113
+
114
+ const stop = watch(
115
+ () => (options.target === undefined ? browserWindow() : toValue(options.target)),
116
+ (target, _previous, onCleanup) => {
117
+ if (!target) return;
118
+ const listenerOptions: AddEventListenerOptions = { passive: true };
119
+ target.addEventListener("mousemove", onMouse, listenerOptions);
120
+ target.addEventListener("dragover", onMouse, listenerOptions);
121
+ if (touch) {
122
+ target.addEventListener("touchstart", onTouch, listenerOptions);
123
+ target.addEventListener("touchmove", onTouch, listenerOptions);
124
+ if (resetOnTouchEnds) target.addEventListener("touchend", onTouchEnd, listenerOptions);
125
+ }
126
+ onCleanup(() => {
127
+ target.removeEventListener("mousemove", onMouse);
128
+ target.removeEventListener("dragover", onMouse);
129
+ target.removeEventListener("touchstart", onTouch);
130
+ target.removeEventListener("touchmove", onTouch);
131
+ target.removeEventListener("touchend", onTouchEnd);
132
+ });
133
+ },
134
+ { immediate: true },
135
+ );
136
+ tryOnScopeDispose(() => stop.stop());
137
+
138
+ return { x: readonly(x), y: readonly(y), sourceType: readonly(sourceType) };
139
+ }
140
+
141
+ function extractorFor(
142
+ type: MouseCoordinateType | MouseCoordinateExtractor,
143
+ ): MouseCoordinateExtractor {
144
+ if (typeof type === "function") return type;
145
+ switch (type) {
146
+ case "page":
147
+ return (input) => ({ x: input.pageX, y: input.pageY });
148
+ case "client":
149
+ return (input) => ({ x: input.clientX, y: input.clientY });
150
+ case "screen":
151
+ return (input) => ({ x: input.screenX, y: input.screenY });
152
+ case "movement":
153
+ return (input) => ("movementX" in input ? { x: input.movementX, y: input.movementY } : null);
154
+ }
155
+ }
156
+
157
+ function isMouseEvent(event: Event): event is MouseEvent {
158
+ return "clientX" in event && "button" in event;
159
+ }
160
+
161
+ function isTouchEvent(event: Event): event is TouchEvent {
162
+ return "touches" in event;
163
+ }
164
+
165
+ function browserWindow(): EventTarget | undefined {
166
+ return typeof window !== "undefined" ? window : undefined;
167
+ }
@@ -0,0 +1,183 @@
1
+ import { hasInjectionContext, onMounted, readonly, ref, shallowRef, toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, Ref, WatchHandle } from "vue";
3
+
4
+ import { resolveElements } from "./element-target.ts";
5
+ import type { MaybeElementTargets } from "./element-target.ts";
6
+ import { tryOnScopeDispose } from "./scope.ts";
7
+
8
+ /** Runtime capability that supplies the `MutationObserver` constructor. */
9
+ export interface MutationObserverHost {
10
+ /** `MutationObserver` constructor, absent in unsupported runtimes. */
11
+ readonly MutationObserver?: new (callback: MutationCallback) => MutationObserver;
12
+ }
13
+
14
+ /** Options for {@link useMutationObserver}. */
15
+ export interface UseMutationObserverOptions {
16
+ /**
17
+ * Observe attribute changes.
18
+ *
19
+ * @default false (implicitly `true` when `attributeFilter` or `attributeOldValue` is set)
20
+ */
21
+ readonly attributes?: boolean;
22
+
23
+ /**
24
+ * Observe child-list changes.
25
+ *
26
+ * @default false
27
+ */
28
+ readonly childList?: boolean;
29
+
30
+ /**
31
+ * Extend observation to the whole subtree.
32
+ *
33
+ * @default false
34
+ */
35
+ readonly subtree?: boolean;
36
+
37
+ /**
38
+ * Observe text-content changes.
39
+ *
40
+ * @default false (implicitly `true` when `characterDataOldValue` is set)
41
+ */
42
+ readonly characterData?: boolean;
43
+
44
+ /**
45
+ * Record the previous attribute value.
46
+ *
47
+ * @default false
48
+ */
49
+ readonly attributeOldValue?: boolean;
50
+
51
+ /**
52
+ * Record the previous text value.
53
+ *
54
+ * @default false
55
+ */
56
+ readonly characterDataOldValue?: boolean;
57
+
58
+ /**
59
+ * Restrict attribute observation to these local names.
60
+ *
61
+ * @default undefined (all attributes)
62
+ */
63
+ readonly attributeFilter?: readonly string[];
64
+
65
+ /**
66
+ * Reactive constructor capability for alternate runtimes and tests.
67
+ *
68
+ * @default globalThis when it provides `MutationObserver`
69
+ */
70
+ readonly host?: MaybeRefOrGetter<MutationObserverHost | null | undefined>;
71
+
72
+ /**
73
+ * Target resolution timing. `"post"` observes template refs after mount.
74
+ *
75
+ * @default "post"
76
+ */
77
+ readonly flush?: "pre" | "post" | "sync";
78
+ }
79
+
80
+ /** Controls returned by {@link useMutationObserver}. */
81
+ export interface MutationObserverControls {
82
+ /** Whether the host provides `MutationObserver`. `false` during server rendering. */
83
+ readonly isSupported: Readonly<Ref<boolean>>;
84
+
85
+ /**
86
+ * Drain the records queued by the active observer without invoking the
87
+ * callback.
88
+ *
89
+ * @returns Pending records, or an empty list without an active observer.
90
+ */
91
+ readonly takeRecords: () => MutationRecord[];
92
+
93
+ /** Disconnect permanently. Idempotent. */
94
+ readonly stop: () => void;
95
+ }
96
+
97
+ /**
98
+ * Observe DOM mutations of reactive elements.
99
+ *
100
+ * The observer is recreated when the resolved targets or host change and is
101
+ * disconnected when the owning reactive scope stops. At least one of
102
+ * `attributes`, `childList`, or `characterData` must be enabled (directly or
103
+ * implicitly), mirroring the platform contract. No work happens during
104
+ * server rendering.
105
+ *
106
+ * @param targets Reactive element target or list of targets.
107
+ * @param callback Native `MutationObserver` callback.
108
+ * @param options Observation filter, capability, and timing.
109
+ * @default options {}
110
+ * @returns Support flag, record draining, and stop control.
111
+ */
112
+ export function useMutationObserver(
113
+ targets: MaybeElementTargets,
114
+ callback: MutationCallback,
115
+ options: UseMutationObserverOptions = {},
116
+ ): MutationObserverControls {
117
+ const isSupported = ref(false);
118
+ // Inside a component the host is read once it has mounted, so a hydrating
119
+ // client first renders the same fallback as the server. `hasInjectionContext`
120
+ // also detects Vapor components (unlike `getCurrentInstance`).
121
+ const mounted = shallowRef(!hasInjectionContext());
122
+ if (!mounted.value) {
123
+ onMounted(() => {
124
+ mounted.value = true;
125
+ });
126
+ }
127
+ const init = observerInit(options);
128
+ let active: MutationObserver | undefined;
129
+ let stopWatch: WatchHandle | undefined = watch(
130
+ () =>
131
+ [
132
+ !mounted.value
133
+ ? undefined
134
+ : options.host === undefined
135
+ ? browserMutationObserverHost()
136
+ : toValue(options.host),
137
+ resolveElements(targets),
138
+ ] as const,
139
+ ([host, elements], _previous, onCleanup) => {
140
+ const Observer = host?.MutationObserver;
141
+ isSupported.value = Observer !== undefined;
142
+ if (!Observer || elements.length === 0) return;
143
+ const observer = new Observer(callback);
144
+ for (const element of elements) observer.observe(element, init);
145
+ active = observer;
146
+ onCleanup(() => {
147
+ observer.disconnect();
148
+ if (active === observer) active = undefined;
149
+ });
150
+ },
151
+ { immediate: true, flush: options.flush ?? "post" },
152
+ );
153
+
154
+ const stop = (): void => {
155
+ stopWatch?.stop();
156
+ stopWatch = undefined;
157
+ };
158
+ tryOnScopeDispose(stop);
159
+
160
+ return {
161
+ isSupported: readonly(isSupported),
162
+ takeRecords: () => active?.takeRecords() ?? [],
163
+ stop,
164
+ };
165
+ }
166
+
167
+ function observerInit(options: UseMutationObserverOptions): MutationObserverInit {
168
+ const init: MutationObserverInit = {};
169
+ if (options.attributes !== undefined) init.attributes = options.attributes;
170
+ if (options.childList !== undefined) init.childList = options.childList;
171
+ if (options.subtree !== undefined) init.subtree = options.subtree;
172
+ if (options.characterData !== undefined) init.characterData = options.characterData;
173
+ if (options.attributeOldValue !== undefined) init.attributeOldValue = options.attributeOldValue;
174
+ if (options.characterDataOldValue !== undefined) {
175
+ init.characterDataOldValue = options.characterDataOldValue;
176
+ }
177
+ if (options.attributeFilter !== undefined) init.attributeFilter = [...options.attributeFilter];
178
+ return init;
179
+ }
180
+
181
+ function browserMutationObserverHost(): MutationObserverHost | undefined {
182
+ return typeof MutationObserver === "function" ? globalThis : undefined;
183
+ }