tempest-react-sdk 0.77.0 → 0.79.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 (1623) hide show
  1. package/README.md +6 -6
  2. package/bin/lib/alias/collect.mjs +20 -3
  3. package/bin/lib/alias/index.mjs +12 -1
  4. package/bin/lib/alias/index.test.mjs +24 -0
  5. package/bin/lib/css/analyze.test.mjs +21 -1
  6. package/bin/lib/css/collect.mjs +14 -0
  7. package/bin/lib/css/extract.mjs +63 -5
  8. package/bin/lib/css/extract.test.mjs +110 -1
  9. package/bin/lib/css/fix.e2e.test.mjs +50 -0
  10. package/bin/lib/css/index.mjs +6 -1
  11. package/bin/lib/fs/contain.mjs +50 -0
  12. package/bin/lib/icons/generate.mjs +28 -3
  13. package/bin/lib/icons/generate.test.mjs +57 -1
  14. package/bin/lib/openapi/escape.mjs +20 -6
  15. package/bin/lib/openapi/generate.encode.test.mjs +120 -0
  16. package/bin/lib/openapi/generate.hostile.test.mjs +38 -9
  17. package/bin/lib/openapi/generate.mjs +203 -64
  18. package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
  19. package/bin/lib/openapi/generate.test.mjs +270 -3
  20. package/bin/lib/openapi/schema-to-zod.mjs +5 -3
  21. package/bin/tempest-gen.test.mjs +188 -0
  22. package/bin/tempest.mjs +120 -44
  23. package/dist/access/Can.cjs.map +1 -1
  24. package/dist/access/Can.js.map +1 -1
  25. package/dist/access/access-control-context.cjs.map +1 -1
  26. package/dist/access/access-control-context.js.map +1 -1
  27. package/dist/access/create-role-access-control.cjs.map +1 -1
  28. package/dist/access/create-role-access-control.js.map +1 -1
  29. package/dist/access/permissions-from-token.cjs.map +1 -1
  30. package/dist/access/permissions-from-token.js.map +1 -1
  31. package/dist/access/use-can.cjs.map +1 -1
  32. package/dist/access/use-can.js.map +1 -1
  33. package/dist/app/AppProviders.cjs.map +1 -1
  34. package/dist/app/AppProviders.js.map +1 -1
  35. package/dist/audio/audio-bus.cjs.map +1 -1
  36. package/dist/audio/audio-bus.js.map +1 -1
  37. package/dist/audio/audio-output.cjs.map +1 -1
  38. package/dist/audio/audio-output.js.map +1 -1
  39. package/dist/audio/audio-player.cjs.map +1 -1
  40. package/dist/audio/audio-player.js.map +1 -1
  41. package/dist/audio/audio-recorder.cjs.map +1 -1
  42. package/dist/audio/audio-recorder.js.map +1 -1
  43. package/dist/audio/duration.cjs.map +1 -1
  44. package/dist/audio/duration.js.map +1 -1
  45. package/dist/audio/level-meter.cjs.map +1 -1
  46. package/dist/audio/level-meter.js.map +1 -1
  47. package/dist/audio/media-access.cjs.map +1 -1
  48. package/dist/audio/media-access.js.map +1 -1
  49. package/dist/audio/noise-floor.cjs.map +1 -1
  50. package/dist/audio/noise-floor.js.map +1 -1
  51. package/dist/audio/sfx-pool.cjs.map +1 -1
  52. package/dist/audio/sfx-pool.js.map +1 -1
  53. package/dist/audio/use-audio-bus.cjs.map +1 -1
  54. package/dist/audio/use-audio-bus.js.map +1 -1
  55. package/dist/audio/use-audio-recorder.cjs.map +1 -1
  56. package/dist/audio/use-audio-recorder.js.map +1 -1
  57. package/dist/audio/use-audio.cjs.map +1 -1
  58. package/dist/audio/use-audio.js.map +1 -1
  59. package/dist/audio/use-microphone.cjs +1 -1
  60. package/dist/audio/use-microphone.cjs.map +1 -1
  61. package/dist/audio/use-microphone.js +1 -5
  62. package/dist/audio/use-microphone.js.map +1 -1
  63. package/dist/audio/use-sfx-pool.cjs.map +1 -1
  64. package/dist/audio/use-sfx-pool.js.map +1 -1
  65. package/dist/audio/voice-activity.cjs.map +1 -1
  66. package/dist/audio/voice-activity.js.map +1 -1
  67. package/dist/audio/voice-chain-stages.cjs.map +1 -1
  68. package/dist/audio/voice-chain-stages.js.map +1 -1
  69. package/dist/audio/voice-chain.cjs.map +1 -1
  70. package/dist/audio/voice-chain.js.map +1 -1
  71. package/dist/audio/wav.cjs.map +1 -1
  72. package/dist/audio/wav.js.map +1 -1
  73. package/dist/auth/AuthGuard.cjs.map +1 -1
  74. package/dist/auth/AuthGuard.js.map +1 -1
  75. package/dist/auth/create-auth-store.cjs.map +1 -1
  76. package/dist/auth/create-auth-store.js.map +1 -1
  77. package/dist/auth/create-tempest-auth.cjs +1 -1
  78. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  79. package/dist/auth/create-tempest-auth.js +185 -114
  80. package/dist/auth/create-tempest-auth.js.map +1 -1
  81. package/dist/auth/jwt.cjs.map +1 -1
  82. package/dist/auth/jwt.js.map +1 -1
  83. package/dist/auth/lazy-with-retry.cjs.map +1 -1
  84. package/dist/auth/lazy-with-retry.js.map +1 -1
  85. package/dist/auth/passkey.cjs.map +1 -1
  86. package/dist/auth/passkey.js.map +1 -1
  87. package/dist/auth/refresh-queue.cjs.map +1 -1
  88. package/dist/auth/refresh-queue.js.map +1 -1
  89. package/dist/auth/use-passkey.cjs +1 -1
  90. package/dist/auth/use-passkey.cjs.map +1 -1
  91. package/dist/auth/use-passkey.js +1 -1
  92. package/dist/auth/use-passkey.js.map +1 -1
  93. package/dist/br/BrazilMap.cjs.map +1 -1
  94. package/dist/br/BrazilMap.js.map +1 -1
  95. package/dist/br/BrazilMap.module.cjs.map +1 -1
  96. package/dist/br/BrazilMap.module.js.map +1 -1
  97. package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
  98. package/dist/br/BrazilStateCitySelect.js.map +1 -1
  99. package/dist/br/BrazilStateMap.cjs.map +1 -1
  100. package/dist/br/BrazilStateMap.js.map +1 -1
  101. package/dist/br/MapLegend.cjs.map +1 -1
  102. package/dist/br/MapLegend.js.map +1 -1
  103. package/dist/br/MapLegend.module.cjs.map +1 -1
  104. package/dist/br/MapLegend.module.js.map +1 -1
  105. package/dist/br/MapMarkers.cjs.map +1 -1
  106. package/dist/br/MapMarkers.js.map +1 -1
  107. package/dist/br/MapTooltip.cjs.map +1 -1
  108. package/dist/br/MapTooltip.js.map +1 -1
  109. package/dist/br/MunicipalitySearch.cjs +1 -1
  110. package/dist/br/MunicipalitySearch.cjs.map +1 -1
  111. package/dist/br/MunicipalitySearch.js +2 -5
  112. package/dist/br/MunicipalitySearch.js.map +1 -1
  113. package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
  114. package/dist/br/MunicipalitySearch.module.js.map +1 -1
  115. package/dist/br/PixQRCode.cjs.map +1 -1
  116. package/dist/br/PixQRCode.js.map +1 -1
  117. package/dist/br/PixQRCode.module.cjs.map +1 -1
  118. package/dist/br/PixQRCode.module.js.map +1 -1
  119. package/dist/br/boleto.cjs.map +1 -1
  120. package/dist/br/boleto.js.map +1 -1
  121. package/dist/br/br-geo.cjs.map +1 -1
  122. package/dist/br/br-geo.js.map +1 -1
  123. package/dist/br/data/br-centroids.cjs.map +1 -1
  124. package/dist/br/data/br-centroids.js.map +1 -1
  125. package/dist/br/data/br-locations.cjs.map +1 -1
  126. package/dist/br/data/br-locations.js.map +1 -1
  127. package/dist/br/data/br-uf-geo.cjs.map +1 -1
  128. package/dist/br/data/br-uf-geo.js.map +1 -1
  129. package/dist/br/data/mun/AC.cjs.map +1 -1
  130. package/dist/br/data/mun/AC.js.map +1 -1
  131. package/dist/br/data/mun/AL.cjs.map +1 -1
  132. package/dist/br/data/mun/AL.js.map +1 -1
  133. package/dist/br/data/mun/AM.cjs.map +1 -1
  134. package/dist/br/data/mun/AM.js.map +1 -1
  135. package/dist/br/data/mun/AP.cjs.map +1 -1
  136. package/dist/br/data/mun/AP.js.map +1 -1
  137. package/dist/br/data/mun/BA.cjs.map +1 -1
  138. package/dist/br/data/mun/BA.js.map +1 -1
  139. package/dist/br/data/mun/CE.cjs.map +1 -1
  140. package/dist/br/data/mun/CE.js.map +1 -1
  141. package/dist/br/data/mun/DF.cjs.map +1 -1
  142. package/dist/br/data/mun/DF.js.map +1 -1
  143. package/dist/br/data/mun/ES.cjs.map +1 -1
  144. package/dist/br/data/mun/ES.js.map +1 -1
  145. package/dist/br/data/mun/GO.cjs.map +1 -1
  146. package/dist/br/data/mun/GO.js.map +1 -1
  147. package/dist/br/data/mun/MA.cjs.map +1 -1
  148. package/dist/br/data/mun/MA.js.map +1 -1
  149. package/dist/br/data/mun/MG.cjs.map +1 -1
  150. package/dist/br/data/mun/MG.js.map +1 -1
  151. package/dist/br/data/mun/MS.cjs.map +1 -1
  152. package/dist/br/data/mun/MS.js.map +1 -1
  153. package/dist/br/data/mun/MT.cjs.map +1 -1
  154. package/dist/br/data/mun/MT.js.map +1 -1
  155. package/dist/br/data/mun/PA.cjs.map +1 -1
  156. package/dist/br/data/mun/PA.js.map +1 -1
  157. package/dist/br/data/mun/PB.cjs.map +1 -1
  158. package/dist/br/data/mun/PB.js.map +1 -1
  159. package/dist/br/data/mun/PE.cjs.map +1 -1
  160. package/dist/br/data/mun/PE.js.map +1 -1
  161. package/dist/br/data/mun/PI.cjs.map +1 -1
  162. package/dist/br/data/mun/PI.js.map +1 -1
  163. package/dist/br/data/mun/PR.cjs.map +1 -1
  164. package/dist/br/data/mun/PR.js.map +1 -1
  165. package/dist/br/data/mun/RJ.cjs.map +1 -1
  166. package/dist/br/data/mun/RJ.js.map +1 -1
  167. package/dist/br/data/mun/RN.cjs.map +1 -1
  168. package/dist/br/data/mun/RN.js.map +1 -1
  169. package/dist/br/data/mun/RO.cjs.map +1 -1
  170. package/dist/br/data/mun/RO.js.map +1 -1
  171. package/dist/br/data/mun/RR.cjs.map +1 -1
  172. package/dist/br/data/mun/RR.js.map +1 -1
  173. package/dist/br/data/mun/RS.cjs.map +1 -1
  174. package/dist/br/data/mun/RS.js.map +1 -1
  175. package/dist/br/data/mun/SC.cjs.map +1 -1
  176. package/dist/br/data/mun/SC.js.map +1 -1
  177. package/dist/br/data/mun/SE.cjs.map +1 -1
  178. package/dist/br/data/mun/SE.js.map +1 -1
  179. package/dist/br/data/mun/SP.cjs.map +1 -1
  180. package/dist/br/data/mun/SP.js.map +1 -1
  181. package/dist/br/data/mun/TO.cjs.map +1 -1
  182. package/dist/br/data/mun/TO.js.map +1 -1
  183. package/dist/br/geocode.cjs.map +1 -1
  184. package/dist/br/geocode.js.map +1 -1
  185. package/dist/br/holidays.cjs.map +1 -1
  186. package/dist/br/holidays.js.map +1 -1
  187. package/dist/br/locations.cjs.map +1 -1
  188. package/dist/br/locations.js.map +1 -1
  189. package/dist/br/nfe.cjs.map +1 -1
  190. package/dist/br/nfe.js.map +1 -1
  191. package/dist/br/pix.cjs +1 -1
  192. package/dist/br/pix.cjs.map +1 -1
  193. package/dist/br/pix.js +108 -71
  194. package/dist/br/pix.js.map +1 -1
  195. package/dist/br/regions.cjs.map +1 -1
  196. package/dist/br/regions.js.map +1 -1
  197. package/dist/br/scales.cjs.map +1 -1
  198. package/dist/br/scales.js.map +1 -1
  199. package/dist/br/state-geo.cjs.map +1 -1
  200. package/dist/br/state-geo.js.map +1 -1
  201. package/dist/br/svg-utils.cjs.map +1 -1
  202. package/dist/br/svg-utils.js.map +1 -1
  203. package/dist/br/use-map-hover.cjs.map +1 -1
  204. package/dist/br/use-map-hover.js.map +1 -1
  205. package/dist/br/use-map-zoom.cjs.map +1 -1
  206. package/dist/br/use-map-zoom.js.map +1 -1
  207. package/dist/br/whatsapp.cjs.map +1 -1
  208. package/dist/br/whatsapp.js.map +1 -1
  209. package/dist/br.cjs.map +1 -1
  210. package/dist/br.d.ts +16 -5
  211. package/dist/br.js.map +1 -1
  212. package/dist/capture/barcode.cjs.map +1 -1
  213. package/dist/capture/barcode.js.map +1 -1
  214. package/dist/capture/media-recorder.cjs.map +1 -1
  215. package/dist/capture/media-recorder.js.map +1 -1
  216. package/dist/capture/use-barcode-scanner.cjs.map +1 -1
  217. package/dist/capture/use-barcode-scanner.js.map +1 -1
  218. package/dist/capture/use-screen-capture.cjs +1 -1
  219. package/dist/capture/use-screen-capture.cjs.map +1 -1
  220. package/dist/capture/use-screen-capture.js +1 -7
  221. package/dist/capture/use-screen-capture.js.map +1 -1
  222. package/dist/capture/use-speech-recognition.cjs +1 -1
  223. package/dist/capture/use-speech-recognition.cjs.map +1 -1
  224. package/dist/capture/use-speech-recognition.js +35 -36
  225. package/dist/capture/use-speech-recognition.js.map +1 -1
  226. package/dist/capture/use-torch.cjs.map +1 -1
  227. package/dist/capture/use-torch.js.map +1 -1
  228. package/dist/capture/use-video-recorder.cjs.map +1 -1
  229. package/dist/capture/use-video-recorder.js.map +1 -1
  230. package/dist/capture/video-recorder.cjs.map +1 -1
  231. package/dist/capture/video-recorder.js.map +1 -1
  232. package/dist/charts/AreaChart.cjs.map +1 -1
  233. package/dist/charts/AreaChart.js.map +1 -1
  234. package/dist/charts/BarChart.cjs.map +1 -1
  235. package/dist/charts/BarChart.js.map +1 -1
  236. package/dist/charts/LineChart.cjs.map +1 -1
  237. package/dist/charts/LineChart.js.map +1 -1
  238. package/dist/charts/PieChart.cjs.map +1 -1
  239. package/dist/charts/PieChart.js.map +1 -1
  240. package/dist/charts/RadarChart.cjs.map +1 -1
  241. package/dist/charts/RadarChart.js.map +1 -1
  242. package/dist/charts/palette.cjs.map +1 -1
  243. package/dist/charts/palette.js.map +1 -1
  244. package/dist/charts/scales.cjs.map +1 -1
  245. package/dist/charts/scales.js.map +1 -1
  246. package/dist/charts/types.cjs.map +1 -1
  247. package/dist/charts/types.js.map +1 -1
  248. package/dist/charts/use-chart-colors.cjs.map +1 -1
  249. package/dist/charts/use-chart-colors.js.map +1 -1
  250. package/dist/components/AIChat/AIChat.cjs +1 -1
  251. package/dist/components/AIChat/AIChat.cjs.map +1 -1
  252. package/dist/components/AIChat/AIChat.js +1 -5
  253. package/dist/components/AIChat/AIChat.js.map +1 -1
  254. package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
  255. package/dist/components/AIChat/AIChat.module.js.map +1 -1
  256. package/dist/components/AIChat/AIChatComposer.cjs +1 -1
  257. package/dist/components/AIChat/AIChatComposer.cjs.map +1 -1
  258. package/dist/components/AIChat/AIChatComposer.js +1 -7
  259. package/dist/components/AIChat/AIChatComposer.js.map +1 -1
  260. package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
  261. package/dist/components/AIChat/AIChatTurn.js.map +1 -1
  262. package/dist/components/AIChat/ai-chat-turns.cjs.map +1 -1
  263. package/dist/components/AIChat/ai-chat-turns.js.map +1 -1
  264. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  265. package/dist/components/Accordion/Accordion.js.map +1 -1
  266. package/dist/components/Accordion/Accordion.module.cjs.map +1 -1
  267. package/dist/components/Accordion/Accordion.module.js.map +1 -1
  268. package/dist/components/Alert/Alert.cjs.map +1 -1
  269. package/dist/components/Alert/Alert.js.map +1 -1
  270. package/dist/components/Alert/Alert.module.cjs.map +1 -1
  271. package/dist/components/Alert/Alert.module.js.map +1 -1
  272. package/dist/components/AppBar/AppBar.cjs.map +1 -1
  273. package/dist/components/AppBar/AppBar.js.map +1 -1
  274. package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
  275. package/dist/components/AppBar/AppBar.module.js.map +1 -1
  276. package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
  277. package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
  278. package/dist/components/AppBar/use-sticky-body-warning.js +1 -1
  279. package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
  280. package/dist/components/AppShell/AppShell.cjs.map +1 -1
  281. package/dist/components/AppShell/AppShell.js.map +1 -1
  282. package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
  283. package/dist/components/AppShell/AppShell.module.js.map +1 -1
  284. package/dist/components/AspectRatio/AspectRatio.cjs.map +1 -1
  285. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  286. package/dist/components/AspectRatio/AspectRatio.module.cjs.map +1 -1
  287. package/dist/components/AspectRatio/AspectRatio.module.js.map +1 -1
  288. package/dist/components/AudioPlayer/AudioPlayer.cjs +1 -1
  289. package/dist/components/AudioPlayer/AudioPlayer.cjs.map +1 -1
  290. package/dist/components/AudioPlayer/AudioPlayer.js +1 -7
  291. package/dist/components/AudioPlayer/AudioPlayer.js.map +1 -1
  292. package/dist/components/AudioPlayer/AudioPlayer.module.cjs.map +1 -1
  293. package/dist/components/AudioPlayer/AudioPlayer.module.js.map +1 -1
  294. package/dist/components/AudioRecorder/AudioRecorder.cjs +1 -1
  295. package/dist/components/AudioRecorder/AudioRecorder.cjs.map +1 -1
  296. package/dist/components/AudioRecorder/AudioRecorder.js +16 -21
  297. package/dist/components/AudioRecorder/AudioRecorder.js.map +1 -1
  298. package/dist/components/AudioRecorder/AudioRecorder.module.cjs.map +1 -1
  299. package/dist/components/AudioRecorder/AudioRecorder.module.js.map +1 -1
  300. package/dist/components/Avatar/Avatar.cjs.map +1 -1
  301. package/dist/components/Avatar/Avatar.js.map +1 -1
  302. package/dist/components/Avatar/Avatar.module.cjs.map +1 -1
  303. package/dist/components/Avatar/Avatar.module.js.map +1 -1
  304. package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
  305. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  306. package/dist/components/AvatarGroup/AvatarGroup.module.cjs.map +1 -1
  307. package/dist/components/AvatarGroup/AvatarGroup.module.js.map +1 -1
  308. package/dist/components/Badge/Badge.cjs.map +1 -1
  309. package/dist/components/Badge/Badge.js.map +1 -1
  310. package/dist/components/Badge/Badge.module.cjs.map +1 -1
  311. package/dist/components/Badge/Badge.module.js.map +1 -1
  312. package/dist/components/Banner/Banner.cjs.map +1 -1
  313. package/dist/components/Banner/Banner.js.map +1 -1
  314. package/dist/components/Banner/Banner.module.cjs.map +1 -1
  315. package/dist/components/Banner/Banner.module.js.map +1 -1
  316. package/dist/components/BarList/BarList.cjs.map +1 -1
  317. package/dist/components/BarList/BarList.js.map +1 -1
  318. package/dist/components/BarList/BarList.module.cjs.map +1 -1
  319. package/dist/components/BarList/BarList.module.js.map +1 -1
  320. package/dist/components/BarList/bar-list-model.cjs.map +1 -1
  321. package/dist/components/BarList/bar-list-model.js.map +1 -1
  322. package/dist/components/BarcodeScanner/BarcodeScanner.cjs.map +1 -1
  323. package/dist/components/BarcodeScanner/BarcodeScanner.js.map +1 -1
  324. package/dist/components/BarcodeScanner/BarcodeScanner.module.cjs.map +1 -1
  325. package/dist/components/BarcodeScanner/BarcodeScanner.module.js.map +1 -1
  326. package/dist/components/BottomNavigation/BottomNavigation.cjs.map +1 -1
  327. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  328. package/dist/components/BottomNavigation/BottomNavigation.module.cjs.map +1 -1
  329. package/dist/components/BottomNavigation/BottomNavigation.module.js.map +1 -1
  330. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  331. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  332. package/dist/components/BottomSheet/BottomSheet.module.cjs.map +1 -1
  333. package/dist/components/BottomSheet/BottomSheet.module.js.map +1 -1
  334. package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
  335. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  336. package/dist/components/Breadcrumbs/Breadcrumbs.module.cjs.map +1 -1
  337. package/dist/components/Breadcrumbs/Breadcrumbs.module.js.map +1 -1
  338. package/dist/components/Button/Button.cjs.map +1 -1
  339. package/dist/components/Button/Button.js.map +1 -1
  340. package/dist/components/Button/Button.module.cjs.map +1 -1
  341. package/dist/components/Button/Button.module.js.map +1 -1
  342. package/dist/components/Button/ButtonContent.cjs.map +1 -1
  343. package/dist/components/Button/ButtonContent.js.map +1 -1
  344. package/dist/components/Button/ButtonSlot.cjs.map +1 -1
  345. package/dist/components/Button/ButtonSlot.js.map +1 -1
  346. package/dist/components/Button/button-class.cjs.map +1 -1
  347. package/dist/components/Button/button-class.js.map +1 -1
  348. package/dist/components/Button/link-rel.cjs.map +1 -1
  349. package/dist/components/Button/link-rel.js.map +1 -1
  350. package/dist/components/Button/slot.cjs.map +1 -1
  351. package/dist/components/Button/slot.js.map +1 -1
  352. package/dist/components/Calendar/Calendar.cjs.map +1 -1
  353. package/dist/components/Calendar/Calendar.js.map +1 -1
  354. package/dist/components/Calendar/Calendar.module.cjs.map +1 -1
  355. package/dist/components/Calendar/Calendar.module.js.map +1 -1
  356. package/dist/components/Card/Card.cjs.map +1 -1
  357. package/dist/components/Card/Card.js.map +1 -1
  358. package/dist/components/Card/Card.module.cjs.map +1 -1
  359. package/dist/components/Card/Card.module.js.map +1 -1
  360. package/dist/components/Carousel/Carousel.cjs.map +1 -1
  361. package/dist/components/Carousel/Carousel.js.map +1 -1
  362. package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
  363. package/dist/components/Carousel/Carousel.module.js.map +1 -1
  364. package/dist/components/Center/Center.cjs.map +1 -1
  365. package/dist/components/Center/Center.js.map +1 -1
  366. package/dist/components/Center/Center.module.cjs.map +1 -1
  367. package/dist/components/Center/Center.module.js.map +1 -1
  368. package/dist/components/Chat/Chat.cjs.map +1 -1
  369. package/dist/components/Chat/Chat.js.map +1 -1
  370. package/dist/components/Chat/Chat.module.cjs.map +1 -1
  371. package/dist/components/Chat/Chat.module.js.map +1 -1
  372. package/dist/components/Chat/ChatActionsMenu.cjs.map +1 -1
  373. package/dist/components/Chat/ChatActionsMenu.js.map +1 -1
  374. package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
  375. package/dist/components/Chat/ChatAttachments.js.map +1 -1
  376. package/dist/components/Chat/ChatBubble.cjs.map +1 -1
  377. package/dist/components/Chat/ChatBubble.js.map +1 -1
  378. package/dist/components/Chat/ChatComposer.cjs.map +1 -1
  379. package/dist/components/Chat/ChatComposer.js.map +1 -1
  380. package/dist/components/Chat/chat-groups.cjs +1 -1
  381. package/dist/components/Chat/chat-groups.cjs.map +1 -1
  382. package/dist/components/Chat/chat-groups.js +2 -6
  383. package/dist/components/Chat/chat-groups.js.map +1 -1
  384. package/dist/components/Chat/chat-receipt.cjs.map +1 -1
  385. package/dist/components/Chat/chat-receipt.js.map +1 -1
  386. package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
  387. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  388. package/dist/components/Checkbox/Checkbox.module.cjs.map +1 -1
  389. package/dist/components/Checkbox/Checkbox.module.js.map +1 -1
  390. package/dist/components/ChipInput/ChipInput.cjs +1 -1
  391. package/dist/components/ChipInput/ChipInput.cjs.map +1 -1
  392. package/dist/components/ChipInput/ChipInput.js +2 -12
  393. package/dist/components/ChipInput/ChipInput.js.map +1 -1
  394. package/dist/components/ChipInput/ChipInput.module.cjs.map +1 -1
  395. package/dist/components/ChipInput/ChipInput.module.js.map +1 -1
  396. package/dist/components/ClickOutside/ClickOutside.cjs.map +1 -1
  397. package/dist/components/ClickOutside/ClickOutside.js.map +1 -1
  398. package/dist/components/CodeBlock/CodeBlock.cjs +1 -1
  399. package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
  400. package/dist/components/CodeBlock/CodeBlock.js +1 -1
  401. package/dist/components/CodeBlock/CodeBlock.js.map +1 -1
  402. package/dist/components/CodeBlock/CodeBlock.module.cjs.map +1 -1
  403. package/dist/components/CodeBlock/CodeBlock.module.js.map +1 -1
  404. package/dist/components/CodeBlock/tokenize.cjs +1 -1
  405. package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
  406. package/dist/components/CodeBlock/tokenize.js +54 -25
  407. package/dist/components/CodeBlock/tokenize.js.map +1 -1
  408. package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
  409. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  410. package/dist/components/Collapsible/Collapsible.module.cjs.map +1 -1
  411. package/dist/components/Collapsible/Collapsible.module.js.map +1 -1
  412. package/dist/components/Combobox/Combobox.cjs.map +1 -1
  413. package/dist/components/Combobox/Combobox.js.map +1 -1
  414. package/dist/components/Combobox/Combobox.module.cjs.map +1 -1
  415. package/dist/components/Combobox/Combobox.module.js.map +1 -1
  416. package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -1
  417. package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -1
  418. package/dist/components/Command/Command.cjs +1 -1
  419. package/dist/components/Command/Command.cjs.map +1 -1
  420. package/dist/components/Command/Command.js +4 -11
  421. package/dist/components/Command/Command.js.map +1 -1
  422. package/dist/components/Command/Command.module.cjs.map +1 -1
  423. package/dist/components/Command/Command.module.js.map +1 -1
  424. package/dist/components/ConditionalWrapper/ConditionalWrapper.cjs.map +1 -1
  425. package/dist/components/ConditionalWrapper/ConditionalWrapper.js.map +1 -1
  426. package/dist/components/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  427. package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -1
  428. package/dist/components/ContextMenu/ContextMenu.cjs +1 -1
  429. package/dist/components/ContextMenu/ContextMenu.cjs.map +1 -1
  430. package/dist/components/ContextMenu/ContextMenu.js +1 -1
  431. package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
  432. package/dist/components/ContextMenu/ContextMenu.module.cjs.map +1 -1
  433. package/dist/components/ContextMenu/ContextMenu.module.js.map +1 -1
  434. package/dist/components/CopyButton/CopyButton.cjs.map +1 -1
  435. package/dist/components/CopyButton/CopyButton.js.map +1 -1
  436. package/dist/components/CopyButton/CopyButton.module.cjs.map +1 -1
  437. package/dist/components/CopyButton/CopyButton.module.js.map +1 -1
  438. package/dist/components/DataList/DataList.cjs.map +1 -1
  439. package/dist/components/DataList/DataList.js.map +1 -1
  440. package/dist/components/DataList/DataList.module.cjs.map +1 -1
  441. package/dist/components/DataList/DataList.module.js.map +1 -1
  442. package/dist/components/DataTable/DataTable.cjs +1 -1
  443. package/dist/components/DataTable/DataTable.cjs.map +1 -1
  444. package/dist/components/DataTable/DataTable.js +6 -14
  445. package/dist/components/DataTable/DataTable.js.map +1 -1
  446. package/dist/components/DataTable/DataTable.module.cjs.map +1 -1
  447. package/dist/components/DataTable/DataTable.module.js.map +1 -1
  448. package/dist/components/DataTable/EditableCell.cjs +1 -1
  449. package/dist/components/DataTable/EditableCell.cjs.map +1 -1
  450. package/dist/components/DataTable/EditableCell.js +1 -9
  451. package/dist/components/DataTable/EditableCell.js.map +1 -1
  452. package/dist/components/DataTable/LoadingRows.cjs.map +1 -1
  453. package/dist/components/DataTable/LoadingRows.js.map +1 -1
  454. package/dist/components/DataTable/edit-labels.cjs.map +1 -1
  455. package/dist/components/DataTable/edit-labels.js.map +1 -1
  456. package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
  457. package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
  458. package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
  459. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  460. package/dist/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
  461. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  462. package/dist/components/DateRangePicker/DateRangePicker.module.cjs.map +1 -1
  463. package/dist/components/DateRangePicker/DateRangePicker.module.js.map +1 -1
  464. package/dist/components/DescriptionList/DescriptionList.cjs.map +1 -1
  465. package/dist/components/DescriptionList/DescriptionList.js.map +1 -1
  466. package/dist/components/DescriptionList/DescriptionList.module.cjs.map +1 -1
  467. package/dist/components/DescriptionList/DescriptionList.module.js.map +1 -1
  468. package/dist/components/Divider/Divider.cjs.map +1 -1
  469. package/dist/components/Divider/Divider.js.map +1 -1
  470. package/dist/components/Divider/Divider.module.cjs.map +1 -1
  471. package/dist/components/Divider/Divider.module.js.map +1 -1
  472. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  473. package/dist/components/Drawer/Drawer.js.map +1 -1
  474. package/dist/components/Drawer/Drawer.module.cjs.map +1 -1
  475. package/dist/components/Drawer/Drawer.module.js.map +1 -1
  476. package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
  477. package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  478. package/dist/components/DropdownMenu/DropdownMenu.js +2 -14
  479. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  480. package/dist/components/DropdownMenu/DropdownMenu.module.cjs.map +1 -1
  481. package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -1
  482. package/dist/components/Dropzone/Dropzone.cjs.map +1 -1
  483. package/dist/components/Dropzone/Dropzone.js.map +1 -1
  484. package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
  485. package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
  486. package/dist/components/EmptyState/EmptyState.cjs.map +1 -1
  487. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  488. package/dist/components/EmptyState/EmptyState.module.cjs.map +1 -1
  489. package/dist/components/EmptyState/EmptyState.module.js.map +1 -1
  490. package/dist/components/ErrorState/ErrorState.cjs.map +1 -1
  491. package/dist/components/ErrorState/ErrorState.js.map +1 -1
  492. package/dist/components/ErrorState/ErrorState.module.cjs.map +1 -1
  493. package/dist/components/ErrorState/ErrorState.module.js.map +1 -1
  494. package/dist/components/ErrorText/ErrorText.cjs.map +1 -1
  495. package/dist/components/ErrorText/ErrorText.js.map +1 -1
  496. package/dist/components/ErrorText/ErrorText.module.cjs.map +1 -1
  497. package/dist/components/ErrorText/ErrorText.module.js.map +1 -1
  498. package/dist/components/FileUpload/FileUpload.cjs +1 -1
  499. package/dist/components/FileUpload/FileUpload.cjs.map +1 -1
  500. package/dist/components/FileUpload/FileUpload.js +7 -17
  501. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  502. package/dist/components/FileUpload/FileUpload.module.cjs.map +1 -1
  503. package/dist/components/FileUpload/FileUpload.module.js.map +1 -1
  504. package/dist/components/FilterBar/FilterBar.cjs.map +1 -1
  505. package/dist/components/FilterBar/FilterBar.js.map +1 -1
  506. package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
  507. package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
  508. package/dist/components/FilterBar/filter-apply.cjs.map +1 -1
  509. package/dist/components/FilterBar/filter-apply.js.map +1 -1
  510. package/dist/components/FilterBar/filter-model.cjs.map +1 -1
  511. package/dist/components/FilterBar/filter-model.js.map +1 -1
  512. package/dist/components/FilterBar/filter-query.cjs +1 -1
  513. package/dist/components/FilterBar/filter-query.cjs.map +1 -1
  514. package/dist/components/FilterBar/filter-query.js +2 -5
  515. package/dist/components/FilterBar/filter-query.js.map +1 -1
  516. package/dist/components/FilterPanel/FilterPanel.cjs.map +1 -1
  517. package/dist/components/FilterPanel/FilterPanel.js.map +1 -1
  518. package/dist/components/FilterPanel/FilterPanel.module.cjs.map +1 -1
  519. package/dist/components/FilterPanel/FilterPanel.module.js.map +1 -1
  520. package/dist/components/FloatingActionButton/FloatingActionButton.cjs.map +1 -1
  521. package/dist/components/FloatingActionButton/FloatingActionButton.js.map +1 -1
  522. package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
  523. package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
  524. package/dist/components/For/For.cjs.map +1 -1
  525. package/dist/components/For/For.js.map +1 -1
  526. package/dist/components/Form/Form.cjs.map +1 -1
  527. package/dist/components/Form/Form.js.map +1 -1
  528. package/dist/components/Form/Form.module.cjs.map +1 -1
  529. package/dist/components/Form/Form.module.js.map +1 -1
  530. package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
  531. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  532. package/dist/components/HoverCard/HoverCard.module.cjs.map +1 -1
  533. package/dist/components/HoverCard/HoverCard.module.js.map +1 -1
  534. package/dist/components/Image/Image.cjs.map +1 -1
  535. package/dist/components/Image/Image.js.map +1 -1
  536. package/dist/components/Image/Image.module.cjs.map +1 -1
  537. package/dist/components/Image/Image.module.js.map +1 -1
  538. package/dist/components/ImageCropper/ImageCropper.cjs +1 -1
  539. package/dist/components/ImageCropper/ImageCropper.cjs.map +1 -1
  540. package/dist/components/ImageCropper/ImageCropper.js +4 -8
  541. package/dist/components/ImageCropper/ImageCropper.js.map +1 -1
  542. package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
  543. package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
  544. package/dist/components/ImageCropper/crop-geometry.cjs.map +1 -1
  545. package/dist/components/ImageCropper/crop-geometry.js.map +1 -1
  546. package/dist/components/Input/Input.cjs.map +1 -1
  547. package/dist/components/Input/Input.js.map +1 -1
  548. package/dist/components/Input/Input.module.cjs.map +1 -1
  549. package/dist/components/Input/Input.module.js.map +1 -1
  550. package/dist/components/InstallBanner/InstallBanner.cjs.map +1 -1
  551. package/dist/components/InstallBanner/InstallBanner.js.map +1 -1
  552. package/dist/components/InstallBanner/InstallBanner.module.cjs.map +1 -1
  553. package/dist/components/InstallBanner/InstallBanner.module.js.map +1 -1
  554. package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
  555. package/dist/components/InstallButton/InstallButton.js.map +1 -1
  556. package/dist/components/InstallButton/InstallButton.module.cjs.map +1 -1
  557. package/dist/components/InstallButton/InstallButton.module.js.map +1 -1
  558. package/dist/components/InstallButton/install-hints.cjs.map +1 -1
  559. package/dist/components/InstallButton/install-hints.js.map +1 -1
  560. package/dist/components/Kanban/Kanban.cjs.map +1 -1
  561. package/dist/components/Kanban/Kanban.js.map +1 -1
  562. package/dist/components/Kanban/Kanban.module.cjs.map +1 -1
  563. package/dist/components/Kanban/Kanban.module.js.map +1 -1
  564. package/dist/components/Kbd/Kbd.cjs.map +1 -1
  565. package/dist/components/Kbd/Kbd.js.map +1 -1
  566. package/dist/components/Kbd/Kbd.module.cjs.map +1 -1
  567. package/dist/components/Kbd/Kbd.module.js.map +1 -1
  568. package/dist/components/Label/Label.cjs.map +1 -1
  569. package/dist/components/Label/Label.js.map +1 -1
  570. package/dist/components/Label/Label.module.cjs.map +1 -1
  571. package/dist/components/Label/Label.module.js.map +1 -1
  572. package/dist/components/Layout/Layout.cjs.map +1 -1
  573. package/dist/components/Layout/Layout.js.map +1 -1
  574. package/dist/components/Layout/Layout.module.cjs.map +1 -1
  575. package/dist/components/Layout/Layout.module.js.map +1 -1
  576. package/dist/components/Lightbox/Lightbox.cjs +1 -1
  577. package/dist/components/Lightbox/Lightbox.cjs.map +1 -1
  578. package/dist/components/Lightbox/Lightbox.js +1 -1
  579. package/dist/components/Lightbox/Lightbox.js.map +1 -1
  580. package/dist/components/Lightbox/Lightbox.module.cjs.map +1 -1
  581. package/dist/components/Lightbox/Lightbox.module.js.map +1 -1
  582. package/dist/components/ListTile/ListTile.cjs.map +1 -1
  583. package/dist/components/ListTile/ListTile.js.map +1 -1
  584. package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
  585. package/dist/components/ListTile/ListTile.module.js.map +1 -1
  586. package/dist/components/Markdown/Markdown.cjs.map +1 -1
  587. package/dist/components/Markdown/Markdown.js.map +1 -1
  588. package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
  589. package/dist/components/Markdown/Markdown.module.js.map +1 -1
  590. package/dist/components/Markdown/markdown-parse.cjs +6 -6
  591. package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
  592. package/dist/components/Markdown/markdown-parse.js +94 -96
  593. package/dist/components/Markdown/markdown-parse.js.map +1 -1
  594. package/dist/components/Masonry/Masonry.cjs.map +1 -1
  595. package/dist/components/Masonry/Masonry.js.map +1 -1
  596. package/dist/components/Masonry/Masonry.module.cjs.map +1 -1
  597. package/dist/components/Masonry/Masonry.module.js.map +1 -1
  598. package/dist/components/Masonry/masonry-layout.cjs.map +1 -1
  599. package/dist/components/Masonry/masonry-layout.js.map +1 -1
  600. package/dist/components/Menubar/Menubar.cjs.map +1 -1
  601. package/dist/components/Menubar/Menubar.js.map +1 -1
  602. package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
  603. package/dist/components/Menubar/Menubar.module.js.map +1 -1
  604. package/dist/components/Modal/Modal.cjs.map +1 -1
  605. package/dist/components/Modal/Modal.js.map +1 -1
  606. package/dist/components/Modal/Modal.module.cjs.map +1 -1
  607. package/dist/components/Modal/Modal.module.js.map +1 -1
  608. package/dist/components/ModalsManager/ModalsManager.cjs.map +1 -1
  609. package/dist/components/ModalsManager/ModalsManager.js.map +1 -1
  610. package/dist/components/ModalsManager/ModalsManager.module.cjs.map +1 -1
  611. package/dist/components/ModalsManager/ModalsManager.module.js.map +1 -1
  612. package/dist/components/Money/Money.cjs.map +1 -1
  613. package/dist/components/Money/Money.js.map +1 -1
  614. package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
  615. package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
  616. package/dist/components/MultiSelect/MultiSelect.module.cjs.map +1 -1
  617. package/dist/components/MultiSelect/MultiSelect.module.js.map +1 -1
  618. package/dist/components/NProgress/NProgress.cjs.map +1 -1
  619. package/dist/components/NProgress/NProgress.js.map +1 -1
  620. package/dist/components/NProgress/NProgress.module.cjs.map +1 -1
  621. package/dist/components/NProgress/NProgress.module.js.map +1 -1
  622. package/dist/components/Navbar/Navbar.cjs.map +1 -1
  623. package/dist/components/Navbar/Navbar.js.map +1 -1
  624. package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
  625. package/dist/components/Navbar/Navbar.module.js.map +1 -1
  626. package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
  627. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
  628. package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
  629. package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
  630. package/dist/components/NavigationRail/NavigationRail.cjs.map +1 -1
  631. package/dist/components/NavigationRail/NavigationRail.js.map +1 -1
  632. package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
  633. package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
  634. package/dist/components/NotificationCenter/NotificationCenter.cjs.map +1 -1
  635. package/dist/components/NotificationCenter/NotificationCenter.js.map +1 -1
  636. package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
  637. package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
  638. package/dist/components/NotificationCenter/use-notification-inbox.cjs.map +1 -1
  639. package/dist/components/NotificationCenter/use-notification-inbox.js.map +1 -1
  640. package/dist/components/OfflineIndicator/OfflineIndicator.cjs.map +1 -1
  641. package/dist/components/OfflineIndicator/OfflineIndicator.js.map +1 -1
  642. package/dist/components/OfflineIndicator/OfflineIndicator.module.cjs.map +1 -1
  643. package/dist/components/OfflineIndicator/OfflineIndicator.module.js.map +1 -1
  644. package/dist/components/Page/Page.cjs.map +1 -1
  645. package/dist/components/Page/Page.js.map +1 -1
  646. package/dist/components/Page/Page.module.cjs.map +1 -1
  647. package/dist/components/Page/Page.module.js.map +1 -1
  648. package/dist/components/Pagination/Pagination.cjs.map +1 -1
  649. package/dist/components/Pagination/Pagination.js.map +1 -1
  650. package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
  651. package/dist/components/Pagination/Pagination.module.js.map +1 -1
  652. package/dist/components/PasswordInput/PasswordInput.cjs.map +1 -1
  653. package/dist/components/PasswordInput/PasswordInput.js.map +1 -1
  654. package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
  655. package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
  656. package/dist/components/PinInput/PinInput.cjs.map +1 -1
  657. package/dist/components/PinInput/PinInput.js.map +1 -1
  658. package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
  659. package/dist/components/PinInput/PinInput.module.js.map +1 -1
  660. package/dist/components/Popover/Popover.cjs.map +1 -1
  661. package/dist/components/Popover/Popover.js.map +1 -1
  662. package/dist/components/Popover/Popover.module.cjs.map +1 -1
  663. package/dist/components/Popover/Popover.module.js.map +1 -1
  664. package/dist/components/Portal/Portal.cjs.map +1 -1
  665. package/dist/components/Portal/Portal.js.map +1 -1
  666. package/dist/components/Portal/anchor-position.cjs.map +1 -1
  667. package/dist/components/Portal/anchor-position.js.map +1 -1
  668. package/dist/components/Portal/escape-layer.cjs.map +1 -1
  669. package/dist/components/Portal/escape-layer.js.map +1 -1
  670. package/dist/components/Portal/portal-host.cjs.map +1 -1
  671. package/dist/components/Portal/portal-host.js.map +1 -1
  672. package/dist/components/Portal/tab-bridge.cjs +1 -1
  673. package/dist/components/Portal/tab-bridge.cjs.map +1 -1
  674. package/dist/components/Portal/tab-bridge.js +1 -5
  675. package/dist/components/Portal/tab-bridge.js.map +1 -1
  676. package/dist/components/Progress/Progress.cjs.map +1 -1
  677. package/dist/components/Progress/Progress.js.map +1 -1
  678. package/dist/components/Progress/Progress.module.cjs.map +1 -1
  679. package/dist/components/Progress/Progress.module.js.map +1 -1
  680. package/dist/components/QRCode/QRCode.cjs.map +1 -1
  681. package/dist/components/QRCode/QRCode.js.map +1 -1
  682. package/dist/components/QRCode/QRCode.module.cjs.map +1 -1
  683. package/dist/components/QRCode/QRCode.module.js.map +1 -1
  684. package/dist/components/QRCode/qr-encode.cjs +1 -1
  685. package/dist/components/QRCode/qr-encode.cjs.map +1 -1
  686. package/dist/components/QRCode/qr-encode.js +7 -13
  687. package/dist/components/QRCode/qr-encode.js.map +1 -1
  688. package/dist/components/QRCode/qr-tables.cjs.map +1 -1
  689. package/dist/components/QRCode/qr-tables.js.map +1 -1
  690. package/dist/components/Radio/Radio.cjs.map +1 -1
  691. package/dist/components/Radio/Radio.js.map +1 -1
  692. package/dist/components/Radio/Radio.module.cjs.map +1 -1
  693. package/dist/components/Radio/Radio.module.js.map +1 -1
  694. package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
  695. package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
  696. package/dist/components/RangeSlider/RangeSlider.module.cjs.map +1 -1
  697. package/dist/components/RangeSlider/RangeSlider.module.js.map +1 -1
  698. package/dist/components/RatingStars/RatingStars.cjs.map +1 -1
  699. package/dist/components/RatingStars/RatingStars.js.map +1 -1
  700. package/dist/components/RatingStars/RatingStars.module.cjs.map +1 -1
  701. package/dist/components/RatingStars/RatingStars.module.js.map +1 -1
  702. package/dist/components/RefreshIndicator/RefreshIndicator.cjs +1 -1
  703. package/dist/components/RefreshIndicator/RefreshIndicator.cjs.map +1 -1
  704. package/dist/components/RefreshIndicator/RefreshIndicator.js +10 -18
  705. package/dist/components/RefreshIndicator/RefreshIndicator.js.map +1 -1
  706. package/dist/components/RefreshIndicator/RefreshIndicator.module.cjs.map +1 -1
  707. package/dist/components/RefreshIndicator/RefreshIndicator.module.js.map +1 -1
  708. package/dist/components/RelativeTime/RelativeTime.cjs.map +1 -1
  709. package/dist/components/RelativeTime/RelativeTime.js.map +1 -1
  710. package/dist/components/Resizable/Resizable.cjs +1 -1
  711. package/dist/components/Resizable/Resizable.cjs.map +1 -1
  712. package/dist/components/Resizable/Resizable.js +1 -9
  713. package/dist/components/Resizable/Resizable.js.map +1 -1
  714. package/dist/components/Resizable/Resizable.module.cjs.map +1 -1
  715. package/dist/components/Resizable/Resizable.module.js.map +1 -1
  716. package/dist/components/Responsive/Responsive.cjs.map +1 -1
  717. package/dist/components/Responsive/Responsive.js.map +1 -1
  718. package/dist/components/Reveal/Reveal.cjs.map +1 -1
  719. package/dist/components/Reveal/Reveal.js.map +1 -1
  720. package/dist/components/Reveal/Reveal.module.cjs.map +1 -1
  721. package/dist/components/Reveal/Reveal.module.js.map +1 -1
  722. package/dist/components/Reveal/reveal-threshold.cjs.map +1 -1
  723. package/dist/components/Reveal/reveal-threshold.js.map +1 -1
  724. package/dist/components/SafeArea/SafeArea.cjs.map +1 -1
  725. package/dist/components/SafeArea/SafeArea.js.map +1 -1
  726. package/dist/components/SafeArea/SafeArea.module.cjs.map +1 -1
  727. package/dist/components/SafeArea/SafeArea.module.js.map +1 -1
  728. package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
  729. package/dist/components/Scheduler/Scheduler.js.map +1 -1
  730. package/dist/components/Scheduler/Scheduler.module.cjs.map +1 -1
  731. package/dist/components/Scheduler/Scheduler.module.js.map +1 -1
  732. package/dist/components/Scheduler/scheduler-layout.cjs.map +1 -1
  733. package/dist/components/Scheduler/scheduler-layout.js.map +1 -1
  734. package/dist/components/ScrollArea/ScrollArea.cjs.map +1 -1
  735. package/dist/components/ScrollArea/ScrollArea.js.map +1 -1
  736. package/dist/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
  737. package/dist/components/ScrollArea/ScrollArea.module.js.map +1 -1
  738. package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
  739. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  740. package/dist/components/SearchBar/SearchBar.module.cjs.map +1 -1
  741. package/dist/components/SearchBar/SearchBar.module.js.map +1 -1
  742. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
  743. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  744. package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -1
  745. package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -1
  746. package/dist/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  747. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  748. package/dist/components/SegmentedControl/SegmentedControl.module.cjs.map +1 -1
  749. package/dist/components/SegmentedControl/SegmentedControl.module.js.map +1 -1
  750. package/dist/components/Select/CaretIcon.cjs.map +1 -1
  751. package/dist/components/Select/CaretIcon.js.map +1 -1
  752. package/dist/components/Select/Select.cjs.map +1 -1
  753. package/dist/components/Select/Select.js.map +1 -1
  754. package/dist/components/Select/Select.module.cjs.map +1 -1
  755. package/dist/components/Select/Select.module.js.map +1 -1
  756. package/dist/components/Select/options.cjs.map +1 -1
  757. package/dist/components/Select/options.js.map +1 -1
  758. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  759. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  760. package/dist/components/Sidebar/Sidebar.js +13 -23
  761. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  762. package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
  763. package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
  764. package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
  765. package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
  766. package/dist/components/Sidebar/active-nav-key.cjs.map +1 -1
  767. package/dist/components/Sidebar/active-nav-key.js.map +1 -1
  768. package/dist/components/SignaturePad/SignaturePad.cjs +1 -1
  769. package/dist/components/SignaturePad/SignaturePad.cjs.map +1 -1
  770. package/dist/components/SignaturePad/SignaturePad.js +1 -5
  771. package/dist/components/SignaturePad/SignaturePad.js.map +1 -1
  772. package/dist/components/SignaturePad/SignaturePad.module.cjs.map +1 -1
  773. package/dist/components/SignaturePad/SignaturePad.module.js.map +1 -1
  774. package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
  775. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  776. package/dist/components/Skeleton/Skeleton.module.cjs.map +1 -1
  777. package/dist/components/Skeleton/Skeleton.module.js.map +1 -1
  778. package/dist/components/Slider/Slider.cjs.map +1 -1
  779. package/dist/components/Slider/Slider.js.map +1 -1
  780. package/dist/components/Slider/Slider.module.cjs.map +1 -1
  781. package/dist/components/Slider/Slider.module.js.map +1 -1
  782. package/dist/components/Spacer/Spacer.cjs.map +1 -1
  783. package/dist/components/Spacer/Spacer.js.map +1 -1
  784. package/dist/components/Spacer/Spacer.module.cjs.map +1 -1
  785. package/dist/components/Spacer/Spacer.module.js.map +1 -1
  786. package/dist/components/Sparkline/Sparkline.cjs.map +1 -1
  787. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  788. package/dist/components/Sparkline/Sparkline.module.cjs.map +1 -1
  789. package/dist/components/Sparkline/Sparkline.module.js.map +1 -1
  790. package/dist/components/Sparkline/sparkline-geometry.cjs.map +1 -1
  791. package/dist/components/Sparkline/sparkline-geometry.js.map +1 -1
  792. package/dist/components/Spinner/Spinner.cjs.map +1 -1
  793. package/dist/components/Spinner/Spinner.js.map +1 -1
  794. package/dist/components/Spinner/Spinner.module.cjs.map +1 -1
  795. package/dist/components/Spinner/Spinner.module.js.map +1 -1
  796. package/dist/components/Stat/Stat.cjs.map +1 -1
  797. package/dist/components/Stat/Stat.js.map +1 -1
  798. package/dist/components/Stat/Stat.module.cjs.map +1 -1
  799. package/dist/components/Stat/Stat.module.js.map +1 -1
  800. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  801. package/dist/components/Stepper/Stepper.js.map +1 -1
  802. package/dist/components/Stepper/Stepper.module.cjs.map +1 -1
  803. package/dist/components/Stepper/Stepper.module.js.map +1 -1
  804. package/dist/components/StepperInput/StepperInput.cjs.map +1 -1
  805. package/dist/components/StepperInput/StepperInput.js.map +1 -1
  806. package/dist/components/StepperInput/StepperInput.module.cjs.map +1 -1
  807. package/dist/components/StepperInput/StepperInput.module.js.map +1 -1
  808. package/dist/components/Switch/Switch.cjs.map +1 -1
  809. package/dist/components/Switch/Switch.js.map +1 -1
  810. package/dist/components/Switch/Switch.module.cjs.map +1 -1
  811. package/dist/components/Switch/Switch.module.js.map +1 -1
  812. package/dist/components/SyncStatusBadge/SyncStatusBadge.cjs.map +1 -1
  813. package/dist/components/SyncStatusBadge/SyncStatusBadge.js.map +1 -1
  814. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.cjs.map +1 -1
  815. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.js.map +1 -1
  816. package/dist/components/Table/Table.cjs.map +1 -1
  817. package/dist/components/Table/Table.js.map +1 -1
  818. package/dist/components/Table/Table.module.cjs.map +1 -1
  819. package/dist/components/Table/Table.module.js.map +1 -1
  820. package/dist/components/Tabs/Tabs.cjs.map +1 -1
  821. package/dist/components/Tabs/Tabs.js.map +1 -1
  822. package/dist/components/Tabs/Tabs.module.cjs.map +1 -1
  823. package/dist/components/Tabs/Tabs.module.js.map +1 -1
  824. package/dist/components/Tag/Tag.cjs.map +1 -1
  825. package/dist/components/Tag/Tag.js.map +1 -1
  826. package/dist/components/Tag/Tag.module.cjs.map +1 -1
  827. package/dist/components/Tag/Tag.module.js.map +1 -1
  828. package/dist/components/Textarea/Textarea.cjs.map +1 -1
  829. package/dist/components/Textarea/Textarea.js.map +1 -1
  830. package/dist/components/Textarea/Textarea.module.cjs.map +1 -1
  831. package/dist/components/Textarea/Textarea.module.js.map +1 -1
  832. package/dist/components/TimePicker/TimePicker.cjs.map +1 -1
  833. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  834. package/dist/components/TimePicker/TimePicker.module.cjs.map +1 -1
  835. package/dist/components/TimePicker/TimePicker.module.js.map +1 -1
  836. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  837. package/dist/components/Timeline/Timeline.js.map +1 -1
  838. package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
  839. package/dist/components/Timeline/Timeline.module.js.map +1 -1
  840. package/dist/components/Toast/Toast.module.cjs.map +1 -1
  841. package/dist/components/Toast/Toast.module.js.map +1 -1
  842. package/dist/components/Toast/ToastProvider.cjs.map +1 -1
  843. package/dist/components/Toast/ToastProvider.js.map +1 -1
  844. package/dist/components/Toggle/Toggle.cjs.map +1 -1
  845. package/dist/components/Toggle/Toggle.js.map +1 -1
  846. package/dist/components/Toggle/Toggle.module.cjs.map +1 -1
  847. package/dist/components/Toggle/Toggle.module.js.map +1 -1
  848. package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
  849. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  850. package/dist/components/ToggleGroup/ToggleGroup.module.cjs.map +1 -1
  851. package/dist/components/ToggleGroup/ToggleGroup.module.js.map +1 -1
  852. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  853. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  854. package/dist/components/Tooltip/Tooltip.module.cjs.map +1 -1
  855. package/dist/components/Tooltip/Tooltip.module.js.map +1 -1
  856. package/dist/components/Tour/Tour.cjs +1 -1
  857. package/dist/components/Tour/Tour.cjs.map +1 -1
  858. package/dist/components/Tour/Tour.js +1 -5
  859. package/dist/components/Tour/Tour.js.map +1 -1
  860. package/dist/components/Tour/Tour.module.cjs.map +1 -1
  861. package/dist/components/Tour/Tour.module.js.map +1 -1
  862. package/dist/components/Tour/tour-position.cjs.map +1 -1
  863. package/dist/components/Tour/tour-position.js.map +1 -1
  864. package/dist/components/Transfer/Transfer.cjs.map +1 -1
  865. package/dist/components/Transfer/Transfer.js.map +1 -1
  866. package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
  867. package/dist/components/Transfer/Transfer.module.js.map +1 -1
  868. package/dist/components/Transfer/transfer-state.cjs.map +1 -1
  869. package/dist/components/Transfer/transfer-state.js.map +1 -1
  870. package/dist/components/TreeView/TreeView.cjs.map +1 -1
  871. package/dist/components/TreeView/TreeView.js.map +1 -1
  872. package/dist/components/TreeView/TreeView.module.cjs.map +1 -1
  873. package/dist/components/TreeView/TreeView.module.js.map +1 -1
  874. package/dist/components/TruncateText/TruncateText.cjs.map +1 -1
  875. package/dist/components/TruncateText/TruncateText.js.map +1 -1
  876. package/dist/components/TruncateText/TruncateText.module.cjs.map +1 -1
  877. package/dist/components/TruncateText/TruncateText.module.js.map +1 -1
  878. package/dist/components/UpdatePrompt/UpdatePrompt.cjs.map +1 -1
  879. package/dist/components/UpdatePrompt/UpdatePrompt.js.map +1 -1
  880. package/dist/components/UpdatePrompt/UpdatePrompt.module.cjs.map +1 -1
  881. package/dist/components/UpdatePrompt/UpdatePrompt.module.js.map +1 -1
  882. package/dist/components/VideoPlayer/VideoPlayer.cjs +1 -1
  883. package/dist/components/VideoPlayer/VideoPlayer.cjs.map +1 -1
  884. package/dist/components/VideoPlayer/VideoPlayer.js +1 -7
  885. package/dist/components/VideoPlayer/VideoPlayer.js.map +1 -1
  886. package/dist/components/VideoPlayer/VideoPlayer.module.cjs.map +1 -1
  887. package/dist/components/VideoPlayer/VideoPlayer.module.js.map +1 -1
  888. package/dist/components/VideoPlayer/playback-rates.cjs.map +1 -1
  889. package/dist/components/VideoPlayer/playback-rates.js.map +1 -1
  890. package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
  891. package/dist/components/VirtualList/VirtualList.js.map +1 -1
  892. package/dist/components/VirtualList/VirtualList.module.cjs.map +1 -1
  893. package/dist/components/VirtualList/VirtualList.module.js.map +1 -1
  894. package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
  895. package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
  896. package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
  897. package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
  898. package/dist/components/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
  899. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  900. package/dist/components/VisuallyHidden/VisuallyHidden.module.cjs.map +1 -1
  901. package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -1
  902. package/dist/components/Wizard/Wizard.cjs +1 -1
  903. package/dist/components/Wizard/Wizard.cjs.map +1 -1
  904. package/dist/components/Wizard/Wizard.js +4 -11
  905. package/dist/components/Wizard/Wizard.js.map +1 -1
  906. package/dist/components/Wizard/Wizard.module.cjs.map +1 -1
  907. package/dist/components/Wizard/Wizard.module.js.map +1 -1
  908. package/dist/data/create-data-provider.cjs.map +1 -1
  909. package/dist/data/create-data-provider.js.map +1 -1
  910. package/dist/data/data-provider-context.cjs.map +1 -1
  911. package/dist/data/data-provider-context.js.map +1 -1
  912. package/dist/data/use-resource.cjs.map +1 -1
  913. package/dist/data/use-resource.js.map +1 -1
  914. package/dist/editor/RichTextEditor.cjs.map +1 -1
  915. package/dist/editor/RichTextEditor.js.map +1 -1
  916. package/dist/editor/RichTextEditor.module.cjs.map +1 -1
  917. package/dist/editor/RichTextEditor.module.js.map +1 -1
  918. package/dist/editor.js +1 -2
  919. package/dist/error-boundary/ErrorBoundary.cjs.map +1 -1
  920. package/dist/error-boundary/ErrorBoundary.js.map +1 -1
  921. package/dist/error-boundary/use-error-handler.cjs.map +1 -1
  922. package/dist/error-boundary/use-error-handler.js.map +1 -1
  923. package/dist/feature-flags/FeatureFlagsProvider.cjs.map +1 -1
  924. package/dist/feature-flags/FeatureFlagsProvider.js.map +1 -1
  925. package/dist/feature-flags/growthbook-adapter.cjs.map +1 -1
  926. package/dist/feature-flags/growthbook-adapter.js.map +1 -1
  927. package/dist/feature-flags/in-memory-adapter.cjs.map +1 -1
  928. package/dist/feature-flags/in-memory-adapter.js.map +1 -1
  929. package/dist/feature-flags/launchdarkly-adapter.cjs.map +1 -1
  930. package/dist/feature-flags/launchdarkly-adapter.js.map +1 -1
  931. package/dist/forms/FormField.cjs.map +1 -1
  932. package/dist/forms/FormField.js.map +1 -1
  933. package/dist/forms/br-validators.cjs.map +1 -1
  934. package/dist/forms/br-validators.js.map +1 -1
  935. package/dist/forms/masked-inputs.cjs.map +1 -1
  936. package/dist/forms/masked-inputs.js.map +1 -1
  937. package/dist/forms/use-viacep.cjs.map +1 -1
  938. package/dist/forms/use-viacep.js.map +1 -1
  939. package/dist/forms/use-zod-form.cjs.map +1 -1
  940. package/dist/forms/use-zod-form.js.map +1 -1
  941. package/dist/forms/validate-form.cjs.map +1 -1
  942. package/dist/forms/validate-form.js.map +1 -1
  943. package/dist/forms/zod-resolver.cjs.map +1 -1
  944. package/dist/forms/zod-resolver.js.map +1 -1
  945. package/dist/geo/TrajectoryMap.cjs.map +1 -1
  946. package/dist/geo/TrajectoryMap.js.map +1 -1
  947. package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
  948. package/dist/geo/TrajectoryMap.module.js.map +1 -1
  949. package/dist/geo/bounds.cjs.map +1 -1
  950. package/dist/geo/bounds.js.map +1 -1
  951. package/dist/geo/create-position-tracker.cjs +1 -1
  952. package/dist/geo/create-position-tracker.cjs.map +1 -1
  953. package/dist/geo/create-position-tracker.js +1 -7
  954. package/dist/geo/create-position-tracker.js.map +1 -1
  955. package/dist/geo/distance.cjs.map +1 -1
  956. package/dist/geo/distance.js.map +1 -1
  957. package/dist/geo/estimate.cjs.map +1 -1
  958. package/dist/geo/estimate.js.map +1 -1
  959. package/dist/geo/leaflet-map.cjs.map +1 -1
  960. package/dist/geo/leaflet-map.js.map +1 -1
  961. package/dist/geo/projection.cjs.map +1 -1
  962. package/dist/geo/projection.js.map +1 -1
  963. package/dist/geo/routing.cjs.map +1 -1
  964. package/dist/geo/routing.js.map +1 -1
  965. package/dist/geo/types.cjs.map +1 -1
  966. package/dist/geo/types.js.map +1 -1
  967. package/dist/geo/use-position-tracker.cjs.map +1 -1
  968. package/dist/geo/use-position-tracker.js.map +1 -1
  969. package/dist/hooks/pwa-env.cjs.map +1 -1
  970. package/dist/hooks/pwa-env.js.map +1 -1
  971. package/dist/hooks/tab-sequence.cjs.map +1 -1
  972. package/dist/hooks/tab-sequence.js.map +1 -1
  973. package/dist/hooks/use-announce.cjs +1 -1
  974. package/dist/hooks/use-announce.cjs.map +1 -1
  975. package/dist/hooks/use-announce.js +2 -2
  976. package/dist/hooks/use-announce.js.map +1 -1
  977. package/dist/hooks/use-async.cjs.map +1 -1
  978. package/dist/hooks/use-async.js.map +1 -1
  979. package/dist/hooks/use-before-install-prompt.cjs.map +1 -1
  980. package/dist/hooks/use-before-install-prompt.js.map +1 -1
  981. package/dist/hooks/use-breakpoint.cjs.map +1 -1
  982. package/dist/hooks/use-breakpoint.js.map +1 -1
  983. package/dist/hooks/use-click-outside.cjs.map +1 -1
  984. package/dist/hooks/use-click-outside.js.map +1 -1
  985. package/dist/hooks/use-client-filter.cjs.map +1 -1
  986. package/dist/hooks/use-client-filter.js.map +1 -1
  987. package/dist/hooks/use-clipboard.cjs.map +1 -1
  988. package/dist/hooks/use-clipboard.js.map +1 -1
  989. package/dist/hooks/use-countdown.cjs.map +1 -1
  990. package/dist/hooks/use-countdown.js.map +1 -1
  991. package/dist/hooks/use-counter.cjs.map +1 -1
  992. package/dist/hooks/use-counter.js.map +1 -1
  993. package/dist/hooks/use-debounce.cjs.map +1 -1
  994. package/dist/hooks/use-debounce.js.map +1 -1
  995. package/dist/hooks/use-deep-memo.cjs.map +1 -1
  996. package/dist/hooks/use-deep-memo.js.map +1 -1
  997. package/dist/hooks/use-disclosure.cjs.map +1 -1
  998. package/dist/hooks/use-disclosure.js.map +1 -1
  999. package/dist/hooks/use-document-title.cjs.map +1 -1
  1000. package/dist/hooks/use-document-title.js.map +1 -1
  1001. package/dist/hooks/use-document-visibility.cjs.map +1 -1
  1002. package/dist/hooks/use-document-visibility.js.map +1 -1
  1003. package/dist/hooks/use-draft-filters.cjs.map +1 -1
  1004. package/dist/hooks/use-draft-filters.js.map +1 -1
  1005. package/dist/hooks/use-event-listener.cjs.map +1 -1
  1006. package/dist/hooks/use-event-listener.js.map +1 -1
  1007. package/dist/hooks/use-favicon.cjs.map +1 -1
  1008. package/dist/hooks/use-favicon.js.map +1 -1
  1009. package/dist/hooks/use-focus-trap.cjs.map +1 -1
  1010. package/dist/hooks/use-focus-trap.js.map +1 -1
  1011. package/dist/hooks/use-fullscreen-element.cjs.map +1 -1
  1012. package/dist/hooks/use-fullscreen-element.js.map +1 -1
  1013. package/dist/hooks/use-fullscreen.cjs +1 -1
  1014. package/dist/hooks/use-fullscreen.cjs.map +1 -1
  1015. package/dist/hooks/use-fullscreen.js +7 -23
  1016. package/dist/hooks/use-fullscreen.js.map +1 -1
  1017. package/dist/hooks/use-geolocation.cjs.map +1 -1
  1018. package/dist/hooks/use-geolocation.js.map +1 -1
  1019. package/dist/hooks/use-hover.cjs.map +1 -1
  1020. package/dist/hooks/use-hover.js.map +1 -1
  1021. package/dist/hooks/use-idle.cjs.map +1 -1
  1022. package/dist/hooks/use-idle.js.map +1 -1
  1023. package/dist/hooks/use-install-prompt.cjs +1 -1
  1024. package/dist/hooks/use-install-prompt.cjs.map +1 -1
  1025. package/dist/hooks/use-install-prompt.js +1 -1
  1026. package/dist/hooks/use-install-prompt.js.map +1 -1
  1027. package/dist/hooks/use-intersection-observer.cjs.map +1 -1
  1028. package/dist/hooks/use-intersection-observer.js.map +1 -1
  1029. package/dist/hooks/use-interval.cjs.map +1 -1
  1030. package/dist/hooks/use-interval.js.map +1 -1
  1031. package/dist/hooks/use-is-first-render.cjs.map +1 -1
  1032. package/dist/hooks/use-is-first-render.js.map +1 -1
  1033. package/dist/hooks/use-keyboard-shortcut.cjs.map +1 -1
  1034. package/dist/hooks/use-keyboard-shortcut.js.map +1 -1
  1035. package/dist/hooks/use-latest-ref.cjs.map +1 -1
  1036. package/dist/hooks/use-latest-ref.js.map +1 -1
  1037. package/dist/hooks/use-list-state.cjs.map +1 -1
  1038. package/dist/hooks/use-list-state.js.map +1 -1
  1039. package/dist/hooks/use-local-storage.cjs +1 -1
  1040. package/dist/hooks/use-local-storage.cjs.map +1 -1
  1041. package/dist/hooks/use-local-storage.js +2 -5
  1042. package/dist/hooks/use-local-storage.js.map +1 -1
  1043. package/dist/hooks/use-long-press-handlers.cjs.map +1 -1
  1044. package/dist/hooks/use-long-press-handlers.js.map +1 -1
  1045. package/dist/hooks/use-long-press.cjs.map +1 -1
  1046. package/dist/hooks/use-long-press.js.map +1 -1
  1047. package/dist/hooks/use-map.cjs.map +1 -1
  1048. package/dist/hooks/use-map.js.map +1 -1
  1049. package/dist/hooks/use-media-devices.cjs.map +1 -1
  1050. package/dist/hooks/use-media-devices.js.map +1 -1
  1051. package/dist/hooks/use-media-permission.cjs +1 -1
  1052. package/dist/hooks/use-media-permission.cjs.map +1 -1
  1053. package/dist/hooks/use-media-permission.js +2 -5
  1054. package/dist/hooks/use-media-permission.js.map +1 -1
  1055. package/dist/hooks/use-media-query.cjs.map +1 -1
  1056. package/dist/hooks/use-media-query.js.map +1 -1
  1057. package/dist/hooks/use-object-url.cjs.map +1 -1
  1058. package/dist/hooks/use-object-url.js.map +1 -1
  1059. package/dist/hooks/use-online.cjs.map +1 -1
  1060. package/dist/hooks/use-online.js.map +1 -1
  1061. package/dist/hooks/use-pagination.cjs.map +1 -1
  1062. package/dist/hooks/use-pagination.js.map +1 -1
  1063. package/dist/hooks/use-previous.cjs.map +1 -1
  1064. package/dist/hooks/use-previous.js.map +1 -1
  1065. package/dist/hooks/use-push-to-talk.cjs.map +1 -1
  1066. package/dist/hooks/use-push-to-talk.js.map +1 -1
  1067. package/dist/hooks/use-queue.cjs.map +1 -1
  1068. package/dist/hooks/use-queue.js.map +1 -1
  1069. package/dist/hooks/use-resize-observer.cjs.map +1 -1
  1070. package/dist/hooks/use-resize-observer.js.map +1 -1
  1071. package/dist/hooks/use-scroll-lock.cjs.map +1 -1
  1072. package/dist/hooks/use-scroll-lock.js.map +1 -1
  1073. package/dist/hooks/use-scroll-overflow.cjs.map +1 -1
  1074. package/dist/hooks/use-scroll-overflow.js.map +1 -1
  1075. package/dist/hooks/use-service-worker-update.cjs.map +1 -1
  1076. package/dist/hooks/use-service-worker-update.js.map +1 -1
  1077. package/dist/hooks/use-set.cjs.map +1 -1
  1078. package/dist/hooks/use-set.js.map +1 -1
  1079. package/dist/hooks/use-sortable.cjs.map +1 -1
  1080. package/dist/hooks/use-sortable.js.map +1 -1
  1081. package/dist/hooks/use-stable-callback.cjs.map +1 -1
  1082. package/dist/hooks/use-stable-callback.js.map +1 -1
  1083. package/dist/hooks/use-storage-estimate.cjs.map +1 -1
  1084. package/dist/hooks/use-storage-estimate.js.map +1 -1
  1085. package/dist/hooks/use-throttle.cjs.map +1 -1
  1086. package/dist/hooks/use-throttle.js.map +1 -1
  1087. package/dist/hooks/use-timeout.cjs.map +1 -1
  1088. package/dist/hooks/use-timeout.js.map +1 -1
  1089. package/dist/hooks/use-toggle.cjs.map +1 -1
  1090. package/dist/hooks/use-toggle.js.map +1 -1
  1091. package/dist/hooks/use-typewriter.cjs.map +1 -1
  1092. package/dist/hooks/use-typewriter.js.map +1 -1
  1093. package/dist/hooks/use-window-size.cjs.map +1 -1
  1094. package/dist/hooks/use-window-size.js.map +1 -1
  1095. package/dist/http/api-client.cjs.map +1 -1
  1096. package/dist/http/api-client.js.map +1 -1
  1097. package/dist/http/build-url.cjs.map +1 -1
  1098. package/dist/http/build-url.js.map +1 -1
  1099. package/dist/http/credential-scope.cjs.map +1 -1
  1100. package/dist/http/credential-scope.js.map +1 -1
  1101. package/dist/http/csrf.cjs.map +1 -1
  1102. package/dist/http/csrf.js.map +1 -1
  1103. package/dist/http/decode-response.cjs.map +1 -1
  1104. package/dist/http/decode-response.js.map +1 -1
  1105. package/dist/http/describe-api-error.cjs.map +1 -1
  1106. package/dist/http/describe-api-error.js.map +1 -1
  1107. package/dist/http/errors.cjs.map +1 -1
  1108. package/dist/http/errors.js.map +1 -1
  1109. package/dist/http/idempotency.cjs.map +1 -1
  1110. package/dist/http/idempotency.js.map +1 -1
  1111. package/dist/http/parse-response.cjs.map +1 -1
  1112. package/dist/http/parse-response.js.map +1 -1
  1113. package/dist/http/resumable-upload.cjs +1 -1
  1114. package/dist/http/resumable-upload.cjs.map +1 -1
  1115. package/dist/http/resumable-upload.js +141 -105
  1116. package/dist/http/resumable-upload.js.map +1 -1
  1117. package/dist/http/retry.cjs +1 -1
  1118. package/dist/http/retry.cjs.map +1 -1
  1119. package/dist/http/retry.js +5 -6
  1120. package/dist/http/retry.js.map +1 -1
  1121. package/dist/http/timeout.cjs.map +1 -1
  1122. package/dist/http/timeout.js.map +1 -1
  1123. package/dist/http/upload-with-progress.cjs +1 -1
  1124. package/dist/http/upload-with-progress.cjs.map +1 -1
  1125. package/dist/http/upload-with-progress.js +2 -7
  1126. package/dist/http/upload-with-progress.js.map +1 -1
  1127. package/dist/http/use-describe-api-error.cjs.map +1 -1
  1128. package/dist/http/use-describe-api-error.js.map +1 -1
  1129. package/dist/http/use-poll.cjs +1 -1
  1130. package/dist/http/use-poll.cjs.map +1 -1
  1131. package/dist/http/use-poll.js +2 -5
  1132. package/dist/http/use-poll.js.map +1 -1
  1133. package/dist/i18n/I18nProvider.cjs.map +1 -1
  1134. package/dist/i18n/I18nProvider.js.map +1 -1
  1135. package/dist/i18n/create-i18n.cjs.map +1 -1
  1136. package/dist/i18n/create-i18n.js.map +1 -1
  1137. package/dist/icons/Icon.cjs.map +1 -1
  1138. package/dist/icons/Icon.js.map +1 -1
  1139. package/dist/icons/IconPicker.cjs.map +1 -1
  1140. package/dist/icons/IconPicker.js.map +1 -1
  1141. package/dist/icons/IconPicker.module.cjs.map +1 -1
  1142. package/dist/icons/IconPicker.module.js.map +1 -1
  1143. package/dist/icons/IconProvider.cjs.map +1 -1
  1144. package/dist/icons/IconProvider.js.map +1 -1
  1145. package/dist/icons/alias.cjs.map +1 -1
  1146. package/dist/icons/alias.js.map +1 -1
  1147. package/dist/icons/generated/aliases.cjs.map +1 -1
  1148. package/dist/icons/generated/aliases.js.map +1 -1
  1149. package/dist/icons/generated/icon-names.cjs.map +1 -1
  1150. package/dist/icons/generated/icon-names.js.map +1 -1
  1151. package/dist/icons/generated/loaders.cjs.map +1 -1
  1152. package/dist/icons/generated/loaders.js.map +1 -1
  1153. package/dist/icons/generated/shard-00.cjs.map +1 -1
  1154. package/dist/icons/generated/shard-00.js.map +1 -1
  1155. package/dist/icons/generated/shard-01.cjs.map +1 -1
  1156. package/dist/icons/generated/shard-01.js.map +1 -1
  1157. package/dist/icons/generated/shard-02.cjs.map +1 -1
  1158. package/dist/icons/generated/shard-02.js.map +1 -1
  1159. package/dist/icons/generated/shard-03.cjs.map +1 -1
  1160. package/dist/icons/generated/shard-03.js.map +1 -1
  1161. package/dist/icons/generated/shard-04.cjs.map +1 -1
  1162. package/dist/icons/generated/shard-04.js.map +1 -1
  1163. package/dist/icons/generated/shard-05.cjs.map +1 -1
  1164. package/dist/icons/generated/shard-05.js.map +1 -1
  1165. package/dist/icons/generated/shard-06.cjs.map +1 -1
  1166. package/dist/icons/generated/shard-06.js.map +1 -1
  1167. package/dist/icons/generated/shard-07.cjs.map +1 -1
  1168. package/dist/icons/generated/shard-07.js.map +1 -1
  1169. package/dist/icons/generated/shard-08.cjs.map +1 -1
  1170. package/dist/icons/generated/shard-08.js.map +1 -1
  1171. package/dist/icons/generated/shard-09.cjs.map +1 -1
  1172. package/dist/icons/generated/shard-09.js.map +1 -1
  1173. package/dist/icons/generated/shard-10.cjs.map +1 -1
  1174. package/dist/icons/generated/shard-10.js.map +1 -1
  1175. package/dist/icons/generated/shard-11.cjs.map +1 -1
  1176. package/dist/icons/generated/shard-11.js.map +1 -1
  1177. package/dist/icons/generated/shard-12.cjs.map +1 -1
  1178. package/dist/icons/generated/shard-12.js.map +1 -1
  1179. package/dist/icons/generated/shard-13.cjs.map +1 -1
  1180. package/dist/icons/generated/shard-13.js.map +1 -1
  1181. package/dist/icons/generated/shard-14.cjs.map +1 -1
  1182. package/dist/icons/generated/shard-14.js.map +1 -1
  1183. package/dist/icons/generated/shard-15.cjs.map +1 -1
  1184. package/dist/icons/generated/shard-15.js.map +1 -1
  1185. package/dist/icons/generated/shard-16.cjs.map +1 -1
  1186. package/dist/icons/generated/shard-16.js.map +1 -1
  1187. package/dist/icons/generated/shard-17.cjs.map +1 -1
  1188. package/dist/icons/generated/shard-17.js.map +1 -1
  1189. package/dist/icons/generated/shard-18.cjs.map +1 -1
  1190. package/dist/icons/generated/shard-18.js.map +1 -1
  1191. package/dist/icons/generated/shard-19.cjs.map +1 -1
  1192. package/dist/icons/generated/shard-19.js.map +1 -1
  1193. package/dist/icons/generated/shard-20.cjs.map +1 -1
  1194. package/dist/icons/generated/shard-20.js.map +1 -1
  1195. package/dist/icons/generated/shard-21.cjs.map +1 -1
  1196. package/dist/icons/generated/shard-21.js.map +1 -1
  1197. package/dist/icons/generated/shard-22.cjs.map +1 -1
  1198. package/dist/icons/generated/shard-22.js.map +1 -1
  1199. package/dist/icons/generated/shard-23.cjs.map +1 -1
  1200. package/dist/icons/generated/shard-23.js.map +1 -1
  1201. package/dist/icons/generated/shard-24.cjs.map +1 -1
  1202. package/dist/icons/generated/shard-24.js.map +1 -1
  1203. package/dist/icons/generated/shard-25.cjs.map +1 -1
  1204. package/dist/icons/generated/shard-25.js.map +1 -1
  1205. package/dist/icons/generated/shard-26.cjs.map +1 -1
  1206. package/dist/icons/generated/shard-26.js.map +1 -1
  1207. package/dist/icons/generated/shard-27.cjs.map +1 -1
  1208. package/dist/icons/generated/shard-27.js.map +1 -1
  1209. package/dist/icons/generated/shard-28.cjs.map +1 -1
  1210. package/dist/icons/generated/shard-28.js.map +1 -1
  1211. package/dist/icons/generated/shard-29.cjs.map +1 -1
  1212. package/dist/icons/generated/shard-29.js.map +1 -1
  1213. package/dist/icons/generated/shard-30.cjs.map +1 -1
  1214. package/dist/icons/generated/shard-30.js.map +1 -1
  1215. package/dist/icons/generated/shard-31.cjs.map +1 -1
  1216. package/dist/icons/generated/shard-31.js.map +1 -1
  1217. package/dist/icons/generated/shard-32.cjs.map +1 -1
  1218. package/dist/icons/generated/shard-32.js.map +1 -1
  1219. package/dist/icons/generated/shard-33.cjs.map +1 -1
  1220. package/dist/icons/generated/shard-33.js.map +1 -1
  1221. package/dist/icons/generated/shard-34.cjs.map +1 -1
  1222. package/dist/icons/generated/shard-34.js.map +1 -1
  1223. package/dist/icons/generated/shard-35.cjs.map +1 -1
  1224. package/dist/icons/generated/shard-35.js.map +1 -1
  1225. package/dist/icons/generated/shard-36.cjs.map +1 -1
  1226. package/dist/icons/generated/shard-36.js.map +1 -1
  1227. package/dist/icons/generated/shard-37.cjs.map +1 -1
  1228. package/dist/icons/generated/shard-37.js.map +1 -1
  1229. package/dist/icons/generated/shard-38.cjs.map +1 -1
  1230. package/dist/icons/generated/shard-38.js.map +1 -1
  1231. package/dist/icons/generated/shard-39.cjs.map +1 -1
  1232. package/dist/icons/generated/shard-39.js.map +1 -1
  1233. package/dist/icons/generated/shard-40.cjs.map +1 -1
  1234. package/dist/icons/generated/shard-40.js.map +1 -1
  1235. package/dist/icons/generated/shard-41.cjs.map +1 -1
  1236. package/dist/icons/generated/shard-41.js.map +1 -1
  1237. package/dist/icons/generated/shard-42.cjs.map +1 -1
  1238. package/dist/icons/generated/shard-42.js.map +1 -1
  1239. package/dist/icons/generated/shard-43.cjs.map +1 -1
  1240. package/dist/icons/generated/shard-43.js.map +1 -1
  1241. package/dist/icons/generated/shard-44.cjs.map +1 -1
  1242. package/dist/icons/generated/shard-44.js.map +1 -1
  1243. package/dist/icons/generated/shard-45.cjs.map +1 -1
  1244. package/dist/icons/generated/shard-45.js.map +1 -1
  1245. package/dist/icons/icon-context.cjs.map +1 -1
  1246. package/dist/icons/icon-context.js.map +1 -1
  1247. package/dist/icons/is-icon-name.cjs.map +1 -1
  1248. package/dist/icons/is-icon-name.js.map +1 -1
  1249. package/dist/icons/material-symbols.cjs.map +1 -1
  1250. package/dist/icons/material-symbols.js.map +1 -1
  1251. package/dist/icons/normalize-icon-name.cjs.map +1 -1
  1252. package/dist/icons/normalize-icon-name.js.map +1 -1
  1253. package/dist/icons/shard-cache.cjs +1 -1
  1254. package/dist/icons/shard-cache.cjs.map +1 -1
  1255. package/dist/icons/shard-cache.js +2 -5
  1256. package/dist/icons/shard-cache.js.map +1 -1
  1257. package/dist/icons/use-icon.cjs.map +1 -1
  1258. package/dist/icons/use-icon.js.map +1 -1
  1259. package/dist/icons/validate-icon-name.cjs.map +1 -1
  1260. package/dist/icons/validate-icon-name.js.map +1 -1
  1261. package/dist/icons-virtual.cjs.map +1 -1
  1262. package/dist/icons-virtual.js.map +1 -1
  1263. package/dist/imaging/canvas.cjs.map +1 -1
  1264. package/dist/imaging/canvas.js.map +1 -1
  1265. package/dist/imaging/compress.cjs.map +1 -1
  1266. package/dist/imaging/compress.js.map +1 -1
  1267. package/dist/imaging/decode.cjs.map +1 -1
  1268. package/dist/imaging/decode.js.map +1 -1
  1269. package/dist/imaging/encode.cjs.map +1 -1
  1270. package/dist/imaging/encode.js.map +1 -1
  1271. package/dist/imaging/exceptions.cjs.map +1 -1
  1272. package/dist/imaging/exceptions.js.map +1 -1
  1273. package/dist/imaging/frame.cjs.map +1 -1
  1274. package/dist/imaging/frame.js.map +1 -1
  1275. package/dist/imaging/thumbnails.cjs.map +1 -1
  1276. package/dist/imaging/thumbnails.js.map +1 -1
  1277. package/dist/imaging/transform.cjs.map +1 -1
  1278. package/dist/imaging/transform.js.map +1 -1
  1279. package/dist/imaging/use-image-processing.cjs.map +1 -1
  1280. package/dist/imaging/use-image-processing.js.map +1 -1
  1281. package/dist/logger/logger.cjs.map +1 -1
  1282. package/dist/logger/logger.js.map +1 -1
  1283. package/dist/neural.cjs.map +1 -1
  1284. package/dist/neural.js.map +1 -1
  1285. package/dist/oauth/GoogleSignIn.cjs +1 -1
  1286. package/dist/oauth/GoogleSignIn.cjs.map +1 -1
  1287. package/dist/oauth/GoogleSignIn.js +6 -9
  1288. package/dist/oauth/GoogleSignIn.js.map +1 -1
  1289. package/dist/oauth/callback.cjs.map +1 -1
  1290. package/dist/oauth/callback.js.map +1 -1
  1291. package/dist/oauth/use-oauth-callback.cjs.map +1 -1
  1292. package/dist/oauth/use-oauth-callback.js.map +1 -1
  1293. package/dist/offline/conflict.cjs.map +1 -1
  1294. package/dist/offline/conflict.js.map +1 -1
  1295. package/dist/offline/create-offline-database.cjs.map +1 -1
  1296. package/dist/offline/create-offline-database.js.map +1 -1
  1297. package/dist/offline/create-offline-store.cjs +1 -1
  1298. package/dist/offline/create-offline-store.cjs.map +1 -1
  1299. package/dist/offline/create-offline-store.js +1 -5
  1300. package/dist/offline/create-offline-store.js.map +1 -1
  1301. package/dist/offline/create-offline-sync.cjs +1 -1
  1302. package/dist/offline/create-offline-sync.cjs.map +1 -1
  1303. package/dist/offline/create-offline-sync.js +9 -14
  1304. package/dist/offline/create-offline-sync.js.map +1 -1
  1305. package/dist/offline/use-offline-sync.cjs.map +1 -1
  1306. package/dist/offline/use-offline-sync.js.map +1 -1
  1307. package/dist/perf/cache-size.cjs.map +1 -1
  1308. package/dist/perf/cache-size.js.map +1 -1
  1309. package/dist/perf/device.cjs.map +1 -1
  1310. package/dist/perf/device.js.map +1 -1
  1311. package/dist/perf/format.cjs.map +1 -1
  1312. package/dist/perf/format.js.map +1 -1
  1313. package/dist/perf/profiler.cjs.map +1 -1
  1314. package/dist/perf/profiler.js.map +1 -1
  1315. package/dist/push/use-push-subscription.cjs.map +1 -1
  1316. package/dist/push/use-push-subscription.js.map +1 -1
  1317. package/dist/push/utils.cjs.map +1 -1
  1318. package/dist/push/utils.js.map +1 -1
  1319. package/dist/push/web-push-client.cjs.map +1 -1
  1320. package/dist/push/web-push-client.js.map +1 -1
  1321. package/dist/query/QueryProvider.cjs.map +1 -1
  1322. package/dist/query/QueryProvider.js.map +1 -1
  1323. package/dist/query/constants.cjs.map +1 -1
  1324. package/dist/query/constants.js.map +1 -1
  1325. package/dist/query/create-query-keys.cjs.map +1 -1
  1326. package/dist/query/create-query-keys.js.map +1 -1
  1327. package/dist/query/foreign-client-warning.cjs.map +1 -1
  1328. package/dist/query/foreign-client-warning.js.map +1 -1
  1329. package/dist/query/offline-persistence.cjs +1 -1
  1330. package/dist/query/offline-persistence.cjs.map +1 -1
  1331. package/dist/query/offline-persistence.js +2 -10
  1332. package/dist/query/offline-persistence.js.map +1 -1
  1333. package/dist/query/optimistic.cjs.map +1 -1
  1334. package/dist/query/optimistic.js.map +1 -1
  1335. package/dist/query/pagination.cjs.map +1 -1
  1336. package/dist/query/pagination.js.map +1 -1
  1337. package/dist/query/retry-policy.cjs.map +1 -1
  1338. package/dist/query/retry-policy.js.map +1 -1
  1339. package/dist/query/use-cursor-query.cjs.map +1 -1
  1340. package/dist/query/use-cursor-query.js.map +1 -1
  1341. package/dist/query/use-offline-mutation.cjs.map +1 -1
  1342. package/dist/query/use-offline-mutation.js.map +1 -1
  1343. package/dist/query/use-paginated-query.cjs.map +1 -1
  1344. package/dist/query/use-paginated-query.js.map +1 -1
  1345. package/dist/router/AppRouter.cjs.map +1 -1
  1346. package/dist/router/AppRouter.js.map +1 -1
  1347. package/dist/router/RouteGuard.cjs.map +1 -1
  1348. package/dist/router/RouteGuard.js.map +1 -1
  1349. package/dist/router/index.js +2 -2
  1350. package/dist/share/share-or-download.cjs.map +1 -1
  1351. package/dist/share/share-or-download.js.map +1 -1
  1352. package/dist/share/share.cjs.map +1 -1
  1353. package/dist/share/share.js.map +1 -1
  1354. package/dist/sse/create-event-stream.cjs.map +1 -1
  1355. package/dist/sse/create-event-stream.js.map +1 -1
  1356. package/dist/sse/use-event-stream.cjs.map +1 -1
  1357. package/dist/sse/use-event-stream.js.map +1 -1
  1358. package/dist/store/create-selectors.cjs.map +1 -1
  1359. package/dist/store/create-selectors.js.map +1 -1
  1360. package/dist/store/create-store.cjs.map +1 -1
  1361. package/dist/store/create-store.js.map +1 -1
  1362. package/dist/sw/background-sync.cjs +1 -1
  1363. package/dist/sw/background-sync.cjs.map +1 -1
  1364. package/dist/sw/background-sync.js +32 -31
  1365. package/dist/sw/background-sync.js.map +1 -1
  1366. package/dist/sw/cache-inspect.cjs.map +1 -1
  1367. package/dist/sw/cache-inspect.js.map +1 -1
  1368. package/dist/sw/cache.cjs +1 -1
  1369. package/dist/sw/cache.cjs.map +1 -1
  1370. package/dist/sw/cache.js +2 -6
  1371. package/dist/sw/cache.js.map +1 -1
  1372. package/dist/sw/create-push-handler.cjs.map +1 -1
  1373. package/dist/sw/create-push-handler.js.map +1 -1
  1374. package/dist/sw/credential-headers.cjs.map +1 -1
  1375. package/dist/sw/credential-headers.js.map +1 -1
  1376. package/dist/sw/periodic-sync.cjs.map +1 -1
  1377. package/dist/sw/periodic-sync.js.map +1 -1
  1378. package/dist/sw/register-service-worker.cjs.map +1 -1
  1379. package/dist/sw/register-service-worker.js.map +1 -1
  1380. package/dist/sw/session-data.cjs.map +1 -1
  1381. package/dist/sw/session-data.js.map +1 -1
  1382. package/dist/sw.d.ts +46 -8
  1383. package/dist/tabular/assets.cjs.map +1 -1
  1384. package/dist/tabular/assets.js.map +1 -1
  1385. package/dist/tabular/cache.cjs.map +1 -1
  1386. package/dist/tabular/cache.js.map +1 -1
  1387. package/dist/tabular/compact.cjs.map +1 -1
  1388. package/dist/tabular/compact.js.map +1 -1
  1389. package/dist/tabular/exceptions.cjs.map +1 -1
  1390. package/dist/tabular/exceptions.js.map +1 -1
  1391. package/dist/tabular/manifest.cjs.map +1 -1
  1392. package/dist/tabular/manifest.js.map +1 -1
  1393. package/dist/tabular/predictor.cjs.map +1 -1
  1394. package/dist/tabular/predictor.js.map +1 -1
  1395. package/dist/tabular/use-tabular-predictor.cjs.map +1 -1
  1396. package/dist/tabular/use-tabular-predictor.js.map +1 -1
  1397. package/dist/telemetry/TelemetryProvider.cjs.map +1 -1
  1398. package/dist/telemetry/TelemetryProvider.js.map +1 -1
  1399. package/dist/telemetry/app-error-adapter.cjs.map +1 -1
  1400. package/dist/telemetry/app-error-adapter.js.map +1 -1
  1401. package/dist/telemetry/app-error-queue.cjs.map +1 -1
  1402. package/dist/telemetry/app-error-queue.js.map +1 -1
  1403. package/dist/telemetry/app-error-reporter.cjs +1 -1
  1404. package/dist/telemetry/app-error-reporter.cjs.map +1 -1
  1405. package/dist/telemetry/app-error-reporter.js +1 -1
  1406. package/dist/telemetry/app-error-reporter.js.map +1 -1
  1407. package/dist/telemetry/app-error-schema.cjs.map +1 -1
  1408. package/dist/telemetry/app-error-schema.js.map +1 -1
  1409. package/dist/telemetry/app-error-transport.cjs.map +1 -1
  1410. package/dist/telemetry/app-error-transport.js.map +1 -1
  1411. package/dist/telemetry/console-adapter.cjs.map +1 -1
  1412. package/dist/telemetry/console-adapter.js.map +1 -1
  1413. package/dist/telemetry/describe-app-error.cjs.map +1 -1
  1414. package/dist/telemetry/describe-app-error.js.map +1 -1
  1415. package/dist/telemetry/posthog-adapter.cjs +1 -1
  1416. package/dist/telemetry/posthog-adapter.cjs.map +1 -1
  1417. package/dist/telemetry/posthog-adapter.js +1 -5
  1418. package/dist/telemetry/posthog-adapter.js.map +1 -1
  1419. package/dist/telemetry/sentry-adapter.cjs.map +1 -1
  1420. package/dist/telemetry/sentry-adapter.js.map +1 -1
  1421. package/dist/tempest-react-sdk.cjs +1 -1
  1422. package/dist/tempest-react-sdk.d.ts +448 -15
  1423. package/dist/tempest-react-sdk.js +119 -119
  1424. package/dist/testing/create-mock-handlers.cjs.map +1 -1
  1425. package/dist/testing/create-mock-handlers.js.map +1 -1
  1426. package/dist/testing.js +1 -2
  1427. package/dist/theme/ThemeProvider.cjs.map +1 -1
  1428. package/dist/theme/ThemeProvider.js.map +1 -1
  1429. package/dist/theme/apply-theme.cjs.map +1 -1
  1430. package/dist/theme/apply-theme.js.map +1 -1
  1431. package/dist/theme/color.cjs.map +1 -1
  1432. package/dist/theme/color.js.map +1 -1
  1433. package/dist/theme/create-theme.cjs.map +1 -1
  1434. package/dist/theme/create-theme.js.map +1 -1
  1435. package/dist/theme/data-viz-ramps.cjs.map +1 -1
  1436. package/dist/theme/data-viz-ramps.js.map +1 -1
  1437. package/dist/theme/initial-theme.cjs.map +1 -1
  1438. package/dist/theme/initial-theme.js.map +1 -1
  1439. package/dist/theme/inverse-render.cjs.map +1 -1
  1440. package/dist/theme/inverse-render.js.map +1 -1
  1441. package/dist/theme/inverse-restore.cjs.map +1 -1
  1442. package/dist/theme/inverse-restore.js.map +1 -1
  1443. package/dist/theme/inverse-surface.cjs.map +1 -1
  1444. package/dist/theme/inverse-surface.js.map +1 -1
  1445. package/dist/theme/status-tokens.cjs.map +1 -1
  1446. package/dist/theme/status-tokens.js.map +1 -1
  1447. package/dist/theme/theme-presets.cjs.map +1 -1
  1448. package/dist/theme/theme-presets.js.map +1 -1
  1449. package/dist/utils/absent.cjs.map +1 -1
  1450. package/dist/utils/absent.js.map +1 -1
  1451. package/dist/utils/arrays.cjs.map +1 -1
  1452. package/dist/utils/arrays.js.map +1 -1
  1453. package/dist/utils/base64.cjs.map +1 -1
  1454. package/dist/utils/base64.js.map +1 -1
  1455. package/dist/utils/cn.cjs.map +1 -1
  1456. package/dist/utils/cn.js.map +1 -1
  1457. package/dist/utils/compare-values.cjs.map +1 -1
  1458. package/dist/utils/compare-values.js.map +1 -1
  1459. package/dist/utils/compressed-storage.cjs.map +1 -1
  1460. package/dist/utils/compressed-storage.js.map +1 -1
  1461. package/dist/utils/csv.cjs +3 -3
  1462. package/dist/utils/csv.cjs.map +1 -1
  1463. package/dist/utils/csv.js +11 -10
  1464. package/dist/utils/csv.js.map +1 -1
  1465. package/dist/utils/dev-mode.cjs.map +1 -1
  1466. package/dist/utils/dev-mode.js.map +1 -1
  1467. package/dist/utils/duplicate-instance.cjs.map +1 -1
  1468. package/dist/utils/duplicate-instance.js.map +1 -1
  1469. package/dist/utils/format.cjs.map +1 -1
  1470. package/dist/utils/format.js.map +1 -1
  1471. package/dist/utils/functions.cjs +1 -1
  1472. package/dist/utils/functions.cjs.map +1 -1
  1473. package/dist/utils/functions.js +1 -1
  1474. package/dist/utils/functions.js.map +1 -1
  1475. package/dist/utils/guards.cjs.map +1 -1
  1476. package/dist/utils/guards.js.map +1 -1
  1477. package/dist/utils/ids.cjs.map +1 -1
  1478. package/dist/utils/ids.js.map +1 -1
  1479. package/dist/utils/intl-cache.cjs.map +1 -1
  1480. package/dist/utils/intl-cache.js.map +1 -1
  1481. package/dist/utils/json-frame.cjs.map +1 -1
  1482. package/dist/utils/json-frame.js.map +1 -1
  1483. package/dist/utils/numbers.cjs.map +1 -1
  1484. package/dist/utils/numbers.js.map +1 -1
  1485. package/dist/utils/objects.cjs.map +1 -1
  1486. package/dist/utils/objects.js.map +1 -1
  1487. package/dist/{telemetry/app-error-owner.cjs → utils/owner-fingerprint.cjs} +2 -2
  1488. package/dist/utils/owner-fingerprint.cjs.map +1 -0
  1489. package/dist/{telemetry/app-error-owner.js → utils/owner-fingerprint.js} +3 -3
  1490. package/dist/utils/owner-fingerprint.js.map +1 -0
  1491. package/dist/utils/promises.cjs.map +1 -1
  1492. package/dist/utils/promises.js.map +1 -1
  1493. package/dist/utils/relative-time.cjs.map +1 -1
  1494. package/dist/utils/relative-time.js.map +1 -1
  1495. package/dist/utils/safe-url.cjs.map +1 -1
  1496. package/dist/utils/safe-url.js.map +1 -1
  1497. package/dist/utils/schema-like.cjs.map +1 -1
  1498. package/dist/utils/schema-like.js.map +1 -1
  1499. package/dist/utils/storage.cjs +1 -1
  1500. package/dist/utils/storage.cjs.map +1 -1
  1501. package/dist/utils/storage.js +2 -2
  1502. package/dist/utils/storage.js.map +1 -1
  1503. package/dist/utils/strings.cjs.map +1 -1
  1504. package/dist/utils/strings.js.map +1 -1
  1505. package/dist/utils/xlsx.cjs.map +1 -1
  1506. package/dist/utils/xlsx.js.map +1 -1
  1507. package/dist/vision/core/canvas.cjs.map +1 -1
  1508. package/dist/vision/core/canvas.js.map +1 -1
  1509. package/dist/vision/core/dtypes.cjs.map +1 -1
  1510. package/dist/vision/core/dtypes.js.map +1 -1
  1511. package/dist/vision/core/exceptions.cjs.map +1 -1
  1512. package/dist/vision/core/exceptions.js.map +1 -1
  1513. package/dist/vision/core/graph.cjs.map +1 -1
  1514. package/dist/vision/core/graph.js.map +1 -1
  1515. package/dist/vision/core/metadata.cjs +1 -1
  1516. package/dist/vision/core/metadata.cjs.map +1 -1
  1517. package/dist/vision/core/metadata.js +9 -26
  1518. package/dist/vision/core/metadata.js.map +1 -1
  1519. package/dist/vision/core/providers.cjs.map +1 -1
  1520. package/dist/vision/core/providers.js.map +1 -1
  1521. package/dist/vision/core/session.cjs.map +1 -1
  1522. package/dist/vision/core/session.js.map +1 -1
  1523. package/dist/vision/core/timing.cjs.map +1 -1
  1524. package/dist/vision/core/timing.js.map +1 -1
  1525. package/dist/vision/fusion.cjs.map +1 -1
  1526. package/dist/vision/fusion.js.map +1 -1
  1527. package/dist/vision/index.cjs.map +1 -1
  1528. package/dist/vision/index.js.map +1 -1
  1529. package/dist/vision/io/image.cjs.map +1 -1
  1530. package/dist/vision/io/image.js.map +1 -1
  1531. package/dist/vision/labels.cjs.map +1 -1
  1532. package/dist/vision/labels.js.map +1 -1
  1533. package/dist/vision/luminance.cjs.map +1 -1
  1534. package/dist/vision/luminance.js.map +1 -1
  1535. package/dist/vision/normalization.cjs.map +1 -1
  1536. package/dist/vision/normalization.js.map +1 -1
  1537. package/dist/vision/postprocess/classification.cjs.map +1 -1
  1538. package/dist/vision/postprocess/classification.js.map +1 -1
  1539. package/dist/vision/postprocess/detection.cjs.map +1 -1
  1540. package/dist/vision/postprocess/detection.js.map +1 -1
  1541. package/dist/vision/postprocess/segmentation.cjs.map +1 -1
  1542. package/dist/vision/postprocess/segmentation.js.map +1 -1
  1543. package/dist/vision/preprocess/image.cjs.map +1 -1
  1544. package/dist/vision/preprocess/image.js.map +1 -1
  1545. package/dist/vision/preprocess/pipeline.cjs.map +1 -1
  1546. package/dist/vision/preprocess/pipeline.js.map +1 -1
  1547. package/dist/vision/results.cjs.map +1 -1
  1548. package/dist/vision/results.js.map +1 -1
  1549. package/dist/vision/tasks/base.cjs.map +1 -1
  1550. package/dist/vision/tasks/base.js.map +1 -1
  1551. package/dist/vision/tasks/classifier.cjs.map +1 -1
  1552. package/dist/vision/tasks/classifier.js.map +1 -1
  1553. package/dist/vision/tasks/detectClassify.cjs.map +1 -1
  1554. package/dist/vision/tasks/detectClassify.js.map +1 -1
  1555. package/dist/vision/tasks/detector.cjs.map +1 -1
  1556. package/dist/vision/tasks/detector.js.map +1 -1
  1557. package/dist/vision/tasks/segmenter.cjs.map +1 -1
  1558. package/dist/vision/tasks/segmenter.js.map +1 -1
  1559. package/dist/vision/types.cjs.map +1 -1
  1560. package/dist/vision/types.js.map +1 -1
  1561. package/dist/vision/use-camera-stream.cjs +1 -1
  1562. package/dist/vision/use-camera-stream.cjs.map +1 -1
  1563. package/dist/vision/use-camera-stream.js +3 -9
  1564. package/dist/vision/use-camera-stream.js.map +1 -1
  1565. package/dist/vision/use-live-luminance.cjs +1 -1
  1566. package/dist/vision/use-live-luminance.cjs.map +1 -1
  1567. package/dist/vision/use-live-luminance.js +1 -5
  1568. package/dist/vision/use-live-luminance.js.map +1 -1
  1569. package/dist/vite/base-url.cjs.map +1 -1
  1570. package/dist/vite/base-url.js.map +1 -1
  1571. package/dist/vite/create-vite-config.cjs.map +1 -1
  1572. package/dist/vite/create-vite-config.js.map +1 -1
  1573. package/dist/vite/narrow-tokens.cjs.map +1 -1
  1574. package/dist/vite/narrow-tokens.js.map +1 -1
  1575. package/dist/vite/tempest-csp.cjs +2 -2
  1576. package/dist/vite/tempest-csp.cjs.map +1 -1
  1577. package/dist/vite/tempest-csp.js +69 -66
  1578. package/dist/vite/tempest-csp.js.map +1 -1
  1579. package/dist/vite/tempest-icons.cjs.map +1 -1
  1580. package/dist/vite/tempest-icons.js.map +1 -1
  1581. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  1582. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  1583. package/dist/vite/tempest-pwa-dev-sw.js +9 -16
  1584. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  1585. package/dist/vite/tempest-pwa-icons.cjs.map +1 -1
  1586. package/dist/vite/tempest-pwa-icons.js.map +1 -1
  1587. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  1588. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  1589. package/dist/vite/tempest-styles.cjs.map +1 -1
  1590. package/dist/vite/tempest-styles.js.map +1 -1
  1591. package/dist/vite/tempest-vitest.cjs.map +1 -1
  1592. package/dist/vite/tempest-vitest.js.map +1 -1
  1593. package/dist/vite.d.ts +5 -3
  1594. package/dist/webrtc/link-stats.cjs.map +1 -1
  1595. package/dist/webrtc/link-stats.js.map +1 -1
  1596. package/dist/webrtc/mesh-quality.cjs.map +1 -1
  1597. package/dist/webrtc/mesh-quality.js.map +1 -1
  1598. package/dist/webrtc/opus-sdp.cjs.map +1 -1
  1599. package/dist/webrtc/opus-sdp.js.map +1 -1
  1600. package/dist/webrtc/peer-link.cjs +1 -1
  1601. package/dist/webrtc/peer-link.cjs.map +1 -1
  1602. package/dist/webrtc/peer-link.js +2 -5
  1603. package/dist/webrtc/peer-link.js.map +1 -1
  1604. package/dist/webrtc/peer-mesh.cjs +1 -1
  1605. package/dist/webrtc/peer-mesh.cjs.map +1 -1
  1606. package/dist/webrtc/peer-mesh.js +8 -24
  1607. package/dist/webrtc/peer-mesh.js.map +1 -1
  1608. package/dist/webrtc/sender-bitrate.cjs.map +1 -1
  1609. package/dist/webrtc/sender-bitrate.js.map +1 -1
  1610. package/dist/webrtc/use-link-stats.cjs.map +1 -1
  1611. package/dist/webrtc/use-link-stats.js.map +1 -1
  1612. package/dist/ws/create-web-socket.cjs +1 -1
  1613. package/dist/ws/create-web-socket.cjs.map +1 -1
  1614. package/dist/ws/create-web-socket.js +4 -22
  1615. package/dist/ws/create-web-socket.js.map +1 -1
  1616. package/dist/ws/resilience.cjs.map +1 -1
  1617. package/dist/ws/resilience.js.map +1 -1
  1618. package/dist/ws/use-web-socket.cjs.map +1 -1
  1619. package/dist/ws/use-web-socket.js.map +1 -1
  1620. package/package.json +9 -6
  1621. package/template/package.json +1 -1
  1622. package/dist/telemetry/app-error-owner.cjs.map +0 -1
  1623. package/dist/telemetry/app-error-owner.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-long-press.js","names":[],"sources":["../../src/hooks/use-long-press.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\nimport type { RefObject } from \"react\";\n\nexport interface UseLongPressOptions {\n /** Press duration in ms. Default `500`. */\n delay?: number;\n /** Pixel threshold — finger/mouse movement beyond this cancels the press. Default `10`. */\n moveThreshold?: number;\n}\n\n/**\n * Detect long-press / long-tap gestures. Fires `fn` after `delay` ms\n * while the element is held. Cancels on move beyond `moveThreshold` or\n * pointer up before `delay`.\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * useLongPress(ref, () => openContextMenu(), { delay: 600 });\n */\nexport function useLongPress<T extends HTMLElement>(\n ref: RefObject<T | null>,\n fn: () => void,\n options: UseLongPressOptions = {},\n): void {\n const { delay = 500, moveThreshold = 10 } = options;\n const fnRef = useLatestRef(fn);\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let startX = 0;\n let startY = 0;\n\n const cancel = (): void => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n\n const onDown = (event: PointerEvent): void => {\n startX = event.clientX;\n startY = event.clientY;\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fnRef.current();\n }, delay);\n };\n\n const onMove = (event: PointerEvent): void => {\n if (timer === null) return;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) > moveThreshold) cancel();\n };\n\n node.addEventListener(\"pointerdown\", onDown);\n node.addEventListener(\"pointermove\", onMove);\n node.addEventListener(\"pointerup\", cancel);\n node.addEventListener(\"pointercancel\", cancel);\n node.addEventListener(\"pointerleave\", cancel);\n return () => {\n cancel();\n node.removeEventListener(\"pointerdown\", onDown);\n node.removeEventListener(\"pointermove\", onMove);\n node.removeEventListener(\"pointerup\", cancel);\n node.removeEventListener(\"pointercancel\", cancel);\n node.removeEventListener(\"pointerleave\", cancel);\n };\n }, [ref, delay, moveThreshold, fnRef]);\n}\n"],"mappings":";;;AAoBA,SAAgB,EACZ,GACA,GACA,IAA+B,CAAC,GAC5B;CACJ,IAAM,EAAE,WAAQ,KAAK,mBAAgB,OAAO,GACtC,IAAQ,EAAa,CAAE;CAE7B,QAAgB;EACZ,IAAM,IAAO,EAAI;EACjB,IAAI,CAAC,GAAM;EACX,IAAI,IAA8C,MAC9C,IAAS,GACT,IAAS,GAEP,UAAqB;GACvB,AAEI,OADA,aAAa,CAAK,GACV;EAEhB,GAEM,KAAU,MAA8B;GAI1C,AAHA,IAAS,EAAM,SACf,IAAS,EAAM,SACf,EAAO,GACP,IAAQ,iBAAiB;IAErB,AADA,IAAQ,MACR,EAAM,QAAQ;GAClB,GAAG,CAAK;EACZ,GAEM,KAAU,MAA8B;GAC1C,IAAI,MAAU,MAAM;GACpB,IAAM,IAAK,EAAM,UAAU,GACrB,IAAK,EAAM,UAAU;GAC3B,AAAI,KAAK,MAAM,GAAI,CAAE,IAAI,KAAe,EAAO;EACnD;EAOA,OALA,EAAK,iBAAiB,eAAe,CAAM,GAC3C,EAAK,iBAAiB,eAAe,CAAM,GAC3C,EAAK,iBAAiB,aAAa,CAAM,GACzC,EAAK,iBAAiB,iBAAiB,CAAM,GAC7C,EAAK,iBAAiB,gBAAgB,CAAM,SAC/B;GAMT,AALA,EAAO,GACP,EAAK,oBAAoB,eAAe,CAAM,GAC9C,EAAK,oBAAoB,eAAe,CAAM,GAC9C,EAAK,oBAAoB,aAAa,CAAM,GAC5C,EAAK,oBAAoB,iBAAiB,CAAM,GAChD,EAAK,oBAAoB,gBAAgB,CAAM;EACnD;CACJ,GAAG;EAAC;EAAK;EAAO;EAAe;CAAK,CAAC;AACzC"}
1
+ {"version":3,"file":"use-long-press.js","names":["useLongPress","options","fnRef","useLatestRef","fn","node","ref","timer","startX","startY","cancel","onDown","event","delay","onMove","dx","dy","moveThreshold"],"sources":["../../src/hooks/use-long-press.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\nimport type { RefObject } from \"react\";\n\nexport interface UseLongPressOptions {\n /** Press duration in ms. Default `500`. */\n delay?: number;\n /** Pixel threshold — finger/mouse movement beyond this cancels the press. Default `10`. */\n moveThreshold?: number;\n}\n\n/**\n * Detect long-press / long-tap gestures. Fires `fn` after `delay` ms\n * while the element is held. Cancels on move beyond `moveThreshold` or\n * pointer up before `delay`.\n *\n * @example\n * const ref = useRef<HTMLDivElement>(null);\n * useLongPress(ref, () => openContextMenu(), { delay: 600 });\n */\nexport function useLongPress<T extends HTMLElement>(\n ref: RefObject<T | null>,\n fn: () => void,\n options: UseLongPressOptions = {},\n): void {\n const { delay = 500, moveThreshold = 10 } = options;\n const fnRef = useLatestRef(fn);\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let startX = 0;\n let startY = 0;\n\n const cancel = (): void => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n\n const onDown = (event: PointerEvent): void => {\n startX = event.clientX;\n startY = event.clientY;\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fnRef.current();\n }, delay);\n };\n\n const onMove = (event: PointerEvent): void => {\n if (timer === null) return;\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (Math.hypot(dx, dy) > moveThreshold) cancel();\n };\n\n node.addEventListener(\"pointerdown\", onDown);\n node.addEventListener(\"pointermove\", onMove);\n node.addEventListener(\"pointerup\", cancel);\n node.addEventListener(\"pointercancel\", cancel);\n node.addEventListener(\"pointerleave\", cancel);\n return () => {\n cancel();\n node.removeEventListener(\"pointerdown\", onDown);\n node.removeEventListener(\"pointermove\", onMove);\n node.removeEventListener(\"pointerup\", cancel);\n node.removeEventListener(\"pointercancel\", cancel);\n node.removeEventListener(\"pointerleave\", cancel);\n };\n }, [ref, delay, moveThreshold, fnRef]);\n}\n"],"mappings":";;;AAoBA,SAAgBA,EACZ,GACA,GACA,IAA+B,CAAC,GAC5B;CACJ,IAAM,EAAE,WAAQ,KAAK,mBAAgB,OAAOC,GACtCC,IAAQC,EAAaC,CAAE;CAE7B,QAAgB;EACZ,IAAMC,IAAOC,EAAI;EACjB,IAAI,CAACD,GAAM;EACX,IAAIE,IAA8C,MAC9CC,IAAS,GACTC,IAAS,GAEPC,UAAqB;GACvB,AAEIH,OADA,aAAaA,CAAK,GACV;EAEhB,GAEMI,KAAU,MAA8B;GAI1C,AAHA,IAASC,EAAM,SACf,IAASA,EAAM,SACfF,EAAO,GACP,IAAQ,iBAAiB;IAErB,AADA,IAAQ,MACRR,EAAM,QAAQ;GAClB,GAAGW,CAAK;EACZ,GAEMC,KAAU,MAA8B;GAC1C,IAAIP,MAAU,MAAM;GACpB,IAAMQ,IAAKH,EAAM,UAAUJ,GACrBQ,IAAKJ,EAAM,UAAUH;GAC3B,AAAI,KAAK,MAAMM,GAAIC,CAAE,IAAIC,KAAeP,EAAO;EACnD;EAOA,OALAL,EAAK,iBAAiB,eAAeM,CAAM,GAC3CN,EAAK,iBAAiB,eAAeS,CAAM,GAC3CT,EAAK,iBAAiB,aAAaK,CAAM,GACzCL,EAAK,iBAAiB,iBAAiBK,CAAM,GAC7CL,EAAK,iBAAiB,gBAAgBK,CAAM,SAC/B;GAMT,AALAA,EAAO,GACPL,EAAK,oBAAoB,eAAeM,CAAM,GAC9CN,EAAK,oBAAoB,eAAeS,CAAM,GAC9CT,EAAK,oBAAoB,aAAaK,CAAM,GAC5CL,EAAK,oBAAoB,iBAAiBK,CAAM,GAChDL,EAAK,oBAAoB,gBAAgBK,CAAM;EACnD;CACJ,GAAG;EAACJ;EAAKO;EAAOI;EAAef;CAAK,CAAC;AACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-map.cjs","names":[],"sources":["../../src/hooks/use-map.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseMapResult<K, V> {\n map: ReadonlyMap<K, V>;\n set: (key: K, value: V) => void;\n delete: (key: K) => void;\n clear: () => void;\n get: (key: K) => V | undefined;\n has: (key: K) => boolean;\n size: number;\n}\n\n/**\n * Reactive `Map` wrapper. Mutating via `set` / `delete` / `clear` triggers a\n * re-render and yields a fresh `map` reference each time.\n *\n * @typeParam K - key type.\n * @typeParam V - value type.\n * @param initial - initial entries.\n * @returns `{ map, set, delete, clear, get, has, size }`.\n */\nexport function useMap<K, V>(initial?: Iterable<readonly [K, V]>): UseMapResult<K, V> {\n const [map, setMap] = useState<Map<K, V>>(() => new Map(initial));\n\n const set = useCallback((key: K, value: V): void => {\n setMap((current) => {\n const next = new Map(current);\n next.set(key, value);\n return next;\n });\n }, []);\n\n const remove = useCallback((key: K): void => {\n setMap((current) => {\n if (!current.has(key)) return current;\n const next = new Map(current);\n next.delete(key);\n return next;\n });\n }, []);\n\n const clear = useCallback((): void => {\n setMap((current) => (current.size === 0 ? current : new Map<K, V>()));\n }, []);\n\n const get = useCallback((key: K): V | undefined => map.get(key), [map]);\n const has = useCallback((key: K): boolean => map.has(key), [map]);\n\n return useMemo<UseMapResult<K, V>>(\n () => ({\n map,\n set,\n delete: remove,\n clear,\n get,\n has,\n size: map.size,\n }),\n [map, set, remove, clear, get, has],\n );\n}\n"],"mappings":"uBAqBA,SAAgB,EAAa,EAAyD,CAClF,GAAM,CAAC,EAAK,IAAA,EAAU,EAAA,SAAA,KAA0B,IAAI,IAAI,CAAO,CAAC,EAE1D,GAAA,EAAM,EAAA,YAAA,EAAa,EAAQ,IAAmB,CAChD,EAAQ,GAAY,CAChB,IAAM,EAAO,IAAI,IAAI,CAAO,EAE5B,OADA,EAAK,IAAI,EAAK,CAAK,EACZ,CACX,CAAC,CACL,EAAG,CAAC,CAAC,EAEC,GAAA,EAAS,EAAA,YAAA,CAAa,GAAiB,CACzC,EAAQ,GAAY,CAChB,GAAI,CAAC,EAAQ,IAAI,CAAG,EAAG,OAAO,EAC9B,IAAM,EAAO,IAAI,IAAI,CAAO,EAE5B,OADA,EAAK,OAAO,CAAG,EACR,CACX,CAAC,CACL,EAAG,CAAC,CAAC,EAEC,GAAA,EAAQ,EAAA,YAAA,KAAwB,CAClC,EAAQ,GAAa,EAAQ,OAAS,EAAI,EAAU,IAAI,GAAY,CACxE,EAAG,CAAC,CAAC,EAEC,GAAA,EAAM,EAAA,YAAA,CAAa,GAA0B,EAAI,IAAI,CAAG,EAAG,CAAC,CAAG,CAAC,EAChE,GAAA,EAAM,EAAA,YAAA,CAAa,GAAoB,EAAI,IAAI,CAAG,EAAG,CAAC,CAAG,CAAC,EAEhE,OAAA,EAAO,EAAA,QAAA,MACI,CACH,MACA,MACA,OAAQ,EACR,QACA,MACA,MACA,KAAM,EAAI,IACd,GACA,CAAC,EAAK,EAAK,EAAQ,EAAO,EAAK,CAAG,CACtC,CACJ"}
1
+ {"version":3,"file":"use-map.cjs","names":["useState","useCallback","useMemo","react","useMap","map","setMap","initial","set","next","current","key","value","remove","clear","get","has"],"sources":["../../src/hooks/use-map.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseMapResult<K, V> {\n map: ReadonlyMap<K, V>;\n set: (key: K, value: V) => void;\n delete: (key: K) => void;\n clear: () => void;\n get: (key: K) => V | undefined;\n has: (key: K) => boolean;\n size: number;\n}\n\n/**\n * Reactive `Map` wrapper. Mutating via `set` / `delete` / `clear` triggers a\n * re-render and yields a fresh `map` reference each time.\n *\n * @typeParam K - key type.\n * @typeParam V - value type.\n * @param initial - initial entries.\n * @returns `{ map, set, delete, clear, get, has, size }`.\n */\nexport function useMap<K, V>(initial?: Iterable<readonly [K, V]>): UseMapResult<K, V> {\n const [map, setMap] = useState<Map<K, V>>(() => new Map(initial));\n\n const set = useCallback((key: K, value: V): void => {\n setMap((current) => {\n const next = new Map(current);\n next.set(key, value);\n return next;\n });\n }, []);\n\n const remove = useCallback((key: K): void => {\n setMap((current) => {\n if (!current.has(key)) return current;\n const next = new Map(current);\n next.delete(key);\n return next;\n });\n }, []);\n\n const clear = useCallback((): void => {\n setMap((current) => (current.size === 0 ? current : new Map<K, V>()));\n }, []);\n\n const get = useCallback((key: K): V | undefined => map.get(key), [map]);\n const has = useCallback((key: K): boolean => map.has(key), [map]);\n\n return useMemo<UseMapResult<K, V>>(\n () => ({\n map,\n set,\n delete: remove,\n clear,\n get,\n has,\n size: map.size,\n }),\n [map, set, remove, clear, get, has],\n );\n}\n"],"mappings":"A,uBAqBA,SAAgBI,EAAa,EAAyD,CAClF,GAAM,CAACC,EAAKC,IAAA,EAAUN,EAAAA,SAAAA,KAA0B,IAAI,IAAIO,CAAO,CAAC,EAE1DC,GAAA,EAAMP,EAAAA,YAAAA,EAAa,EAAQ,IAAmB,CAChDK,EAAQ,GAAY,CAChB,IAAMG,EAAO,IAAI,IAAIC,CAAO,EAE5B,OADAD,EAAK,IAAIE,EAAKC,CAAK,EACZH,CACX,CAAC,CACL,EAAG,CAAC,CAAC,EAECI,GAAA,EAASZ,EAAAA,YAAAA,CAAa,GAAiB,CACzCK,EAAQ,GAAY,CAChB,GAAI,CAACI,EAAQ,IAAIC,CAAG,EAAG,OAAOD,EAC9B,IAAMD,EAAO,IAAI,IAAIC,CAAO,EAE5B,OADAD,EAAK,OAAOE,CAAG,EACRF,CACX,CAAC,CACL,EAAG,CAAC,CAAC,EAECK,GAAA,EAAQb,EAAAA,YAAAA,KAAwB,CAClCK,EAAQ,GAAaI,EAAQ,OAAS,EAAIA,EAAU,IAAI,GAAY,CACxE,EAAG,CAAC,CAAC,EAECK,GAAA,EAAMd,EAAAA,YAAAA,CAAa,GAA0BI,EAAI,IAAIM,CAAG,EAAG,CAACN,CAAG,CAAC,EAChEW,GAAA,EAAMf,EAAAA,YAAAA,CAAa,GAAoBI,EAAI,IAAIM,CAAG,EAAG,CAACN,CAAG,CAAC,EAEhE,OAAA,EAAOH,EAAAA,QAAAA,MACI,CACH,MACA,MACA,OAAQW,EACR,QACA,MACA,MACA,KAAMR,EAAI,IACd,GACA,CAACA,EAAKG,EAAKK,EAAQC,EAAOC,EAAKC,CAAG,CACtC,CACJ,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-map.js","names":[],"sources":["../../src/hooks/use-map.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseMapResult<K, V> {\n map: ReadonlyMap<K, V>;\n set: (key: K, value: V) => void;\n delete: (key: K) => void;\n clear: () => void;\n get: (key: K) => V | undefined;\n has: (key: K) => boolean;\n size: number;\n}\n\n/**\n * Reactive `Map` wrapper. Mutating via `set` / `delete` / `clear` triggers a\n * re-render and yields a fresh `map` reference each time.\n *\n * @typeParam K - key type.\n * @typeParam V - value type.\n * @param initial - initial entries.\n * @returns `{ map, set, delete, clear, get, has, size }`.\n */\nexport function useMap<K, V>(initial?: Iterable<readonly [K, V]>): UseMapResult<K, V> {\n const [map, setMap] = useState<Map<K, V>>(() => new Map(initial));\n\n const set = useCallback((key: K, value: V): void => {\n setMap((current) => {\n const next = new Map(current);\n next.set(key, value);\n return next;\n });\n }, []);\n\n const remove = useCallback((key: K): void => {\n setMap((current) => {\n if (!current.has(key)) return current;\n const next = new Map(current);\n next.delete(key);\n return next;\n });\n }, []);\n\n const clear = useCallback((): void => {\n setMap((current) => (current.size === 0 ? current : new Map<K, V>()));\n }, []);\n\n const get = useCallback((key: K): V | undefined => map.get(key), [map]);\n const has = useCallback((key: K): boolean => map.has(key), [map]);\n\n return useMemo<UseMapResult<K, V>>(\n () => ({\n map,\n set,\n delete: remove,\n clear,\n get,\n has,\n size: map.size,\n }),\n [map, set, remove, clear, get, has],\n );\n}\n"],"mappings":";;AAqBA,SAAgB,EAAa,GAAyD;CAClF,IAAM,CAAC,GAAK,KAAU,QAA0B,IAAI,IAAI,CAAO,CAAC,GAE1D,IAAM,GAAa,GAAQ,MAAmB;EAChD,GAAQ,MAAY;GAChB,IAAM,IAAO,IAAI,IAAI,CAAO;GAE5B,OADA,EAAK,IAAI,GAAK,CAAK,GACZ;EACX,CAAC;CACL,GAAG,CAAC,CAAC,GAEC,IAAS,GAAa,MAAiB;EACzC,GAAQ,MAAY;GAChB,IAAI,CAAC,EAAQ,IAAI,CAAG,GAAG,OAAO;GAC9B,IAAM,IAAO,IAAI,IAAI,CAAO;GAE5B,OADA,EAAK,OAAO,CAAG,GACR;EACX,CAAC;CACL,GAAG,CAAC,CAAC,GAEC,IAAQ,QAAwB;EAClC,GAAQ,MAAa,EAAQ,SAAS,IAAI,oBAAU,IAAI,IAAU,CAAE;CACxE,GAAG,CAAC,CAAC,GAEC,IAAM,GAAa,MAA0B,EAAI,IAAI,CAAG,GAAG,CAAC,CAAG,CAAC,GAChE,IAAM,GAAa,MAAoB,EAAI,IAAI,CAAG,GAAG,CAAC,CAAG,CAAC;CAEhE,OAAO,SACI;EACH;EACA;EACA,QAAQ;EACR;EACA;EACA;EACA,MAAM,EAAI;CACd,IACA;EAAC;EAAK;EAAK;EAAQ;EAAO;EAAK;CAAG,CACtC;AACJ"}
1
+ {"version":3,"file":"use-map.js","names":["useMap","map","setMap","useState","initial","set","useCallback","next","current","key","value","remove","clear","get","has","useMemo"],"sources":["../../src/hooks/use-map.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseMapResult<K, V> {\n map: ReadonlyMap<K, V>;\n set: (key: K, value: V) => void;\n delete: (key: K) => void;\n clear: () => void;\n get: (key: K) => V | undefined;\n has: (key: K) => boolean;\n size: number;\n}\n\n/**\n * Reactive `Map` wrapper. Mutating via `set` / `delete` / `clear` triggers a\n * re-render and yields a fresh `map` reference each time.\n *\n * @typeParam K - key type.\n * @typeParam V - value type.\n * @param initial - initial entries.\n * @returns `{ map, set, delete, clear, get, has, size }`.\n */\nexport function useMap<K, V>(initial?: Iterable<readonly [K, V]>): UseMapResult<K, V> {\n const [map, setMap] = useState<Map<K, V>>(() => new Map(initial));\n\n const set = useCallback((key: K, value: V): void => {\n setMap((current) => {\n const next = new Map(current);\n next.set(key, value);\n return next;\n });\n }, []);\n\n const remove = useCallback((key: K): void => {\n setMap((current) => {\n if (!current.has(key)) return current;\n const next = new Map(current);\n next.delete(key);\n return next;\n });\n }, []);\n\n const clear = useCallback((): void => {\n setMap((current) => (current.size === 0 ? current : new Map<K, V>()));\n }, []);\n\n const get = useCallback((key: K): V | undefined => map.get(key), [map]);\n const has = useCallback((key: K): boolean => map.has(key), [map]);\n\n return useMemo<UseMapResult<K, V>>(\n () => ({\n map,\n set,\n delete: remove,\n clear,\n get,\n has,\n size: map.size,\n }),\n [map, set, remove, clear, get, has],\n );\n}\n"],"mappings":";;AAqBA,SAAgBA,EAAa,GAAyD;CAClF,IAAM,CAACC,GAAKC,KAAUC,QAA0B,IAAI,IAAIC,CAAO,CAAC,GAE1DC,IAAMC,GAAa,GAAQ,MAAmB;EAChD,GAAQ,MAAY;GAChB,IAAMC,IAAO,IAAI,IAAIC,CAAO;GAE5B,OADAD,EAAK,IAAIE,GAAKC,CAAK,GACZH;EACX,CAAC;CACL,GAAG,CAAC,CAAC,GAECI,IAASL,GAAa,MAAiB;EACzC,GAAQ,MAAY;GAChB,IAAI,CAACE,EAAQ,IAAIC,CAAG,GAAG,OAAOD;GAC9B,IAAMD,IAAO,IAAI,IAAIC,CAAO;GAE5B,OADAD,EAAK,OAAOE,CAAG,GACRF;EACX,CAAC;CACL,GAAG,CAAC,CAAC,GAECK,IAAQN,QAAwB;EAClC,GAAQ,MAAaE,EAAQ,SAAS,IAAIA,oBAAU,IAAI,IAAU,CAAE;CACxE,GAAG,CAAC,CAAC,GAECK,IAAMP,GAAa,MAA0BL,EAAI,IAAIQ,CAAG,GAAG,CAACR,CAAG,CAAC,GAChEa,IAAMR,GAAa,MAAoBL,EAAI,IAAIQ,CAAG,GAAG,CAACR,CAAG,CAAC;CAEhE,OAAOc,SACI;EACH;EACA;EACA,QAAQJ;EACR;EACA;EACA;EACA,MAAMV,EAAI;CACd,IACA;EAACA;EAAKI;EAAKM;EAAQC;EAAOC;EAAKC;CAAG,CACtC;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-media-devices.cjs","names":[],"sources":["../../src/hooks/use-media-devices.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** One device the browser is willing to tell us about. */\nexport interface MediaDeviceOption {\n deviceId: string;\n /**\n * Human label, or `\"\"` until permission has been granted.\n *\n * See {@link UseMediaDevicesResult.labelsAvailable} — an empty label is not a\n * bug, it is the browser refusing to fingerprint the machine.\n */\n label: string;\n kind: MediaDeviceKind;\n groupId: string;\n}\n\n/** Value returned by {@link useMediaDevices}. */\nexport interface UseMediaDevicesResult {\n /** Every device, in the order the browser listed them. */\n devices: MediaDeviceOption[];\n /** Microphones and other audio sources. */\n audioInputs: MediaDeviceOption[];\n /** Speakers and headsets. Empty on browsers with no output routing (Safari, Firefox). */\n audioOutputs: MediaDeviceOption[];\n /** Cameras. */\n videoInputs: MediaDeviceOption[];\n /**\n * Whether labels are filled in.\n *\n * `false` means the list is real but anonymous — render a picker only after a\n * capture permission has been granted, or the user sees \"\" repeated N times.\n */\n labelsAvailable: boolean;\n /** `enumerateDevices` is unavailable in this browser. */\n supported: boolean;\n /** Re-enumerate. The hook already does this on `devicechange`. */\n refresh: () => void;\n}\n\nconst EMPTY: MediaDeviceOption[] = [];\n\n/**\n * List capture and playback devices, and keep the list fresh.\n *\n * Two things about `enumerateDevices` that decide how a picker must be built:\n *\n * 1. **Labels are gated behind permission.** Before the user grants a capture\n * permission, every `label` is `\"\"` — the list length and ids are real, the names\n * are not. A device picker rendered at that point is a column of blanks, so\n * `labelsAvailable` is exposed to gate it. Ask for the microphone first, then\n * show the picker.\n * 2. **The list changes while the page is open.** Plugging in a headset mid-recording\n * is the normal case, not an edge case, so the hook subscribes to `devicechange`\n * instead of enumerating once on mount.\n *\n * `audioOutputs` is empty on browsers with no output routing at all (Safari and\n * Firefox do not implement `setSinkId`); an empty array there means \"you cannot\n * offer this choice\", not \"no speakers\".\n *\n * @returns The device lists, whether labels are filled in, and a `refresh()`.\n *\n * @example\n * const { audioInputs, labelsAvailable } = useMediaDevices();\n * // ...after the mic permission is granted:\n * {labelsAvailable && <Select options={audioInputs.map((d) => ({ value: d.deviceId, label: d.label }))} />}\n */\nexport function useMediaDevices(): UseMediaDevicesResult {\n const [devices, setDevices] = useState<MediaDeviceOption[]>(EMPTY);\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (\n typeof navigator === \"undefined\" ||\n !navigator.mediaDevices ||\n typeof navigator.mediaDevices.enumerateDevices !== \"function\"\n ) {\n setSupported(false);\n setDevices(EMPTY);\n return;\n }\n setSupported(true);\n const media = navigator.mediaDevices;\n\n async function read(): Promise<void> {\n try {\n const list = await media.enumerateDevices();\n if (cancelled) return;\n setDevices(\n list.map((device) => ({\n deviceId: device.deviceId,\n label: device.label,\n kind: device.kind,\n groupId: device.groupId,\n })),\n );\n } catch {\n if (!cancelled) setDevices(EMPTY);\n }\n }\n\n void read();\n const onChange = (): void => void read();\n media.addEventListener?.(\"devicechange\", onChange);\n\n return () => {\n cancelled = true;\n media.removeEventListener?.(\"devicechange\", onChange);\n };\n }, [token]);\n\n return {\n devices,\n audioInputs: devices.filter((device) => device.kind === \"audioinput\"),\n audioOutputs: devices.filter((device) => device.kind === \"audiooutput\"),\n videoInputs: devices.filter((device) => device.kind === \"videoinput\"),\n labelsAvailable: devices.length > 0 && devices.some((device) => device.label !== \"\"),\n supported,\n refresh,\n };\n}\n"],"mappings":"uBAuCA,IAAM,EAA6B,CAAC,EA2BpC,SAAgB,GAAyC,CACrD,GAAM,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAA8B,CAAK,EAC3D,CAAC,EAAW,IAAA,EAAgB,EAAA,SAAA,CAAS,EAAK,EAC1C,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAS,CAAC,EAE9B,GAAA,EAAU,EAAA,YAAA,KAAkB,EAAU,GAAU,EAAQ,CAAC,EAAG,CAAC,CAAC,EA4CpE,OA1CA,EAAA,EAAA,UAAA,KAAgB,CACZ,IAAI,EAAY,GAEhB,GACI,OAAO,UAAc,KACrB,CAAC,UAAU,cACX,OAAO,UAAU,aAAa,kBAAqB,WACrD,CACE,EAAa,EAAK,EAClB,EAAW,CAAK,EAChB,MACJ,CACA,EAAa,EAAI,EACjB,IAAM,EAAQ,UAAU,aAExB,eAAe,GAAsB,CACjC,GAAI,CACA,IAAM,EAAO,MAAM,EAAM,iBAAiB,EAC1C,GAAI,EAAW,OACf,EACI,EAAK,IAAK,IAAY,CAClB,SAAU,EAAO,SACjB,MAAO,EAAO,MACd,KAAM,EAAO,KACb,QAAS,EAAO,OACpB,EAAE,CACN,CACJ,MAAQ,CACC,GAAW,EAAW,CAAK,CACpC,CACJ,CAEA,EAAU,EACV,IAAM,MAAuB,KAAK,EAAK,EAGvC,OAFA,EAAM,mBAAmB,eAAgB,CAAQ,MAEpC,CACT,EAAY,GACZ,EAAM,sBAAsB,eAAgB,CAAQ,CACxD,CACJ,EAAG,CAAC,CAAK,CAAC,EAEH,CACH,UACA,YAAa,EAAQ,OAAQ,GAAW,EAAO,OAAS,YAAY,EACpE,aAAc,EAAQ,OAAQ,GAAW,EAAO,OAAS,aAAa,EACtE,YAAa,EAAQ,OAAQ,GAAW,EAAO,OAAS,YAAY,EACpE,gBAAiB,EAAQ,OAAS,GAAK,EAAQ,KAAM,GAAW,EAAO,QAAU,EAAE,EACnF,YACA,SACJ,CACJ"}
1
+ {"version":3,"file":"use-media-devices.cjs","names":["useState","useCallback","react","EMPTY","useMediaDevices","devices","setDevices","supported","setSupported","token","setToken","refresh","value","cancelled","media","read","list","device","onChange"],"sources":["../../src/hooks/use-media-devices.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** One device the browser is willing to tell us about. */\nexport interface MediaDeviceOption {\n deviceId: string;\n /**\n * Human label, or `\"\"` until permission has been granted.\n *\n * See {@link UseMediaDevicesResult.labelsAvailable} — an empty label is not a\n * bug, it is the browser refusing to fingerprint the machine.\n */\n label: string;\n kind: MediaDeviceKind;\n groupId: string;\n}\n\n/** Value returned by {@link useMediaDevices}. */\nexport interface UseMediaDevicesResult {\n /** Every device, in the order the browser listed them. */\n devices: MediaDeviceOption[];\n /** Microphones and other audio sources. */\n audioInputs: MediaDeviceOption[];\n /** Speakers and headsets. Empty on browsers with no output routing (Safari, Firefox). */\n audioOutputs: MediaDeviceOption[];\n /** Cameras. */\n videoInputs: MediaDeviceOption[];\n /**\n * Whether labels are filled in.\n *\n * `false` means the list is real but anonymous — render a picker only after a\n * capture permission has been granted, or the user sees \"\" repeated N times.\n */\n labelsAvailable: boolean;\n /** `enumerateDevices` is unavailable in this browser. */\n supported: boolean;\n /** Re-enumerate. The hook already does this on `devicechange`. */\n refresh: () => void;\n}\n\nconst EMPTY: MediaDeviceOption[] = [];\n\n/**\n * List capture and playback devices, and keep the list fresh.\n *\n * Two things about `enumerateDevices` that decide how a picker must be built:\n *\n * 1. **Labels are gated behind permission.** Before the user grants a capture\n * permission, every `label` is `\"\"` — the list length and ids are real, the names\n * are not. A device picker rendered at that point is a column of blanks, so\n * `labelsAvailable` is exposed to gate it. Ask for the microphone first, then\n * show the picker.\n * 2. **The list changes while the page is open.** Plugging in a headset mid-recording\n * is the normal case, not an edge case, so the hook subscribes to `devicechange`\n * instead of enumerating once on mount.\n *\n * `audioOutputs` is empty on browsers with no output routing at all (Safari and\n * Firefox do not implement `setSinkId`); an empty array there means \"you cannot\n * offer this choice\", not \"no speakers\".\n *\n * @returns The device lists, whether labels are filled in, and a `refresh()`.\n *\n * @example\n * const { audioInputs, labelsAvailable } = useMediaDevices();\n * // ...after the mic permission is granted:\n * {labelsAvailable && <Select options={audioInputs.map((d) => ({ value: d.deviceId, label: d.label }))} />}\n */\nexport function useMediaDevices(): UseMediaDevicesResult {\n const [devices, setDevices] = useState<MediaDeviceOption[]>(EMPTY);\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (\n typeof navigator === \"undefined\" ||\n !navigator.mediaDevices ||\n typeof navigator.mediaDevices.enumerateDevices !== \"function\"\n ) {\n setSupported(false);\n setDevices(EMPTY);\n return;\n }\n setSupported(true);\n const media = navigator.mediaDevices;\n\n async function read(): Promise<void> {\n try {\n const list = await media.enumerateDevices();\n if (cancelled) return;\n setDevices(\n list.map((device) => ({\n deviceId: device.deviceId,\n label: device.label,\n kind: device.kind,\n groupId: device.groupId,\n })),\n );\n } catch {\n if (!cancelled) setDevices(EMPTY);\n }\n }\n\n void read();\n const onChange = (): void => void read();\n media.addEventListener?.(\"devicechange\", onChange);\n\n return () => {\n cancelled = true;\n media.removeEventListener?.(\"devicechange\", onChange);\n };\n }, [token]);\n\n return {\n devices,\n audioInputs: devices.filter((device) => device.kind === \"audioinput\"),\n audioOutputs: devices.filter((device) => device.kind === \"audiooutput\"),\n videoInputs: devices.filter((device) => device.kind === \"videoinput\"),\n labelsAvailable: devices.length > 0 && devices.some((device) => device.label !== \"\"),\n supported,\n refresh,\n };\n}\n"],"mappings":"A,uBAuCA,IAAMG,EAA6B,CAAC,EA2BpC,SAAgBC,GAAyC,CACrD,GAAM,CAACC,EAASC,IAAA,EAAcN,EAAAA,SAAAA,CAA8BG,CAAK,EAC3D,CAACI,EAAWC,IAAA,EAAgBR,EAAAA,SAAAA,CAAS,EAAK,EAC1C,CAACS,EAAOC,IAAA,EAAYV,EAAAA,SAAAA,CAAS,CAAC,EAE9BW,GAAA,EAAUV,EAAAA,YAAAA,KAAkBS,EAAU,GAAUE,EAAQ,CAAC,EAAG,CAAC,CAAC,EA4CpE,OA1CA,EAAAV,EAAA,UAAA,KAAgB,CACZ,IAAIW,EAAY,GAEhB,GACI,OAAO,UAAc,KACrB,CAAC,UAAU,cACX,OAAO,UAAU,aAAa,kBAAqB,WACrD,CACEL,EAAa,EAAK,EAClBF,EAAWH,CAAK,EAChB,MACJ,CACAK,EAAa,EAAI,EACjB,IAAMM,EAAQ,UAAU,aAExB,eAAeC,GAAsB,CACjC,GAAI,CACA,IAAMC,EAAO,MAAMF,EAAM,iBAAiB,EAC1C,GAAID,EAAW,OACfP,EACIU,EAAK,IAAK,IAAY,CAClB,SAAUC,EAAO,SACjB,MAAOA,EAAO,MACd,KAAMA,EAAO,KACb,QAASA,EAAO,OACpB,EAAE,CACN,CACJ,MAAQ,CACCJ,GAAWP,EAAWH,CAAK,CACpC,CACJ,CAEAY,EAAU,EACV,IAAMG,MAAuB,KAAKH,EAAK,EAGvC,OAFAD,EAAM,mBAAmB,eAAgBI,CAAQ,MAEpC,CACT,EAAY,GACZJ,EAAM,sBAAsB,eAAgBI,CAAQ,CACxD,CACJ,EAAG,CAACT,CAAK,CAAC,EAEH,CACH,UACA,YAAaJ,EAAQ,OAAQ,GAAWY,EAAO,OAAS,YAAY,EACpE,aAAcZ,EAAQ,OAAQ,GAAWY,EAAO,OAAS,aAAa,EACtE,YAAaZ,EAAQ,OAAQ,GAAWY,EAAO,OAAS,YAAY,EACpE,gBAAiBZ,EAAQ,OAAS,GAAKA,EAAQ,KAAM,GAAWY,EAAO,QAAU,EAAE,EACnF,YACA,SACJ,CACJ,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-media-devices.js","names":[],"sources":["../../src/hooks/use-media-devices.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** One device the browser is willing to tell us about. */\nexport interface MediaDeviceOption {\n deviceId: string;\n /**\n * Human label, or `\"\"` until permission has been granted.\n *\n * See {@link UseMediaDevicesResult.labelsAvailable} — an empty label is not a\n * bug, it is the browser refusing to fingerprint the machine.\n */\n label: string;\n kind: MediaDeviceKind;\n groupId: string;\n}\n\n/** Value returned by {@link useMediaDevices}. */\nexport interface UseMediaDevicesResult {\n /** Every device, in the order the browser listed them. */\n devices: MediaDeviceOption[];\n /** Microphones and other audio sources. */\n audioInputs: MediaDeviceOption[];\n /** Speakers and headsets. Empty on browsers with no output routing (Safari, Firefox). */\n audioOutputs: MediaDeviceOption[];\n /** Cameras. */\n videoInputs: MediaDeviceOption[];\n /**\n * Whether labels are filled in.\n *\n * `false` means the list is real but anonymous — render a picker only after a\n * capture permission has been granted, or the user sees \"\" repeated N times.\n */\n labelsAvailable: boolean;\n /** `enumerateDevices` is unavailable in this browser. */\n supported: boolean;\n /** Re-enumerate. The hook already does this on `devicechange`. */\n refresh: () => void;\n}\n\nconst EMPTY: MediaDeviceOption[] = [];\n\n/**\n * List capture and playback devices, and keep the list fresh.\n *\n * Two things about `enumerateDevices` that decide how a picker must be built:\n *\n * 1. **Labels are gated behind permission.** Before the user grants a capture\n * permission, every `label` is `\"\"` — the list length and ids are real, the names\n * are not. A device picker rendered at that point is a column of blanks, so\n * `labelsAvailable` is exposed to gate it. Ask for the microphone first, then\n * show the picker.\n * 2. **The list changes while the page is open.** Plugging in a headset mid-recording\n * is the normal case, not an edge case, so the hook subscribes to `devicechange`\n * instead of enumerating once on mount.\n *\n * `audioOutputs` is empty on browsers with no output routing at all (Safari and\n * Firefox do not implement `setSinkId`); an empty array there means \"you cannot\n * offer this choice\", not \"no speakers\".\n *\n * @returns The device lists, whether labels are filled in, and a `refresh()`.\n *\n * @example\n * const { audioInputs, labelsAvailable } = useMediaDevices();\n * // ...after the mic permission is granted:\n * {labelsAvailable && <Select options={audioInputs.map((d) => ({ value: d.deviceId, label: d.label }))} />}\n */\nexport function useMediaDevices(): UseMediaDevicesResult {\n const [devices, setDevices] = useState<MediaDeviceOption[]>(EMPTY);\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (\n typeof navigator === \"undefined\" ||\n !navigator.mediaDevices ||\n typeof navigator.mediaDevices.enumerateDevices !== \"function\"\n ) {\n setSupported(false);\n setDevices(EMPTY);\n return;\n }\n setSupported(true);\n const media = navigator.mediaDevices;\n\n async function read(): Promise<void> {\n try {\n const list = await media.enumerateDevices();\n if (cancelled) return;\n setDevices(\n list.map((device) => ({\n deviceId: device.deviceId,\n label: device.label,\n kind: device.kind,\n groupId: device.groupId,\n })),\n );\n } catch {\n if (!cancelled) setDevices(EMPTY);\n }\n }\n\n void read();\n const onChange = (): void => void read();\n media.addEventListener?.(\"devicechange\", onChange);\n\n return () => {\n cancelled = true;\n media.removeEventListener?.(\"devicechange\", onChange);\n };\n }, [token]);\n\n return {\n devices,\n audioInputs: devices.filter((device) => device.kind === \"audioinput\"),\n audioOutputs: devices.filter((device) => device.kind === \"audiooutput\"),\n videoInputs: devices.filter((device) => device.kind === \"videoinput\"),\n labelsAvailable: devices.length > 0 && devices.some((device) => device.label !== \"\"),\n supported,\n refresh,\n };\n}\n"],"mappings":";;AAuCA,IAAM,IAA6B,CAAC;AA2BpC,SAAgB,IAAyC;CACrD,IAAM,CAAC,GAAS,KAAc,EAA8B,CAAK,GAC3D,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAO,KAAY,EAAS,CAAC,GAE9B,IAAU,QAAkB,GAAU,MAAU,IAAQ,CAAC,GAAG,CAAC,CAAC;CA4CpE,OA1CA,QAAgB;EACZ,IAAI,IAAY;EAEhB,IACI,OAAO,YAAc,OACrB,CAAC,UAAU,gBACX,OAAO,UAAU,aAAa,oBAAqB,YACrD;GAEE,AADA,EAAa,EAAK,GAClB,EAAW,CAAK;GAChB;EACJ;EACA,EAAa,EAAI;EACjB,IAAM,IAAQ,UAAU;EAExB,eAAe,IAAsB;GACjC,IAAI;IACA,IAAM,IAAO,MAAM,EAAM,iBAAiB;IAC1C,IAAI,GAAW;IACf,EACI,EAAK,KAAK,OAAY;KAClB,UAAU,EAAO;KACjB,OAAO,EAAO;KACd,MAAM,EAAO;KACb,SAAS,EAAO;IACpB,EAAE,CACN;GACJ,QAAQ;IACJ,AAAK,KAAW,EAAW,CAAK;GACpC;EACJ;EAEA,EAAU;EACV,IAAM,UAAuB,KAAK,EAAK;EAGvC,OAFA,EAAM,mBAAmB,gBAAgB,CAAQ,SAEpC;GAET,AADA,IAAY,IACZ,EAAM,sBAAsB,gBAAgB,CAAQ;EACxD;CACJ,GAAG,CAAC,CAAK,CAAC,GAEH;EACH;EACA,aAAa,EAAQ,QAAQ,MAAW,EAAO,SAAS,YAAY;EACpE,cAAc,EAAQ,QAAQ,MAAW,EAAO,SAAS,aAAa;EACtE,aAAa,EAAQ,QAAQ,MAAW,EAAO,SAAS,YAAY;EACpE,iBAAiB,EAAQ,SAAS,KAAK,EAAQ,MAAM,MAAW,EAAO,UAAU,EAAE;EACnF;EACA;CACJ;AACJ"}
1
+ {"version":3,"file":"use-media-devices.js","names":["EMPTY","useMediaDevices","devices","setDevices","useState","supported","setSupported","token","setToken","refresh","useCallback","value","useEffect","cancelled","media","read","list","device","onChange"],"sources":["../../src/hooks/use-media-devices.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** One device the browser is willing to tell us about. */\nexport interface MediaDeviceOption {\n deviceId: string;\n /**\n * Human label, or `\"\"` until permission has been granted.\n *\n * See {@link UseMediaDevicesResult.labelsAvailable} — an empty label is not a\n * bug, it is the browser refusing to fingerprint the machine.\n */\n label: string;\n kind: MediaDeviceKind;\n groupId: string;\n}\n\n/** Value returned by {@link useMediaDevices}. */\nexport interface UseMediaDevicesResult {\n /** Every device, in the order the browser listed them. */\n devices: MediaDeviceOption[];\n /** Microphones and other audio sources. */\n audioInputs: MediaDeviceOption[];\n /** Speakers and headsets. Empty on browsers with no output routing (Safari, Firefox). */\n audioOutputs: MediaDeviceOption[];\n /** Cameras. */\n videoInputs: MediaDeviceOption[];\n /**\n * Whether labels are filled in.\n *\n * `false` means the list is real but anonymous — render a picker only after a\n * capture permission has been granted, or the user sees \"\" repeated N times.\n */\n labelsAvailable: boolean;\n /** `enumerateDevices` is unavailable in this browser. */\n supported: boolean;\n /** Re-enumerate. The hook already does this on `devicechange`. */\n refresh: () => void;\n}\n\nconst EMPTY: MediaDeviceOption[] = [];\n\n/**\n * List capture and playback devices, and keep the list fresh.\n *\n * Two things about `enumerateDevices` that decide how a picker must be built:\n *\n * 1. **Labels are gated behind permission.** Before the user grants a capture\n * permission, every `label` is `\"\"` — the list length and ids are real, the names\n * are not. A device picker rendered at that point is a column of blanks, so\n * `labelsAvailable` is exposed to gate it. Ask for the microphone first, then\n * show the picker.\n * 2. **The list changes while the page is open.** Plugging in a headset mid-recording\n * is the normal case, not an edge case, so the hook subscribes to `devicechange`\n * instead of enumerating once on mount.\n *\n * `audioOutputs` is empty on browsers with no output routing at all (Safari and\n * Firefox do not implement `setSinkId`); an empty array there means \"you cannot\n * offer this choice\", not \"no speakers\".\n *\n * @returns The device lists, whether labels are filled in, and a `refresh()`.\n *\n * @example\n * const { audioInputs, labelsAvailable } = useMediaDevices();\n * // ...after the mic permission is granted:\n * {labelsAvailable && <Select options={audioInputs.map((d) => ({ value: d.deviceId, label: d.label }))} />}\n */\nexport function useMediaDevices(): UseMediaDevicesResult {\n const [devices, setDevices] = useState<MediaDeviceOption[]>(EMPTY);\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (\n typeof navigator === \"undefined\" ||\n !navigator.mediaDevices ||\n typeof navigator.mediaDevices.enumerateDevices !== \"function\"\n ) {\n setSupported(false);\n setDevices(EMPTY);\n return;\n }\n setSupported(true);\n const media = navigator.mediaDevices;\n\n async function read(): Promise<void> {\n try {\n const list = await media.enumerateDevices();\n if (cancelled) return;\n setDevices(\n list.map((device) => ({\n deviceId: device.deviceId,\n label: device.label,\n kind: device.kind,\n groupId: device.groupId,\n })),\n );\n } catch {\n if (!cancelled) setDevices(EMPTY);\n }\n }\n\n void read();\n const onChange = (): void => void read();\n media.addEventListener?.(\"devicechange\", onChange);\n\n return () => {\n cancelled = true;\n media.removeEventListener?.(\"devicechange\", onChange);\n };\n }, [token]);\n\n return {\n devices,\n audioInputs: devices.filter((device) => device.kind === \"audioinput\"),\n audioOutputs: devices.filter((device) => device.kind === \"audiooutput\"),\n videoInputs: devices.filter((device) => device.kind === \"videoinput\"),\n labelsAvailable: devices.length > 0 && devices.some((device) => device.label !== \"\"),\n supported,\n refresh,\n };\n}\n"],"mappings":";;AAuCA,IAAMA,IAA6B,CAAC;AA2BpC,SAAgBC,IAAyC;CACrD,IAAM,CAACC,GAASC,KAAcC,EAA8BJ,CAAK,GAC3D,CAACK,GAAWC,KAAgBF,EAAS,EAAK,GAC1C,CAACG,GAAOC,KAAYJ,EAAS,CAAC,GAE9BK,IAAUC,QAAkBF,GAAU,MAAUG,IAAQ,CAAC,GAAG,CAAC,CAAC;CA4CpE,OA1CAC,QAAgB;EACZ,IAAIC,IAAY;EAEhB,IACI,OAAO,YAAc,OACrB,CAAC,UAAU,gBACX,OAAO,UAAU,aAAa,oBAAqB,YACrD;GAEE,AADAP,EAAa,EAAK,GAClBH,EAAWH,CAAK;GAChB;EACJ;EACA,EAAa,EAAI;EACjB,IAAMc,IAAQ,UAAU;EAExB,eAAeC,IAAsB;GACjC,IAAI;IACA,IAAMC,IAAO,MAAMF,EAAM,iBAAiB;IAC1C,IAAID,GAAW;IACf,EACIG,EAAK,KAAK,OAAY;KAClB,UAAUC,EAAO;KACjB,OAAOA,EAAO;KACd,MAAMA,EAAO;KACb,SAASA,EAAO;IACpB,EAAE,CACN;GACJ,QAAQ;IACJ,AAAKJ,KAAWV,EAAWH,CAAK;GACpC;EACJ;EAEA,EAAU;EACV,IAAMkB,UAAuB,KAAKH,EAAK;EAGvC,OAFAD,EAAM,mBAAmB,gBAAgBI,CAAQ,SAEpC;GAET,AADA,IAAY,IACZJ,EAAM,sBAAsB,gBAAgBI,CAAQ;EACxD;CACJ,GAAG,CAACX,CAAK,CAAC,GAEH;EACH;EACA,aAAaL,EAAQ,QAAQ,MAAWe,EAAO,SAAS,YAAY;EACpE,cAAcf,EAAQ,QAAQ,MAAWe,EAAO,SAAS,aAAa;EACtE,aAAaf,EAAQ,QAAQ,MAAWe,EAAO,SAAS,YAAY;EACpE,iBAAiBf,EAAQ,SAAS,KAAKA,EAAQ,MAAM,MAAWe,EAAO,UAAU,EAAE;EACnF;EACA;CACJ;AACJ"}
@@ -1,2 +1,2 @@
1
- let e=require("react");function t(t){let[n,r]=(0,e.useState)(`unknown`),[i,a]=(0,e.useState)(!1),[o,s]=(0,e.useState)(0),c=(0,e.useCallback)(()=>s(e=>e+1),[]);return(0,e.useEffect)(()=>{let e=!1,n=null,i=()=>{!e&&n&&r(n.state)};async function o(){if(typeof navigator>`u`||!navigator.permissions?.query){e||(a(!1),r(`unknown`));return}try{if(n=await navigator.permissions.query({name:t}),e)return;a(!0),r(n.state),n.addEventListener(`change`,i)}catch{e||(a(!1),r(`unknown`))}}return o(),()=>{e=!0,n?.removeEventListener(`change`,i)}},[t,o]),{state:n,supported:i,refresh:c}}exports.useMediaPermission=t;
1
+ let e=require("react");function t(t){let[n,r]=(0,e.useState)(`unknown`),[i,a]=(0,e.useState)(!1),[o,s]=(0,e.useState)(0),c=(0,e.useCallback)(()=>s(e=>e+1),[]);return(0,e.useEffect)(()=>{let e=!1,n=null,i=()=>{!e&&n&&r(n.state)};async function o(){if(typeof navigator>`u`||!navigator.permissions?.query)e||(a(!1),r(`unknown`));else try{if(n=await navigator.permissions.query({name:t}),e)return;a(!0),r(n.state),n.addEventListener(`change`,i)}catch{e||(a(!1),r(`unknown`))}}return o(),()=>{e=!0,n?.removeEventListener(`change`,i)}},[t,o]),{state:n,supported:i,refresh:c}}exports.useMediaPermission=t;
2
2
  //# sourceMappingURL=use-media-permission.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-media-permission.cjs","names":[],"sources":["../../src/hooks/use-media-permission.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** Which capture permission to observe. */\nexport type MediaPermissionName = \"microphone\" | \"camera\";\n\n/**\n * Permission state, including the two cases the browser prompt cannot tell you\n * apart on its own.\n *\n * - `\"unknown\"` — the Permissions API is unavailable (Safari does not report\n * `microphone`), so the only way to learn the answer is to ask for the device.\n * - `\"prompt\"` — never asked. Asking now shows the browser prompt.\n * - `\"granted\"` / `\"denied\"` — settled. `\"denied\"` is **sticky**: calling\n * `getUserMedia` again does not re-prompt, it rejects immediately.\n */\nexport type MediaPermissionState = \"unknown\" | \"prompt\" | \"granted\" | \"denied\";\n\n/** Value returned by {@link useMediaPermission}. */\nexport interface UseMediaPermissionResult {\n /** Current state. Updates live when the user changes it in browser settings. */\n state: MediaPermissionState;\n /** Whether the Permissions API could answer at all. */\n supported: boolean;\n /** Re-read the permission. Rarely needed — the hook subscribes to changes. */\n refresh: () => void;\n}\n\n/**\n * Read a capture permission **without triggering the prompt**.\n *\n * This is the piece that makes a good permission flow possible. `getUserMedia` is\n * the only way to *get* a device, but calling it is also the only way to *ask*, and\n * a prompt fired on page load — before the user has pressed anything — is the\n * single most reliable way to earn a permanent \"Block\". Reading the state first\n * lets a page explain why it needs the microphone, and only then ask.\n *\n * It also separates \"never asked\" from \"denied\", which matters because they need\n * opposite UI: `\"prompt\"` gets a button, `\"denied\"` gets instructions for the\n * browser's site settings, since no amount of clicking will re-prompt.\n *\n * Safari does not expose `microphone` to the Permissions API and throws on the\n * query, which surfaces as `state: \"unknown\"` and `supported: false` — treat that\n * as \"you will have to ask to find out\", not as an error.\n *\n * @param name - Which permission to observe.\n * @returns The live state, whether it could be read, and a manual `refresh()`.\n *\n * @example\n * const { state } = useMediaPermission(\"microphone\");\n * if (state === \"denied\") return <p>Libere o microfone nas configurações do site.</p>;\n * return <button onClick={start}>Gravar</button>;\n */\nexport function useMediaPermission(name: MediaPermissionName): UseMediaPermissionResult {\n const [state, setState] = useState<MediaPermissionState>(\"unknown\");\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n let status: PermissionStatus | null = null;\n const onChange = (): void => {\n if (!cancelled && status) setState(status.state as MediaPermissionState);\n };\n\n async function read(): Promise<void> {\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n return;\n }\n try {\n status = await navigator.permissions.query({\n name: name as PermissionName,\n });\n if (cancelled) return;\n setSupported(true);\n setState(status.state as MediaPermissionState);\n status.addEventListener(\"change\", onChange);\n } catch {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n }\n }\n\n void read();\n\n return () => {\n cancelled = true;\n status?.removeEventListener(\"change\", onChange);\n };\n }, [name, token]);\n\n return { state, supported, refresh };\n}\n"],"mappings":"uBAoDA,SAAgB,EAAmB,EAAqD,CACpF,GAAM,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAA+B,SAAS,EAC5D,CAAC,EAAW,IAAA,EAAgB,EAAA,SAAA,CAAS,EAAK,EAC1C,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAS,CAAC,EAE9B,GAAA,EAAU,EAAA,YAAA,KAAkB,EAAU,GAAU,EAAQ,CAAC,EAAG,CAAC,CAAC,EAyCpE,OAvCA,EAAA,EAAA,UAAA,KAAgB,CACZ,IAAI,EAAY,GACZ,EAAkC,KAChC,MAAuB,CACrB,CAAC,GAAa,GAAQ,EAAS,EAAO,KAA6B,CAC3E,EAEA,eAAe,GAAsB,CACjC,GAAI,OAAO,UAAc,KAAe,CAAC,UAAU,aAAa,MAAO,CAC9D,IACD,EAAa,EAAK,EAClB,EAAS,SAAS,GAEtB,MACJ,CACA,GAAI,CAIA,GAHA,EAAS,MAAM,UAAU,YAAY,MAAM,CACjC,MACV,CAAC,EACG,EAAW,OACf,EAAa,EAAI,EACjB,EAAS,EAAO,KAA6B,EAC7C,EAAO,iBAAiB,SAAU,CAAQ,CAC9C,MAAQ,CACC,IACD,EAAa,EAAK,EAClB,EAAS,SAAS,EAE1B,CACJ,CAIA,OAFA,EAAU,MAEG,CACT,EAAY,GACZ,GAAQ,oBAAoB,SAAU,CAAQ,CAClD,CACJ,EAAG,CAAC,EAAM,CAAK,CAAC,EAET,CAAE,QAAO,YAAW,SAAQ,CACvC"}
1
+ {"version":3,"file":"use-media-permission.cjs","names":["useState","useCallback","react","useMediaPermission","state","setState","supported","setSupported","token","setToken","refresh","value","cancelled","status","onChange","read","name"],"sources":["../../src/hooks/use-media-permission.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** Which capture permission to observe. */\nexport type MediaPermissionName = \"microphone\" | \"camera\";\n\n/**\n * Permission state, including the two cases the browser prompt cannot tell you\n * apart on its own.\n *\n * - `\"unknown\"` — the Permissions API is unavailable (Safari does not report\n * `microphone`), so the only way to learn the answer is to ask for the device.\n * - `\"prompt\"` — never asked. Asking now shows the browser prompt.\n * - `\"granted\"` / `\"denied\"` — settled. `\"denied\"` is **sticky**: calling\n * `getUserMedia` again does not re-prompt, it rejects immediately.\n */\nexport type MediaPermissionState = \"unknown\" | \"prompt\" | \"granted\" | \"denied\";\n\n/** Value returned by {@link useMediaPermission}. */\nexport interface UseMediaPermissionResult {\n /** Current state. Updates live when the user changes it in browser settings. */\n state: MediaPermissionState;\n /** Whether the Permissions API could answer at all. */\n supported: boolean;\n /** Re-read the permission. Rarely needed — the hook subscribes to changes. */\n refresh: () => void;\n}\n\n/**\n * Read a capture permission **without triggering the prompt**.\n *\n * This is the piece that makes a good permission flow possible. `getUserMedia` is\n * the only way to *get* a device, but calling it is also the only way to *ask*, and\n * a prompt fired on page load — before the user has pressed anything — is the\n * single most reliable way to earn a permanent \"Block\". Reading the state first\n * lets a page explain why it needs the microphone, and only then ask.\n *\n * It also separates \"never asked\" from \"denied\", which matters because they need\n * opposite UI: `\"prompt\"` gets a button, `\"denied\"` gets instructions for the\n * browser's site settings, since no amount of clicking will re-prompt.\n *\n * Safari does not expose `microphone` to the Permissions API and throws on the\n * query, which surfaces as `state: \"unknown\"` and `supported: false` — treat that\n * as \"you will have to ask to find out\", not as an error.\n *\n * @param name - Which permission to observe.\n * @returns The live state, whether it could be read, and a manual `refresh()`.\n *\n * @example\n * const { state } = useMediaPermission(\"microphone\");\n * if (state === \"denied\") return <p>Libere o microfone nas configurações do site.</p>;\n * return <button onClick={start}>Gravar</button>;\n */\nexport function useMediaPermission(name: MediaPermissionName): UseMediaPermissionResult {\n const [state, setState] = useState<MediaPermissionState>(\"unknown\");\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n let status: PermissionStatus | null = null;\n const onChange = (): void => {\n if (!cancelled && status) setState(status.state as MediaPermissionState);\n };\n\n async function read(): Promise<void> {\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n return;\n }\n try {\n status = await navigator.permissions.query({\n name: name as PermissionName,\n });\n if (cancelled) return;\n setSupported(true);\n setState(status.state as MediaPermissionState);\n status.addEventListener(\"change\", onChange);\n } catch {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n }\n }\n\n void read();\n\n return () => {\n cancelled = true;\n status?.removeEventListener(\"change\", onChange);\n };\n }, [name, token]);\n\n return { state, supported, refresh };\n}\n"],"mappings":"A,uBAoDA,SAAgBG,EAAmB,EAAqD,CACpF,GAAM,CAACC,EAAOC,IAAA,EAAYL,EAAAA,SAAAA,CAA+B,SAAS,EAC5D,CAACM,EAAWC,IAAA,EAAgBP,EAAAA,SAAAA,CAAS,EAAK,EAC1C,CAACQ,EAAOC,IAAA,EAAYT,EAAAA,SAAAA,CAAS,CAAC,EAE9BU,GAAA,EAAUT,EAAAA,YAAAA,KAAkBQ,EAAU,GAAUE,EAAQ,CAAC,EAAG,CAAC,CAAC,EAyCpE,OAvCA,EAAAT,EAAA,UAAA,KAAgB,CACZ,IAAIU,EAAY,GACZC,EAAkC,KAChCC,MAAuB,CACrB,CAACF,GAAaC,GAAQR,EAASQ,EAAO,KAA6B,CAC3E,EAEA,eAAeE,GAAsB,CACjC,GAAI,OAAO,UAAc,KAAe,CAAC,UAAU,aAAa,MACvDH,IACDL,EAAa,EAAK,EAClBF,EAAS,SAAS,QAI1B,GAAI,CAIA,GAHA,EAAS,MAAM,UAAU,YAAY,MAAM,CACjC,MACV,CAAC,EACGO,EAAW,OACfL,EAAa,EAAI,EACjBF,EAASQ,EAAO,KAA6B,EAC7CA,EAAO,iBAAiB,SAAUC,CAAQ,CAC9C,MAAQ,CACCF,IACDL,EAAa,EAAK,EAClBF,EAAS,SAAS,EAE1B,CACJ,CAIA,OAFAU,EAAU,MAEG,CACT,EAAY,GACZF,GAAQ,oBAAoB,SAAUC,CAAQ,CAClD,CACJ,EAAG,CAACE,EAAMR,CAAK,CAAC,EAET,CAAE,QAAO,YAAW,SAAQ,CACvC,C"}
@@ -7,11 +7,8 @@ function r(r) {
7
7
  !e && t && a(t.state);
8
8
  };
9
9
  async function i() {
10
- if (typeof navigator > "u" || !navigator.permissions?.query) {
11
- e || (s(!1), a("unknown"));
12
- return;
13
- }
14
- try {
10
+ if (typeof navigator > "u" || !navigator.permissions?.query) e || (s(!1), a("unknown"));
11
+ else try {
15
12
  if (t = await navigator.permissions.query({ name: r }), e) return;
16
13
  s(!0), a(t.state), t.addEventListener("change", n);
17
14
  } catch {
@@ -1 +1 @@
1
- {"version":3,"file":"use-media-permission.js","names":[],"sources":["../../src/hooks/use-media-permission.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** Which capture permission to observe. */\nexport type MediaPermissionName = \"microphone\" | \"camera\";\n\n/**\n * Permission state, including the two cases the browser prompt cannot tell you\n * apart on its own.\n *\n * - `\"unknown\"` — the Permissions API is unavailable (Safari does not report\n * `microphone`), so the only way to learn the answer is to ask for the device.\n * - `\"prompt\"` — never asked. Asking now shows the browser prompt.\n * - `\"granted\"` / `\"denied\"` — settled. `\"denied\"` is **sticky**: calling\n * `getUserMedia` again does not re-prompt, it rejects immediately.\n */\nexport type MediaPermissionState = \"unknown\" | \"prompt\" | \"granted\" | \"denied\";\n\n/** Value returned by {@link useMediaPermission}. */\nexport interface UseMediaPermissionResult {\n /** Current state. Updates live when the user changes it in browser settings. */\n state: MediaPermissionState;\n /** Whether the Permissions API could answer at all. */\n supported: boolean;\n /** Re-read the permission. Rarely needed — the hook subscribes to changes. */\n refresh: () => void;\n}\n\n/**\n * Read a capture permission **without triggering the prompt**.\n *\n * This is the piece that makes a good permission flow possible. `getUserMedia` is\n * the only way to *get* a device, but calling it is also the only way to *ask*, and\n * a prompt fired on page load — before the user has pressed anything — is the\n * single most reliable way to earn a permanent \"Block\". Reading the state first\n * lets a page explain why it needs the microphone, and only then ask.\n *\n * It also separates \"never asked\" from \"denied\", which matters because they need\n * opposite UI: `\"prompt\"` gets a button, `\"denied\"` gets instructions for the\n * browser's site settings, since no amount of clicking will re-prompt.\n *\n * Safari does not expose `microphone` to the Permissions API and throws on the\n * query, which surfaces as `state: \"unknown\"` and `supported: false` — treat that\n * as \"you will have to ask to find out\", not as an error.\n *\n * @param name - Which permission to observe.\n * @returns The live state, whether it could be read, and a manual `refresh()`.\n *\n * @example\n * const { state } = useMediaPermission(\"microphone\");\n * if (state === \"denied\") return <p>Libere o microfone nas configurações do site.</p>;\n * return <button onClick={start}>Gravar</button>;\n */\nexport function useMediaPermission(name: MediaPermissionName): UseMediaPermissionResult {\n const [state, setState] = useState<MediaPermissionState>(\"unknown\");\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n let status: PermissionStatus | null = null;\n const onChange = (): void => {\n if (!cancelled && status) setState(status.state as MediaPermissionState);\n };\n\n async function read(): Promise<void> {\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n return;\n }\n try {\n status = await navigator.permissions.query({\n name: name as PermissionName,\n });\n if (cancelled) return;\n setSupported(true);\n setState(status.state as MediaPermissionState);\n status.addEventListener(\"change\", onChange);\n } catch {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n }\n }\n\n void read();\n\n return () => {\n cancelled = true;\n status?.removeEventListener(\"change\", onChange);\n };\n }, [name, token]);\n\n return { state, supported, refresh };\n}\n"],"mappings":";;AAoDA,SAAgB,EAAmB,GAAqD;CACpF,IAAM,CAAC,GAAO,KAAY,EAA+B,SAAS,GAC5D,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAO,KAAY,EAAS,CAAC,GAE9B,IAAU,QAAkB,GAAU,MAAU,IAAQ,CAAC,GAAG,CAAC,CAAC;CAyCpE,OAvCA,QAAgB;EACZ,IAAI,IAAY,IACZ,IAAkC,MAChC,UAAuB;GACzB,AAAI,CAAC,KAAa,KAAQ,EAAS,EAAO,KAA6B;EAC3E;EAEA,eAAe,IAAsB;GACjC,IAAI,OAAO,YAAc,OAAe,CAAC,UAAU,aAAa,OAAO;IACnE,AAAK,MACD,EAAa,EAAK,GAClB,EAAS,SAAS;IAEtB;GACJ;GACA,IAAI;IAIA,IAHA,IAAS,MAAM,UAAU,YAAY,MAAM,EACjC,QACV,CAAC,GACG,GAAW;IAGf,AAFA,EAAa,EAAI,GACjB,EAAS,EAAO,KAA6B,GAC7C,EAAO,iBAAiB,UAAU,CAAQ;GAC9C,QAAQ;IACJ,AAAK,MACD,EAAa,EAAK,GAClB,EAAS,SAAS;GAE1B;EACJ;EAIA,OAFA,EAAU,SAEG;GAET,AADA,IAAY,IACZ,GAAQ,oBAAoB,UAAU,CAAQ;EAClD;CACJ,GAAG,CAAC,GAAM,CAAK,CAAC,GAET;EAAE;EAAO;EAAW;CAAQ;AACvC"}
1
+ {"version":3,"file":"use-media-permission.js","names":["useMediaPermission","state","setState","useState","supported","setSupported","token","setToken","refresh","useCallback","value","useEffect","cancelled","status","onChange","read","name"],"sources":["../../src/hooks/use-media-permission.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\n/** Which capture permission to observe. */\nexport type MediaPermissionName = \"microphone\" | \"camera\";\n\n/**\n * Permission state, including the two cases the browser prompt cannot tell you\n * apart on its own.\n *\n * - `\"unknown\"` — the Permissions API is unavailable (Safari does not report\n * `microphone`), so the only way to learn the answer is to ask for the device.\n * - `\"prompt\"` — never asked. Asking now shows the browser prompt.\n * - `\"granted\"` / `\"denied\"` — settled. `\"denied\"` is **sticky**: calling\n * `getUserMedia` again does not re-prompt, it rejects immediately.\n */\nexport type MediaPermissionState = \"unknown\" | \"prompt\" | \"granted\" | \"denied\";\n\n/** Value returned by {@link useMediaPermission}. */\nexport interface UseMediaPermissionResult {\n /** Current state. Updates live when the user changes it in browser settings. */\n state: MediaPermissionState;\n /** Whether the Permissions API could answer at all. */\n supported: boolean;\n /** Re-read the permission. Rarely needed — the hook subscribes to changes. */\n refresh: () => void;\n}\n\n/**\n * Read a capture permission **without triggering the prompt**.\n *\n * This is the piece that makes a good permission flow possible. `getUserMedia` is\n * the only way to *get* a device, but calling it is also the only way to *ask*, and\n * a prompt fired on page load — before the user has pressed anything — is the\n * single most reliable way to earn a permanent \"Block\". Reading the state first\n * lets a page explain why it needs the microphone, and only then ask.\n *\n * It also separates \"never asked\" from \"denied\", which matters because they need\n * opposite UI: `\"prompt\"` gets a button, `\"denied\"` gets instructions for the\n * browser's site settings, since no amount of clicking will re-prompt.\n *\n * Safari does not expose `microphone` to the Permissions API and throws on the\n * query, which surfaces as `state: \"unknown\"` and `supported: false` — treat that\n * as \"you will have to ask to find out\", not as an error.\n *\n * @param name - Which permission to observe.\n * @returns The live state, whether it could be read, and a manual `refresh()`.\n *\n * @example\n * const { state } = useMediaPermission(\"microphone\");\n * if (state === \"denied\") return <p>Libere o microfone nas configurações do site.</p>;\n * return <button onClick={start}>Gravar</button>;\n */\nexport function useMediaPermission(name: MediaPermissionName): UseMediaPermissionResult {\n const [state, setState] = useState<MediaPermissionState>(\"unknown\");\n const [supported, setSupported] = useState(false);\n const [token, setToken] = useState(0);\n\n const refresh = useCallback(() => setToken((value) => value + 1), []);\n\n useEffect(() => {\n let cancelled = false;\n let status: PermissionStatus | null = null;\n const onChange = (): void => {\n if (!cancelled && status) setState(status.state as MediaPermissionState);\n };\n\n async function read(): Promise<void> {\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n return;\n }\n try {\n status = await navigator.permissions.query({\n name: name as PermissionName,\n });\n if (cancelled) return;\n setSupported(true);\n setState(status.state as MediaPermissionState);\n status.addEventListener(\"change\", onChange);\n } catch {\n if (!cancelled) {\n setSupported(false);\n setState(\"unknown\");\n }\n }\n }\n\n void read();\n\n return () => {\n cancelled = true;\n status?.removeEventListener(\"change\", onChange);\n };\n }, [name, token]);\n\n return { state, supported, refresh };\n}\n"],"mappings":";;AAoDA,SAAgBA,EAAmB,GAAqD;CACpF,IAAM,CAACC,GAAOC,KAAYC,EAA+B,SAAS,GAC5D,CAACC,GAAWC,KAAgBF,EAAS,EAAK,GAC1C,CAACG,GAAOC,KAAYJ,EAAS,CAAC,GAE9BK,IAAUC,QAAkBF,GAAU,MAAUG,IAAQ,CAAC,GAAG,CAAC,CAAC;CAyCpE,OAvCAC,QAAgB;EACZ,IAAIC,IAAY,IACZC,IAAkC,MAChCC,UAAuB;GACzB,AAAI,CAACF,KAAaC,KAAQX,EAASW,EAAO,KAA6B;EAC3E;EAEA,eAAeE,IAAsB;GACjC,IAAI,OAAO,YAAc,OAAe,CAAC,UAAU,aAAa,OAC5D,AAAKH,MACDP,EAAa,EAAK,GAClBH,EAAS,SAAS;QAI1B,IAAI;IAIA,IAHA,IAAS,MAAM,UAAU,YAAY,MAAM,EACjC,QACV,CAAC,GACGU,GAAW;IAGf,AAFAP,EAAa,EAAI,GACjBH,EAASW,EAAO,KAA6B,GAC7CA,EAAO,iBAAiB,UAAUC,CAAQ;GAC9C,QAAQ;IACJ,AAAKF,MACDP,EAAa,EAAK,GAClBH,EAAS,SAAS;GAE1B;EACJ;EAIA,OAFAa,EAAU,SAEG;GAET,AADA,IAAY,IACZF,GAAQ,oBAAoB,UAAUC,CAAQ;EAClD;CACJ,GAAG,CAACE,GAAMV,CAAK,CAAC,GAET;EAAE;EAAO;EAAW;CAAQ;AACvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-media-query.cjs","names":[],"sources":["../../src/hooks/use-media-query.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Subscribe to a CSS media query and re-render on match changes.\n *\n * @param query - A standard CSS media query string, e.g. \"(max-width: 768px)\".\n * @returns True when the query matches.\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const list = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent): void => setMatches(event.matches);\n setMatches(list.matches);\n list.addEventListener(\"change\", handler);\n return () => list.removeEventListener(\"change\", handler);\n }, [query]);\n\n return matches;\n}\n"],"mappings":"uBAQA,SAAgB,EAAc,EAAwB,CAClD,GAAM,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,KACtB,OAAO,OAAW,IAAoB,GACnC,OAAO,WAAW,CAAK,CAAC,CAAC,OACnC,EAWD,OATA,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,OAAO,OAAW,IAAa,OACnC,IAAM,EAAO,OAAO,WAAW,CAAK,EAC9B,EAAW,GAAqC,EAAW,EAAM,OAAO,EAG9E,OAFA,EAAW,EAAK,OAAO,EACvB,EAAK,iBAAiB,SAAU,CAAO,MAC1B,EAAK,oBAAoB,SAAU,CAAO,CAC3D,EAAG,CAAC,CAAK,CAAC,EAEH,CACX"}
1
+ {"version":3,"file":"use-media-query.cjs","names":["useState","react","useMediaQuery","matches","setMatches","query","list","handler","event"],"sources":["../../src/hooks/use-media-query.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Subscribe to a CSS media query and re-render on match changes.\n *\n * @param query - A standard CSS media query string, e.g. \"(max-width: 768px)\".\n * @returns True when the query matches.\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const list = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent): void => setMatches(event.matches);\n setMatches(list.matches);\n list.addEventListener(\"change\", handler);\n return () => list.removeEventListener(\"change\", handler);\n }, [query]);\n\n return matches;\n}\n"],"mappings":"A,uBAQA,SAAgBE,EAAc,EAAwB,CAClD,GAAM,CAACC,EAASC,IAAA,EAAcJ,EAAAA,SAAAA,KACtB,OAAO,OAAW,IAAoB,GACnC,OAAO,WAAWK,CAAK,CAAC,CAAC,OACnC,EAWD,OATA,EAAAJ,EAAA,UAAA,KAAgB,CACZ,GAAI,OAAO,OAAW,IAAa,OACnC,IAAMK,EAAO,OAAO,WAAWD,CAAK,EAC9BE,EAAW,GAAqCH,EAAWI,EAAM,OAAO,EAG9E,OAFAJ,EAAWE,EAAK,OAAO,EACvBA,EAAK,iBAAiB,SAAUC,CAAO,MAC1BD,EAAK,oBAAoB,SAAUC,CAAO,CAC3D,EAAG,CAACF,CAAK,CAAC,EAEHF,CACX,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-media-query.js","names":[],"sources":["../../src/hooks/use-media-query.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Subscribe to a CSS media query and re-render on match changes.\n *\n * @param query - A standard CSS media query string, e.g. \"(max-width: 768px)\".\n * @returns True when the query matches.\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const list = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent): void => setMatches(event.matches);\n setMatches(list.matches);\n list.addEventListener(\"change\", handler);\n return () => list.removeEventListener(\"change\", handler);\n }, [query]);\n\n return matches;\n}\n"],"mappings":";;AAQA,SAAgB,EAAc,GAAwB;CAClD,IAAM,CAAC,GAAS,KAAc,QACtB,OAAO,SAAW,MAAoB,KACnC,OAAO,WAAW,CAAK,CAAC,CAAC,OACnC;CAWD,OATA,QAAgB;EACZ,IAAI,OAAO,SAAW,KAAa;EACnC,IAAM,IAAO,OAAO,WAAW,CAAK,GAC9B,KAAW,MAAqC,EAAW,EAAM,OAAO;EAG9E,OAFA,EAAW,EAAK,OAAO,GACvB,EAAK,iBAAiB,UAAU,CAAO,SAC1B,EAAK,oBAAoB,UAAU,CAAO;CAC3D,GAAG,CAAC,CAAK,CAAC,GAEH;AACX"}
1
+ {"version":3,"file":"use-media-query.js","names":["useMediaQuery","matches","setMatches","useState","query","useEffect","list","handler","event"],"sources":["../../src/hooks/use-media-query.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Subscribe to a CSS media query and re-render on match changes.\n *\n * @param query - A standard CSS media query string, e.g. \"(max-width: 768px)\".\n * @returns True when the query matches.\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const list = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent): void => setMatches(event.matches);\n setMatches(list.matches);\n list.addEventListener(\"change\", handler);\n return () => list.removeEventListener(\"change\", handler);\n }, [query]);\n\n return matches;\n}\n"],"mappings":";;AAQA,SAAgBA,EAAc,GAAwB;CAClD,IAAM,CAACC,GAASC,KAAcC,QACtB,OAAO,SAAW,MAAoB,KACnC,OAAO,WAAWC,CAAK,CAAC,CAAC,OACnC;CAWD,OATAC,QAAgB;EACZ,IAAI,OAAO,SAAW,KAAa;EACnC,IAAMC,IAAO,OAAO,WAAWF,CAAK,GAC9BG,KAAW,MAAqCL,EAAWM,EAAM,OAAO;EAG9E,OAFAN,EAAWI,EAAK,OAAO,GACvBA,EAAK,iBAAiB,UAAUC,CAAO,SAC1BD,EAAK,oBAAoB,UAAUC,CAAO;CAC3D,GAAG,CAACH,CAAK,CAAC,GAEHH;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-object-url.cjs","names":[],"sources":["../../src/hooks/use-object-url.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Create an object URL for a `Blob` (or `File`) and revoke it automatically on\n * unmount or whenever the blob changes. Returns `null` for nullish input.\n *\n * @param blob - the blob to expose as an object URL, or `null`/`undefined`.\n * @returns The object URL string, or `null` when there is no blob.\n */\nexport function useObjectUrl(blob: Blob | null | undefined): string | null {\n const [url, setUrl] = useState<string | null>(null);\n\n useEffect(() => {\n if (!blob) {\n setUrl(null);\n return;\n }\n const next = URL.createObjectURL(blob);\n setUrl(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n return url;\n}\n"],"mappings":"uBASA,SAAgB,EAAa,EAA8C,CACvE,GAAM,CAAC,EAAK,IAAA,EAAU,EAAA,SAAA,CAAwB,IAAI,EAYlD,OAVA,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,EAAM,CACP,EAAO,IAAI,EACX,MACJ,CACA,IAAM,EAAO,IAAI,gBAAgB,CAAI,EAErC,OADA,EAAO,CAAI,MACE,IAAI,gBAAgB,CAAI,CACzC,EAAG,CAAC,CAAI,CAAC,EAEF,CACX"}
1
+ {"version":3,"file":"use-object-url.cjs","names":["useState","react","useObjectUrl","url","setUrl","blob","next"],"sources":["../../src/hooks/use-object-url.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Create an object URL for a `Blob` (or `File`) and revoke it automatically on\n * unmount or whenever the blob changes. Returns `null` for nullish input.\n *\n * @param blob - the blob to expose as an object URL, or `null`/`undefined`.\n * @returns The object URL string, or `null` when there is no blob.\n */\nexport function useObjectUrl(blob: Blob | null | undefined): string | null {\n const [url, setUrl] = useState<string | null>(null);\n\n useEffect(() => {\n if (!blob) {\n setUrl(null);\n return;\n }\n const next = URL.createObjectURL(blob);\n setUrl(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n return url;\n}\n"],"mappings":"A,uBASA,SAAgBE,EAAa,EAA8C,CACvE,GAAM,CAACC,EAAKC,IAAA,EAAUJ,EAAAA,SAAAA,CAAwB,IAAI,EAYlD,OAVA,EAAAC,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACI,EAAM,CACPD,EAAO,IAAI,EACX,MACJ,CACA,IAAME,EAAO,IAAI,gBAAgBD,CAAI,EAErC,OADAD,EAAOE,CAAI,MACE,IAAI,gBAAgBA,CAAI,CACzC,EAAG,CAACD,CAAI,CAAC,EAEFF,CACX,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-object-url.js","names":[],"sources":["../../src/hooks/use-object-url.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Create an object URL for a `Blob` (or `File`) and revoke it automatically on\n * unmount or whenever the blob changes. Returns `null` for nullish input.\n *\n * @param blob - the blob to expose as an object URL, or `null`/`undefined`.\n * @returns The object URL string, or `null` when there is no blob.\n */\nexport function useObjectUrl(blob: Blob | null | undefined): string | null {\n const [url, setUrl] = useState<string | null>(null);\n\n useEffect(() => {\n if (!blob) {\n setUrl(null);\n return;\n }\n const next = URL.createObjectURL(blob);\n setUrl(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n return url;\n}\n"],"mappings":";;AASA,SAAgB,EAAa,GAA8C;CACvE,IAAM,CAAC,GAAK,KAAU,EAAwB,IAAI;CAYlD,OAVA,QAAgB;EACZ,IAAI,CAAC,GAAM;GACP,EAAO,IAAI;GACX;EACJ;EACA,IAAM,IAAO,IAAI,gBAAgB,CAAI;EAErC,OADA,EAAO,CAAI,SACE,IAAI,gBAAgB,CAAI;CACzC,GAAG,CAAC,CAAI,CAAC,GAEF;AACX"}
1
+ {"version":3,"file":"use-object-url.js","names":["useObjectUrl","url","setUrl","useState","useEffect","blob","next"],"sources":["../../src/hooks/use-object-url.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\n/**\n * Create an object URL for a `Blob` (or `File`) and revoke it automatically on\n * unmount or whenever the blob changes. Returns `null` for nullish input.\n *\n * @param blob - the blob to expose as an object URL, or `null`/`undefined`.\n * @returns The object URL string, or `null` when there is no blob.\n */\nexport function useObjectUrl(blob: Blob | null | undefined): string | null {\n const [url, setUrl] = useState<string | null>(null);\n\n useEffect(() => {\n if (!blob) {\n setUrl(null);\n return;\n }\n const next = URL.createObjectURL(blob);\n setUrl(next);\n return () => URL.revokeObjectURL(next);\n }, [blob]);\n\n return url;\n}\n"],"mappings":";;AASA,SAAgBA,EAAa,GAA8C;CACvE,IAAM,CAACC,GAAKC,KAAUC,EAAwB,IAAI;CAYlD,OAVAC,QAAgB;EACZ,IAAI,CAACC,GAAM;GACP,EAAO,IAAI;GACX;EACJ;EACA,IAAMC,IAAO,IAAI,gBAAgBD,CAAI;EAErC,OADAH,EAAOI,CAAI,SACE,IAAI,gBAAgBA,CAAI;CACzC,GAAG,CAACD,CAAI,CAAC,GAEFJ;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-online.cjs","names":[],"sources":["../../src/hooks/use-online.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\n/**\n * Options for {@link useOnline}. Omit them for the cheap `navigator.onLine`\n * behaviour; pass `pingUrl` to add a real-reachability probe on top.\n */\nexport interface UseOnlineOptions {\n /**\n * URL to probe for real connectivity. `navigator.onLine` reports `true`\n * behind a captive portal or when the machine has a link but no internet;\n * a periodic `HEAD` to this URL catches those cases. When set, the result\n * is `navigator.onLine && lastProbeSucceeded`.\n */\n pingUrl?: string;\n /** How often to probe, in ms. Default `30000`. */\n intervalMs?: number;\n /** Abort a probe after this many ms and treat it as offline. Default `5000`. */\n timeoutMs?: number;\n}\n\n/**\n * Track connectivity and re-render on changes.\n *\n * With no options it mirrors `navigator.onLine` (assuming online during SSR and\n * before the first event). Pass `pingUrl` to additionally probe real\n * reachability — the browser's `onLine` flag lies behind captive portals and\n * dead links, so the probe downgrades the result to `false` when the network is\n * unusable even though `navigator.onLine` is `true`.\n *\n * @param options - Optional reachability-probe configuration.\n * @returns `true` when the device is online (and reachable, when probing).\n *\n * @example\n * const online = useOnline(); // navigator.onLine only\n * const reallyOnline = useOnline({ pingUrl: \"/health\", intervalMs: 15_000 });\n */\nexport function useOnline(options: UseOnlineOptions = {}): boolean {\n const { pingUrl, intervalMs = 30_000, timeoutMs = 5_000 } = options;\n\n const [navOnline, setNavOnline] = useState<boolean>(() =>\n typeof navigator === \"undefined\" ? true : navigator.onLine,\n );\n const [reachable, setReachable] = useState<boolean>(true);\n\n const optionsRef = useLatestRef({ pingUrl, timeoutMs });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const handleOnline = (): void => setNavOnline(true);\n const handleOffline = (): void => setNavOnline(false);\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }, []);\n\n useEffect(() => {\n if (!pingUrl || typeof window === \"undefined\") return;\n\n let cancelled = false;\n const probe = async (): Promise<void> => {\n if (typeof navigator !== \"undefined\" && !navigator.onLine) {\n if (!cancelled) setReachable(false);\n return;\n }\n const controller = new AbortController();\n const timer = window.setTimeout(() => controller.abort(), optionsRef.current.timeoutMs);\n try {\n await fetch(optionsRef.current.pingUrl!, {\n method: \"HEAD\",\n cache: \"no-store\",\n signal: controller.signal,\n });\n if (!cancelled) setReachable(true);\n } catch {\n if (!cancelled) setReachable(false);\n } finally {\n window.clearTimeout(timer);\n }\n };\n\n void probe();\n const id = window.setInterval(() => void probe(), intervalMs);\n const onWake = (): void => void probe();\n window.addEventListener(\"online\", onWake);\n document.addEventListener(\"visibilitychange\", onWake);\n return () => {\n cancelled = true;\n window.clearInterval(id);\n window.removeEventListener(\"online\", onWake);\n document.removeEventListener(\"visibilitychange\", onWake);\n };\n }, [pingUrl, intervalMs, optionsRef]);\n\n return pingUrl ? navOnline && reachable : navOnline;\n}\n"],"mappings":"+DAqCA,SAAgB,EAAU,EAA4B,CAAC,EAAY,CAC/D,GAAM,CAAE,UAAS,aAAa,IAAQ,YAAY,KAAU,EAEtD,CAAC,EAAW,IAAA,EAAgB,EAAA,SAAA,KAC9B,OAAO,UAAc,KAAqB,UAAU,MACxD,EACM,CAAC,EAAW,IAAA,EAAgB,EAAA,SAAA,CAAkB,EAAI,EAElD,EAAa,EAAA,aAAa,CAAE,UAAS,WAAU,CAAC,EAoDtD,OAlDA,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,OAAO,OAAW,IAAa,OACnC,IAAM,MAA2B,EAAa,EAAI,EAC5C,MAA4B,EAAa,EAAK,EAGpD,OAFA,OAAO,iBAAiB,SAAU,CAAY,EAC9C,OAAO,iBAAiB,UAAW,CAAa,MACnC,CACT,OAAO,oBAAoB,SAAU,CAAY,EACjD,OAAO,oBAAoB,UAAW,CAAa,CACvD,CACJ,EAAG,CAAC,CAAC,GAEL,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,GAAW,OAAO,OAAW,IAAa,OAE/C,IAAI,EAAY,GACV,EAAQ,SAA2B,CACrC,GAAI,OAAO,UAAc,KAAe,CAAC,UAAU,OAAQ,CAClD,GAAW,EAAa,EAAK,EAClC,MACJ,CACA,IAAM,EAAa,IAAI,gBACjB,EAAQ,OAAO,eAAiB,EAAW,MAAM,EAAG,EAAW,QAAQ,SAAS,EACtF,GAAI,CACA,MAAM,MAAM,EAAW,QAAQ,QAAU,CACrC,OAAQ,OACR,MAAO,WACP,OAAQ,EAAW,MACvB,CAAC,EACI,GAAW,EAAa,EAAI,CACrC,MAAQ,CACC,GAAW,EAAa,EAAK,CACtC,QAAU,CACN,OAAO,aAAa,CAAK,CAC7B,CACJ,EAEA,EAAW,EACX,IAAM,EAAK,OAAO,gBAAkB,KAAK,EAAM,EAAG,CAAU,EACtD,MAAqB,KAAK,EAAM,EAGtC,OAFA,OAAO,iBAAiB,SAAU,CAAM,EACxC,SAAS,iBAAiB,mBAAoB,CAAM,MACvC,CACT,EAAY,GACZ,OAAO,cAAc,CAAE,EACvB,OAAO,oBAAoB,SAAU,CAAM,EAC3C,SAAS,oBAAoB,mBAAoB,CAAM,CAC3D,CACJ,EAAG,CAAC,EAAS,EAAY,CAAU,CAAC,EAE7B,EAAU,GAAa,EAAY,CAC9C"}
1
+ {"version":3,"file":"use-online.cjs","names":["useState","useLatestRef","require_use_latest_ref","react","useOnline","options","navOnline","setNavOnline","reachable","setReachable","optionsRef","handleOnline","handleOffline","pingUrl","cancelled","probe","controller","timer","id","intervalMs","onWake"],"sources":["../../src/hooks/use-online.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\n/**\n * Options for {@link useOnline}. Omit them for the cheap `navigator.onLine`\n * behaviour; pass `pingUrl` to add a real-reachability probe on top.\n */\nexport interface UseOnlineOptions {\n /**\n * URL to probe for real connectivity. `navigator.onLine` reports `true`\n * behind a captive portal or when the machine has a link but no internet;\n * a periodic `HEAD` to this URL catches those cases. When set, the result\n * is `navigator.onLine && lastProbeSucceeded`.\n */\n pingUrl?: string;\n /** How often to probe, in ms. Default `30000`. */\n intervalMs?: number;\n /** Abort a probe after this many ms and treat it as offline. Default `5000`. */\n timeoutMs?: number;\n}\n\n/**\n * Track connectivity and re-render on changes.\n *\n * With no options it mirrors `navigator.onLine` (assuming online during SSR and\n * before the first event). Pass `pingUrl` to additionally probe real\n * reachability — the browser's `onLine` flag lies behind captive portals and\n * dead links, so the probe downgrades the result to `false` when the network is\n * unusable even though `navigator.onLine` is `true`.\n *\n * @param options - Optional reachability-probe configuration.\n * @returns `true` when the device is online (and reachable, when probing).\n *\n * @example\n * const online = useOnline(); // navigator.onLine only\n * const reallyOnline = useOnline({ pingUrl: \"/health\", intervalMs: 15_000 });\n */\nexport function useOnline(options: UseOnlineOptions = {}): boolean {\n const { pingUrl, intervalMs = 30_000, timeoutMs = 5_000 } = options;\n\n const [navOnline, setNavOnline] = useState<boolean>(() =>\n typeof navigator === \"undefined\" ? true : navigator.onLine,\n );\n const [reachable, setReachable] = useState<boolean>(true);\n\n const optionsRef = useLatestRef({ pingUrl, timeoutMs });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const handleOnline = (): void => setNavOnline(true);\n const handleOffline = (): void => setNavOnline(false);\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }, []);\n\n useEffect(() => {\n if (!pingUrl || typeof window === \"undefined\") return;\n\n let cancelled = false;\n const probe = async (): Promise<void> => {\n if (typeof navigator !== \"undefined\" && !navigator.onLine) {\n if (!cancelled) setReachable(false);\n return;\n }\n const controller = new AbortController();\n const timer = window.setTimeout(() => controller.abort(), optionsRef.current.timeoutMs);\n try {\n await fetch(optionsRef.current.pingUrl!, {\n method: \"HEAD\",\n cache: \"no-store\",\n signal: controller.signal,\n });\n if (!cancelled) setReachable(true);\n } catch {\n if (!cancelled) setReachable(false);\n } finally {\n window.clearTimeout(timer);\n }\n };\n\n void probe();\n const id = window.setInterval(() => void probe(), intervalMs);\n const onWake = (): void => void probe();\n window.addEventListener(\"online\", onWake);\n document.addEventListener(\"visibilitychange\", onWake);\n return () => {\n cancelled = true;\n window.clearInterval(id);\n window.removeEventListener(\"online\", onWake);\n document.removeEventListener(\"visibilitychange\", onWake);\n };\n }, [pingUrl, intervalMs, optionsRef]);\n\n return pingUrl ? navOnline && reachable : navOnline;\n}\n"],"mappings":"A,+DAqCA,SAAgBI,EAAU,EAA4B,CAAC,EAAY,CAC/D,GAAM,CAAE,UAAS,aAAa,IAAQ,YAAY,KAAUC,EAEtD,CAACC,EAAWC,IAAA,EAAgBP,EAAAA,SAAAA,KAC9B,OAAO,UAAc,KAAqB,UAAU,MACxD,EACM,CAACQ,EAAWC,IAAA,EAAgBT,EAAAA,SAAAA,CAAkB,EAAI,EAElDU,EAAaT,EAAAA,aAAa,CAAE,UAAS,WAAU,CAAC,EAoDtD,OAlDA,EAAAE,EAAA,UAAA,KAAgB,CACZ,GAAI,OAAO,OAAW,IAAa,OACnC,IAAMQ,MAA2BJ,EAAa,EAAI,EAC5CK,MAA4BL,EAAa,EAAK,EAGpD,OAFA,OAAO,iBAAiB,SAAUI,CAAY,EAC9C,OAAO,iBAAiB,UAAWC,CAAa,MACnC,CACT,OAAO,oBAAoB,SAAUD,CAAY,EACjD,OAAO,oBAAoB,UAAWC,CAAa,CACvD,CACJ,EAAG,CAAC,CAAC,GAEL,EAAAT,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACU,GAAW,OAAO,OAAW,IAAa,OAE/C,IAAIC,EAAY,GACVC,EAAQ,SAA2B,CACrC,GAAI,OAAO,UAAc,KAAe,CAAC,UAAU,OAAQ,CAClDD,GAAWL,EAAa,EAAK,EAClC,MACJ,CACA,IAAMO,EAAa,IAAI,gBACjBC,EAAQ,OAAO,eAAiBD,EAAW,MAAM,EAAGN,EAAW,QAAQ,SAAS,EACtF,GAAI,CACA,MAAM,MAAMA,EAAW,QAAQ,QAAU,CACrC,OAAQ,OACR,MAAO,WACP,OAAQM,EAAW,MACvB,CAAC,EACIF,GAAWL,EAAa,EAAI,CACrC,MAAQ,CACCK,GAAWL,EAAa,EAAK,CACtC,QAAU,CACN,OAAO,aAAaQ,CAAK,CAC7B,CACJ,EAEAF,EAAW,EACX,IAAMG,EAAK,OAAO,gBAAkB,KAAKH,EAAM,EAAGI,CAAU,EACtDC,MAAqB,KAAKL,EAAM,EAGtC,OAFA,OAAO,iBAAiB,SAAUK,CAAM,EACxC,SAAS,iBAAiB,mBAAoBA,CAAM,MACvC,CACT,EAAY,GACZ,OAAO,cAAcF,CAAE,EACvB,OAAO,oBAAoB,SAAUE,CAAM,EAC3C,SAAS,oBAAoB,mBAAoBA,CAAM,CAC3D,CACJ,EAAG,CAACP,EAASM,EAAYT,CAAU,CAAC,EAE7BG,EAAUP,GAAaE,EAAYF,CAC9C,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-online.js","names":[],"sources":["../../src/hooks/use-online.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\n/**\n * Options for {@link useOnline}. Omit them for the cheap `navigator.onLine`\n * behaviour; pass `pingUrl` to add a real-reachability probe on top.\n */\nexport interface UseOnlineOptions {\n /**\n * URL to probe for real connectivity. `navigator.onLine` reports `true`\n * behind a captive portal or when the machine has a link but no internet;\n * a periodic `HEAD` to this URL catches those cases. When set, the result\n * is `navigator.onLine && lastProbeSucceeded`.\n */\n pingUrl?: string;\n /** How often to probe, in ms. Default `30000`. */\n intervalMs?: number;\n /** Abort a probe after this many ms and treat it as offline. Default `5000`. */\n timeoutMs?: number;\n}\n\n/**\n * Track connectivity and re-render on changes.\n *\n * With no options it mirrors `navigator.onLine` (assuming online during SSR and\n * before the first event). Pass `pingUrl` to additionally probe real\n * reachability — the browser's `onLine` flag lies behind captive portals and\n * dead links, so the probe downgrades the result to `false` when the network is\n * unusable even though `navigator.onLine` is `true`.\n *\n * @param options - Optional reachability-probe configuration.\n * @returns `true` when the device is online (and reachable, when probing).\n *\n * @example\n * const online = useOnline(); // navigator.onLine only\n * const reallyOnline = useOnline({ pingUrl: \"/health\", intervalMs: 15_000 });\n */\nexport function useOnline(options: UseOnlineOptions = {}): boolean {\n const { pingUrl, intervalMs = 30_000, timeoutMs = 5_000 } = options;\n\n const [navOnline, setNavOnline] = useState<boolean>(() =>\n typeof navigator === \"undefined\" ? true : navigator.onLine,\n );\n const [reachable, setReachable] = useState<boolean>(true);\n\n const optionsRef = useLatestRef({ pingUrl, timeoutMs });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const handleOnline = (): void => setNavOnline(true);\n const handleOffline = (): void => setNavOnline(false);\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }, []);\n\n useEffect(() => {\n if (!pingUrl || typeof window === \"undefined\") return;\n\n let cancelled = false;\n const probe = async (): Promise<void> => {\n if (typeof navigator !== \"undefined\" && !navigator.onLine) {\n if (!cancelled) setReachable(false);\n return;\n }\n const controller = new AbortController();\n const timer = window.setTimeout(() => controller.abort(), optionsRef.current.timeoutMs);\n try {\n await fetch(optionsRef.current.pingUrl!, {\n method: \"HEAD\",\n cache: \"no-store\",\n signal: controller.signal,\n });\n if (!cancelled) setReachable(true);\n } catch {\n if (!cancelled) setReachable(false);\n } finally {\n window.clearTimeout(timer);\n }\n };\n\n void probe();\n const id = window.setInterval(() => void probe(), intervalMs);\n const onWake = (): void => void probe();\n window.addEventListener(\"online\", onWake);\n document.addEventListener(\"visibilitychange\", onWake);\n return () => {\n cancelled = true;\n window.clearInterval(id);\n window.removeEventListener(\"online\", onWake);\n document.removeEventListener(\"visibilitychange\", onWake);\n };\n }, [pingUrl, intervalMs, optionsRef]);\n\n return pingUrl ? navOnline && reachable : navOnline;\n}\n"],"mappings":";;;AAqCA,SAAgB,EAAU,IAA4B,CAAC,GAAY;CAC/D,IAAM,EAAE,YAAS,gBAAa,KAAQ,eAAY,QAAU,GAEtD,CAAC,GAAW,KAAgB,QAC9B,OAAO,YAAc,OAAqB,UAAU,MACxD,GACM,CAAC,GAAW,KAAgB,EAAkB,EAAI,GAElD,IAAa,EAAa;EAAE;EAAS;CAAU,CAAC;CAoDtD,OAlDA,QAAgB;EACZ,IAAI,OAAO,SAAW,KAAa;EACnC,IAAM,UAA2B,EAAa,EAAI,GAC5C,UAA4B,EAAa,EAAK;EAGpD,OAFA,OAAO,iBAAiB,UAAU,CAAY,GAC9C,OAAO,iBAAiB,WAAW,CAAa,SACnC;GAET,AADA,OAAO,oBAAoB,UAAU,CAAY,GACjD,OAAO,oBAAoB,WAAW,CAAa;EACvD;CACJ,GAAG,CAAC,CAAC,GAEL,QAAgB;EACZ,IAAI,CAAC,KAAW,OAAO,SAAW,KAAa;EAE/C,IAAI,IAAY,IACV,IAAQ,YAA2B;GACrC,IAAI,OAAO,YAAc,OAAe,CAAC,UAAU,QAAQ;IACvD,AAAK,KAAW,EAAa,EAAK;IAClC;GACJ;GACA,IAAM,IAAa,IAAI,gBAAgB,GACjC,IAAQ,OAAO,iBAAiB,EAAW,MAAM,GAAG,EAAW,QAAQ,SAAS;GACtF,IAAI;IAMA,AALA,MAAM,MAAM,EAAW,QAAQ,SAAU;KACrC,QAAQ;KACR,OAAO;KACP,QAAQ,EAAW;IACvB,CAAC,GACI,KAAW,EAAa,EAAI;GACrC,QAAQ;IACJ,AAAK,KAAW,EAAa,EAAK;GACtC,UAAU;IACN,OAAO,aAAa,CAAK;GAC7B;EACJ;EAEA,EAAW;EACX,IAAM,IAAK,OAAO,kBAAkB,KAAK,EAAM,GAAG,CAAU,GACtD,UAAqB,KAAK,EAAM;EAGtC,OAFA,OAAO,iBAAiB,UAAU,CAAM,GACxC,SAAS,iBAAiB,oBAAoB,CAAM,SACvC;GAIT,AAHA,IAAY,IACZ,OAAO,cAAc,CAAE,GACvB,OAAO,oBAAoB,UAAU,CAAM,GAC3C,SAAS,oBAAoB,oBAAoB,CAAM;EAC3D;CACJ,GAAG;EAAC;EAAS;EAAY;CAAU,CAAC,GAE7B,IAAU,KAAa,IAAY;AAC9C"}
1
+ {"version":3,"file":"use-online.js","names":["useOnline","options","navOnline","setNavOnline","useState","reachable","setReachable","optionsRef","useLatestRef","useEffect","handleOnline","handleOffline","pingUrl","cancelled","probe","controller","timer","id","intervalMs","onWake"],"sources":["../../src/hooks/use-online.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\n/**\n * Options for {@link useOnline}. Omit them for the cheap `navigator.onLine`\n * behaviour; pass `pingUrl` to add a real-reachability probe on top.\n */\nexport interface UseOnlineOptions {\n /**\n * URL to probe for real connectivity. `navigator.onLine` reports `true`\n * behind a captive portal or when the machine has a link but no internet;\n * a periodic `HEAD` to this URL catches those cases. When set, the result\n * is `navigator.onLine && lastProbeSucceeded`.\n */\n pingUrl?: string;\n /** How often to probe, in ms. Default `30000`. */\n intervalMs?: number;\n /** Abort a probe after this many ms and treat it as offline. Default `5000`. */\n timeoutMs?: number;\n}\n\n/**\n * Track connectivity and re-render on changes.\n *\n * With no options it mirrors `navigator.onLine` (assuming online during SSR and\n * before the first event). Pass `pingUrl` to additionally probe real\n * reachability — the browser's `onLine` flag lies behind captive portals and\n * dead links, so the probe downgrades the result to `false` when the network is\n * unusable even though `navigator.onLine` is `true`.\n *\n * @param options - Optional reachability-probe configuration.\n * @returns `true` when the device is online (and reachable, when probing).\n *\n * @example\n * const online = useOnline(); // navigator.onLine only\n * const reallyOnline = useOnline({ pingUrl: \"/health\", intervalMs: 15_000 });\n */\nexport function useOnline(options: UseOnlineOptions = {}): boolean {\n const { pingUrl, intervalMs = 30_000, timeoutMs = 5_000 } = options;\n\n const [navOnline, setNavOnline] = useState<boolean>(() =>\n typeof navigator === \"undefined\" ? true : navigator.onLine,\n );\n const [reachable, setReachable] = useState<boolean>(true);\n\n const optionsRef = useLatestRef({ pingUrl, timeoutMs });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const handleOnline = (): void => setNavOnline(true);\n const handleOffline = (): void => setNavOnline(false);\n window.addEventListener(\"online\", handleOnline);\n window.addEventListener(\"offline\", handleOffline);\n return () => {\n window.removeEventListener(\"online\", handleOnline);\n window.removeEventListener(\"offline\", handleOffline);\n };\n }, []);\n\n useEffect(() => {\n if (!pingUrl || typeof window === \"undefined\") return;\n\n let cancelled = false;\n const probe = async (): Promise<void> => {\n if (typeof navigator !== \"undefined\" && !navigator.onLine) {\n if (!cancelled) setReachable(false);\n return;\n }\n const controller = new AbortController();\n const timer = window.setTimeout(() => controller.abort(), optionsRef.current.timeoutMs);\n try {\n await fetch(optionsRef.current.pingUrl!, {\n method: \"HEAD\",\n cache: \"no-store\",\n signal: controller.signal,\n });\n if (!cancelled) setReachable(true);\n } catch {\n if (!cancelled) setReachable(false);\n } finally {\n window.clearTimeout(timer);\n }\n };\n\n void probe();\n const id = window.setInterval(() => void probe(), intervalMs);\n const onWake = (): void => void probe();\n window.addEventListener(\"online\", onWake);\n document.addEventListener(\"visibilitychange\", onWake);\n return () => {\n cancelled = true;\n window.clearInterval(id);\n window.removeEventListener(\"online\", onWake);\n document.removeEventListener(\"visibilitychange\", onWake);\n };\n }, [pingUrl, intervalMs, optionsRef]);\n\n return pingUrl ? navOnline && reachable : navOnline;\n}\n"],"mappings":";;;AAqCA,SAAgBA,EAAU,IAA4B,CAAC,GAAY;CAC/D,IAAM,EAAE,YAAS,gBAAa,KAAQ,eAAY,QAAUC,GAEtD,CAACC,GAAWC,KAAgBC,QAC9B,OAAO,YAAc,OAAqB,UAAU,MACxD,GACM,CAACC,GAAWC,KAAgBF,EAAkB,EAAI,GAElDG,IAAaC,EAAa;EAAE;EAAS;CAAU,CAAC;CAoDtD,OAlDAC,QAAgB;EACZ,IAAI,OAAO,SAAW,KAAa;EACnC,IAAMC,UAA2BP,EAAa,EAAI,GAC5CQ,UAA4BR,EAAa,EAAK;EAGpD,OAFA,OAAO,iBAAiB,UAAUO,CAAY,GAC9C,OAAO,iBAAiB,WAAWC,CAAa,SACnC;GAET,AADA,OAAO,oBAAoB,UAAUD,CAAY,GACjD,OAAO,oBAAoB,WAAWC,CAAa;EACvD;CACJ,GAAG,CAAC,CAAC,GAELF,QAAgB;EACZ,IAAI,CAACG,KAAW,OAAO,SAAW,KAAa;EAE/C,IAAIC,IAAY,IACVC,IAAQ,YAA2B;GACrC,IAAI,OAAO,YAAc,OAAe,CAAC,UAAU,QAAQ;IACvD,AAAKD,KAAWP,EAAa,EAAK;IAClC;GACJ;GACA,IAAMS,IAAa,IAAI,gBAAgB,GACjCC,IAAQ,OAAO,iBAAiBD,EAAW,MAAM,GAAGR,EAAW,QAAQ,SAAS;GACtF,IAAI;IAMA,AALA,MAAM,MAAMA,EAAW,QAAQ,SAAU;KACrC,QAAQ;KACR,OAAO;KACP,QAAQQ,EAAW;IACvB,CAAC,GACIF,KAAWP,EAAa,EAAI;GACrC,QAAQ;IACJ,AAAKO,KAAWP,EAAa,EAAK;GACtC,UAAU;IACN,OAAO,aAAaU,CAAK;GAC7B;EACJ;EAEA,EAAW;EACX,IAAMC,IAAK,OAAO,kBAAkB,KAAKH,EAAM,GAAGI,CAAU,GACtDC,UAAqB,KAAKL,EAAM;EAGtC,OAFA,OAAO,iBAAiB,UAAUK,CAAM,GACxC,SAAS,iBAAiB,oBAAoBA,CAAM,SACvC;GAIT,AAHA,IAAY,IACZ,OAAO,cAAcF,CAAE,GACvB,OAAO,oBAAoB,UAAUE,CAAM,GAC3C,SAAS,oBAAoB,oBAAoBA,CAAM;EAC3D;CACJ,GAAG;EAACP;EAASM;EAAYX;CAAU,CAAC,GAE7BK,IAAUV,KAAaG,IAAYH;AAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-pagination.cjs","names":[],"sources":["../../src/hooks/use-pagination.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface UsePaginationResult {\n page: number;\n size: number;\n setPage: (page: number) => void;\n setSize: (size: number) => void;\n reset: () => void;\n}\n\n/**\n * Manage page/size state for paginated lists. Reset goes back to page 1\n * without touching the page size.\n *\n * @param initialPage - Starting page (default 1).\n * @param initialSize - Starting page size (default 50).\n * @returns Pagination state and setters.\n */\nexport function usePagination(initialPage = 1, initialSize = 50): UsePaginationResult {\n const [page, setPage] = useState<number>(initialPage);\n const [size, setSize] = useState<number>(initialSize);\n\n const reset = useCallback(() => setPage(1), []);\n\n return { page, size, setPage, setSize, reset };\n}\n"],"mappings":"uBAkBA,SAAgB,EAAc,EAAc,EAAG,EAAc,GAAyB,CAClF,GAAM,CAAC,EAAM,IAAA,EAAW,EAAA,SAAA,CAAiB,CAAW,EAC9C,CAAC,EAAM,IAAA,EAAW,EAAA,SAAA,CAAiB,CAAW,EAIpD,MAAO,CAAE,OAAM,OAAM,UAAS,UAAS,OAAA,EAFzB,EAAA,YAAA,KAAkB,EAAQ,CAAC,EAAG,CAAC,CAEN,CAAM,CACjD"}
1
+ {"version":3,"file":"use-pagination.cjs","names":["useState","useCallback","react","usePagination","page","setPage","initialPage","size","setSize","initialSize"],"sources":["../../src/hooks/use-pagination.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface UsePaginationResult {\n page: number;\n size: number;\n setPage: (page: number) => void;\n setSize: (size: number) => void;\n reset: () => void;\n}\n\n/**\n * Manage page/size state for paginated lists. Reset goes back to page 1\n * without touching the page size.\n *\n * @param initialPage - Starting page (default 1).\n * @param initialSize - Starting page size (default 50).\n * @returns Pagination state and setters.\n */\nexport function usePagination(initialPage = 1, initialSize = 50): UsePaginationResult {\n const [page, setPage] = useState<number>(initialPage);\n const [size, setSize] = useState<number>(initialSize);\n\n const reset = useCallback(() => setPage(1), []);\n\n return { page, size, setPage, setSize, reset };\n}\n"],"mappings":"A,uBAkBA,SAAgBG,EAAc,EAAc,EAAG,EAAc,GAAyB,CAClF,GAAM,CAACC,EAAMC,IAAA,EAAWL,EAAAA,SAAAA,CAAiBM,CAAW,EAC9C,CAACC,EAAMC,IAAA,EAAWR,EAAAA,SAAAA,CAAiBS,CAAW,EAIpD,MAAO,CAAE,OAAM,OAAM,UAAS,UAAS,OAAA,EAFzBR,EAAAA,YAAAA,KAAkBI,EAAQ,CAAC,EAAG,CAAC,CAEN,CAAM,CACjD,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-pagination.js","names":[],"sources":["../../src/hooks/use-pagination.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface UsePaginationResult {\n page: number;\n size: number;\n setPage: (page: number) => void;\n setSize: (size: number) => void;\n reset: () => void;\n}\n\n/**\n * Manage page/size state for paginated lists. Reset goes back to page 1\n * without touching the page size.\n *\n * @param initialPage - Starting page (default 1).\n * @param initialSize - Starting page size (default 50).\n * @returns Pagination state and setters.\n */\nexport function usePagination(initialPage = 1, initialSize = 50): UsePaginationResult {\n const [page, setPage] = useState<number>(initialPage);\n const [size, setSize] = useState<number>(initialSize);\n\n const reset = useCallback(() => setPage(1), []);\n\n return { page, size, setPage, setSize, reset };\n}\n"],"mappings":";;AAkBA,SAAgB,EAAc,IAAc,GAAG,IAAc,IAAyB;CAClF,IAAM,CAAC,GAAM,KAAW,EAAiB,CAAW,GAC9C,CAAC,GAAM,KAAW,EAAiB,CAAW;CAIpD,OAAO;EAAE;EAAM;EAAM;EAAS;EAAS,OAFzB,QAAkB,EAAQ,CAAC,GAAG,CAAC,CAEN;CAAM;AACjD"}
1
+ {"version":3,"file":"use-pagination.js","names":["usePagination","page","setPage","useState","initialPage","size","setSize","initialSize","useCallback"],"sources":["../../src/hooks/use-pagination.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nexport interface UsePaginationResult {\n page: number;\n size: number;\n setPage: (page: number) => void;\n setSize: (size: number) => void;\n reset: () => void;\n}\n\n/**\n * Manage page/size state for paginated lists. Reset goes back to page 1\n * without touching the page size.\n *\n * @param initialPage - Starting page (default 1).\n * @param initialSize - Starting page size (default 50).\n * @returns Pagination state and setters.\n */\nexport function usePagination(initialPage = 1, initialSize = 50): UsePaginationResult {\n const [page, setPage] = useState<number>(initialPage);\n const [size, setSize] = useState<number>(initialSize);\n\n const reset = useCallback(() => setPage(1), []);\n\n return { page, size, setPage, setSize, reset };\n}\n"],"mappings":";;AAkBA,SAAgBA,EAAc,IAAc,GAAG,IAAc,IAAyB;CAClF,IAAM,CAACC,GAAMC,KAAWC,EAAiBC,CAAW,GAC9C,CAACC,GAAMC,KAAWH,EAAiBI,CAAW;CAIpD,OAAO;EAAE;EAAM;EAAM;EAAS;EAAS,OAFzBC,QAAkBN,EAAQ,CAAC,GAAG,CAAC,CAEN;CAAM;AACjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-previous.cjs","names":[],"sources":["../../src/hooks/use-previous.ts"],"sourcesContent":["/* eslint-disable react-hooks/refs -- returning last render's value IS this hook's contract */\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Return the value from the previous render. `undefined` on the first render.\n *\n * @example\n * const previousCount = usePrevious(count);\n * useEffect(() => {\n * if (previousCount !== undefined && previousCount !== count) {\n * analytics.track(\"count.changed\", { from: previousCount, to: count });\n * }\n * }, [count, previousCount]);\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n"],"mappings":"uBAcA,SAAgB,EAAe,EAAyB,CACpD,IAAM,GAAA,EAAM,EAAA,OAAA,CAAsB,IAAA,EAAS,EAI3C,OAHA,EAAA,EAAA,UAAA,KAAgB,CACZ,EAAI,QAAU,CAClB,EAAG,CAAC,CAAK,CAAC,EACH,EAAI,OACf"}
1
+ {"version":3,"file":"use-previous.cjs","names":["useRef","react","usePrevious","ref","value"],"sources":["../../src/hooks/use-previous.ts"],"sourcesContent":["/* eslint-disable react-hooks/refs -- returning last render's value IS this hook's contract */\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Return the value from the previous render. `undefined` on the first render.\n *\n * @example\n * const previousCount = usePrevious(count);\n * useEffect(() => {\n * if (previousCount !== undefined && previousCount !== count) {\n * analytics.track(\"count.changed\", { from: previousCount, to: count });\n * }\n * }, [count, previousCount]);\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n"],"mappings":"A,uBAcA,SAAgBE,EAAe,EAAyB,CACpD,IAAMC,GAAA,EAAMH,EAAAA,OAAAA,CAAsB,IAAA,EAAS,EAI3C,OAHA,EAAAC,EAAA,UAAA,KAAgB,CACZ,EAAI,QAAUG,CAClB,EAAG,CAACA,CAAK,CAAC,EACHD,EAAI,OACf,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-previous.js","names":[],"sources":["../../src/hooks/use-previous.ts"],"sourcesContent":["/* eslint-disable react-hooks/refs -- returning last render's value IS this hook's contract */\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Return the value from the previous render. `undefined` on the first render.\n *\n * @example\n * const previousCount = usePrevious(count);\n * useEffect(() => {\n * if (previousCount !== undefined && previousCount !== count) {\n * analytics.track(\"count.changed\", { from: previousCount, to: count });\n * }\n * }, [count, previousCount]);\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n"],"mappings":";;AAcA,SAAgB,EAAe,GAAyB;CACpD,IAAM,IAAM,EAAsB,KAAA,CAAS;CAI3C,OAHA,QAAgB;EACZ,EAAI,UAAU;CAClB,GAAG,CAAC,CAAK,CAAC,GACH,EAAI;AACf"}
1
+ {"version":3,"file":"use-previous.js","names":["usePrevious","ref","useRef","useEffect","value"],"sources":["../../src/hooks/use-previous.ts"],"sourcesContent":["/* eslint-disable react-hooks/refs -- returning last render's value IS this hook's contract */\nimport { useEffect, useRef } from \"react\";\n\n/**\n * Return the value from the previous render. `undefined` on the first render.\n *\n * @example\n * const previousCount = usePrevious(count);\n * useEffect(() => {\n * if (previousCount !== undefined && previousCount !== count) {\n * analytics.track(\"count.changed\", { from: previousCount, to: count });\n * }\n * }, [count, previousCount]);\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n"],"mappings":";;AAcA,SAAgBA,EAAe,GAAyB;CACpD,IAAMC,IAAMC,EAAsB,KAAA,CAAS;CAI3C,OAHAC,QAAgB;EACZ,EAAI,UAAUC;CAClB,GAAG,CAACA,CAAK,CAAC,GACHH,EAAI;AACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-push-to-talk.cjs","names":[],"sources":["../../src/hooks/use-push-to-talk.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\n/** A key offered for push-to-talk, with the label a settings screen shows. */\nexport interface PushToTalkKey {\n /** `KeyboardEvent.code`, which is layout-independent. */\n code: string;\n /** What to show a person. `code` itself is not a label. */\n label: string;\n}\n\n/**\n * The keys worth offering for push-to-talk.\n *\n * Identified by `code` rather than `key` so a binding survives a layout change:\n * on an ABNT2 keyboard the `key` reported for the backquote position is not what\n * a US layout reports, while `Backquote` is the same physical key everywhere.\n *\n * Left-hand modifiers only. The right-hand ones sit under the hand that is\n * usually on the mouse, and a modifier that is also a shortcut prefix\n * (`ControlLeft` with a browser shortcut) is a deliberate trade the caller makes\n * by choosing it.\n */\nexport const PUSH_TO_TALK_KEYS: readonly PushToTalkKey[] = [\n { code: \"Space\", label: \"Espaço\" },\n { code: \"ControlLeft\", label: \"Ctrl esquerdo\" },\n { code: \"AltLeft\", label: \"Alt esquerdo\" },\n { code: \"ShiftLeft\", label: \"Shift esquerdo\" },\n { code: \"Backquote\", label: \"Crase (`)\" },\n];\n\n/** The key a caller gets when it does not choose one. */\nexport const DEFAULT_PUSH_TO_TALK_KEY = \"Space\";\n\n/**\n * The label to show for a `KeyboardEvent.code`.\n *\n * @param code - The bound key's code.\n * @returns Its label, or the code itself for a key this list does not name —\n * showing `\"F13\"` beats showing nothing.\n */\nexport function pushToTalkKeyLabel(code: string): string {\n return PUSH_TO_TALK_KEYS.find((key) => key.code === code)?.label ?? code;\n}\n\n/**\n * Whether a keystroke is meant for something the person is typing into.\n *\n * Without this a push-to-talk key bound to Space opens the microphone every time\n * somebody writes a message — and the space never reaches the text field,\n * because the handler preventDefault'd it.\n *\n * @param target - The event's target.\n * @returns `true` when the keystroke belongs to a field, not to the app.\n */\nfunction isTypingTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n return tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\";\n}\n\n/** Options for {@link usePushToTalk}. */\nexport interface UsePushToTalkOptions {\n /** `KeyboardEvent.code` to hold. Default {@link DEFAULT_PUSH_TO_TALK_KEY}. */\n code?: string;\n /** Called once when the key goes down. */\n onDown: () => void;\n /** Called when the key comes up, the window blurs, or the hook unmounts. */\n onUp: () => void;\n /**\n * Whether the binding is live. Default `true`.\n *\n * Turning it off releases first, so flipping a call from push-to-talk to an\n * open microphone while the key is held does not leave `onUp` unfired.\n */\n enabled?: boolean;\n}\n\n/**\n * Hold a key to transmit; release it to go silent again.\n *\n * Looks like `keydown`/`keyup` and is not, because three things go wrong:\n *\n * 1. **`blur` has to release.** Alt-tabbing away while holding the key means the\n * browser never sees the `keyup`, and the microphone stays open for as long as\n * the person is looking at another window — exactly what push-to-talk exists\n * to prevent.\n * 2. **Auto-repeat has to be ignored.** A held key repeats at the keyboard's rate,\n * and without the `repeat` check `onDown` fires on every one of them.\n * 3. **A text field has to win.** Space bound to push-to-talk with the focus in an\n * `<input>` means the space never reaches the message being written.\n *\n * Unmounting releases too, for the same reason `blur` does: the callback that\n * stops transmitting has to run even when the component holding it goes away\n * mid-press.\n *\n * The callbacks are read through a ref that a commit-time effect refreshes, so\n * passing inline arrows neither tears the listeners down on every render nor\n * writes to the ref during one — a render React discards would leave the ref\n * pointing at callbacks that never became the UI.\n *\n * @param options - See {@link UsePushToTalkOptions}.\n *\n * @example\n * usePushToTalk({\n * code: \"Space\",\n * onDown: () => setMicEnabled(true),\n * onUp: () => setMicEnabled(false),\n * });\n */\nexport function usePushToTalk({\n code = DEFAULT_PUSH_TO_TALK_KEY,\n onDown,\n onUp,\n enabled = true,\n}: UsePushToTalkOptions): void {\n const callbacks = useRef({ onDown, onUp });\n useEffect(() => {\n callbacks.current = { onDown, onUp };\n });\n\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") return;\n let held = false;\n\n const release = (): void => {\n if (!held) return;\n held = false;\n callbacks.current.onUp();\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.code !== code || event.repeat) return;\n if (isTypingTarget(event.target)) return;\n event.preventDefault();\n if (held) return;\n held = true;\n callbacks.current.onDown();\n };\n\n /**\n * Release on the way up, and never mind where the keystroke landed.\n *\n * The field guard belongs on the way **down** — it is what stops a\n * push-to-talk bound to Space from opening the microphone every time\n * somebody writes a message. On the way up it did the opposite of its\n * job: `keyup` is delivered to whatever is focused when the key rises,\n * not to what was focused when it fell, so clicking into an input while\n * still holding sent the release into the guard and left `held` true.\n * The microphone stayed open until the window blurred.\n *\n * `held` is the guard this needs. If we never opened the microphone\n * there is nothing to close, and `release()` already returns on that —\n * so the only thing left to decide is `preventDefault`, which is\n * honest only for a keystroke we actually acted on.\n */\n const handleKeyUp = (event: KeyboardEvent): void => {\n if (event.code !== code || !held) return;\n event.preventDefault();\n release();\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n window.addEventListener(\"keyup\", handleKeyUp);\n window.addEventListener(\"blur\", release);\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n window.removeEventListener(\"keyup\", handleKeyUp);\n window.removeEventListener(\"blur\", release);\n release();\n };\n }, [code, enabled]);\n}\n"],"mappings":"uBAsBA,IAAa,EAA8C,CACvD,CAAE,KAAM,QAAS,MAAO,QAAS,EACjC,CAAE,KAAM,cAAe,MAAO,eAAgB,EAC9C,CAAE,KAAM,UAAW,MAAO,cAAe,EACzC,CAAE,KAAM,YAAa,MAAO,gBAAiB,EAC7C,CAAE,KAAM,YAAa,MAAO,WAAY,CAC5C,EAGa,EAA2B,QASxC,SAAgB,EAAmB,EAAsB,CACrD,OAAO,EAAkB,KAAM,GAAQ,EAAI,OAAS,CAAI,CAAC,EAAE,OAAS,CACxE,CAYA,SAAS,EAAe,EAAqC,CACzD,GAAI,EAAE,aAAkB,aAAc,MAAO,GAC7C,GAAI,EAAO,kBAAmB,MAAO,GACrC,IAAM,EAAM,EAAO,QACnB,OAAO,IAAQ,SAAW,IAAQ,YAAc,IAAQ,QAC5D,CAmDA,SAAgB,EAAc,CAC1B,OAAO,EACP,SACA,OACA,UAAU,IACiB,CAC3B,IAAM,GAAA,EAAY,EAAA,OAAA,CAAO,CAAE,SAAQ,MAAK,CAAC,GACzC,EAAA,EAAA,UAAA,KAAgB,CACZ,EAAU,QAAU,CAAE,SAAQ,MAAK,CACvC,CAAC,GAED,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,GAAW,OAAO,OAAW,IAAa,OAC/C,IAAI,EAAO,GAEL,MAAsB,CACnB,IACL,EAAO,GACP,EAAU,QAAQ,KAAK,EAC3B,EAEM,EAAiB,GAA+B,CAC9C,EAAM,OAAS,GAAQ,EAAM,QAC7B,EAAe,EAAM,MAAM,IAC/B,EAAM,eAAe,EACjB,KACJ,EAAO,GACP,EAAU,QAAQ,OAAO,GAC7B,EAkBM,EAAe,GAA+B,CAC5C,EAAM,OAAS,GAAS,IAC5B,EAAM,eAAe,EACrB,EAAQ,EACZ,EAMA,OAJA,OAAO,iBAAiB,UAAW,CAAa,EAChD,OAAO,iBAAiB,QAAS,CAAW,EAC5C,OAAO,iBAAiB,OAAQ,CAAO,MAE1B,CACT,OAAO,oBAAoB,UAAW,CAAa,EACnD,OAAO,oBAAoB,QAAS,CAAW,EAC/C,OAAO,oBAAoB,OAAQ,CAAO,EAC1C,EAAQ,CACZ,CACJ,EAAG,CAAC,EAAM,CAAO,CAAC,CACtB"}
1
+ {"version":3,"file":"use-push-to-talk.cjs","names":["useRef","react","PUSH_TO_TALK_KEYS","DEFAULT_PUSH_TO_TALK_KEY","pushToTalkKeyLabel","key","code","isTypingTarget","target","tag","usePushToTalk","callbacks","enabled","held","release","handleKeyDown","event","handleKeyUp"],"sources":["../../src/hooks/use-push-to-talk.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\n/** A key offered for push-to-talk, with the label a settings screen shows. */\nexport interface PushToTalkKey {\n /** `KeyboardEvent.code`, which is layout-independent. */\n code: string;\n /** What to show a person. `code` itself is not a label. */\n label: string;\n}\n\n/**\n * The keys worth offering for push-to-talk.\n *\n * Identified by `code` rather than `key` so a binding survives a layout change:\n * on an ABNT2 keyboard the `key` reported for the backquote position is not what\n * a US layout reports, while `Backquote` is the same physical key everywhere.\n *\n * Left-hand modifiers only. The right-hand ones sit under the hand that is\n * usually on the mouse, and a modifier that is also a shortcut prefix\n * (`ControlLeft` with a browser shortcut) is a deliberate trade the caller makes\n * by choosing it.\n */\nexport const PUSH_TO_TALK_KEYS: readonly PushToTalkKey[] = [\n { code: \"Space\", label: \"Espaço\" },\n { code: \"ControlLeft\", label: \"Ctrl esquerdo\" },\n { code: \"AltLeft\", label: \"Alt esquerdo\" },\n { code: \"ShiftLeft\", label: \"Shift esquerdo\" },\n { code: \"Backquote\", label: \"Crase (`)\" },\n];\n\n/** The key a caller gets when it does not choose one. */\nexport const DEFAULT_PUSH_TO_TALK_KEY = \"Space\";\n\n/**\n * The label to show for a `KeyboardEvent.code`.\n *\n * @param code - The bound key's code.\n * @returns Its label, or the code itself for a key this list does not name —\n * showing `\"F13\"` beats showing nothing.\n */\nexport function pushToTalkKeyLabel(code: string): string {\n return PUSH_TO_TALK_KEYS.find((key) => key.code === code)?.label ?? code;\n}\n\n/**\n * Whether a keystroke is meant for something the person is typing into.\n *\n * Without this a push-to-talk key bound to Space opens the microphone every time\n * somebody writes a message — and the space never reaches the text field,\n * because the handler preventDefault'd it.\n *\n * @param target - The event's target.\n * @returns `true` when the keystroke belongs to a field, not to the app.\n */\nfunction isTypingTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n return tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\";\n}\n\n/** Options for {@link usePushToTalk}. */\nexport interface UsePushToTalkOptions {\n /** `KeyboardEvent.code` to hold. Default {@link DEFAULT_PUSH_TO_TALK_KEY}. */\n code?: string;\n /** Called once when the key goes down. */\n onDown: () => void;\n /** Called when the key comes up, the window blurs, or the hook unmounts. */\n onUp: () => void;\n /**\n * Whether the binding is live. Default `true`.\n *\n * Turning it off releases first, so flipping a call from push-to-talk to an\n * open microphone while the key is held does not leave `onUp` unfired.\n */\n enabled?: boolean;\n}\n\n/**\n * Hold a key to transmit; release it to go silent again.\n *\n * Looks like `keydown`/`keyup` and is not, because three things go wrong:\n *\n * 1. **`blur` has to release.** Alt-tabbing away while holding the key means the\n * browser never sees the `keyup`, and the microphone stays open for as long as\n * the person is looking at another window — exactly what push-to-talk exists\n * to prevent.\n * 2. **Auto-repeat has to be ignored.** A held key repeats at the keyboard's rate,\n * and without the `repeat` check `onDown` fires on every one of them.\n * 3. **A text field has to win.** Space bound to push-to-talk with the focus in an\n * `<input>` means the space never reaches the message being written.\n *\n * Unmounting releases too, for the same reason `blur` does: the callback that\n * stops transmitting has to run even when the component holding it goes away\n * mid-press.\n *\n * The callbacks are read through a ref that a commit-time effect refreshes, so\n * passing inline arrows neither tears the listeners down on every render nor\n * writes to the ref during one — a render React discards would leave the ref\n * pointing at callbacks that never became the UI.\n *\n * @param options - See {@link UsePushToTalkOptions}.\n *\n * @example\n * usePushToTalk({\n * code: \"Space\",\n * onDown: () => setMicEnabled(true),\n * onUp: () => setMicEnabled(false),\n * });\n */\nexport function usePushToTalk({\n code = DEFAULT_PUSH_TO_TALK_KEY,\n onDown,\n onUp,\n enabled = true,\n}: UsePushToTalkOptions): void {\n const callbacks = useRef({ onDown, onUp });\n useEffect(() => {\n callbacks.current = { onDown, onUp };\n });\n\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") return;\n let held = false;\n\n const release = (): void => {\n if (!held) return;\n held = false;\n callbacks.current.onUp();\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.code !== code || event.repeat) return;\n if (isTypingTarget(event.target)) return;\n event.preventDefault();\n if (held) return;\n held = true;\n callbacks.current.onDown();\n };\n\n /**\n * Release on the way up, and never mind where the keystroke landed.\n *\n * The field guard belongs on the way **down** — it is what stops a\n * push-to-talk bound to Space from opening the microphone every time\n * somebody writes a message. On the way up it did the opposite of its\n * job: `keyup` is delivered to whatever is focused when the key rises,\n * not to what was focused when it fell, so clicking into an input while\n * still holding sent the release into the guard and left `held` true.\n * The microphone stayed open until the window blurred.\n *\n * `held` is the guard this needs. If we never opened the microphone\n * there is nothing to close, and `release()` already returns on that —\n * so the only thing left to decide is `preventDefault`, which is\n * honest only for a keystroke we actually acted on.\n */\n const handleKeyUp = (event: KeyboardEvent): void => {\n if (event.code !== code || !held) return;\n event.preventDefault();\n release();\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n window.addEventListener(\"keyup\", handleKeyUp);\n window.addEventListener(\"blur\", release);\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n window.removeEventListener(\"keyup\", handleKeyUp);\n window.removeEventListener(\"blur\", release);\n release();\n };\n }, [code, enabled]);\n}\n"],"mappings":"A,uBAsBA,IAAaE,EAA8C,CACvD,CAAE,KAAM,QAAS,MAAO,QAAS,EACjC,CAAE,KAAM,cAAe,MAAO,eAAgB,EAC9C,CAAE,KAAM,UAAW,MAAO,cAAe,EACzC,CAAE,KAAM,YAAa,MAAO,gBAAiB,EAC7C,CAAE,KAAM,YAAa,MAAO,WAAY,CAC5C,EAGaC,EAA2B,QASxC,SAAgBC,EAAmB,EAAsB,CACrD,OAAOF,EAAkB,KAAM,GAAQG,EAAI,OAASC,CAAI,CAAC,EAAE,OAASA,CACxE,CAYA,SAASC,EAAe,EAAqC,CACzD,GAAI,EAAEC,aAAkB,aAAc,MAAO,GAC7C,GAAIA,EAAO,kBAAmB,MAAO,GACrC,IAAMC,EAAMD,EAAO,QACnB,OAAOC,IAAQ,SAAWA,IAAQ,YAAcA,IAAQ,QAC5D,CAmDA,SAAgBC,EAAc,CAC1B,OAAOP,EACP,SACA,OACA,UAAU,IACiB,CAC3B,IAAMQ,GAAA,EAAYX,EAAAA,OAAAA,CAAO,CAAE,SAAQ,MAAK,CAAC,GACzC,EAAAC,EAAA,UAAA,KAAgB,CACZ,EAAU,QAAU,CAAE,SAAQ,MAAK,CACvC,CAAC,GAED,EAAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACW,GAAW,OAAO,OAAW,IAAa,OAC/C,IAAIC,EAAO,GAELC,MAAsB,CACnBD,IACL,EAAO,GACPF,EAAU,QAAQ,KAAK,EAC3B,EAEMI,EAAiB,GAA+B,CAC9CC,EAAM,OAASV,GAAQU,EAAM,QAC7BT,EAAeS,EAAM,MAAM,IAC/BA,EAAM,eAAe,EACjB,KACJ,EAAO,GACPL,EAAU,QAAQ,OAAO,GAC7B,EAkBMM,EAAe,GAA+B,CAC5CD,EAAM,OAASV,GAASO,IAC5BG,EAAM,eAAe,EACrBF,EAAQ,EACZ,EAMA,OAJA,OAAO,iBAAiB,UAAWC,CAAa,EAChD,OAAO,iBAAiB,QAASE,CAAW,EAC5C,OAAO,iBAAiB,OAAQH,CAAO,MAE1B,CACT,OAAO,oBAAoB,UAAWC,CAAa,EACnD,OAAO,oBAAoB,QAASE,CAAW,EAC/C,OAAO,oBAAoB,OAAQH,CAAO,EAC1CA,EAAQ,CACZ,CACJ,EAAG,CAACR,EAAMM,CAAO,CAAC,CACtB,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-push-to-talk.js","names":[],"sources":["../../src/hooks/use-push-to-talk.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\n/** A key offered for push-to-talk, with the label a settings screen shows. */\nexport interface PushToTalkKey {\n /** `KeyboardEvent.code`, which is layout-independent. */\n code: string;\n /** What to show a person. `code` itself is not a label. */\n label: string;\n}\n\n/**\n * The keys worth offering for push-to-talk.\n *\n * Identified by `code` rather than `key` so a binding survives a layout change:\n * on an ABNT2 keyboard the `key` reported for the backquote position is not what\n * a US layout reports, while `Backquote` is the same physical key everywhere.\n *\n * Left-hand modifiers only. The right-hand ones sit under the hand that is\n * usually on the mouse, and a modifier that is also a shortcut prefix\n * (`ControlLeft` with a browser shortcut) is a deliberate trade the caller makes\n * by choosing it.\n */\nexport const PUSH_TO_TALK_KEYS: readonly PushToTalkKey[] = [\n { code: \"Space\", label: \"Espaço\" },\n { code: \"ControlLeft\", label: \"Ctrl esquerdo\" },\n { code: \"AltLeft\", label: \"Alt esquerdo\" },\n { code: \"ShiftLeft\", label: \"Shift esquerdo\" },\n { code: \"Backquote\", label: \"Crase (`)\" },\n];\n\n/** The key a caller gets when it does not choose one. */\nexport const DEFAULT_PUSH_TO_TALK_KEY = \"Space\";\n\n/**\n * The label to show for a `KeyboardEvent.code`.\n *\n * @param code - The bound key's code.\n * @returns Its label, or the code itself for a key this list does not name —\n * showing `\"F13\"` beats showing nothing.\n */\nexport function pushToTalkKeyLabel(code: string): string {\n return PUSH_TO_TALK_KEYS.find((key) => key.code === code)?.label ?? code;\n}\n\n/**\n * Whether a keystroke is meant for something the person is typing into.\n *\n * Without this a push-to-talk key bound to Space opens the microphone every time\n * somebody writes a message — and the space never reaches the text field,\n * because the handler preventDefault'd it.\n *\n * @param target - The event's target.\n * @returns `true` when the keystroke belongs to a field, not to the app.\n */\nfunction isTypingTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n return tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\";\n}\n\n/** Options for {@link usePushToTalk}. */\nexport interface UsePushToTalkOptions {\n /** `KeyboardEvent.code` to hold. Default {@link DEFAULT_PUSH_TO_TALK_KEY}. */\n code?: string;\n /** Called once when the key goes down. */\n onDown: () => void;\n /** Called when the key comes up, the window blurs, or the hook unmounts. */\n onUp: () => void;\n /**\n * Whether the binding is live. Default `true`.\n *\n * Turning it off releases first, so flipping a call from push-to-talk to an\n * open microphone while the key is held does not leave `onUp` unfired.\n */\n enabled?: boolean;\n}\n\n/**\n * Hold a key to transmit; release it to go silent again.\n *\n * Looks like `keydown`/`keyup` and is not, because three things go wrong:\n *\n * 1. **`blur` has to release.** Alt-tabbing away while holding the key means the\n * browser never sees the `keyup`, and the microphone stays open for as long as\n * the person is looking at another window — exactly what push-to-talk exists\n * to prevent.\n * 2. **Auto-repeat has to be ignored.** A held key repeats at the keyboard's rate,\n * and without the `repeat` check `onDown` fires on every one of them.\n * 3. **A text field has to win.** Space bound to push-to-talk with the focus in an\n * `<input>` means the space never reaches the message being written.\n *\n * Unmounting releases too, for the same reason `blur` does: the callback that\n * stops transmitting has to run even when the component holding it goes away\n * mid-press.\n *\n * The callbacks are read through a ref that a commit-time effect refreshes, so\n * passing inline arrows neither tears the listeners down on every render nor\n * writes to the ref during one — a render React discards would leave the ref\n * pointing at callbacks that never became the UI.\n *\n * @param options - See {@link UsePushToTalkOptions}.\n *\n * @example\n * usePushToTalk({\n * code: \"Space\",\n * onDown: () => setMicEnabled(true),\n * onUp: () => setMicEnabled(false),\n * });\n */\nexport function usePushToTalk({\n code = DEFAULT_PUSH_TO_TALK_KEY,\n onDown,\n onUp,\n enabled = true,\n}: UsePushToTalkOptions): void {\n const callbacks = useRef({ onDown, onUp });\n useEffect(() => {\n callbacks.current = { onDown, onUp };\n });\n\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") return;\n let held = false;\n\n const release = (): void => {\n if (!held) return;\n held = false;\n callbacks.current.onUp();\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.code !== code || event.repeat) return;\n if (isTypingTarget(event.target)) return;\n event.preventDefault();\n if (held) return;\n held = true;\n callbacks.current.onDown();\n };\n\n /**\n * Release on the way up, and never mind where the keystroke landed.\n *\n * The field guard belongs on the way **down** — it is what stops a\n * push-to-talk bound to Space from opening the microphone every time\n * somebody writes a message. On the way up it did the opposite of its\n * job: `keyup` is delivered to whatever is focused when the key rises,\n * not to what was focused when it fell, so clicking into an input while\n * still holding sent the release into the guard and left `held` true.\n * The microphone stayed open until the window blurred.\n *\n * `held` is the guard this needs. If we never opened the microphone\n * there is nothing to close, and `release()` already returns on that —\n * so the only thing left to decide is `preventDefault`, which is\n * honest only for a keystroke we actually acted on.\n */\n const handleKeyUp = (event: KeyboardEvent): void => {\n if (event.code !== code || !held) return;\n event.preventDefault();\n release();\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n window.addEventListener(\"keyup\", handleKeyUp);\n window.addEventListener(\"blur\", release);\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n window.removeEventListener(\"keyup\", handleKeyUp);\n window.removeEventListener(\"blur\", release);\n release();\n };\n }, [code, enabled]);\n}\n"],"mappings":";;AAsBA,IAAa,IAA8C;CACvD;EAAE,MAAM;EAAS,OAAO;CAAS;CACjC;EAAE,MAAM;EAAe,OAAO;CAAgB;CAC9C;EAAE,MAAM;EAAW,OAAO;CAAe;CACzC;EAAE,MAAM;EAAa,OAAO;CAAiB;CAC7C;EAAE,MAAM;EAAa,OAAO;CAAY;AAC5C,GAGa,IAA2B;AASxC,SAAgB,EAAmB,GAAsB;CACrD,OAAO,EAAkB,MAAM,MAAQ,EAAI,SAAS,CAAI,CAAC,EAAE,SAAS;AACxE;AAYA,SAAS,EAAe,GAAqC;CACzD,IAAI,EAAE,aAAkB,cAAc,OAAO;CAC7C,IAAI,EAAO,mBAAmB,OAAO;CACrC,IAAM,IAAM,EAAO;CACnB,OAAO,MAAQ,WAAW,MAAQ,cAAc,MAAQ;AAC5D;AAmDA,SAAgB,EAAc,EAC1B,UAAO,GACP,WACA,SACA,aAAU,MACiB;CAC3B,IAAM,IAAY,EAAO;EAAE;EAAQ;CAAK,CAAC;CAKzC,AAJA,QAAgB;EACZ,EAAU,UAAU;GAAE;GAAQ;EAAK;CACvC,CAAC,GAED,QAAgB;EACZ,IAAI,CAAC,KAAW,OAAO,SAAW,KAAa;EAC/C,IAAI,IAAO,IAEL,UAAsB;GACnB,MACL,IAAO,IACP,EAAU,QAAQ,KAAK;EAC3B,GAEM,KAAiB,MAA+B;GAC9C,EAAM,SAAS,KAAQ,EAAM,UAC7B,EAAe,EAAM,MAAM,MAC/B,EAAM,eAAe,GACjB,OACJ,IAAO,IACP,EAAU,QAAQ,OAAO;EAC7B,GAkBM,KAAe,MAA+B;GAC5C,EAAM,SAAS,KAAS,MAC5B,EAAM,eAAe,GACrB,EAAQ;EACZ;EAMA,OAJA,OAAO,iBAAiB,WAAW,CAAa,GAChD,OAAO,iBAAiB,SAAS,CAAW,GAC5C,OAAO,iBAAiB,QAAQ,CAAO,SAE1B;GAIT,AAHA,OAAO,oBAAoB,WAAW,CAAa,GACnD,OAAO,oBAAoB,SAAS,CAAW,GAC/C,OAAO,oBAAoB,QAAQ,CAAO,GAC1C,EAAQ;EACZ;CACJ,GAAG,CAAC,GAAM,CAAO,CAAC;AACtB"}
1
+ {"version":3,"file":"use-push-to-talk.js","names":["PUSH_TO_TALK_KEYS","DEFAULT_PUSH_TO_TALK_KEY","pushToTalkKeyLabel","key","code","isTypingTarget","target","tag","usePushToTalk","callbacks","useRef","useEffect","enabled","held","release","handleKeyDown","event","handleKeyUp"],"sources":["../../src/hooks/use-push-to-talk.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\n/** A key offered for push-to-talk, with the label a settings screen shows. */\nexport interface PushToTalkKey {\n /** `KeyboardEvent.code`, which is layout-independent. */\n code: string;\n /** What to show a person. `code` itself is not a label. */\n label: string;\n}\n\n/**\n * The keys worth offering for push-to-talk.\n *\n * Identified by `code` rather than `key` so a binding survives a layout change:\n * on an ABNT2 keyboard the `key` reported for the backquote position is not what\n * a US layout reports, while `Backquote` is the same physical key everywhere.\n *\n * Left-hand modifiers only. The right-hand ones sit under the hand that is\n * usually on the mouse, and a modifier that is also a shortcut prefix\n * (`ControlLeft` with a browser shortcut) is a deliberate trade the caller makes\n * by choosing it.\n */\nexport const PUSH_TO_TALK_KEYS: readonly PushToTalkKey[] = [\n { code: \"Space\", label: \"Espaço\" },\n { code: \"ControlLeft\", label: \"Ctrl esquerdo\" },\n { code: \"AltLeft\", label: \"Alt esquerdo\" },\n { code: \"ShiftLeft\", label: \"Shift esquerdo\" },\n { code: \"Backquote\", label: \"Crase (`)\" },\n];\n\n/** The key a caller gets when it does not choose one. */\nexport const DEFAULT_PUSH_TO_TALK_KEY = \"Space\";\n\n/**\n * The label to show for a `KeyboardEvent.code`.\n *\n * @param code - The bound key's code.\n * @returns Its label, or the code itself for a key this list does not name —\n * showing `\"F13\"` beats showing nothing.\n */\nexport function pushToTalkKeyLabel(code: string): string {\n return PUSH_TO_TALK_KEYS.find((key) => key.code === code)?.label ?? code;\n}\n\n/**\n * Whether a keystroke is meant for something the person is typing into.\n *\n * Without this a push-to-talk key bound to Space opens the microphone every time\n * somebody writes a message — and the space never reaches the text field,\n * because the handler preventDefault'd it.\n *\n * @param target - The event's target.\n * @returns `true` when the keystroke belongs to a field, not to the app.\n */\nfunction isTypingTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n return tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\";\n}\n\n/** Options for {@link usePushToTalk}. */\nexport interface UsePushToTalkOptions {\n /** `KeyboardEvent.code` to hold. Default {@link DEFAULT_PUSH_TO_TALK_KEY}. */\n code?: string;\n /** Called once when the key goes down. */\n onDown: () => void;\n /** Called when the key comes up, the window blurs, or the hook unmounts. */\n onUp: () => void;\n /**\n * Whether the binding is live. Default `true`.\n *\n * Turning it off releases first, so flipping a call from push-to-talk to an\n * open microphone while the key is held does not leave `onUp` unfired.\n */\n enabled?: boolean;\n}\n\n/**\n * Hold a key to transmit; release it to go silent again.\n *\n * Looks like `keydown`/`keyup` and is not, because three things go wrong:\n *\n * 1. **`blur` has to release.** Alt-tabbing away while holding the key means the\n * browser never sees the `keyup`, and the microphone stays open for as long as\n * the person is looking at another window — exactly what push-to-talk exists\n * to prevent.\n * 2. **Auto-repeat has to be ignored.** A held key repeats at the keyboard's rate,\n * and without the `repeat` check `onDown` fires on every one of them.\n * 3. **A text field has to win.** Space bound to push-to-talk with the focus in an\n * `<input>` means the space never reaches the message being written.\n *\n * Unmounting releases too, for the same reason `blur` does: the callback that\n * stops transmitting has to run even when the component holding it goes away\n * mid-press.\n *\n * The callbacks are read through a ref that a commit-time effect refreshes, so\n * passing inline arrows neither tears the listeners down on every render nor\n * writes to the ref during one — a render React discards would leave the ref\n * pointing at callbacks that never became the UI.\n *\n * @param options - See {@link UsePushToTalkOptions}.\n *\n * @example\n * usePushToTalk({\n * code: \"Space\",\n * onDown: () => setMicEnabled(true),\n * onUp: () => setMicEnabled(false),\n * });\n */\nexport function usePushToTalk({\n code = DEFAULT_PUSH_TO_TALK_KEY,\n onDown,\n onUp,\n enabled = true,\n}: UsePushToTalkOptions): void {\n const callbacks = useRef({ onDown, onUp });\n useEffect(() => {\n callbacks.current = { onDown, onUp };\n });\n\n useEffect(() => {\n if (!enabled || typeof window === \"undefined\") return;\n let held = false;\n\n const release = (): void => {\n if (!held) return;\n held = false;\n callbacks.current.onUp();\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.code !== code || event.repeat) return;\n if (isTypingTarget(event.target)) return;\n event.preventDefault();\n if (held) return;\n held = true;\n callbacks.current.onDown();\n };\n\n /**\n * Release on the way up, and never mind where the keystroke landed.\n *\n * The field guard belongs on the way **down** — it is what stops a\n * push-to-talk bound to Space from opening the microphone every time\n * somebody writes a message. On the way up it did the opposite of its\n * job: `keyup` is delivered to whatever is focused when the key rises,\n * not to what was focused when it fell, so clicking into an input while\n * still holding sent the release into the guard and left `held` true.\n * The microphone stayed open until the window blurred.\n *\n * `held` is the guard this needs. If we never opened the microphone\n * there is nothing to close, and `release()` already returns on that —\n * so the only thing left to decide is `preventDefault`, which is\n * honest only for a keystroke we actually acted on.\n */\n const handleKeyUp = (event: KeyboardEvent): void => {\n if (event.code !== code || !held) return;\n event.preventDefault();\n release();\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n window.addEventListener(\"keyup\", handleKeyUp);\n window.addEventListener(\"blur\", release);\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n window.removeEventListener(\"keyup\", handleKeyUp);\n window.removeEventListener(\"blur\", release);\n release();\n };\n }, [code, enabled]);\n}\n"],"mappings":";;AAsBA,IAAaA,IAA8C;CACvD;EAAE,MAAM;EAAS,OAAO;CAAS;CACjC;EAAE,MAAM;EAAe,OAAO;CAAgB;CAC9C;EAAE,MAAM;EAAW,OAAO;CAAe;CACzC;EAAE,MAAM;EAAa,OAAO;CAAiB;CAC7C;EAAE,MAAM;EAAa,OAAO;CAAY;AAC5C,GAGaC,IAA2B;AASxC,SAAgBC,EAAmB,GAAsB;CACrD,OAAOF,EAAkB,MAAM,MAAQG,EAAI,SAASC,CAAI,CAAC,EAAE,SAASA;AACxE;AAYA,SAASC,EAAe,GAAqC;CACzD,IAAI,EAAEC,aAAkB,cAAc,OAAO;CAC7C,IAAIA,EAAO,mBAAmB,OAAO;CACrC,IAAMC,IAAMD,EAAO;CACnB,OAAOC,MAAQ,WAAWA,MAAQ,cAAcA,MAAQ;AAC5D;AAmDA,SAAgBC,EAAc,EAC1B,UAAOP,GACP,WACA,SACA,aAAU,MACiB;CAC3B,IAAMQ,IAAYC,EAAO;EAAE;EAAQ;CAAK,CAAC;CAKzC,AAJAC,QAAgB;EACZ,EAAU,UAAU;GAAE;GAAQ;EAAK;CACvC,CAAC,GAEDA,QAAgB;EACZ,IAAI,CAACC,KAAW,OAAO,SAAW,KAAa;EAC/C,IAAIC,IAAO,IAELC,UAAsB;GACxB,AAAKD,MACL,IAAO,IACPJ,EAAU,QAAQ,KAAK;EAC3B,GAEMM,KAAiB,MAA+B;GAClD,AAAIC,EAAM,SAASZ,KAAQY,EAAM,UAC7BX,EAAeW,EAAM,MAAM,MAC/BA,EAAM,eAAe,GACjB,OACJ,IAAO,IACPP,EAAU,QAAQ,OAAO;EAC7B,GAkBMQ,KAAe,MAA+B;GAChD,AAAID,EAAM,SAASZ,KAASS,MAC5BG,EAAM,eAAe,GACrBF,EAAQ;EACZ;EAMA,OAJA,OAAO,iBAAiB,WAAWC,CAAa,GAChD,OAAO,iBAAiB,SAASE,CAAW,GAC5C,OAAO,iBAAiB,QAAQH,CAAO,SAE1B;GAIT,AAHA,OAAO,oBAAoB,WAAWC,CAAa,GACnD,OAAO,oBAAoB,SAASE,CAAW,GAC/C,OAAO,oBAAoB,QAAQH,CAAO,GAC1CA,EAAQ;EACZ;CACJ,GAAG,CAACV,GAAMQ,CAAO,CAAC;AACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-queue.cjs","names":[],"sources":["../../src/hooks/use-queue.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseQueueOptions<T> {\n initialValues?: T[];\n limit?: number;\n}\n\nexport interface UseQueueResult<T> {\n /** Items currently held within the queue (up to `limit`). */\n queue: T[];\n /** Append items; overflow beyond `limit` is held back, not dropped. */\n add: (...items: T[]) => void;\n /** Replace the held queue via a mapper over the current held items. */\n update: (fn: (state: T[]) => T[]) => void;\n /** Drop all currently held (visible) items, keeping any overflow. */\n cleanQueue: () => void;\n /** Number of visible items in the queue. */\n size: number;\n}\n\n/**\n * FIFO queue with an optional `limit`. When more items are added than `limit`\n * allows, the surplus is kept in an internal overflow buffer and surfaces into\n * `queue` as room frees up (e.g. after `cleanQueue`). Loosely mirrors Mantine's\n * `useQueue` shape.\n *\n * @typeParam T - element type.\n * @param options - `initialValues` and `limit` (default limit `Infinity`).\n * @returns `{ queue, add, update, cleanQueue, size }`.\n */\nexport function useQueue<T>(options: UseQueueOptions<T> = {}): UseQueueResult<T> {\n const { initialValues = [], limit = Infinity } = options;\n\n const [state, setState] = useState<{ queue: T[]; overflow: T[] }>(() => ({\n queue: initialValues.slice(0, limit),\n overflow: initialValues.slice(limit),\n }));\n\n const add = useCallback(\n (...items: T[]): void => {\n setState((current) => {\n const all = [...current.queue, ...current.overflow, ...items];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const update = useCallback(\n (fn: (queueState: T[]) => T[]): void => {\n setState((current) => {\n const all = [...fn(current.queue), ...current.overflow];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const cleanQueue = useCallback((): void => {\n setState((current) => ({\n queue: current.overflow.slice(0, limit),\n overflow: current.overflow.slice(limit),\n }));\n }, [limit]);\n\n return useMemo<UseQueueResult<T>>(\n () => ({\n queue: state.queue,\n add,\n update,\n cleanQueue,\n size: state.queue.length,\n }),\n [state.queue, add, update, cleanQueue],\n );\n}\n"],"mappings":"uBA8BA,SAAgB,EAAY,EAA8B,CAAC,EAAsB,CAC7E,GAAM,CAAE,gBAAgB,CAAC,EAAG,QAAQ,KAAa,EAE3C,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,MAA+C,CACrE,MAAO,EAAc,MAAM,EAAG,CAAK,EACnC,SAAU,EAAc,MAAM,CAAK,CACvC,EAAE,EAEI,GAAA,EAAM,EAAA,YAAA,EACP,GAAG,IAAqB,CACrB,EAAU,GAAY,CAClB,IAAM,EAAM,CAAC,GAAG,EAAQ,MAAO,GAAG,EAAQ,SAAU,GAAG,CAAK,EAC5D,MAAO,CACH,MAAO,EAAI,MAAM,EAAG,CAAK,EACzB,SAAU,EAAI,MAAM,CAAK,CAC7B,CACJ,CAAC,CACL,EACA,CAAC,CAAK,CACV,EAEM,GAAA,EAAS,EAAA,YAAA,CACV,GAAuC,CACpC,EAAU,GAAY,CAClB,IAAM,EAAM,CAAC,GAAG,EAAG,EAAQ,KAAK,EAAG,GAAG,EAAQ,QAAQ,EACtD,MAAO,CACH,MAAO,EAAI,MAAM,EAAG,CAAK,EACzB,SAAU,EAAI,MAAM,CAAK,CAC7B,CACJ,CAAC,CACL,EACA,CAAC,CAAK,CACV,EAEM,GAAA,EAAa,EAAA,YAAA,KAAwB,CACvC,EAAU,IAAa,CACnB,MAAO,EAAQ,SAAS,MAAM,EAAG,CAAK,EACtC,SAAU,EAAQ,SAAS,MAAM,CAAK,CAC1C,EAAE,CACN,EAAG,CAAC,CAAK,CAAC,EAEV,OAAA,EAAO,EAAA,QAAA,MACI,CACH,MAAO,EAAM,MACb,MACA,SACA,aACA,KAAM,EAAM,MAAM,MACtB,GACA,CAAC,EAAM,MAAO,EAAK,EAAQ,CAAU,CACzC,CACJ"}
1
+ {"version":3,"file":"use-queue.cjs","names":["useState","useCallback","useMemo","react","useQueue","options","state","setState","initialValues","limit","add","items","all","current","update","fn","cleanQueue"],"sources":["../../src/hooks/use-queue.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseQueueOptions<T> {\n initialValues?: T[];\n limit?: number;\n}\n\nexport interface UseQueueResult<T> {\n /** Items currently held within the queue (up to `limit`). */\n queue: T[];\n /** Append items; overflow beyond `limit` is held back, not dropped. */\n add: (...items: T[]) => void;\n /** Replace the held queue via a mapper over the current held items. */\n update: (fn: (state: T[]) => T[]) => void;\n /** Drop all currently held (visible) items, keeping any overflow. */\n cleanQueue: () => void;\n /** Number of visible items in the queue. */\n size: number;\n}\n\n/**\n * FIFO queue with an optional `limit`. When more items are added than `limit`\n * allows, the surplus is kept in an internal overflow buffer and surfaces into\n * `queue` as room frees up (e.g. after `cleanQueue`). Loosely mirrors Mantine's\n * `useQueue` shape.\n *\n * @typeParam T - element type.\n * @param options - `initialValues` and `limit` (default limit `Infinity`).\n * @returns `{ queue, add, update, cleanQueue, size }`.\n */\nexport function useQueue<T>(options: UseQueueOptions<T> = {}): UseQueueResult<T> {\n const { initialValues = [], limit = Infinity } = options;\n\n const [state, setState] = useState<{ queue: T[]; overflow: T[] }>(() => ({\n queue: initialValues.slice(0, limit),\n overflow: initialValues.slice(limit),\n }));\n\n const add = useCallback(\n (...items: T[]): void => {\n setState((current) => {\n const all = [...current.queue, ...current.overflow, ...items];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const update = useCallback(\n (fn: (queueState: T[]) => T[]): void => {\n setState((current) => {\n const all = [...fn(current.queue), ...current.overflow];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const cleanQueue = useCallback((): void => {\n setState((current) => ({\n queue: current.overflow.slice(0, limit),\n overflow: current.overflow.slice(limit),\n }));\n }, [limit]);\n\n return useMemo<UseQueueResult<T>>(\n () => ({\n queue: state.queue,\n add,\n update,\n cleanQueue,\n size: state.queue.length,\n }),\n [state.queue, add, update, cleanQueue],\n );\n}\n"],"mappings":"A,uBA8BA,SAAgBI,EAAY,EAA8B,CAAC,EAAsB,CAC7E,GAAM,CAAE,gBAAgB,CAAC,EAAG,QAAQ,KAAaC,EAE3C,CAACC,EAAOC,IAAA,EAAYP,EAAAA,SAAAA,MAA+C,CACrE,MAAOQ,EAAc,MAAM,EAAGC,CAAK,EACnC,SAAUD,EAAc,MAAMC,CAAK,CACvC,EAAE,EAEIC,GAAA,EAAMT,EAAAA,YAAAA,EACP,GAAGU,IAAqB,CACrBJ,EAAU,GAAY,CAClB,IAAMK,EAAM,CAAC,GAAGC,EAAQ,MAAO,GAAGA,EAAQ,SAAU,GAAGF,CAAK,EAC5D,MAAO,CACH,MAAOC,EAAI,MAAM,EAAGH,CAAK,EACzB,SAAUG,EAAI,MAAMH,CAAK,CAC7B,CACJ,CAAC,CACL,EACA,CAACA,CAAK,CACV,EAEMK,GAAA,EAASb,EAAAA,YAAAA,CACV,GAAuC,CACpCM,EAAU,GAAY,CAClB,IAAMK,EAAM,CAAC,GAAGG,EAAGF,EAAQ,KAAK,EAAG,GAAGA,EAAQ,QAAQ,EACtD,MAAO,CACH,MAAOD,EAAI,MAAM,EAAGH,CAAK,EACzB,SAAUG,EAAI,MAAMH,CAAK,CAC7B,CACJ,CAAC,CACL,EACA,CAACA,CAAK,CACV,EAEMO,GAAA,EAAaf,EAAAA,YAAAA,KAAwB,CACvCM,EAAU,IAAa,CACnB,MAAOM,EAAQ,SAAS,MAAM,EAAGJ,CAAK,EACtC,SAAUI,EAAQ,SAAS,MAAMJ,CAAK,CAC1C,EAAE,CACN,EAAG,CAACA,CAAK,CAAC,EAEV,OAAA,EAAOP,EAAAA,QAAAA,MACI,CACH,MAAOI,EAAM,MACb,MACA,SACA,aACA,KAAMA,EAAM,MAAM,MACtB,GACA,CAACA,EAAM,MAAOI,EAAKI,EAAQE,CAAU,CACzC,CACJ,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-queue.js","names":[],"sources":["../../src/hooks/use-queue.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseQueueOptions<T> {\n initialValues?: T[];\n limit?: number;\n}\n\nexport interface UseQueueResult<T> {\n /** Items currently held within the queue (up to `limit`). */\n queue: T[];\n /** Append items; overflow beyond `limit` is held back, not dropped. */\n add: (...items: T[]) => void;\n /** Replace the held queue via a mapper over the current held items. */\n update: (fn: (state: T[]) => T[]) => void;\n /** Drop all currently held (visible) items, keeping any overflow. */\n cleanQueue: () => void;\n /** Number of visible items in the queue. */\n size: number;\n}\n\n/**\n * FIFO queue with an optional `limit`. When more items are added than `limit`\n * allows, the surplus is kept in an internal overflow buffer and surfaces into\n * `queue` as room frees up (e.g. after `cleanQueue`). Loosely mirrors Mantine's\n * `useQueue` shape.\n *\n * @typeParam T - element type.\n * @param options - `initialValues` and `limit` (default limit `Infinity`).\n * @returns `{ queue, add, update, cleanQueue, size }`.\n */\nexport function useQueue<T>(options: UseQueueOptions<T> = {}): UseQueueResult<T> {\n const { initialValues = [], limit = Infinity } = options;\n\n const [state, setState] = useState<{ queue: T[]; overflow: T[] }>(() => ({\n queue: initialValues.slice(0, limit),\n overflow: initialValues.slice(limit),\n }));\n\n const add = useCallback(\n (...items: T[]): void => {\n setState((current) => {\n const all = [...current.queue, ...current.overflow, ...items];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const update = useCallback(\n (fn: (queueState: T[]) => T[]): void => {\n setState((current) => {\n const all = [...fn(current.queue), ...current.overflow];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const cleanQueue = useCallback((): void => {\n setState((current) => ({\n queue: current.overflow.slice(0, limit),\n overflow: current.overflow.slice(limit),\n }));\n }, [limit]);\n\n return useMemo<UseQueueResult<T>>(\n () => ({\n queue: state.queue,\n add,\n update,\n cleanQueue,\n size: state.queue.length,\n }),\n [state.queue, add, update, cleanQueue],\n );\n}\n"],"mappings":";;AA8BA,SAAgB,EAAY,IAA8B,CAAC,GAAsB;CAC7E,IAAM,EAAE,mBAAgB,CAAC,GAAG,WAAQ,aAAa,GAE3C,CAAC,GAAO,KAAY,SAA+C;EACrE,OAAO,EAAc,MAAM,GAAG,CAAK;EACnC,UAAU,EAAc,MAAM,CAAK;CACvC,EAAE,GAEI,IAAM,GACP,GAAG,MAAqB;EACrB,GAAU,MAAY;GAClB,IAAM,IAAM;IAAC,GAAG,EAAQ;IAAO,GAAG,EAAQ;IAAU,GAAG;GAAK;GAC5D,OAAO;IACH,OAAO,EAAI,MAAM,GAAG,CAAK;IACzB,UAAU,EAAI,MAAM,CAAK;GAC7B;EACJ,CAAC;CACL,GACA,CAAC,CAAK,CACV,GAEM,IAAS,GACV,MAAuC;EACpC,GAAU,MAAY;GAClB,IAAM,IAAM,CAAC,GAAG,EAAG,EAAQ,KAAK,GAAG,GAAG,EAAQ,QAAQ;GACtD,OAAO;IACH,OAAO,EAAI,MAAM,GAAG,CAAK;IACzB,UAAU,EAAI,MAAM,CAAK;GAC7B;EACJ,CAAC;CACL,GACA,CAAC,CAAK,CACV,GAEM,IAAa,QAAwB;EACvC,GAAU,OAAa;GACnB,OAAO,EAAQ,SAAS,MAAM,GAAG,CAAK;GACtC,UAAU,EAAQ,SAAS,MAAM,CAAK;EAC1C,EAAE;CACN,GAAG,CAAC,CAAK,CAAC;CAEV,OAAO,SACI;EACH,OAAO,EAAM;EACb;EACA;EACA;EACA,MAAM,EAAM,MAAM;CACtB,IACA;EAAC,EAAM;EAAO;EAAK;EAAQ;CAAU,CACzC;AACJ"}
1
+ {"version":3,"file":"use-queue.js","names":["useQueue","options","state","setState","useState","initialValues","limit","add","useCallback","items","all","current","update","fn","cleanQueue","useMemo"],"sources":["../../src/hooks/use-queue.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseQueueOptions<T> {\n initialValues?: T[];\n limit?: number;\n}\n\nexport interface UseQueueResult<T> {\n /** Items currently held within the queue (up to `limit`). */\n queue: T[];\n /** Append items; overflow beyond `limit` is held back, not dropped. */\n add: (...items: T[]) => void;\n /** Replace the held queue via a mapper over the current held items. */\n update: (fn: (state: T[]) => T[]) => void;\n /** Drop all currently held (visible) items, keeping any overflow. */\n cleanQueue: () => void;\n /** Number of visible items in the queue. */\n size: number;\n}\n\n/**\n * FIFO queue with an optional `limit`. When more items are added than `limit`\n * allows, the surplus is kept in an internal overflow buffer and surfaces into\n * `queue` as room frees up (e.g. after `cleanQueue`). Loosely mirrors Mantine's\n * `useQueue` shape.\n *\n * @typeParam T - element type.\n * @param options - `initialValues` and `limit` (default limit `Infinity`).\n * @returns `{ queue, add, update, cleanQueue, size }`.\n */\nexport function useQueue<T>(options: UseQueueOptions<T> = {}): UseQueueResult<T> {\n const { initialValues = [], limit = Infinity } = options;\n\n const [state, setState] = useState<{ queue: T[]; overflow: T[] }>(() => ({\n queue: initialValues.slice(0, limit),\n overflow: initialValues.slice(limit),\n }));\n\n const add = useCallback(\n (...items: T[]): void => {\n setState((current) => {\n const all = [...current.queue, ...current.overflow, ...items];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const update = useCallback(\n (fn: (queueState: T[]) => T[]): void => {\n setState((current) => {\n const all = [...fn(current.queue), ...current.overflow];\n return {\n queue: all.slice(0, limit),\n overflow: all.slice(limit),\n };\n });\n },\n [limit],\n );\n\n const cleanQueue = useCallback((): void => {\n setState((current) => ({\n queue: current.overflow.slice(0, limit),\n overflow: current.overflow.slice(limit),\n }));\n }, [limit]);\n\n return useMemo<UseQueueResult<T>>(\n () => ({\n queue: state.queue,\n add,\n update,\n cleanQueue,\n size: state.queue.length,\n }),\n [state.queue, add, update, cleanQueue],\n );\n}\n"],"mappings":";;AA8BA,SAAgBA,EAAY,IAA8B,CAAC,GAAsB;CAC7E,IAAM,EAAE,mBAAgB,CAAC,GAAG,WAAQ,aAAaC,GAE3C,CAACC,GAAOC,KAAYC,SAA+C;EACrE,OAAOC,EAAc,MAAM,GAAGC,CAAK;EACnC,UAAUD,EAAc,MAAMC,CAAK;CACvC,EAAE,GAEIC,IAAMC,GACP,GAAGC,MAAqB;EACrB,GAAU,MAAY;GAClB,IAAMC,IAAM;IAAC,GAAGC,EAAQ;IAAO,GAAGA,EAAQ;IAAU,GAAGF;GAAK;GAC5D,OAAO;IACH,OAAOC,EAAI,MAAM,GAAGJ,CAAK;IACzB,UAAUI,EAAI,MAAMJ,CAAK;GAC7B;EACJ,CAAC;CACL,GACA,CAACA,CAAK,CACV,GAEMM,IAASJ,GACV,MAAuC;EACpC,GAAU,MAAY;GAClB,IAAME,IAAM,CAAC,GAAGG,EAAGF,EAAQ,KAAK,GAAG,GAAGA,EAAQ,QAAQ;GACtD,OAAO;IACH,OAAOD,EAAI,MAAM,GAAGJ,CAAK;IACzB,UAAUI,EAAI,MAAMJ,CAAK;GAC7B;EACJ,CAAC;CACL,GACA,CAACA,CAAK,CACV,GAEMQ,IAAaN,QAAwB;EACvC,GAAU,OAAa;GACnB,OAAOG,EAAQ,SAAS,MAAM,GAAGL,CAAK;GACtC,UAAUK,EAAQ,SAAS,MAAML,CAAK;EAC1C,EAAE;CACN,GAAG,CAACA,CAAK,CAAC;CAEV,OAAOS,SACI;EACH,OAAOb,EAAM;EACb;EACA;EACA;EACA,MAAMA,EAAM,MAAM;CACtB,IACA;EAACA,EAAM;EAAOK;EAAKK;EAAQE;CAAU,CACzC;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-resize-observer.cjs","names":[],"sources":["../../src/hooks/use-resize-observer.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { RefObject } from \"react\";\n\nexport interface ElementSize {\n width: number;\n height: number;\n}\n\n/**\n * Track size changes of a DOM element via `ResizeObserver`.\n * Returns `null` until the first measurement.\n */\nexport function useResizeObserver(ref: RefObject<Element | null>): ElementSize | null {\n const [size, setSize] = useState<ElementSize | null>(null);\n\n useEffect(() => {\n const target = ref.current;\n if (!target || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n const box = entry.contentRect;\n setSize({ width: box.width, height: box.height });\n });\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n"],"mappings":"uBAYA,SAAgB,EAAkB,EAAoD,CAClF,GAAM,CAAC,EAAM,IAAA,EAAW,EAAA,SAAA,CAA6B,IAAI,EAiBzD,OAfA,EAAA,EAAA,UAAA,KAAgB,CACZ,IAAM,EAAS,EAAI,QACnB,GAAI,CAAC,GAAU,OAAO,eAAmB,IAAa,OAEtD,IAAM,EAAW,IAAI,eAAgB,GAAY,CAC7C,IAAM,EAAQ,EAAQ,GACtB,GAAI,CAAC,EAAO,OACZ,IAAM,EAAM,EAAM,YAClB,EAAQ,CAAE,MAAO,EAAI,MAAO,OAAQ,EAAI,MAAO,CAAC,CACpD,CAAC,EAGD,OADA,EAAS,QAAQ,CAAM,MACV,EAAS,WAAW,CACrC,EAAG,CAAC,CAAG,CAAC,EAED,CACX"}
1
+ {"version":3,"file":"use-resize-observer.cjs","names":["useState","react","useResizeObserver","size","setSize","target","ref","observer","entry","entries","box"],"sources":["../../src/hooks/use-resize-observer.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { RefObject } from \"react\";\n\nexport interface ElementSize {\n width: number;\n height: number;\n}\n\n/**\n * Track size changes of a DOM element via `ResizeObserver`.\n * Returns `null` until the first measurement.\n */\nexport function useResizeObserver(ref: RefObject<Element | null>): ElementSize | null {\n const [size, setSize] = useState<ElementSize | null>(null);\n\n useEffect(() => {\n const target = ref.current;\n if (!target || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n const box = entry.contentRect;\n setSize({ width: box.width, height: box.height });\n });\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n"],"mappings":"A,uBAYA,SAAgBE,EAAkB,EAAoD,CAClF,GAAM,CAACC,EAAMC,IAAA,EAAWJ,EAAAA,SAAAA,CAA6B,IAAI,EAiBzD,OAfA,EAAAC,EAAA,UAAA,KAAgB,CACZ,IAAMI,EAASC,EAAI,QACnB,GAAI,CAACD,GAAU,OAAO,eAAmB,IAAa,OAEtD,IAAME,EAAW,IAAI,eAAgB,GAAY,CAC7C,IAAMC,EAAQC,EAAQ,GACtB,GAAI,CAACD,EAAO,OACZ,IAAME,EAAMF,EAAM,YAClBJ,EAAQ,CAAE,MAAOM,EAAI,MAAO,OAAQA,EAAI,MAAO,CAAC,CACpD,CAAC,EAGD,OADAH,EAAS,QAAQF,CAAM,MACVE,EAAS,WAAW,CACrC,EAAG,CAACD,CAAG,CAAC,EAEDH,CACX,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-resize-observer.js","names":[],"sources":["../../src/hooks/use-resize-observer.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { RefObject } from \"react\";\n\nexport interface ElementSize {\n width: number;\n height: number;\n}\n\n/**\n * Track size changes of a DOM element via `ResizeObserver`.\n * Returns `null` until the first measurement.\n */\nexport function useResizeObserver(ref: RefObject<Element | null>): ElementSize | null {\n const [size, setSize] = useState<ElementSize | null>(null);\n\n useEffect(() => {\n const target = ref.current;\n if (!target || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n const box = entry.contentRect;\n setSize({ width: box.width, height: box.height });\n });\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n"],"mappings":";;AAYA,SAAgB,EAAkB,GAAoD;CAClF,IAAM,CAAC,GAAM,KAAW,EAA6B,IAAI;CAiBzD,OAfA,QAAgB;EACZ,IAAM,IAAS,EAAI;EACnB,IAAI,CAAC,KAAU,OAAO,iBAAmB,KAAa;EAEtD,IAAM,IAAW,IAAI,gBAAgB,MAAY;GAC7C,IAAM,IAAQ,EAAQ;GACtB,IAAI,CAAC,GAAO;GACZ,IAAM,IAAM,EAAM;GAClB,EAAQ;IAAE,OAAO,EAAI;IAAO,QAAQ,EAAI;GAAO,CAAC;EACpD,CAAC;EAGD,OADA,EAAS,QAAQ,CAAM,SACV,EAAS,WAAW;CACrC,GAAG,CAAC,CAAG,CAAC,GAED;AACX"}
1
+ {"version":3,"file":"use-resize-observer.js","names":["useResizeObserver","size","setSize","useState","useEffect","target","ref","observer","entry","entries","box"],"sources":["../../src/hooks/use-resize-observer.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { RefObject } from \"react\";\n\nexport interface ElementSize {\n width: number;\n height: number;\n}\n\n/**\n * Track size changes of a DOM element via `ResizeObserver`.\n * Returns `null` until the first measurement.\n */\nexport function useResizeObserver(ref: RefObject<Element | null>): ElementSize | null {\n const [size, setSize] = useState<ElementSize | null>(null);\n\n useEffect(() => {\n const target = ref.current;\n if (!target || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n const box = entry.contentRect;\n setSize({ width: box.width, height: box.height });\n });\n\n observer.observe(target);\n return () => observer.disconnect();\n }, [ref]);\n\n return size;\n}\n"],"mappings":";;AAYA,SAAgBA,EAAkB,GAAoD;CAClF,IAAM,CAACC,GAAMC,KAAWC,EAA6B,IAAI;CAiBzD,OAfAC,QAAgB;EACZ,IAAMC,IAASC,EAAI;EACnB,IAAI,CAACD,KAAU,OAAO,iBAAmB,KAAa;EAEtD,IAAME,IAAW,IAAI,gBAAgB,MAAY;GAC7C,IAAMC,IAAQC,EAAQ;GACtB,IAAI,CAACD,GAAO;GACZ,IAAME,IAAMF,EAAM;GAClB,EAAQ;IAAE,OAAOE,EAAI;IAAO,QAAQA,EAAI;GAAO,CAAC;EACpD,CAAC;EAGD,OADAH,EAAS,QAAQF,CAAM,SACVE,EAAS,WAAW;CACrC,GAAG,CAACD,CAAG,CAAC,GAEDL;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-scroll-lock.cjs","names":[],"sources":["../../src/hooks/use-scroll-lock.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Lock `<body>` scroll while `active` is true. Restores the previous overflow\n * value on unmount. Safe to nest: stacks the restoration via a counter.\n */\nexport function useScrollLock(active: boolean): void {\n useEffect(() => {\n if (!active || typeof document === \"undefined\") return;\n const body = document.body;\n const previous = body.style.overflow;\n body.style.overflow = \"hidden\";\n return () => {\n body.style.overflow = previous;\n };\n }, [active]);\n}\n"],"mappings":"uBAMA,SAAgB,EAAc,EAAuB,EACjD,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,GAAU,OAAO,SAAa,IAAa,OAChD,IAAM,EAAO,SAAS,KAChB,EAAW,EAAK,MAAM,SAE5B,MADA,GAAK,MAAM,SAAW,aACT,CACT,EAAK,MAAM,SAAW,CAC1B,CACJ,EAAG,CAAC,CAAM,CAAC,CACf"}
1
+ {"version":3,"file":"use-scroll-lock.cjs","names":["react","useScrollLock","active","body","previous"],"sources":["../../src/hooks/use-scroll-lock.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Lock `<body>` scroll while `active` is true. Restores the previous overflow\n * value on unmount. Safe to nest: stacks the restoration via a counter.\n */\nexport function useScrollLock(active: boolean): void {\n useEffect(() => {\n if (!active || typeof document === \"undefined\") return;\n const body = document.body;\n const previous = body.style.overflow;\n body.style.overflow = \"hidden\";\n return () => {\n body.style.overflow = previous;\n };\n }, [active]);\n}\n"],"mappings":"A,uBAMA,SAAgBC,EAAc,EAAuB,EACjD,EAAAD,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACE,GAAU,OAAO,SAAa,IAAa,OAChD,IAAMC,EAAO,SAAS,KAChBC,EAAWD,EAAK,MAAM,SAE5B,MADA,GAAK,MAAM,SAAW,aACT,CACT,EAAK,MAAM,SAAWC,CAC1B,CACJ,EAAG,CAACF,CAAM,CAAC,CACf,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-scroll-lock.js","names":[],"sources":["../../src/hooks/use-scroll-lock.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Lock `<body>` scroll while `active` is true. Restores the previous overflow\n * value on unmount. Safe to nest: stacks the restoration via a counter.\n */\nexport function useScrollLock(active: boolean): void {\n useEffect(() => {\n if (!active || typeof document === \"undefined\") return;\n const body = document.body;\n const previous = body.style.overflow;\n body.style.overflow = \"hidden\";\n return () => {\n body.style.overflow = previous;\n };\n }, [active]);\n}\n"],"mappings":";;AAMA,SAAgB,EAAc,GAAuB;CACjD,QAAgB;EACZ,IAAI,CAAC,KAAU,OAAO,WAAa,KAAa;EAChD,IAAM,IAAO,SAAS,MAChB,IAAW,EAAK,MAAM;EAE5B,OADA,EAAK,MAAM,WAAW,gBACT;GACT,EAAK,MAAM,WAAW;EAC1B;CACJ,GAAG,CAAC,CAAM,CAAC;AACf"}
1
+ {"version":3,"file":"use-scroll-lock.js","names":["useScrollLock","active","body","previous"],"sources":["../../src/hooks/use-scroll-lock.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Lock `<body>` scroll while `active` is true. Restores the previous overflow\n * value on unmount. Safe to nest: stacks the restoration via a counter.\n */\nexport function useScrollLock(active: boolean): void {\n useEffect(() => {\n if (!active || typeof document === \"undefined\") return;\n const body = document.body;\n const previous = body.style.overflow;\n body.style.overflow = \"hidden\";\n return () => {\n body.style.overflow = previous;\n };\n }, [active]);\n}\n"],"mappings":";;AAMA,SAAgBA,EAAc,GAAuB;CACjD,QAAgB;EACZ,IAAI,CAACC,KAAU,OAAO,WAAa,KAAa;EAChD,IAAMC,IAAO,SAAS,MAChBC,IAAWD,EAAK,MAAM;EAE5B,OADA,EAAK,MAAM,WAAW,gBACT;GACT,EAAK,MAAM,WAAWC;EAC1B;CACJ,GAAG,CAACF,CAAM,CAAC;AACf"}