tempest-react-sdk 0.78.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 (1585) hide show
  1. package/README.md +6 -6
  2. package/bin/lib/openapi/generate.mjs +168 -64
  3. package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
  4. package/bin/lib/openapi/generate.test.mjs +263 -1
  5. package/dist/access/Can.cjs.map +1 -1
  6. package/dist/access/Can.js.map +1 -1
  7. package/dist/access/access-control-context.cjs.map +1 -1
  8. package/dist/access/access-control-context.js.map +1 -1
  9. package/dist/access/create-role-access-control.cjs.map +1 -1
  10. package/dist/access/create-role-access-control.js.map +1 -1
  11. package/dist/access/permissions-from-token.cjs.map +1 -1
  12. package/dist/access/permissions-from-token.js.map +1 -1
  13. package/dist/access/use-can.cjs.map +1 -1
  14. package/dist/access/use-can.js.map +1 -1
  15. package/dist/app/AppProviders.cjs.map +1 -1
  16. package/dist/app/AppProviders.js.map +1 -1
  17. package/dist/audio/audio-bus.cjs.map +1 -1
  18. package/dist/audio/audio-bus.js.map +1 -1
  19. package/dist/audio/audio-output.cjs.map +1 -1
  20. package/dist/audio/audio-output.js.map +1 -1
  21. package/dist/audio/audio-player.cjs.map +1 -1
  22. package/dist/audio/audio-player.js.map +1 -1
  23. package/dist/audio/audio-recorder.cjs.map +1 -1
  24. package/dist/audio/audio-recorder.js.map +1 -1
  25. package/dist/audio/duration.cjs.map +1 -1
  26. package/dist/audio/duration.js.map +1 -1
  27. package/dist/audio/level-meter.cjs.map +1 -1
  28. package/dist/audio/level-meter.js.map +1 -1
  29. package/dist/audio/media-access.cjs.map +1 -1
  30. package/dist/audio/media-access.js.map +1 -1
  31. package/dist/audio/noise-floor.cjs.map +1 -1
  32. package/dist/audio/noise-floor.js.map +1 -1
  33. package/dist/audio/sfx-pool.cjs.map +1 -1
  34. package/dist/audio/sfx-pool.js.map +1 -1
  35. package/dist/audio/use-audio-bus.cjs.map +1 -1
  36. package/dist/audio/use-audio-bus.js.map +1 -1
  37. package/dist/audio/use-audio-recorder.cjs.map +1 -1
  38. package/dist/audio/use-audio-recorder.js.map +1 -1
  39. package/dist/audio/use-audio.cjs.map +1 -1
  40. package/dist/audio/use-audio.js.map +1 -1
  41. package/dist/audio/use-microphone.cjs +1 -1
  42. package/dist/audio/use-microphone.cjs.map +1 -1
  43. package/dist/audio/use-microphone.js +1 -5
  44. package/dist/audio/use-microphone.js.map +1 -1
  45. package/dist/audio/use-sfx-pool.cjs.map +1 -1
  46. package/dist/audio/use-sfx-pool.js.map +1 -1
  47. package/dist/audio/voice-activity.cjs.map +1 -1
  48. package/dist/audio/voice-activity.js.map +1 -1
  49. package/dist/audio/voice-chain-stages.cjs.map +1 -1
  50. package/dist/audio/voice-chain-stages.js.map +1 -1
  51. package/dist/audio/voice-chain.cjs.map +1 -1
  52. package/dist/audio/voice-chain.js.map +1 -1
  53. package/dist/audio/wav.cjs.map +1 -1
  54. package/dist/audio/wav.js.map +1 -1
  55. package/dist/auth/AuthGuard.cjs.map +1 -1
  56. package/dist/auth/AuthGuard.js.map +1 -1
  57. package/dist/auth/create-auth-store.cjs.map +1 -1
  58. package/dist/auth/create-auth-store.js.map +1 -1
  59. package/dist/auth/create-tempest-auth.cjs +1 -1
  60. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  61. package/dist/auth/create-tempest-auth.js +1 -3
  62. package/dist/auth/create-tempest-auth.js.map +1 -1
  63. package/dist/auth/jwt.cjs.map +1 -1
  64. package/dist/auth/jwt.js.map +1 -1
  65. package/dist/auth/lazy-with-retry.cjs.map +1 -1
  66. package/dist/auth/lazy-with-retry.js.map +1 -1
  67. package/dist/auth/passkey.cjs.map +1 -1
  68. package/dist/auth/passkey.js.map +1 -1
  69. package/dist/auth/refresh-queue.cjs.map +1 -1
  70. package/dist/auth/refresh-queue.js.map +1 -1
  71. package/dist/auth/use-passkey.cjs +1 -1
  72. package/dist/auth/use-passkey.cjs.map +1 -1
  73. package/dist/auth/use-passkey.js +1 -1
  74. package/dist/auth/use-passkey.js.map +1 -1
  75. package/dist/br/BrazilMap.cjs.map +1 -1
  76. package/dist/br/BrazilMap.js.map +1 -1
  77. package/dist/br/BrazilMap.module.cjs.map +1 -1
  78. package/dist/br/BrazilMap.module.js.map +1 -1
  79. package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
  80. package/dist/br/BrazilStateCitySelect.js.map +1 -1
  81. package/dist/br/BrazilStateMap.cjs.map +1 -1
  82. package/dist/br/BrazilStateMap.js.map +1 -1
  83. package/dist/br/MapLegend.cjs.map +1 -1
  84. package/dist/br/MapLegend.js.map +1 -1
  85. package/dist/br/MapLegend.module.cjs.map +1 -1
  86. package/dist/br/MapLegend.module.js.map +1 -1
  87. package/dist/br/MapMarkers.cjs.map +1 -1
  88. package/dist/br/MapMarkers.js.map +1 -1
  89. package/dist/br/MapTooltip.cjs.map +1 -1
  90. package/dist/br/MapTooltip.js.map +1 -1
  91. package/dist/br/MunicipalitySearch.cjs +1 -1
  92. package/dist/br/MunicipalitySearch.cjs.map +1 -1
  93. package/dist/br/MunicipalitySearch.js +2 -5
  94. package/dist/br/MunicipalitySearch.js.map +1 -1
  95. package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
  96. package/dist/br/MunicipalitySearch.module.js.map +1 -1
  97. package/dist/br/PixQRCode.cjs.map +1 -1
  98. package/dist/br/PixQRCode.js.map +1 -1
  99. package/dist/br/PixQRCode.module.cjs.map +1 -1
  100. package/dist/br/PixQRCode.module.js.map +1 -1
  101. package/dist/br/boleto.cjs.map +1 -1
  102. package/dist/br/boleto.js.map +1 -1
  103. package/dist/br/br-geo.cjs.map +1 -1
  104. package/dist/br/br-geo.js.map +1 -1
  105. package/dist/br/data/br-centroids.cjs.map +1 -1
  106. package/dist/br/data/br-centroids.js.map +1 -1
  107. package/dist/br/data/br-locations.cjs.map +1 -1
  108. package/dist/br/data/br-locations.js.map +1 -1
  109. package/dist/br/data/br-uf-geo.cjs.map +1 -1
  110. package/dist/br/data/br-uf-geo.js.map +1 -1
  111. package/dist/br/data/mun/AC.cjs.map +1 -1
  112. package/dist/br/data/mun/AC.js.map +1 -1
  113. package/dist/br/data/mun/AL.cjs.map +1 -1
  114. package/dist/br/data/mun/AL.js.map +1 -1
  115. package/dist/br/data/mun/AM.cjs.map +1 -1
  116. package/dist/br/data/mun/AM.js.map +1 -1
  117. package/dist/br/data/mun/AP.cjs.map +1 -1
  118. package/dist/br/data/mun/AP.js.map +1 -1
  119. package/dist/br/data/mun/BA.cjs.map +1 -1
  120. package/dist/br/data/mun/BA.js.map +1 -1
  121. package/dist/br/data/mun/CE.cjs.map +1 -1
  122. package/dist/br/data/mun/CE.js.map +1 -1
  123. package/dist/br/data/mun/DF.cjs.map +1 -1
  124. package/dist/br/data/mun/DF.js.map +1 -1
  125. package/dist/br/data/mun/ES.cjs.map +1 -1
  126. package/dist/br/data/mun/ES.js.map +1 -1
  127. package/dist/br/data/mun/GO.cjs.map +1 -1
  128. package/dist/br/data/mun/GO.js.map +1 -1
  129. package/dist/br/data/mun/MA.cjs.map +1 -1
  130. package/dist/br/data/mun/MA.js.map +1 -1
  131. package/dist/br/data/mun/MG.cjs.map +1 -1
  132. package/dist/br/data/mun/MG.js.map +1 -1
  133. package/dist/br/data/mun/MS.cjs.map +1 -1
  134. package/dist/br/data/mun/MS.js.map +1 -1
  135. package/dist/br/data/mun/MT.cjs.map +1 -1
  136. package/dist/br/data/mun/MT.js.map +1 -1
  137. package/dist/br/data/mun/PA.cjs.map +1 -1
  138. package/dist/br/data/mun/PA.js.map +1 -1
  139. package/dist/br/data/mun/PB.cjs.map +1 -1
  140. package/dist/br/data/mun/PB.js.map +1 -1
  141. package/dist/br/data/mun/PE.cjs.map +1 -1
  142. package/dist/br/data/mun/PE.js.map +1 -1
  143. package/dist/br/data/mun/PI.cjs.map +1 -1
  144. package/dist/br/data/mun/PI.js.map +1 -1
  145. package/dist/br/data/mun/PR.cjs.map +1 -1
  146. package/dist/br/data/mun/PR.js.map +1 -1
  147. package/dist/br/data/mun/RJ.cjs.map +1 -1
  148. package/dist/br/data/mun/RJ.js.map +1 -1
  149. package/dist/br/data/mun/RN.cjs.map +1 -1
  150. package/dist/br/data/mun/RN.js.map +1 -1
  151. package/dist/br/data/mun/RO.cjs.map +1 -1
  152. package/dist/br/data/mun/RO.js.map +1 -1
  153. package/dist/br/data/mun/RR.cjs.map +1 -1
  154. package/dist/br/data/mun/RR.js.map +1 -1
  155. package/dist/br/data/mun/RS.cjs.map +1 -1
  156. package/dist/br/data/mun/RS.js.map +1 -1
  157. package/dist/br/data/mun/SC.cjs.map +1 -1
  158. package/dist/br/data/mun/SC.js.map +1 -1
  159. package/dist/br/data/mun/SE.cjs.map +1 -1
  160. package/dist/br/data/mun/SE.js.map +1 -1
  161. package/dist/br/data/mun/SP.cjs.map +1 -1
  162. package/dist/br/data/mun/SP.js.map +1 -1
  163. package/dist/br/data/mun/TO.cjs.map +1 -1
  164. package/dist/br/data/mun/TO.js.map +1 -1
  165. package/dist/br/geocode.cjs.map +1 -1
  166. package/dist/br/geocode.js.map +1 -1
  167. package/dist/br/holidays.cjs.map +1 -1
  168. package/dist/br/holidays.js.map +1 -1
  169. package/dist/br/locations.cjs.map +1 -1
  170. package/dist/br/locations.js.map +1 -1
  171. package/dist/br/nfe.cjs.map +1 -1
  172. package/dist/br/nfe.js.map +1 -1
  173. package/dist/br/pix.cjs +1 -1
  174. package/dist/br/pix.cjs.map +1 -1
  175. package/dist/br/pix.js +108 -74
  176. package/dist/br/pix.js.map +1 -1
  177. package/dist/br/regions.cjs.map +1 -1
  178. package/dist/br/regions.js.map +1 -1
  179. package/dist/br/scales.cjs.map +1 -1
  180. package/dist/br/scales.js.map +1 -1
  181. package/dist/br/state-geo.cjs.map +1 -1
  182. package/dist/br/state-geo.js.map +1 -1
  183. package/dist/br/svg-utils.cjs.map +1 -1
  184. package/dist/br/svg-utils.js.map +1 -1
  185. package/dist/br/use-map-hover.cjs.map +1 -1
  186. package/dist/br/use-map-hover.js.map +1 -1
  187. package/dist/br/use-map-zoom.cjs.map +1 -1
  188. package/dist/br/use-map-zoom.js.map +1 -1
  189. package/dist/br/whatsapp.cjs.map +1 -1
  190. package/dist/br/whatsapp.js.map +1 -1
  191. package/dist/br.cjs.map +1 -1
  192. package/dist/br.d.ts +6 -2
  193. package/dist/br.js.map +1 -1
  194. package/dist/capture/barcode.cjs.map +1 -1
  195. package/dist/capture/barcode.js.map +1 -1
  196. package/dist/capture/media-recorder.cjs.map +1 -1
  197. package/dist/capture/media-recorder.js.map +1 -1
  198. package/dist/capture/use-barcode-scanner.cjs.map +1 -1
  199. package/dist/capture/use-barcode-scanner.js.map +1 -1
  200. package/dist/capture/use-screen-capture.cjs +1 -1
  201. package/dist/capture/use-screen-capture.cjs.map +1 -1
  202. package/dist/capture/use-screen-capture.js +1 -7
  203. package/dist/capture/use-screen-capture.js.map +1 -1
  204. package/dist/capture/use-speech-recognition.cjs +1 -1
  205. package/dist/capture/use-speech-recognition.cjs.map +1 -1
  206. package/dist/capture/use-speech-recognition.js +35 -36
  207. package/dist/capture/use-speech-recognition.js.map +1 -1
  208. package/dist/capture/use-torch.cjs.map +1 -1
  209. package/dist/capture/use-torch.js.map +1 -1
  210. package/dist/capture/use-video-recorder.cjs.map +1 -1
  211. package/dist/capture/use-video-recorder.js.map +1 -1
  212. package/dist/capture/video-recorder.cjs.map +1 -1
  213. package/dist/capture/video-recorder.js.map +1 -1
  214. package/dist/charts/AreaChart.cjs.map +1 -1
  215. package/dist/charts/AreaChart.js.map +1 -1
  216. package/dist/charts/BarChart.cjs.map +1 -1
  217. package/dist/charts/BarChart.js.map +1 -1
  218. package/dist/charts/LineChart.cjs.map +1 -1
  219. package/dist/charts/LineChart.js.map +1 -1
  220. package/dist/charts/PieChart.cjs.map +1 -1
  221. package/dist/charts/PieChart.js.map +1 -1
  222. package/dist/charts/RadarChart.cjs.map +1 -1
  223. package/dist/charts/RadarChart.js.map +1 -1
  224. package/dist/charts/palette.cjs.map +1 -1
  225. package/dist/charts/palette.js.map +1 -1
  226. package/dist/charts/scales.cjs.map +1 -1
  227. package/dist/charts/scales.js.map +1 -1
  228. package/dist/charts/types.cjs.map +1 -1
  229. package/dist/charts/types.js.map +1 -1
  230. package/dist/charts/use-chart-colors.cjs.map +1 -1
  231. package/dist/charts/use-chart-colors.js.map +1 -1
  232. package/dist/components/AIChat/AIChat.cjs +1 -1
  233. package/dist/components/AIChat/AIChat.cjs.map +1 -1
  234. package/dist/components/AIChat/AIChat.js +1 -5
  235. package/dist/components/AIChat/AIChat.js.map +1 -1
  236. package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
  237. package/dist/components/AIChat/AIChat.module.js.map +1 -1
  238. package/dist/components/AIChat/AIChatComposer.cjs +1 -1
  239. package/dist/components/AIChat/AIChatComposer.cjs.map +1 -1
  240. package/dist/components/AIChat/AIChatComposer.js +1 -7
  241. package/dist/components/AIChat/AIChatComposer.js.map +1 -1
  242. package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
  243. package/dist/components/AIChat/AIChatTurn.js.map +1 -1
  244. package/dist/components/AIChat/ai-chat-turns.cjs.map +1 -1
  245. package/dist/components/AIChat/ai-chat-turns.js.map +1 -1
  246. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  247. package/dist/components/Accordion/Accordion.js.map +1 -1
  248. package/dist/components/Accordion/Accordion.module.cjs.map +1 -1
  249. package/dist/components/Accordion/Accordion.module.js.map +1 -1
  250. package/dist/components/Alert/Alert.cjs.map +1 -1
  251. package/dist/components/Alert/Alert.js.map +1 -1
  252. package/dist/components/Alert/Alert.module.cjs.map +1 -1
  253. package/dist/components/Alert/Alert.module.js.map +1 -1
  254. package/dist/components/AppBar/AppBar.cjs.map +1 -1
  255. package/dist/components/AppBar/AppBar.js.map +1 -1
  256. package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
  257. package/dist/components/AppBar/AppBar.module.js.map +1 -1
  258. package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
  259. package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
  260. package/dist/components/AppBar/use-sticky-body-warning.js +1 -1
  261. package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
  262. package/dist/components/AppShell/AppShell.cjs.map +1 -1
  263. package/dist/components/AppShell/AppShell.js.map +1 -1
  264. package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
  265. package/dist/components/AppShell/AppShell.module.js.map +1 -1
  266. package/dist/components/AspectRatio/AspectRatio.cjs.map +1 -1
  267. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  268. package/dist/components/AspectRatio/AspectRatio.module.cjs.map +1 -1
  269. package/dist/components/AspectRatio/AspectRatio.module.js.map +1 -1
  270. package/dist/components/AudioPlayer/AudioPlayer.cjs +1 -1
  271. package/dist/components/AudioPlayer/AudioPlayer.cjs.map +1 -1
  272. package/dist/components/AudioPlayer/AudioPlayer.js +1 -7
  273. package/dist/components/AudioPlayer/AudioPlayer.js.map +1 -1
  274. package/dist/components/AudioPlayer/AudioPlayer.module.cjs.map +1 -1
  275. package/dist/components/AudioPlayer/AudioPlayer.module.js.map +1 -1
  276. package/dist/components/AudioRecorder/AudioRecorder.cjs +1 -1
  277. package/dist/components/AudioRecorder/AudioRecorder.cjs.map +1 -1
  278. package/dist/components/AudioRecorder/AudioRecorder.js +16 -21
  279. package/dist/components/AudioRecorder/AudioRecorder.js.map +1 -1
  280. package/dist/components/AudioRecorder/AudioRecorder.module.cjs.map +1 -1
  281. package/dist/components/AudioRecorder/AudioRecorder.module.js.map +1 -1
  282. package/dist/components/Avatar/Avatar.cjs.map +1 -1
  283. package/dist/components/Avatar/Avatar.js.map +1 -1
  284. package/dist/components/Avatar/Avatar.module.cjs.map +1 -1
  285. package/dist/components/Avatar/Avatar.module.js.map +1 -1
  286. package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
  287. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  288. package/dist/components/AvatarGroup/AvatarGroup.module.cjs.map +1 -1
  289. package/dist/components/AvatarGroup/AvatarGroup.module.js.map +1 -1
  290. package/dist/components/Badge/Badge.cjs.map +1 -1
  291. package/dist/components/Badge/Badge.js.map +1 -1
  292. package/dist/components/Badge/Badge.module.cjs.map +1 -1
  293. package/dist/components/Badge/Badge.module.js.map +1 -1
  294. package/dist/components/Banner/Banner.cjs.map +1 -1
  295. package/dist/components/Banner/Banner.js.map +1 -1
  296. package/dist/components/Banner/Banner.module.cjs.map +1 -1
  297. package/dist/components/Banner/Banner.module.js.map +1 -1
  298. package/dist/components/BarList/BarList.cjs.map +1 -1
  299. package/dist/components/BarList/BarList.js.map +1 -1
  300. package/dist/components/BarList/BarList.module.cjs.map +1 -1
  301. package/dist/components/BarList/BarList.module.js.map +1 -1
  302. package/dist/components/BarList/bar-list-model.cjs.map +1 -1
  303. package/dist/components/BarList/bar-list-model.js.map +1 -1
  304. package/dist/components/BarcodeScanner/BarcodeScanner.cjs.map +1 -1
  305. package/dist/components/BarcodeScanner/BarcodeScanner.js.map +1 -1
  306. package/dist/components/BarcodeScanner/BarcodeScanner.module.cjs.map +1 -1
  307. package/dist/components/BarcodeScanner/BarcodeScanner.module.js.map +1 -1
  308. package/dist/components/BottomNavigation/BottomNavigation.cjs.map +1 -1
  309. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  310. package/dist/components/BottomNavigation/BottomNavigation.module.cjs.map +1 -1
  311. package/dist/components/BottomNavigation/BottomNavigation.module.js.map +1 -1
  312. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  313. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  314. package/dist/components/BottomSheet/BottomSheet.module.cjs.map +1 -1
  315. package/dist/components/BottomSheet/BottomSheet.module.js.map +1 -1
  316. package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
  317. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  318. package/dist/components/Breadcrumbs/Breadcrumbs.module.cjs.map +1 -1
  319. package/dist/components/Breadcrumbs/Breadcrumbs.module.js.map +1 -1
  320. package/dist/components/Button/Button.cjs.map +1 -1
  321. package/dist/components/Button/Button.js.map +1 -1
  322. package/dist/components/Button/Button.module.cjs.map +1 -1
  323. package/dist/components/Button/Button.module.js.map +1 -1
  324. package/dist/components/Button/ButtonContent.cjs.map +1 -1
  325. package/dist/components/Button/ButtonContent.js.map +1 -1
  326. package/dist/components/Button/ButtonSlot.cjs.map +1 -1
  327. package/dist/components/Button/ButtonSlot.js.map +1 -1
  328. package/dist/components/Button/button-class.cjs.map +1 -1
  329. package/dist/components/Button/button-class.js.map +1 -1
  330. package/dist/components/Button/link-rel.cjs.map +1 -1
  331. package/dist/components/Button/link-rel.js.map +1 -1
  332. package/dist/components/Button/slot.cjs.map +1 -1
  333. package/dist/components/Button/slot.js.map +1 -1
  334. package/dist/components/Calendar/Calendar.cjs.map +1 -1
  335. package/dist/components/Calendar/Calendar.js.map +1 -1
  336. package/dist/components/Calendar/Calendar.module.cjs.map +1 -1
  337. package/dist/components/Calendar/Calendar.module.js.map +1 -1
  338. package/dist/components/Card/Card.cjs.map +1 -1
  339. package/dist/components/Card/Card.js.map +1 -1
  340. package/dist/components/Card/Card.module.cjs.map +1 -1
  341. package/dist/components/Card/Card.module.js.map +1 -1
  342. package/dist/components/Carousel/Carousel.cjs.map +1 -1
  343. package/dist/components/Carousel/Carousel.js.map +1 -1
  344. package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
  345. package/dist/components/Carousel/Carousel.module.js.map +1 -1
  346. package/dist/components/Center/Center.cjs.map +1 -1
  347. package/dist/components/Center/Center.js.map +1 -1
  348. package/dist/components/Center/Center.module.cjs.map +1 -1
  349. package/dist/components/Center/Center.module.js.map +1 -1
  350. package/dist/components/Chat/Chat.cjs.map +1 -1
  351. package/dist/components/Chat/Chat.js.map +1 -1
  352. package/dist/components/Chat/Chat.module.cjs.map +1 -1
  353. package/dist/components/Chat/Chat.module.js.map +1 -1
  354. package/dist/components/Chat/ChatActionsMenu.cjs.map +1 -1
  355. package/dist/components/Chat/ChatActionsMenu.js.map +1 -1
  356. package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
  357. package/dist/components/Chat/ChatAttachments.js.map +1 -1
  358. package/dist/components/Chat/ChatBubble.cjs.map +1 -1
  359. package/dist/components/Chat/ChatBubble.js.map +1 -1
  360. package/dist/components/Chat/ChatComposer.cjs.map +1 -1
  361. package/dist/components/Chat/ChatComposer.js.map +1 -1
  362. package/dist/components/Chat/chat-groups.cjs +1 -1
  363. package/dist/components/Chat/chat-groups.cjs.map +1 -1
  364. package/dist/components/Chat/chat-groups.js +2 -6
  365. package/dist/components/Chat/chat-groups.js.map +1 -1
  366. package/dist/components/Chat/chat-receipt.cjs.map +1 -1
  367. package/dist/components/Chat/chat-receipt.js.map +1 -1
  368. package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
  369. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  370. package/dist/components/Checkbox/Checkbox.module.cjs.map +1 -1
  371. package/dist/components/Checkbox/Checkbox.module.js.map +1 -1
  372. package/dist/components/ChipInput/ChipInput.cjs +1 -1
  373. package/dist/components/ChipInput/ChipInput.cjs.map +1 -1
  374. package/dist/components/ChipInput/ChipInput.js +2 -12
  375. package/dist/components/ChipInput/ChipInput.js.map +1 -1
  376. package/dist/components/ChipInput/ChipInput.module.cjs.map +1 -1
  377. package/dist/components/ChipInput/ChipInput.module.js.map +1 -1
  378. package/dist/components/ClickOutside/ClickOutside.cjs.map +1 -1
  379. package/dist/components/ClickOutside/ClickOutside.js.map +1 -1
  380. package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
  381. package/dist/components/CodeBlock/CodeBlock.js.map +1 -1
  382. package/dist/components/CodeBlock/CodeBlock.module.cjs.map +1 -1
  383. package/dist/components/CodeBlock/CodeBlock.module.js.map +1 -1
  384. package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
  385. package/dist/components/CodeBlock/tokenize.js.map +1 -1
  386. package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
  387. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  388. package/dist/components/Collapsible/Collapsible.module.cjs.map +1 -1
  389. package/dist/components/Collapsible/Collapsible.module.js.map +1 -1
  390. package/dist/components/Combobox/Combobox.cjs.map +1 -1
  391. package/dist/components/Combobox/Combobox.js.map +1 -1
  392. package/dist/components/Combobox/Combobox.module.cjs.map +1 -1
  393. package/dist/components/Combobox/Combobox.module.js.map +1 -1
  394. package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -1
  395. package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -1
  396. package/dist/components/Command/Command.cjs +1 -1
  397. package/dist/components/Command/Command.cjs.map +1 -1
  398. package/dist/components/Command/Command.js +4 -11
  399. package/dist/components/Command/Command.js.map +1 -1
  400. package/dist/components/Command/Command.module.cjs.map +1 -1
  401. package/dist/components/Command/Command.module.js.map +1 -1
  402. package/dist/components/ConditionalWrapper/ConditionalWrapper.cjs.map +1 -1
  403. package/dist/components/ConditionalWrapper/ConditionalWrapper.js.map +1 -1
  404. package/dist/components/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  405. package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -1
  406. package/dist/components/ContextMenu/ContextMenu.cjs +1 -1
  407. package/dist/components/ContextMenu/ContextMenu.cjs.map +1 -1
  408. package/dist/components/ContextMenu/ContextMenu.js +1 -1
  409. package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
  410. package/dist/components/ContextMenu/ContextMenu.module.cjs.map +1 -1
  411. package/dist/components/ContextMenu/ContextMenu.module.js.map +1 -1
  412. package/dist/components/CopyButton/CopyButton.cjs.map +1 -1
  413. package/dist/components/CopyButton/CopyButton.js.map +1 -1
  414. package/dist/components/CopyButton/CopyButton.module.cjs.map +1 -1
  415. package/dist/components/CopyButton/CopyButton.module.js.map +1 -1
  416. package/dist/components/DataList/DataList.cjs.map +1 -1
  417. package/dist/components/DataList/DataList.js.map +1 -1
  418. package/dist/components/DataList/DataList.module.cjs.map +1 -1
  419. package/dist/components/DataList/DataList.module.js.map +1 -1
  420. package/dist/components/DataTable/DataTable.cjs +1 -1
  421. package/dist/components/DataTable/DataTable.cjs.map +1 -1
  422. package/dist/components/DataTable/DataTable.js +6 -14
  423. package/dist/components/DataTable/DataTable.js.map +1 -1
  424. package/dist/components/DataTable/DataTable.module.cjs.map +1 -1
  425. package/dist/components/DataTable/DataTable.module.js.map +1 -1
  426. package/dist/components/DataTable/EditableCell.cjs +1 -1
  427. package/dist/components/DataTable/EditableCell.cjs.map +1 -1
  428. package/dist/components/DataTable/EditableCell.js +1 -9
  429. package/dist/components/DataTable/EditableCell.js.map +1 -1
  430. package/dist/components/DataTable/LoadingRows.cjs.map +1 -1
  431. package/dist/components/DataTable/LoadingRows.js.map +1 -1
  432. package/dist/components/DataTable/edit-labels.cjs.map +1 -1
  433. package/dist/components/DataTable/edit-labels.js.map +1 -1
  434. package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
  435. package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
  436. package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
  437. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  438. package/dist/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
  439. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  440. package/dist/components/DateRangePicker/DateRangePicker.module.cjs.map +1 -1
  441. package/dist/components/DateRangePicker/DateRangePicker.module.js.map +1 -1
  442. package/dist/components/DescriptionList/DescriptionList.cjs.map +1 -1
  443. package/dist/components/DescriptionList/DescriptionList.js.map +1 -1
  444. package/dist/components/DescriptionList/DescriptionList.module.cjs.map +1 -1
  445. package/dist/components/DescriptionList/DescriptionList.module.js.map +1 -1
  446. package/dist/components/Divider/Divider.cjs.map +1 -1
  447. package/dist/components/Divider/Divider.js.map +1 -1
  448. package/dist/components/Divider/Divider.module.cjs.map +1 -1
  449. package/dist/components/Divider/Divider.module.js.map +1 -1
  450. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  451. package/dist/components/Drawer/Drawer.js.map +1 -1
  452. package/dist/components/Drawer/Drawer.module.cjs.map +1 -1
  453. package/dist/components/Drawer/Drawer.module.js.map +1 -1
  454. package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
  455. package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  456. package/dist/components/DropdownMenu/DropdownMenu.js +2 -14
  457. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  458. package/dist/components/DropdownMenu/DropdownMenu.module.cjs.map +1 -1
  459. package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -1
  460. package/dist/components/Dropzone/Dropzone.cjs.map +1 -1
  461. package/dist/components/Dropzone/Dropzone.js.map +1 -1
  462. package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
  463. package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
  464. package/dist/components/EmptyState/EmptyState.cjs.map +1 -1
  465. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  466. package/dist/components/EmptyState/EmptyState.module.cjs.map +1 -1
  467. package/dist/components/EmptyState/EmptyState.module.js.map +1 -1
  468. package/dist/components/ErrorState/ErrorState.cjs.map +1 -1
  469. package/dist/components/ErrorState/ErrorState.js.map +1 -1
  470. package/dist/components/ErrorState/ErrorState.module.cjs.map +1 -1
  471. package/dist/components/ErrorState/ErrorState.module.js.map +1 -1
  472. package/dist/components/ErrorText/ErrorText.cjs.map +1 -1
  473. package/dist/components/ErrorText/ErrorText.js.map +1 -1
  474. package/dist/components/ErrorText/ErrorText.module.cjs.map +1 -1
  475. package/dist/components/ErrorText/ErrorText.module.js.map +1 -1
  476. package/dist/components/FileUpload/FileUpload.cjs +1 -1
  477. package/dist/components/FileUpload/FileUpload.cjs.map +1 -1
  478. package/dist/components/FileUpload/FileUpload.js +7 -17
  479. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  480. package/dist/components/FileUpload/FileUpload.module.cjs.map +1 -1
  481. package/dist/components/FileUpload/FileUpload.module.js.map +1 -1
  482. package/dist/components/FilterBar/FilterBar.cjs.map +1 -1
  483. package/dist/components/FilterBar/FilterBar.js.map +1 -1
  484. package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
  485. package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
  486. package/dist/components/FilterBar/filter-apply.cjs.map +1 -1
  487. package/dist/components/FilterBar/filter-apply.js.map +1 -1
  488. package/dist/components/FilterBar/filter-model.cjs.map +1 -1
  489. package/dist/components/FilterBar/filter-model.js.map +1 -1
  490. package/dist/components/FilterBar/filter-query.cjs +1 -1
  491. package/dist/components/FilterBar/filter-query.cjs.map +1 -1
  492. package/dist/components/FilterBar/filter-query.js +2 -5
  493. package/dist/components/FilterBar/filter-query.js.map +1 -1
  494. package/dist/components/FilterPanel/FilterPanel.cjs.map +1 -1
  495. package/dist/components/FilterPanel/FilterPanel.js.map +1 -1
  496. package/dist/components/FilterPanel/FilterPanel.module.cjs.map +1 -1
  497. package/dist/components/FilterPanel/FilterPanel.module.js.map +1 -1
  498. package/dist/components/FloatingActionButton/FloatingActionButton.cjs.map +1 -1
  499. package/dist/components/FloatingActionButton/FloatingActionButton.js.map +1 -1
  500. package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
  501. package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
  502. package/dist/components/For/For.cjs.map +1 -1
  503. package/dist/components/For/For.js.map +1 -1
  504. package/dist/components/Form/Form.cjs.map +1 -1
  505. package/dist/components/Form/Form.js.map +1 -1
  506. package/dist/components/Form/Form.module.cjs.map +1 -1
  507. package/dist/components/Form/Form.module.js.map +1 -1
  508. package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
  509. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  510. package/dist/components/HoverCard/HoverCard.module.cjs.map +1 -1
  511. package/dist/components/HoverCard/HoverCard.module.js.map +1 -1
  512. package/dist/components/Image/Image.cjs.map +1 -1
  513. package/dist/components/Image/Image.js.map +1 -1
  514. package/dist/components/Image/Image.module.cjs.map +1 -1
  515. package/dist/components/Image/Image.module.js.map +1 -1
  516. package/dist/components/ImageCropper/ImageCropper.cjs +1 -1
  517. package/dist/components/ImageCropper/ImageCropper.cjs.map +1 -1
  518. package/dist/components/ImageCropper/ImageCropper.js +4 -8
  519. package/dist/components/ImageCropper/ImageCropper.js.map +1 -1
  520. package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
  521. package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
  522. package/dist/components/ImageCropper/crop-geometry.cjs.map +1 -1
  523. package/dist/components/ImageCropper/crop-geometry.js.map +1 -1
  524. package/dist/components/Input/Input.cjs.map +1 -1
  525. package/dist/components/Input/Input.js.map +1 -1
  526. package/dist/components/Input/Input.module.cjs.map +1 -1
  527. package/dist/components/Input/Input.module.js.map +1 -1
  528. package/dist/components/InstallBanner/InstallBanner.cjs.map +1 -1
  529. package/dist/components/InstallBanner/InstallBanner.js.map +1 -1
  530. package/dist/components/InstallBanner/InstallBanner.module.cjs.map +1 -1
  531. package/dist/components/InstallBanner/InstallBanner.module.js.map +1 -1
  532. package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
  533. package/dist/components/InstallButton/InstallButton.js.map +1 -1
  534. package/dist/components/InstallButton/InstallButton.module.cjs.map +1 -1
  535. package/dist/components/InstallButton/InstallButton.module.js.map +1 -1
  536. package/dist/components/InstallButton/install-hints.cjs.map +1 -1
  537. package/dist/components/InstallButton/install-hints.js.map +1 -1
  538. package/dist/components/Kanban/Kanban.cjs.map +1 -1
  539. package/dist/components/Kanban/Kanban.js.map +1 -1
  540. package/dist/components/Kanban/Kanban.module.cjs.map +1 -1
  541. package/dist/components/Kanban/Kanban.module.js.map +1 -1
  542. package/dist/components/Kbd/Kbd.cjs.map +1 -1
  543. package/dist/components/Kbd/Kbd.js.map +1 -1
  544. package/dist/components/Kbd/Kbd.module.cjs.map +1 -1
  545. package/dist/components/Kbd/Kbd.module.js.map +1 -1
  546. package/dist/components/Label/Label.cjs.map +1 -1
  547. package/dist/components/Label/Label.js.map +1 -1
  548. package/dist/components/Label/Label.module.cjs.map +1 -1
  549. package/dist/components/Label/Label.module.js.map +1 -1
  550. package/dist/components/Layout/Layout.cjs.map +1 -1
  551. package/dist/components/Layout/Layout.js.map +1 -1
  552. package/dist/components/Layout/Layout.module.cjs.map +1 -1
  553. package/dist/components/Layout/Layout.module.js.map +1 -1
  554. package/dist/components/Lightbox/Lightbox.cjs +1 -1
  555. package/dist/components/Lightbox/Lightbox.cjs.map +1 -1
  556. package/dist/components/Lightbox/Lightbox.js +1 -1
  557. package/dist/components/Lightbox/Lightbox.js.map +1 -1
  558. package/dist/components/Lightbox/Lightbox.module.cjs.map +1 -1
  559. package/dist/components/Lightbox/Lightbox.module.js.map +1 -1
  560. package/dist/components/ListTile/ListTile.cjs.map +1 -1
  561. package/dist/components/ListTile/ListTile.js.map +1 -1
  562. package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
  563. package/dist/components/ListTile/ListTile.module.js.map +1 -1
  564. package/dist/components/Markdown/Markdown.cjs.map +1 -1
  565. package/dist/components/Markdown/Markdown.js.map +1 -1
  566. package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
  567. package/dist/components/Markdown/Markdown.module.js.map +1 -1
  568. package/dist/components/Markdown/markdown-parse.cjs +2 -2
  569. package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
  570. package/dist/components/Markdown/markdown-parse.js +8 -27
  571. package/dist/components/Markdown/markdown-parse.js.map +1 -1
  572. package/dist/components/Masonry/Masonry.cjs.map +1 -1
  573. package/dist/components/Masonry/Masonry.js.map +1 -1
  574. package/dist/components/Masonry/Masonry.module.cjs.map +1 -1
  575. package/dist/components/Masonry/Masonry.module.js.map +1 -1
  576. package/dist/components/Masonry/masonry-layout.cjs.map +1 -1
  577. package/dist/components/Masonry/masonry-layout.js.map +1 -1
  578. package/dist/components/Menubar/Menubar.cjs.map +1 -1
  579. package/dist/components/Menubar/Menubar.js.map +1 -1
  580. package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
  581. package/dist/components/Menubar/Menubar.module.js.map +1 -1
  582. package/dist/components/Modal/Modal.cjs.map +1 -1
  583. package/dist/components/Modal/Modal.js.map +1 -1
  584. package/dist/components/Modal/Modal.module.cjs.map +1 -1
  585. package/dist/components/Modal/Modal.module.js.map +1 -1
  586. package/dist/components/ModalsManager/ModalsManager.cjs.map +1 -1
  587. package/dist/components/ModalsManager/ModalsManager.js.map +1 -1
  588. package/dist/components/ModalsManager/ModalsManager.module.cjs.map +1 -1
  589. package/dist/components/ModalsManager/ModalsManager.module.js.map +1 -1
  590. package/dist/components/Money/Money.cjs.map +1 -1
  591. package/dist/components/Money/Money.js.map +1 -1
  592. package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
  593. package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
  594. package/dist/components/MultiSelect/MultiSelect.module.cjs.map +1 -1
  595. package/dist/components/MultiSelect/MultiSelect.module.js.map +1 -1
  596. package/dist/components/NProgress/NProgress.cjs.map +1 -1
  597. package/dist/components/NProgress/NProgress.js.map +1 -1
  598. package/dist/components/NProgress/NProgress.module.cjs.map +1 -1
  599. package/dist/components/NProgress/NProgress.module.js.map +1 -1
  600. package/dist/components/Navbar/Navbar.cjs.map +1 -1
  601. package/dist/components/Navbar/Navbar.js.map +1 -1
  602. package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
  603. package/dist/components/Navbar/Navbar.module.js.map +1 -1
  604. package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
  605. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
  606. package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
  607. package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
  608. package/dist/components/NavigationRail/NavigationRail.cjs.map +1 -1
  609. package/dist/components/NavigationRail/NavigationRail.js.map +1 -1
  610. package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
  611. package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
  612. package/dist/components/NotificationCenter/NotificationCenter.cjs.map +1 -1
  613. package/dist/components/NotificationCenter/NotificationCenter.js.map +1 -1
  614. package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
  615. package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
  616. package/dist/components/NotificationCenter/use-notification-inbox.cjs.map +1 -1
  617. package/dist/components/NotificationCenter/use-notification-inbox.js.map +1 -1
  618. package/dist/components/OfflineIndicator/OfflineIndicator.cjs.map +1 -1
  619. package/dist/components/OfflineIndicator/OfflineIndicator.js.map +1 -1
  620. package/dist/components/OfflineIndicator/OfflineIndicator.module.cjs.map +1 -1
  621. package/dist/components/OfflineIndicator/OfflineIndicator.module.js.map +1 -1
  622. package/dist/components/Page/Page.cjs.map +1 -1
  623. package/dist/components/Page/Page.js.map +1 -1
  624. package/dist/components/Page/Page.module.cjs.map +1 -1
  625. package/dist/components/Page/Page.module.js.map +1 -1
  626. package/dist/components/Pagination/Pagination.cjs.map +1 -1
  627. package/dist/components/Pagination/Pagination.js.map +1 -1
  628. package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
  629. package/dist/components/Pagination/Pagination.module.js.map +1 -1
  630. package/dist/components/PasswordInput/PasswordInput.cjs.map +1 -1
  631. package/dist/components/PasswordInput/PasswordInput.js.map +1 -1
  632. package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
  633. package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
  634. package/dist/components/PinInput/PinInput.cjs.map +1 -1
  635. package/dist/components/PinInput/PinInput.js.map +1 -1
  636. package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
  637. package/dist/components/PinInput/PinInput.module.js.map +1 -1
  638. package/dist/components/Popover/Popover.cjs.map +1 -1
  639. package/dist/components/Popover/Popover.js.map +1 -1
  640. package/dist/components/Popover/Popover.module.cjs.map +1 -1
  641. package/dist/components/Popover/Popover.module.js.map +1 -1
  642. package/dist/components/Portal/Portal.cjs.map +1 -1
  643. package/dist/components/Portal/Portal.js.map +1 -1
  644. package/dist/components/Portal/anchor-position.cjs.map +1 -1
  645. package/dist/components/Portal/anchor-position.js.map +1 -1
  646. package/dist/components/Portal/escape-layer.cjs.map +1 -1
  647. package/dist/components/Portal/escape-layer.js.map +1 -1
  648. package/dist/components/Portal/portal-host.cjs.map +1 -1
  649. package/dist/components/Portal/portal-host.js.map +1 -1
  650. package/dist/components/Portal/tab-bridge.cjs +1 -1
  651. package/dist/components/Portal/tab-bridge.cjs.map +1 -1
  652. package/dist/components/Portal/tab-bridge.js +1 -5
  653. package/dist/components/Portal/tab-bridge.js.map +1 -1
  654. package/dist/components/Progress/Progress.cjs.map +1 -1
  655. package/dist/components/Progress/Progress.js.map +1 -1
  656. package/dist/components/Progress/Progress.module.cjs.map +1 -1
  657. package/dist/components/Progress/Progress.module.js.map +1 -1
  658. package/dist/components/QRCode/QRCode.cjs.map +1 -1
  659. package/dist/components/QRCode/QRCode.js.map +1 -1
  660. package/dist/components/QRCode/QRCode.module.cjs.map +1 -1
  661. package/dist/components/QRCode/QRCode.module.js.map +1 -1
  662. package/dist/components/QRCode/qr-encode.cjs +1 -1
  663. package/dist/components/QRCode/qr-encode.cjs.map +1 -1
  664. package/dist/components/QRCode/qr-encode.js +7 -13
  665. package/dist/components/QRCode/qr-encode.js.map +1 -1
  666. package/dist/components/QRCode/qr-tables.cjs.map +1 -1
  667. package/dist/components/QRCode/qr-tables.js.map +1 -1
  668. package/dist/components/Radio/Radio.cjs.map +1 -1
  669. package/dist/components/Radio/Radio.js.map +1 -1
  670. package/dist/components/Radio/Radio.module.cjs.map +1 -1
  671. package/dist/components/Radio/Radio.module.js.map +1 -1
  672. package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
  673. package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
  674. package/dist/components/RangeSlider/RangeSlider.module.cjs.map +1 -1
  675. package/dist/components/RangeSlider/RangeSlider.module.js.map +1 -1
  676. package/dist/components/RatingStars/RatingStars.cjs.map +1 -1
  677. package/dist/components/RatingStars/RatingStars.js.map +1 -1
  678. package/dist/components/RatingStars/RatingStars.module.cjs.map +1 -1
  679. package/dist/components/RatingStars/RatingStars.module.js.map +1 -1
  680. package/dist/components/RefreshIndicator/RefreshIndicator.cjs +1 -1
  681. package/dist/components/RefreshIndicator/RefreshIndicator.cjs.map +1 -1
  682. package/dist/components/RefreshIndicator/RefreshIndicator.js +10 -18
  683. package/dist/components/RefreshIndicator/RefreshIndicator.js.map +1 -1
  684. package/dist/components/RefreshIndicator/RefreshIndicator.module.cjs.map +1 -1
  685. package/dist/components/RefreshIndicator/RefreshIndicator.module.js.map +1 -1
  686. package/dist/components/RelativeTime/RelativeTime.cjs.map +1 -1
  687. package/dist/components/RelativeTime/RelativeTime.js.map +1 -1
  688. package/dist/components/Resizable/Resizable.cjs +1 -1
  689. package/dist/components/Resizable/Resizable.cjs.map +1 -1
  690. package/dist/components/Resizable/Resizable.js +1 -9
  691. package/dist/components/Resizable/Resizable.js.map +1 -1
  692. package/dist/components/Resizable/Resizable.module.cjs.map +1 -1
  693. package/dist/components/Resizable/Resizable.module.js.map +1 -1
  694. package/dist/components/Responsive/Responsive.cjs.map +1 -1
  695. package/dist/components/Responsive/Responsive.js.map +1 -1
  696. package/dist/components/Reveal/Reveal.cjs.map +1 -1
  697. package/dist/components/Reveal/Reveal.js.map +1 -1
  698. package/dist/components/Reveal/Reveal.module.cjs.map +1 -1
  699. package/dist/components/Reveal/Reveal.module.js.map +1 -1
  700. package/dist/components/Reveal/reveal-threshold.cjs.map +1 -1
  701. package/dist/components/Reveal/reveal-threshold.js.map +1 -1
  702. package/dist/components/SafeArea/SafeArea.cjs.map +1 -1
  703. package/dist/components/SafeArea/SafeArea.js.map +1 -1
  704. package/dist/components/SafeArea/SafeArea.module.cjs.map +1 -1
  705. package/dist/components/SafeArea/SafeArea.module.js.map +1 -1
  706. package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
  707. package/dist/components/Scheduler/Scheduler.js.map +1 -1
  708. package/dist/components/Scheduler/Scheduler.module.cjs.map +1 -1
  709. package/dist/components/Scheduler/Scheduler.module.js.map +1 -1
  710. package/dist/components/Scheduler/scheduler-layout.cjs.map +1 -1
  711. package/dist/components/Scheduler/scheduler-layout.js.map +1 -1
  712. package/dist/components/ScrollArea/ScrollArea.cjs.map +1 -1
  713. package/dist/components/ScrollArea/ScrollArea.js.map +1 -1
  714. package/dist/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
  715. package/dist/components/ScrollArea/ScrollArea.module.js.map +1 -1
  716. package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
  717. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  718. package/dist/components/SearchBar/SearchBar.module.cjs.map +1 -1
  719. package/dist/components/SearchBar/SearchBar.module.js.map +1 -1
  720. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
  721. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  722. package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -1
  723. package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -1
  724. package/dist/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  725. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  726. package/dist/components/SegmentedControl/SegmentedControl.module.cjs.map +1 -1
  727. package/dist/components/SegmentedControl/SegmentedControl.module.js.map +1 -1
  728. package/dist/components/Select/CaretIcon.cjs.map +1 -1
  729. package/dist/components/Select/CaretIcon.js.map +1 -1
  730. package/dist/components/Select/Select.cjs.map +1 -1
  731. package/dist/components/Select/Select.js.map +1 -1
  732. package/dist/components/Select/Select.module.cjs.map +1 -1
  733. package/dist/components/Select/Select.module.js.map +1 -1
  734. package/dist/components/Select/options.cjs.map +1 -1
  735. package/dist/components/Select/options.js.map +1 -1
  736. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  737. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  738. package/dist/components/Sidebar/Sidebar.js +13 -23
  739. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  740. package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
  741. package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
  742. package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
  743. package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
  744. package/dist/components/Sidebar/active-nav-key.cjs.map +1 -1
  745. package/dist/components/Sidebar/active-nav-key.js.map +1 -1
  746. package/dist/components/SignaturePad/SignaturePad.cjs +1 -1
  747. package/dist/components/SignaturePad/SignaturePad.cjs.map +1 -1
  748. package/dist/components/SignaturePad/SignaturePad.js +1 -5
  749. package/dist/components/SignaturePad/SignaturePad.js.map +1 -1
  750. package/dist/components/SignaturePad/SignaturePad.module.cjs.map +1 -1
  751. package/dist/components/SignaturePad/SignaturePad.module.js.map +1 -1
  752. package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
  753. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  754. package/dist/components/Skeleton/Skeleton.module.cjs.map +1 -1
  755. package/dist/components/Skeleton/Skeleton.module.js.map +1 -1
  756. package/dist/components/Slider/Slider.cjs.map +1 -1
  757. package/dist/components/Slider/Slider.js.map +1 -1
  758. package/dist/components/Slider/Slider.module.cjs.map +1 -1
  759. package/dist/components/Slider/Slider.module.js.map +1 -1
  760. package/dist/components/Spacer/Spacer.cjs.map +1 -1
  761. package/dist/components/Spacer/Spacer.js.map +1 -1
  762. package/dist/components/Spacer/Spacer.module.cjs.map +1 -1
  763. package/dist/components/Spacer/Spacer.module.js.map +1 -1
  764. package/dist/components/Sparkline/Sparkline.cjs.map +1 -1
  765. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  766. package/dist/components/Sparkline/Sparkline.module.cjs.map +1 -1
  767. package/dist/components/Sparkline/Sparkline.module.js.map +1 -1
  768. package/dist/components/Sparkline/sparkline-geometry.cjs.map +1 -1
  769. package/dist/components/Sparkline/sparkline-geometry.js.map +1 -1
  770. package/dist/components/Spinner/Spinner.cjs.map +1 -1
  771. package/dist/components/Spinner/Spinner.js.map +1 -1
  772. package/dist/components/Spinner/Spinner.module.cjs.map +1 -1
  773. package/dist/components/Spinner/Spinner.module.js.map +1 -1
  774. package/dist/components/Stat/Stat.cjs.map +1 -1
  775. package/dist/components/Stat/Stat.js.map +1 -1
  776. package/dist/components/Stat/Stat.module.cjs.map +1 -1
  777. package/dist/components/Stat/Stat.module.js.map +1 -1
  778. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  779. package/dist/components/Stepper/Stepper.js.map +1 -1
  780. package/dist/components/Stepper/Stepper.module.cjs.map +1 -1
  781. package/dist/components/Stepper/Stepper.module.js.map +1 -1
  782. package/dist/components/StepperInput/StepperInput.cjs.map +1 -1
  783. package/dist/components/StepperInput/StepperInput.js.map +1 -1
  784. package/dist/components/StepperInput/StepperInput.module.cjs.map +1 -1
  785. package/dist/components/StepperInput/StepperInput.module.js.map +1 -1
  786. package/dist/components/Switch/Switch.cjs.map +1 -1
  787. package/dist/components/Switch/Switch.js.map +1 -1
  788. package/dist/components/Switch/Switch.module.cjs.map +1 -1
  789. package/dist/components/Switch/Switch.module.js.map +1 -1
  790. package/dist/components/SyncStatusBadge/SyncStatusBadge.cjs.map +1 -1
  791. package/dist/components/SyncStatusBadge/SyncStatusBadge.js.map +1 -1
  792. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.cjs.map +1 -1
  793. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.js.map +1 -1
  794. package/dist/components/Table/Table.cjs.map +1 -1
  795. package/dist/components/Table/Table.js.map +1 -1
  796. package/dist/components/Table/Table.module.cjs.map +1 -1
  797. package/dist/components/Table/Table.module.js.map +1 -1
  798. package/dist/components/Tabs/Tabs.cjs.map +1 -1
  799. package/dist/components/Tabs/Tabs.js.map +1 -1
  800. package/dist/components/Tabs/Tabs.module.cjs.map +1 -1
  801. package/dist/components/Tabs/Tabs.module.js.map +1 -1
  802. package/dist/components/Tag/Tag.cjs.map +1 -1
  803. package/dist/components/Tag/Tag.js.map +1 -1
  804. package/dist/components/Tag/Tag.module.cjs.map +1 -1
  805. package/dist/components/Tag/Tag.module.js.map +1 -1
  806. package/dist/components/Textarea/Textarea.cjs.map +1 -1
  807. package/dist/components/Textarea/Textarea.js.map +1 -1
  808. package/dist/components/Textarea/Textarea.module.cjs.map +1 -1
  809. package/dist/components/Textarea/Textarea.module.js.map +1 -1
  810. package/dist/components/TimePicker/TimePicker.cjs.map +1 -1
  811. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  812. package/dist/components/TimePicker/TimePicker.module.cjs.map +1 -1
  813. package/dist/components/TimePicker/TimePicker.module.js.map +1 -1
  814. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  815. package/dist/components/Timeline/Timeline.js.map +1 -1
  816. package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
  817. package/dist/components/Timeline/Timeline.module.js.map +1 -1
  818. package/dist/components/Toast/Toast.module.cjs.map +1 -1
  819. package/dist/components/Toast/Toast.module.js.map +1 -1
  820. package/dist/components/Toast/ToastProvider.cjs.map +1 -1
  821. package/dist/components/Toast/ToastProvider.js.map +1 -1
  822. package/dist/components/Toggle/Toggle.cjs.map +1 -1
  823. package/dist/components/Toggle/Toggle.js.map +1 -1
  824. package/dist/components/Toggle/Toggle.module.cjs.map +1 -1
  825. package/dist/components/Toggle/Toggle.module.js.map +1 -1
  826. package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
  827. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  828. package/dist/components/ToggleGroup/ToggleGroup.module.cjs.map +1 -1
  829. package/dist/components/ToggleGroup/ToggleGroup.module.js.map +1 -1
  830. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  831. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  832. package/dist/components/Tooltip/Tooltip.module.cjs.map +1 -1
  833. package/dist/components/Tooltip/Tooltip.module.js.map +1 -1
  834. package/dist/components/Tour/Tour.cjs +1 -1
  835. package/dist/components/Tour/Tour.cjs.map +1 -1
  836. package/dist/components/Tour/Tour.js +1 -5
  837. package/dist/components/Tour/Tour.js.map +1 -1
  838. package/dist/components/Tour/Tour.module.cjs.map +1 -1
  839. package/dist/components/Tour/Tour.module.js.map +1 -1
  840. package/dist/components/Tour/tour-position.cjs.map +1 -1
  841. package/dist/components/Tour/tour-position.js.map +1 -1
  842. package/dist/components/Transfer/Transfer.cjs.map +1 -1
  843. package/dist/components/Transfer/Transfer.js.map +1 -1
  844. package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
  845. package/dist/components/Transfer/Transfer.module.js.map +1 -1
  846. package/dist/components/Transfer/transfer-state.cjs.map +1 -1
  847. package/dist/components/Transfer/transfer-state.js.map +1 -1
  848. package/dist/components/TreeView/TreeView.cjs.map +1 -1
  849. package/dist/components/TreeView/TreeView.js.map +1 -1
  850. package/dist/components/TreeView/TreeView.module.cjs.map +1 -1
  851. package/dist/components/TreeView/TreeView.module.js.map +1 -1
  852. package/dist/components/TruncateText/TruncateText.cjs.map +1 -1
  853. package/dist/components/TruncateText/TruncateText.js.map +1 -1
  854. package/dist/components/TruncateText/TruncateText.module.cjs.map +1 -1
  855. package/dist/components/TruncateText/TruncateText.module.js.map +1 -1
  856. package/dist/components/UpdatePrompt/UpdatePrompt.cjs.map +1 -1
  857. package/dist/components/UpdatePrompt/UpdatePrompt.js.map +1 -1
  858. package/dist/components/UpdatePrompt/UpdatePrompt.module.cjs.map +1 -1
  859. package/dist/components/UpdatePrompt/UpdatePrompt.module.js.map +1 -1
  860. package/dist/components/VideoPlayer/VideoPlayer.cjs +1 -1
  861. package/dist/components/VideoPlayer/VideoPlayer.cjs.map +1 -1
  862. package/dist/components/VideoPlayer/VideoPlayer.js +1 -7
  863. package/dist/components/VideoPlayer/VideoPlayer.js.map +1 -1
  864. package/dist/components/VideoPlayer/VideoPlayer.module.cjs.map +1 -1
  865. package/dist/components/VideoPlayer/VideoPlayer.module.js.map +1 -1
  866. package/dist/components/VideoPlayer/playback-rates.cjs.map +1 -1
  867. package/dist/components/VideoPlayer/playback-rates.js.map +1 -1
  868. package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
  869. package/dist/components/VirtualList/VirtualList.js.map +1 -1
  870. package/dist/components/VirtualList/VirtualList.module.cjs.map +1 -1
  871. package/dist/components/VirtualList/VirtualList.module.js.map +1 -1
  872. package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
  873. package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
  874. package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
  875. package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
  876. package/dist/components/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
  877. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  878. package/dist/components/VisuallyHidden/VisuallyHidden.module.cjs.map +1 -1
  879. package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -1
  880. package/dist/components/Wizard/Wizard.cjs +1 -1
  881. package/dist/components/Wizard/Wizard.cjs.map +1 -1
  882. package/dist/components/Wizard/Wizard.js +4 -11
  883. package/dist/components/Wizard/Wizard.js.map +1 -1
  884. package/dist/components/Wizard/Wizard.module.cjs.map +1 -1
  885. package/dist/components/Wizard/Wizard.module.js.map +1 -1
  886. package/dist/data/create-data-provider.cjs.map +1 -1
  887. package/dist/data/create-data-provider.js.map +1 -1
  888. package/dist/data/data-provider-context.cjs.map +1 -1
  889. package/dist/data/data-provider-context.js.map +1 -1
  890. package/dist/data/use-resource.cjs.map +1 -1
  891. package/dist/data/use-resource.js.map +1 -1
  892. package/dist/editor/RichTextEditor.cjs.map +1 -1
  893. package/dist/editor/RichTextEditor.js.map +1 -1
  894. package/dist/editor/RichTextEditor.module.cjs.map +1 -1
  895. package/dist/editor/RichTextEditor.module.js.map +1 -1
  896. package/dist/editor.js +1 -2
  897. package/dist/error-boundary/ErrorBoundary.cjs.map +1 -1
  898. package/dist/error-boundary/ErrorBoundary.js.map +1 -1
  899. package/dist/error-boundary/use-error-handler.cjs.map +1 -1
  900. package/dist/error-boundary/use-error-handler.js.map +1 -1
  901. package/dist/feature-flags/FeatureFlagsProvider.cjs.map +1 -1
  902. package/dist/feature-flags/FeatureFlagsProvider.js.map +1 -1
  903. package/dist/feature-flags/growthbook-adapter.cjs.map +1 -1
  904. package/dist/feature-flags/growthbook-adapter.js.map +1 -1
  905. package/dist/feature-flags/in-memory-adapter.cjs.map +1 -1
  906. package/dist/feature-flags/in-memory-adapter.js.map +1 -1
  907. package/dist/feature-flags/launchdarkly-adapter.cjs.map +1 -1
  908. package/dist/feature-flags/launchdarkly-adapter.js.map +1 -1
  909. package/dist/forms/FormField.cjs.map +1 -1
  910. package/dist/forms/FormField.js.map +1 -1
  911. package/dist/forms/br-validators.cjs.map +1 -1
  912. package/dist/forms/br-validators.js.map +1 -1
  913. package/dist/forms/masked-inputs.cjs.map +1 -1
  914. package/dist/forms/masked-inputs.js.map +1 -1
  915. package/dist/forms/use-viacep.cjs.map +1 -1
  916. package/dist/forms/use-viacep.js.map +1 -1
  917. package/dist/forms/use-zod-form.cjs.map +1 -1
  918. package/dist/forms/use-zod-form.js.map +1 -1
  919. package/dist/forms/validate-form.cjs.map +1 -1
  920. package/dist/forms/validate-form.js.map +1 -1
  921. package/dist/forms/zod-resolver.cjs.map +1 -1
  922. package/dist/forms/zod-resolver.js.map +1 -1
  923. package/dist/geo/TrajectoryMap.cjs.map +1 -1
  924. package/dist/geo/TrajectoryMap.js.map +1 -1
  925. package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
  926. package/dist/geo/TrajectoryMap.module.js.map +1 -1
  927. package/dist/geo/bounds.cjs.map +1 -1
  928. package/dist/geo/bounds.js.map +1 -1
  929. package/dist/geo/create-position-tracker.cjs +1 -1
  930. package/dist/geo/create-position-tracker.cjs.map +1 -1
  931. package/dist/geo/create-position-tracker.js +1 -7
  932. package/dist/geo/create-position-tracker.js.map +1 -1
  933. package/dist/geo/distance.cjs.map +1 -1
  934. package/dist/geo/distance.js.map +1 -1
  935. package/dist/geo/estimate.cjs.map +1 -1
  936. package/dist/geo/estimate.js.map +1 -1
  937. package/dist/geo/leaflet-map.cjs.map +1 -1
  938. package/dist/geo/leaflet-map.js.map +1 -1
  939. package/dist/geo/projection.cjs.map +1 -1
  940. package/dist/geo/projection.js.map +1 -1
  941. package/dist/geo/routing.cjs.map +1 -1
  942. package/dist/geo/routing.js.map +1 -1
  943. package/dist/geo/types.cjs.map +1 -1
  944. package/dist/geo/types.js.map +1 -1
  945. package/dist/geo/use-position-tracker.cjs.map +1 -1
  946. package/dist/geo/use-position-tracker.js.map +1 -1
  947. package/dist/hooks/pwa-env.cjs.map +1 -1
  948. package/dist/hooks/pwa-env.js.map +1 -1
  949. package/dist/hooks/tab-sequence.cjs.map +1 -1
  950. package/dist/hooks/tab-sequence.js.map +1 -1
  951. package/dist/hooks/use-announce.cjs +1 -1
  952. package/dist/hooks/use-announce.cjs.map +1 -1
  953. package/dist/hooks/use-announce.js +2 -2
  954. package/dist/hooks/use-announce.js.map +1 -1
  955. package/dist/hooks/use-async.cjs.map +1 -1
  956. package/dist/hooks/use-async.js.map +1 -1
  957. package/dist/hooks/use-before-install-prompt.cjs.map +1 -1
  958. package/dist/hooks/use-before-install-prompt.js.map +1 -1
  959. package/dist/hooks/use-breakpoint.cjs.map +1 -1
  960. package/dist/hooks/use-breakpoint.js.map +1 -1
  961. package/dist/hooks/use-click-outside.cjs.map +1 -1
  962. package/dist/hooks/use-click-outside.js.map +1 -1
  963. package/dist/hooks/use-client-filter.cjs.map +1 -1
  964. package/dist/hooks/use-client-filter.js.map +1 -1
  965. package/dist/hooks/use-clipboard.cjs.map +1 -1
  966. package/dist/hooks/use-clipboard.js.map +1 -1
  967. package/dist/hooks/use-countdown.cjs.map +1 -1
  968. package/dist/hooks/use-countdown.js.map +1 -1
  969. package/dist/hooks/use-counter.cjs.map +1 -1
  970. package/dist/hooks/use-counter.js.map +1 -1
  971. package/dist/hooks/use-debounce.cjs.map +1 -1
  972. package/dist/hooks/use-debounce.js.map +1 -1
  973. package/dist/hooks/use-deep-memo.cjs.map +1 -1
  974. package/dist/hooks/use-deep-memo.js.map +1 -1
  975. package/dist/hooks/use-disclosure.cjs.map +1 -1
  976. package/dist/hooks/use-disclosure.js.map +1 -1
  977. package/dist/hooks/use-document-title.cjs.map +1 -1
  978. package/dist/hooks/use-document-title.js.map +1 -1
  979. package/dist/hooks/use-document-visibility.cjs.map +1 -1
  980. package/dist/hooks/use-document-visibility.js.map +1 -1
  981. package/dist/hooks/use-draft-filters.cjs.map +1 -1
  982. package/dist/hooks/use-draft-filters.js.map +1 -1
  983. package/dist/hooks/use-event-listener.cjs.map +1 -1
  984. package/dist/hooks/use-event-listener.js.map +1 -1
  985. package/dist/hooks/use-favicon.cjs.map +1 -1
  986. package/dist/hooks/use-favicon.js.map +1 -1
  987. package/dist/hooks/use-focus-trap.cjs.map +1 -1
  988. package/dist/hooks/use-focus-trap.js.map +1 -1
  989. package/dist/hooks/use-fullscreen-element.cjs.map +1 -1
  990. package/dist/hooks/use-fullscreen-element.js.map +1 -1
  991. package/dist/hooks/use-fullscreen.cjs +1 -1
  992. package/dist/hooks/use-fullscreen.cjs.map +1 -1
  993. package/dist/hooks/use-fullscreen.js +7 -23
  994. package/dist/hooks/use-fullscreen.js.map +1 -1
  995. package/dist/hooks/use-geolocation.cjs.map +1 -1
  996. package/dist/hooks/use-geolocation.js.map +1 -1
  997. package/dist/hooks/use-hover.cjs.map +1 -1
  998. package/dist/hooks/use-hover.js.map +1 -1
  999. package/dist/hooks/use-idle.cjs.map +1 -1
  1000. package/dist/hooks/use-idle.js.map +1 -1
  1001. package/dist/hooks/use-install-prompt.cjs +1 -1
  1002. package/dist/hooks/use-install-prompt.cjs.map +1 -1
  1003. package/dist/hooks/use-install-prompt.js +1 -1
  1004. package/dist/hooks/use-install-prompt.js.map +1 -1
  1005. package/dist/hooks/use-intersection-observer.cjs.map +1 -1
  1006. package/dist/hooks/use-intersection-observer.js.map +1 -1
  1007. package/dist/hooks/use-interval.cjs.map +1 -1
  1008. package/dist/hooks/use-interval.js.map +1 -1
  1009. package/dist/hooks/use-is-first-render.cjs.map +1 -1
  1010. package/dist/hooks/use-is-first-render.js.map +1 -1
  1011. package/dist/hooks/use-keyboard-shortcut.cjs.map +1 -1
  1012. package/dist/hooks/use-keyboard-shortcut.js.map +1 -1
  1013. package/dist/hooks/use-latest-ref.cjs.map +1 -1
  1014. package/dist/hooks/use-latest-ref.js.map +1 -1
  1015. package/dist/hooks/use-list-state.cjs.map +1 -1
  1016. package/dist/hooks/use-list-state.js.map +1 -1
  1017. package/dist/hooks/use-local-storage.cjs +1 -1
  1018. package/dist/hooks/use-local-storage.cjs.map +1 -1
  1019. package/dist/hooks/use-local-storage.js +2 -5
  1020. package/dist/hooks/use-local-storage.js.map +1 -1
  1021. package/dist/hooks/use-long-press-handlers.cjs.map +1 -1
  1022. package/dist/hooks/use-long-press-handlers.js.map +1 -1
  1023. package/dist/hooks/use-long-press.cjs.map +1 -1
  1024. package/dist/hooks/use-long-press.js.map +1 -1
  1025. package/dist/hooks/use-map.cjs.map +1 -1
  1026. package/dist/hooks/use-map.js.map +1 -1
  1027. package/dist/hooks/use-media-devices.cjs.map +1 -1
  1028. package/dist/hooks/use-media-devices.js.map +1 -1
  1029. package/dist/hooks/use-media-permission.cjs +1 -1
  1030. package/dist/hooks/use-media-permission.cjs.map +1 -1
  1031. package/dist/hooks/use-media-permission.js +2 -5
  1032. package/dist/hooks/use-media-permission.js.map +1 -1
  1033. package/dist/hooks/use-media-query.cjs.map +1 -1
  1034. package/dist/hooks/use-media-query.js.map +1 -1
  1035. package/dist/hooks/use-object-url.cjs.map +1 -1
  1036. package/dist/hooks/use-object-url.js.map +1 -1
  1037. package/dist/hooks/use-online.cjs.map +1 -1
  1038. package/dist/hooks/use-online.js.map +1 -1
  1039. package/dist/hooks/use-pagination.cjs.map +1 -1
  1040. package/dist/hooks/use-pagination.js.map +1 -1
  1041. package/dist/hooks/use-previous.cjs.map +1 -1
  1042. package/dist/hooks/use-previous.js.map +1 -1
  1043. package/dist/hooks/use-push-to-talk.cjs.map +1 -1
  1044. package/dist/hooks/use-push-to-talk.js.map +1 -1
  1045. package/dist/hooks/use-queue.cjs.map +1 -1
  1046. package/dist/hooks/use-queue.js.map +1 -1
  1047. package/dist/hooks/use-resize-observer.cjs.map +1 -1
  1048. package/dist/hooks/use-resize-observer.js.map +1 -1
  1049. package/dist/hooks/use-scroll-lock.cjs.map +1 -1
  1050. package/dist/hooks/use-scroll-lock.js.map +1 -1
  1051. package/dist/hooks/use-scroll-overflow.cjs.map +1 -1
  1052. package/dist/hooks/use-scroll-overflow.js.map +1 -1
  1053. package/dist/hooks/use-service-worker-update.cjs.map +1 -1
  1054. package/dist/hooks/use-service-worker-update.js.map +1 -1
  1055. package/dist/hooks/use-set.cjs.map +1 -1
  1056. package/dist/hooks/use-set.js.map +1 -1
  1057. package/dist/hooks/use-sortable.cjs.map +1 -1
  1058. package/dist/hooks/use-sortable.js.map +1 -1
  1059. package/dist/hooks/use-stable-callback.cjs.map +1 -1
  1060. package/dist/hooks/use-stable-callback.js.map +1 -1
  1061. package/dist/hooks/use-storage-estimate.cjs.map +1 -1
  1062. package/dist/hooks/use-storage-estimate.js.map +1 -1
  1063. package/dist/hooks/use-throttle.cjs.map +1 -1
  1064. package/dist/hooks/use-throttle.js.map +1 -1
  1065. package/dist/hooks/use-timeout.cjs.map +1 -1
  1066. package/dist/hooks/use-timeout.js.map +1 -1
  1067. package/dist/hooks/use-toggle.cjs.map +1 -1
  1068. package/dist/hooks/use-toggle.js.map +1 -1
  1069. package/dist/hooks/use-typewriter.cjs.map +1 -1
  1070. package/dist/hooks/use-typewriter.js.map +1 -1
  1071. package/dist/hooks/use-window-size.cjs.map +1 -1
  1072. package/dist/hooks/use-window-size.js.map +1 -1
  1073. package/dist/http/api-client.cjs.map +1 -1
  1074. package/dist/http/api-client.js.map +1 -1
  1075. package/dist/http/build-url.cjs.map +1 -1
  1076. package/dist/http/build-url.js.map +1 -1
  1077. package/dist/http/credential-scope.cjs.map +1 -1
  1078. package/dist/http/credential-scope.js.map +1 -1
  1079. package/dist/http/csrf.cjs.map +1 -1
  1080. package/dist/http/csrf.js.map +1 -1
  1081. package/dist/http/decode-response.cjs.map +1 -1
  1082. package/dist/http/decode-response.js.map +1 -1
  1083. package/dist/http/describe-api-error.cjs.map +1 -1
  1084. package/dist/http/describe-api-error.js.map +1 -1
  1085. package/dist/http/errors.cjs.map +1 -1
  1086. package/dist/http/errors.js.map +1 -1
  1087. package/dist/http/idempotency.cjs.map +1 -1
  1088. package/dist/http/idempotency.js.map +1 -1
  1089. package/dist/http/parse-response.cjs.map +1 -1
  1090. package/dist/http/parse-response.js.map +1 -1
  1091. package/dist/http/resumable-upload.cjs.map +1 -1
  1092. package/dist/http/resumable-upload.js.map +1 -1
  1093. package/dist/http/retry.cjs.map +1 -1
  1094. package/dist/http/retry.js.map +1 -1
  1095. package/dist/http/timeout.cjs.map +1 -1
  1096. package/dist/http/timeout.js.map +1 -1
  1097. package/dist/http/upload-with-progress.cjs +1 -1
  1098. package/dist/http/upload-with-progress.cjs.map +1 -1
  1099. package/dist/http/upload-with-progress.js +2 -7
  1100. package/dist/http/upload-with-progress.js.map +1 -1
  1101. package/dist/http/use-describe-api-error.cjs.map +1 -1
  1102. package/dist/http/use-describe-api-error.js.map +1 -1
  1103. package/dist/http/use-poll.cjs +1 -1
  1104. package/dist/http/use-poll.cjs.map +1 -1
  1105. package/dist/http/use-poll.js +2 -5
  1106. package/dist/http/use-poll.js.map +1 -1
  1107. package/dist/i18n/I18nProvider.cjs.map +1 -1
  1108. package/dist/i18n/I18nProvider.js.map +1 -1
  1109. package/dist/i18n/create-i18n.cjs.map +1 -1
  1110. package/dist/i18n/create-i18n.js.map +1 -1
  1111. package/dist/icons/Icon.cjs.map +1 -1
  1112. package/dist/icons/Icon.js.map +1 -1
  1113. package/dist/icons/IconPicker.cjs.map +1 -1
  1114. package/dist/icons/IconPicker.js.map +1 -1
  1115. package/dist/icons/IconPicker.module.cjs.map +1 -1
  1116. package/dist/icons/IconPicker.module.js.map +1 -1
  1117. package/dist/icons/IconProvider.cjs.map +1 -1
  1118. package/dist/icons/IconProvider.js.map +1 -1
  1119. package/dist/icons/alias.cjs.map +1 -1
  1120. package/dist/icons/alias.js.map +1 -1
  1121. package/dist/icons/generated/aliases.cjs.map +1 -1
  1122. package/dist/icons/generated/aliases.js.map +1 -1
  1123. package/dist/icons/generated/icon-names.cjs.map +1 -1
  1124. package/dist/icons/generated/icon-names.js.map +1 -1
  1125. package/dist/icons/generated/loaders.cjs.map +1 -1
  1126. package/dist/icons/generated/loaders.js.map +1 -1
  1127. package/dist/icons/generated/shard-00.cjs.map +1 -1
  1128. package/dist/icons/generated/shard-00.js.map +1 -1
  1129. package/dist/icons/generated/shard-01.cjs.map +1 -1
  1130. package/dist/icons/generated/shard-01.js.map +1 -1
  1131. package/dist/icons/generated/shard-02.cjs.map +1 -1
  1132. package/dist/icons/generated/shard-02.js.map +1 -1
  1133. package/dist/icons/generated/shard-03.cjs.map +1 -1
  1134. package/dist/icons/generated/shard-03.js.map +1 -1
  1135. package/dist/icons/generated/shard-04.cjs.map +1 -1
  1136. package/dist/icons/generated/shard-04.js.map +1 -1
  1137. package/dist/icons/generated/shard-05.cjs.map +1 -1
  1138. package/dist/icons/generated/shard-05.js.map +1 -1
  1139. package/dist/icons/generated/shard-06.cjs.map +1 -1
  1140. package/dist/icons/generated/shard-06.js.map +1 -1
  1141. package/dist/icons/generated/shard-07.cjs.map +1 -1
  1142. package/dist/icons/generated/shard-07.js.map +1 -1
  1143. package/dist/icons/generated/shard-08.cjs.map +1 -1
  1144. package/dist/icons/generated/shard-08.js.map +1 -1
  1145. package/dist/icons/generated/shard-09.cjs.map +1 -1
  1146. package/dist/icons/generated/shard-09.js.map +1 -1
  1147. package/dist/icons/generated/shard-10.cjs.map +1 -1
  1148. package/dist/icons/generated/shard-10.js.map +1 -1
  1149. package/dist/icons/generated/shard-11.cjs.map +1 -1
  1150. package/dist/icons/generated/shard-11.js.map +1 -1
  1151. package/dist/icons/generated/shard-12.cjs.map +1 -1
  1152. package/dist/icons/generated/shard-12.js.map +1 -1
  1153. package/dist/icons/generated/shard-13.cjs.map +1 -1
  1154. package/dist/icons/generated/shard-13.js.map +1 -1
  1155. package/dist/icons/generated/shard-14.cjs.map +1 -1
  1156. package/dist/icons/generated/shard-14.js.map +1 -1
  1157. package/dist/icons/generated/shard-15.cjs.map +1 -1
  1158. package/dist/icons/generated/shard-15.js.map +1 -1
  1159. package/dist/icons/generated/shard-16.cjs.map +1 -1
  1160. package/dist/icons/generated/shard-16.js.map +1 -1
  1161. package/dist/icons/generated/shard-17.cjs.map +1 -1
  1162. package/dist/icons/generated/shard-17.js.map +1 -1
  1163. package/dist/icons/generated/shard-18.cjs.map +1 -1
  1164. package/dist/icons/generated/shard-18.js.map +1 -1
  1165. package/dist/icons/generated/shard-19.cjs.map +1 -1
  1166. package/dist/icons/generated/shard-19.js.map +1 -1
  1167. package/dist/icons/generated/shard-20.cjs.map +1 -1
  1168. package/dist/icons/generated/shard-20.js.map +1 -1
  1169. package/dist/icons/generated/shard-21.cjs.map +1 -1
  1170. package/dist/icons/generated/shard-21.js.map +1 -1
  1171. package/dist/icons/generated/shard-22.cjs.map +1 -1
  1172. package/dist/icons/generated/shard-22.js.map +1 -1
  1173. package/dist/icons/generated/shard-23.cjs.map +1 -1
  1174. package/dist/icons/generated/shard-23.js.map +1 -1
  1175. package/dist/icons/generated/shard-24.cjs.map +1 -1
  1176. package/dist/icons/generated/shard-24.js.map +1 -1
  1177. package/dist/icons/generated/shard-25.cjs.map +1 -1
  1178. package/dist/icons/generated/shard-25.js.map +1 -1
  1179. package/dist/icons/generated/shard-26.cjs.map +1 -1
  1180. package/dist/icons/generated/shard-26.js.map +1 -1
  1181. package/dist/icons/generated/shard-27.cjs.map +1 -1
  1182. package/dist/icons/generated/shard-27.js.map +1 -1
  1183. package/dist/icons/generated/shard-28.cjs.map +1 -1
  1184. package/dist/icons/generated/shard-28.js.map +1 -1
  1185. package/dist/icons/generated/shard-29.cjs.map +1 -1
  1186. package/dist/icons/generated/shard-29.js.map +1 -1
  1187. package/dist/icons/generated/shard-30.cjs.map +1 -1
  1188. package/dist/icons/generated/shard-30.js.map +1 -1
  1189. package/dist/icons/generated/shard-31.cjs.map +1 -1
  1190. package/dist/icons/generated/shard-31.js.map +1 -1
  1191. package/dist/icons/generated/shard-32.cjs.map +1 -1
  1192. package/dist/icons/generated/shard-32.js.map +1 -1
  1193. package/dist/icons/generated/shard-33.cjs.map +1 -1
  1194. package/dist/icons/generated/shard-33.js.map +1 -1
  1195. package/dist/icons/generated/shard-34.cjs.map +1 -1
  1196. package/dist/icons/generated/shard-34.js.map +1 -1
  1197. package/dist/icons/generated/shard-35.cjs.map +1 -1
  1198. package/dist/icons/generated/shard-35.js.map +1 -1
  1199. package/dist/icons/generated/shard-36.cjs.map +1 -1
  1200. package/dist/icons/generated/shard-36.js.map +1 -1
  1201. package/dist/icons/generated/shard-37.cjs.map +1 -1
  1202. package/dist/icons/generated/shard-37.js.map +1 -1
  1203. package/dist/icons/generated/shard-38.cjs.map +1 -1
  1204. package/dist/icons/generated/shard-38.js.map +1 -1
  1205. package/dist/icons/generated/shard-39.cjs.map +1 -1
  1206. package/dist/icons/generated/shard-39.js.map +1 -1
  1207. package/dist/icons/generated/shard-40.cjs.map +1 -1
  1208. package/dist/icons/generated/shard-40.js.map +1 -1
  1209. package/dist/icons/generated/shard-41.cjs.map +1 -1
  1210. package/dist/icons/generated/shard-41.js.map +1 -1
  1211. package/dist/icons/generated/shard-42.cjs.map +1 -1
  1212. package/dist/icons/generated/shard-42.js.map +1 -1
  1213. package/dist/icons/generated/shard-43.cjs.map +1 -1
  1214. package/dist/icons/generated/shard-43.js.map +1 -1
  1215. package/dist/icons/generated/shard-44.cjs.map +1 -1
  1216. package/dist/icons/generated/shard-44.js.map +1 -1
  1217. package/dist/icons/generated/shard-45.cjs.map +1 -1
  1218. package/dist/icons/generated/shard-45.js.map +1 -1
  1219. package/dist/icons/icon-context.cjs.map +1 -1
  1220. package/dist/icons/icon-context.js.map +1 -1
  1221. package/dist/icons/is-icon-name.cjs.map +1 -1
  1222. package/dist/icons/is-icon-name.js.map +1 -1
  1223. package/dist/icons/material-symbols.cjs.map +1 -1
  1224. package/dist/icons/material-symbols.js.map +1 -1
  1225. package/dist/icons/normalize-icon-name.cjs.map +1 -1
  1226. package/dist/icons/normalize-icon-name.js.map +1 -1
  1227. package/dist/icons/shard-cache.cjs +1 -1
  1228. package/dist/icons/shard-cache.cjs.map +1 -1
  1229. package/dist/icons/shard-cache.js +2 -5
  1230. package/dist/icons/shard-cache.js.map +1 -1
  1231. package/dist/icons/use-icon.cjs.map +1 -1
  1232. package/dist/icons/use-icon.js.map +1 -1
  1233. package/dist/icons/validate-icon-name.cjs.map +1 -1
  1234. package/dist/icons/validate-icon-name.js.map +1 -1
  1235. package/dist/icons-virtual.cjs.map +1 -1
  1236. package/dist/icons-virtual.js.map +1 -1
  1237. package/dist/imaging/canvas.cjs.map +1 -1
  1238. package/dist/imaging/canvas.js.map +1 -1
  1239. package/dist/imaging/compress.cjs.map +1 -1
  1240. package/dist/imaging/compress.js.map +1 -1
  1241. package/dist/imaging/decode.cjs.map +1 -1
  1242. package/dist/imaging/decode.js.map +1 -1
  1243. package/dist/imaging/encode.cjs.map +1 -1
  1244. package/dist/imaging/encode.js.map +1 -1
  1245. package/dist/imaging/exceptions.cjs.map +1 -1
  1246. package/dist/imaging/exceptions.js.map +1 -1
  1247. package/dist/imaging/frame.cjs.map +1 -1
  1248. package/dist/imaging/frame.js.map +1 -1
  1249. package/dist/imaging/thumbnails.cjs.map +1 -1
  1250. package/dist/imaging/thumbnails.js.map +1 -1
  1251. package/dist/imaging/transform.cjs.map +1 -1
  1252. package/dist/imaging/transform.js.map +1 -1
  1253. package/dist/imaging/use-image-processing.cjs.map +1 -1
  1254. package/dist/imaging/use-image-processing.js.map +1 -1
  1255. package/dist/logger/logger.cjs.map +1 -1
  1256. package/dist/logger/logger.js.map +1 -1
  1257. package/dist/neural.cjs.map +1 -1
  1258. package/dist/neural.js.map +1 -1
  1259. package/dist/oauth/GoogleSignIn.cjs +1 -1
  1260. package/dist/oauth/GoogleSignIn.cjs.map +1 -1
  1261. package/dist/oauth/GoogleSignIn.js +6 -9
  1262. package/dist/oauth/GoogleSignIn.js.map +1 -1
  1263. package/dist/oauth/callback.cjs.map +1 -1
  1264. package/dist/oauth/callback.js.map +1 -1
  1265. package/dist/oauth/use-oauth-callback.cjs.map +1 -1
  1266. package/dist/oauth/use-oauth-callback.js.map +1 -1
  1267. package/dist/offline/conflict.cjs.map +1 -1
  1268. package/dist/offline/conflict.js.map +1 -1
  1269. package/dist/offline/create-offline-database.cjs.map +1 -1
  1270. package/dist/offline/create-offline-database.js.map +1 -1
  1271. package/dist/offline/create-offline-store.cjs +1 -1
  1272. package/dist/offline/create-offline-store.cjs.map +1 -1
  1273. package/dist/offline/create-offline-store.js +1 -5
  1274. package/dist/offline/create-offline-store.js.map +1 -1
  1275. package/dist/offline/create-offline-sync.cjs +1 -1
  1276. package/dist/offline/create-offline-sync.cjs.map +1 -1
  1277. package/dist/offline/create-offline-sync.js +9 -14
  1278. package/dist/offline/create-offline-sync.js.map +1 -1
  1279. package/dist/offline/use-offline-sync.cjs.map +1 -1
  1280. package/dist/offline/use-offline-sync.js.map +1 -1
  1281. package/dist/perf/cache-size.cjs.map +1 -1
  1282. package/dist/perf/cache-size.js.map +1 -1
  1283. package/dist/perf/device.cjs.map +1 -1
  1284. package/dist/perf/device.js.map +1 -1
  1285. package/dist/perf/format.cjs.map +1 -1
  1286. package/dist/perf/format.js.map +1 -1
  1287. package/dist/perf/profiler.cjs.map +1 -1
  1288. package/dist/perf/profiler.js.map +1 -1
  1289. package/dist/push/use-push-subscription.cjs.map +1 -1
  1290. package/dist/push/use-push-subscription.js.map +1 -1
  1291. package/dist/push/utils.cjs.map +1 -1
  1292. package/dist/push/utils.js.map +1 -1
  1293. package/dist/push/web-push-client.cjs.map +1 -1
  1294. package/dist/push/web-push-client.js.map +1 -1
  1295. package/dist/query/QueryProvider.cjs.map +1 -1
  1296. package/dist/query/QueryProvider.js.map +1 -1
  1297. package/dist/query/constants.cjs.map +1 -1
  1298. package/dist/query/constants.js.map +1 -1
  1299. package/dist/query/create-query-keys.cjs.map +1 -1
  1300. package/dist/query/create-query-keys.js.map +1 -1
  1301. package/dist/query/foreign-client-warning.cjs.map +1 -1
  1302. package/dist/query/foreign-client-warning.js.map +1 -1
  1303. package/dist/query/offline-persistence.cjs +1 -1
  1304. package/dist/query/offline-persistence.cjs.map +1 -1
  1305. package/dist/query/offline-persistence.js +2 -10
  1306. package/dist/query/offline-persistence.js.map +1 -1
  1307. package/dist/query/optimistic.cjs.map +1 -1
  1308. package/dist/query/optimistic.js.map +1 -1
  1309. package/dist/query/pagination.cjs.map +1 -1
  1310. package/dist/query/pagination.js.map +1 -1
  1311. package/dist/query/retry-policy.cjs.map +1 -1
  1312. package/dist/query/retry-policy.js.map +1 -1
  1313. package/dist/query/use-cursor-query.cjs.map +1 -1
  1314. package/dist/query/use-cursor-query.js.map +1 -1
  1315. package/dist/query/use-offline-mutation.cjs.map +1 -1
  1316. package/dist/query/use-offline-mutation.js.map +1 -1
  1317. package/dist/query/use-paginated-query.cjs.map +1 -1
  1318. package/dist/query/use-paginated-query.js.map +1 -1
  1319. package/dist/router/AppRouter.cjs.map +1 -1
  1320. package/dist/router/AppRouter.js.map +1 -1
  1321. package/dist/router/RouteGuard.cjs.map +1 -1
  1322. package/dist/router/RouteGuard.js.map +1 -1
  1323. package/dist/router/index.js +2 -2
  1324. package/dist/share/share-or-download.cjs.map +1 -1
  1325. package/dist/share/share-or-download.js.map +1 -1
  1326. package/dist/share/share.cjs.map +1 -1
  1327. package/dist/share/share.js.map +1 -1
  1328. package/dist/sse/create-event-stream.cjs.map +1 -1
  1329. package/dist/sse/create-event-stream.js.map +1 -1
  1330. package/dist/sse/use-event-stream.cjs.map +1 -1
  1331. package/dist/sse/use-event-stream.js.map +1 -1
  1332. package/dist/store/create-selectors.cjs.map +1 -1
  1333. package/dist/store/create-selectors.js.map +1 -1
  1334. package/dist/store/create-store.cjs.map +1 -1
  1335. package/dist/store/create-store.js.map +1 -1
  1336. package/dist/sw/background-sync.cjs.map +1 -1
  1337. package/dist/sw/background-sync.js.map +1 -1
  1338. package/dist/sw/cache-inspect.cjs.map +1 -1
  1339. package/dist/sw/cache-inspect.js.map +1 -1
  1340. package/dist/sw/cache.cjs +1 -1
  1341. package/dist/sw/cache.cjs.map +1 -1
  1342. package/dist/sw/cache.js +2 -6
  1343. package/dist/sw/cache.js.map +1 -1
  1344. package/dist/sw/create-push-handler.cjs.map +1 -1
  1345. package/dist/sw/create-push-handler.js.map +1 -1
  1346. package/dist/sw/credential-headers.cjs.map +1 -1
  1347. package/dist/sw/credential-headers.js.map +1 -1
  1348. package/dist/sw/periodic-sync.cjs.map +1 -1
  1349. package/dist/sw/periodic-sync.js.map +1 -1
  1350. package/dist/sw/register-service-worker.cjs.map +1 -1
  1351. package/dist/sw/register-service-worker.js.map +1 -1
  1352. package/dist/sw/session-data.cjs.map +1 -1
  1353. package/dist/sw/session-data.js.map +1 -1
  1354. package/dist/tabular/assets.cjs.map +1 -1
  1355. package/dist/tabular/assets.js.map +1 -1
  1356. package/dist/tabular/cache.cjs.map +1 -1
  1357. package/dist/tabular/cache.js.map +1 -1
  1358. package/dist/tabular/compact.cjs.map +1 -1
  1359. package/dist/tabular/compact.js.map +1 -1
  1360. package/dist/tabular/exceptions.cjs.map +1 -1
  1361. package/dist/tabular/exceptions.js.map +1 -1
  1362. package/dist/tabular/manifest.cjs.map +1 -1
  1363. package/dist/tabular/manifest.js.map +1 -1
  1364. package/dist/tabular/predictor.cjs.map +1 -1
  1365. package/dist/tabular/predictor.js.map +1 -1
  1366. package/dist/tabular/use-tabular-predictor.cjs.map +1 -1
  1367. package/dist/tabular/use-tabular-predictor.js.map +1 -1
  1368. package/dist/telemetry/TelemetryProvider.cjs.map +1 -1
  1369. package/dist/telemetry/TelemetryProvider.js.map +1 -1
  1370. package/dist/telemetry/app-error-adapter.cjs.map +1 -1
  1371. package/dist/telemetry/app-error-adapter.js.map +1 -1
  1372. package/dist/telemetry/app-error-queue.cjs.map +1 -1
  1373. package/dist/telemetry/app-error-queue.js.map +1 -1
  1374. package/dist/telemetry/app-error-reporter.cjs.map +1 -1
  1375. package/dist/telemetry/app-error-reporter.js.map +1 -1
  1376. package/dist/telemetry/app-error-schema.cjs.map +1 -1
  1377. package/dist/telemetry/app-error-schema.js.map +1 -1
  1378. package/dist/telemetry/app-error-transport.cjs.map +1 -1
  1379. package/dist/telemetry/app-error-transport.js.map +1 -1
  1380. package/dist/telemetry/console-adapter.cjs.map +1 -1
  1381. package/dist/telemetry/console-adapter.js.map +1 -1
  1382. package/dist/telemetry/describe-app-error.cjs.map +1 -1
  1383. package/dist/telemetry/describe-app-error.js.map +1 -1
  1384. package/dist/telemetry/posthog-adapter.cjs +1 -1
  1385. package/dist/telemetry/posthog-adapter.cjs.map +1 -1
  1386. package/dist/telemetry/posthog-adapter.js +1 -5
  1387. package/dist/telemetry/posthog-adapter.js.map +1 -1
  1388. package/dist/telemetry/sentry-adapter.cjs.map +1 -1
  1389. package/dist/telemetry/sentry-adapter.js.map +1 -1
  1390. package/dist/tempest-react-sdk.cjs +1 -1
  1391. package/dist/tempest-react-sdk.d.ts +234 -3
  1392. package/dist/tempest-react-sdk.js +85 -85
  1393. package/dist/testing/create-mock-handlers.cjs.map +1 -1
  1394. package/dist/testing/create-mock-handlers.js.map +1 -1
  1395. package/dist/testing.js +1 -2
  1396. package/dist/theme/ThemeProvider.cjs.map +1 -1
  1397. package/dist/theme/ThemeProvider.js.map +1 -1
  1398. package/dist/theme/apply-theme.cjs.map +1 -1
  1399. package/dist/theme/apply-theme.js.map +1 -1
  1400. package/dist/theme/color.cjs.map +1 -1
  1401. package/dist/theme/color.js.map +1 -1
  1402. package/dist/theme/create-theme.cjs.map +1 -1
  1403. package/dist/theme/create-theme.js.map +1 -1
  1404. package/dist/theme/data-viz-ramps.cjs.map +1 -1
  1405. package/dist/theme/data-viz-ramps.js.map +1 -1
  1406. package/dist/theme/initial-theme.cjs.map +1 -1
  1407. package/dist/theme/initial-theme.js.map +1 -1
  1408. package/dist/theme/inverse-render.cjs.map +1 -1
  1409. package/dist/theme/inverse-render.js.map +1 -1
  1410. package/dist/theme/inverse-restore.cjs.map +1 -1
  1411. package/dist/theme/inverse-restore.js.map +1 -1
  1412. package/dist/theme/inverse-surface.cjs.map +1 -1
  1413. package/dist/theme/inverse-surface.js.map +1 -1
  1414. package/dist/theme/status-tokens.cjs.map +1 -1
  1415. package/dist/theme/status-tokens.js.map +1 -1
  1416. package/dist/theme/theme-presets.cjs.map +1 -1
  1417. package/dist/theme/theme-presets.js.map +1 -1
  1418. package/dist/utils/absent.cjs.map +1 -1
  1419. package/dist/utils/absent.js.map +1 -1
  1420. package/dist/utils/arrays.cjs.map +1 -1
  1421. package/dist/utils/arrays.js.map +1 -1
  1422. package/dist/utils/base64.cjs.map +1 -1
  1423. package/dist/utils/base64.js.map +1 -1
  1424. package/dist/utils/cn.cjs.map +1 -1
  1425. package/dist/utils/cn.js.map +1 -1
  1426. package/dist/utils/compare-values.cjs.map +1 -1
  1427. package/dist/utils/compare-values.js.map +1 -1
  1428. package/dist/utils/compressed-storage.cjs.map +1 -1
  1429. package/dist/utils/compressed-storage.js.map +1 -1
  1430. package/dist/utils/csv.cjs.map +1 -1
  1431. package/dist/utils/csv.js.map +1 -1
  1432. package/dist/utils/dev-mode.cjs.map +1 -1
  1433. package/dist/utils/dev-mode.js.map +1 -1
  1434. package/dist/utils/duplicate-instance.cjs.map +1 -1
  1435. package/dist/utils/duplicate-instance.js.map +1 -1
  1436. package/dist/utils/format.cjs.map +1 -1
  1437. package/dist/utils/format.js.map +1 -1
  1438. package/dist/utils/functions.cjs +1 -1
  1439. package/dist/utils/functions.cjs.map +1 -1
  1440. package/dist/utils/functions.js +1 -1
  1441. package/dist/utils/functions.js.map +1 -1
  1442. package/dist/utils/guards.cjs.map +1 -1
  1443. package/dist/utils/guards.js.map +1 -1
  1444. package/dist/utils/ids.cjs.map +1 -1
  1445. package/dist/utils/ids.js.map +1 -1
  1446. package/dist/utils/intl-cache.cjs.map +1 -1
  1447. package/dist/utils/intl-cache.js.map +1 -1
  1448. package/dist/utils/json-frame.cjs.map +1 -1
  1449. package/dist/utils/json-frame.js.map +1 -1
  1450. package/dist/utils/numbers.cjs.map +1 -1
  1451. package/dist/utils/numbers.js.map +1 -1
  1452. package/dist/utils/objects.cjs.map +1 -1
  1453. package/dist/utils/objects.js.map +1 -1
  1454. package/dist/utils/owner-fingerprint.cjs.map +1 -1
  1455. package/dist/utils/owner-fingerprint.js.map +1 -1
  1456. package/dist/utils/promises.cjs.map +1 -1
  1457. package/dist/utils/promises.js.map +1 -1
  1458. package/dist/utils/relative-time.cjs.map +1 -1
  1459. package/dist/utils/relative-time.js.map +1 -1
  1460. package/dist/utils/safe-url.cjs.map +1 -1
  1461. package/dist/utils/safe-url.js.map +1 -1
  1462. package/dist/utils/schema-like.cjs.map +1 -1
  1463. package/dist/utils/schema-like.js.map +1 -1
  1464. package/dist/utils/storage.cjs +1 -1
  1465. package/dist/utils/storage.cjs.map +1 -1
  1466. package/dist/utils/storage.js +2 -2
  1467. package/dist/utils/storage.js.map +1 -1
  1468. package/dist/utils/strings.cjs.map +1 -1
  1469. package/dist/utils/strings.js.map +1 -1
  1470. package/dist/utils/xlsx.cjs.map +1 -1
  1471. package/dist/utils/xlsx.js.map +1 -1
  1472. package/dist/vision/core/canvas.cjs.map +1 -1
  1473. package/dist/vision/core/canvas.js.map +1 -1
  1474. package/dist/vision/core/dtypes.cjs.map +1 -1
  1475. package/dist/vision/core/dtypes.js.map +1 -1
  1476. package/dist/vision/core/exceptions.cjs.map +1 -1
  1477. package/dist/vision/core/exceptions.js.map +1 -1
  1478. package/dist/vision/core/graph.cjs.map +1 -1
  1479. package/dist/vision/core/graph.js.map +1 -1
  1480. package/dist/vision/core/metadata.cjs +1 -1
  1481. package/dist/vision/core/metadata.cjs.map +1 -1
  1482. package/dist/vision/core/metadata.js +9 -26
  1483. package/dist/vision/core/metadata.js.map +1 -1
  1484. package/dist/vision/core/providers.cjs.map +1 -1
  1485. package/dist/vision/core/providers.js.map +1 -1
  1486. package/dist/vision/core/session.cjs.map +1 -1
  1487. package/dist/vision/core/session.js.map +1 -1
  1488. package/dist/vision/core/timing.cjs.map +1 -1
  1489. package/dist/vision/core/timing.js.map +1 -1
  1490. package/dist/vision/fusion.cjs.map +1 -1
  1491. package/dist/vision/fusion.js.map +1 -1
  1492. package/dist/vision/index.cjs.map +1 -1
  1493. package/dist/vision/index.js.map +1 -1
  1494. package/dist/vision/io/image.cjs.map +1 -1
  1495. package/dist/vision/io/image.js.map +1 -1
  1496. package/dist/vision/labels.cjs.map +1 -1
  1497. package/dist/vision/labels.js.map +1 -1
  1498. package/dist/vision/luminance.cjs.map +1 -1
  1499. package/dist/vision/luminance.js.map +1 -1
  1500. package/dist/vision/normalization.cjs.map +1 -1
  1501. package/dist/vision/normalization.js.map +1 -1
  1502. package/dist/vision/postprocess/classification.cjs.map +1 -1
  1503. package/dist/vision/postprocess/classification.js.map +1 -1
  1504. package/dist/vision/postprocess/detection.cjs.map +1 -1
  1505. package/dist/vision/postprocess/detection.js.map +1 -1
  1506. package/dist/vision/postprocess/segmentation.cjs.map +1 -1
  1507. package/dist/vision/postprocess/segmentation.js.map +1 -1
  1508. package/dist/vision/preprocess/image.cjs.map +1 -1
  1509. package/dist/vision/preprocess/image.js.map +1 -1
  1510. package/dist/vision/preprocess/pipeline.cjs.map +1 -1
  1511. package/dist/vision/preprocess/pipeline.js.map +1 -1
  1512. package/dist/vision/results.cjs.map +1 -1
  1513. package/dist/vision/results.js.map +1 -1
  1514. package/dist/vision/tasks/base.cjs.map +1 -1
  1515. package/dist/vision/tasks/base.js.map +1 -1
  1516. package/dist/vision/tasks/classifier.cjs.map +1 -1
  1517. package/dist/vision/tasks/classifier.js.map +1 -1
  1518. package/dist/vision/tasks/detectClassify.cjs.map +1 -1
  1519. package/dist/vision/tasks/detectClassify.js.map +1 -1
  1520. package/dist/vision/tasks/detector.cjs.map +1 -1
  1521. package/dist/vision/tasks/detector.js.map +1 -1
  1522. package/dist/vision/tasks/segmenter.cjs.map +1 -1
  1523. package/dist/vision/tasks/segmenter.js.map +1 -1
  1524. package/dist/vision/types.cjs.map +1 -1
  1525. package/dist/vision/types.js.map +1 -1
  1526. package/dist/vision/use-camera-stream.cjs +1 -1
  1527. package/dist/vision/use-camera-stream.cjs.map +1 -1
  1528. package/dist/vision/use-camera-stream.js +3 -9
  1529. package/dist/vision/use-camera-stream.js.map +1 -1
  1530. package/dist/vision/use-live-luminance.cjs +1 -1
  1531. package/dist/vision/use-live-luminance.cjs.map +1 -1
  1532. package/dist/vision/use-live-luminance.js +1 -5
  1533. package/dist/vision/use-live-luminance.js.map +1 -1
  1534. package/dist/vite/base-url.cjs.map +1 -1
  1535. package/dist/vite/base-url.js.map +1 -1
  1536. package/dist/vite/create-vite-config.cjs.map +1 -1
  1537. package/dist/vite/create-vite-config.js.map +1 -1
  1538. package/dist/vite/narrow-tokens.cjs.map +1 -1
  1539. package/dist/vite/narrow-tokens.js.map +1 -1
  1540. package/dist/vite/tempest-csp.cjs +1 -1
  1541. package/dist/vite/tempest-csp.cjs.map +1 -1
  1542. package/dist/vite/tempest-csp.js +2 -10
  1543. package/dist/vite/tempest-csp.js.map +1 -1
  1544. package/dist/vite/tempest-icons.cjs.map +1 -1
  1545. package/dist/vite/tempest-icons.js.map +1 -1
  1546. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  1547. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  1548. package/dist/vite/tempest-pwa-dev-sw.js +9 -16
  1549. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  1550. package/dist/vite/tempest-pwa-icons.cjs.map +1 -1
  1551. package/dist/vite/tempest-pwa-icons.js.map +1 -1
  1552. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  1553. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  1554. package/dist/vite/tempest-styles.cjs.map +1 -1
  1555. package/dist/vite/tempest-styles.js.map +1 -1
  1556. package/dist/vite/tempest-vitest.cjs.map +1 -1
  1557. package/dist/vite/tempest-vitest.js.map +1 -1
  1558. package/dist/webrtc/link-stats.cjs.map +1 -1
  1559. package/dist/webrtc/link-stats.js.map +1 -1
  1560. package/dist/webrtc/mesh-quality.cjs.map +1 -1
  1561. package/dist/webrtc/mesh-quality.js.map +1 -1
  1562. package/dist/webrtc/opus-sdp.cjs.map +1 -1
  1563. package/dist/webrtc/opus-sdp.js.map +1 -1
  1564. package/dist/webrtc/peer-link.cjs +1 -1
  1565. package/dist/webrtc/peer-link.cjs.map +1 -1
  1566. package/dist/webrtc/peer-link.js +2 -5
  1567. package/dist/webrtc/peer-link.js.map +1 -1
  1568. package/dist/webrtc/peer-mesh.cjs +1 -1
  1569. package/dist/webrtc/peer-mesh.cjs.map +1 -1
  1570. package/dist/webrtc/peer-mesh.js +8 -24
  1571. package/dist/webrtc/peer-mesh.js.map +1 -1
  1572. package/dist/webrtc/sender-bitrate.cjs.map +1 -1
  1573. package/dist/webrtc/sender-bitrate.js.map +1 -1
  1574. package/dist/webrtc/use-link-stats.cjs.map +1 -1
  1575. package/dist/webrtc/use-link-stats.js.map +1 -1
  1576. package/dist/ws/create-web-socket.cjs +1 -1
  1577. package/dist/ws/create-web-socket.cjs.map +1 -1
  1578. package/dist/ws/create-web-socket.js +4 -22
  1579. package/dist/ws/create-web-socket.js.map +1 -1
  1580. package/dist/ws/resilience.cjs.map +1 -1
  1581. package/dist/ws/resilience.js.map +1 -1
  1582. package/dist/ws/use-web-socket.cjs.map +1 -1
  1583. package/dist/ws/use-web-socket.js.map +1 -1
  1584. package/package.json +9 -6
  1585. package/template/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fusion.js","names":[],"sources":["../../src/vision/fusion.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * The contract a fused pipeline carries inside its own `.onnx` file.\n *\n * A pipeline built by the Python SDK's `ort_vision_sdk.compose` is a single\n * graph that already contains the detector, the crop-and-resize bridge and the\n * classifier. Everything the runtime needs to drive it — the letterbox\n * resolution, the crop resolution, where the crops come from, how many\n * detections the graph emits, the class names of both stages — was decided at\n * fusion time and written into the model's metadata.\n *\n * This module reads it back. It is the browser half of a contract whose other\n * half lives in `ort_vision_sdk/fusion.py`: the same keys, the same encodings,\n * the same fallbacks. A pipeline fused once therefore runs identically in\n * Python and in a browser tab, off the same file.\n *\n * Building a pipeline stays a Python-side build step — there is no ONNX\n * protobuf writer here, and there is no reason for one: fusing is something you\n * do once next to your export pipeline, not in a page load.\n */\n\nimport { parseNames } from \"./core/metadata\";\n\n/**\n * Which tensor the bridge crops the detected boxes out of.\n *\n * - `\"detector_input\"`: the letterboxed tensor already fed to the detector.\n * The fused graph then has a **single** image input, but a small object is\n * cropped out of its downscaled copy.\n * - `\"original\"`: a second, full-resolution image input. The bridge undoes the\n * letterbox transform in-graph and crops at native resolution. Two tensors to\n * feed, still one session and one model load.\n */\nexport type CropSource = \"detector_input\" | \"original\";\n\n/** Value of the `ovs.kind` metadata key for a detector→classifier pipeline. */\nexport const FUSION_KIND_DETECT_CLASSIFY = \"detect_classify\";\n\n/**\n * Value of `ovs.kind` for a detector→segmenter→classifier pipeline.\n *\n * The segmenter runs inside each crop rather than over the whole frame: the\n * detector finds the boxes, the bridge cuts them out, and the segmenter turns\n * each crop into a foreground mask that gates the pixels the classifier sees.\n * Fusing one is a build step on the Python side; the browser only loads the\n * result.\n */\nexport const FUSION_KIND_DETECT_SEGMENT_CLASSIFY = \"detect_segment_classify\";\n\n/**\n * Namespace for every metadata key the fusion writes.\n *\n * Namespaced on purpose: the detector's own Ultralytics metadata (`names`,\n * `task`, `imgsz`) is carried over into the fused model, and an un-prefixed key\n * would either collide with it or be mistaken for it.\n */\nexport const METADATA_PREFIX = \"ovs.\";\n\n/** Name of the fused graph's letterboxed detector input, `[1, 3, H, W]` float32 in `[0, 1]`. */\nexport const INPUT_IMAGE = \"images\";\n\n/** Name of the full-resolution input. Present only when `cropSource === \"original\"`. */\nexport const INPUT_SOURCE = \"source_image\";\n\n/** Name of the `[1]` float32 letterbox scale factor. Only with `cropSource === \"original\"`. */\nexport const INPUT_SCALE = \"letterbox_scale\";\n\n/** Name of the `[2]` float32 `[padLeft, padTop]`. Only with `cropSource === \"original\"`. */\nexport const INPUT_PAD = \"letterbox_pad\";\n\n/**\n * Name of the `[K, 4]` float32 xyxy output, in **letterboxed** input pixels.\n *\n * A file fused by `ort-vision-sdk` 0.9.0 or later reports the box that was\n * actually classified: clamped to the image the crop came from, exactly as\n * RoiAlign received it. Older files report the raw box, so one that ran off the\n * frame draws a rectangle wider than the region the classifier saw.\n */\nexport const OUTPUT_BOXES = \"boxes\";\n\n/** Name of the `[K]` float32 detection-confidence output. */\nexport const OUTPUT_SCORES = \"scores\";\n\n/** Name of the `[K]` int64 detector-class output. */\nexport const OUTPUT_CLASSES = \"classes\";\n\n/** Name of the `[1]` int64 output holding how many of the `K` rows are real. */\nexport const OUTPUT_NUM_DETECTIONS = \"num_detections\";\n\n/** Name of the `[K, numClassifierClasses]` float32 classifier output, one row per box. */\n/**\n * Name of the `(K, 1, cropH, cropW)` float32 mask output. Only on a\n * `detect_segment_classify` pipeline.\n *\n * The mask lives in the **crop's** coordinate space, not the original image's,\n * because that is where the segmenter computed it. Values are 0 or 1 after\n * thresholding; padded rows are all-zero, like every other output.\n */\nexport const OUTPUT_MASKS = \"masks\";\n\nexport const OUTPUT_PROBS = \"probs\";\n\n/** Everything a fused pipeline declares about how it must be driven. */\nexport interface FusionSpec {\n /** Pipeline family — {@link FUSION_KIND_DETECT_CLASSIFY} or {@link FUSION_KIND_DETECT_SEGMENT_CLASSIFY}. */\n readonly kind: string;\n /** `[width, height]` the detector stage expects — the resolution to letterbox to. */\n readonly inputSize: readonly [number, number];\n /** `[width, height]` every crop is resampled to inside the graph. */\n readonly cropSize: readonly [number, number];\n /** Which tensor the crops are taken from. */\n readonly cropSource: CropSource;\n /**\n * Fixed number of rows `K` every output carries, surplus zero-padded and\n * counted by {@link OUTPUT_NUM_DETECTIONS}. `null` means the graph emits\n * exactly as many rows as survived NMS.\n */\n readonly maxDetections: number | null;\n /** Score threshold baked into the graph's NMS node. */\n readonly confThreshold: number;\n /** IoU threshold baked into the graph's NMS node. */\n readonly iouThreshold: number;\n /** Whether the classifier stage emits logits that still need a softmax. */\n readonly applySoftmax: boolean;\n /** Detector class names in class-id order, or `null` when the fusion recorded none. */\n readonly detectorNames: readonly string[] | null;\n /** Classifier class names in class-id order, or `null`. */\n readonly classifierNames: readonly string[] | null;\n /** Version of `ort-vision-sdk` that produced the file. */\n readonly sdkVersion: string;\n /** Whether driving this pipeline requires feeding the full-resolution input. */\n readonly needsSourceImage: boolean;\n /** Whether this pipeline emits a {@link OUTPUT_MASKS} tensor. */\n readonly hasMasks: boolean;\n /** Class id → name for the segmenter's channels, or `null`. */\n readonly segmenterNames: readonly string[] | null;\n /**\n * Probability above which a segmenter pixel counted as foreground.\n *\n * Baked into the graph at fusion time; reported so a caller can say what the\n * masks mean.\n */\n readonly maskThreshold: number;\n /** Whether the mask gated the crop before the classifier saw it. */\n readonly maskApplied: boolean;\n}\n\nconst KEY_KIND = \"kind\";\nconst KEY_SDK_VERSION = \"sdk_version\";\nconst KEY_INPUT_SIZE = \"input_size\";\nconst KEY_CROP_SIZE = \"crop_size\";\nconst KEY_CROP_SOURCE = \"crop_source\";\nconst KEY_MAX_DETECTIONS = \"max_detections\";\nconst KEY_CONF_THRESHOLD = \"conf_threshold\";\nconst KEY_IOU_THRESHOLD = \"iou_threshold\";\nconst KEY_APPLY_SOFTMAX = \"apply_softmax\";\nconst KEY_DETECTOR_NAMES = \"detector_names\";\nconst KEY_CLASSIFIER_NAMES = \"classifier_names\";\nconst KEY_SEGMENTER_NAMES = \"segmenter_names\";\nconst KEY_MASK_THRESHOLD = \"mask_threshold\";\nconst KEY_MASK_APPLIED = \"mask_applied\";\n\nconst DYNAMIC = \"dynamic\";\n\n/**\n * Decode a `\"640,640\"` pair.\n *\n * @param raw The encoded pair.\n * @returns `[width, height]`, or `null` when the value is missing or malformed.\n */\nfunction decodeSize(raw: string | undefined): readonly [number, number] | null {\n if (!raw) return null;\n const parts = raw.split(\",\");\n if (parts.length !== 2) return null;\n const width = Number(parts[0]);\n const height = Number(parts[1]);\n if (!Number.isInteger(width) || !Number.isInteger(height)) return null;\n if (width < 1 || height < 1) return null;\n return [width, height];\n}\n\n/**\n * Decode a float, falling back when the value is missing or malformed.\n *\n * @param raw The encoded value.\n * @param fallback Value to use when `raw` cannot be read.\n * @returns The parsed number, or `fallback`.\n */\nfunction decodeFloat(raw: string | undefined, fallback: number): number {\n if (!raw) return fallback;\n const value = Number(raw);\n return Number.isFinite(value) ? value : fallback;\n}\n\n/**\n * Read a pipeline spec out of a model's custom metadata.\n *\n * Individual malformed entries fall back to the value a fusion would have used\n * by default — a single bad float is not a reason to reject an otherwise\n * loadable pipeline. A malformed resolution is fatal, because there is no safe\n * default for one.\n *\n * @param metadata A model's custom metadata map, as read by\n * {@link readModelMetadata}.\n * @returns The decoded spec, or `null` when the model is not a fused pipeline —\n * it carries no `ovs.kind` entry, or one naming a pipeline kind this version\n * does not know how to drive.\n */\nexport function readFusionSpec(\n metadata: Readonly<Record<string, string>> | undefined,\n): FusionSpec | null {\n if (!metadata) return null;\n\n const read: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n if (key.startsWith(METADATA_PREFIX)) read[key.slice(METADATA_PREFIX.length)] = value;\n }\n const kind = read[KEY_KIND];\n if (kind !== FUSION_KIND_DETECT_CLASSIFY && kind !== FUSION_KIND_DETECT_SEGMENT_CLASSIFY) {\n return null;\n }\n\n const inputSize = decodeSize(read[KEY_INPUT_SIZE]);\n const cropSize = decodeSize(read[KEY_CROP_SIZE]);\n if (inputSize === null || cropSize === null) return null;\n\n const rawMax = read[KEY_MAX_DETECTIONS] ?? DYNAMIC;\n const parsedMax = Number(rawMax);\n const maxDetections =\n rawMax === DYNAMIC || !Number.isInteger(parsedMax) || parsedMax < 1 ? null : parsedMax;\n\n const cropSource: CropSource =\n read[KEY_CROP_SOURCE] === \"original\" ? \"original\" : \"detector_input\";\n\n return {\n kind,\n inputSize,\n cropSize,\n cropSource,\n maxDetections,\n confThreshold: decodeFloat(read[KEY_CONF_THRESHOLD], 0.25),\n iouThreshold: decodeFloat(read[KEY_IOU_THRESHOLD], 0.45),\n applySoftmax: (read[KEY_APPLY_SOFTMAX] ?? \"1\") !== \"0\",\n detectorNames: parseNames(read[KEY_DETECTOR_NAMES]),\n classifierNames: parseNames(read[KEY_CLASSIFIER_NAMES]),\n sdkVersion: read[KEY_SDK_VERSION] ?? \"\",\n needsSourceImage: cropSource === \"original\",\n hasMasks: kind === FUSION_KIND_DETECT_SEGMENT_CLASSIFY,\n segmenterNames: parseNames(read[KEY_SEGMENTER_NAMES]),\n maskThreshold: decodeFloat(read[KEY_MASK_THRESHOLD], 0.5),\n maskApplied: (read[KEY_MASK_APPLIED] ?? \"1\") !== \"0\",\n };\n}\n"],"mappings":";;AAoCA,IAAa,IAA8B,mBAW9B,IAAsC,2BAStC,IAAkB,QAGlB,IAAc,UAGd,IAAe,gBAGf,IAAc,mBAGd,IAAY,iBAUZ,IAAe,SAGf,IAAgB,UAGhB,IAAiB,WAGjB,IAAwB,kBAWxB,IAAe,SAEf,IAAe,SA+CtB,IAAW,QACX,IAAkB,eAClB,IAAiB,cACjB,IAAgB,aAChB,IAAkB,eAClB,IAAqB,kBACrB,IAAqB,kBACrB,IAAoB,iBACpB,IAAoB,iBACpB,IAAqB,kBACrB,IAAuB,oBACvB,IAAsB,mBACtB,IAAqB,kBACrB,IAAmB,gBAEnB,IAAU;AAQhB,SAAS,EAAW,GAA2D;CAC3E,IAAI,CAAC,GAAK,OAAO;CACjB,IAAM,IAAQ,EAAI,MAAM,GAAG;CAC3B,IAAI,EAAM,WAAW,GAAG,OAAO;CAC/B,IAAM,IAAQ,OAAO,EAAM,EAAE,GACvB,IAAS,OAAO,EAAM,EAAE;CAG9B,OAFI,CAAC,OAAO,UAAU,CAAK,KAAK,CAAC,OAAO,UAAU,CAAM,KACpD,IAAQ,KAAK,IAAS,IAAU,OAC7B,CAAC,GAAO,CAAM;AACzB;AASA,SAAS,EAAY,GAAyB,GAA0B;CACpE,IAAI,CAAC,GAAK,OAAO;CACjB,IAAM,IAAQ,OAAO,CAAG;CACxB,OAAO,OAAO,SAAS,CAAK,IAAI,IAAQ;AAC5C;AAgBA,SAAgB,EACZ,GACiB;CACjB,IAAI,CAAC,GAAU,OAAO;CAEtB,IAAM,IAA+B,CAAC;CACtC,KAAK,IAAM,CAAC,GAAK,MAAU,OAAO,QAAQ,CAAQ,GAC9C,AAAI,EAAI,WAAA,MAA0B,MAAG,EAAK,EAAI,MAAM,CAAsB,KAAK;CAEnF,IAAM,IAAO,EAAK;CAClB,IAAI,MAAA,qBAAwC,MAAA,2BACxC,OAAO;CAGX,IAAM,IAAY,EAAW,EAAK,EAAe,GAC3C,IAAW,EAAW,EAAK,EAAc;CAC/C,IAAI,MAAc,QAAQ,MAAa,MAAM,OAAO;CAEpD,IAAM,IAAS,EAAK,MAAuB,GACrC,IAAY,OAAO,CAAM,GACzB,IACF,MAAW,KAAW,CAAC,OAAO,UAAU,CAAS,KAAK,IAAY,IAAI,OAAO,GAE3E,IACF,EAAK,OAAqB,aAAa,aAAa;CAExD,OAAO;EACH;EACA;EACA;EACA;EACA;EACA,eAAe,EAAY,EAAK,IAAqB,GAAI;EACzD,cAAc,EAAY,EAAK,IAAoB,GAAI;EACvD,eAAe,EAAK,MAAsB,SAAS;EACnD,eAAe,EAAW,EAAK,EAAmB;EAClD,iBAAiB,EAAW,EAAK,EAAqB;EACtD,YAAY,EAAK,MAAoB;EACrC,kBAAkB,MAAe;EACjC,UAAU,MAAS;EACnB,gBAAgB,EAAW,EAAK,EAAoB;EACpD,eAAe,EAAY,EAAK,IAAqB,EAAG;EACxD,cAAc,EAAK,MAAqB,SAAS;CACrD;AACJ"}
1
+ {"version":3,"file":"fusion.js","names":["FUSION_KIND_DETECT_CLASSIFY","FUSION_KIND_DETECT_SEGMENT_CLASSIFY","METADATA_PREFIX","INPUT_IMAGE","INPUT_SOURCE","INPUT_SCALE","INPUT_PAD","OUTPUT_BOXES","OUTPUT_SCORES","OUTPUT_CLASSES","OUTPUT_NUM_DETECTIONS","OUTPUT_MASKS","OUTPUT_PROBS","KEY_KIND","KEY_SDK_VERSION","KEY_INPUT_SIZE","KEY_CROP_SIZE","KEY_CROP_SOURCE","KEY_MAX_DETECTIONS","KEY_CONF_THRESHOLD","KEY_IOU_THRESHOLD","KEY_APPLY_SOFTMAX","KEY_DETECTOR_NAMES","KEY_CLASSIFIER_NAMES","KEY_SEGMENTER_NAMES","KEY_MASK_THRESHOLD","KEY_MASK_APPLIED","DYNAMIC","decodeSize","raw","parts","width","height","decodeFloat","fallback","value","readFusionSpec","metadata","read","key","kind","inputSize","cropSize","rawMax","parsedMax","maxDetections","cropSource","parseNames"],"sources":["../../src/vision/fusion.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * The contract a fused pipeline carries inside its own `.onnx` file.\n *\n * A pipeline built by the Python SDK's `ort_vision_sdk.compose` is a single\n * graph that already contains the detector, the crop-and-resize bridge and the\n * classifier. Everything the runtime needs to drive it — the letterbox\n * resolution, the crop resolution, where the crops come from, how many\n * detections the graph emits, the class names of both stages — was decided at\n * fusion time and written into the model's metadata.\n *\n * This module reads it back. It is the browser half of a contract whose other\n * half lives in `ort_vision_sdk/fusion.py`: the same keys, the same encodings,\n * the same fallbacks. A pipeline fused once therefore runs identically in\n * Python and in a browser tab, off the same file.\n *\n * Building a pipeline stays a Python-side build step — there is no ONNX\n * protobuf writer here, and there is no reason for one: fusing is something you\n * do once next to your export pipeline, not in a page load.\n */\n\nimport { parseNames } from \"./core/metadata\";\n\n/**\n * Which tensor the bridge crops the detected boxes out of.\n *\n * - `\"detector_input\"`: the letterboxed tensor already fed to the detector.\n * The fused graph then has a **single** image input, but a small object is\n * cropped out of its downscaled copy.\n * - `\"original\"`: a second, full-resolution image input. The bridge undoes the\n * letterbox transform in-graph and crops at native resolution. Two tensors to\n * feed, still one session and one model load.\n */\nexport type CropSource = \"detector_input\" | \"original\";\n\n/** Value of the `ovs.kind` metadata key for a detector→classifier pipeline. */\nexport const FUSION_KIND_DETECT_CLASSIFY = \"detect_classify\";\n\n/**\n * Value of `ovs.kind` for a detector→segmenter→classifier pipeline.\n *\n * The segmenter runs inside each crop rather than over the whole frame: the\n * detector finds the boxes, the bridge cuts them out, and the segmenter turns\n * each crop into a foreground mask that gates the pixels the classifier sees.\n * Fusing one is a build step on the Python side; the browser only loads the\n * result.\n */\nexport const FUSION_KIND_DETECT_SEGMENT_CLASSIFY = \"detect_segment_classify\";\n\n/**\n * Namespace for every metadata key the fusion writes.\n *\n * Namespaced on purpose: the detector's own Ultralytics metadata (`names`,\n * `task`, `imgsz`) is carried over into the fused model, and an un-prefixed key\n * would either collide with it or be mistaken for it.\n */\nexport const METADATA_PREFIX = \"ovs.\";\n\n/** Name of the fused graph's letterboxed detector input, `[1, 3, H, W]` float32 in `[0, 1]`. */\nexport const INPUT_IMAGE = \"images\";\n\n/** Name of the full-resolution input. Present only when `cropSource === \"original\"`. */\nexport const INPUT_SOURCE = \"source_image\";\n\n/** Name of the `[1]` float32 letterbox scale factor. Only with `cropSource === \"original\"`. */\nexport const INPUT_SCALE = \"letterbox_scale\";\n\n/** Name of the `[2]` float32 `[padLeft, padTop]`. Only with `cropSource === \"original\"`. */\nexport const INPUT_PAD = \"letterbox_pad\";\n\n/**\n * Name of the `[K, 4]` float32 xyxy output, in **letterboxed** input pixels.\n *\n * A file fused by `ort-vision-sdk` 0.9.0 or later reports the box that was\n * actually classified: clamped to the image the crop came from, exactly as\n * RoiAlign received it. Older files report the raw box, so one that ran off the\n * frame draws a rectangle wider than the region the classifier saw.\n */\nexport const OUTPUT_BOXES = \"boxes\";\n\n/** Name of the `[K]` float32 detection-confidence output. */\nexport const OUTPUT_SCORES = \"scores\";\n\n/** Name of the `[K]` int64 detector-class output. */\nexport const OUTPUT_CLASSES = \"classes\";\n\n/** Name of the `[1]` int64 output holding how many of the `K` rows are real. */\nexport const OUTPUT_NUM_DETECTIONS = \"num_detections\";\n\n/** Name of the `[K, numClassifierClasses]` float32 classifier output, one row per box. */\n/**\n * Name of the `(K, 1, cropH, cropW)` float32 mask output. Only on a\n * `detect_segment_classify` pipeline.\n *\n * The mask lives in the **crop's** coordinate space, not the original image's,\n * because that is where the segmenter computed it. Values are 0 or 1 after\n * thresholding; padded rows are all-zero, like every other output.\n */\nexport const OUTPUT_MASKS = \"masks\";\n\nexport const OUTPUT_PROBS = \"probs\";\n\n/** Everything a fused pipeline declares about how it must be driven. */\nexport interface FusionSpec {\n /** Pipeline family — {@link FUSION_KIND_DETECT_CLASSIFY} or {@link FUSION_KIND_DETECT_SEGMENT_CLASSIFY}. */\n readonly kind: string;\n /** `[width, height]` the detector stage expects — the resolution to letterbox to. */\n readonly inputSize: readonly [number, number];\n /** `[width, height]` every crop is resampled to inside the graph. */\n readonly cropSize: readonly [number, number];\n /** Which tensor the crops are taken from. */\n readonly cropSource: CropSource;\n /**\n * Fixed number of rows `K` every output carries, surplus zero-padded and\n * counted by {@link OUTPUT_NUM_DETECTIONS}. `null` means the graph emits\n * exactly as many rows as survived NMS.\n */\n readonly maxDetections: number | null;\n /** Score threshold baked into the graph's NMS node. */\n readonly confThreshold: number;\n /** IoU threshold baked into the graph's NMS node. */\n readonly iouThreshold: number;\n /** Whether the classifier stage emits logits that still need a softmax. */\n readonly applySoftmax: boolean;\n /** Detector class names in class-id order, or `null` when the fusion recorded none. */\n readonly detectorNames: readonly string[] | null;\n /** Classifier class names in class-id order, or `null`. */\n readonly classifierNames: readonly string[] | null;\n /** Version of `ort-vision-sdk` that produced the file. */\n readonly sdkVersion: string;\n /** Whether driving this pipeline requires feeding the full-resolution input. */\n readonly needsSourceImage: boolean;\n /** Whether this pipeline emits a {@link OUTPUT_MASKS} tensor. */\n readonly hasMasks: boolean;\n /** Class id → name for the segmenter's channels, or `null`. */\n readonly segmenterNames: readonly string[] | null;\n /**\n * Probability above which a segmenter pixel counted as foreground.\n *\n * Baked into the graph at fusion time; reported so a caller can say what the\n * masks mean.\n */\n readonly maskThreshold: number;\n /** Whether the mask gated the crop before the classifier saw it. */\n readonly maskApplied: boolean;\n}\n\nconst KEY_KIND = \"kind\";\nconst KEY_SDK_VERSION = \"sdk_version\";\nconst KEY_INPUT_SIZE = \"input_size\";\nconst KEY_CROP_SIZE = \"crop_size\";\nconst KEY_CROP_SOURCE = \"crop_source\";\nconst KEY_MAX_DETECTIONS = \"max_detections\";\nconst KEY_CONF_THRESHOLD = \"conf_threshold\";\nconst KEY_IOU_THRESHOLD = \"iou_threshold\";\nconst KEY_APPLY_SOFTMAX = \"apply_softmax\";\nconst KEY_DETECTOR_NAMES = \"detector_names\";\nconst KEY_CLASSIFIER_NAMES = \"classifier_names\";\nconst KEY_SEGMENTER_NAMES = \"segmenter_names\";\nconst KEY_MASK_THRESHOLD = \"mask_threshold\";\nconst KEY_MASK_APPLIED = \"mask_applied\";\n\nconst DYNAMIC = \"dynamic\";\n\n/**\n * Decode a `\"640,640\"` pair.\n *\n * @param raw The encoded pair.\n * @returns `[width, height]`, or `null` when the value is missing or malformed.\n */\nfunction decodeSize(raw: string | undefined): readonly [number, number] | null {\n if (!raw) return null;\n const parts = raw.split(\",\");\n if (parts.length !== 2) return null;\n const width = Number(parts[0]);\n const height = Number(parts[1]);\n if (!Number.isInteger(width) || !Number.isInteger(height)) return null;\n if (width < 1 || height < 1) return null;\n return [width, height];\n}\n\n/**\n * Decode a float, falling back when the value is missing or malformed.\n *\n * @param raw The encoded value.\n * @param fallback Value to use when `raw` cannot be read.\n * @returns The parsed number, or `fallback`.\n */\nfunction decodeFloat(raw: string | undefined, fallback: number): number {\n if (!raw) return fallback;\n const value = Number(raw);\n return Number.isFinite(value) ? value : fallback;\n}\n\n/**\n * Read a pipeline spec out of a model's custom metadata.\n *\n * Individual malformed entries fall back to the value a fusion would have used\n * by default — a single bad float is not a reason to reject an otherwise\n * loadable pipeline. A malformed resolution is fatal, because there is no safe\n * default for one.\n *\n * @param metadata A model's custom metadata map, as read by\n * {@link readModelMetadata}.\n * @returns The decoded spec, or `null` when the model is not a fused pipeline —\n * it carries no `ovs.kind` entry, or one naming a pipeline kind this version\n * does not know how to drive.\n */\nexport function readFusionSpec(\n metadata: Readonly<Record<string, string>> | undefined,\n): FusionSpec | null {\n if (!metadata) return null;\n\n const read: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n if (key.startsWith(METADATA_PREFIX)) read[key.slice(METADATA_PREFIX.length)] = value;\n }\n const kind = read[KEY_KIND];\n if (kind !== FUSION_KIND_DETECT_CLASSIFY && kind !== FUSION_KIND_DETECT_SEGMENT_CLASSIFY) {\n return null;\n }\n\n const inputSize = decodeSize(read[KEY_INPUT_SIZE]);\n const cropSize = decodeSize(read[KEY_CROP_SIZE]);\n if (inputSize === null || cropSize === null) return null;\n\n const rawMax = read[KEY_MAX_DETECTIONS] ?? DYNAMIC;\n const parsedMax = Number(rawMax);\n const maxDetections =\n rawMax === DYNAMIC || !Number.isInteger(parsedMax) || parsedMax < 1 ? null : parsedMax;\n\n const cropSource: CropSource =\n read[KEY_CROP_SOURCE] === \"original\" ? \"original\" : \"detector_input\";\n\n return {\n kind,\n inputSize,\n cropSize,\n cropSource,\n maxDetections,\n confThreshold: decodeFloat(read[KEY_CONF_THRESHOLD], 0.25),\n iouThreshold: decodeFloat(read[KEY_IOU_THRESHOLD], 0.45),\n applySoftmax: (read[KEY_APPLY_SOFTMAX] ?? \"1\") !== \"0\",\n detectorNames: parseNames(read[KEY_DETECTOR_NAMES]),\n classifierNames: parseNames(read[KEY_CLASSIFIER_NAMES]),\n sdkVersion: read[KEY_SDK_VERSION] ?? \"\",\n needsSourceImage: cropSource === \"original\",\n hasMasks: kind === FUSION_KIND_DETECT_SEGMENT_CLASSIFY,\n segmenterNames: parseNames(read[KEY_SEGMENTER_NAMES]),\n maskThreshold: decodeFloat(read[KEY_MASK_THRESHOLD], 0.5),\n maskApplied: (read[KEY_MASK_APPLIED] ?? \"1\") !== \"0\",\n };\n}\n"],"mappings":";;AAoCA,IAAaA,IAA8B,mBAW9BC,IAAsC,2BAStCC,IAAkB,QAGlBC,IAAc,UAGdC,IAAe,gBAGfC,IAAc,mBAGdC,IAAY,iBAUZC,IAAe,SAGfC,IAAgB,UAGhBC,IAAiB,WAGjBC,IAAwB,kBAWxBC,IAAe,SAEfC,IAAe,SA+CtBC,IAAW,QACXC,IAAkB,eAClBC,IAAiB,cACjBC,IAAgB,aAChBC,IAAkB,eAClBC,IAAqB,kBACrBC,IAAqB,kBACrBC,IAAoB,iBACpBC,IAAoB,iBACpBC,IAAqB,kBACrBC,IAAuB,oBACvBC,IAAsB,mBACtBC,IAAqB,kBACrBC,IAAmB,gBAEnBC,IAAU;AAQhB,SAASC,EAAW,GAA2D;CAC3E,IAAI,CAACC,GAAK,OAAO;CACjB,IAAMC,IAAQD,EAAI,MAAM,GAAG;CAC3B,IAAIC,EAAM,WAAW,GAAG,OAAO;CAC/B,IAAMC,IAAQ,OAAOD,EAAM,EAAE,GACvBE,IAAS,OAAOF,EAAM,EAAE;CAG9B,OAFI,CAAC,OAAO,UAAUC,CAAK,KAAK,CAAC,OAAO,UAAUC,CAAM,KACpDD,IAAQ,KAAKC,IAAS,IAAU,OAC7B,CAACD,GAAOC,CAAM;AACzB;AASA,SAASC,EAAY,GAAyB,GAA0B;CACpE,IAAI,CAACJ,GAAK,OAAOK;CACjB,IAAMC,IAAQ,OAAON,CAAG;CACxB,OAAO,OAAO,SAASM,CAAK,IAAIA,IAAQD;AAC5C;AAgBA,SAAgBE,EACZ,GACiB;CACjB,IAAI,CAACC,GAAU,OAAO;CAEtB,IAAMC,IAA+B,CAAC;CACtC,KAAK,IAAM,CAACC,GAAKJ,MAAU,OAAO,QAAQE,CAAQ,GAC9C,AAAIE,EAAI,WAAA,MAA0B,MAAG,EAAKA,EAAI,MAAM,CAAsB,KAAKJ;CAEnF,IAAMK,IAAOF,EAAKzB;CAClB,IAAI2B,MAAA,qBAAwCA,MAAA,2BACxC,OAAO;CAGX,IAAMC,IAAYb,EAAWU,EAAKvB,EAAe,GAC3C2B,IAAWd,EAAWU,EAAKtB,EAAc;CAC/C,IAAIyB,MAAc,QAAQC,MAAa,MAAM,OAAO;CAEpD,IAAMC,IAASL,EAAKpB,MAAuBS,GACrCiB,IAAY,OAAOD,CAAM,GACzBE,IACFF,MAAWhB,KAAW,CAAC,OAAO,UAAUiB,CAAS,KAAKA,IAAY,IAAI,OAAOA,GAE3EE,IACFR,EAAKrB,OAAqB,aAAa,aAAa;CAExD,OAAO;EACH;EACA;EACA;EACA;EACA;EACA,eAAegB,EAAYK,EAAKnB,IAAqB,GAAI;EACzD,cAAcc,EAAYK,EAAKlB,IAAoB,GAAI;EACvD,eAAekB,EAAKjB,MAAsB,SAAS;EACnD,eAAe0B,EAAWT,EAAKhB,EAAmB;EAClD,iBAAiByB,EAAWT,EAAKf,EAAqB;EACtD,YAAYe,EAAKxB,MAAoB;EACrC,kBAAkBgC,MAAe;EACjC,UAAUN,MAASvC;EACnB,gBAAgB8C,EAAWT,EAAKd,EAAoB;EACpD,eAAeS,EAAYK,EAAKb,IAAqB,EAAG;EACxD,cAAca,EAAKZ,MAAqB,SAAS;CACrD;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../src/vision/index.ts"],"sourcesContent":["/**\n * `tempest-react-sdk/vision` — browser computer-vision inference with ONNX\n * Runtime Web (classification, detection, segmentation).\n *\n * Vendored from `@mauriciobenjamin700/ort-vision-sdk-web@0.12.0` (MIT, same\n * author) so it ships inside this SDK without an extra package install.\n * `onnxruntime-web` stays an optional peer dependency — install it (and ship\n * the matching `.wasm` files) only when you use this subpath.\n *\n * Do not hand-edit — regenerate with `npm run vendor:vision`.\n */\n\nexport {\n BoundingBox,\n Mask,\n RGBImage,\n type ClassProbability,\n type ClassificationResult,\n type DetectionResult,\n type SegmentationResult,\n} from \"./types\";\n\nexport {\n Boxes,\n ClassificationResults,\n DetectClassifyResults,\n DetectionResults,\n Masks,\n Probs,\n SegmentationResults,\n} from \"./results\";\n\nexport {\n COCO_CLASSES,\n type LabelSpec,\n type ResolveLabelsOptions,\n defaultLabels,\n resolveLabels,\n} from \"./labels\";\n\nexport {\n FusionError,\n ImageLoadError,\n InferenceError,\n LabelMapError,\n ModelLoadError,\n NoDetectionsError,\n OrtVisionError,\n ProviderNotAvailableError,\n} from \"./core/exceptions\";\n\nexport {\n DEFAULT_MODEL_CACHE,\n GRAPH_OPTIMIZATION_KEY,\n type ModelSource,\n type OrtSessionOptions,\n OrtSession,\n QUANTIZATION_KEY,\n} from \"./core/session\";\nexport {\n type DeclaredDim,\n type DeclaredShape,\n type ResolveInputSizeOptions,\n classificationNumClasses,\n declaredShapesFrom,\n detectionNumClasses,\n resolveInputSize,\n spatialInputSize,\n} from \"./core/graph\";\nexport {\n DEFAULT_TENSOR_TYPE,\n type Float16ArrayLike,\n asFloat32Array,\n hasFloat16Array,\n tensorTypeFor,\n} from \"./core/dtypes\";\nexport { modelNames, parseNames, readModelInputTypes, readModelMetadata } from \"./core/metadata\";\nexport {\n DEFAULT_PROVIDERS,\n type ProviderSpec,\n detectProviders,\n resolveProviders,\n} from \"./core/providers\";\nexport { type Speed, SpeedTimer } from \"./core/timing\";\nexport {\n CUSTOM_NORMALIZATION,\n IDENTITY_MEAN,\n IDENTITY_STD,\n IMAGENET_MEAN,\n IMAGENET_STD,\n type Normalization,\n type ResolvedNormalization,\n isUltralyticsClassifier,\n resolveNormalization,\n} from \"./normalization\";\n\nexport { type ImageInput, loadImage } from \"./io/image\";\n\nexport {\n FUSION_KIND_DETECT_CLASSIFY,\n FUSION_KIND_DETECT_SEGMENT_CLASSIFY,\n INPUT_IMAGE,\n INPUT_PAD,\n INPUT_SCALE,\n INPUT_SOURCE,\n METADATA_PREFIX,\n OUTPUT_BOXES,\n OUTPUT_CLASSES,\n OUTPUT_MASKS,\n OUTPUT_NUM_DETECTIONS,\n OUTPUT_PROBS,\n OUTPUT_SCORES,\n type CropSource,\n type FusionSpec,\n readFusionSpec,\n} from \"./fusion\";\n\nexport {\n type LetterboxResult,\n fromCv2,\n letterbox,\n normalize,\n resize,\n toCHW,\n toCv2,\n toFloat32,\n toFloat32Tensor,\n toTensor,\n} from \"./preprocess/image\";\n\nexport {\n type FusedLetterboxResult,\n type FusedResizeResult,\n LetterboxPipeline,\n ResizePipeline,\n letterboxToTensorData,\n resizeToTensorData,\n writePlanarFloat32,\n zeroTensorData,\n} from \"./preprocess/pipeline\";\n\nexport { type TopKResult, softmax, topK } from \"./postprocess/classification\";\n\nexport {\n type DecodeYoloAnchorsOptions,\n type DecodeYoloOptions,\n type DecodedAnchors,\n type DecodedDetection,\n batchedNms,\n decodeYolo,\n decodeYoloAnchors,\n nms,\n} from \"./postprocess/detection\";\n\nexport {\n type DecodeYoloSegOptions,\n type DecodedSegmentation,\n decodeYoloSeg,\n} from \"./postprocess/segmentation\";\n\nexport { VisionTask, requireDetections } from \"./tasks/base\";\nexport {\n type ClassifierOptions,\n type ClassifierPredictOptions,\n Classifier,\n} from \"./tasks/classifier\";\nexport {\n type DetectClassifyOptions,\n type DetectClassifyPredictOptions,\n DetectClassify,\n} from \"./tasks/detectClassify\";\nexport {\n type DetectorHead,\n type DetectorOptions,\n type DetectorPredictOptions,\n Detector,\n} from \"./tasks/detector\";\nexport {\n type SegmenterHead,\n type SegmenterOptions,\n type SegmenterPredictOptions,\n Segmenter,\n} from \"./tasks/segmenter\";\n\nexport const VERSION: string = \"0.12.0\";\n"],"mappings":"0wBAwLA,IAAa,EAAkB"}
1
+ {"version":3,"file":"index.cjs","names":["require_exceptions","require_types","require_timing","require_results","require_labels","require_dtypes","require_graph","require_metadata","require_providers","require_session","require_normalization","require_image","require_fusion","require_image$1","require_pipeline","require_classification","require_detection","require_segmentation","require_base","require_classifier","require_detectClassify","require_detector","require_segmenter","VERSION"],"sources":["../../src/vision/index.ts"],"sourcesContent":["/**\n * `tempest-react-sdk/vision` — browser computer-vision inference with ONNX\n * Runtime Web (classification, detection, segmentation).\n *\n * Vendored from `@mauriciobenjamin700/ort-vision-sdk-web@0.12.0` (MIT, same\n * author) so it ships inside this SDK without an extra package install.\n * `onnxruntime-web` stays an optional peer dependency — install it (and ship\n * the matching `.wasm` files) only when you use this subpath.\n *\n * Do not hand-edit — regenerate with `npm run vendor:vision`.\n */\n\nexport {\n BoundingBox,\n Mask,\n RGBImage,\n type ClassProbability,\n type ClassificationResult,\n type DetectionResult,\n type SegmentationResult,\n} from \"./types\";\n\nexport {\n Boxes,\n ClassificationResults,\n DetectClassifyResults,\n DetectionResults,\n Masks,\n Probs,\n SegmentationResults,\n} from \"./results\";\n\nexport {\n COCO_CLASSES,\n type LabelSpec,\n type ResolveLabelsOptions,\n defaultLabels,\n resolveLabels,\n} from \"./labels\";\n\nexport {\n FusionError,\n ImageLoadError,\n InferenceError,\n LabelMapError,\n ModelLoadError,\n NoDetectionsError,\n OrtVisionError,\n ProviderNotAvailableError,\n} from \"./core/exceptions\";\n\nexport {\n DEFAULT_MODEL_CACHE,\n GRAPH_OPTIMIZATION_KEY,\n type ModelSource,\n type OrtSessionOptions,\n OrtSession,\n QUANTIZATION_KEY,\n} from \"./core/session\";\nexport {\n type DeclaredDim,\n type DeclaredShape,\n type ResolveInputSizeOptions,\n classificationNumClasses,\n declaredShapesFrom,\n detectionNumClasses,\n resolveInputSize,\n spatialInputSize,\n} from \"./core/graph\";\nexport {\n DEFAULT_TENSOR_TYPE,\n type Float16ArrayLike,\n asFloat32Array,\n hasFloat16Array,\n tensorTypeFor,\n} from \"./core/dtypes\";\nexport { modelNames, parseNames, readModelInputTypes, readModelMetadata } from \"./core/metadata\";\nexport {\n DEFAULT_PROVIDERS,\n type ProviderSpec,\n detectProviders,\n resolveProviders,\n} from \"./core/providers\";\nexport { type Speed, SpeedTimer } from \"./core/timing\";\nexport {\n CUSTOM_NORMALIZATION,\n IDENTITY_MEAN,\n IDENTITY_STD,\n IMAGENET_MEAN,\n IMAGENET_STD,\n type Normalization,\n type ResolvedNormalization,\n isUltralyticsClassifier,\n resolveNormalization,\n} from \"./normalization\";\n\nexport { type ImageInput, loadImage } from \"./io/image\";\n\nexport {\n FUSION_KIND_DETECT_CLASSIFY,\n FUSION_KIND_DETECT_SEGMENT_CLASSIFY,\n INPUT_IMAGE,\n INPUT_PAD,\n INPUT_SCALE,\n INPUT_SOURCE,\n METADATA_PREFIX,\n OUTPUT_BOXES,\n OUTPUT_CLASSES,\n OUTPUT_MASKS,\n OUTPUT_NUM_DETECTIONS,\n OUTPUT_PROBS,\n OUTPUT_SCORES,\n type CropSource,\n type FusionSpec,\n readFusionSpec,\n} from \"./fusion\";\n\nexport {\n type LetterboxResult,\n fromCv2,\n letterbox,\n normalize,\n resize,\n toCHW,\n toCv2,\n toFloat32,\n toFloat32Tensor,\n toTensor,\n} from \"./preprocess/image\";\n\nexport {\n type FusedLetterboxResult,\n type FusedResizeResult,\n LetterboxPipeline,\n ResizePipeline,\n letterboxToTensorData,\n resizeToTensorData,\n writePlanarFloat32,\n zeroTensorData,\n} from \"./preprocess/pipeline\";\n\nexport { type TopKResult, softmax, topK } from \"./postprocess/classification\";\n\nexport {\n type DecodeYoloAnchorsOptions,\n type DecodeYoloOptions,\n type DecodedAnchors,\n type DecodedDetection,\n batchedNms,\n decodeYolo,\n decodeYoloAnchors,\n nms,\n} from \"./postprocess/detection\";\n\nexport {\n type DecodeYoloSegOptions,\n type DecodedSegmentation,\n decodeYoloSeg,\n} from \"./postprocess/segmentation\";\n\nexport { VisionTask, requireDetections } from \"./tasks/base\";\nexport {\n type ClassifierOptions,\n type ClassifierPredictOptions,\n Classifier,\n} from \"./tasks/classifier\";\nexport {\n type DetectClassifyOptions,\n type DetectClassifyPredictOptions,\n DetectClassify,\n} from \"./tasks/detectClassify\";\nexport {\n type DetectorHead,\n type DetectorOptions,\n type DetectorPredictOptions,\n Detector,\n} from \"./tasks/detector\";\nexport {\n type SegmenterHead,\n type SegmenterOptions,\n type SegmenterPredictOptions,\n Segmenter,\n} from \"./tasks/segmenter\";\n\nexport const VERSION: string = \"0.12.0\";\n"],"mappings":"A,0wBAwLA,IAAauB,EAAkB,S"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/vision/index.ts"],"sourcesContent":["/**\n * `tempest-react-sdk/vision` — browser computer-vision inference with ONNX\n * Runtime Web (classification, detection, segmentation).\n *\n * Vendored from `@mauriciobenjamin700/ort-vision-sdk-web@0.12.0` (MIT, same\n * author) so it ships inside this SDK without an extra package install.\n * `onnxruntime-web` stays an optional peer dependency — install it (and ship\n * the matching `.wasm` files) only when you use this subpath.\n *\n * Do not hand-edit — regenerate with `npm run vendor:vision`.\n */\n\nexport {\n BoundingBox,\n Mask,\n RGBImage,\n type ClassProbability,\n type ClassificationResult,\n type DetectionResult,\n type SegmentationResult,\n} from \"./types\";\n\nexport {\n Boxes,\n ClassificationResults,\n DetectClassifyResults,\n DetectionResults,\n Masks,\n Probs,\n SegmentationResults,\n} from \"./results\";\n\nexport {\n COCO_CLASSES,\n type LabelSpec,\n type ResolveLabelsOptions,\n defaultLabels,\n resolveLabels,\n} from \"./labels\";\n\nexport {\n FusionError,\n ImageLoadError,\n InferenceError,\n LabelMapError,\n ModelLoadError,\n NoDetectionsError,\n OrtVisionError,\n ProviderNotAvailableError,\n} from \"./core/exceptions\";\n\nexport {\n DEFAULT_MODEL_CACHE,\n GRAPH_OPTIMIZATION_KEY,\n type ModelSource,\n type OrtSessionOptions,\n OrtSession,\n QUANTIZATION_KEY,\n} from \"./core/session\";\nexport {\n type DeclaredDim,\n type DeclaredShape,\n type ResolveInputSizeOptions,\n classificationNumClasses,\n declaredShapesFrom,\n detectionNumClasses,\n resolveInputSize,\n spatialInputSize,\n} from \"./core/graph\";\nexport {\n DEFAULT_TENSOR_TYPE,\n type Float16ArrayLike,\n asFloat32Array,\n hasFloat16Array,\n tensorTypeFor,\n} from \"./core/dtypes\";\nexport { modelNames, parseNames, readModelInputTypes, readModelMetadata } from \"./core/metadata\";\nexport {\n DEFAULT_PROVIDERS,\n type ProviderSpec,\n detectProviders,\n resolveProviders,\n} from \"./core/providers\";\nexport { type Speed, SpeedTimer } from \"./core/timing\";\nexport {\n CUSTOM_NORMALIZATION,\n IDENTITY_MEAN,\n IDENTITY_STD,\n IMAGENET_MEAN,\n IMAGENET_STD,\n type Normalization,\n type ResolvedNormalization,\n isUltralyticsClassifier,\n resolveNormalization,\n} from \"./normalization\";\n\nexport { type ImageInput, loadImage } from \"./io/image\";\n\nexport {\n FUSION_KIND_DETECT_CLASSIFY,\n FUSION_KIND_DETECT_SEGMENT_CLASSIFY,\n INPUT_IMAGE,\n INPUT_PAD,\n INPUT_SCALE,\n INPUT_SOURCE,\n METADATA_PREFIX,\n OUTPUT_BOXES,\n OUTPUT_CLASSES,\n OUTPUT_MASKS,\n OUTPUT_NUM_DETECTIONS,\n OUTPUT_PROBS,\n OUTPUT_SCORES,\n type CropSource,\n type FusionSpec,\n readFusionSpec,\n} from \"./fusion\";\n\nexport {\n type LetterboxResult,\n fromCv2,\n letterbox,\n normalize,\n resize,\n toCHW,\n toCv2,\n toFloat32,\n toFloat32Tensor,\n toTensor,\n} from \"./preprocess/image\";\n\nexport {\n type FusedLetterboxResult,\n type FusedResizeResult,\n LetterboxPipeline,\n ResizePipeline,\n letterboxToTensorData,\n resizeToTensorData,\n writePlanarFloat32,\n zeroTensorData,\n} from \"./preprocess/pipeline\";\n\nexport { type TopKResult, softmax, topK } from \"./postprocess/classification\";\n\nexport {\n type DecodeYoloAnchorsOptions,\n type DecodeYoloOptions,\n type DecodedAnchors,\n type DecodedDetection,\n batchedNms,\n decodeYolo,\n decodeYoloAnchors,\n nms,\n} from \"./postprocess/detection\";\n\nexport {\n type DecodeYoloSegOptions,\n type DecodedSegmentation,\n decodeYoloSeg,\n} from \"./postprocess/segmentation\";\n\nexport { VisionTask, requireDetections } from \"./tasks/base\";\nexport {\n type ClassifierOptions,\n type ClassifierPredictOptions,\n Classifier,\n} from \"./tasks/classifier\";\nexport {\n type DetectClassifyOptions,\n type DetectClassifyPredictOptions,\n DetectClassify,\n} from \"./tasks/detectClassify\";\nexport {\n type DetectorHead,\n type DetectorOptions,\n type DetectorPredictOptions,\n Detector,\n} from \"./tasks/detector\";\nexport {\n type SegmenterHead,\n type SegmenterOptions,\n type SegmenterPredictOptions,\n Segmenter,\n} from \"./tasks/segmenter\";\n\nexport const VERSION: string = \"0.12.0\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwLA,IAAa,KAAkB"}
1
+ {"version":3,"file":"index.js","names":["VERSION","BoundingBox","Boxes","COCO_CLASSES","CUSTOM_NORMALIZATION","ClassificationResults","Classifier","DEFAULT_MODEL_CACHE","DEFAULT_PROVIDERS","DEFAULT_TENSOR_TYPE","DetectClassify","DetectClassifyResults","DetectionResults","Detector","FUSION_KIND_DETECT_CLASSIFY","FUSION_KIND_DETECT_SEGMENT_CLASSIFY","FusionError","GRAPH_OPTIMIZATION_KEY","IDENTITY_MEAN","IDENTITY_STD","IMAGENET_MEAN","IMAGENET_STD","INPUT_IMAGE","INPUT_PAD","INPUT_SCALE","INPUT_SOURCE","ImageLoadError","InferenceError","LabelMapError","LetterboxPipeline","METADATA_PREFIX","Mask","Masks","ModelLoadError","NoDetectionsError","OUTPUT_BOXES","OUTPUT_CLASSES","OUTPUT_MASKS","OUTPUT_NUM_DETECTIONS","OUTPUT_PROBS","OUTPUT_SCORES","OrtSession","OrtVisionError","Probs","ProviderNotAvailableError","QUANTIZATION_KEY","RGBImage","ResizePipeline","SegmentationResults","Segmenter","SpeedTimer","VisionTask","asFloat32Array","batchedNms","classificationNumClasses","declaredShapesFrom","decodeYolo","decodeYoloAnchors","decodeYoloSeg","defaultLabels","detectProviders","detectionNumClasses","fromCv2","hasFloat16Array","isUltralyticsClassifier","letterbox","letterboxToTensorData","loadImage","modelNames","nms","normalize","parseNames","readFusionSpec","readModelInputTypes","readModelMetadata","requireDetections","resize","resizeToTensorData","resolveInputSize","resolveLabels","resolveNormalization","resolveProviders","softmax","spatialInputSize","tensorTypeFor","toCHW","toCv2","toFloat32","toFloat32Tensor","toTensor","topK","writePlanarFloat32","zeroTensorData"],"sources":["../../src/vision/index.ts"],"sourcesContent":["/**\n * `tempest-react-sdk/vision` — browser computer-vision inference with ONNX\n * Runtime Web (classification, detection, segmentation).\n *\n * Vendored from `@mauriciobenjamin700/ort-vision-sdk-web@0.12.0` (MIT, same\n * author) so it ships inside this SDK without an extra package install.\n * `onnxruntime-web` stays an optional peer dependency — install it (and ship\n * the matching `.wasm` files) only when you use this subpath.\n *\n * Do not hand-edit — regenerate with `npm run vendor:vision`.\n */\n\nexport {\n BoundingBox,\n Mask,\n RGBImage,\n type ClassProbability,\n type ClassificationResult,\n type DetectionResult,\n type SegmentationResult,\n} from \"./types\";\n\nexport {\n Boxes,\n ClassificationResults,\n DetectClassifyResults,\n DetectionResults,\n Masks,\n Probs,\n SegmentationResults,\n} from \"./results\";\n\nexport {\n COCO_CLASSES,\n type LabelSpec,\n type ResolveLabelsOptions,\n defaultLabels,\n resolveLabels,\n} from \"./labels\";\n\nexport {\n FusionError,\n ImageLoadError,\n InferenceError,\n LabelMapError,\n ModelLoadError,\n NoDetectionsError,\n OrtVisionError,\n ProviderNotAvailableError,\n} from \"./core/exceptions\";\n\nexport {\n DEFAULT_MODEL_CACHE,\n GRAPH_OPTIMIZATION_KEY,\n type ModelSource,\n type OrtSessionOptions,\n OrtSession,\n QUANTIZATION_KEY,\n} from \"./core/session\";\nexport {\n type DeclaredDim,\n type DeclaredShape,\n type ResolveInputSizeOptions,\n classificationNumClasses,\n declaredShapesFrom,\n detectionNumClasses,\n resolveInputSize,\n spatialInputSize,\n} from \"./core/graph\";\nexport {\n DEFAULT_TENSOR_TYPE,\n type Float16ArrayLike,\n asFloat32Array,\n hasFloat16Array,\n tensorTypeFor,\n} from \"./core/dtypes\";\nexport { modelNames, parseNames, readModelInputTypes, readModelMetadata } from \"./core/metadata\";\nexport {\n DEFAULT_PROVIDERS,\n type ProviderSpec,\n detectProviders,\n resolveProviders,\n} from \"./core/providers\";\nexport { type Speed, SpeedTimer } from \"./core/timing\";\nexport {\n CUSTOM_NORMALIZATION,\n IDENTITY_MEAN,\n IDENTITY_STD,\n IMAGENET_MEAN,\n IMAGENET_STD,\n type Normalization,\n type ResolvedNormalization,\n isUltralyticsClassifier,\n resolveNormalization,\n} from \"./normalization\";\n\nexport { type ImageInput, loadImage } from \"./io/image\";\n\nexport {\n FUSION_KIND_DETECT_CLASSIFY,\n FUSION_KIND_DETECT_SEGMENT_CLASSIFY,\n INPUT_IMAGE,\n INPUT_PAD,\n INPUT_SCALE,\n INPUT_SOURCE,\n METADATA_PREFIX,\n OUTPUT_BOXES,\n OUTPUT_CLASSES,\n OUTPUT_MASKS,\n OUTPUT_NUM_DETECTIONS,\n OUTPUT_PROBS,\n OUTPUT_SCORES,\n type CropSource,\n type FusionSpec,\n readFusionSpec,\n} from \"./fusion\";\n\nexport {\n type LetterboxResult,\n fromCv2,\n letterbox,\n normalize,\n resize,\n toCHW,\n toCv2,\n toFloat32,\n toFloat32Tensor,\n toTensor,\n} from \"./preprocess/image\";\n\nexport {\n type FusedLetterboxResult,\n type FusedResizeResult,\n LetterboxPipeline,\n ResizePipeline,\n letterboxToTensorData,\n resizeToTensorData,\n writePlanarFloat32,\n zeroTensorData,\n} from \"./preprocess/pipeline\";\n\nexport { type TopKResult, softmax, topK } from \"./postprocess/classification\";\n\nexport {\n type DecodeYoloAnchorsOptions,\n type DecodeYoloOptions,\n type DecodedAnchors,\n type DecodedDetection,\n batchedNms,\n decodeYolo,\n decodeYoloAnchors,\n nms,\n} from \"./postprocess/detection\";\n\nexport {\n type DecodeYoloSegOptions,\n type DecodedSegmentation,\n decodeYoloSeg,\n} from \"./postprocess/segmentation\";\n\nexport { VisionTask, requireDetections } from \"./tasks/base\";\nexport {\n type ClassifierOptions,\n type ClassifierPredictOptions,\n Classifier,\n} from \"./tasks/classifier\";\nexport {\n type DetectClassifyOptions,\n type DetectClassifyPredictOptions,\n DetectClassify,\n} from \"./tasks/detectClassify\";\nexport {\n type DetectorHead,\n type DetectorOptions,\n type DetectorPredictOptions,\n Detector,\n} from \"./tasks/detector\";\nexport {\n type SegmenterHead,\n type SegmenterOptions,\n type SegmenterPredictOptions,\n Segmenter,\n} from \"./tasks/segmenter\";\n\nexport const VERSION: string = \"0.12.0\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwLA,IAAaA,KAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"image.cjs","names":[],"sources":["../../../src/vision/io/image.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Image loading utilities — convert any supported source into the canonical\n * {@link RGBImage} format.\n *\n * Browser-only: uses `fetch`, `createImageBitmap`, and a Canvas 2D context to\n * decode arbitrary inputs into a tightly-packed `Uint8Array` of HWC RGB pixels.\n */\n\nimport { createCanvas, get2DContext, imageDataToRGBChecked } from \"../core/canvas\";\nimport { ImageLoadError } from \"../core/exceptions\";\nimport { RGBImage } from \"../types\";\n\n/** Anything {@link loadImage} accepts as an image input. */\nexport type ImageInput =\n | string\n | Blob\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement\n | OffscreenCanvas\n | ImageBitmap\n | VideoFrame\n | ImageData\n | RGBImage;\n\n/**\n * A decoded input, plus what the tasks can reuse from decoding it.\n *\n * Internal to the SDK: the tasks need more than {@link loadImage} returns, and\n * the extra fields are about avoiding work, not about the image itself.\n */\nexport interface LoadedImage {\n /** The input as the canonical HWC RGB image. */\n readonly image: RGBImage;\n /**\n * A full-resolution canvas holding exactly {@link image}'s pixels, or `null`.\n *\n * Decoding any drawable already paints it onto a canvas to read it back.\n * Handing that canvas to a preprocessing pipeline lets it `drawImage` the\n * frame straight into the model input, instead of rebuilding RGBA from\n * {@link image} and `putImageData`-ing it onto a canvas of its own — two\n * full-resolution passes and an allocation the size of the frame. Only set\n * when every pixel was opaque: a translucent pixel composites differently\n * from the RGB that dropping its alpha kept.\n */\n readonly canvas: CanvasImageSource | null;\n /**\n * Whether {@link image}'s buffer was allocated here rather than passed in.\n *\n * An `RGBImage` the caller handed over is theirs, and a video loop may well\n * refill the same buffer every frame. Anything derived from it lazily would\n * then read a later frame, so lazy crops are only taken on owned buffers.\n */\n readonly owned: boolean;\n}\n\n/**\n * Load an image from any supported source into a HWC uint8 RGB array.\n *\n * A video element must have its current frame available (`readyState >= 2`);\n * the frame showing at the time of the call is the one decoded. A `VideoFrame`\n * is read but not closed — it belongs to the caller.\n *\n * @throws {@link ImageLoadError} if the source cannot be decoded or has an unsupported shape.\n */\nexport async function loadImage(source: ImageInput): Promise<RGBImage> {\n return (await loadImageSource(source)).image;\n}\n\n/**\n * Decode an input like {@link loadImage}, keeping what preprocessing can reuse.\n *\n * @param source Any {@link ImageInput}.\n * @returns The image, the canvas it was painted on (when reusable), and\n * whether the SDK owns the pixel buffer.\n * @throws {@link ImageLoadError} if the source cannot be decoded.\n */\nexport async function loadImageSource(source: ImageInput): Promise<LoadedImage> {\n if (source instanceof RGBImage) {\n return { image: source, canvas: null, owned: false };\n }\n\n if (typeof ImageData !== \"undefined\" && source instanceof ImageData) {\n return { image: imageDataToRGBChecked(source).image, canvas: null, owned: true };\n }\n\n if (typeof source === \"string\") {\n return loadFromUrl(source);\n }\n\n if (typeof Blob !== \"undefined\" && source instanceof Blob) {\n return loadFromBlob(source);\n }\n\n if (typeof HTMLImageElement !== \"undefined\" && source instanceof HTMLImageElement) {\n await waitForImageElement(source);\n return drawableToRGB(source, source.naturalWidth, source.naturalHeight);\n }\n\n if (typeof HTMLVideoElement !== \"undefined\" && source instanceof HTMLVideoElement) {\n if (source.readyState < 2) {\n throw new ImageLoadError(\n \"HTMLVideoElement has no current frame yet (readyState < HAVE_CURRENT_DATA). \" +\n \"Wait for its 'loadeddata' event before predicting on it.\",\n );\n }\n return drawableToRGB(source, source.videoWidth, source.videoHeight, isLiveStream(source));\n }\n\n if (typeof HTMLCanvasElement !== \"undefined\" && source instanceof HTMLCanvasElement) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof OffscreenCanvas !== \"undefined\" && source instanceof OffscreenCanvas) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof ImageBitmap !== \"undefined\" && source instanceof ImageBitmap) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof VideoFrame !== \"undefined\" && source instanceof VideoFrame) {\n return drawableToRGB(\n source,\n source.displayWidth,\n source.displayHeight,\n source.format !== null && OPAQUE_FRAME_FORMATS.has(source.format),\n );\n }\n\n throw new ImageLoadError(\n `Unsupported image source type: ${Object.prototype.toString.call(source)}`,\n );\n}\n\nasync function loadFromUrl(url: string): Promise<LoadedImage> {\n let response: Response;\n try {\n response = await fetch(url);\n } catch (err) {\n throw new ImageLoadError(`Failed to fetch image from ${url}: ${(err as Error).message}`, {\n cause: err,\n });\n }\n if (!response.ok) {\n throw new ImageLoadError(\n `Failed to fetch image from ${url}: HTTP ${response.status} ${response.statusText}`,\n );\n }\n const blob = await response.blob();\n return loadFromBlob(blob);\n}\n\nasync function loadFromBlob(blob: Blob): Promise<LoadedImage> {\n let bitmap: ImageBitmap;\n try {\n bitmap = await createImageBitmap(blob);\n } catch (err) {\n throw new ImageLoadError(`Failed to decode image blob: ${(err as Error).message}`, {\n cause: err,\n });\n }\n try {\n return drawableToRGB(bitmap, bitmap.width, bitmap.height, blob.type === \"image/jpeg\");\n } finally {\n bitmap.close();\n }\n}\n\nfunction waitForImageElement(img: HTMLImageElement): Promise<void> {\n if (img.complete && img.naturalWidth > 0) {\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n const onLoad = (): void => {\n cleanup();\n resolve();\n };\n const onError = (): void => {\n cleanup();\n reject(new ImageLoadError(\"Failed to load HTMLImageElement (load event errored)\"));\n };\n const cleanup = (): void => {\n img.removeEventListener(\"load\", onLoad);\n img.removeEventListener(\"error\", onError);\n };\n img.addEventListener(\"load\", onLoad, { once: true });\n img.addEventListener(\"error\", onError, { once: true });\n });\n}\n\n/**\n * `VideoFrame` pixel formats that carry no alpha channel.\n *\n * The `A`-suffixed planar formats and `RGBA`/`BGRA` do; a frame in one of\n * these never has a translucent pixel.\n */\nconst OPAQUE_FRAME_FORMATS: ReadonlySet<string> = new Set([\n \"I420\",\n \"I422\",\n \"I444\",\n \"NV12\",\n \"RGBX\",\n \"BGRX\",\n]);\n\n/**\n * Whether a video element is playing a live capture (camera, screen).\n *\n * `MediaStream` video tracks carry no alpha, so every frame is opaque. A video\n * playing a file may not be — VP9 with alpha exists — so it gets no such\n * promise.\n *\n * @param video The element.\n */\nfunction isLiveStream(video: HTMLVideoElement): boolean {\n return typeof MediaStream !== \"undefined\" && video.srcObject instanceof MediaStream;\n}\n\n/**\n * Paint a drawable onto a fresh canvas and read it back as RGB.\n *\n * When the source is known to be opaque without looking — a JPEG, a camera\n * frame, an alpha-less `VideoFrame` — the read-back is deferred: the image's\n * pixels come out of the canvas the first time something reads `data`. The\n * canvas is this call's own, so it still holds the frame of this moment\n * however late that read happens. Preprocessing draws from the canvas and\n * never reads `data`, so a loop that only consumes boxes skips the\n * full-resolution `getImageData` altogether.\n *\n * Any other source is read back now, because whether its canvas may stand in\n * for the RGB image depends on every pixel being opaque, and only the read\n * tells.\n *\n * @param drawable The source to decode.\n * @param width Its intrinsic width.\n * @param height Its intrinsic height.\n * @param knownOpaque Whether the source cannot contain a translucent pixel.\n * @returns The decoded image, with the canvas attached when it is opaque.\n * @throws {@link ImageLoadError} for a zero-sized source.\n */\nfunction drawableToRGB(\n drawable: CanvasImageSource,\n width: number,\n height: number,\n knownOpaque: boolean = false,\n): LoadedImage {\n if (width === 0 || height === 0) {\n throw new ImageLoadError(`Cannot load image with zero dimension (${width}x${height}).`);\n }\n const canvas = createCanvas(width, height);\n const ctx = get2DContext(canvas);\n ctx.drawImage(drawable, 0, 0, width, height);\n if (knownOpaque) {\n const image = RGBImage.deferred(\n width,\n height,\n () => imageDataToRGBChecked(ctx.getImageData(0, 0, width, height)).image.data,\n );\n return { image, canvas, owned: true };\n }\n const { image, opaque } = imageDataToRGBChecked(ctx.getImageData(0, 0, width, height));\n return { image, canvas: opaque ? canvas : null, owned: true };\n}\n"],"mappings":"oGAkEA,eAAsB,EAAU,EAAuC,CACnE,OAAQ,MAAM,EAAgB,CAAM,EAAA,CAAG,KAC3C,CAUA,eAAsB,EAAgB,EAA0C,CAC5E,GAAI,aAAkB,EAAA,SAClB,MAAO,CAAE,MAAO,EAAQ,OAAQ,KAAM,MAAO,EAAM,EAGvD,GAAI,OAAO,UAAc,KAAe,aAAkB,UACtD,MAAO,CAAE,MAAO,EAAA,sBAAsB,CAAM,CAAC,CAAC,MAAO,OAAQ,KAAM,MAAO,EAAK,EAGnF,GAAI,OAAO,GAAW,SAClB,OAAO,EAAY,CAAM,EAG7B,GAAI,OAAO,KAAS,KAAe,aAAkB,KACjD,OAAO,EAAa,CAAM,EAG9B,GAAI,OAAO,iBAAqB,KAAe,aAAkB,iBAE7D,OADA,MAAM,EAAoB,CAAM,EACzB,EAAc,EAAQ,EAAO,aAAc,EAAO,aAAa,EAG1E,GAAI,OAAO,iBAAqB,KAAe,aAAkB,iBAAkB,CAC/E,GAAI,EAAO,WAAa,EACpB,MAAM,IAAI,EAAA,eACN,sIAEJ,EAEJ,OAAO,EAAc,EAAQ,EAAO,WAAY,EAAO,YAAa,EAAa,CAAM,CAAC,CAC5F,CAUA,GARI,OAAO,kBAAsB,KAAe,aAAkB,mBAI9D,OAAO,gBAAoB,KAAe,aAAkB,iBAI5D,OAAO,YAAgB,KAAe,aAAkB,YACxD,OAAO,EAAc,EAAQ,EAAO,MAAO,EAAO,MAAM,EAG5D,GAAI,OAAO,WAAe,KAAe,aAAkB,WACvD,OAAO,EACH,EACA,EAAO,aACP,EAAO,cACP,EAAO,SAAW,MAAQ,EAAqB,IAAI,EAAO,MAAM,CACpE,EAGJ,MAAM,IAAI,EAAA,eACN,kCAAkC,OAAO,UAAU,SAAS,KAAK,CAAM,GAC3E,CACJ,CAEA,eAAe,EAAY,EAAmC,CAC1D,IAAI,EACJ,GAAI,CACA,EAAW,MAAM,MAAM,CAAG,CAC9B,OAAS,EAAK,CACV,MAAM,IAAI,EAAA,eAAe,8BAA8B,EAAI,IAAK,EAAc,UAAW,CACrF,MAAO,CACX,CAAC,CACL,CACA,GAAI,CAAC,EAAS,GACV,MAAM,IAAI,EAAA,eACN,8BAA8B,EAAI,SAAS,EAAS,OAAO,GAAG,EAAS,YAC3E,EAGJ,OAAO,EAAa,MADD,EAAS,KAAK,CACT,CAC5B,CAEA,eAAe,EAAa,EAAkC,CAC1D,IAAI,EACJ,GAAI,CACA,EAAS,MAAM,kBAAkB,CAAI,CACzC,OAAS,EAAK,CACV,MAAM,IAAI,EAAA,eAAe,gCAAiC,EAAc,UAAW,CAC/E,MAAO,CACX,CAAC,CACL,CACA,GAAI,CACA,OAAO,EAAc,EAAQ,EAAO,MAAO,EAAO,OAAQ,EAAK,OAAS,YAAY,CACxF,QAAU,CACN,EAAO,MAAM,CACjB,CACJ,CAEA,SAAS,EAAoB,EAAsC,CAI/D,OAHI,EAAI,UAAY,EAAI,aAAe,EAC5B,QAAQ,QAAQ,EAEpB,IAAI,SAAe,EAAS,IAAW,CAC1C,IAAM,MAAqB,CACvB,EAAQ,EACR,EAAQ,CACZ,EACM,MAAsB,CACxB,EAAQ,EACR,EAAO,IAAI,EAAA,eAAe,sDAAsD,CAAC,CACrF,EACM,MAAsB,CACxB,EAAI,oBAAoB,OAAQ,CAAM,EACtC,EAAI,oBAAoB,QAAS,CAAO,CAC5C,EACA,EAAI,iBAAiB,OAAQ,EAAQ,CAAE,KAAM,EAAK,CAAC,EACnD,EAAI,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,CACzD,CAAC,CACL,CAQA,IAAM,EAA4C,IAAI,IAAI,CACtD,OACA,OACA,OACA,OACA,OACA,MACJ,CAAC,EAWD,SAAS,EAAa,EAAkC,CACpD,OAAO,OAAO,YAAgB,KAAe,EAAM,qBAAqB,WAC5E,CAwBA,SAAS,EACL,EACA,EACA,EACA,EAAuB,GACZ,CACX,GAAI,IAAU,GAAK,IAAW,EAC1B,MAAM,IAAI,EAAA,eAAe,0CAA0C,EAAM,GAAG,EAAO,GAAG,EAE1F,IAAM,EAAS,EAAA,aAAa,EAAO,CAAM,EACnC,EAAM,EAAA,aAAa,CAAM,EAE/B,GADA,EAAI,UAAU,EAAU,EAAG,EAAG,EAAO,CAAM,EACvC,EAMA,MAAO,CAAE,MALK,EAAA,SAAS,SACnB,EACA,MACM,EAAA,sBAAsB,EAAI,aAAa,EAAG,EAAG,EAAO,CAAM,CAAC,CAAC,CAAC,MAAM,IAEpE,EAAO,SAAQ,MAAO,EAAK,EAExC,GAAM,CAAE,QAAO,UAAW,EAAA,sBAAsB,EAAI,aAAa,EAAG,EAAG,EAAO,CAAM,CAAC,EACrF,MAAO,CAAE,QAAO,OAAQ,EAAS,EAAS,KAAM,MAAO,EAAK,CAChE"}
1
+ {"version":3,"file":"image.cjs","names":["RGBImage","imageDataToRGBChecked","ImageLoadError","createCanvas","get2DContext","require_exceptions","require_types","require_canvas","loadImage","loadImageSource","source","loadFromUrl","loadFromBlob","waitForImageElement","drawableToRGB","isLiveStream","OPAQUE_FRAME_FORMATS","response","url","err","bitmap","blob","img","onLoad","cleanup","resolve","onError","reject","video","width","height","canvas","ctx","drawable","knownOpaque","opaque"],"sources":["../../../src/vision/io/image.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Image loading utilities — convert any supported source into the canonical\n * {@link RGBImage} format.\n *\n * Browser-only: uses `fetch`, `createImageBitmap`, and a Canvas 2D context to\n * decode arbitrary inputs into a tightly-packed `Uint8Array` of HWC RGB pixels.\n */\n\nimport { createCanvas, get2DContext, imageDataToRGBChecked } from \"../core/canvas\";\nimport { ImageLoadError } from \"../core/exceptions\";\nimport { RGBImage } from \"../types\";\n\n/** Anything {@link loadImage} accepts as an image input. */\nexport type ImageInput =\n | string\n | Blob\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement\n | OffscreenCanvas\n | ImageBitmap\n | VideoFrame\n | ImageData\n | RGBImage;\n\n/**\n * A decoded input, plus what the tasks can reuse from decoding it.\n *\n * Internal to the SDK: the tasks need more than {@link loadImage} returns, and\n * the extra fields are about avoiding work, not about the image itself.\n */\nexport interface LoadedImage {\n /** The input as the canonical HWC RGB image. */\n readonly image: RGBImage;\n /**\n * A full-resolution canvas holding exactly {@link image}'s pixels, or `null`.\n *\n * Decoding any drawable already paints it onto a canvas to read it back.\n * Handing that canvas to a preprocessing pipeline lets it `drawImage` the\n * frame straight into the model input, instead of rebuilding RGBA from\n * {@link image} and `putImageData`-ing it onto a canvas of its own — two\n * full-resolution passes and an allocation the size of the frame. Only set\n * when every pixel was opaque: a translucent pixel composites differently\n * from the RGB that dropping its alpha kept.\n */\n readonly canvas: CanvasImageSource | null;\n /**\n * Whether {@link image}'s buffer was allocated here rather than passed in.\n *\n * An `RGBImage` the caller handed over is theirs, and a video loop may well\n * refill the same buffer every frame. Anything derived from it lazily would\n * then read a later frame, so lazy crops are only taken on owned buffers.\n */\n readonly owned: boolean;\n}\n\n/**\n * Load an image from any supported source into a HWC uint8 RGB array.\n *\n * A video element must have its current frame available (`readyState >= 2`);\n * the frame showing at the time of the call is the one decoded. A `VideoFrame`\n * is read but not closed — it belongs to the caller.\n *\n * @throws {@link ImageLoadError} if the source cannot be decoded or has an unsupported shape.\n */\nexport async function loadImage(source: ImageInput): Promise<RGBImage> {\n return (await loadImageSource(source)).image;\n}\n\n/**\n * Decode an input like {@link loadImage}, keeping what preprocessing can reuse.\n *\n * @param source Any {@link ImageInput}.\n * @returns The image, the canvas it was painted on (when reusable), and\n * whether the SDK owns the pixel buffer.\n * @throws {@link ImageLoadError} if the source cannot be decoded.\n */\nexport async function loadImageSource(source: ImageInput): Promise<LoadedImage> {\n if (source instanceof RGBImage) {\n return { image: source, canvas: null, owned: false };\n }\n\n if (typeof ImageData !== \"undefined\" && source instanceof ImageData) {\n return { image: imageDataToRGBChecked(source).image, canvas: null, owned: true };\n }\n\n if (typeof source === \"string\") {\n return loadFromUrl(source);\n }\n\n if (typeof Blob !== \"undefined\" && source instanceof Blob) {\n return loadFromBlob(source);\n }\n\n if (typeof HTMLImageElement !== \"undefined\" && source instanceof HTMLImageElement) {\n await waitForImageElement(source);\n return drawableToRGB(source, source.naturalWidth, source.naturalHeight);\n }\n\n if (typeof HTMLVideoElement !== \"undefined\" && source instanceof HTMLVideoElement) {\n if (source.readyState < 2) {\n throw new ImageLoadError(\n \"HTMLVideoElement has no current frame yet (readyState < HAVE_CURRENT_DATA). \" +\n \"Wait for its 'loadeddata' event before predicting on it.\",\n );\n }\n return drawableToRGB(source, source.videoWidth, source.videoHeight, isLiveStream(source));\n }\n\n if (typeof HTMLCanvasElement !== \"undefined\" && source instanceof HTMLCanvasElement) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof OffscreenCanvas !== \"undefined\" && source instanceof OffscreenCanvas) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof ImageBitmap !== \"undefined\" && source instanceof ImageBitmap) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof VideoFrame !== \"undefined\" && source instanceof VideoFrame) {\n return drawableToRGB(\n source,\n source.displayWidth,\n source.displayHeight,\n source.format !== null && OPAQUE_FRAME_FORMATS.has(source.format),\n );\n }\n\n throw new ImageLoadError(\n `Unsupported image source type: ${Object.prototype.toString.call(source)}`,\n );\n}\n\nasync function loadFromUrl(url: string): Promise<LoadedImage> {\n let response: Response;\n try {\n response = await fetch(url);\n } catch (err) {\n throw new ImageLoadError(`Failed to fetch image from ${url}: ${(err as Error).message}`, {\n cause: err,\n });\n }\n if (!response.ok) {\n throw new ImageLoadError(\n `Failed to fetch image from ${url}: HTTP ${response.status} ${response.statusText}`,\n );\n }\n const blob = await response.blob();\n return loadFromBlob(blob);\n}\n\nasync function loadFromBlob(blob: Blob): Promise<LoadedImage> {\n let bitmap: ImageBitmap;\n try {\n bitmap = await createImageBitmap(blob);\n } catch (err) {\n throw new ImageLoadError(`Failed to decode image blob: ${(err as Error).message}`, {\n cause: err,\n });\n }\n try {\n return drawableToRGB(bitmap, bitmap.width, bitmap.height, blob.type === \"image/jpeg\");\n } finally {\n bitmap.close();\n }\n}\n\nfunction waitForImageElement(img: HTMLImageElement): Promise<void> {\n if (img.complete && img.naturalWidth > 0) {\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n const onLoad = (): void => {\n cleanup();\n resolve();\n };\n const onError = (): void => {\n cleanup();\n reject(new ImageLoadError(\"Failed to load HTMLImageElement (load event errored)\"));\n };\n const cleanup = (): void => {\n img.removeEventListener(\"load\", onLoad);\n img.removeEventListener(\"error\", onError);\n };\n img.addEventListener(\"load\", onLoad, { once: true });\n img.addEventListener(\"error\", onError, { once: true });\n });\n}\n\n/**\n * `VideoFrame` pixel formats that carry no alpha channel.\n *\n * The `A`-suffixed planar formats and `RGBA`/`BGRA` do; a frame in one of\n * these never has a translucent pixel.\n */\nconst OPAQUE_FRAME_FORMATS: ReadonlySet<string> = new Set([\n \"I420\",\n \"I422\",\n \"I444\",\n \"NV12\",\n \"RGBX\",\n \"BGRX\",\n]);\n\n/**\n * Whether a video element is playing a live capture (camera, screen).\n *\n * `MediaStream` video tracks carry no alpha, so every frame is opaque. A video\n * playing a file may not be — VP9 with alpha exists — so it gets no such\n * promise.\n *\n * @param video The element.\n */\nfunction isLiveStream(video: HTMLVideoElement): boolean {\n return typeof MediaStream !== \"undefined\" && video.srcObject instanceof MediaStream;\n}\n\n/**\n * Paint a drawable onto a fresh canvas and read it back as RGB.\n *\n * When the source is known to be opaque without looking — a JPEG, a camera\n * frame, an alpha-less `VideoFrame` — the read-back is deferred: the image's\n * pixels come out of the canvas the first time something reads `data`. The\n * canvas is this call's own, so it still holds the frame of this moment\n * however late that read happens. Preprocessing draws from the canvas and\n * never reads `data`, so a loop that only consumes boxes skips the\n * full-resolution `getImageData` altogether.\n *\n * Any other source is read back now, because whether its canvas may stand in\n * for the RGB image depends on every pixel being opaque, and only the read\n * tells.\n *\n * @param drawable The source to decode.\n * @param width Its intrinsic width.\n * @param height Its intrinsic height.\n * @param knownOpaque Whether the source cannot contain a translucent pixel.\n * @returns The decoded image, with the canvas attached when it is opaque.\n * @throws {@link ImageLoadError} for a zero-sized source.\n */\nfunction drawableToRGB(\n drawable: CanvasImageSource,\n width: number,\n height: number,\n knownOpaque: boolean = false,\n): LoadedImage {\n if (width === 0 || height === 0) {\n throw new ImageLoadError(`Cannot load image with zero dimension (${width}x${height}).`);\n }\n const canvas = createCanvas(width, height);\n const ctx = get2DContext(canvas);\n ctx.drawImage(drawable, 0, 0, width, height);\n if (knownOpaque) {\n const image = RGBImage.deferred(\n width,\n height,\n () => imageDataToRGBChecked(ctx.getImageData(0, 0, width, height)).image.data,\n );\n return { image, canvas, owned: true };\n }\n const { image, opaque } = imageDataToRGBChecked(ctx.getImageData(0, 0, width, height));\n return { image, canvas: opaque ? canvas : null, owned: true };\n}\n"],"mappings":"A,oGAkEA,eAAsBQ,EAAU,EAAuC,CACnE,OAAQ,MAAMC,EAAgBC,CAAM,EAAA,CAAG,KAC3C,CAUA,eAAsBD,EAAgB,EAA0C,CAC5E,GAAIC,aAAkBV,EAAAA,SAClB,MAAO,CAAE,MAAOU,EAAQ,OAAQ,KAAM,MAAO,EAAM,EAGvD,GAAI,OAAO,UAAc,KAAeA,aAAkB,UACtD,MAAO,CAAE,MAAOT,EAAAA,sBAAsBS,CAAM,CAAC,CAAC,MAAO,OAAQ,KAAM,MAAO,EAAK,EAGnF,GAAI,OAAOA,GAAW,SAClB,OAAOC,EAAYD,CAAM,EAG7B,GAAI,OAAO,KAAS,KAAeA,aAAkB,KACjD,OAAOE,EAAaF,CAAM,EAG9B,GAAI,OAAO,iBAAqB,KAAeA,aAAkB,iBAE7D,OADA,MAAMG,EAAoBH,CAAM,EACzBI,EAAcJ,EAAQA,EAAO,aAAcA,EAAO,aAAa,EAG1E,GAAI,OAAO,iBAAqB,KAAeA,aAAkB,iBAAkB,CAC/E,GAAIA,EAAO,WAAa,EACpB,MAAM,IAAIR,EAAAA,eACN,sIAEJ,EAEJ,OAAOY,EAAcJ,EAAQA,EAAO,WAAYA,EAAO,YAAaK,EAAaL,CAAM,CAAC,CAC5F,CAUA,GARI,OAAO,kBAAsB,KAAeA,aAAkB,mBAI9D,OAAO,gBAAoB,KAAeA,aAAkB,iBAI5D,OAAO,YAAgB,KAAeA,aAAkB,YACxD,OAAOI,EAAcJ,EAAQA,EAAO,MAAOA,EAAO,MAAM,EAG5D,GAAI,OAAO,WAAe,KAAeA,aAAkB,WACvD,OAAOI,EACHJ,EACAA,EAAO,aACPA,EAAO,cACPA,EAAO,SAAW,MAAQM,EAAqB,IAAIN,EAAO,MAAM,CACpE,EAGJ,MAAM,IAAIR,EAAAA,eACN,kCAAkC,OAAO,UAAU,SAAS,KAAKQ,CAAM,GAC3E,CACJ,CAEA,eAAeC,EAAY,EAAmC,CAC1D,IAAIM,EACJ,GAAI,CACA,EAAW,MAAM,MAAMC,CAAG,CAC9B,OAASC,EAAK,CACV,MAAM,IAAIjB,EAAAA,eAAe,8BAA8BgB,EAAI,IAAKC,EAAc,UAAW,CACrF,MAAOA,CACX,CAAC,CACL,CACA,GAAI,CAACF,EAAS,GACV,MAAM,IAAIf,EAAAA,eACN,8BAA8BgB,EAAI,SAASD,EAAS,OAAO,GAAGA,EAAS,YAC3E,EAGJ,OAAOL,EAAa,MADDK,EAAS,KAAK,CACT,CAC5B,CAEA,eAAeL,EAAa,EAAkC,CAC1D,IAAIQ,EACJ,GAAI,CACA,EAAS,MAAM,kBAAkBC,CAAI,CACzC,OAASF,EAAK,CACV,MAAM,IAAIjB,EAAAA,eAAe,gCAAiCiB,EAAc,UAAW,CAC/E,MAAOA,CACX,CAAC,CACL,CACA,GAAI,CACA,OAAOL,EAAcM,EAAQA,EAAO,MAAOA,EAAO,OAAQC,EAAK,OAAS,YAAY,CACxF,QAAU,CACND,EAAO,MAAM,CACjB,CACJ,CAEA,SAASP,EAAoB,EAAsC,CAI/D,OAHIS,EAAI,UAAYA,EAAI,aAAe,EAC5B,QAAQ,QAAQ,EAEpB,IAAI,SAAe,EAAS,IAAW,CAC1C,IAAMC,MAAqB,CACvBC,EAAQ,EACRC,EAAQ,CACZ,EACMC,MAAsB,CACxBF,EAAQ,EACRG,EAAO,IAAIzB,EAAAA,eAAe,sDAAsD,CAAC,CACrF,EACMsB,MAAsB,CACxBF,EAAI,oBAAoB,OAAQC,CAAM,EACtCD,EAAI,oBAAoB,QAASI,CAAO,CAC5C,EACAJ,EAAI,iBAAiB,OAAQC,EAAQ,CAAE,KAAM,EAAK,CAAC,EACnDD,EAAI,iBAAiB,QAASI,EAAS,CAAE,KAAM,EAAK,CAAC,CACzD,CAAC,CACL,CAQA,IAAMV,EAA4C,IAAI,IAAI,CACtD,OACA,OACA,OACA,OACA,OACA,MACJ,CAAC,EAWD,SAASD,EAAa,EAAkC,CACpD,OAAO,OAAO,YAAgB,KAAea,EAAM,qBAAqB,WAC5E,CAwBA,SAASd,EACL,EACA,EACA,EACA,EAAuB,GACZ,CACX,GAAIe,IAAU,GAAKC,IAAW,EAC1B,MAAM,IAAI5B,EAAAA,eAAe,0CAA0C2B,EAAM,GAAGC,EAAO,GAAG,EAE1F,IAAMC,EAAS5B,EAAAA,aAAa0B,EAAOC,CAAM,EACnCE,EAAM5B,EAAAA,aAAa2B,CAAM,EAE/B,GADAC,EAAI,UAAUC,EAAU,EAAG,EAAGJ,EAAOC,CAAM,EACvCI,EAMA,MAAO,CAAE,MALKlC,EAAAA,SAAS,SACnB6B,EACAC,MACM7B,EAAAA,sBAAsB+B,EAAI,aAAa,EAAG,EAAGH,EAAOC,CAAM,CAAC,CAAC,CAAC,MAAM,IAEpE,EAAO,SAAQ,MAAO,EAAK,EAExC,GAAM,CAAE,QAAO,UAAW7B,EAAAA,sBAAsB+B,EAAI,aAAa,EAAG,EAAGH,EAAOC,CAAM,CAAC,EACrF,MAAO,CAAE,QAAO,OAAQK,EAASJ,EAAS,KAAM,MAAO,EAAK,CAChE,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","names":[],"sources":["../../../src/vision/io/image.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Image loading utilities — convert any supported source into the canonical\n * {@link RGBImage} format.\n *\n * Browser-only: uses `fetch`, `createImageBitmap`, and a Canvas 2D context to\n * decode arbitrary inputs into a tightly-packed `Uint8Array` of HWC RGB pixels.\n */\n\nimport { createCanvas, get2DContext, imageDataToRGBChecked } from \"../core/canvas\";\nimport { ImageLoadError } from \"../core/exceptions\";\nimport { RGBImage } from \"../types\";\n\n/** Anything {@link loadImage} accepts as an image input. */\nexport type ImageInput =\n | string\n | Blob\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement\n | OffscreenCanvas\n | ImageBitmap\n | VideoFrame\n | ImageData\n | RGBImage;\n\n/**\n * A decoded input, plus what the tasks can reuse from decoding it.\n *\n * Internal to the SDK: the tasks need more than {@link loadImage} returns, and\n * the extra fields are about avoiding work, not about the image itself.\n */\nexport interface LoadedImage {\n /** The input as the canonical HWC RGB image. */\n readonly image: RGBImage;\n /**\n * A full-resolution canvas holding exactly {@link image}'s pixels, or `null`.\n *\n * Decoding any drawable already paints it onto a canvas to read it back.\n * Handing that canvas to a preprocessing pipeline lets it `drawImage` the\n * frame straight into the model input, instead of rebuilding RGBA from\n * {@link image} and `putImageData`-ing it onto a canvas of its own — two\n * full-resolution passes and an allocation the size of the frame. Only set\n * when every pixel was opaque: a translucent pixel composites differently\n * from the RGB that dropping its alpha kept.\n */\n readonly canvas: CanvasImageSource | null;\n /**\n * Whether {@link image}'s buffer was allocated here rather than passed in.\n *\n * An `RGBImage` the caller handed over is theirs, and a video loop may well\n * refill the same buffer every frame. Anything derived from it lazily would\n * then read a later frame, so lazy crops are only taken on owned buffers.\n */\n readonly owned: boolean;\n}\n\n/**\n * Load an image from any supported source into a HWC uint8 RGB array.\n *\n * A video element must have its current frame available (`readyState >= 2`);\n * the frame showing at the time of the call is the one decoded. A `VideoFrame`\n * is read but not closed — it belongs to the caller.\n *\n * @throws {@link ImageLoadError} if the source cannot be decoded or has an unsupported shape.\n */\nexport async function loadImage(source: ImageInput): Promise<RGBImage> {\n return (await loadImageSource(source)).image;\n}\n\n/**\n * Decode an input like {@link loadImage}, keeping what preprocessing can reuse.\n *\n * @param source Any {@link ImageInput}.\n * @returns The image, the canvas it was painted on (when reusable), and\n * whether the SDK owns the pixel buffer.\n * @throws {@link ImageLoadError} if the source cannot be decoded.\n */\nexport async function loadImageSource(source: ImageInput): Promise<LoadedImage> {\n if (source instanceof RGBImage) {\n return { image: source, canvas: null, owned: false };\n }\n\n if (typeof ImageData !== \"undefined\" && source instanceof ImageData) {\n return { image: imageDataToRGBChecked(source).image, canvas: null, owned: true };\n }\n\n if (typeof source === \"string\") {\n return loadFromUrl(source);\n }\n\n if (typeof Blob !== \"undefined\" && source instanceof Blob) {\n return loadFromBlob(source);\n }\n\n if (typeof HTMLImageElement !== \"undefined\" && source instanceof HTMLImageElement) {\n await waitForImageElement(source);\n return drawableToRGB(source, source.naturalWidth, source.naturalHeight);\n }\n\n if (typeof HTMLVideoElement !== \"undefined\" && source instanceof HTMLVideoElement) {\n if (source.readyState < 2) {\n throw new ImageLoadError(\n \"HTMLVideoElement has no current frame yet (readyState < HAVE_CURRENT_DATA). \" +\n \"Wait for its 'loadeddata' event before predicting on it.\",\n );\n }\n return drawableToRGB(source, source.videoWidth, source.videoHeight, isLiveStream(source));\n }\n\n if (typeof HTMLCanvasElement !== \"undefined\" && source instanceof HTMLCanvasElement) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof OffscreenCanvas !== \"undefined\" && source instanceof OffscreenCanvas) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof ImageBitmap !== \"undefined\" && source instanceof ImageBitmap) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof VideoFrame !== \"undefined\" && source instanceof VideoFrame) {\n return drawableToRGB(\n source,\n source.displayWidth,\n source.displayHeight,\n source.format !== null && OPAQUE_FRAME_FORMATS.has(source.format),\n );\n }\n\n throw new ImageLoadError(\n `Unsupported image source type: ${Object.prototype.toString.call(source)}`,\n );\n}\n\nasync function loadFromUrl(url: string): Promise<LoadedImage> {\n let response: Response;\n try {\n response = await fetch(url);\n } catch (err) {\n throw new ImageLoadError(`Failed to fetch image from ${url}: ${(err as Error).message}`, {\n cause: err,\n });\n }\n if (!response.ok) {\n throw new ImageLoadError(\n `Failed to fetch image from ${url}: HTTP ${response.status} ${response.statusText}`,\n );\n }\n const blob = await response.blob();\n return loadFromBlob(blob);\n}\n\nasync function loadFromBlob(blob: Blob): Promise<LoadedImage> {\n let bitmap: ImageBitmap;\n try {\n bitmap = await createImageBitmap(blob);\n } catch (err) {\n throw new ImageLoadError(`Failed to decode image blob: ${(err as Error).message}`, {\n cause: err,\n });\n }\n try {\n return drawableToRGB(bitmap, bitmap.width, bitmap.height, blob.type === \"image/jpeg\");\n } finally {\n bitmap.close();\n }\n}\n\nfunction waitForImageElement(img: HTMLImageElement): Promise<void> {\n if (img.complete && img.naturalWidth > 0) {\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n const onLoad = (): void => {\n cleanup();\n resolve();\n };\n const onError = (): void => {\n cleanup();\n reject(new ImageLoadError(\"Failed to load HTMLImageElement (load event errored)\"));\n };\n const cleanup = (): void => {\n img.removeEventListener(\"load\", onLoad);\n img.removeEventListener(\"error\", onError);\n };\n img.addEventListener(\"load\", onLoad, { once: true });\n img.addEventListener(\"error\", onError, { once: true });\n });\n}\n\n/**\n * `VideoFrame` pixel formats that carry no alpha channel.\n *\n * The `A`-suffixed planar formats and `RGBA`/`BGRA` do; a frame in one of\n * these never has a translucent pixel.\n */\nconst OPAQUE_FRAME_FORMATS: ReadonlySet<string> = new Set([\n \"I420\",\n \"I422\",\n \"I444\",\n \"NV12\",\n \"RGBX\",\n \"BGRX\",\n]);\n\n/**\n * Whether a video element is playing a live capture (camera, screen).\n *\n * `MediaStream` video tracks carry no alpha, so every frame is opaque. A video\n * playing a file may not be — VP9 with alpha exists — so it gets no such\n * promise.\n *\n * @param video The element.\n */\nfunction isLiveStream(video: HTMLVideoElement): boolean {\n return typeof MediaStream !== \"undefined\" && video.srcObject instanceof MediaStream;\n}\n\n/**\n * Paint a drawable onto a fresh canvas and read it back as RGB.\n *\n * When the source is known to be opaque without looking — a JPEG, a camera\n * frame, an alpha-less `VideoFrame` — the read-back is deferred: the image's\n * pixels come out of the canvas the first time something reads `data`. The\n * canvas is this call's own, so it still holds the frame of this moment\n * however late that read happens. Preprocessing draws from the canvas and\n * never reads `data`, so a loop that only consumes boxes skips the\n * full-resolution `getImageData` altogether.\n *\n * Any other source is read back now, because whether its canvas may stand in\n * for the RGB image depends on every pixel being opaque, and only the read\n * tells.\n *\n * @param drawable The source to decode.\n * @param width Its intrinsic width.\n * @param height Its intrinsic height.\n * @param knownOpaque Whether the source cannot contain a translucent pixel.\n * @returns The decoded image, with the canvas attached when it is opaque.\n * @throws {@link ImageLoadError} for a zero-sized source.\n */\nfunction drawableToRGB(\n drawable: CanvasImageSource,\n width: number,\n height: number,\n knownOpaque: boolean = false,\n): LoadedImage {\n if (width === 0 || height === 0) {\n throw new ImageLoadError(`Cannot load image with zero dimension (${width}x${height}).`);\n }\n const canvas = createCanvas(width, height);\n const ctx = get2DContext(canvas);\n ctx.drawImage(drawable, 0, 0, width, height);\n if (knownOpaque) {\n const image = RGBImage.deferred(\n width,\n height,\n () => imageDataToRGBChecked(ctx.getImageData(0, 0, width, height)).image.data,\n );\n return { image, canvas, owned: true };\n }\n const { image, opaque } = imageDataToRGBChecked(ctx.getImageData(0, 0, width, height));\n return { image, canvas: opaque ? canvas : null, owned: true };\n}\n"],"mappings":";;;;AAkEA,eAAsB,EAAU,GAAuC;CACnE,QAAQ,MAAM,EAAgB,CAAM,EAAA,CAAG;AAC3C;AAUA,eAAsB,EAAgB,GAA0C;CAC5E,IAAI,aAAkB,GAClB,OAAO;EAAE,OAAO;EAAQ,QAAQ;EAAM,OAAO;CAAM;CAGvD,IAAI,OAAO,YAAc,OAAe,aAAkB,WACtD,OAAO;EAAE,OAAO,EAAsB,CAAM,CAAC,CAAC;EAAO,QAAQ;EAAM,OAAO;CAAK;CAGnF,IAAI,OAAO,KAAW,UAClB,OAAO,EAAY,CAAM;CAG7B,IAAI,OAAO,OAAS,OAAe,aAAkB,MACjD,OAAO,EAAa,CAAM;CAG9B,IAAI,OAAO,mBAAqB,OAAe,aAAkB,kBAE7D,OADA,MAAM,EAAoB,CAAM,GACzB,EAAc,GAAQ,EAAO,cAAc,EAAO,aAAa;CAG1E,IAAI,OAAO,mBAAqB,OAAe,aAAkB,kBAAkB;EAC/E,IAAI,EAAO,aAAa,GACpB,MAAM,IAAI,EACN,sIAEJ;EAEJ,OAAO,EAAc,GAAQ,EAAO,YAAY,EAAO,aAAa,EAAa,CAAM,CAAC;CAC5F;CAUA,IARI,OAAO,oBAAsB,OAAe,aAAkB,qBAI9D,OAAO,kBAAoB,OAAe,aAAkB,mBAI5D,OAAO,cAAgB,OAAe,aAAkB,aACxD,OAAO,EAAc,GAAQ,EAAO,OAAO,EAAO,MAAM;CAG5D,IAAI,OAAO,aAAe,OAAe,aAAkB,YACvD,OAAO,EACH,GACA,EAAO,cACP,EAAO,eACP,EAAO,WAAW,QAAQ,EAAqB,IAAI,EAAO,MAAM,CACpE;CAGJ,MAAM,IAAI,EACN,kCAAkC,OAAO,UAAU,SAAS,KAAK,CAAM,GAC3E;AACJ;AAEA,eAAe,EAAY,GAAmC;CAC1D,IAAI;CACJ,IAAI;EACA,IAAW,MAAM,MAAM,CAAG;CAC9B,SAAS,GAAK;EACV,MAAM,IAAI,EAAe,8BAA8B,EAAI,IAAK,EAAc,WAAW,EACrF,OAAO,EACX,CAAC;CACL;CACA,IAAI,CAAC,EAAS,IACV,MAAM,IAAI,EACN,8BAA8B,EAAI,SAAS,EAAS,OAAO,GAAG,EAAS,YAC3E;CAGJ,OAAO,EAAa,MADD,EAAS,KAAK,CACT;AAC5B;AAEA,eAAe,EAAa,GAAkC;CAC1D,IAAI;CACJ,IAAI;EACA,IAAS,MAAM,kBAAkB,CAAI;CACzC,SAAS,GAAK;EACV,MAAM,IAAI,EAAe,gCAAiC,EAAc,WAAW,EAC/E,OAAO,EACX,CAAC;CACL;CACA,IAAI;EACA,OAAO,EAAc,GAAQ,EAAO,OAAO,EAAO,QAAQ,EAAK,SAAS,YAAY;CACxF,UAAU;EACN,EAAO,MAAM;CACjB;AACJ;AAEA,SAAS,EAAoB,GAAsC;CAI/D,OAHI,EAAI,YAAY,EAAI,eAAe,IAC5B,QAAQ,QAAQ,IAEpB,IAAI,SAAe,GAAS,MAAW;EAC1C,IAAM,UAAqB;GAEvB,AADA,EAAQ,GACR,EAAQ;EACZ,GACM,UAAsB;GAExB,AADA,EAAQ,GACR,EAAO,IAAI,EAAe,sDAAsD,CAAC;EACrF,GACM,UAAsB;GAExB,AADA,EAAI,oBAAoB,QAAQ,CAAM,GACtC,EAAI,oBAAoB,SAAS,CAAO;EAC5C;EAEA,AADA,EAAI,iBAAiB,QAAQ,GAAQ,EAAE,MAAM,GAAK,CAAC,GACnD,EAAI,iBAAiB,SAAS,GAAS,EAAE,MAAM,GAAK,CAAC;CACzD,CAAC;AACL;AAQA,IAAM,oBAA4C,IAAI,IAAI;CACtD;CACA;CACA;CACA;CACA;CACA;AACJ,CAAC;AAWD,SAAS,EAAa,GAAkC;CACpD,OAAO,OAAO,cAAgB,OAAe,EAAM,qBAAqB;AAC5E;AAwBA,SAAS,EACL,GACA,GACA,GACA,IAAuB,IACZ;CACX,IAAI,MAAU,KAAK,MAAW,GAC1B,MAAM,IAAI,EAAe,0CAA0C,EAAM,GAAG,EAAO,GAAG;CAE1F,IAAM,IAAS,EAAa,GAAO,CAAM,GACnC,IAAM,EAAa,CAAM;CAE/B,IADA,EAAI,UAAU,GAAU,GAAG,GAAG,GAAO,CAAM,GACvC,GAMA,OAAO;EAAE,OALK,EAAS,SACnB,GACA,SACM,EAAsB,EAAI,aAAa,GAAG,GAAG,GAAO,CAAM,CAAC,CAAC,CAAC,MAAM,IAEpE;EAAO;EAAQ,OAAO;CAAK;CAExC,IAAM,EAAE,UAAO,cAAW,EAAsB,EAAI,aAAa,GAAG,GAAG,GAAO,CAAM,CAAC;CACrF,OAAO;EAAE;EAAO,QAAQ,IAAS,IAAS;EAAM,OAAO;CAAK;AAChE"}
1
+ {"version":3,"file":"image.js","names":["loadImage","loadImageSource","source","RGBImage","imageDataToRGBChecked","loadFromUrl","loadFromBlob","waitForImageElement","drawableToRGB","ImageLoadError","isLiveStream","OPAQUE_FRAME_FORMATS","response","url","err","bitmap","blob","img","onLoad","cleanup","resolve","onError","reject","video","width","height","canvas","createCanvas","ctx","get2DContext","drawable","knownOpaque","opaque"],"sources":["../../../src/vision/io/image.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Image loading utilities — convert any supported source into the canonical\n * {@link RGBImage} format.\n *\n * Browser-only: uses `fetch`, `createImageBitmap`, and a Canvas 2D context to\n * decode arbitrary inputs into a tightly-packed `Uint8Array` of HWC RGB pixels.\n */\n\nimport { createCanvas, get2DContext, imageDataToRGBChecked } from \"../core/canvas\";\nimport { ImageLoadError } from \"../core/exceptions\";\nimport { RGBImage } from \"../types\";\n\n/** Anything {@link loadImage} accepts as an image input. */\nexport type ImageInput =\n | string\n | Blob\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement\n | OffscreenCanvas\n | ImageBitmap\n | VideoFrame\n | ImageData\n | RGBImage;\n\n/**\n * A decoded input, plus what the tasks can reuse from decoding it.\n *\n * Internal to the SDK: the tasks need more than {@link loadImage} returns, and\n * the extra fields are about avoiding work, not about the image itself.\n */\nexport interface LoadedImage {\n /** The input as the canonical HWC RGB image. */\n readonly image: RGBImage;\n /**\n * A full-resolution canvas holding exactly {@link image}'s pixels, or `null`.\n *\n * Decoding any drawable already paints it onto a canvas to read it back.\n * Handing that canvas to a preprocessing pipeline lets it `drawImage` the\n * frame straight into the model input, instead of rebuilding RGBA from\n * {@link image} and `putImageData`-ing it onto a canvas of its own — two\n * full-resolution passes and an allocation the size of the frame. Only set\n * when every pixel was opaque: a translucent pixel composites differently\n * from the RGB that dropping its alpha kept.\n */\n readonly canvas: CanvasImageSource | null;\n /**\n * Whether {@link image}'s buffer was allocated here rather than passed in.\n *\n * An `RGBImage` the caller handed over is theirs, and a video loop may well\n * refill the same buffer every frame. Anything derived from it lazily would\n * then read a later frame, so lazy crops are only taken on owned buffers.\n */\n readonly owned: boolean;\n}\n\n/**\n * Load an image from any supported source into a HWC uint8 RGB array.\n *\n * A video element must have its current frame available (`readyState >= 2`);\n * the frame showing at the time of the call is the one decoded. A `VideoFrame`\n * is read but not closed — it belongs to the caller.\n *\n * @throws {@link ImageLoadError} if the source cannot be decoded or has an unsupported shape.\n */\nexport async function loadImage(source: ImageInput): Promise<RGBImage> {\n return (await loadImageSource(source)).image;\n}\n\n/**\n * Decode an input like {@link loadImage}, keeping what preprocessing can reuse.\n *\n * @param source Any {@link ImageInput}.\n * @returns The image, the canvas it was painted on (when reusable), and\n * whether the SDK owns the pixel buffer.\n * @throws {@link ImageLoadError} if the source cannot be decoded.\n */\nexport async function loadImageSource(source: ImageInput): Promise<LoadedImage> {\n if (source instanceof RGBImage) {\n return { image: source, canvas: null, owned: false };\n }\n\n if (typeof ImageData !== \"undefined\" && source instanceof ImageData) {\n return { image: imageDataToRGBChecked(source).image, canvas: null, owned: true };\n }\n\n if (typeof source === \"string\") {\n return loadFromUrl(source);\n }\n\n if (typeof Blob !== \"undefined\" && source instanceof Blob) {\n return loadFromBlob(source);\n }\n\n if (typeof HTMLImageElement !== \"undefined\" && source instanceof HTMLImageElement) {\n await waitForImageElement(source);\n return drawableToRGB(source, source.naturalWidth, source.naturalHeight);\n }\n\n if (typeof HTMLVideoElement !== \"undefined\" && source instanceof HTMLVideoElement) {\n if (source.readyState < 2) {\n throw new ImageLoadError(\n \"HTMLVideoElement has no current frame yet (readyState < HAVE_CURRENT_DATA). \" +\n \"Wait for its 'loadeddata' event before predicting on it.\",\n );\n }\n return drawableToRGB(source, source.videoWidth, source.videoHeight, isLiveStream(source));\n }\n\n if (typeof HTMLCanvasElement !== \"undefined\" && source instanceof HTMLCanvasElement) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof OffscreenCanvas !== \"undefined\" && source instanceof OffscreenCanvas) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof ImageBitmap !== \"undefined\" && source instanceof ImageBitmap) {\n return drawableToRGB(source, source.width, source.height);\n }\n\n if (typeof VideoFrame !== \"undefined\" && source instanceof VideoFrame) {\n return drawableToRGB(\n source,\n source.displayWidth,\n source.displayHeight,\n source.format !== null && OPAQUE_FRAME_FORMATS.has(source.format),\n );\n }\n\n throw new ImageLoadError(\n `Unsupported image source type: ${Object.prototype.toString.call(source)}`,\n );\n}\n\nasync function loadFromUrl(url: string): Promise<LoadedImage> {\n let response: Response;\n try {\n response = await fetch(url);\n } catch (err) {\n throw new ImageLoadError(`Failed to fetch image from ${url}: ${(err as Error).message}`, {\n cause: err,\n });\n }\n if (!response.ok) {\n throw new ImageLoadError(\n `Failed to fetch image from ${url}: HTTP ${response.status} ${response.statusText}`,\n );\n }\n const blob = await response.blob();\n return loadFromBlob(blob);\n}\n\nasync function loadFromBlob(blob: Blob): Promise<LoadedImage> {\n let bitmap: ImageBitmap;\n try {\n bitmap = await createImageBitmap(blob);\n } catch (err) {\n throw new ImageLoadError(`Failed to decode image blob: ${(err as Error).message}`, {\n cause: err,\n });\n }\n try {\n return drawableToRGB(bitmap, bitmap.width, bitmap.height, blob.type === \"image/jpeg\");\n } finally {\n bitmap.close();\n }\n}\n\nfunction waitForImageElement(img: HTMLImageElement): Promise<void> {\n if (img.complete && img.naturalWidth > 0) {\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n const onLoad = (): void => {\n cleanup();\n resolve();\n };\n const onError = (): void => {\n cleanup();\n reject(new ImageLoadError(\"Failed to load HTMLImageElement (load event errored)\"));\n };\n const cleanup = (): void => {\n img.removeEventListener(\"load\", onLoad);\n img.removeEventListener(\"error\", onError);\n };\n img.addEventListener(\"load\", onLoad, { once: true });\n img.addEventListener(\"error\", onError, { once: true });\n });\n}\n\n/**\n * `VideoFrame` pixel formats that carry no alpha channel.\n *\n * The `A`-suffixed planar formats and `RGBA`/`BGRA` do; a frame in one of\n * these never has a translucent pixel.\n */\nconst OPAQUE_FRAME_FORMATS: ReadonlySet<string> = new Set([\n \"I420\",\n \"I422\",\n \"I444\",\n \"NV12\",\n \"RGBX\",\n \"BGRX\",\n]);\n\n/**\n * Whether a video element is playing a live capture (camera, screen).\n *\n * `MediaStream` video tracks carry no alpha, so every frame is opaque. A video\n * playing a file may not be — VP9 with alpha exists — so it gets no such\n * promise.\n *\n * @param video The element.\n */\nfunction isLiveStream(video: HTMLVideoElement): boolean {\n return typeof MediaStream !== \"undefined\" && video.srcObject instanceof MediaStream;\n}\n\n/**\n * Paint a drawable onto a fresh canvas and read it back as RGB.\n *\n * When the source is known to be opaque without looking — a JPEG, a camera\n * frame, an alpha-less `VideoFrame` — the read-back is deferred: the image's\n * pixels come out of the canvas the first time something reads `data`. The\n * canvas is this call's own, so it still holds the frame of this moment\n * however late that read happens. Preprocessing draws from the canvas and\n * never reads `data`, so a loop that only consumes boxes skips the\n * full-resolution `getImageData` altogether.\n *\n * Any other source is read back now, because whether its canvas may stand in\n * for the RGB image depends on every pixel being opaque, and only the read\n * tells.\n *\n * @param drawable The source to decode.\n * @param width Its intrinsic width.\n * @param height Its intrinsic height.\n * @param knownOpaque Whether the source cannot contain a translucent pixel.\n * @returns The decoded image, with the canvas attached when it is opaque.\n * @throws {@link ImageLoadError} for a zero-sized source.\n */\nfunction drawableToRGB(\n drawable: CanvasImageSource,\n width: number,\n height: number,\n knownOpaque: boolean = false,\n): LoadedImage {\n if (width === 0 || height === 0) {\n throw new ImageLoadError(`Cannot load image with zero dimension (${width}x${height}).`);\n }\n const canvas = createCanvas(width, height);\n const ctx = get2DContext(canvas);\n ctx.drawImage(drawable, 0, 0, width, height);\n if (knownOpaque) {\n const image = RGBImage.deferred(\n width,\n height,\n () => imageDataToRGBChecked(ctx.getImageData(0, 0, width, height)).image.data,\n );\n return { image, canvas, owned: true };\n }\n const { image, opaque } = imageDataToRGBChecked(ctx.getImageData(0, 0, width, height));\n return { image, canvas: opaque ? canvas : null, owned: true };\n}\n"],"mappings":";;;;AAkEA,eAAsBA,EAAU,GAAuC;CACnE,QAAQ,MAAMC,EAAgBC,CAAM,EAAA,CAAG;AAC3C;AAUA,eAAsBD,EAAgB,GAA0C;CAC5E,IAAIC,aAAkBC,GAClB,OAAO;EAAE,OAAOD;EAAQ,QAAQ;EAAM,OAAO;CAAM;CAGvD,IAAI,OAAO,YAAc,OAAeA,aAAkB,WACtD,OAAO;EAAE,OAAOE,EAAsBF,CAAM,CAAC,CAAC;EAAO,QAAQ;EAAM,OAAO;CAAK;CAGnF,IAAI,OAAOA,KAAW,UAClB,OAAOG,EAAYH,CAAM;CAG7B,IAAI,OAAO,OAAS,OAAeA,aAAkB,MACjD,OAAOI,EAAaJ,CAAM;CAG9B,IAAI,OAAO,mBAAqB,OAAeA,aAAkB,kBAE7D,OADA,MAAMK,EAAoBL,CAAM,GACzBM,EAAcN,GAAQA,EAAO,cAAcA,EAAO,aAAa;CAG1E,IAAI,OAAO,mBAAqB,OAAeA,aAAkB,kBAAkB;EAC/E,IAAIA,EAAO,aAAa,GACpB,MAAM,IAAIO,EACN,sIAEJ;EAEJ,OAAOD,EAAcN,GAAQA,EAAO,YAAYA,EAAO,aAAaQ,EAAaR,CAAM,CAAC;CAC5F;CAUA,IARI,OAAO,oBAAsB,OAAeA,aAAkB,qBAI9D,OAAO,kBAAoB,OAAeA,aAAkB,mBAI5D,OAAO,cAAgB,OAAeA,aAAkB,aACxD,OAAOM,EAAcN,GAAQA,EAAO,OAAOA,EAAO,MAAM;CAG5D,IAAI,OAAO,aAAe,OAAeA,aAAkB,YACvD,OAAOM,EACHN,GACAA,EAAO,cACPA,EAAO,eACPA,EAAO,WAAW,QAAQS,EAAqB,IAAIT,EAAO,MAAM,CACpE;CAGJ,MAAM,IAAIO,EACN,kCAAkC,OAAO,UAAU,SAAS,KAAKP,CAAM,GAC3E;AACJ;AAEA,eAAeG,EAAY,GAAmC;CAC1D,IAAIO;CACJ,IAAI;EACA,IAAW,MAAM,MAAMC,CAAG;CAC9B,SAASC,GAAK;EACV,MAAM,IAAIL,EAAe,8BAA8BI,EAAI,IAAKC,EAAc,WAAW,EACrF,OAAOA,EACX,CAAC;CACL;CACA,IAAI,CAACF,EAAS,IACV,MAAM,IAAIH,EACN,8BAA8BI,EAAI,SAASD,EAAS,OAAO,GAAGA,EAAS,YAC3E;CAGJ,OAAON,EAAa,MADDM,EAAS,KAAK,CACT;AAC5B;AAEA,eAAeN,EAAa,GAAkC;CAC1D,IAAIS;CACJ,IAAI;EACA,IAAS,MAAM,kBAAkBC,CAAI;CACzC,SAASF,GAAK;EACV,MAAM,IAAIL,EAAe,gCAAiCK,EAAc,WAAW,EAC/E,OAAOA,EACX,CAAC;CACL;CACA,IAAI;EACA,OAAON,EAAcO,GAAQA,EAAO,OAAOA,EAAO,QAAQC,EAAK,SAAS,YAAY;CACxF,UAAU;EACN,EAAO,MAAM;CACjB;AACJ;AAEA,SAAST,EAAoB,GAAsC;CAI/D,OAHIU,EAAI,YAAYA,EAAI,eAAe,IAC5B,QAAQ,QAAQ,IAEpB,IAAI,SAAe,GAAS,MAAW;EAC1C,IAAMC,UAAqB;GAEvB,AADAC,EAAQ,GACRC,EAAQ;EACZ,GACMC,UAAsB;GAExB,AADAF,EAAQ,GACRG,EAAO,IAAIb,EAAe,sDAAsD,CAAC;EACrF,GACMU,UAAsB;GAExB,AADAF,EAAI,oBAAoB,QAAQC,CAAM,GACtCD,EAAI,oBAAoB,SAASI,CAAO;EAC5C;EAEA,AADAJ,EAAI,iBAAiB,QAAQC,GAAQ,EAAE,MAAM,GAAK,CAAC,GACnDD,EAAI,iBAAiB,SAASI,GAAS,EAAE,MAAM,GAAK,CAAC;CACzD,CAAC;AACL;AAQA,IAAMV,oBAA4C,IAAI,IAAI;CACtD;CACA;CACA;CACA;CACA;CACA;AACJ,CAAC;AAWD,SAASD,EAAa,GAAkC;CACpD,OAAO,OAAO,cAAgB,OAAea,EAAM,qBAAqB;AAC5E;AAwBA,SAASf,EACL,GACA,GACA,GACA,IAAuB,IACZ;CACX,IAAIgB,MAAU,KAAKC,MAAW,GAC1B,MAAM,IAAIhB,EAAe,0CAA0Ce,EAAM,GAAGC,EAAO,GAAG;CAE1F,IAAMC,IAASC,EAAaH,GAAOC,CAAM,GACnCG,IAAMC,EAAaH,CAAM;CAE/B,IADAE,EAAI,UAAUE,GAAU,GAAG,GAAGN,GAAOC,CAAM,GACvCM,GAMA,OAAO;EAAE,OALK5B,EAAS,SACnBqB,GACAC,SACMrB,EAAsBwB,EAAI,aAAa,GAAG,GAAGJ,GAAOC,CAAM,CAAC,CAAC,CAAC,MAAM,IAEpE;EAAO;EAAQ,OAAO;CAAK;CAExC,IAAM,EAAE,UAAO,cAAWrB,EAAsBwB,EAAI,aAAa,GAAG,GAAGJ,GAAOC,CAAM,CAAC;CACrF,OAAO;EAAE;EAAO,QAAQO,IAASN,IAAS;EAAM,OAAO;CAAK;AAChE"}
@@ -1 +1 @@
1
- {"version":3,"file":"labels.cjs","names":[],"sources":["../../src/vision/labels.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Class label resolution: presets, lists, dicts, or auto-generated.\n *\n * Tasks call {@link resolveLabels} once at construction time to turn whatever\n * the caller passed (preset name, array, dict, or `null`) into an ordered\n * array of class names indexed by class id.\n *\n * In the browser there is no filesystem, so this module does not load labels\n * from a path — fetch the file yourself and pass an array.\n */\n\nimport { LabelMapError } from \"./core/exceptions\";\n\n/**\n * Anything accepted by {@link resolveLabels}.\n *\n * - `string[]` / `readonly string[]`: explicit names indexed by class id.\n * - `Record<number, string>`: sparse mapping (gaps filled with `class_<id>`).\n * - `string`: a preset name (e.g. `\"coco\"`).\n * - `null` / `undefined`: auto-generate `class_0` ... `class_{numClasses-1}`.\n */\nexport type LabelSpec = readonly string[] | Record<number, string> | string | null | undefined;\n\n/** COCO 2017 80-class labels in canonical class-id order. */\nexport const COCO_CLASSES: readonly string[] = Object.freeze([\n \"person\",\n \"bicycle\",\n \"car\",\n \"motorcycle\",\n \"airplane\",\n \"bus\",\n \"train\",\n \"truck\",\n \"boat\",\n \"traffic light\",\n \"fire hydrant\",\n \"stop sign\",\n \"parking meter\",\n \"bench\",\n \"bird\",\n \"cat\",\n \"dog\",\n \"horse\",\n \"sheep\",\n \"cow\",\n \"elephant\",\n \"bear\",\n \"zebra\",\n \"giraffe\",\n \"backpack\",\n \"umbrella\",\n \"handbag\",\n \"tie\",\n \"suitcase\",\n \"frisbee\",\n \"skis\",\n \"snowboard\",\n \"sports ball\",\n \"kite\",\n \"baseball bat\",\n \"baseball glove\",\n \"skateboard\",\n \"surfboard\",\n \"tennis racket\",\n \"bottle\",\n \"wine glass\",\n \"cup\",\n \"fork\",\n \"knife\",\n \"spoon\",\n \"bowl\",\n \"banana\",\n \"apple\",\n \"sandwich\",\n \"orange\",\n \"broccoli\",\n \"carrot\",\n \"hot dog\",\n \"pizza\",\n \"donut\",\n \"cake\",\n \"chair\",\n \"couch\",\n \"potted plant\",\n \"bed\",\n \"dining table\",\n \"toilet\",\n \"tv\",\n \"laptop\",\n \"mouse\",\n \"remote\",\n \"keyboard\",\n \"cell phone\",\n \"microwave\",\n \"oven\",\n \"toaster\",\n \"sink\",\n \"refrigerator\",\n \"book\",\n \"clock\",\n \"vase\",\n \"scissors\",\n \"teddy bear\",\n \"hair drier\",\n \"toothbrush\",\n]);\n\nconst PRESETS: Readonly<Record<string, readonly string[]>> = {\n coco: COCO_CLASSES,\n};\n\nexport interface ResolveLabelsOptions {\n /**\n * Expected number of classes.\n *\n * - When `spec` is `null`/`undefined`, this is required to auto-generate names.\n * - When `spec` is provided, it validates that the resolved length matches.\n */\n readonly numClasses?: number;\n}\n\n/**\n * Resolve a labels specification into an ordered array of class names.\n *\n * @throws {@link LabelMapError} if the spec is invalid, the preset is unknown,\n * or the resolved length disagrees with `numClasses`.\n */\n/**\n * Pick the fallback label spec for a model that declares no class names.\n *\n * The COCO preset is the right default for a stock YOLO export and an\n * impossible one for anything else: it names exactly 80 classes, so handing it\n * to a 3-class head makes {@link resolveLabels} throw `Resolved 80 labels but\n * the model has 3 classes` and the task cannot be created at all. A custom\n * model without baked-in `names` is an ordinary thing to have — it should come\n * up as `class_0`, `class_1`, ..., not as a failure.\n *\n * @param numClasses Classes the model predicts, or `undefined` when the output\n * shape does not say.\n * @returns `\"coco\"` when the preset can describe the model, otherwise `null`,\n * which makes {@link resolveLabels} generate `class_N` names.\n */\nexport function defaultLabels(numClasses: number | undefined): LabelSpec {\n if (numClasses === undefined || numClasses === COCO_CLASSES.length) {\n return \"coco\";\n }\n return null;\n}\n\nexport function resolveLabels(\n spec: LabelSpec,\n options: ResolveLabelsOptions = {},\n): readonly string[] {\n const labels = resolve(spec, options.numClasses);\n if (options.numClasses !== undefined && labels.length !== options.numClasses) {\n throw new LabelMapError(\n `Resolved ${labels.length} labels but the model has ${options.numClasses} classes.`,\n );\n }\n return labels;\n}\n\nfunction resolve(spec: LabelSpec, numClasses: number | undefined): readonly string[] {\n if (spec === null || spec === undefined) {\n if (numClasses === undefined) {\n throw new LabelMapError(\n \"Cannot auto-generate labels without numClasses. Pass an explicit labels spec or numClasses.\",\n );\n }\n return Array.from({ length: numClasses }, (_, i) => `class_${i}`);\n }\n\n if (Array.isArray(spec)) {\n return [...spec];\n }\n\n if (typeof spec === \"string\") {\n const preset = PRESETS[spec];\n if (preset !== undefined) {\n return preset;\n }\n throw new LabelMapError(\n `Unknown labels preset: ${JSON.stringify(spec)}. Known presets: ${Object.keys(PRESETS).join(\", \")}.`,\n );\n }\n\n if (typeof spec === \"object\") {\n const map = spec as Record<number, string>;\n const ids = Object.keys(map).map((k) => Number(k));\n if (ids.length === 0) {\n return [];\n }\n const maxId = Math.max(...ids);\n return Array.from({ length: maxId + 1 }, (_, i) => map[i] ?? `class_${i}`);\n }\n\n throw new LabelMapError(`Unsupported labels spec type: ${typeof spec}.`);\n}\n"],"mappings":"yCAyBA,IAAa,EAAkC,OAAO,OAAO,wnBAiF7D,CAAC,EAEK,EAAuD,CACzD,KAAM,CACV,EAiCA,SAAgB,EAAc,EAA2C,CAIrE,OAHI,IAAe,IAAA,IAAa,IAAe,EAAa,OACjD,OAEJ,IACX,CAEA,SAAgB,EACZ,EACA,EAAgC,CAAC,EAChB,CACjB,IAAM,EAAS,EAAQ,EAAM,EAAQ,UAAU,EAC/C,GAAI,EAAQ,aAAe,IAAA,IAAa,EAAO,SAAW,EAAQ,WAC9D,MAAM,IAAI,EAAA,cACN,YAAY,EAAO,OAAO,4BAA4B,EAAQ,WAAW,UAC7E,EAEJ,OAAO,CACX,CAEA,SAAS,EAAQ,EAAiB,EAAmD,CACjF,GAAI,GAAS,KAA4B,CACrC,GAAI,IAAe,IAAA,GACf,MAAM,IAAI,EAAA,cACN,6FACJ,EAEJ,OAAO,MAAM,KAAK,CAAE,OAAQ,CAAW,GAAI,EAAG,IAAM,SAAS,GAAG,CACpE,CAEA,GAAI,MAAM,QAAQ,CAAI,EAClB,MAAO,CAAC,GAAG,CAAI,EAGnB,GAAI,OAAO,GAAS,SAAU,CAC1B,IAAM,EAAS,EAAQ,GACvB,GAAI,IAAW,IAAA,GACX,OAAO,EAEX,MAAM,IAAI,EAAA,cACN,0BAA0B,KAAK,UAAU,CAAI,EAAE,mBAAmB,OAAO,KAAK,CAAO,CAAC,CAAC,KAAK,IAAI,EAAE,EACtG,CACJ,CAEA,GAAI,OAAO,GAAS,SAAU,CAC1B,IAAM,EAAM,EACN,EAAM,OAAO,KAAK,CAAG,CAAC,CAAC,IAAK,GAAM,OAAO,CAAC,CAAC,EACjD,GAAI,EAAI,SAAW,EACf,MAAO,CAAC,EAEZ,IAAM,EAAQ,KAAK,IAAI,GAAG,CAAG,EAC7B,OAAO,MAAM,KAAK,CAAE,OAAQ,EAAQ,CAAE,GAAI,EAAG,IAAM,EAAI,IAAM,SAAS,GAAG,CAC7E,CAEA,MAAM,IAAI,EAAA,cAAc,iCAAiC,OAAO,EAAK,EAAE,CAC3E"}
1
+ {"version":3,"file":"labels.cjs","names":["LabelMapError","require_exceptions","COCO_CLASSES","PRESETS","defaultLabels","numClasses","resolveLabels","labels","resolve","spec","options","i","preset","map","ids","k","maxId"],"sources":["../../src/vision/labels.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Class label resolution: presets, lists, dicts, or auto-generated.\n *\n * Tasks call {@link resolveLabels} once at construction time to turn whatever\n * the caller passed (preset name, array, dict, or `null`) into an ordered\n * array of class names indexed by class id.\n *\n * In the browser there is no filesystem, so this module does not load labels\n * from a path — fetch the file yourself and pass an array.\n */\n\nimport { LabelMapError } from \"./core/exceptions\";\n\n/**\n * Anything accepted by {@link resolveLabels}.\n *\n * - `string[]` / `readonly string[]`: explicit names indexed by class id.\n * - `Record<number, string>`: sparse mapping (gaps filled with `class_<id>`).\n * - `string`: a preset name (e.g. `\"coco\"`).\n * - `null` / `undefined`: auto-generate `class_0` ... `class_{numClasses-1}`.\n */\nexport type LabelSpec = readonly string[] | Record<number, string> | string | null | undefined;\n\n/** COCO 2017 80-class labels in canonical class-id order. */\nexport const COCO_CLASSES: readonly string[] = Object.freeze([\n \"person\",\n \"bicycle\",\n \"car\",\n \"motorcycle\",\n \"airplane\",\n \"bus\",\n \"train\",\n \"truck\",\n \"boat\",\n \"traffic light\",\n \"fire hydrant\",\n \"stop sign\",\n \"parking meter\",\n \"bench\",\n \"bird\",\n \"cat\",\n \"dog\",\n \"horse\",\n \"sheep\",\n \"cow\",\n \"elephant\",\n \"bear\",\n \"zebra\",\n \"giraffe\",\n \"backpack\",\n \"umbrella\",\n \"handbag\",\n \"tie\",\n \"suitcase\",\n \"frisbee\",\n \"skis\",\n \"snowboard\",\n \"sports ball\",\n \"kite\",\n \"baseball bat\",\n \"baseball glove\",\n \"skateboard\",\n \"surfboard\",\n \"tennis racket\",\n \"bottle\",\n \"wine glass\",\n \"cup\",\n \"fork\",\n \"knife\",\n \"spoon\",\n \"bowl\",\n \"banana\",\n \"apple\",\n \"sandwich\",\n \"orange\",\n \"broccoli\",\n \"carrot\",\n \"hot dog\",\n \"pizza\",\n \"donut\",\n \"cake\",\n \"chair\",\n \"couch\",\n \"potted plant\",\n \"bed\",\n \"dining table\",\n \"toilet\",\n \"tv\",\n \"laptop\",\n \"mouse\",\n \"remote\",\n \"keyboard\",\n \"cell phone\",\n \"microwave\",\n \"oven\",\n \"toaster\",\n \"sink\",\n \"refrigerator\",\n \"book\",\n \"clock\",\n \"vase\",\n \"scissors\",\n \"teddy bear\",\n \"hair drier\",\n \"toothbrush\",\n]);\n\nconst PRESETS: Readonly<Record<string, readonly string[]>> = {\n coco: COCO_CLASSES,\n};\n\nexport interface ResolveLabelsOptions {\n /**\n * Expected number of classes.\n *\n * - When `spec` is `null`/`undefined`, this is required to auto-generate names.\n * - When `spec` is provided, it validates that the resolved length matches.\n */\n readonly numClasses?: number;\n}\n\n/**\n * Resolve a labels specification into an ordered array of class names.\n *\n * @throws {@link LabelMapError} if the spec is invalid, the preset is unknown,\n * or the resolved length disagrees with `numClasses`.\n */\n/**\n * Pick the fallback label spec for a model that declares no class names.\n *\n * The COCO preset is the right default for a stock YOLO export and an\n * impossible one for anything else: it names exactly 80 classes, so handing it\n * to a 3-class head makes {@link resolveLabels} throw `Resolved 80 labels but\n * the model has 3 classes` and the task cannot be created at all. A custom\n * model without baked-in `names` is an ordinary thing to have — it should come\n * up as `class_0`, `class_1`, ..., not as a failure.\n *\n * @param numClasses Classes the model predicts, or `undefined` when the output\n * shape does not say.\n * @returns `\"coco\"` when the preset can describe the model, otherwise `null`,\n * which makes {@link resolveLabels} generate `class_N` names.\n */\nexport function defaultLabels(numClasses: number | undefined): LabelSpec {\n if (numClasses === undefined || numClasses === COCO_CLASSES.length) {\n return \"coco\";\n }\n return null;\n}\n\nexport function resolveLabels(\n spec: LabelSpec,\n options: ResolveLabelsOptions = {},\n): readonly string[] {\n const labels = resolve(spec, options.numClasses);\n if (options.numClasses !== undefined && labels.length !== options.numClasses) {\n throw new LabelMapError(\n `Resolved ${labels.length} labels but the model has ${options.numClasses} classes.`,\n );\n }\n return labels;\n}\n\nfunction resolve(spec: LabelSpec, numClasses: number | undefined): readonly string[] {\n if (spec === null || spec === undefined) {\n if (numClasses === undefined) {\n throw new LabelMapError(\n \"Cannot auto-generate labels without numClasses. Pass an explicit labels spec or numClasses.\",\n );\n }\n return Array.from({ length: numClasses }, (_, i) => `class_${i}`);\n }\n\n if (Array.isArray(spec)) {\n return [...spec];\n }\n\n if (typeof spec === \"string\") {\n const preset = PRESETS[spec];\n if (preset !== undefined) {\n return preset;\n }\n throw new LabelMapError(\n `Unknown labels preset: ${JSON.stringify(spec)}. Known presets: ${Object.keys(PRESETS).join(\", \")}.`,\n );\n }\n\n if (typeof spec === \"object\") {\n const map = spec as Record<number, string>;\n const ids = Object.keys(map).map((k) => Number(k));\n if (ids.length === 0) {\n return [];\n }\n const maxId = Math.max(...ids);\n return Array.from({ length: maxId + 1 }, (_, i) => map[i] ?? `class_${i}`);\n }\n\n throw new LabelMapError(`Unsupported labels spec type: ${typeof spec}.`);\n}\n"],"mappings":"A,yCAyBA,IAAaE,EAAkC,OAAO,OAAO,wnBAiF7D,CAAC,EAEKC,EAAuD,CACzD,KAAMD,CACV,EAiCA,SAAgBE,EAAc,EAA2C,CAIrE,OAHIC,IAAe,IAAA,IAAaA,IAAeH,EAAa,OACjD,OAEJ,IACX,CAEA,SAAgBI,EACZ,EACA,EAAgC,CAAC,EAChB,CACjB,IAAMC,EAASC,EAAQC,EAAMC,EAAQ,UAAU,EAC/C,GAAIA,EAAQ,aAAe,IAAA,IAAaH,EAAO,SAAWG,EAAQ,WAC9D,MAAM,IAAIV,EAAAA,cACN,YAAYO,EAAO,OAAO,4BAA4BG,EAAQ,WAAW,UAC7E,EAEJ,OAAOH,CACX,CAEA,SAASC,EAAQ,EAAiB,EAAmD,CACjF,GAAIC,GAAS,KAA4B,CACrC,GAAIJ,IAAe,IAAA,GACf,MAAM,IAAIL,EAAAA,cACN,6FACJ,EAEJ,OAAO,MAAM,KAAK,CAAE,OAAQK,CAAW,GAAI,EAAG,IAAM,SAASM,GAAG,CACpE,CAEA,GAAI,MAAM,QAAQF,CAAI,EAClB,MAAO,CAAC,GAAGA,CAAI,EAGnB,GAAI,OAAOA,GAAS,SAAU,CAC1B,IAAMG,EAAST,EAAQM,GACvB,GAAIG,IAAW,IAAA,GACX,OAAOA,EAEX,MAAM,IAAIZ,EAAAA,cACN,0BAA0B,KAAK,UAAUS,CAAI,EAAE,mBAAmB,OAAO,KAAKN,CAAO,CAAC,CAAC,KAAK,IAAI,EAAE,EACtG,CACJ,CAEA,GAAI,OAAOM,GAAS,SAAU,CAC1B,IAAMI,EAAMJ,EACNK,EAAM,OAAO,KAAKD,CAAG,CAAC,CAAC,IAAK,GAAM,OAAOE,CAAC,CAAC,EACjD,GAAID,EAAI,SAAW,EACf,MAAO,CAAC,EAEZ,IAAME,EAAQ,KAAK,IAAI,GAAGF,CAAG,EAC7B,OAAO,MAAM,KAAK,CAAE,OAAQE,EAAQ,CAAE,GAAI,EAAG,IAAMH,EAAIF,IAAM,SAASA,GAAG,CAC7E,CAEA,MAAM,IAAIX,EAAAA,cAAc,iCAAiC,OAAOS,EAAK,EAAE,CAC3E,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"labels.js","names":[],"sources":["../../src/vision/labels.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Class label resolution: presets, lists, dicts, or auto-generated.\n *\n * Tasks call {@link resolveLabels} once at construction time to turn whatever\n * the caller passed (preset name, array, dict, or `null`) into an ordered\n * array of class names indexed by class id.\n *\n * In the browser there is no filesystem, so this module does not load labels\n * from a path — fetch the file yourself and pass an array.\n */\n\nimport { LabelMapError } from \"./core/exceptions\";\n\n/**\n * Anything accepted by {@link resolveLabels}.\n *\n * - `string[]` / `readonly string[]`: explicit names indexed by class id.\n * - `Record<number, string>`: sparse mapping (gaps filled with `class_<id>`).\n * - `string`: a preset name (e.g. `\"coco\"`).\n * - `null` / `undefined`: auto-generate `class_0` ... `class_{numClasses-1}`.\n */\nexport type LabelSpec = readonly string[] | Record<number, string> | string | null | undefined;\n\n/** COCO 2017 80-class labels in canonical class-id order. */\nexport const COCO_CLASSES: readonly string[] = Object.freeze([\n \"person\",\n \"bicycle\",\n \"car\",\n \"motorcycle\",\n \"airplane\",\n \"bus\",\n \"train\",\n \"truck\",\n \"boat\",\n \"traffic light\",\n \"fire hydrant\",\n \"stop sign\",\n \"parking meter\",\n \"bench\",\n \"bird\",\n \"cat\",\n \"dog\",\n \"horse\",\n \"sheep\",\n \"cow\",\n \"elephant\",\n \"bear\",\n \"zebra\",\n \"giraffe\",\n \"backpack\",\n \"umbrella\",\n \"handbag\",\n \"tie\",\n \"suitcase\",\n \"frisbee\",\n \"skis\",\n \"snowboard\",\n \"sports ball\",\n \"kite\",\n \"baseball bat\",\n \"baseball glove\",\n \"skateboard\",\n \"surfboard\",\n \"tennis racket\",\n \"bottle\",\n \"wine glass\",\n \"cup\",\n \"fork\",\n \"knife\",\n \"spoon\",\n \"bowl\",\n \"banana\",\n \"apple\",\n \"sandwich\",\n \"orange\",\n \"broccoli\",\n \"carrot\",\n \"hot dog\",\n \"pizza\",\n \"donut\",\n \"cake\",\n \"chair\",\n \"couch\",\n \"potted plant\",\n \"bed\",\n \"dining table\",\n \"toilet\",\n \"tv\",\n \"laptop\",\n \"mouse\",\n \"remote\",\n \"keyboard\",\n \"cell phone\",\n \"microwave\",\n \"oven\",\n \"toaster\",\n \"sink\",\n \"refrigerator\",\n \"book\",\n \"clock\",\n \"vase\",\n \"scissors\",\n \"teddy bear\",\n \"hair drier\",\n \"toothbrush\",\n]);\n\nconst PRESETS: Readonly<Record<string, readonly string[]>> = {\n coco: COCO_CLASSES,\n};\n\nexport interface ResolveLabelsOptions {\n /**\n * Expected number of classes.\n *\n * - When `spec` is `null`/`undefined`, this is required to auto-generate names.\n * - When `spec` is provided, it validates that the resolved length matches.\n */\n readonly numClasses?: number;\n}\n\n/**\n * Resolve a labels specification into an ordered array of class names.\n *\n * @throws {@link LabelMapError} if the spec is invalid, the preset is unknown,\n * or the resolved length disagrees with `numClasses`.\n */\n/**\n * Pick the fallback label spec for a model that declares no class names.\n *\n * The COCO preset is the right default for a stock YOLO export and an\n * impossible one for anything else: it names exactly 80 classes, so handing it\n * to a 3-class head makes {@link resolveLabels} throw `Resolved 80 labels but\n * the model has 3 classes` and the task cannot be created at all. A custom\n * model without baked-in `names` is an ordinary thing to have — it should come\n * up as `class_0`, `class_1`, ..., not as a failure.\n *\n * @param numClasses Classes the model predicts, or `undefined` when the output\n * shape does not say.\n * @returns `\"coco\"` when the preset can describe the model, otherwise `null`,\n * which makes {@link resolveLabels} generate `class_N` names.\n */\nexport function defaultLabels(numClasses: number | undefined): LabelSpec {\n if (numClasses === undefined || numClasses === COCO_CLASSES.length) {\n return \"coco\";\n }\n return null;\n}\n\nexport function resolveLabels(\n spec: LabelSpec,\n options: ResolveLabelsOptions = {},\n): readonly string[] {\n const labels = resolve(spec, options.numClasses);\n if (options.numClasses !== undefined && labels.length !== options.numClasses) {\n throw new LabelMapError(\n `Resolved ${labels.length} labels but the model has ${options.numClasses} classes.`,\n );\n }\n return labels;\n}\n\nfunction resolve(spec: LabelSpec, numClasses: number | undefined): readonly string[] {\n if (spec === null || spec === undefined) {\n if (numClasses === undefined) {\n throw new LabelMapError(\n \"Cannot auto-generate labels without numClasses. Pass an explicit labels spec or numClasses.\",\n );\n }\n return Array.from({ length: numClasses }, (_, i) => `class_${i}`);\n }\n\n if (Array.isArray(spec)) {\n return [...spec];\n }\n\n if (typeof spec === \"string\") {\n const preset = PRESETS[spec];\n if (preset !== undefined) {\n return preset;\n }\n throw new LabelMapError(\n `Unknown labels preset: ${JSON.stringify(spec)}. Known presets: ${Object.keys(PRESETS).join(\", \")}.`,\n );\n }\n\n if (typeof spec === \"object\") {\n const map = spec as Record<number, string>;\n const ids = Object.keys(map).map((k) => Number(k));\n if (ids.length === 0) {\n return [];\n }\n const maxId = Math.max(...ids);\n return Array.from({ length: maxId + 1 }, (_, i) => map[i] ?? `class_${i}`);\n }\n\n throw new LabelMapError(`Unsupported labels spec type: ${typeof spec}.`);\n}\n"],"mappings":";;AAyBA,IAAa,IAAkC,OAAO,OAAO,woBAiF7D,CAAC,GAEK,IAAuD,EACzD,MAAM,EACV;AAiCA,SAAgB,EAAc,GAA2C;CAIrE,OAHI,MAAe,KAAA,KAAa,MAAe,EAAa,SACjD,SAEJ;AACX;AAEA,SAAgB,EACZ,GACA,IAAgC,CAAC,GAChB;CACjB,IAAM,IAAS,EAAQ,GAAM,EAAQ,UAAU;CAC/C,IAAI,EAAQ,eAAe,KAAA,KAAa,EAAO,WAAW,EAAQ,YAC9D,MAAM,IAAI,EACN,YAAY,EAAO,OAAO,4BAA4B,EAAQ,WAAW,UAC7E;CAEJ,OAAO;AACX;AAEA,SAAS,EAAQ,GAAiB,GAAmD;CACjF,IAAI,KAAS,MAA4B;EACrC,IAAI,MAAe,KAAA,GACf,MAAM,IAAI,EACN,6FACJ;EAEJ,OAAO,MAAM,KAAK,EAAE,QAAQ,EAAW,IAAI,GAAG,MAAM,SAAS,GAAG;CACpE;CAEA,IAAI,MAAM,QAAQ,CAAI,GAClB,OAAO,CAAC,GAAG,CAAI;CAGnB,IAAI,OAAO,KAAS,UAAU;EAC1B,IAAM,IAAS,EAAQ;EACvB,IAAI,MAAW,KAAA,GACX,OAAO;EAEX,MAAM,IAAI,EACN,0BAA0B,KAAK,UAAU,CAAI,EAAE,mBAAmB,OAAO,KAAK,CAAO,CAAC,CAAC,KAAK,IAAI,EAAE,EACtG;CACJ;CAEA,IAAI,OAAO,KAAS,UAAU;EAC1B,IAAM,IAAM,GACN,IAAM,OAAO,KAAK,CAAG,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,CAAC;EACjD,IAAI,EAAI,WAAW,GACf,OAAO,CAAC;EAEZ,IAAM,IAAQ,KAAK,IAAI,GAAG,CAAG;EAC7B,OAAO,MAAM,KAAK,EAAE,QAAQ,IAAQ,EAAE,IAAI,GAAG,MAAM,EAAI,MAAM,SAAS,GAAG;CAC7E;CAEA,MAAM,IAAI,EAAc,iCAAiC,OAAO,EAAK,EAAE;AAC3E"}
1
+ {"version":3,"file":"labels.js","names":["COCO_CLASSES","PRESETS","defaultLabels","numClasses","resolveLabels","labels","resolve","spec","options","LabelMapError","i","preset","map","ids","k","maxId"],"sources":["../../src/vision/labels.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Class label resolution: presets, lists, dicts, or auto-generated.\n *\n * Tasks call {@link resolveLabels} once at construction time to turn whatever\n * the caller passed (preset name, array, dict, or `null`) into an ordered\n * array of class names indexed by class id.\n *\n * In the browser there is no filesystem, so this module does not load labels\n * from a path — fetch the file yourself and pass an array.\n */\n\nimport { LabelMapError } from \"./core/exceptions\";\n\n/**\n * Anything accepted by {@link resolveLabels}.\n *\n * - `string[]` / `readonly string[]`: explicit names indexed by class id.\n * - `Record<number, string>`: sparse mapping (gaps filled with `class_<id>`).\n * - `string`: a preset name (e.g. `\"coco\"`).\n * - `null` / `undefined`: auto-generate `class_0` ... `class_{numClasses-1}`.\n */\nexport type LabelSpec = readonly string[] | Record<number, string> | string | null | undefined;\n\n/** COCO 2017 80-class labels in canonical class-id order. */\nexport const COCO_CLASSES: readonly string[] = Object.freeze([\n \"person\",\n \"bicycle\",\n \"car\",\n \"motorcycle\",\n \"airplane\",\n \"bus\",\n \"train\",\n \"truck\",\n \"boat\",\n \"traffic light\",\n \"fire hydrant\",\n \"stop sign\",\n \"parking meter\",\n \"bench\",\n \"bird\",\n \"cat\",\n \"dog\",\n \"horse\",\n \"sheep\",\n \"cow\",\n \"elephant\",\n \"bear\",\n \"zebra\",\n \"giraffe\",\n \"backpack\",\n \"umbrella\",\n \"handbag\",\n \"tie\",\n \"suitcase\",\n \"frisbee\",\n \"skis\",\n \"snowboard\",\n \"sports ball\",\n \"kite\",\n \"baseball bat\",\n \"baseball glove\",\n \"skateboard\",\n \"surfboard\",\n \"tennis racket\",\n \"bottle\",\n \"wine glass\",\n \"cup\",\n \"fork\",\n \"knife\",\n \"spoon\",\n \"bowl\",\n \"banana\",\n \"apple\",\n \"sandwich\",\n \"orange\",\n \"broccoli\",\n \"carrot\",\n \"hot dog\",\n \"pizza\",\n \"donut\",\n \"cake\",\n \"chair\",\n \"couch\",\n \"potted plant\",\n \"bed\",\n \"dining table\",\n \"toilet\",\n \"tv\",\n \"laptop\",\n \"mouse\",\n \"remote\",\n \"keyboard\",\n \"cell phone\",\n \"microwave\",\n \"oven\",\n \"toaster\",\n \"sink\",\n \"refrigerator\",\n \"book\",\n \"clock\",\n \"vase\",\n \"scissors\",\n \"teddy bear\",\n \"hair drier\",\n \"toothbrush\",\n]);\n\nconst PRESETS: Readonly<Record<string, readonly string[]>> = {\n coco: COCO_CLASSES,\n};\n\nexport interface ResolveLabelsOptions {\n /**\n * Expected number of classes.\n *\n * - When `spec` is `null`/`undefined`, this is required to auto-generate names.\n * - When `spec` is provided, it validates that the resolved length matches.\n */\n readonly numClasses?: number;\n}\n\n/**\n * Resolve a labels specification into an ordered array of class names.\n *\n * @throws {@link LabelMapError} if the spec is invalid, the preset is unknown,\n * or the resolved length disagrees with `numClasses`.\n */\n/**\n * Pick the fallback label spec for a model that declares no class names.\n *\n * The COCO preset is the right default for a stock YOLO export and an\n * impossible one for anything else: it names exactly 80 classes, so handing it\n * to a 3-class head makes {@link resolveLabels} throw `Resolved 80 labels but\n * the model has 3 classes` and the task cannot be created at all. A custom\n * model without baked-in `names` is an ordinary thing to have — it should come\n * up as `class_0`, `class_1`, ..., not as a failure.\n *\n * @param numClasses Classes the model predicts, or `undefined` when the output\n * shape does not say.\n * @returns `\"coco\"` when the preset can describe the model, otherwise `null`,\n * which makes {@link resolveLabels} generate `class_N` names.\n */\nexport function defaultLabels(numClasses: number | undefined): LabelSpec {\n if (numClasses === undefined || numClasses === COCO_CLASSES.length) {\n return \"coco\";\n }\n return null;\n}\n\nexport function resolveLabels(\n spec: LabelSpec,\n options: ResolveLabelsOptions = {},\n): readonly string[] {\n const labels = resolve(spec, options.numClasses);\n if (options.numClasses !== undefined && labels.length !== options.numClasses) {\n throw new LabelMapError(\n `Resolved ${labels.length} labels but the model has ${options.numClasses} classes.`,\n );\n }\n return labels;\n}\n\nfunction resolve(spec: LabelSpec, numClasses: number | undefined): readonly string[] {\n if (spec === null || spec === undefined) {\n if (numClasses === undefined) {\n throw new LabelMapError(\n \"Cannot auto-generate labels without numClasses. Pass an explicit labels spec or numClasses.\",\n );\n }\n return Array.from({ length: numClasses }, (_, i) => `class_${i}`);\n }\n\n if (Array.isArray(spec)) {\n return [...spec];\n }\n\n if (typeof spec === \"string\") {\n const preset = PRESETS[spec];\n if (preset !== undefined) {\n return preset;\n }\n throw new LabelMapError(\n `Unknown labels preset: ${JSON.stringify(spec)}. Known presets: ${Object.keys(PRESETS).join(\", \")}.`,\n );\n }\n\n if (typeof spec === \"object\") {\n const map = spec as Record<number, string>;\n const ids = Object.keys(map).map((k) => Number(k));\n if (ids.length === 0) {\n return [];\n }\n const maxId = Math.max(...ids);\n return Array.from({ length: maxId + 1 }, (_, i) => map[i] ?? `class_${i}`);\n }\n\n throw new LabelMapError(`Unsupported labels spec type: ${typeof spec}.`);\n}\n"],"mappings":";;AAyBA,IAAaA,IAAkC,OAAO,OAAO,woBAiF7D,CAAC,GAEKC,IAAuD,EACzD,MAAMD,EACV;AAiCA,SAAgBE,EAAc,GAA2C;CAIrE,OAHIC,MAAe,KAAA,KAAaA,MAAeH,EAAa,SACjD,SAEJ;AACX;AAEA,SAAgBI,EACZ,GACA,IAAgC,CAAC,GAChB;CACjB,IAAMC,IAASC,EAAQC,GAAMC,EAAQ,UAAU;CAC/C,IAAIA,EAAQ,eAAe,KAAA,KAAaH,EAAO,WAAWG,EAAQ,YAC9D,MAAM,IAAIC,EACN,YAAYJ,EAAO,OAAO,4BAA4BG,EAAQ,WAAW,UAC7E;CAEJ,OAAOH;AACX;AAEA,SAASC,EAAQ,GAAiB,GAAmD;CACjF,IAAIC,KAAS,MAA4B;EACrC,IAAIJ,MAAe,KAAA,GACf,MAAM,IAAIM,EACN,6FACJ;EAEJ,OAAO,MAAM,KAAK,EAAE,QAAQN,EAAW,IAAI,GAAG,MAAM,SAASO,GAAG;CACpE;CAEA,IAAI,MAAM,QAAQH,CAAI,GAClB,OAAO,CAAC,GAAGA,CAAI;CAGnB,IAAI,OAAOA,KAAS,UAAU;EAC1B,IAAMI,IAASV,EAAQM;EACvB,IAAII,MAAW,KAAA,GACX,OAAOA;EAEX,MAAM,IAAIF,EACN,0BAA0B,KAAK,UAAUF,CAAI,EAAE,mBAAmB,OAAO,KAAKN,CAAO,CAAC,CAAC,KAAK,IAAI,EAAE,EACtG;CACJ;CAEA,IAAI,OAAOM,KAAS,UAAU;EAC1B,IAAMK,IAAML,GACNM,IAAM,OAAO,KAAKD,CAAG,CAAC,CAAC,KAAK,MAAM,OAAOE,CAAC,CAAC;EACjD,IAAID,EAAI,WAAW,GACf,OAAO,CAAC;EAEZ,IAAME,IAAQ,KAAK,IAAI,GAAGF,CAAG;EAC7B,OAAO,MAAM,KAAK,EAAE,QAAQE,IAAQ,EAAE,IAAI,GAAG,MAAMH,EAAIF,MAAM,SAASA,GAAG;CAC7E;CAEA,MAAM,IAAID,EAAc,iCAAiC,OAAOF,EAAK,EAAE;AAC3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"luminance.cjs","names":[],"sources":["../../src/vision/luminance.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Frame-brightness helpers — measure the mean luminance of an already-decoded\n * frame (`<img>`, `<video>`, `<canvas>`, `ImageBitmap` or `OffscreenCanvas`) so\n * a UI can reject underexposed captures before paying the cost of downstream\n * inference.\n *\n * These are framework-agnostic pure functions; {@link useLiveLuminance} wires\n * {@link computeImageLuminance} into a React `requestAnimationFrame` loop for\n * live camera feedback.\n */\n\n/**\n * Longest edge (in pixels) the source is downsampled to before sampling.\n * Averaging over a small downsample is statistically equivalent for a\n * brightness threshold and orders of magnitude faster than reading every pixel\n * of a full-resolution camera frame.\n */\nexport const LUMINANCE_SAMPLE_MAX_EDGE = 256;\n\n/**\n * Drawable source we can sample luminance from.\n *\n * The list tracks what `CanvasRenderingContext2D.drawImage` accepts and we can\n * read a pixel size off, which is what the implementation actually needs.\n * `ImageBitmap` matters for the decode-downscaled path: `createImageBitmap(blob,\n * { resizeWidth })` is how a caller avoids materialising a full-resolution\n * phone photo, and the frame it hands back is the frame whose brightness has to\n * be checked.\n */\nexport type LuminanceSource =\n HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas;\n\n/**\n * Natural pixel size of the source (`0`/`0` while it is still unloaded).\n *\n * `ImageBitmap` and `OffscreenCanvas` both expose plain `width`/`height`, so\n * they fall through to the same branch as a canvas — but they are named\n * explicitly rather than left to the `naturalWidth || width` fallback, which\n * only reads as intentional for an `<img>`.\n */\nfunction sourceSize(source: LuminanceSource): { width: number; height: number } {\n if (source instanceof HTMLVideoElement) {\n return { width: source.videoWidth, height: source.videoHeight };\n }\n if (source instanceof HTMLImageElement) {\n return {\n width: source.naturalWidth || source.width,\n height: source.naturalHeight || source.height,\n };\n }\n return { width: source.width, height: source.height };\n}\n\n/**\n * Mean BT.709 luminance (`0.2126*R + 0.7152*G + 0.0722*B`) of a decoded frame,\n * scaled to `0..255`. See {@link LuminanceSource} for what counts as one.\n *\n * The source is downsampled so its longest edge is at most\n * {@link LUMINANCE_SAMPLE_MAX_EDGE} before pixels are read. The 2D context is\n * created with `willReadFrequently` so repeated sampling (live feedback) stays\n * on the fast path.\n *\n * Pass `reusableCanvas` to avoid allocating a fresh canvas every frame in a hot\n * loop; when omitted a one-shot detached canvas is created.\n *\n * @param source - the decoded frame to sample.\n * @param reusableCanvas - optional canvas reused across frames to avoid GC churn.\n * @returns The mean luminance in `0..255`, or `0` when the source is unloaded\n * (zero-sized) or a 2D context is unavailable.\n */\nexport function computeImageLuminance(\n source: LuminanceSource,\n reusableCanvas?: HTMLCanvasElement,\n): number {\n const { width: srcW, height: srcH } = sourceSize(source);\n if (srcW === 0 || srcH === 0) return 0;\n\n const scale = Math.min(1, LUMINANCE_SAMPLE_MAX_EDGE / Math.max(srcW, srcH));\n const w = Math.max(1, Math.round(srcW * scale));\n const h = Math.max(1, Math.round(srcH * scale));\n\n const canvas = reusableCanvas ?? document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n if (!ctx) return 0;\n ctx.drawImage(source, 0, 0, w, h);\n\n const data = ctx.getImageData(0, 0, w, h).data;\n let sum = 0;\n const pixelCount = w * h;\n for (let i = 0; i < data.length; i += 4) {\n sum += 0.2126 * data[i] + 0.7152 * data[i + 1] + 0.0722 * data[i + 2];\n }\n return sum / pixelCount;\n}\n\n/**\n * Whether a measured luminance clears a brightness threshold.\n *\n * `threshold` is intentionally required — a sensible value is\n * application-specific (it depends on the model, the lighting the model was\n * trained on, and the acceptable false-reject rate), so the SDK does not bake\n * in a default.\n *\n * @param luminance - measured mean luminance in `0..255`.\n * @param threshold - minimum acceptable luminance in `0..255`.\n * @returns `true` when `luminance >= threshold`.\n */\nexport function isLuminanceAcceptable(luminance: number, threshold: number): boolean {\n return luminance >= threshold;\n}\n\n/**\n * Error raised when a captured frame is too dark to be analysed reliably.\n * Carries the measured luminance and the threshold it failed so callers can\n * surface actionable feedback.\n */\nexport class LowLuminanceError extends Error {\n /** Measured mean luminance, `0..255`. */\n readonly luminance: number;\n /** Threshold that was checked against, `0..255`. */\n readonly threshold: number;\n\n /**\n * @param luminance - the measured mean luminance in `0..255`.\n * @param threshold - the threshold the measurement failed to reach.\n */\n constructor(luminance: number, threshold: number) {\n super(\"Image is too dark to analyse. Capture again in a brighter environment.\");\n this.name = \"LowLuminanceError\";\n this.luminance = luminance;\n this.threshold = threshold;\n }\n}\n"],"mappings":"AAkBA,IAAa,EAA4B,IAuBzC,SAAS,EAAW,EAA4D,CAU5E,OATI,aAAkB,iBACX,CAAE,MAAO,EAAO,WAAY,OAAQ,EAAO,WAAY,EAE9D,aAAkB,iBACX,CACH,MAAO,EAAO,cAAgB,EAAO,MACrC,OAAQ,EAAO,eAAiB,EAAO,MAC3C,EAEG,CAAE,MAAO,EAAO,MAAO,OAAQ,EAAO,MAAO,CACxD,CAmBA,SAAgB,EACZ,EACA,EACM,CACN,GAAM,CAAE,MAAO,EAAM,OAAQ,GAAS,EAAW,CAAM,EACvD,GAAI,IAAS,GAAK,IAAS,EAAG,MAAO,GAErC,IAAM,EAAQ,KAAK,IAAI,EAAA,IAA+B,KAAK,IAAI,EAAM,CAAI,CAAC,EACpE,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,EAAO,CAAK,CAAC,EACxC,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,EAAO,CAAK,CAAC,EAExC,EAAS,GAAkB,SAAS,cAAc,QAAQ,EAChE,EAAO,MAAQ,EACf,EAAO,OAAS,EAChB,IAAM,EAAM,EAAO,WAAW,KAAM,CAAE,mBAAoB,EAAK,CAAC,EAChE,GAAI,CAAC,EAAK,MAAO,GACjB,EAAI,UAAU,EAAQ,EAAG,EAAG,EAAG,CAAC,EAEhC,IAAM,EAAO,EAAI,aAAa,EAAG,EAAG,EAAG,CAAC,CAAC,CAAC,KACtC,EAAM,EACJ,EAAa,EAAI,EACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EAClC,GAAO,MAAS,EAAK,GAAK,MAAS,EAAK,EAAI,GAAK,MAAS,EAAK,EAAI,GAEvE,OAAO,EAAM,CACjB,CAcA,SAAgB,EAAsB,EAAmB,EAA4B,CACjF,OAAO,GAAa,CACxB,CAOA,IAAa,EAAb,cAAuC,KAAM,CAEzC,UAEA,UAMA,YAAY,EAAmB,EAAmB,CAC9C,MAAM,wEAAwE,EAC9E,KAAK,KAAO,oBACZ,KAAK,UAAY,EACjB,KAAK,UAAY,CACrB,CACJ"}
1
+ {"version":3,"file":"luminance.cjs","names":["LUMINANCE_SAMPLE_MAX_EDGE","sourceSize","source","computeImageLuminance","srcW","srcH","scale","w","h","canvas","reusableCanvas","ctx","data","sum","pixelCount","i","isLuminanceAcceptable","luminance","threshold","LowLuminanceError"],"sources":["../../src/vision/luminance.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Frame-brightness helpers — measure the mean luminance of an already-decoded\n * frame (`<img>`, `<video>`, `<canvas>`, `ImageBitmap` or `OffscreenCanvas`) so\n * a UI can reject underexposed captures before paying the cost of downstream\n * inference.\n *\n * These are framework-agnostic pure functions; {@link useLiveLuminance} wires\n * {@link computeImageLuminance} into a React `requestAnimationFrame` loop for\n * live camera feedback.\n */\n\n/**\n * Longest edge (in pixels) the source is downsampled to before sampling.\n * Averaging over a small downsample is statistically equivalent for a\n * brightness threshold and orders of magnitude faster than reading every pixel\n * of a full-resolution camera frame.\n */\nexport const LUMINANCE_SAMPLE_MAX_EDGE = 256;\n\n/**\n * Drawable source we can sample luminance from.\n *\n * The list tracks what `CanvasRenderingContext2D.drawImage` accepts and we can\n * read a pixel size off, which is what the implementation actually needs.\n * `ImageBitmap` matters for the decode-downscaled path: `createImageBitmap(blob,\n * { resizeWidth })` is how a caller avoids materialising a full-resolution\n * phone photo, and the frame it hands back is the frame whose brightness has to\n * be checked.\n */\nexport type LuminanceSource =\n HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas;\n\n/**\n * Natural pixel size of the source (`0`/`0` while it is still unloaded).\n *\n * `ImageBitmap` and `OffscreenCanvas` both expose plain `width`/`height`, so\n * they fall through to the same branch as a canvas — but they are named\n * explicitly rather than left to the `naturalWidth || width` fallback, which\n * only reads as intentional for an `<img>`.\n */\nfunction sourceSize(source: LuminanceSource): { width: number; height: number } {\n if (source instanceof HTMLVideoElement) {\n return { width: source.videoWidth, height: source.videoHeight };\n }\n if (source instanceof HTMLImageElement) {\n return {\n width: source.naturalWidth || source.width,\n height: source.naturalHeight || source.height,\n };\n }\n return { width: source.width, height: source.height };\n}\n\n/**\n * Mean BT.709 luminance (`0.2126*R + 0.7152*G + 0.0722*B`) of a decoded frame,\n * scaled to `0..255`. See {@link LuminanceSource} for what counts as one.\n *\n * The source is downsampled so its longest edge is at most\n * {@link LUMINANCE_SAMPLE_MAX_EDGE} before pixels are read. The 2D context is\n * created with `willReadFrequently` so repeated sampling (live feedback) stays\n * on the fast path.\n *\n * Pass `reusableCanvas` to avoid allocating a fresh canvas every frame in a hot\n * loop; when omitted a one-shot detached canvas is created.\n *\n * @param source - the decoded frame to sample.\n * @param reusableCanvas - optional canvas reused across frames to avoid GC churn.\n * @returns The mean luminance in `0..255`, or `0` when the source is unloaded\n * (zero-sized) or a 2D context is unavailable.\n */\nexport function computeImageLuminance(\n source: LuminanceSource,\n reusableCanvas?: HTMLCanvasElement,\n): number {\n const { width: srcW, height: srcH } = sourceSize(source);\n if (srcW === 0 || srcH === 0) return 0;\n\n const scale = Math.min(1, LUMINANCE_SAMPLE_MAX_EDGE / Math.max(srcW, srcH));\n const w = Math.max(1, Math.round(srcW * scale));\n const h = Math.max(1, Math.round(srcH * scale));\n\n const canvas = reusableCanvas ?? document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n if (!ctx) return 0;\n ctx.drawImage(source, 0, 0, w, h);\n\n const data = ctx.getImageData(0, 0, w, h).data;\n let sum = 0;\n const pixelCount = w * h;\n for (let i = 0; i < data.length; i += 4) {\n sum += 0.2126 * data[i] + 0.7152 * data[i + 1] + 0.0722 * data[i + 2];\n }\n return sum / pixelCount;\n}\n\n/**\n * Whether a measured luminance clears a brightness threshold.\n *\n * `threshold` is intentionally required — a sensible value is\n * application-specific (it depends on the model, the lighting the model was\n * trained on, and the acceptable false-reject rate), so the SDK does not bake\n * in a default.\n *\n * @param luminance - measured mean luminance in `0..255`.\n * @param threshold - minimum acceptable luminance in `0..255`.\n * @returns `true` when `luminance >= threshold`.\n */\nexport function isLuminanceAcceptable(luminance: number, threshold: number): boolean {\n return luminance >= threshold;\n}\n\n/**\n * Error raised when a captured frame is too dark to be analysed reliably.\n * Carries the measured luminance and the threshold it failed so callers can\n * surface actionable feedback.\n */\nexport class LowLuminanceError extends Error {\n /** Measured mean luminance, `0..255`. */\n readonly luminance: number;\n /** Threshold that was checked against, `0..255`. */\n readonly threshold: number;\n\n /**\n * @param luminance - the measured mean luminance in `0..255`.\n * @param threshold - the threshold the measurement failed to reach.\n */\n constructor(luminance: number, threshold: number) {\n super(\"Image is too dark to analyse. Capture again in a brighter environment.\");\n this.name = \"LowLuminanceError\";\n this.luminance = luminance;\n this.threshold = threshold;\n }\n}\n"],"mappings":"AAkBA,IAAaA,EAA4B,IAuBzC,SAASC,EAAW,EAA4D,CAU5E,OATIC,aAAkB,iBACX,CAAE,MAAOA,EAAO,WAAY,OAAQA,EAAO,WAAY,EAE9DA,aAAkB,iBACX,CACH,MAAOA,EAAO,cAAgBA,EAAO,MACrC,OAAQA,EAAO,eAAiBA,EAAO,MAC3C,EAEG,CAAE,MAAOA,EAAO,MAAO,OAAQA,EAAO,MAAO,CACxD,CAmBA,SAAgBC,EACZ,EACA,EACM,CACN,GAAM,CAAE,MAAOC,EAAM,OAAQC,GAASJ,EAAWC,CAAM,EACvD,GAAIE,IAAS,GAAKC,IAAS,EAAG,MAAO,GAErC,IAAMC,EAAQ,KAAK,IAAI,EAAA,IAA+B,KAAK,IAAIF,EAAMC,CAAI,CAAC,EACpEE,EAAI,KAAK,IAAI,EAAG,KAAK,MAAMH,EAAOE,CAAK,CAAC,EACxCE,EAAI,KAAK,IAAI,EAAG,KAAK,MAAMH,EAAOC,CAAK,CAAC,EAExCG,EAASC,GAAkB,SAAS,cAAc,QAAQ,EAChE,EAAO,MAAQH,EACf,EAAO,OAASC,EAChB,IAAMG,EAAMF,EAAO,WAAW,KAAM,CAAE,mBAAoB,EAAK,CAAC,EAChE,GAAI,CAACE,EAAK,MAAO,GACjBA,EAAI,UAAUT,EAAQ,EAAG,EAAGK,EAAGC,CAAC,EAEhC,IAAMI,EAAOD,EAAI,aAAa,EAAG,EAAGJ,EAAGC,CAAC,CAAC,CAAC,KACtCK,EAAM,EACJC,EAAaP,EAAIC,EACvB,IAAK,IAAIO,EAAI,EAAGA,EAAIH,EAAK,OAAQ,GAAK,EAClC,GAAO,MAASA,EAAKG,GAAK,MAASH,EAAKG,EAAI,GAAK,MAASH,EAAKG,EAAI,GAEvE,OAAOF,EAAMC,CACjB,CAcA,SAAgBE,EAAsB,EAAmB,EAA4B,CACjF,OAAOC,GAAaC,CACxB,CAOA,IAAaC,EAAb,cAAuC,KAAM,CAEzC,UAEA,UAMA,YAAY,EAAmB,EAAmB,CAC9C,MAAM,wEAAwE,EAC9E,KAAK,KAAO,oBACZ,KAAK,UAAYF,EACjB,KAAK,UAAYC,CACrB,CACJ,E"}
@@ -1 +1 @@
1
- {"version":3,"file":"luminance.js","names":[],"sources":["../../src/vision/luminance.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Frame-brightness helpers — measure the mean luminance of an already-decoded\n * frame (`<img>`, `<video>`, `<canvas>`, `ImageBitmap` or `OffscreenCanvas`) so\n * a UI can reject underexposed captures before paying the cost of downstream\n * inference.\n *\n * These are framework-agnostic pure functions; {@link useLiveLuminance} wires\n * {@link computeImageLuminance} into a React `requestAnimationFrame` loop for\n * live camera feedback.\n */\n\n/**\n * Longest edge (in pixels) the source is downsampled to before sampling.\n * Averaging over a small downsample is statistically equivalent for a\n * brightness threshold and orders of magnitude faster than reading every pixel\n * of a full-resolution camera frame.\n */\nexport const LUMINANCE_SAMPLE_MAX_EDGE = 256;\n\n/**\n * Drawable source we can sample luminance from.\n *\n * The list tracks what `CanvasRenderingContext2D.drawImage` accepts and we can\n * read a pixel size off, which is what the implementation actually needs.\n * `ImageBitmap` matters for the decode-downscaled path: `createImageBitmap(blob,\n * { resizeWidth })` is how a caller avoids materialising a full-resolution\n * phone photo, and the frame it hands back is the frame whose brightness has to\n * be checked.\n */\nexport type LuminanceSource =\n HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas;\n\n/**\n * Natural pixel size of the source (`0`/`0` while it is still unloaded).\n *\n * `ImageBitmap` and `OffscreenCanvas` both expose plain `width`/`height`, so\n * they fall through to the same branch as a canvas — but they are named\n * explicitly rather than left to the `naturalWidth || width` fallback, which\n * only reads as intentional for an `<img>`.\n */\nfunction sourceSize(source: LuminanceSource): { width: number; height: number } {\n if (source instanceof HTMLVideoElement) {\n return { width: source.videoWidth, height: source.videoHeight };\n }\n if (source instanceof HTMLImageElement) {\n return {\n width: source.naturalWidth || source.width,\n height: source.naturalHeight || source.height,\n };\n }\n return { width: source.width, height: source.height };\n}\n\n/**\n * Mean BT.709 luminance (`0.2126*R + 0.7152*G + 0.0722*B`) of a decoded frame,\n * scaled to `0..255`. See {@link LuminanceSource} for what counts as one.\n *\n * The source is downsampled so its longest edge is at most\n * {@link LUMINANCE_SAMPLE_MAX_EDGE} before pixels are read. The 2D context is\n * created with `willReadFrequently` so repeated sampling (live feedback) stays\n * on the fast path.\n *\n * Pass `reusableCanvas` to avoid allocating a fresh canvas every frame in a hot\n * loop; when omitted a one-shot detached canvas is created.\n *\n * @param source - the decoded frame to sample.\n * @param reusableCanvas - optional canvas reused across frames to avoid GC churn.\n * @returns The mean luminance in `0..255`, or `0` when the source is unloaded\n * (zero-sized) or a 2D context is unavailable.\n */\nexport function computeImageLuminance(\n source: LuminanceSource,\n reusableCanvas?: HTMLCanvasElement,\n): number {\n const { width: srcW, height: srcH } = sourceSize(source);\n if (srcW === 0 || srcH === 0) return 0;\n\n const scale = Math.min(1, LUMINANCE_SAMPLE_MAX_EDGE / Math.max(srcW, srcH));\n const w = Math.max(1, Math.round(srcW * scale));\n const h = Math.max(1, Math.round(srcH * scale));\n\n const canvas = reusableCanvas ?? document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n if (!ctx) return 0;\n ctx.drawImage(source, 0, 0, w, h);\n\n const data = ctx.getImageData(0, 0, w, h).data;\n let sum = 0;\n const pixelCount = w * h;\n for (let i = 0; i < data.length; i += 4) {\n sum += 0.2126 * data[i] + 0.7152 * data[i + 1] + 0.0722 * data[i + 2];\n }\n return sum / pixelCount;\n}\n\n/**\n * Whether a measured luminance clears a brightness threshold.\n *\n * `threshold` is intentionally required — a sensible value is\n * application-specific (it depends on the model, the lighting the model was\n * trained on, and the acceptable false-reject rate), so the SDK does not bake\n * in a default.\n *\n * @param luminance - measured mean luminance in `0..255`.\n * @param threshold - minimum acceptable luminance in `0..255`.\n * @returns `true` when `luminance >= threshold`.\n */\nexport function isLuminanceAcceptable(luminance: number, threshold: number): boolean {\n return luminance >= threshold;\n}\n\n/**\n * Error raised when a captured frame is too dark to be analysed reliably.\n * Carries the measured luminance and the threshold it failed so callers can\n * surface actionable feedback.\n */\nexport class LowLuminanceError extends Error {\n /** Measured mean luminance, `0..255`. */\n readonly luminance: number;\n /** Threshold that was checked against, `0..255`. */\n readonly threshold: number;\n\n /**\n * @param luminance - the measured mean luminance in `0..255`.\n * @param threshold - the threshold the measurement failed to reach.\n */\n constructor(luminance: number, threshold: number) {\n super(\"Image is too dark to analyse. Capture again in a brighter environment.\");\n this.name = \"LowLuminanceError\";\n this.luminance = luminance;\n this.threshold = threshold;\n }\n}\n"],"mappings":";AAkBA,IAAa,IAA4B;AAuBzC,SAAS,EAAW,GAA4D;CAU5E,OATI,aAAkB,mBACX;EAAE,OAAO,EAAO;EAAY,QAAQ,EAAO;CAAY,IAE9D,aAAkB,mBACX;EACH,OAAO,EAAO,gBAAgB,EAAO;EACrC,QAAQ,EAAO,iBAAiB,EAAO;CAC3C,IAEG;EAAE,OAAO,EAAO;EAAO,QAAQ,EAAO;CAAO;AACxD;AAmBA,SAAgB,EACZ,GACA,GACM;CACN,IAAM,EAAE,OAAO,GAAM,QAAQ,MAAS,EAAW,CAAM;CACvD,IAAI,MAAS,KAAK,MAAS,GAAG,OAAO;CAErC,IAAM,IAAQ,KAAK,IAAI,GAAA,MAA+B,KAAK,IAAI,GAAM,CAAI,CAAC,GACpE,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAO,CAAK,CAAC,GACxC,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,IAAO,CAAK,CAAC,GAExC,IAAS,KAAkB,SAAS,cAAc,QAAQ;CAEhE,AADA,EAAO,QAAQ,GACf,EAAO,SAAS;CAChB,IAAM,IAAM,EAAO,WAAW,MAAM,EAAE,oBAAoB,GAAK,CAAC;CAChE,IAAI,CAAC,GAAK,OAAO;CACjB,EAAI,UAAU,GAAQ,GAAG,GAAG,GAAG,CAAC;CAEhC,IAAM,IAAO,EAAI,aAAa,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,MACtC,IAAM,GACJ,IAAa,IAAI;CACvB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK,GAClC,KAAO,QAAS,EAAK,KAAK,QAAS,EAAK,IAAI,KAAK,QAAS,EAAK,IAAI;CAEvE,OAAO,IAAM;AACjB;AAcA,SAAgB,EAAsB,GAAmB,GAA4B;CACjF,OAAO,KAAa;AACxB;AAOA,IAAa,IAAb,cAAuC,MAAM;CAEzC;CAEA;CAMA,YAAY,GAAmB,GAAmB;EAI9C,AAHA,MAAM,wEAAwE,GAC9E,KAAK,OAAO,qBACZ,KAAK,YAAY,GACjB,KAAK,YAAY;CACrB;AACJ"}
1
+ {"version":3,"file":"luminance.js","names":["LUMINANCE_SAMPLE_MAX_EDGE","sourceSize","source","computeImageLuminance","srcW","srcH","scale","w","h","canvas","reusableCanvas","ctx","data","sum","pixelCount","i","isLuminanceAcceptable","luminance","threshold","LowLuminanceError"],"sources":["../../src/vision/luminance.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Frame-brightness helpers — measure the mean luminance of an already-decoded\n * frame (`<img>`, `<video>`, `<canvas>`, `ImageBitmap` or `OffscreenCanvas`) so\n * a UI can reject underexposed captures before paying the cost of downstream\n * inference.\n *\n * These are framework-agnostic pure functions; {@link useLiveLuminance} wires\n * {@link computeImageLuminance} into a React `requestAnimationFrame` loop for\n * live camera feedback.\n */\n\n/**\n * Longest edge (in pixels) the source is downsampled to before sampling.\n * Averaging over a small downsample is statistically equivalent for a\n * brightness threshold and orders of magnitude faster than reading every pixel\n * of a full-resolution camera frame.\n */\nexport const LUMINANCE_SAMPLE_MAX_EDGE = 256;\n\n/**\n * Drawable source we can sample luminance from.\n *\n * The list tracks what `CanvasRenderingContext2D.drawImage` accepts and we can\n * read a pixel size off, which is what the implementation actually needs.\n * `ImageBitmap` matters for the decode-downscaled path: `createImageBitmap(blob,\n * { resizeWidth })` is how a caller avoids materialising a full-resolution\n * phone photo, and the frame it hands back is the frame whose brightness has to\n * be checked.\n */\nexport type LuminanceSource =\n HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas;\n\n/**\n * Natural pixel size of the source (`0`/`0` while it is still unloaded).\n *\n * `ImageBitmap` and `OffscreenCanvas` both expose plain `width`/`height`, so\n * they fall through to the same branch as a canvas — but they are named\n * explicitly rather than left to the `naturalWidth || width` fallback, which\n * only reads as intentional for an `<img>`.\n */\nfunction sourceSize(source: LuminanceSource): { width: number; height: number } {\n if (source instanceof HTMLVideoElement) {\n return { width: source.videoWidth, height: source.videoHeight };\n }\n if (source instanceof HTMLImageElement) {\n return {\n width: source.naturalWidth || source.width,\n height: source.naturalHeight || source.height,\n };\n }\n return { width: source.width, height: source.height };\n}\n\n/**\n * Mean BT.709 luminance (`0.2126*R + 0.7152*G + 0.0722*B`) of a decoded frame,\n * scaled to `0..255`. See {@link LuminanceSource} for what counts as one.\n *\n * The source is downsampled so its longest edge is at most\n * {@link LUMINANCE_SAMPLE_MAX_EDGE} before pixels are read. The 2D context is\n * created with `willReadFrequently` so repeated sampling (live feedback) stays\n * on the fast path.\n *\n * Pass `reusableCanvas` to avoid allocating a fresh canvas every frame in a hot\n * loop; when omitted a one-shot detached canvas is created.\n *\n * @param source - the decoded frame to sample.\n * @param reusableCanvas - optional canvas reused across frames to avoid GC churn.\n * @returns The mean luminance in `0..255`, or `0` when the source is unloaded\n * (zero-sized) or a 2D context is unavailable.\n */\nexport function computeImageLuminance(\n source: LuminanceSource,\n reusableCanvas?: HTMLCanvasElement,\n): number {\n const { width: srcW, height: srcH } = sourceSize(source);\n if (srcW === 0 || srcH === 0) return 0;\n\n const scale = Math.min(1, LUMINANCE_SAMPLE_MAX_EDGE / Math.max(srcW, srcH));\n const w = Math.max(1, Math.round(srcW * scale));\n const h = Math.max(1, Math.round(srcH * scale));\n\n const canvas = reusableCanvas ?? document.createElement(\"canvas\");\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n if (!ctx) return 0;\n ctx.drawImage(source, 0, 0, w, h);\n\n const data = ctx.getImageData(0, 0, w, h).data;\n let sum = 0;\n const pixelCount = w * h;\n for (let i = 0; i < data.length; i += 4) {\n sum += 0.2126 * data[i] + 0.7152 * data[i + 1] + 0.0722 * data[i + 2];\n }\n return sum / pixelCount;\n}\n\n/**\n * Whether a measured luminance clears a brightness threshold.\n *\n * `threshold` is intentionally required — a sensible value is\n * application-specific (it depends on the model, the lighting the model was\n * trained on, and the acceptable false-reject rate), so the SDK does not bake\n * in a default.\n *\n * @param luminance - measured mean luminance in `0..255`.\n * @param threshold - minimum acceptable luminance in `0..255`.\n * @returns `true` when `luminance >= threshold`.\n */\nexport function isLuminanceAcceptable(luminance: number, threshold: number): boolean {\n return luminance >= threshold;\n}\n\n/**\n * Error raised when a captured frame is too dark to be analysed reliably.\n * Carries the measured luminance and the threshold it failed so callers can\n * surface actionable feedback.\n */\nexport class LowLuminanceError extends Error {\n /** Measured mean luminance, `0..255`. */\n readonly luminance: number;\n /** Threshold that was checked against, `0..255`. */\n readonly threshold: number;\n\n /**\n * @param luminance - the measured mean luminance in `0..255`.\n * @param threshold - the threshold the measurement failed to reach.\n */\n constructor(luminance: number, threshold: number) {\n super(\"Image is too dark to analyse. Capture again in a brighter environment.\");\n this.name = \"LowLuminanceError\";\n this.luminance = luminance;\n this.threshold = threshold;\n }\n}\n"],"mappings":";AAkBA,IAAaA,IAA4B;AAuBzC,SAASC,EAAW,GAA4D;CAU5E,OATIC,aAAkB,mBACX;EAAE,OAAOA,EAAO;EAAY,QAAQA,EAAO;CAAY,IAE9DA,aAAkB,mBACX;EACH,OAAOA,EAAO,gBAAgBA,EAAO;EACrC,QAAQA,EAAO,iBAAiBA,EAAO;CAC3C,IAEG;EAAE,OAAOA,EAAO;EAAO,QAAQA,EAAO;CAAO;AACxD;AAmBA,SAAgBC,EACZ,GACA,GACM;CACN,IAAM,EAAE,OAAOC,GAAM,QAAQC,MAASJ,EAAWC,CAAM;CACvD,IAAIE,MAAS,KAAKC,MAAS,GAAG,OAAO;CAErC,IAAMC,IAAQ,KAAK,IAAI,GAAA,MAA+B,KAAK,IAAIF,GAAMC,CAAI,CAAC,GACpEE,IAAI,KAAK,IAAI,GAAG,KAAK,MAAMH,IAAOE,CAAK,CAAC,GACxCE,IAAI,KAAK,IAAI,GAAG,KAAK,MAAMH,IAAOC,CAAK,CAAC,GAExCG,IAASC,KAAkB,SAAS,cAAc,QAAQ;CAEhE,AADA,EAAO,QAAQH,GACf,EAAO,SAASC;CAChB,IAAMG,IAAMF,EAAO,WAAW,MAAM,EAAE,oBAAoB,GAAK,CAAC;CAChE,IAAI,CAACE,GAAK,OAAO;CACjB,EAAI,UAAUT,GAAQ,GAAG,GAAGK,GAAGC,CAAC;CAEhC,IAAMI,IAAOD,EAAI,aAAa,GAAG,GAAGJ,GAAGC,CAAC,CAAC,CAAC,MACtCK,IAAM,GACJC,IAAaP,IAAIC;CACvB,KAAK,IAAIO,IAAI,GAAGA,IAAIH,EAAK,QAAQ,KAAK,GAClC,KAAO,QAASA,EAAKG,KAAK,QAASH,EAAKG,IAAI,KAAK,QAASH,EAAKG,IAAI;CAEvE,OAAOF,IAAMC;AACjB;AAcA,SAAgBE,EAAsB,GAAmB,GAA4B;CACjF,OAAOC,KAAaC;AACxB;AAOA,IAAaC,IAAb,cAAuC,MAAM;CAEzC;CAEA;CAMA,YAAY,GAAmB,GAAmB;EAI9C,AAHA,MAAM,wEAAwE,GAC9E,KAAK,OAAO,qBACZ,KAAK,YAAYF,GACjB,KAAK,YAAYC;CACrB;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalization.cjs","names":[],"sources":["../../src/vision/normalization.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Which preprocessing a classifier expects its input to have had.\n *\n * A classifier is trained on a specific tensor, and feeding it a differently\n * prepared one degrades it silently — no exception, no warning, just worse\n * predictions. The two families this SDK sees most disagree completely:\n * torchvision-style models want the ImageNet mean and deviation subtracted and\n * divided out, while an Ultralytics classification head consumes raw `[0, 1]`.\n *\n * Guessing wrong is not detectable from the outside, but it is not a guess: an\n * Ultralytics export stamps `author` and `task` into its own metadata, and every\n * task in this SDK already reads that map for the class names.\n *\n * Mirrors `ort_vision_sdk.normalization` in the Python SDK; the two must agree,\n * because the same model file is driven by both.\n */\n\n/**\n * Which preprocessing the classifier expects its input to have had.\n *\n * - `\"auto\"` (the default wherever it is accepted) reads the model's own export\n * metadata and picks. An Ultralytics classification head gets\n * `\"ultralytics\"`; anything else gets `\"imagenet\"`.\n * - `\"imagenet\"` subtracts the ImageNet mean and divides by the ImageNet\n * deviation — the torchvision convention.\n * - `\"ultralytics\"` leaves the image in `[0, 1]`. Ultralytics' own classifier\n * applies no mean/std at all, so anything else feeds it images it never saw\n * in training.\n * - `\"none\"` is the same arithmetic as `\"ultralytics\"` — identity — under a\n * name that says \"this model wants raw `[0, 1]`\" rather than naming a vendor.\n */\nexport type Normalization = \"auto\" | \"imagenet\" | \"ultralytics\" | \"none\";\n\n/** Per-channel RGB mean of ImageNet, the torchvision preprocessing convention. */\nexport const IMAGENET_MEAN: readonly [number, number, number] = [0.485, 0.456, 0.406];\n\n/** Per-channel RGB standard deviation of ImageNet. */\nexport const IMAGENET_STD: readonly [number, number, number] = [0.229, 0.224, 0.225];\n\n/** Mean that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_MEAN: readonly [number, number, number] = [0, 0, 0];\n\n/** Deviation that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_STD: readonly [number, number, number] = [1, 1, 1];\n\n/** Name reported when the caller supplied `mean`/`std` directly. */\nexport const CUSTOM_NORMALIZATION = \"custom\";\n\nconst PRESETS: Readonly<\n Record<string, readonly [readonly [number, number, number], readonly [number, number, number]]>\n> = {\n imagenet: [IMAGENET_MEAN, IMAGENET_STD],\n ultralytics: [IDENTITY_MEAN, IDENTITY_STD],\n none: [IDENTITY_MEAN, IDENTITY_STD],\n};\n\n/** What {@link resolveNormalization} settled on. */\nexport interface ResolvedNormalization {\n /** The preset name, or `\"custom\"` when the caller supplied the values. */\n readonly name: string;\n /** Per-channel mean to subtract. */\n readonly mean: readonly [number, number, number];\n /** Per-channel deviation to divide by. */\n readonly std: readonly [number, number, number];\n}\n\n/**\n * Whether a metadata map came out of `YOLO(...).export(format=\"onnx\")`.\n *\n * Every Ultralytics export stamps `author` and `task` into its metadata, and the\n * pair is unambiguous: `\"Ultralytics\"` plus `\"classify\"` is a classification head\n * from that codebase and nothing else.\n *\n * @param metadata The model's custom metadata map.\n */\nexport function isUltralyticsClassifier(metadata: Readonly<Record<string, string>>): boolean {\n return (\n (metadata.author ?? \"\").trim().toLowerCase() === \"ultralytics\" &&\n (metadata.task ?? \"\").trim().toLowerCase() === \"classify\"\n );\n}\n\n/**\n * Settle which `mean`/`std` to apply, and what to call the choice.\n *\n * Explicit `mean`/`std` always win — they are the escape hatch for a model whose\n * preprocessing neither preset describes. Anything they leave open falls back to\n * the preset, so passing only a `mean` does not silently reset the deviation\n * to 1.\n *\n * Warns (via `console.warn`) when the model is an Ultralytics export and the\n * supplied values are not the identity it was trained with. Nothing fails in\n * that case: the prediction has the right shape and is simply less accurate,\n * which is exactly why it is worth saying out loud.\n *\n * @param metadata The model's custom metadata map, read to detect the family.\n * @param options The preset asked for, plus any explicit `mean`/`std`.\n * @throws {RangeError} If `normalization` is not a known preset, or names one\n * while `mean`/`std` are also supplied — two answers to the same question.\n */\nexport function resolveNormalization(\n metadata: Readonly<Record<string, string>>,\n options: {\n readonly normalization?: Normalization;\n readonly mean?: readonly [number, number, number];\n readonly std?: readonly [number, number, number];\n } = {},\n): ResolvedNormalization {\n const normalization = options.normalization ?? \"auto\";\n const explicit = options.mean !== undefined || options.std !== undefined;\n\n if (normalization !== \"auto\" && PRESETS[normalization] === undefined) {\n throw new RangeError(\n `normalization must be one of 'auto', 'imagenet', 'ultralytics', 'none'; ` +\n `got ${JSON.stringify(normalization)}.`,\n );\n }\n if (explicit && normalization !== \"auto\") {\n throw new RangeError(\n `Pass either normalization=${JSON.stringify(normalization)} or explicit mean/std, not both.`,\n );\n }\n\n const ultralytics = isUltralyticsClassifier(metadata);\n const preset =\n normalization === \"auto\" ? (ultralytics ? \"ultralytics\" : \"imagenet\") : normalization;\n const [presetMean, presetStd] = PRESETS[preset] as readonly [\n readonly [number, number, number],\n readonly [number, number, number],\n ];\n\n if (!explicit) {\n return { name: preset, mean: presetMean, std: presetStd };\n }\n\n const mean = options.mean ?? presetMean;\n const std = options.std ?? presetStd;\n if (ultralytics && !(isIdentity(mean, IDENTITY_MEAN) && isIdentity(std, IDENTITY_STD))) {\n console.warn(\n \"The classifier is an Ultralytics export, whose classification head is trained on raw \" +\n `[0, 1] images, but mean=${JSON.stringify(mean)} / std=${JSON.stringify(std)} was ` +\n \"requested. It will be fed images normalized in a way it never saw in training, which \" +\n \"degrades accuracy without raising anything. Drop mean/std to let normalization='auto' \" +\n \"pick the identity.\",\n );\n }\n return { name: CUSTOM_NORMALIZATION, mean, std };\n}\n\n/**\n * Whether two channel triples are equal.\n *\n * @param value The triple to check.\n * @param reference The triple to compare against.\n */\nfunction isIdentity(\n value: readonly [number, number, number],\n reference: readonly [number, number, number],\n): boolean {\n return value.every((entry, index) => entry === reference[index]);\n}\n"],"mappings":"AAmCA,IAAa,EAAmD,CAAC,KAAO,KAAO,IAAK,EAGvE,EAAkD,CAAC,KAAO,KAAO,IAAK,EAGtE,EAAmD,CAAC,EAAG,EAAG,CAAC,EAG3D,EAAkD,CAAC,EAAG,EAAG,CAAC,EAG1D,EAAuB,SAE9B,EAEF,CACA,SAAU,CAAC,EAAe,CAAY,EACtC,YAAa,CAAC,EAAe,CAAY,EACzC,KAAM,CAAC,EAAe,CAAY,CACtC,EAqBA,SAAgB,EAAwB,EAAqD,CACzF,OACK,EAAS,QAAU,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,IAAM,gBAChD,EAAS,MAAQ,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,IAAM,UAEvD,CAoBA,SAAgB,EACZ,EACA,EAII,CAAC,EACgB,CACrB,IAAM,EAAgB,EAAQ,eAAiB,OACzC,EAAW,EAAQ,OAAS,IAAA,IAAa,EAAQ,MAAQ,IAAA,GAE/D,GAAI,IAAkB,QAAU,EAAQ,KAAmB,IAAA,GACvD,MAAU,WACN,+EACW,KAAK,UAAU,CAAa,EAAE,EAC7C,EAEJ,GAAI,GAAY,IAAkB,OAC9B,MAAU,WACN,6BAA6B,KAAK,UAAU,CAAa,EAAE,iCAC/D,EAGJ,IAAM,EAAc,EAAwB,CAAQ,EAC9C,EACF,IAAkB,OAAU,EAAc,cAAgB,WAAc,EACtE,CAAC,EAAY,GAAa,EAAQ,GAKxC,GAAI,CAAC,EACD,MAAO,CAAE,KAAM,EAAQ,KAAM,EAAY,IAAK,CAAU,EAG5D,IAAM,EAAO,EAAQ,MAAQ,EACvB,EAAM,EAAQ,KAAO,EAU3B,OATI,GAAe,EAAE,EAAW,EAAM,CAAa,GAAK,EAAW,EAAK,CAAY,IAChF,QAAQ,KACJ,gHAC+B,KAAK,UAAU,CAAI,EAAE,SAAS,KAAK,UAAU,CAAG,EAAE,mMAIrF,EAEG,CAAE,KAAM,EAAsB,OAAM,KAAI,CACnD,CAQA,SAAS,EACL,EACA,EACO,CACP,OAAO,EAAM,OAAO,EAAO,IAAU,IAAU,EAAU,EAAM,CACnE"}
1
+ {"version":3,"file":"normalization.cjs","names":["IMAGENET_MEAN","IMAGENET_STD","IDENTITY_MEAN","IDENTITY_STD","CUSTOM_NORMALIZATION","PRESETS","isUltralyticsClassifier","metadata","resolveNormalization","normalization","options","explicit","ultralytics","preset","presetMean","presetStd","mean","std","isIdentity","value","entry","reference","index"],"sources":["../../src/vision/normalization.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Which preprocessing a classifier expects its input to have had.\n *\n * A classifier is trained on a specific tensor, and feeding it a differently\n * prepared one degrades it silently — no exception, no warning, just worse\n * predictions. The two families this SDK sees most disagree completely:\n * torchvision-style models want the ImageNet mean and deviation subtracted and\n * divided out, while an Ultralytics classification head consumes raw `[0, 1]`.\n *\n * Guessing wrong is not detectable from the outside, but it is not a guess: an\n * Ultralytics export stamps `author` and `task` into its own metadata, and every\n * task in this SDK already reads that map for the class names.\n *\n * Mirrors `ort_vision_sdk.normalization` in the Python SDK; the two must agree,\n * because the same model file is driven by both.\n */\n\n/**\n * Which preprocessing the classifier expects its input to have had.\n *\n * - `\"auto\"` (the default wherever it is accepted) reads the model's own export\n * metadata and picks. An Ultralytics classification head gets\n * `\"ultralytics\"`; anything else gets `\"imagenet\"`.\n * - `\"imagenet\"` subtracts the ImageNet mean and divides by the ImageNet\n * deviation — the torchvision convention.\n * - `\"ultralytics\"` leaves the image in `[0, 1]`. Ultralytics' own classifier\n * applies no mean/std at all, so anything else feeds it images it never saw\n * in training.\n * - `\"none\"` is the same arithmetic as `\"ultralytics\"` — identity — under a\n * name that says \"this model wants raw `[0, 1]`\" rather than naming a vendor.\n */\nexport type Normalization = \"auto\" | \"imagenet\" | \"ultralytics\" | \"none\";\n\n/** Per-channel RGB mean of ImageNet, the torchvision preprocessing convention. */\nexport const IMAGENET_MEAN: readonly [number, number, number] = [0.485, 0.456, 0.406];\n\n/** Per-channel RGB standard deviation of ImageNet. */\nexport const IMAGENET_STD: readonly [number, number, number] = [0.229, 0.224, 0.225];\n\n/** Mean that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_MEAN: readonly [number, number, number] = [0, 0, 0];\n\n/** Deviation that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_STD: readonly [number, number, number] = [1, 1, 1];\n\n/** Name reported when the caller supplied `mean`/`std` directly. */\nexport const CUSTOM_NORMALIZATION = \"custom\";\n\nconst PRESETS: Readonly<\n Record<string, readonly [readonly [number, number, number], readonly [number, number, number]]>\n> = {\n imagenet: [IMAGENET_MEAN, IMAGENET_STD],\n ultralytics: [IDENTITY_MEAN, IDENTITY_STD],\n none: [IDENTITY_MEAN, IDENTITY_STD],\n};\n\n/** What {@link resolveNormalization} settled on. */\nexport interface ResolvedNormalization {\n /** The preset name, or `\"custom\"` when the caller supplied the values. */\n readonly name: string;\n /** Per-channel mean to subtract. */\n readonly mean: readonly [number, number, number];\n /** Per-channel deviation to divide by. */\n readonly std: readonly [number, number, number];\n}\n\n/**\n * Whether a metadata map came out of `YOLO(...).export(format=\"onnx\")`.\n *\n * Every Ultralytics export stamps `author` and `task` into its metadata, and the\n * pair is unambiguous: `\"Ultralytics\"` plus `\"classify\"` is a classification head\n * from that codebase and nothing else.\n *\n * @param metadata The model's custom metadata map.\n */\nexport function isUltralyticsClassifier(metadata: Readonly<Record<string, string>>): boolean {\n return (\n (metadata.author ?? \"\").trim().toLowerCase() === \"ultralytics\" &&\n (metadata.task ?? \"\").trim().toLowerCase() === \"classify\"\n );\n}\n\n/**\n * Settle which `mean`/`std` to apply, and what to call the choice.\n *\n * Explicit `mean`/`std` always win — they are the escape hatch for a model whose\n * preprocessing neither preset describes. Anything they leave open falls back to\n * the preset, so passing only a `mean` does not silently reset the deviation\n * to 1.\n *\n * Warns (via `console.warn`) when the model is an Ultralytics export and the\n * supplied values are not the identity it was trained with. Nothing fails in\n * that case: the prediction has the right shape and is simply less accurate,\n * which is exactly why it is worth saying out loud.\n *\n * @param metadata The model's custom metadata map, read to detect the family.\n * @param options The preset asked for, plus any explicit `mean`/`std`.\n * @throws {RangeError} If `normalization` is not a known preset, or names one\n * while `mean`/`std` are also supplied — two answers to the same question.\n */\nexport function resolveNormalization(\n metadata: Readonly<Record<string, string>>,\n options: {\n readonly normalization?: Normalization;\n readonly mean?: readonly [number, number, number];\n readonly std?: readonly [number, number, number];\n } = {},\n): ResolvedNormalization {\n const normalization = options.normalization ?? \"auto\";\n const explicit = options.mean !== undefined || options.std !== undefined;\n\n if (normalization !== \"auto\" && PRESETS[normalization] === undefined) {\n throw new RangeError(\n `normalization must be one of 'auto', 'imagenet', 'ultralytics', 'none'; ` +\n `got ${JSON.stringify(normalization)}.`,\n );\n }\n if (explicit && normalization !== \"auto\") {\n throw new RangeError(\n `Pass either normalization=${JSON.stringify(normalization)} or explicit mean/std, not both.`,\n );\n }\n\n const ultralytics = isUltralyticsClassifier(metadata);\n const preset =\n normalization === \"auto\" ? (ultralytics ? \"ultralytics\" : \"imagenet\") : normalization;\n const [presetMean, presetStd] = PRESETS[preset] as readonly [\n readonly [number, number, number],\n readonly [number, number, number],\n ];\n\n if (!explicit) {\n return { name: preset, mean: presetMean, std: presetStd };\n }\n\n const mean = options.mean ?? presetMean;\n const std = options.std ?? presetStd;\n if (ultralytics && !(isIdentity(mean, IDENTITY_MEAN) && isIdentity(std, IDENTITY_STD))) {\n console.warn(\n \"The classifier is an Ultralytics export, whose classification head is trained on raw \" +\n `[0, 1] images, but mean=${JSON.stringify(mean)} / std=${JSON.stringify(std)} was ` +\n \"requested. It will be fed images normalized in a way it never saw in training, which \" +\n \"degrades accuracy without raising anything. Drop mean/std to let normalization='auto' \" +\n \"pick the identity.\",\n );\n }\n return { name: CUSTOM_NORMALIZATION, mean, std };\n}\n\n/**\n * Whether two channel triples are equal.\n *\n * @param value The triple to check.\n * @param reference The triple to compare against.\n */\nfunction isIdentity(\n value: readonly [number, number, number],\n reference: readonly [number, number, number],\n): boolean {\n return value.every((entry, index) => entry === reference[index]);\n}\n"],"mappings":"AAmCA,IAAaA,EAAmD,CAAC,KAAO,KAAO,IAAK,EAGvEC,EAAkD,CAAC,KAAO,KAAO,IAAK,EAGtEC,EAAmD,CAAC,EAAG,EAAG,CAAC,EAG3DC,EAAkD,CAAC,EAAG,EAAG,CAAC,EAG1DC,EAAuB,SAE9BC,EAEF,CACA,SAAU,CAACL,EAAeC,CAAY,EACtC,YAAa,CAACC,EAAeC,CAAY,EACzC,KAAM,CAACD,EAAeC,CAAY,CACtC,EAqBA,SAAgBG,EAAwB,EAAqD,CACzF,OACKC,EAAS,QAAU,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,IAAM,gBAChDA,EAAS,MAAQ,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,IAAM,UAEvD,CAoBA,SAAgBC,EACZ,EACA,EAII,CAAC,EACgB,CACrB,IAAMC,EAAgBC,EAAQ,eAAiB,OACzCC,EAAWD,EAAQ,OAAS,IAAA,IAAaA,EAAQ,MAAQ,IAAA,GAE/D,GAAID,IAAkB,QAAUJ,EAAQI,KAAmB,IAAA,GACvD,MAAU,WACN,+EACW,KAAK,UAAUA,CAAa,EAAE,EAC7C,EAEJ,GAAIE,GAAYF,IAAkB,OAC9B,MAAU,WACN,6BAA6B,KAAK,UAAUA,CAAa,EAAE,iCAC/D,EAGJ,IAAMG,EAAcN,EAAwBC,CAAQ,EAC9CM,EACFJ,IAAkB,OAAUG,EAAc,cAAgB,WAAcH,EACtE,CAACK,EAAYC,GAAaV,EAAQQ,GAKxC,GAAI,CAACF,EACD,MAAO,CAAE,KAAME,EAAQ,KAAMC,EAAY,IAAKC,CAAU,EAG5D,IAAMC,EAAON,EAAQ,MAAQI,EACvBG,EAAMP,EAAQ,KAAOK,EAU3B,OATIH,GAAe,EAAEM,EAAWF,EAAMd,CAAa,GAAKgB,EAAWD,EAAKd,CAAY,IAChF,QAAQ,KACJ,gHAC+B,KAAK,UAAUa,CAAI,EAAE,SAAS,KAAK,UAAUC,CAAG,EAAE,mMAIrF,EAEG,CAAE,KAAMb,EAAsB,OAAM,KAAI,CACnD,CAQA,SAASc,EACL,EACA,EACO,CACP,OAAOC,EAAM,OAAO,EAAO,IAAUC,IAAUC,EAAUC,EAAM,CACnE,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalization.js","names":[],"sources":["../../src/vision/normalization.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Which preprocessing a classifier expects its input to have had.\n *\n * A classifier is trained on a specific tensor, and feeding it a differently\n * prepared one degrades it silently — no exception, no warning, just worse\n * predictions. The two families this SDK sees most disagree completely:\n * torchvision-style models want the ImageNet mean and deviation subtracted and\n * divided out, while an Ultralytics classification head consumes raw `[0, 1]`.\n *\n * Guessing wrong is not detectable from the outside, but it is not a guess: an\n * Ultralytics export stamps `author` and `task` into its own metadata, and every\n * task in this SDK already reads that map for the class names.\n *\n * Mirrors `ort_vision_sdk.normalization` in the Python SDK; the two must agree,\n * because the same model file is driven by both.\n */\n\n/**\n * Which preprocessing the classifier expects its input to have had.\n *\n * - `\"auto\"` (the default wherever it is accepted) reads the model's own export\n * metadata and picks. An Ultralytics classification head gets\n * `\"ultralytics\"`; anything else gets `\"imagenet\"`.\n * - `\"imagenet\"` subtracts the ImageNet mean and divides by the ImageNet\n * deviation — the torchvision convention.\n * - `\"ultralytics\"` leaves the image in `[0, 1]`. Ultralytics' own classifier\n * applies no mean/std at all, so anything else feeds it images it never saw\n * in training.\n * - `\"none\"` is the same arithmetic as `\"ultralytics\"` — identity — under a\n * name that says \"this model wants raw `[0, 1]`\" rather than naming a vendor.\n */\nexport type Normalization = \"auto\" | \"imagenet\" | \"ultralytics\" | \"none\";\n\n/** Per-channel RGB mean of ImageNet, the torchvision preprocessing convention. */\nexport const IMAGENET_MEAN: readonly [number, number, number] = [0.485, 0.456, 0.406];\n\n/** Per-channel RGB standard deviation of ImageNet. */\nexport const IMAGENET_STD: readonly [number, number, number] = [0.229, 0.224, 0.225];\n\n/** Mean that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_MEAN: readonly [number, number, number] = [0, 0, 0];\n\n/** Deviation that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_STD: readonly [number, number, number] = [1, 1, 1];\n\n/** Name reported when the caller supplied `mean`/`std` directly. */\nexport const CUSTOM_NORMALIZATION = \"custom\";\n\nconst PRESETS: Readonly<\n Record<string, readonly [readonly [number, number, number], readonly [number, number, number]]>\n> = {\n imagenet: [IMAGENET_MEAN, IMAGENET_STD],\n ultralytics: [IDENTITY_MEAN, IDENTITY_STD],\n none: [IDENTITY_MEAN, IDENTITY_STD],\n};\n\n/** What {@link resolveNormalization} settled on. */\nexport interface ResolvedNormalization {\n /** The preset name, or `\"custom\"` when the caller supplied the values. */\n readonly name: string;\n /** Per-channel mean to subtract. */\n readonly mean: readonly [number, number, number];\n /** Per-channel deviation to divide by. */\n readonly std: readonly [number, number, number];\n}\n\n/**\n * Whether a metadata map came out of `YOLO(...).export(format=\"onnx\")`.\n *\n * Every Ultralytics export stamps `author` and `task` into its metadata, and the\n * pair is unambiguous: `\"Ultralytics\"` plus `\"classify\"` is a classification head\n * from that codebase and nothing else.\n *\n * @param metadata The model's custom metadata map.\n */\nexport function isUltralyticsClassifier(metadata: Readonly<Record<string, string>>): boolean {\n return (\n (metadata.author ?? \"\").trim().toLowerCase() === \"ultralytics\" &&\n (metadata.task ?? \"\").trim().toLowerCase() === \"classify\"\n );\n}\n\n/**\n * Settle which `mean`/`std` to apply, and what to call the choice.\n *\n * Explicit `mean`/`std` always win — they are the escape hatch for a model whose\n * preprocessing neither preset describes. Anything they leave open falls back to\n * the preset, so passing only a `mean` does not silently reset the deviation\n * to 1.\n *\n * Warns (via `console.warn`) when the model is an Ultralytics export and the\n * supplied values are not the identity it was trained with. Nothing fails in\n * that case: the prediction has the right shape and is simply less accurate,\n * which is exactly why it is worth saying out loud.\n *\n * @param metadata The model's custom metadata map, read to detect the family.\n * @param options The preset asked for, plus any explicit `mean`/`std`.\n * @throws {RangeError} If `normalization` is not a known preset, or names one\n * while `mean`/`std` are also supplied — two answers to the same question.\n */\nexport function resolveNormalization(\n metadata: Readonly<Record<string, string>>,\n options: {\n readonly normalization?: Normalization;\n readonly mean?: readonly [number, number, number];\n readonly std?: readonly [number, number, number];\n } = {},\n): ResolvedNormalization {\n const normalization = options.normalization ?? \"auto\";\n const explicit = options.mean !== undefined || options.std !== undefined;\n\n if (normalization !== \"auto\" && PRESETS[normalization] === undefined) {\n throw new RangeError(\n `normalization must be one of 'auto', 'imagenet', 'ultralytics', 'none'; ` +\n `got ${JSON.stringify(normalization)}.`,\n );\n }\n if (explicit && normalization !== \"auto\") {\n throw new RangeError(\n `Pass either normalization=${JSON.stringify(normalization)} or explicit mean/std, not both.`,\n );\n }\n\n const ultralytics = isUltralyticsClassifier(metadata);\n const preset =\n normalization === \"auto\" ? (ultralytics ? \"ultralytics\" : \"imagenet\") : normalization;\n const [presetMean, presetStd] = PRESETS[preset] as readonly [\n readonly [number, number, number],\n readonly [number, number, number],\n ];\n\n if (!explicit) {\n return { name: preset, mean: presetMean, std: presetStd };\n }\n\n const mean = options.mean ?? presetMean;\n const std = options.std ?? presetStd;\n if (ultralytics && !(isIdentity(mean, IDENTITY_MEAN) && isIdentity(std, IDENTITY_STD))) {\n console.warn(\n \"The classifier is an Ultralytics export, whose classification head is trained on raw \" +\n `[0, 1] images, but mean=${JSON.stringify(mean)} / std=${JSON.stringify(std)} was ` +\n \"requested. It will be fed images normalized in a way it never saw in training, which \" +\n \"degrades accuracy without raising anything. Drop mean/std to let normalization='auto' \" +\n \"pick the identity.\",\n );\n }\n return { name: CUSTOM_NORMALIZATION, mean, std };\n}\n\n/**\n * Whether two channel triples are equal.\n *\n * @param value The triple to check.\n * @param reference The triple to compare against.\n */\nfunction isIdentity(\n value: readonly [number, number, number],\n reference: readonly [number, number, number],\n): boolean {\n return value.every((entry, index) => entry === reference[index]);\n}\n"],"mappings":";AAmCA,IAAa,IAAmD;CAAC;CAAO;CAAO;AAAK,GAGvE,IAAkD;CAAC;CAAO;CAAO;AAAK,GAGtE,IAAmD;CAAC;CAAG;CAAG;AAAC,GAG3D,IAAkD;CAAC;CAAG;CAAG;AAAC,GAG1D,IAAuB,UAE9B,IAEF;CACA,UAAU,CAAC,GAAe,CAAY;CACtC,aAAa,CAAC,GAAe,CAAY;CACzC,MAAM,CAAC,GAAe,CAAY;AACtC;AAqBA,SAAgB,EAAwB,GAAqD;CACzF,QACK,EAAS,UAAU,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,MAAM,kBAChD,EAAS,QAAQ,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,MAAM;AAEvD;AAoBA,SAAgB,EACZ,GACA,IAII,CAAC,GACgB;CACrB,IAAM,IAAgB,EAAQ,iBAAiB,QACzC,IAAW,EAAQ,SAAS,KAAA,KAAa,EAAQ,QAAQ,KAAA;CAE/D,IAAI,MAAkB,UAAU,EAAQ,OAAmB,KAAA,GACvD,MAAU,WACN,+EACW,KAAK,UAAU,CAAa,EAAE,EAC7C;CAEJ,IAAI,KAAY,MAAkB,QAC9B,MAAU,WACN,6BAA6B,KAAK,UAAU,CAAa,EAAE,iCAC/D;CAGJ,IAAM,IAAc,EAAwB,CAAQ,GAC9C,IACF,MAAkB,SAAU,IAAc,gBAAgB,aAAc,GACtE,CAAC,GAAY,KAAa,EAAQ;CAKxC,IAAI,CAAC,GACD,OAAO;EAAE,MAAM;EAAQ,MAAM;EAAY,KAAK;CAAU;CAG5D,IAAM,IAAO,EAAQ,QAAQ,GACvB,IAAM,EAAQ,OAAO;CAU3B,OATI,KAAe,EAAE,EAAW,GAAM,CAAa,KAAK,EAAW,GAAK,CAAY,MAChF,QAAQ,KACJ,gHAC+B,KAAK,UAAU,CAAI,EAAE,SAAS,KAAK,UAAU,CAAG,EAAE,mMAIrF,GAEG;EAAE,MAAM;EAAsB;EAAM;CAAI;AACnD;AAQA,SAAS,EACL,GACA,GACO;CACP,OAAO,EAAM,OAAO,GAAO,MAAU,MAAU,EAAU,EAAM;AACnE"}
1
+ {"version":3,"file":"normalization.js","names":["IMAGENET_MEAN","IMAGENET_STD","IDENTITY_MEAN","IDENTITY_STD","CUSTOM_NORMALIZATION","PRESETS","isUltralyticsClassifier","metadata","resolveNormalization","normalization","options","explicit","ultralytics","preset","presetMean","presetStd","mean","std","isIdentity","value","entry","reference","index"],"sources":["../../src/vision/normalization.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Which preprocessing a classifier expects its input to have had.\n *\n * A classifier is trained on a specific tensor, and feeding it a differently\n * prepared one degrades it silently — no exception, no warning, just worse\n * predictions. The two families this SDK sees most disagree completely:\n * torchvision-style models want the ImageNet mean and deviation subtracted and\n * divided out, while an Ultralytics classification head consumes raw `[0, 1]`.\n *\n * Guessing wrong is not detectable from the outside, but it is not a guess: an\n * Ultralytics export stamps `author` and `task` into its own metadata, and every\n * task in this SDK already reads that map for the class names.\n *\n * Mirrors `ort_vision_sdk.normalization` in the Python SDK; the two must agree,\n * because the same model file is driven by both.\n */\n\n/**\n * Which preprocessing the classifier expects its input to have had.\n *\n * - `\"auto\"` (the default wherever it is accepted) reads the model's own export\n * metadata and picks. An Ultralytics classification head gets\n * `\"ultralytics\"`; anything else gets `\"imagenet\"`.\n * - `\"imagenet\"` subtracts the ImageNet mean and divides by the ImageNet\n * deviation — the torchvision convention.\n * - `\"ultralytics\"` leaves the image in `[0, 1]`. Ultralytics' own classifier\n * applies no mean/std at all, so anything else feeds it images it never saw\n * in training.\n * - `\"none\"` is the same arithmetic as `\"ultralytics\"` — identity — under a\n * name that says \"this model wants raw `[0, 1]`\" rather than naming a vendor.\n */\nexport type Normalization = \"auto\" | \"imagenet\" | \"ultralytics\" | \"none\";\n\n/** Per-channel RGB mean of ImageNet, the torchvision preprocessing convention. */\nexport const IMAGENET_MEAN: readonly [number, number, number] = [0.485, 0.456, 0.406];\n\n/** Per-channel RGB standard deviation of ImageNet. */\nexport const IMAGENET_STD: readonly [number, number, number] = [0.229, 0.224, 0.225];\n\n/** Mean that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_MEAN: readonly [number, number, number] = [0, 0, 0];\n\n/** Deviation that leaves an image untouched — what an Ultralytics classifier expects. */\nexport const IDENTITY_STD: readonly [number, number, number] = [1, 1, 1];\n\n/** Name reported when the caller supplied `mean`/`std` directly. */\nexport const CUSTOM_NORMALIZATION = \"custom\";\n\nconst PRESETS: Readonly<\n Record<string, readonly [readonly [number, number, number], readonly [number, number, number]]>\n> = {\n imagenet: [IMAGENET_MEAN, IMAGENET_STD],\n ultralytics: [IDENTITY_MEAN, IDENTITY_STD],\n none: [IDENTITY_MEAN, IDENTITY_STD],\n};\n\n/** What {@link resolveNormalization} settled on. */\nexport interface ResolvedNormalization {\n /** The preset name, or `\"custom\"` when the caller supplied the values. */\n readonly name: string;\n /** Per-channel mean to subtract. */\n readonly mean: readonly [number, number, number];\n /** Per-channel deviation to divide by. */\n readonly std: readonly [number, number, number];\n}\n\n/**\n * Whether a metadata map came out of `YOLO(...).export(format=\"onnx\")`.\n *\n * Every Ultralytics export stamps `author` and `task` into its metadata, and the\n * pair is unambiguous: `\"Ultralytics\"` plus `\"classify\"` is a classification head\n * from that codebase and nothing else.\n *\n * @param metadata The model's custom metadata map.\n */\nexport function isUltralyticsClassifier(metadata: Readonly<Record<string, string>>): boolean {\n return (\n (metadata.author ?? \"\").trim().toLowerCase() === \"ultralytics\" &&\n (metadata.task ?? \"\").trim().toLowerCase() === \"classify\"\n );\n}\n\n/**\n * Settle which `mean`/`std` to apply, and what to call the choice.\n *\n * Explicit `mean`/`std` always win — they are the escape hatch for a model whose\n * preprocessing neither preset describes. Anything they leave open falls back to\n * the preset, so passing only a `mean` does not silently reset the deviation\n * to 1.\n *\n * Warns (via `console.warn`) when the model is an Ultralytics export and the\n * supplied values are not the identity it was trained with. Nothing fails in\n * that case: the prediction has the right shape and is simply less accurate,\n * which is exactly why it is worth saying out loud.\n *\n * @param metadata The model's custom metadata map, read to detect the family.\n * @param options The preset asked for, plus any explicit `mean`/`std`.\n * @throws {RangeError} If `normalization` is not a known preset, or names one\n * while `mean`/`std` are also supplied — two answers to the same question.\n */\nexport function resolveNormalization(\n metadata: Readonly<Record<string, string>>,\n options: {\n readonly normalization?: Normalization;\n readonly mean?: readonly [number, number, number];\n readonly std?: readonly [number, number, number];\n } = {},\n): ResolvedNormalization {\n const normalization = options.normalization ?? \"auto\";\n const explicit = options.mean !== undefined || options.std !== undefined;\n\n if (normalization !== \"auto\" && PRESETS[normalization] === undefined) {\n throw new RangeError(\n `normalization must be one of 'auto', 'imagenet', 'ultralytics', 'none'; ` +\n `got ${JSON.stringify(normalization)}.`,\n );\n }\n if (explicit && normalization !== \"auto\") {\n throw new RangeError(\n `Pass either normalization=${JSON.stringify(normalization)} or explicit mean/std, not both.`,\n );\n }\n\n const ultralytics = isUltralyticsClassifier(metadata);\n const preset =\n normalization === \"auto\" ? (ultralytics ? \"ultralytics\" : \"imagenet\") : normalization;\n const [presetMean, presetStd] = PRESETS[preset] as readonly [\n readonly [number, number, number],\n readonly [number, number, number],\n ];\n\n if (!explicit) {\n return { name: preset, mean: presetMean, std: presetStd };\n }\n\n const mean = options.mean ?? presetMean;\n const std = options.std ?? presetStd;\n if (ultralytics && !(isIdentity(mean, IDENTITY_MEAN) && isIdentity(std, IDENTITY_STD))) {\n console.warn(\n \"The classifier is an Ultralytics export, whose classification head is trained on raw \" +\n `[0, 1] images, but mean=${JSON.stringify(mean)} / std=${JSON.stringify(std)} was ` +\n \"requested. It will be fed images normalized in a way it never saw in training, which \" +\n \"degrades accuracy without raising anything. Drop mean/std to let normalization='auto' \" +\n \"pick the identity.\",\n );\n }\n return { name: CUSTOM_NORMALIZATION, mean, std };\n}\n\n/**\n * Whether two channel triples are equal.\n *\n * @param value The triple to check.\n * @param reference The triple to compare against.\n */\nfunction isIdentity(\n value: readonly [number, number, number],\n reference: readonly [number, number, number],\n): boolean {\n return value.every((entry, index) => entry === reference[index]);\n}\n"],"mappings":";AAmCA,IAAaA,IAAmD;CAAC;CAAO;CAAO;AAAK,GAGvEC,IAAkD;CAAC;CAAO;CAAO;AAAK,GAGtEC,IAAmD;CAAC;CAAG;CAAG;AAAC,GAG3DC,IAAkD;CAAC;CAAG;CAAG;AAAC,GAG1DC,IAAuB,UAE9BC,IAEF;CACA,UAAU,CAACL,GAAeC,CAAY;CACtC,aAAa,CAACC,GAAeC,CAAY;CACzC,MAAM,CAACD,GAAeC,CAAY;AACtC;AAqBA,SAAgBG,EAAwB,GAAqD;CACzF,QACKC,EAAS,UAAU,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,MAAM,kBAChDA,EAAS,QAAQ,GAAA,CAAI,KAAK,CAAC,CAAC,YAAY,MAAM;AAEvD;AAoBA,SAAgBC,EACZ,GACA,IAII,CAAC,GACgB;CACrB,IAAMC,IAAgBC,EAAQ,iBAAiB,QACzCC,IAAWD,EAAQ,SAAS,KAAA,KAAaA,EAAQ,QAAQ,KAAA;CAE/D,IAAID,MAAkB,UAAUJ,EAAQI,OAAmB,KAAA,GACvD,MAAU,WACN,+EACW,KAAK,UAAUA,CAAa,EAAE,EAC7C;CAEJ,IAAIE,KAAYF,MAAkB,QAC9B,MAAU,WACN,6BAA6B,KAAK,UAAUA,CAAa,EAAE,iCAC/D;CAGJ,IAAMG,IAAcN,EAAwBC,CAAQ,GAC9CM,IACFJ,MAAkB,SAAUG,IAAc,gBAAgB,aAAcH,GACtE,CAACK,GAAYC,KAAaV,EAAQQ;CAKxC,IAAI,CAACF,GACD,OAAO;EAAE,MAAME;EAAQ,MAAMC;EAAY,KAAKC;CAAU;CAG5D,IAAMC,IAAON,EAAQ,QAAQI,GACvBG,IAAMP,EAAQ,OAAOK;CAU3B,OATIH,KAAe,EAAEM,EAAWF,GAAMd,CAAa,KAAKgB,EAAWD,GAAKd,CAAY,MAChF,QAAQ,KACJ,gHAC+B,KAAK,UAAUa,CAAI,EAAE,SAAS,KAAK,UAAUC,CAAG,EAAE,mMAIrF,GAEG;EAAE,MAAMb;EAAsB;EAAM;CAAI;AACnD;AAQA,SAASc,EACL,GACA,GACO;CACP,OAAOC,EAAM,OAAO,GAAO,MAAUC,MAAUC,EAAUC,EAAM;AACnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"classification.cjs","names":[],"sources":["../../../src/vision/postprocess/classification.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Classification head postprocessing — softmax + top-k.\n */\n\n/** Apply numerically-stable softmax to a 1-D vector of logits. */\nexport function softmax(logits: Float32Array | readonly number[]): Float32Array {\n const n = logits.length;\n const out = new Float32Array(n);\n let max = -Infinity;\n for (let i = 0; i < n; i++) {\n const v = logits[i] as number;\n if (v > max) max = v;\n }\n let sum = 0;\n for (let i = 0; i < n; i++) {\n const e = Math.exp((logits[i] as number) - max);\n out[i] = e;\n sum += e;\n }\n for (let i = 0; i < n; i++) {\n out[i] = (out[i] as number) / sum;\n }\n return out;\n}\n\nexport interface TopKResult {\n readonly indices: Int32Array;\n readonly values: Float32Array;\n}\n\n/**\n * Return the top-k entries of a 1-D probability vector, sorted descending.\n *\n * @param k Number of entries to return; `null` returns all entries.\n */\nexport function topK(probabilities: Float32Array, k: number | null): TopKResult {\n const n = probabilities.length;\n const kEff = k === null ? n : Math.min(Math.max(0, k), n);\n\n const idx = new Array<number>(n);\n for (let i = 0; i < n; i++) idx[i] = i;\n idx.sort((a, b) => (probabilities[b] as number) - (probabilities[a] as number));\n\n const indices = new Int32Array(kEff);\n const values = new Float32Array(kEff);\n for (let i = 0; i < kEff; i++) {\n const j = idx[i] as number;\n indices[i] = j;\n values[i] = probabilities[j] as number;\n }\n return { indices, values };\n}\n"],"mappings":"AAMA,SAAgB,EAAQ,EAAwD,CAC5E,IAAM,EAAI,EAAO,OACX,EAAM,IAAI,aAAa,CAAC,EAC1B,EAAM,KACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,CACxB,IAAM,EAAI,EAAO,GACb,EAAI,IAAK,EAAM,EACvB,CACA,IAAI,EAAM,EACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,CACxB,IAAM,EAAI,KAAK,IAAK,EAAO,GAAgB,CAAG,EAC9C,EAAI,GAAK,EACT,GAAO,CACX,CACA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IACnB,EAAI,GAAM,EAAI,GAAgB,EAElC,OAAO,CACX,CAYA,SAAgB,EAAK,EAA6B,EAA8B,CAC5E,IAAM,EAAI,EAAc,OAClB,EAAO,IAAM,KAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAG,CAAC,EAAG,CAAC,EAElD,EAAU,MAAc,CAAC,EAC/B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,EAAI,GAAK,EACrC,EAAI,MAAM,EAAG,IAAO,EAAc,GAAiB,EAAc,EAAa,EAE9E,IAAM,EAAU,IAAI,WAAW,CAAI,EAC7B,EAAS,IAAI,aAAa,CAAI,EACpC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,IAAK,CAC3B,IAAM,EAAI,EAAI,GACd,EAAQ,GAAK,EACb,EAAO,GAAK,EAAc,EAC9B,CACA,MAAO,CAAE,UAAS,QAAO,CAC7B"}
1
+ {"version":3,"file":"classification.cjs","names":["softmax","n","logits","out","max","i","v","sum","e","topK","probabilities","kEff","k","idx","b","a","indices","values","j"],"sources":["../../../src/vision/postprocess/classification.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Classification head postprocessing — softmax + top-k.\n */\n\n/** Apply numerically-stable softmax to a 1-D vector of logits. */\nexport function softmax(logits: Float32Array | readonly number[]): Float32Array {\n const n = logits.length;\n const out = new Float32Array(n);\n let max = -Infinity;\n for (let i = 0; i < n; i++) {\n const v = logits[i] as number;\n if (v > max) max = v;\n }\n let sum = 0;\n for (let i = 0; i < n; i++) {\n const e = Math.exp((logits[i] as number) - max);\n out[i] = e;\n sum += e;\n }\n for (let i = 0; i < n; i++) {\n out[i] = (out[i] as number) / sum;\n }\n return out;\n}\n\nexport interface TopKResult {\n readonly indices: Int32Array;\n readonly values: Float32Array;\n}\n\n/**\n * Return the top-k entries of a 1-D probability vector, sorted descending.\n *\n * @param k Number of entries to return; `null` returns all entries.\n */\nexport function topK(probabilities: Float32Array, k: number | null): TopKResult {\n const n = probabilities.length;\n const kEff = k === null ? n : Math.min(Math.max(0, k), n);\n\n const idx = new Array<number>(n);\n for (let i = 0; i < n; i++) idx[i] = i;\n idx.sort((a, b) => (probabilities[b] as number) - (probabilities[a] as number));\n\n const indices = new Int32Array(kEff);\n const values = new Float32Array(kEff);\n for (let i = 0; i < kEff; i++) {\n const j = idx[i] as number;\n indices[i] = j;\n values[i] = probabilities[j] as number;\n }\n return { indices, values };\n}\n"],"mappings":"AAMA,SAAgBA,EAAQ,EAAwD,CAC5E,IAAMC,EAAIC,EAAO,OACXC,EAAM,IAAI,aAAaF,CAAC,EAC1BG,EAAM,KACV,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAG,IAAK,CACxB,IAAMK,EAAIJ,EAAOG,GACbC,EAAIF,IAAK,EAAME,EACvB,CACA,IAAIC,EAAM,EACV,IAAK,IAAIF,EAAI,EAAGA,EAAIJ,EAAG,IAAK,CACxB,IAAMO,EAAI,KAAK,IAAKN,EAAOG,GAAgBD,CAAG,EAC9C,EAAIC,GAAKG,EACT,GAAOA,CACX,CACA,IAAK,IAAIH,EAAI,EAAGA,EAAIJ,EAAG,IACnB,EAAII,GAAMF,EAAIE,GAAgBE,EAElC,OAAOJ,CACX,CAYA,SAAgBM,EAAK,EAA6B,EAA8B,CAC5E,IAAM,EAAIC,EAAc,OAClBC,EAAOC,IAAM,KAAO,EAAI,KAAK,IAAI,KAAK,IAAI,EAAGA,CAAC,EAAG,CAAC,EAElDC,EAAU,MAAc,CAAC,EAC/B,IAAK,IAAIR,EAAI,EAAGA,EAAI,EAAG,IAAK,EAAIA,GAAKA,EACrCQ,EAAI,MAAM,EAAG,IAAOH,EAAcI,GAAiBJ,EAAcK,EAAa,EAE9E,IAAMC,EAAU,IAAI,WAAWL,CAAI,EAC7BM,EAAS,IAAI,aAAaN,CAAI,EACpC,IAAK,IAAIN,EAAI,EAAGA,EAAIM,EAAM,IAAK,CAC3B,IAAMO,EAAIL,EAAIR,GACd,EAAQA,GAAKa,EACb,EAAOb,GAAKK,EAAcQ,EAC9B,CACA,MAAO,CAAE,UAAS,QAAO,CAC7B,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"classification.js","names":[],"sources":["../../../src/vision/postprocess/classification.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Classification head postprocessing — softmax + top-k.\n */\n\n/** Apply numerically-stable softmax to a 1-D vector of logits. */\nexport function softmax(logits: Float32Array | readonly number[]): Float32Array {\n const n = logits.length;\n const out = new Float32Array(n);\n let max = -Infinity;\n for (let i = 0; i < n; i++) {\n const v = logits[i] as number;\n if (v > max) max = v;\n }\n let sum = 0;\n for (let i = 0; i < n; i++) {\n const e = Math.exp((logits[i] as number) - max);\n out[i] = e;\n sum += e;\n }\n for (let i = 0; i < n; i++) {\n out[i] = (out[i] as number) / sum;\n }\n return out;\n}\n\nexport interface TopKResult {\n readonly indices: Int32Array;\n readonly values: Float32Array;\n}\n\n/**\n * Return the top-k entries of a 1-D probability vector, sorted descending.\n *\n * @param k Number of entries to return; `null` returns all entries.\n */\nexport function topK(probabilities: Float32Array, k: number | null): TopKResult {\n const n = probabilities.length;\n const kEff = k === null ? n : Math.min(Math.max(0, k), n);\n\n const idx = new Array<number>(n);\n for (let i = 0; i < n; i++) idx[i] = i;\n idx.sort((a, b) => (probabilities[b] as number) - (probabilities[a] as number));\n\n const indices = new Int32Array(kEff);\n const values = new Float32Array(kEff);\n for (let i = 0; i < kEff; i++) {\n const j = idx[i] as number;\n indices[i] = j;\n values[i] = probabilities[j] as number;\n }\n return { indices, values };\n}\n"],"mappings":";AAMA,SAAgB,EAAQ,GAAwD;CAC5E,IAAM,IAAI,EAAO,QACX,IAAM,IAAI,aAAa,CAAC,GAC1B,IAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,IAAM,IAAI,EAAO;EACjB,AAAI,IAAI,MAAK,IAAM;CACvB;CACA,IAAI,IAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,IAAM,IAAI,KAAK,IAAK,EAAO,KAAgB,CAAG;EAE9C,AADA,EAAI,KAAK,GACT,KAAO;CACX;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACnB,EAAI,KAAM,EAAI,KAAgB;CAElC,OAAO;AACX;AAYA,SAAgB,EAAK,GAA6B,GAA8B;CAC5E,IAAM,IAAI,EAAc,QAClB,IAAO,MAAM,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,GAElD,IAAU,MAAc,CAAC;CAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAI,KAAK;CACrC,EAAI,MAAM,GAAG,MAAO,EAAc,KAAiB,EAAc,EAAa;CAE9E,IAAM,IAAU,IAAI,WAAW,CAAI,GAC7B,IAAS,IAAI,aAAa,CAAI;CACpC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAM,KAAK;EAC3B,IAAM,IAAI,EAAI;EAEd,AADA,EAAQ,KAAK,GACb,EAAO,KAAK,EAAc;CAC9B;CACA,OAAO;EAAE;EAAS;CAAO;AAC7B"}
1
+ {"version":3,"file":"classification.js","names":["softmax","n","logits","out","max","i","v","sum","e","topK","probabilities","kEff","k","idx","b","a","indices","values","j"],"sources":["../../../src/vision/postprocess/classification.ts"],"sourcesContent":["/** @generated Vendored from @mauriciobenjamin700/ort-vision-sdk-web. Do not hand-edit — regenerate with `npm run vendor:vision`. */\n/**\n * Classification head postprocessing — softmax + top-k.\n */\n\n/** Apply numerically-stable softmax to a 1-D vector of logits. */\nexport function softmax(logits: Float32Array | readonly number[]): Float32Array {\n const n = logits.length;\n const out = new Float32Array(n);\n let max = -Infinity;\n for (let i = 0; i < n; i++) {\n const v = logits[i] as number;\n if (v > max) max = v;\n }\n let sum = 0;\n for (let i = 0; i < n; i++) {\n const e = Math.exp((logits[i] as number) - max);\n out[i] = e;\n sum += e;\n }\n for (let i = 0; i < n; i++) {\n out[i] = (out[i] as number) / sum;\n }\n return out;\n}\n\nexport interface TopKResult {\n readonly indices: Int32Array;\n readonly values: Float32Array;\n}\n\n/**\n * Return the top-k entries of a 1-D probability vector, sorted descending.\n *\n * @param k Number of entries to return; `null` returns all entries.\n */\nexport function topK(probabilities: Float32Array, k: number | null): TopKResult {\n const n = probabilities.length;\n const kEff = k === null ? n : Math.min(Math.max(0, k), n);\n\n const idx = new Array<number>(n);\n for (let i = 0; i < n; i++) idx[i] = i;\n idx.sort((a, b) => (probabilities[b] as number) - (probabilities[a] as number));\n\n const indices = new Int32Array(kEff);\n const values = new Float32Array(kEff);\n for (let i = 0; i < kEff; i++) {\n const j = idx[i] as number;\n indices[i] = j;\n values[i] = probabilities[j] as number;\n }\n return { indices, values };\n}\n"],"mappings":";AAMA,SAAgBA,EAAQ,GAAwD;CAC5E,IAAMC,IAAIC,EAAO,QACXC,IAAM,IAAI,aAAaF,CAAC,GAC1BG,IAAM;CACV,KAAK,IAAIC,IAAI,GAAGA,IAAIJ,GAAG,KAAK;EACxB,IAAMK,IAAIJ,EAAOG;EACjB,AAAIC,IAAIF,MAAK,IAAME;CACvB;CACA,IAAIC,IAAM;CACV,KAAK,IAAIF,IAAI,GAAGA,IAAIJ,GAAG,KAAK;EACxB,IAAMO,IAAI,KAAK,IAAKN,EAAOG,KAAgBD,CAAG;EAE9C,AADA,EAAIC,KAAKG,GACT,KAAOA;CACX;CACA,KAAK,IAAIH,IAAI,GAAGA,IAAIJ,GAAG,KACnB,EAAII,KAAMF,EAAIE,KAAgBE;CAElC,OAAOJ;AACX;AAYA,SAAgBM,EAAK,GAA6B,GAA8B;CAC5E,IAAM,IAAIC,EAAc,QAClBC,IAAOC,MAAM,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAGA,CAAC,GAAG,CAAC,GAElDC,IAAU,MAAc,CAAC;CAC/B,KAAK,IAAIR,IAAI,GAAGA,IAAI,GAAG,KAAK,EAAIA,KAAKA;CACrC,EAAI,MAAM,GAAG,MAAOK,EAAcI,KAAiBJ,EAAcK,EAAa;CAE9E,IAAMC,IAAU,IAAI,WAAWL,CAAI,GAC7BM,IAAS,IAAI,aAAaN,CAAI;CACpC,KAAK,IAAIN,IAAI,GAAGA,IAAIM,GAAM,KAAK;EAC3B,IAAMO,IAAIL,EAAIR;EAEd,AADA,EAAQA,KAAKa,GACb,EAAOb,KAAKK,EAAcQ;CAC9B;CACA,OAAO;EAAE;EAAS;CAAO;AAC7B"}