@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,166 @@
1
+ import { computed, hasInjectionContext, readonly, ref, shallowRef, unref, watchPostEffect } from "vue";
2
+ //#region src/use-compression-stream.ts
3
+ const formats = [
4
+ "gzip",
5
+ "deflate",
6
+ "deflate-raw"
7
+ ];
8
+ function isConstructor(candidate) {
9
+ return typeof candidate === "function";
10
+ }
11
+ function browserConstructor(name) {
12
+ if (typeof window === "undefined") return void 0;
13
+ const candidate = Reflect.get(window, name);
14
+ return isConstructor(candidate) ? candidate : void 0;
15
+ }
16
+ function toReadable(data) {
17
+ if (data instanceof ReadableStream) return data;
18
+ if (data instanceof Blob) return data.stream();
19
+ const bytes = typeof data === "string" ? new TextEncoder().encode(data) : ArrayBuffer.isView(data) ? new Uint8Array(data.buffer, data.byteOffset, data.byteLength).slice() : new Uint8Array(data);
20
+ return new ReadableStream({ start(controller) {
21
+ controller.enqueue(bytes);
22
+ controller.close();
23
+ } });
24
+ }
25
+ async function transform(data, format, Stream, name) {
26
+ if (!formats.includes(format)) throw new TypeError(`[VIZE_COMPOSE_COMPRESSION_INVALID_FORMAT] Unsupported format "${String(format)}".`);
27
+ if (!Stream) throw new TypeError(`[VIZE_COMPOSE_COMPRESSION_UNSUPPORTED] ${name} is not available.`);
28
+ const reader = toReadable(data).pipeThrough(new Stream(format)).getReader();
29
+ const chunks = [];
30
+ let length = 0;
31
+ for (;;) {
32
+ const { done, value } = await reader.read();
33
+ if (done) break;
34
+ chunks.push(value);
35
+ length += value.byteLength;
36
+ }
37
+ const output = new Uint8Array(length);
38
+ let offset = 0;
39
+ for (const chunk of chunks) {
40
+ output.set(chunk, offset);
41
+ offset += chunk.byteLength;
42
+ }
43
+ return output;
44
+ }
45
+ /**
46
+ * Compress data with the Compression Streams API.
47
+ *
48
+ * Strings are UTF-8 encoded first. Rejects with a tagged `TypeError` for an
49
+ * unknown format or when no `CompressionStream` is available (always on the
50
+ * server unless one is injected).
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * const gzipped = await compress(JSON.stringify(state), "gzip");
55
+ * ```
56
+ *
57
+ * @param data Input data.
58
+ * @param format Compression format.
59
+ * @param options Constructor override.
60
+ * @default format "gzip"
61
+ * @default options {}
62
+ * @returns Compressed bytes.
63
+ */
64
+ function compress(data, format = "gzip", options = {}) {
65
+ return transform(data, format, options.CompressionStream === void 0 ? browserConstructor("CompressionStream") : options.CompressionStream, "CompressionStream");
66
+ }
67
+ /**
68
+ * Decompress data with the Compression Streams API.
69
+ *
70
+ * Rejects with a tagged `TypeError` for an unknown format or when no
71
+ * `DecompressionStream` is available, and with the stream's error for
72
+ * corrupt input.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * const bytes = await decompress(await response.blob(), "gzip");
77
+ * ```
78
+ *
79
+ * @param data Compressed data.
80
+ * @param format Compression format.
81
+ * @param options Constructor override.
82
+ * @default format "gzip"
83
+ * @default options {}
84
+ * @returns Decompressed bytes.
85
+ */
86
+ function decompress(data, format = "gzip", options = {}) {
87
+ return transform(data, format, options.DecompressionStream === void 0 ? browserConstructor("DecompressionStream") : options.DecompressionStream, "DecompressionStream");
88
+ }
89
+ /**
90
+ * Decompress data and decode the result as UTF-8 text.
91
+ *
92
+ * Rejects exactly like {@link decompress}.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * const json = JSON.parse(await decompressText(bytes, "deflate"));
97
+ * ```
98
+ *
99
+ * @param data Compressed data.
100
+ * @param format Compression format.
101
+ * @param options Constructor override.
102
+ * @default format "gzip"
103
+ * @default options {}
104
+ * @returns Decompressed text.
105
+ */
106
+ async function decompressText(data, format = "gzip", options = {}) {
107
+ return new TextDecoder().decode(await decompress(data, format, options));
108
+ }
109
+ /**
110
+ * Reactive wrapper around {@link compress}, {@link decompress} and
111
+ * {@link decompressText}.
112
+ *
113
+ * Tracks whether an action is in flight and records the last failure in
114
+ * `error`; actions still reject so callers can handle failures inline.
115
+ * Nothing needs cleanup.
116
+ *
117
+ * Server rendering: `supported` is false and actions reject with the tagged
118
+ * unsupported error unless constructors are injected.
119
+ * Inside a component `supported` turns true only after mounting, so
120
+ * hydration renders this server state first.
121
+ *
122
+ * @example
123
+ * ```ts
124
+ * const { compress, decompressText, pending } = useCompressionStream({ format: "deflate" });
125
+ * const packed = await compress(draft.value);
126
+ * ```
127
+ *
128
+ * @param options Constructor overrides and default format.
129
+ * @default options {}
130
+ * @returns Compression state and bound actions.
131
+ */
132
+ function useCompressionStream(options = {}) {
133
+ const defaultFormat = options.format ?? "gzip";
134
+ const inFlight = ref(0);
135
+ const error = shallowRef(void 0);
136
+ const resolve = (source, name) => source === void 0 ? browserConstructor(name) : unref(source) ?? void 0;
137
+ const hydrated = shallowRef(!hasInjectionContext());
138
+ if (!hydrated.value) watchPostEffect(() => {
139
+ hydrated.value = true;
140
+ });
141
+ const resolveCompression = () => resolve(options.CompressionStream, "CompressionStream");
142
+ const resolveDecompression = () => resolve(options.DecompressionStream, "DecompressionStream");
143
+ const track = async (action) => {
144
+ inFlight.value += 1;
145
+ try {
146
+ const value = await action();
147
+ error.value = void 0;
148
+ return value;
149
+ } catch (cause) {
150
+ error.value = cause;
151
+ throw cause;
152
+ } finally {
153
+ inFlight.value -= 1;
154
+ }
155
+ };
156
+ return {
157
+ supported: computed(() => hydrated.value && resolveCompression() !== void 0 && resolveDecompression() !== void 0),
158
+ pending: computed(() => inFlight.value > 0),
159
+ error: readonly(error),
160
+ compress: (data, format = defaultFormat) => track(() => compress(data, format, { CompressionStream: resolveCompression() ?? null })),
161
+ decompress: (data, format = defaultFormat) => track(() => decompress(data, format, { DecompressionStream: resolveDecompression() ?? null })),
162
+ decompressText: (data, format = defaultFormat) => track(() => decompressText(data, format, { DecompressionStream: resolveDecompression() ?? null }))
163
+ };
164
+ }
165
+ //#endregion
166
+ export { compress, decompress, decompressText, useCompressionStream };
@@ -0,0 +1,70 @@
1
+ import { EventHookListener, EventHookSubscription } from "./create-event-hook.mjs";
2
+ import { ShallowRef } from "vue";
3
+
4
+ //#region src/use-confirm-dialog.d.ts
5
+ /** States of the {@link useConfirmDialog} machine. */
6
+ type ConfirmDialogState = "idle" | "revealed";
7
+ /** Outcome a {@link ConfirmDialog.reveal} promise resolves with. */
8
+ type ConfirmDialogResult<ConfirmData, CancelData> = {
9
+ readonly isCanceled: false;
10
+ readonly data: ConfirmData;
11
+ } | {
12
+ readonly isCanceled: true;
13
+ readonly data: CancelData;
14
+ };
15
+ /** Arguments of a payload: none for `void`, one otherwise. */
16
+ type ConfirmDialogPayload<Data> = [Data] extends [void] ? [] : [data: Data];
17
+ /** Dialog state machine returned by {@link useConfirmDialog}. */
18
+ interface ConfirmDialog<RevealData, ConfirmData, CancelData> {
19
+ /** `"revealed"` between `reveal()` and `confirm()`/`cancel()`. */
20
+ readonly state: Readonly<ShallowRef<ConfirmDialogState>>;
21
+ /** Shorthand for `state === "revealed"`. */
22
+ readonly isRevealed: Readonly<ShallowRef<boolean>>;
23
+ /**
24
+ * Open the dialog. While already revealed, returns the pending promise
25
+ * without re-firing `onReveal`.
26
+ *
27
+ * @returns Resolves when the dialog is confirmed or cancelled.
28
+ */
29
+ readonly reveal: (...payload: ConfirmDialogPayload<RevealData>) => Promise<ConfirmDialogResult<ConfirmData, CancelData>>;
30
+ /**
31
+ * Confirm the revealed dialog.
32
+ *
33
+ * @returns Whether the dialog was revealed.
34
+ */
35
+ readonly confirm: (...payload: ConfirmDialogPayload<ConfirmData>) => boolean;
36
+ /**
37
+ * Cancel the revealed dialog.
38
+ *
39
+ * @returns Whether the dialog was revealed.
40
+ */
41
+ readonly cancel: (...payload: ConfirmDialogPayload<CancelData>) => boolean;
42
+ /** Listen for reveals. */
43
+ readonly onReveal: (listener: EventHookListener<ConfirmDialogPayload<RevealData>>) => EventHookSubscription;
44
+ /** Listen for confirmations. */
45
+ readonly onConfirm: (listener: EventHookListener<ConfirmDialogPayload<ConfirmData>>) => EventHookSubscription;
46
+ /** Listen for cancellations. */
47
+ readonly onCancel: (listener: EventHookListener<ConfirmDialogPayload<CancelData>>) => EventHookSubscription;
48
+ }
49
+ /**
50
+ * Promise-based confirm dialog state machine (`idle` → `revealed` →
51
+ * `idle`), independent of any dialog markup.
52
+ *
53
+ * `reveal()` resolves with a discriminated result, so `if (!result.isCanceled)`
54
+ * narrows `data` to the confirm payload. Payload types are declared as type
55
+ * parameters; `void` payloads take no argument. Pair it with a native
56
+ * `<dialog>` or any headless dialog. Synchronous state: SSR-safe; listeners
57
+ * registered inside a scope are removed with it.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * const dialog = useConfirmDialog<{ name: string }, "keep" | "delete">();
62
+ * const result = await dialog.reveal({ name: file.name });
63
+ * if (!result.isCanceled && result.data === "delete") remove(file);
64
+ * ```
65
+ *
66
+ * @returns The dialog machine.
67
+ */
68
+ declare function useConfirmDialog<RevealData = void, ConfirmData = void, CancelData = void>(): ConfirmDialog<RevealData, ConfirmData, CancelData>;
69
+ //#endregion
70
+ export { ConfirmDialog, ConfirmDialogPayload, ConfirmDialogResult, ConfirmDialogState, useConfirmDialog };
@@ -0,0 +1,57 @@
1
+ import { createEventHook } from "./create-event-hook.mjs";
2
+ import { shallowRef } from "vue";
3
+ //#region src/use-confirm-dialog.ts
4
+ function useConfirmDialog() {
5
+ const state = shallowRef("idle");
6
+ const isRevealed = shallowRef(false);
7
+ const revealHook = createEventHook();
8
+ const confirmHook = createEventHook();
9
+ const cancelHook = createEventHook();
10
+ let pending;
11
+ let settle;
12
+ const close = (result) => {
13
+ const resolve = settle;
14
+ if (resolve === void 0) return false;
15
+ settle = void 0;
16
+ pending = void 0;
17
+ state.value = "idle";
18
+ isRevealed.value = false;
19
+ resolve(result);
20
+ return true;
21
+ };
22
+ return {
23
+ state,
24
+ isRevealed,
25
+ reveal: (...payload) => {
26
+ if (pending !== void 0) return pending;
27
+ pending = new Promise((resolve) => {
28
+ settle = resolve;
29
+ });
30
+ state.value = "revealed";
31
+ isRevealed.value = true;
32
+ revealHook.trigger(...payload);
33
+ return pending;
34
+ },
35
+ confirm: (...payload) => {
36
+ if (settle === void 0) return false;
37
+ confirmHook.trigger(...payload);
38
+ return close({
39
+ isCanceled: false,
40
+ data: payload[0]
41
+ });
42
+ },
43
+ cancel: (...payload) => {
44
+ if (settle === void 0) return false;
45
+ cancelHook.trigger(...payload);
46
+ return close({
47
+ isCanceled: true,
48
+ data: payload[0]
49
+ });
50
+ },
51
+ onReveal: revealHook.on,
52
+ onConfirm: confirmHook.on,
53
+ onCancel: cancelHook.on
54
+ };
55
+ }
56
+ //#endregion
57
+ export { useConfirmDialog };
@@ -0,0 +1,117 @@
1
+ import { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
2
+
3
+ //#region src/use-contact-picker.d.ts
4
+ /** Contact property that can be requested from the picker. */
5
+ type ContactProperty = "address" | "email" | "icon" | "name" | "tel";
6
+ /** Postal address returned for the `address` property. */
7
+ interface ContactAddressLike {
8
+ /** Street address lines. */
9
+ readonly addressLine?: readonly string[];
10
+ /** City. */
11
+ readonly city?: string;
12
+ /** Region or state. */
13
+ readonly region?: string;
14
+ /** Postal code. */
15
+ readonly postalCode?: string;
16
+ /** ISO 3166 country code. */
17
+ readonly country?: string;
18
+ }
19
+ /** Every value the picker can return, keyed by property. */
20
+ interface ContactInfo {
21
+ /** Postal addresses. */
22
+ readonly address: readonly ContactAddressLike[];
23
+ /** Email addresses. */
24
+ readonly email: readonly string[];
25
+ /** Avatar images. */
26
+ readonly icon: readonly Blob[];
27
+ /** Names. */
28
+ readonly name: readonly string[];
29
+ /** Phone numbers. */
30
+ readonly tel: readonly string[];
31
+ }
32
+ /** Contact typed with exactly the requested properties. */
33
+ type SelectedContact<Property extends ContactProperty> = Pick<ContactInfo, Property>;
34
+ /** Minimal `navigator.contacts` (`ContactsManager`). */
35
+ interface ContactsManagerLike {
36
+ /** Properties this platform supports. */
37
+ getProperties(): Promise<readonly string[]>;
38
+ /** Open the picker (needs user activation). */
39
+ select(properties: ContactProperty[], options?: {
40
+ multiple?: boolean;
41
+ }): Promise<readonly Partial<ContactInfo>[]>;
42
+ }
43
+ /** Options for {@link useContactPicker}. */
44
+ interface UseContactPickerOptions {
45
+ /**
46
+ * Contacts manager for alternate runtimes and tests.
47
+ *
48
+ * @default window.navigator.contacts when it exists
49
+ */
50
+ readonly contacts?: MaybeRefOrGetter<ContactsManagerLike | null | undefined>;
51
+ }
52
+ /** Options of {@link ContactPickerControls.select}. */
53
+ interface ContactSelectOptions {
54
+ /**
55
+ * Allow picking several contacts.
56
+ *
57
+ * @default false
58
+ */
59
+ readonly multiple?: boolean;
60
+ }
61
+ /** Discriminated outcome of {@link ContactPickerControls.select}. */
62
+ type ContactPickerResult<Property extends ContactProperty> = {
63
+ /** The picker closed; `contacts` is empty when the user dismissed it. */readonly status: "selected"; /** Picked contacts with exactly the requested keys. */
64
+ readonly contacts: SelectedContact<Property>[];
65
+ } | {
66
+ /** `unsupported`: no API; `failed`: the host rejected. */readonly status: "unsupported" | "failed"; /** Error thrown by the host, when one was thrown. */
67
+ readonly error: unknown;
68
+ };
69
+ /** Reactive state and actions returned by {@link useContactPicker}. */
70
+ interface ContactPickerControls {
71
+ /** Whether the Contact Picker API is available. */
72
+ readonly supported: ComputedRef<boolean>;
73
+ /** Whether the picker is open. */
74
+ readonly pending: Readonly<Ref<boolean>>;
75
+ /** Most recent failure, cleared on success. */
76
+ readonly error: Readonly<ShallowRef<unknown>>;
77
+ /**
78
+ * Properties the platform supports.
79
+ *
80
+ * @returns Known supported properties; empty when unsupported or failing.
81
+ */
82
+ readonly getProperties: () => Promise<ContactProperty[]>;
83
+ /**
84
+ * Open the contact picker.
85
+ *
86
+ * @param properties Properties to request; the result is typed from them.
87
+ * @param options Selection options.
88
+ * @throws `TypeError` tagged `VIZE_COMPOSE_CONTACT_PICKER_NO_PROPERTIES` when `properties` is empty.
89
+ * @returns The discriminated outcome; never rejects.
90
+ */
91
+ readonly select: <const Property extends ContactProperty>(properties: readonly Property[], options?: ContactSelectOptions) => Promise<ContactPickerResult<Property>>;
92
+ }
93
+ /**
94
+ * Let the user share contacts with the Contact Picker API.
95
+ *
96
+ * `select(["name", "email"])` resolves to contacts typed with exactly those
97
+ * keys (missing values become empty arrays). Dismissing the picker resolves
98
+ * with an empty list. The composable holds no resources, so nothing needs
99
+ * cleanup.
100
+ *
101
+ * Server rendering: nothing is requested, `supported` and `pending` are false.
102
+ * Inside a component `supported` turns true only after mounting, so
103
+ * hydration renders this server state first.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * const picker = useContactPicker();
108
+ * const result = await picker.select(["name", "tel"], { multiple: true });
109
+ * ```
110
+ *
111
+ * @param options Capability host.
112
+ * @default options {}
113
+ * @returns Picker state and actions.
114
+ */
115
+ declare function useContactPicker(options?: UseContactPickerOptions): ContactPickerControls;
116
+ //#endregion
117
+ export { ContactAddressLike, ContactInfo, ContactPickerControls, ContactPickerResult, ContactProperty, ContactSelectOptions, ContactsManagerLike, SelectedContact, UseContactPickerOptions, useContactPicker };
@@ -0,0 +1,103 @@
1
+ import { computed, hasInjectionContext, readonly, ref, shallowRef, toValue, watchPostEffect } from "vue";
2
+ //#region src/use-contact-picker.ts
3
+ const knownProperties = [
4
+ "address",
5
+ "email",
6
+ "icon",
7
+ "name",
8
+ "tel"
9
+ ];
10
+ function isContactProperty(value) {
11
+ return knownProperties.includes(value);
12
+ }
13
+ function isContactsManager(candidate) {
14
+ return typeof candidate === "object" && candidate !== null && "select" in candidate && "getProperties" in candidate && typeof candidate.select === "function" && typeof candidate.getProperties === "function";
15
+ }
16
+ function browserContacts() {
17
+ if (typeof window === "undefined") return void 0;
18
+ const candidate = Reflect.get(window.navigator, "contacts");
19
+ return isContactsManager(candidate) ? candidate : void 0;
20
+ }
21
+ function pickContact(contact, properties) {
22
+ const full = {
23
+ address: contact.address ?? [],
24
+ email: contact.email ?? [],
25
+ icon: contact.icon ?? [],
26
+ name: contact.name ?? [],
27
+ tel: contact.tel ?? []
28
+ };
29
+ const picked = {};
30
+ for (const property of properties) picked[property] = full[property];
31
+ return picked;
32
+ }
33
+ /**
34
+ * Let the user share contacts with the Contact Picker API.
35
+ *
36
+ * `select(["name", "email"])` resolves to contacts typed with exactly those
37
+ * keys (missing values become empty arrays). Dismissing the picker resolves
38
+ * with an empty list. The composable holds no resources, so nothing needs
39
+ * cleanup.
40
+ *
41
+ * Server rendering: nothing is requested, `supported` and `pending` are false.
42
+ * Inside a component `supported` turns true only after mounting, so
43
+ * hydration renders this server state first.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * const picker = useContactPicker();
48
+ * const result = await picker.select(["name", "tel"], { multiple: true });
49
+ * ```
50
+ *
51
+ * @param options Capability host.
52
+ * @default options {}
53
+ * @returns Picker state and actions.
54
+ */
55
+ function useContactPicker(options = {}) {
56
+ const pending = ref(false);
57
+ const error = shallowRef(void 0);
58
+ const hydrated = shallowRef(!hasInjectionContext());
59
+ if (!hydrated.value) watchPostEffect(() => {
60
+ hydrated.value = true;
61
+ });
62
+ const resolveHost = () => options.contacts === void 0 ? browserContacts() : toValue(options.contacts) ?? void 0;
63
+ const getProperties = async () => {
64
+ try {
65
+ return [...await resolveHost()?.getProperties() ?? []].filter(isContactProperty);
66
+ } catch {
67
+ return [];
68
+ }
69
+ };
70
+ const select = (properties, selectOptions = {}) => {
71
+ if (properties.length === 0) throw new TypeError("[VIZE_COMPOSE_CONTACT_PICKER_NO_PROPERTIES] select() needs at least one property");
72
+ const host = resolveHost();
73
+ if (!host) return Promise.resolve({
74
+ status: "unsupported",
75
+ error: void 0
76
+ });
77
+ pending.value = true;
78
+ return host.select([...properties], { multiple: selectOptions.multiple ?? false }).then((contacts) => {
79
+ error.value = void 0;
80
+ return {
81
+ status: "selected",
82
+ contacts: contacts.map((contact) => pickContact(contact, properties))
83
+ };
84
+ }, (cause) => {
85
+ error.value = cause;
86
+ return {
87
+ status: "failed",
88
+ error: cause
89
+ };
90
+ }).finally(() => {
91
+ pending.value = false;
92
+ });
93
+ };
94
+ return {
95
+ supported: computed(() => hydrated.value && resolveHost() !== void 0),
96
+ pending: readonly(pending),
97
+ error: readonly(error),
98
+ getProperties,
99
+ select
100
+ };
101
+ }
102
+ //#endregion
103
+ export { useContactPicker };