@vizejs/composable 0.426.3 → 0.428.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,341 @@
1
+ import { readonly, ref, shallowRef, toValue, watch } from "vue";
2
+ import type { MaybeRefOrGetter, Ref, ShallowRef } from "vue";
3
+
4
+ import { tryOnScopeDispose } from "./scope.ts";
5
+
6
+ /** `<script>` subset used by {@link useScriptTag}. */
7
+ export interface ScriptTagElement extends EventTarget {
8
+ /** Read an attribute. */
9
+ getAttribute(name: string): string | null;
10
+
11
+ /** Write an attribute. */
12
+ setAttribute(name: string, value: string): void;
13
+ }
14
+
15
+ /** Document capability used by {@link useScriptTag}. */
16
+ export interface ScriptTagHost {
17
+ /** Find an existing `<script>` whose `src` attribute equals `src`. */
18
+ findScript(src: string): ScriptTagElement | undefined;
19
+
20
+ /** Create a detached `<script>`. */
21
+ createScript(): ScriptTagElement;
22
+
23
+ /** Attach a script to `<head>`, starting its download. */
24
+ append(element: ScriptTagElement): void;
25
+
26
+ /** Detach a script. */
27
+ remove(element: ScriptTagElement): void;
28
+ }
29
+
30
+ /** Loading state of the script. */
31
+ export type ScriptTagStatus = "idle" | "loading" | "loaded" | "error";
32
+
33
+ /** Discriminated outcome of {@link ScriptTagControls.load}. */
34
+ export type ScriptTagResult =
35
+ | {
36
+ /** The script executed. */
37
+ readonly status: "loaded";
38
+ /** Script element. */
39
+ readonly element: ScriptTagElement;
40
+ }
41
+ | {
42
+ /** The script failed to load. */
43
+ readonly status: "error";
44
+ /** Script element. */
45
+ readonly element: ScriptTagElement;
46
+ }
47
+ | {
48
+ /** No document is available (server rendering) or the load was superseded. */
49
+ readonly status: "unsupported" | "cancelled";
50
+ };
51
+
52
+ /** Options for {@link useScriptTag}. */
53
+ export interface UseScriptTagOptions {
54
+ /**
55
+ * Called once the script has loaded.
56
+ *
57
+ * @default undefined
58
+ */
59
+ readonly onLoaded?: (element: ScriptTagElement) => void;
60
+
61
+ /**
62
+ * Load when created and whenever `src` changes.
63
+ *
64
+ * @default true
65
+ */
66
+ readonly immediate?: boolean;
67
+
68
+ /**
69
+ * Set the `async` attribute.
70
+ *
71
+ * @default true
72
+ */
73
+ readonly async?: boolean;
74
+
75
+ /**
76
+ * Set the `defer` attribute.
77
+ *
78
+ * @default false
79
+ */
80
+ readonly defer?: boolean;
81
+
82
+ /**
83
+ * Script `type` (for example `"module"`).
84
+ *
85
+ * @default "text/javascript"
86
+ */
87
+ readonly type?: string;
88
+
89
+ /**
90
+ * CORS mode (`crossorigin` attribute).
91
+ *
92
+ * @default undefined
93
+ */
94
+ readonly crossOrigin?: "anonymous" | "use-credentials";
95
+
96
+ /**
97
+ * Referrer policy.
98
+ *
99
+ * @default undefined
100
+ */
101
+ readonly referrerPolicy?: ReferrerPolicy;
102
+
103
+ /**
104
+ * Set the `nomodule` attribute.
105
+ *
106
+ * @default false
107
+ */
108
+ readonly noModule?: boolean;
109
+
110
+ /**
111
+ * CSP nonce.
112
+ *
113
+ * @default undefined
114
+ */
115
+ readonly nonce?: string;
116
+
117
+ /**
118
+ * Subresource integrity hash.
119
+ *
120
+ * @default undefined
121
+ */
122
+ readonly integrity?: string;
123
+
124
+ /**
125
+ * Additional attributes.
126
+ *
127
+ * @default {}
128
+ */
129
+ readonly attributes?: Readonly<Record<string, string>>;
130
+
131
+ /**
132
+ * Remove a script created by this composable when the owning scope stops.
133
+ *
134
+ * @default true
135
+ */
136
+ readonly removeOnDispose?: boolean;
137
+
138
+ /**
139
+ * Document capability for alternate runtimes and tests.
140
+ *
141
+ * @default window.document's `<head>`
142
+ */
143
+ readonly host?: MaybeRefOrGetter<ScriptTagHost | null | undefined>;
144
+ }
145
+
146
+ /** Reactive state and actions returned by {@link useScriptTag}. */
147
+ export interface ScriptTagControls {
148
+ /** Loading state. */
149
+ readonly status: Readonly<Ref<ScriptTagStatus>>;
150
+
151
+ /** Script element in use, if any. */
152
+ readonly element: Readonly<ShallowRef<ScriptTagElement | undefined>>;
153
+
154
+ /**
155
+ * Load the script (or reuse an existing tag with the same `src`).
156
+ * Concurrent calls share one load; `unload` and scope disposal resolve a
157
+ * pending load as `"cancelled"`.
158
+ *
159
+ * @returns The discriminated outcome; never rejects.
160
+ */
161
+ readonly load: () => Promise<ScriptTagResult>;
162
+
163
+ /** Remove a script created by this composable and reset the state. */
164
+ readonly unload: () => void;
165
+ }
166
+
167
+ const STATUS_ATTRIBUTE = "data-vize-script-status";
168
+
169
+ function browserScriptHost(): ScriptTagHost | undefined {
170
+ if (typeof window === "undefined") return undefined;
171
+ const { document, HTMLScriptElement, CSS } = window;
172
+ return {
173
+ findScript: (src) => {
174
+ const found = document.querySelector(`script[src="${CSS.escape(src)}"]`);
175
+ return found instanceof HTMLScriptElement ? found : undefined;
176
+ },
177
+ createScript: () => document.createElement("script"),
178
+ append: (element) => {
179
+ if (element instanceof HTMLScriptElement) document.head.append(element);
180
+ },
181
+ remove: (element) => {
182
+ if (element instanceof HTMLScriptElement) element.remove();
183
+ },
184
+ };
185
+ }
186
+
187
+ /**
188
+ * Inject a `<script>` tag and track its loading state.
189
+ *
190
+ * An existing tag with the same `src` is reused instead of duplicated: if
191
+ * it was created by another `useScriptTag` call its state is shared through
192
+ * a `data-vize-script-status` attribute; a tag without that attribute (for
193
+ * example emitted in server-rendered HTML) is assumed to have executed.
194
+ * Changing the reactive `src` unloads the previous script and, with
195
+ * `immediate`, loads the new one.
196
+ *
197
+ * Server rendering: no document exists, so nothing is injected, `status`
198
+ * stays `"idle"`, and `load` resolves `"unsupported"`. Emit server-side
199
+ * script tags through the application's head manager. Scripts created by
200
+ * this composable are removed when the owning scope stops (configurable);
201
+ * already-executed code cannot be unloaded.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * const { status } = useScriptTag("https://example.com/widget.js", {
206
+ * onLoaded: () => window.Widget.init(),
207
+ * });
208
+ * ```
209
+ *
210
+ * @param src Reactive script URL.
211
+ * @param options Attributes, lifecycle, and capability.
212
+ * @default options {}
213
+ * @returns Loading state and actions.
214
+ */
215
+ export function useScriptTag(
216
+ src: MaybeRefOrGetter<string>,
217
+ options: UseScriptTagOptions = {},
218
+ ): ScriptTagControls {
219
+ const status = ref<ScriptTagStatus>("idle");
220
+ const element = shallowRef<ScriptTagElement | undefined>(undefined);
221
+ let created = false;
222
+ let pending: Promise<ScriptTagResult> | undefined;
223
+ let generation = 0;
224
+ let cancelWait: (() => void) | undefined;
225
+
226
+ const resolveHost = (): ScriptTagHost | undefined =>
227
+ options.host === undefined ? browserScriptHost() : (toValue(options.host) ?? undefined);
228
+
229
+ const configure = (script: ScriptTagElement, url: string): void => {
230
+ script.setAttribute("type", options.type ?? "text/javascript");
231
+ if (options.async ?? true) script.setAttribute("async", "");
232
+ if (options.defer ?? false) script.setAttribute("defer", "");
233
+ if (options.noModule ?? false) script.setAttribute("nomodule", "");
234
+ if (options.crossOrigin !== undefined) script.setAttribute("crossorigin", options.crossOrigin);
235
+ if (options.referrerPolicy !== undefined) {
236
+ script.setAttribute("referrerpolicy", options.referrerPolicy);
237
+ }
238
+ if (options.nonce !== undefined) script.setAttribute("nonce", options.nonce);
239
+ if (options.integrity !== undefined) script.setAttribute("integrity", options.integrity);
240
+ for (const [name, value] of Object.entries(options.attributes ?? {})) {
241
+ script.setAttribute(name, value);
242
+ }
243
+ script.setAttribute(STATUS_ATTRIBUTE, "loading");
244
+ script.setAttribute("src", url);
245
+ };
246
+
247
+ const waitFor = (script: ScriptTagElement, current: number): Promise<ScriptTagResult> =>
248
+ new Promise((resolve) => {
249
+ const finish = (outcome: "loaded" | "error"): void => {
250
+ cancelWait = undefined;
251
+ script.removeEventListener("load", onLoad);
252
+ script.removeEventListener("error", onError);
253
+ script.setAttribute(STATUS_ATTRIBUTE, outcome);
254
+ if (current !== generation) {
255
+ resolve({ status: "cancelled" });
256
+ return;
257
+ }
258
+ status.value = outcome;
259
+ if (outcome === "loaded") options.onLoaded?.(script);
260
+ resolve({ status: outcome, element: script });
261
+ };
262
+ const onLoad = (): void => finish("loaded");
263
+ const onError = (): void => finish("error");
264
+ script.addEventListener("load", onLoad);
265
+ script.addEventListener("error", onError);
266
+ cancelWait = () => {
267
+ script.removeEventListener("load", onLoad);
268
+ script.removeEventListener("error", onError);
269
+ resolve({ status: "cancelled" });
270
+ };
271
+ });
272
+
273
+ const load = (): Promise<ScriptTagResult> => {
274
+ if (pending) return pending;
275
+ const host = resolveHost();
276
+ if (!host) return Promise.resolve({ status: "unsupported" });
277
+ const current = generation;
278
+ const url = toValue(src);
279
+ const existing = host.findScript(url);
280
+ if (existing) {
281
+ element.value = existing;
282
+ const state = existing.getAttribute(STATUS_ATTRIBUTE);
283
+ if (state === null || state === "loaded") {
284
+ status.value = "loaded";
285
+ options.onLoaded?.(existing);
286
+ return Promise.resolve({ status: "loaded", element: existing });
287
+ }
288
+ if (state === "error") {
289
+ status.value = "error";
290
+ return Promise.resolve({ status: "error", element: existing });
291
+ }
292
+ }
293
+ const script = existing ?? host.createScript();
294
+ status.value = "loading";
295
+ element.value = script;
296
+ const settled = waitFor(script, current).finally(() => {
297
+ if (pending === settled) pending = undefined;
298
+ });
299
+ pending = settled;
300
+ if (!existing) {
301
+ created = true;
302
+ configure(script, url);
303
+ host.append(script);
304
+ }
305
+ return settled;
306
+ };
307
+
308
+ const unload = (): void => {
309
+ generation += 1;
310
+ pending = undefined;
311
+ cancelWait?.();
312
+ cancelWait = undefined;
313
+ const script = element.value;
314
+ if (script && created) resolveHost()?.remove(script);
315
+ created = false;
316
+ element.value = undefined;
317
+ status.value = "idle";
318
+ };
319
+
320
+ if (options.immediate ?? true) {
321
+ watch(
322
+ () => toValue(src),
323
+ (_next, previous) => {
324
+ if (previous !== undefined) unload();
325
+ void load();
326
+ },
327
+ { immediate: true, flush: "sync" },
328
+ );
329
+ }
330
+
331
+ tryOnScopeDispose(() => {
332
+ if (options.removeOnDispose ?? true) {
333
+ unload();
334
+ } else {
335
+ generation += 1;
336
+ cancelWait?.();
337
+ }
338
+ });
339
+
340
+ return { status: readonly(status), element, load, unload };
341
+ }
@@ -0,0 +1,147 @@
1
+ import { computed, toValue } from "vue";
2
+ import type { ComputedRef, MaybeRefOrGetter } from "vue";
3
+
4
+ import { useLocale } from "./locale.ts";
5
+
6
+ /** Segmentation units supported by `Intl.Segmenter`. */
7
+ export type SegmenterGranularity = "grapheme" | "word" | "sentence";
8
+
9
+ /** One segment of the text. */
10
+ export interface TextSegment {
11
+ /** Segment text. */
12
+ readonly segment: string;
13
+
14
+ /** UTF-16 code-unit offset of the segment in the source text. */
15
+ readonly index: number;
16
+
17
+ /** Word granularity: whether the segment is a word (not spaces or punctuation). */
18
+ readonly isWordLike: boolean;
19
+ }
20
+
21
+ /** Options for {@link useSegmenter}. */
22
+ export interface UseSegmenterOptions {
23
+ /**
24
+ * Segmentation unit exposed through `segments` and `count`.
25
+ *
26
+ * @default "grapheme"
27
+ */
28
+ readonly granularity?: SegmenterGranularity;
29
+
30
+ /**
31
+ * Locale whose segmentation rules are used (word boundaries in Japanese or
32
+ * Thai depend on it). Pass it explicitly for hydration-stable output.
33
+ *
34
+ * @default the browser language, otherwise "en"
35
+ */
36
+ readonly locale?: string | Intl.Locale;
37
+ }
38
+
39
+ /** Reactive segmentation returned by {@link useSegmenter}. */
40
+ export interface SegmenterControls {
41
+ /** Canonical locale in use. */
42
+ readonly locale: ComputedRef<string>;
43
+
44
+ /** Segments at the configured granularity. */
45
+ readonly segments: ComputedRef<readonly TextSegment[]>;
46
+
47
+ /** Number of segments at the configured granularity. */
48
+ readonly count: ComputedRef<number>;
49
+
50
+ /** User-perceived characters (grapheme clusters), independent of granularity. */
51
+ readonly graphemeCount: ComputedRef<number>;
52
+
53
+ /** Word-like segments, independent of granularity. */
54
+ readonly wordCount: ComputedRef<number>;
55
+
56
+ /**
57
+ * Truncate the text to at most `maxGraphemes` user-perceived characters,
58
+ * never splitting an emoji or combining sequence.
59
+ *
60
+ * @param maxGraphemes Maximum grapheme clusters kept, including the ellipsis.
61
+ * @param ellipsis Appended when the text was shortened.
62
+ * @default ellipsis "…"
63
+ * @returns The possibly truncated text.
64
+ * @throws {RangeError} `[VIZE_COMPOSE_SEGMENTER_INVALID_LENGTH]` for a
65
+ * negative or non-integer length.
66
+ */
67
+ readonly truncate: (maxGraphemes: number, ellipsis?: string) => string;
68
+ }
69
+
70
+ function browserLanguage(): string | undefined {
71
+ return typeof window === "undefined" ? undefined : window.navigator.language;
72
+ }
73
+
74
+ function toSegments(segmenter: Intl.Segmenter, text: string): readonly TextSegment[] {
75
+ return Array.from(segmenter.segment(text), (data) => ({
76
+ segment: data.segment,
77
+ index: data.index,
78
+ isWordLike: data.isWordLike ?? false,
79
+ }));
80
+ }
81
+
82
+ /**
83
+ * Split text into graphemes, words, or sentences with `Intl.Segmenter`.
84
+ *
85
+ * Counts reflect what users perceive: `"👨‍👩‍👧"` is one grapheme, and
86
+ * word counts skip spaces and punctuation while handling languages without
87
+ * spaces (Japanese, Thai) through the locale. `truncate` shortens text
88
+ * without splitting clusters. Derived state only; deterministic during
89
+ * server rendering when the locale is explicit.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * const { graphemeCount, truncate } = useSegmenter(bio, { locale: "en" });
94
+ * const remaining = computed(() => 160 - graphemeCount.value);
95
+ * ```
96
+ *
97
+ * @param text Reactive text.
98
+ * @param options Reactive granularity and locale.
99
+ * @default options {}
100
+ * @returns Reactive segments, counts, and truncation.
101
+ */
102
+ export function useSegmenter(
103
+ text: MaybeRefOrGetter<string>,
104
+ options: MaybeRefOrGetter<UseSegmenterOptions> = {},
105
+ ): SegmenterControls {
106
+ const localeControls = useLocale(() => toValue(options).locale, { detect: browserLanguage });
107
+ const segmenterFor = (granularity: SegmenterGranularity) =>
108
+ computed(() => new Intl.Segmenter(localeControls.locale.value, { granularity }));
109
+ const graphemes = segmenterFor("grapheme");
110
+ const words = segmenterFor("word");
111
+ const sentences = segmenterFor("sentence");
112
+ const graphemeSegments = computed(() => toSegments(graphemes.value, toValue(text)));
113
+ const wordSegments = computed(() => toSegments(words.value, toValue(text)));
114
+ const segments = computed(() => {
115
+ const granularity = toValue(options).granularity ?? "grapheme";
116
+ if (granularity === "grapheme") return graphemeSegments.value;
117
+ if (granularity === "word") return wordSegments.value;
118
+ return toSegments(sentences.value, toValue(text));
119
+ });
120
+
121
+ const truncate = (maxGraphemes: number, ellipsis = "…"): string => {
122
+ if (!Number.isSafeInteger(maxGraphemes) || maxGraphemes < 0) {
123
+ throw new RangeError(
124
+ `[VIZE_COMPOSE_SEGMENTER_INVALID_LENGTH] maxGraphemes must be a non-negative integer; received ${String(maxGraphemes)}`,
125
+ );
126
+ }
127
+ const all = graphemeSegments.value;
128
+ if (all.length <= maxGraphemes) return toValue(text);
129
+ const ellipsisLength = toSegments(graphemes.value, ellipsis).length;
130
+ const keep = Math.max(0, maxGraphemes - ellipsisLength);
131
+ return (
132
+ all
133
+ .slice(0, keep)
134
+ .map((segment) => segment.segment)
135
+ .join("") + (maxGraphemes >= ellipsisLength ? ellipsis : "")
136
+ );
137
+ };
138
+
139
+ return {
140
+ locale: localeControls.locale,
141
+ segments,
142
+ count: computed(() => segments.value.length),
143
+ graphemeCount: computed(() => graphemeSegments.value.length),
144
+ wordCount: computed(() => wordSegments.value.filter((segment) => segment.isWordLike).length),
145
+ truncate,
146
+ };
147
+ }