tempest-react-sdk 0.78.0 → 0.80.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 (1603) hide show
  1. package/README.md +6 -6
  2. package/bin/lib/openapi/generate.hostile.test.mjs +45 -4
  3. package/bin/lib/openapi/generate.mjs +303 -88
  4. package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
  5. package/bin/lib/openapi/generate.test.mjs +462 -1
  6. package/bin/lib/openapi/schema-to-zod.mjs +4 -3
  7. package/dist/access/Can.cjs.map +1 -1
  8. package/dist/access/Can.js.map +1 -1
  9. package/dist/access/access-control-context.cjs.map +1 -1
  10. package/dist/access/access-control-context.js.map +1 -1
  11. package/dist/access/create-role-access-control.cjs.map +1 -1
  12. package/dist/access/create-role-access-control.js.map +1 -1
  13. package/dist/access/permissions-from-token.cjs.map +1 -1
  14. package/dist/access/permissions-from-token.js.map +1 -1
  15. package/dist/access/use-can.cjs.map +1 -1
  16. package/dist/access/use-can.js.map +1 -1
  17. package/dist/app/AppProviders.cjs.map +1 -1
  18. package/dist/app/AppProviders.js.map +1 -1
  19. package/dist/audio/audio-bus.cjs.map +1 -1
  20. package/dist/audio/audio-bus.js.map +1 -1
  21. package/dist/audio/audio-output.cjs.map +1 -1
  22. package/dist/audio/audio-output.js.map +1 -1
  23. package/dist/audio/audio-player.cjs.map +1 -1
  24. package/dist/audio/audio-player.js.map +1 -1
  25. package/dist/audio/audio-recorder.cjs.map +1 -1
  26. package/dist/audio/audio-recorder.js.map +1 -1
  27. package/dist/audio/duration.cjs.map +1 -1
  28. package/dist/audio/duration.js.map +1 -1
  29. package/dist/audio/level-meter.cjs.map +1 -1
  30. package/dist/audio/level-meter.js.map +1 -1
  31. package/dist/audio/media-access.cjs.map +1 -1
  32. package/dist/audio/media-access.js.map +1 -1
  33. package/dist/audio/noise-floor.cjs.map +1 -1
  34. package/dist/audio/noise-floor.js.map +1 -1
  35. package/dist/audio/sfx-pool.cjs.map +1 -1
  36. package/dist/audio/sfx-pool.js.map +1 -1
  37. package/dist/audio/use-audio-bus.cjs.map +1 -1
  38. package/dist/audio/use-audio-bus.js.map +1 -1
  39. package/dist/audio/use-audio-recorder.cjs.map +1 -1
  40. package/dist/audio/use-audio-recorder.js.map +1 -1
  41. package/dist/audio/use-audio.cjs.map +1 -1
  42. package/dist/audio/use-audio.js.map +1 -1
  43. package/dist/audio/use-microphone.cjs +1 -1
  44. package/dist/audio/use-microphone.cjs.map +1 -1
  45. package/dist/audio/use-microphone.js +1 -5
  46. package/dist/audio/use-microphone.js.map +1 -1
  47. package/dist/audio/use-sfx-pool.cjs.map +1 -1
  48. package/dist/audio/use-sfx-pool.js.map +1 -1
  49. package/dist/audio/voice-activity.cjs.map +1 -1
  50. package/dist/audio/voice-activity.js.map +1 -1
  51. package/dist/audio/voice-chain-stages.cjs.map +1 -1
  52. package/dist/audio/voice-chain-stages.js.map +1 -1
  53. package/dist/audio/voice-chain.cjs.map +1 -1
  54. package/dist/audio/voice-chain.js.map +1 -1
  55. package/dist/audio/wav.cjs.map +1 -1
  56. package/dist/audio/wav.js.map +1 -1
  57. package/dist/auth/AuthGuard.cjs.map +1 -1
  58. package/dist/auth/AuthGuard.js.map +1 -1
  59. package/dist/auth/create-auth-store.cjs.map +1 -1
  60. package/dist/auth/create-auth-store.js.map +1 -1
  61. package/dist/auth/create-tempest-auth.cjs +1 -1
  62. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  63. package/dist/auth/create-tempest-auth.js +1 -3
  64. package/dist/auth/create-tempest-auth.js.map +1 -1
  65. package/dist/auth/jwt.cjs.map +1 -1
  66. package/dist/auth/jwt.js.map +1 -1
  67. package/dist/auth/lazy-with-retry.cjs.map +1 -1
  68. package/dist/auth/lazy-with-retry.js.map +1 -1
  69. package/dist/auth/passkey.cjs.map +1 -1
  70. package/dist/auth/passkey.js.map +1 -1
  71. package/dist/auth/refresh-queue.cjs.map +1 -1
  72. package/dist/auth/refresh-queue.js.map +1 -1
  73. package/dist/auth/use-passkey.cjs +1 -1
  74. package/dist/auth/use-passkey.cjs.map +1 -1
  75. package/dist/auth/use-passkey.js +1 -1
  76. package/dist/auth/use-passkey.js.map +1 -1
  77. package/dist/br/BrazilMap.cjs.map +1 -1
  78. package/dist/br/BrazilMap.js.map +1 -1
  79. package/dist/br/BrazilMap.module.cjs.map +1 -1
  80. package/dist/br/BrazilMap.module.js.map +1 -1
  81. package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
  82. package/dist/br/BrazilStateCitySelect.js.map +1 -1
  83. package/dist/br/BrazilStateMap.cjs.map +1 -1
  84. package/dist/br/BrazilStateMap.js.map +1 -1
  85. package/dist/br/MapLegend.cjs.map +1 -1
  86. package/dist/br/MapLegend.js.map +1 -1
  87. package/dist/br/MapLegend.module.cjs.map +1 -1
  88. package/dist/br/MapLegend.module.js.map +1 -1
  89. package/dist/br/MapMarkers.cjs.map +1 -1
  90. package/dist/br/MapMarkers.js.map +1 -1
  91. package/dist/br/MapTooltip.cjs.map +1 -1
  92. package/dist/br/MapTooltip.js.map +1 -1
  93. package/dist/br/MunicipalitySearch.cjs +1 -1
  94. package/dist/br/MunicipalitySearch.cjs.map +1 -1
  95. package/dist/br/MunicipalitySearch.js +2 -5
  96. package/dist/br/MunicipalitySearch.js.map +1 -1
  97. package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
  98. package/dist/br/MunicipalitySearch.module.js.map +1 -1
  99. package/dist/br/PixQRCode.cjs.map +1 -1
  100. package/dist/br/PixQRCode.js.map +1 -1
  101. package/dist/br/PixQRCode.module.cjs.map +1 -1
  102. package/dist/br/PixQRCode.module.js.map +1 -1
  103. package/dist/br/boleto.cjs.map +1 -1
  104. package/dist/br/boleto.js.map +1 -1
  105. package/dist/br/br-geo.cjs.map +1 -1
  106. package/dist/br/br-geo.js.map +1 -1
  107. package/dist/br/data/br-centroids.cjs.map +1 -1
  108. package/dist/br/data/br-centroids.js.map +1 -1
  109. package/dist/br/data/br-locations.cjs.map +1 -1
  110. package/dist/br/data/br-locations.js.map +1 -1
  111. package/dist/br/data/br-uf-geo.cjs.map +1 -1
  112. package/dist/br/data/br-uf-geo.js.map +1 -1
  113. package/dist/br/data/mun/AC.cjs.map +1 -1
  114. package/dist/br/data/mun/AC.js.map +1 -1
  115. package/dist/br/data/mun/AL.cjs.map +1 -1
  116. package/dist/br/data/mun/AL.js.map +1 -1
  117. package/dist/br/data/mun/AM.cjs.map +1 -1
  118. package/dist/br/data/mun/AM.js.map +1 -1
  119. package/dist/br/data/mun/AP.cjs.map +1 -1
  120. package/dist/br/data/mun/AP.js.map +1 -1
  121. package/dist/br/data/mun/BA.cjs.map +1 -1
  122. package/dist/br/data/mun/BA.js.map +1 -1
  123. package/dist/br/data/mun/CE.cjs.map +1 -1
  124. package/dist/br/data/mun/CE.js.map +1 -1
  125. package/dist/br/data/mun/DF.cjs.map +1 -1
  126. package/dist/br/data/mun/DF.js.map +1 -1
  127. package/dist/br/data/mun/ES.cjs.map +1 -1
  128. package/dist/br/data/mun/ES.js.map +1 -1
  129. package/dist/br/data/mun/GO.cjs.map +1 -1
  130. package/dist/br/data/mun/GO.js.map +1 -1
  131. package/dist/br/data/mun/MA.cjs.map +1 -1
  132. package/dist/br/data/mun/MA.js.map +1 -1
  133. package/dist/br/data/mun/MG.cjs.map +1 -1
  134. package/dist/br/data/mun/MG.js.map +1 -1
  135. package/dist/br/data/mun/MS.cjs.map +1 -1
  136. package/dist/br/data/mun/MS.js.map +1 -1
  137. package/dist/br/data/mun/MT.cjs.map +1 -1
  138. package/dist/br/data/mun/MT.js.map +1 -1
  139. package/dist/br/data/mun/PA.cjs.map +1 -1
  140. package/dist/br/data/mun/PA.js.map +1 -1
  141. package/dist/br/data/mun/PB.cjs.map +1 -1
  142. package/dist/br/data/mun/PB.js.map +1 -1
  143. package/dist/br/data/mun/PE.cjs.map +1 -1
  144. package/dist/br/data/mun/PE.js.map +1 -1
  145. package/dist/br/data/mun/PI.cjs.map +1 -1
  146. package/dist/br/data/mun/PI.js.map +1 -1
  147. package/dist/br/data/mun/PR.cjs.map +1 -1
  148. package/dist/br/data/mun/PR.js.map +1 -1
  149. package/dist/br/data/mun/RJ.cjs.map +1 -1
  150. package/dist/br/data/mun/RJ.js.map +1 -1
  151. package/dist/br/data/mun/RN.cjs.map +1 -1
  152. package/dist/br/data/mun/RN.js.map +1 -1
  153. package/dist/br/data/mun/RO.cjs.map +1 -1
  154. package/dist/br/data/mun/RO.js.map +1 -1
  155. package/dist/br/data/mun/RR.cjs.map +1 -1
  156. package/dist/br/data/mun/RR.js.map +1 -1
  157. package/dist/br/data/mun/RS.cjs.map +1 -1
  158. package/dist/br/data/mun/RS.js.map +1 -1
  159. package/dist/br/data/mun/SC.cjs.map +1 -1
  160. package/dist/br/data/mun/SC.js.map +1 -1
  161. package/dist/br/data/mun/SE.cjs.map +1 -1
  162. package/dist/br/data/mun/SE.js.map +1 -1
  163. package/dist/br/data/mun/SP.cjs.map +1 -1
  164. package/dist/br/data/mun/SP.js.map +1 -1
  165. package/dist/br/data/mun/TO.cjs.map +1 -1
  166. package/dist/br/data/mun/TO.js.map +1 -1
  167. package/dist/br/geocode.cjs.map +1 -1
  168. package/dist/br/geocode.js.map +1 -1
  169. package/dist/br/holidays.cjs.map +1 -1
  170. package/dist/br/holidays.js.map +1 -1
  171. package/dist/br/locations.cjs.map +1 -1
  172. package/dist/br/locations.js.map +1 -1
  173. package/dist/br/nfe.cjs.map +1 -1
  174. package/dist/br/nfe.js.map +1 -1
  175. package/dist/br/pix.cjs +1 -1
  176. package/dist/br/pix.cjs.map +1 -1
  177. package/dist/br/pix.js +108 -74
  178. package/dist/br/pix.js.map +1 -1
  179. package/dist/br/regions.cjs.map +1 -1
  180. package/dist/br/regions.js.map +1 -1
  181. package/dist/br/scales.cjs.map +1 -1
  182. package/dist/br/scales.js.map +1 -1
  183. package/dist/br/state-geo.cjs.map +1 -1
  184. package/dist/br/state-geo.js.map +1 -1
  185. package/dist/br/svg-utils.cjs.map +1 -1
  186. package/dist/br/svg-utils.js.map +1 -1
  187. package/dist/br/use-map-hover.cjs.map +1 -1
  188. package/dist/br/use-map-hover.js.map +1 -1
  189. package/dist/br/use-map-zoom.cjs.map +1 -1
  190. package/dist/br/use-map-zoom.js.map +1 -1
  191. package/dist/br/whatsapp.cjs.map +1 -1
  192. package/dist/br/whatsapp.js.map +1 -1
  193. package/dist/br.cjs.map +1 -1
  194. package/dist/br.d.ts +6 -2
  195. package/dist/br.js.map +1 -1
  196. package/dist/capture/barcode.cjs.map +1 -1
  197. package/dist/capture/barcode.js.map +1 -1
  198. package/dist/capture/media-recorder.cjs.map +1 -1
  199. package/dist/capture/media-recorder.js.map +1 -1
  200. package/dist/capture/use-barcode-scanner.cjs.map +1 -1
  201. package/dist/capture/use-barcode-scanner.js.map +1 -1
  202. package/dist/capture/use-screen-capture.cjs +1 -1
  203. package/dist/capture/use-screen-capture.cjs.map +1 -1
  204. package/dist/capture/use-screen-capture.js +1 -7
  205. package/dist/capture/use-screen-capture.js.map +1 -1
  206. package/dist/capture/use-speech-recognition.cjs +1 -1
  207. package/dist/capture/use-speech-recognition.cjs.map +1 -1
  208. package/dist/capture/use-speech-recognition.js +35 -36
  209. package/dist/capture/use-speech-recognition.js.map +1 -1
  210. package/dist/capture/use-torch.cjs.map +1 -1
  211. package/dist/capture/use-torch.js.map +1 -1
  212. package/dist/capture/use-video-recorder.cjs.map +1 -1
  213. package/dist/capture/use-video-recorder.js.map +1 -1
  214. package/dist/capture/video-recorder.cjs.map +1 -1
  215. package/dist/capture/video-recorder.js.map +1 -1
  216. package/dist/charts/AreaChart.cjs.map +1 -1
  217. package/dist/charts/AreaChart.js.map +1 -1
  218. package/dist/charts/BarChart.cjs.map +1 -1
  219. package/dist/charts/BarChart.js.map +1 -1
  220. package/dist/charts/LineChart.cjs.map +1 -1
  221. package/dist/charts/LineChart.js.map +1 -1
  222. package/dist/charts/PieChart.cjs.map +1 -1
  223. package/dist/charts/PieChart.js.map +1 -1
  224. package/dist/charts/RadarChart.cjs.map +1 -1
  225. package/dist/charts/RadarChart.js.map +1 -1
  226. package/dist/charts/palette.cjs.map +1 -1
  227. package/dist/charts/palette.js.map +1 -1
  228. package/dist/charts/scales.cjs.map +1 -1
  229. package/dist/charts/scales.js.map +1 -1
  230. package/dist/charts/types.cjs.map +1 -1
  231. package/dist/charts/types.js.map +1 -1
  232. package/dist/charts/use-chart-colors.cjs.map +1 -1
  233. package/dist/charts/use-chart-colors.js.map +1 -1
  234. package/dist/components/AIChat/AIChat.cjs +1 -1
  235. package/dist/components/AIChat/AIChat.cjs.map +1 -1
  236. package/dist/components/AIChat/AIChat.js +1 -5
  237. package/dist/components/AIChat/AIChat.js.map +1 -1
  238. package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
  239. package/dist/components/AIChat/AIChat.module.js.map +1 -1
  240. package/dist/components/AIChat/AIChatComposer.cjs +1 -1
  241. package/dist/components/AIChat/AIChatComposer.cjs.map +1 -1
  242. package/dist/components/AIChat/AIChatComposer.js +1 -7
  243. package/dist/components/AIChat/AIChatComposer.js.map +1 -1
  244. package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
  245. package/dist/components/AIChat/AIChatTurn.js.map +1 -1
  246. package/dist/components/AIChat/ai-chat-turns.cjs.map +1 -1
  247. package/dist/components/AIChat/ai-chat-turns.js.map +1 -1
  248. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  249. package/dist/components/Accordion/Accordion.js.map +1 -1
  250. package/dist/components/Accordion/Accordion.module.cjs.map +1 -1
  251. package/dist/components/Accordion/Accordion.module.js.map +1 -1
  252. package/dist/components/Alert/Alert.cjs.map +1 -1
  253. package/dist/components/Alert/Alert.js.map +1 -1
  254. package/dist/components/Alert/Alert.module.cjs.map +1 -1
  255. package/dist/components/Alert/Alert.module.js.map +1 -1
  256. package/dist/components/AppBar/AppBar.cjs.map +1 -1
  257. package/dist/components/AppBar/AppBar.js.map +1 -1
  258. package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
  259. package/dist/components/AppBar/AppBar.module.js.map +1 -1
  260. package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
  261. package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
  262. package/dist/components/AppBar/use-sticky-body-warning.js +1 -1
  263. package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
  264. package/dist/components/AppShell/AppShell.cjs.map +1 -1
  265. package/dist/components/AppShell/AppShell.js.map +1 -1
  266. package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
  267. package/dist/components/AppShell/AppShell.module.js.map +1 -1
  268. package/dist/components/AspectRatio/AspectRatio.cjs.map +1 -1
  269. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  270. package/dist/components/AspectRatio/AspectRatio.module.cjs.map +1 -1
  271. package/dist/components/AspectRatio/AspectRatio.module.js.map +1 -1
  272. package/dist/components/AudioPlayer/AudioPlayer.cjs +1 -1
  273. package/dist/components/AudioPlayer/AudioPlayer.cjs.map +1 -1
  274. package/dist/components/AudioPlayer/AudioPlayer.js +1 -7
  275. package/dist/components/AudioPlayer/AudioPlayer.js.map +1 -1
  276. package/dist/components/AudioPlayer/AudioPlayer.module.cjs.map +1 -1
  277. package/dist/components/AudioPlayer/AudioPlayer.module.js.map +1 -1
  278. package/dist/components/AudioRecorder/AudioRecorder.cjs +1 -1
  279. package/dist/components/AudioRecorder/AudioRecorder.cjs.map +1 -1
  280. package/dist/components/AudioRecorder/AudioRecorder.js +16 -21
  281. package/dist/components/AudioRecorder/AudioRecorder.js.map +1 -1
  282. package/dist/components/AudioRecorder/AudioRecorder.module.cjs.map +1 -1
  283. package/dist/components/AudioRecorder/AudioRecorder.module.js.map +1 -1
  284. package/dist/components/Avatar/Avatar.cjs.map +1 -1
  285. package/dist/components/Avatar/Avatar.js.map +1 -1
  286. package/dist/components/Avatar/Avatar.module.cjs.map +1 -1
  287. package/dist/components/Avatar/Avatar.module.js.map +1 -1
  288. package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
  289. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  290. package/dist/components/AvatarGroup/AvatarGroup.module.cjs.map +1 -1
  291. package/dist/components/AvatarGroup/AvatarGroup.module.js.map +1 -1
  292. package/dist/components/Badge/Badge.cjs.map +1 -1
  293. package/dist/components/Badge/Badge.js.map +1 -1
  294. package/dist/components/Badge/Badge.module.cjs.map +1 -1
  295. package/dist/components/Badge/Badge.module.js.map +1 -1
  296. package/dist/components/Banner/Banner.cjs.map +1 -1
  297. package/dist/components/Banner/Banner.js.map +1 -1
  298. package/dist/components/Banner/Banner.module.cjs.map +1 -1
  299. package/dist/components/Banner/Banner.module.js.map +1 -1
  300. package/dist/components/BarList/BarList.cjs.map +1 -1
  301. package/dist/components/BarList/BarList.js.map +1 -1
  302. package/dist/components/BarList/BarList.module.cjs.map +1 -1
  303. package/dist/components/BarList/BarList.module.js.map +1 -1
  304. package/dist/components/BarList/bar-list-model.cjs.map +1 -1
  305. package/dist/components/BarList/bar-list-model.js.map +1 -1
  306. package/dist/components/BarcodeScanner/BarcodeScanner.cjs.map +1 -1
  307. package/dist/components/BarcodeScanner/BarcodeScanner.js.map +1 -1
  308. package/dist/components/BarcodeScanner/BarcodeScanner.module.cjs.map +1 -1
  309. package/dist/components/BarcodeScanner/BarcodeScanner.module.js.map +1 -1
  310. package/dist/components/BottomNavigation/BottomNavigation.cjs.map +1 -1
  311. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  312. package/dist/components/BottomNavigation/BottomNavigation.module.cjs.map +1 -1
  313. package/dist/components/BottomNavigation/BottomNavigation.module.js.map +1 -1
  314. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  315. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  316. package/dist/components/BottomSheet/BottomSheet.module.cjs.map +1 -1
  317. package/dist/components/BottomSheet/BottomSheet.module.js.map +1 -1
  318. package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
  319. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  320. package/dist/components/Breadcrumbs/Breadcrumbs.module.cjs.map +1 -1
  321. package/dist/components/Breadcrumbs/Breadcrumbs.module.js.map +1 -1
  322. package/dist/components/Button/Button.cjs.map +1 -1
  323. package/dist/components/Button/Button.js.map +1 -1
  324. package/dist/components/Button/Button.module.cjs.map +1 -1
  325. package/dist/components/Button/Button.module.js.map +1 -1
  326. package/dist/components/Button/ButtonContent.cjs.map +1 -1
  327. package/dist/components/Button/ButtonContent.js.map +1 -1
  328. package/dist/components/Button/ButtonSlot.cjs.map +1 -1
  329. package/dist/components/Button/ButtonSlot.js.map +1 -1
  330. package/dist/components/Button/button-class.cjs.map +1 -1
  331. package/dist/components/Button/button-class.js.map +1 -1
  332. package/dist/components/Button/link-rel.cjs.map +1 -1
  333. package/dist/components/Button/link-rel.js.map +1 -1
  334. package/dist/components/Button/slot.cjs.map +1 -1
  335. package/dist/components/Button/slot.js.map +1 -1
  336. package/dist/components/Calendar/Calendar.cjs.map +1 -1
  337. package/dist/components/Calendar/Calendar.js.map +1 -1
  338. package/dist/components/Calendar/Calendar.module.cjs.map +1 -1
  339. package/dist/components/Calendar/Calendar.module.js.map +1 -1
  340. package/dist/components/Card/Card.cjs.map +1 -1
  341. package/dist/components/Card/Card.js.map +1 -1
  342. package/dist/components/Card/Card.module.cjs.map +1 -1
  343. package/dist/components/Card/Card.module.js.map +1 -1
  344. package/dist/components/Carousel/Carousel.cjs.map +1 -1
  345. package/dist/components/Carousel/Carousel.js.map +1 -1
  346. package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
  347. package/dist/components/Carousel/Carousel.module.js.map +1 -1
  348. package/dist/components/Center/Center.cjs.map +1 -1
  349. package/dist/components/Center/Center.js.map +1 -1
  350. package/dist/components/Center/Center.module.cjs.map +1 -1
  351. package/dist/components/Center/Center.module.js.map +1 -1
  352. package/dist/components/Chat/Chat.cjs.map +1 -1
  353. package/dist/components/Chat/Chat.js.map +1 -1
  354. package/dist/components/Chat/Chat.module.cjs.map +1 -1
  355. package/dist/components/Chat/Chat.module.js.map +1 -1
  356. package/dist/components/Chat/ChatActionsMenu.cjs.map +1 -1
  357. package/dist/components/Chat/ChatActionsMenu.js.map +1 -1
  358. package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
  359. package/dist/components/Chat/ChatAttachments.js.map +1 -1
  360. package/dist/components/Chat/ChatBubble.cjs.map +1 -1
  361. package/dist/components/Chat/ChatBubble.js.map +1 -1
  362. package/dist/components/Chat/ChatComposer.cjs.map +1 -1
  363. package/dist/components/Chat/ChatComposer.js.map +1 -1
  364. package/dist/components/Chat/chat-groups.cjs +1 -1
  365. package/dist/components/Chat/chat-groups.cjs.map +1 -1
  366. package/dist/components/Chat/chat-groups.js +2 -6
  367. package/dist/components/Chat/chat-groups.js.map +1 -1
  368. package/dist/components/Chat/chat-receipt.cjs.map +1 -1
  369. package/dist/components/Chat/chat-receipt.js.map +1 -1
  370. package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
  371. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  372. package/dist/components/Checkbox/Checkbox.module.cjs.map +1 -1
  373. package/dist/components/Checkbox/Checkbox.module.js.map +1 -1
  374. package/dist/components/ChipInput/ChipInput.cjs +1 -1
  375. package/dist/components/ChipInput/ChipInput.cjs.map +1 -1
  376. package/dist/components/ChipInput/ChipInput.js +2 -12
  377. package/dist/components/ChipInput/ChipInput.js.map +1 -1
  378. package/dist/components/ChipInput/ChipInput.module.cjs.map +1 -1
  379. package/dist/components/ChipInput/ChipInput.module.js.map +1 -1
  380. package/dist/components/ClickOutside/ClickOutside.cjs.map +1 -1
  381. package/dist/components/ClickOutside/ClickOutside.js.map +1 -1
  382. package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
  383. package/dist/components/CodeBlock/CodeBlock.js.map +1 -1
  384. package/dist/components/CodeBlock/CodeBlock.module.cjs.map +1 -1
  385. package/dist/components/CodeBlock/CodeBlock.module.js.map +1 -1
  386. package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
  387. package/dist/components/CodeBlock/tokenize.js.map +1 -1
  388. package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
  389. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  390. package/dist/components/Collapsible/Collapsible.module.cjs.map +1 -1
  391. package/dist/components/Collapsible/Collapsible.module.js.map +1 -1
  392. package/dist/components/Combobox/Combobox.cjs.map +1 -1
  393. package/dist/components/Combobox/Combobox.js.map +1 -1
  394. package/dist/components/Combobox/Combobox.module.cjs.map +1 -1
  395. package/dist/components/Combobox/Combobox.module.js.map +1 -1
  396. package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -1
  397. package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -1
  398. package/dist/components/Command/Command.cjs +1 -1
  399. package/dist/components/Command/Command.cjs.map +1 -1
  400. package/dist/components/Command/Command.js +4 -11
  401. package/dist/components/Command/Command.js.map +1 -1
  402. package/dist/components/Command/Command.module.cjs.map +1 -1
  403. package/dist/components/Command/Command.module.js.map +1 -1
  404. package/dist/components/ConditionalWrapper/ConditionalWrapper.cjs.map +1 -1
  405. package/dist/components/ConditionalWrapper/ConditionalWrapper.js.map +1 -1
  406. package/dist/components/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  407. package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -1
  408. package/dist/components/ContextMenu/ContextMenu.cjs +1 -1
  409. package/dist/components/ContextMenu/ContextMenu.cjs.map +1 -1
  410. package/dist/components/ContextMenu/ContextMenu.js +1 -1
  411. package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
  412. package/dist/components/ContextMenu/ContextMenu.module.cjs.map +1 -1
  413. package/dist/components/ContextMenu/ContextMenu.module.js.map +1 -1
  414. package/dist/components/CopyButton/CopyButton.cjs.map +1 -1
  415. package/dist/components/CopyButton/CopyButton.js.map +1 -1
  416. package/dist/components/CopyButton/CopyButton.module.cjs.map +1 -1
  417. package/dist/components/CopyButton/CopyButton.module.js.map +1 -1
  418. package/dist/components/DataList/DataList.cjs.map +1 -1
  419. package/dist/components/DataList/DataList.js.map +1 -1
  420. package/dist/components/DataList/DataList.module.cjs.map +1 -1
  421. package/dist/components/DataList/DataList.module.js.map +1 -1
  422. package/dist/components/DataTable/DataTable.cjs +1 -1
  423. package/dist/components/DataTable/DataTable.cjs.map +1 -1
  424. package/dist/components/DataTable/DataTable.js +6 -14
  425. package/dist/components/DataTable/DataTable.js.map +1 -1
  426. package/dist/components/DataTable/DataTable.module.cjs.map +1 -1
  427. package/dist/components/DataTable/DataTable.module.js.map +1 -1
  428. package/dist/components/DataTable/EditableCell.cjs +1 -1
  429. package/dist/components/DataTable/EditableCell.cjs.map +1 -1
  430. package/dist/components/DataTable/EditableCell.js +1 -9
  431. package/dist/components/DataTable/EditableCell.js.map +1 -1
  432. package/dist/components/DataTable/LoadingRows.cjs.map +1 -1
  433. package/dist/components/DataTable/LoadingRows.js.map +1 -1
  434. package/dist/components/DataTable/edit-labels.cjs.map +1 -1
  435. package/dist/components/DataTable/edit-labels.js.map +1 -1
  436. package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
  437. package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
  438. package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
  439. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  440. package/dist/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
  441. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  442. package/dist/components/DateRangePicker/DateRangePicker.module.cjs.map +1 -1
  443. package/dist/components/DateRangePicker/DateRangePicker.module.js.map +1 -1
  444. package/dist/components/DescriptionList/DescriptionList.cjs.map +1 -1
  445. package/dist/components/DescriptionList/DescriptionList.js.map +1 -1
  446. package/dist/components/DescriptionList/DescriptionList.module.cjs.map +1 -1
  447. package/dist/components/DescriptionList/DescriptionList.module.js.map +1 -1
  448. package/dist/components/Divider/Divider.cjs.map +1 -1
  449. package/dist/components/Divider/Divider.js.map +1 -1
  450. package/dist/components/Divider/Divider.module.cjs.map +1 -1
  451. package/dist/components/Divider/Divider.module.js.map +1 -1
  452. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  453. package/dist/components/Drawer/Drawer.js.map +1 -1
  454. package/dist/components/Drawer/Drawer.module.cjs.map +1 -1
  455. package/dist/components/Drawer/Drawer.module.js.map +1 -1
  456. package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
  457. package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  458. package/dist/components/DropdownMenu/DropdownMenu.js +2 -14
  459. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  460. package/dist/components/DropdownMenu/DropdownMenu.module.cjs.map +1 -1
  461. package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -1
  462. package/dist/components/Dropzone/Dropzone.cjs.map +1 -1
  463. package/dist/components/Dropzone/Dropzone.js.map +1 -1
  464. package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
  465. package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
  466. package/dist/components/EmptyState/EmptyState.cjs.map +1 -1
  467. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  468. package/dist/components/EmptyState/EmptyState.module.cjs.map +1 -1
  469. package/dist/components/EmptyState/EmptyState.module.js.map +1 -1
  470. package/dist/components/ErrorState/ErrorState.cjs.map +1 -1
  471. package/dist/components/ErrorState/ErrorState.js.map +1 -1
  472. package/dist/components/ErrorState/ErrorState.module.cjs.map +1 -1
  473. package/dist/components/ErrorState/ErrorState.module.js.map +1 -1
  474. package/dist/components/ErrorText/ErrorText.cjs.map +1 -1
  475. package/dist/components/ErrorText/ErrorText.js.map +1 -1
  476. package/dist/components/ErrorText/ErrorText.module.cjs.map +1 -1
  477. package/dist/components/ErrorText/ErrorText.module.js.map +1 -1
  478. package/dist/components/FileUpload/FileUpload.cjs +1 -1
  479. package/dist/components/FileUpload/FileUpload.cjs.map +1 -1
  480. package/dist/components/FileUpload/FileUpload.js +7 -17
  481. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  482. package/dist/components/FileUpload/FileUpload.module.cjs.map +1 -1
  483. package/dist/components/FileUpload/FileUpload.module.js.map +1 -1
  484. package/dist/components/FilterBar/FilterBar.cjs.map +1 -1
  485. package/dist/components/FilterBar/FilterBar.js.map +1 -1
  486. package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
  487. package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
  488. package/dist/components/FilterBar/filter-apply.cjs.map +1 -1
  489. package/dist/components/FilterBar/filter-apply.js.map +1 -1
  490. package/dist/components/FilterBar/filter-model.cjs.map +1 -1
  491. package/dist/components/FilterBar/filter-model.js.map +1 -1
  492. package/dist/components/FilterBar/filter-query.cjs +1 -1
  493. package/dist/components/FilterBar/filter-query.cjs.map +1 -1
  494. package/dist/components/FilterBar/filter-query.js +2 -5
  495. package/dist/components/FilterBar/filter-query.js.map +1 -1
  496. package/dist/components/FilterPanel/FilterPanel.cjs.map +1 -1
  497. package/dist/components/FilterPanel/FilterPanel.js.map +1 -1
  498. package/dist/components/FilterPanel/FilterPanel.module.cjs.map +1 -1
  499. package/dist/components/FilterPanel/FilterPanel.module.js.map +1 -1
  500. package/dist/components/FloatingActionButton/FloatingActionButton.cjs.map +1 -1
  501. package/dist/components/FloatingActionButton/FloatingActionButton.js.map +1 -1
  502. package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
  503. package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
  504. package/dist/components/For/For.cjs.map +1 -1
  505. package/dist/components/For/For.js.map +1 -1
  506. package/dist/components/Form/Form.cjs.map +1 -1
  507. package/dist/components/Form/Form.js.map +1 -1
  508. package/dist/components/Form/Form.module.cjs.map +1 -1
  509. package/dist/components/Form/Form.module.js.map +1 -1
  510. package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
  511. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  512. package/dist/components/HoverCard/HoverCard.module.cjs.map +1 -1
  513. package/dist/components/HoverCard/HoverCard.module.js.map +1 -1
  514. package/dist/components/Image/Image.cjs.map +1 -1
  515. package/dist/components/Image/Image.js.map +1 -1
  516. package/dist/components/Image/Image.module.cjs.map +1 -1
  517. package/dist/components/Image/Image.module.js.map +1 -1
  518. package/dist/components/ImageCropper/ImageCropper.cjs +1 -1
  519. package/dist/components/ImageCropper/ImageCropper.cjs.map +1 -1
  520. package/dist/components/ImageCropper/ImageCropper.js +4 -8
  521. package/dist/components/ImageCropper/ImageCropper.js.map +1 -1
  522. package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
  523. package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
  524. package/dist/components/ImageCropper/crop-geometry.cjs.map +1 -1
  525. package/dist/components/ImageCropper/crop-geometry.js.map +1 -1
  526. package/dist/components/Input/Input.cjs.map +1 -1
  527. package/dist/components/Input/Input.js.map +1 -1
  528. package/dist/components/Input/Input.module.cjs.map +1 -1
  529. package/dist/components/Input/Input.module.js.map +1 -1
  530. package/dist/components/InstallBanner/InstallBanner.cjs.map +1 -1
  531. package/dist/components/InstallBanner/InstallBanner.js.map +1 -1
  532. package/dist/components/InstallBanner/InstallBanner.module.cjs.map +1 -1
  533. package/dist/components/InstallBanner/InstallBanner.module.js.map +1 -1
  534. package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
  535. package/dist/components/InstallButton/InstallButton.js.map +1 -1
  536. package/dist/components/InstallButton/InstallButton.module.cjs.map +1 -1
  537. package/dist/components/InstallButton/InstallButton.module.js.map +1 -1
  538. package/dist/components/InstallButton/install-hints.cjs.map +1 -1
  539. package/dist/components/InstallButton/install-hints.js.map +1 -1
  540. package/dist/components/Kanban/Kanban.cjs.map +1 -1
  541. package/dist/components/Kanban/Kanban.js.map +1 -1
  542. package/dist/components/Kanban/Kanban.module.cjs.map +1 -1
  543. package/dist/components/Kanban/Kanban.module.js.map +1 -1
  544. package/dist/components/Kbd/Kbd.cjs.map +1 -1
  545. package/dist/components/Kbd/Kbd.js.map +1 -1
  546. package/dist/components/Kbd/Kbd.module.cjs.map +1 -1
  547. package/dist/components/Kbd/Kbd.module.js.map +1 -1
  548. package/dist/components/Label/Label.cjs.map +1 -1
  549. package/dist/components/Label/Label.js.map +1 -1
  550. package/dist/components/Label/Label.module.cjs.map +1 -1
  551. package/dist/components/Label/Label.module.js.map +1 -1
  552. package/dist/components/Layout/Layout.cjs.map +1 -1
  553. package/dist/components/Layout/Layout.js.map +1 -1
  554. package/dist/components/Layout/Layout.module.cjs.map +1 -1
  555. package/dist/components/Layout/Layout.module.js.map +1 -1
  556. package/dist/components/Lightbox/Lightbox.cjs +1 -1
  557. package/dist/components/Lightbox/Lightbox.cjs.map +1 -1
  558. package/dist/components/Lightbox/Lightbox.js +1 -1
  559. package/dist/components/Lightbox/Lightbox.js.map +1 -1
  560. package/dist/components/Lightbox/Lightbox.module.cjs.map +1 -1
  561. package/dist/components/Lightbox/Lightbox.module.js.map +1 -1
  562. package/dist/components/ListTile/ListTile.cjs.map +1 -1
  563. package/dist/components/ListTile/ListTile.js.map +1 -1
  564. package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
  565. package/dist/components/ListTile/ListTile.module.js.map +1 -1
  566. package/dist/components/Markdown/Markdown.cjs.map +1 -1
  567. package/dist/components/Markdown/Markdown.js.map +1 -1
  568. package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
  569. package/dist/components/Markdown/Markdown.module.js.map +1 -1
  570. package/dist/components/Markdown/markdown-parse.cjs +2 -2
  571. package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
  572. package/dist/components/Markdown/markdown-parse.js +8 -27
  573. package/dist/components/Markdown/markdown-parse.js.map +1 -1
  574. package/dist/components/Masonry/Masonry.cjs.map +1 -1
  575. package/dist/components/Masonry/Masonry.js.map +1 -1
  576. package/dist/components/Masonry/Masonry.module.cjs.map +1 -1
  577. package/dist/components/Masonry/Masonry.module.js.map +1 -1
  578. package/dist/components/Masonry/masonry-layout.cjs.map +1 -1
  579. package/dist/components/Masonry/masonry-layout.js.map +1 -1
  580. package/dist/components/Menubar/Menubar.cjs.map +1 -1
  581. package/dist/components/Menubar/Menubar.js.map +1 -1
  582. package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
  583. package/dist/components/Menubar/Menubar.module.js.map +1 -1
  584. package/dist/components/Modal/Modal.cjs.map +1 -1
  585. package/dist/components/Modal/Modal.js.map +1 -1
  586. package/dist/components/Modal/Modal.module.cjs.map +1 -1
  587. package/dist/components/Modal/Modal.module.js.map +1 -1
  588. package/dist/components/ModalsManager/ModalsManager.cjs.map +1 -1
  589. package/dist/components/ModalsManager/ModalsManager.js.map +1 -1
  590. package/dist/components/ModalsManager/ModalsManager.module.cjs.map +1 -1
  591. package/dist/components/ModalsManager/ModalsManager.module.js.map +1 -1
  592. package/dist/components/Money/Money.cjs.map +1 -1
  593. package/dist/components/Money/Money.js.map +1 -1
  594. package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
  595. package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
  596. package/dist/components/MultiSelect/MultiSelect.module.cjs.map +1 -1
  597. package/dist/components/MultiSelect/MultiSelect.module.js.map +1 -1
  598. package/dist/components/NProgress/NProgress.cjs.map +1 -1
  599. package/dist/components/NProgress/NProgress.js.map +1 -1
  600. package/dist/components/NProgress/NProgress.module.cjs.map +1 -1
  601. package/dist/components/NProgress/NProgress.module.js.map +1 -1
  602. package/dist/components/Navbar/Navbar.cjs.map +1 -1
  603. package/dist/components/Navbar/Navbar.js.map +1 -1
  604. package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
  605. package/dist/components/Navbar/Navbar.module.js.map +1 -1
  606. package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
  607. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
  608. package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
  609. package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
  610. package/dist/components/NavigationRail/NavigationRail.cjs.map +1 -1
  611. package/dist/components/NavigationRail/NavigationRail.js.map +1 -1
  612. package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
  613. package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
  614. package/dist/components/NotificationCenter/NotificationCenter.cjs.map +1 -1
  615. package/dist/components/NotificationCenter/NotificationCenter.js.map +1 -1
  616. package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
  617. package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
  618. package/dist/components/NotificationCenter/use-notification-inbox.cjs.map +1 -1
  619. package/dist/components/NotificationCenter/use-notification-inbox.js.map +1 -1
  620. package/dist/components/OfflineIndicator/OfflineIndicator.cjs.map +1 -1
  621. package/dist/components/OfflineIndicator/OfflineIndicator.js.map +1 -1
  622. package/dist/components/OfflineIndicator/OfflineIndicator.module.cjs.map +1 -1
  623. package/dist/components/OfflineIndicator/OfflineIndicator.module.js.map +1 -1
  624. package/dist/components/Page/Page.cjs.map +1 -1
  625. package/dist/components/Page/Page.js.map +1 -1
  626. package/dist/components/Page/Page.module.cjs.map +1 -1
  627. package/dist/components/Page/Page.module.js.map +1 -1
  628. package/dist/components/Pagination/Pagination.cjs.map +1 -1
  629. package/dist/components/Pagination/Pagination.js.map +1 -1
  630. package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
  631. package/dist/components/Pagination/Pagination.module.js.map +1 -1
  632. package/dist/components/PasswordInput/PasswordInput.cjs.map +1 -1
  633. package/dist/components/PasswordInput/PasswordInput.js.map +1 -1
  634. package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
  635. package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
  636. package/dist/components/PinInput/PinInput.cjs.map +1 -1
  637. package/dist/components/PinInput/PinInput.js.map +1 -1
  638. package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
  639. package/dist/components/PinInput/PinInput.module.js.map +1 -1
  640. package/dist/components/Popover/Popover.cjs.map +1 -1
  641. package/dist/components/Popover/Popover.js.map +1 -1
  642. package/dist/components/Popover/Popover.module.cjs.map +1 -1
  643. package/dist/components/Popover/Popover.module.js.map +1 -1
  644. package/dist/components/Portal/Portal.cjs.map +1 -1
  645. package/dist/components/Portal/Portal.js.map +1 -1
  646. package/dist/components/Portal/anchor-position.cjs.map +1 -1
  647. package/dist/components/Portal/anchor-position.js.map +1 -1
  648. package/dist/components/Portal/escape-layer.cjs.map +1 -1
  649. package/dist/components/Portal/escape-layer.js.map +1 -1
  650. package/dist/components/Portal/portal-host.cjs.map +1 -1
  651. package/dist/components/Portal/portal-host.js.map +1 -1
  652. package/dist/components/Portal/tab-bridge.cjs +1 -1
  653. package/dist/components/Portal/tab-bridge.cjs.map +1 -1
  654. package/dist/components/Portal/tab-bridge.js +1 -5
  655. package/dist/components/Portal/tab-bridge.js.map +1 -1
  656. package/dist/components/Progress/Progress.cjs.map +1 -1
  657. package/dist/components/Progress/Progress.js.map +1 -1
  658. package/dist/components/Progress/Progress.module.cjs.map +1 -1
  659. package/dist/components/Progress/Progress.module.js.map +1 -1
  660. package/dist/components/QRCode/QRCode.cjs.map +1 -1
  661. package/dist/components/QRCode/QRCode.js.map +1 -1
  662. package/dist/components/QRCode/QRCode.module.cjs.map +1 -1
  663. package/dist/components/QRCode/QRCode.module.js.map +1 -1
  664. package/dist/components/QRCode/qr-encode.cjs +1 -1
  665. package/dist/components/QRCode/qr-encode.cjs.map +1 -1
  666. package/dist/components/QRCode/qr-encode.js +7 -13
  667. package/dist/components/QRCode/qr-encode.js.map +1 -1
  668. package/dist/components/QRCode/qr-tables.cjs.map +1 -1
  669. package/dist/components/QRCode/qr-tables.js.map +1 -1
  670. package/dist/components/Radio/Radio.cjs.map +1 -1
  671. package/dist/components/Radio/Radio.js.map +1 -1
  672. package/dist/components/Radio/Radio.module.cjs.map +1 -1
  673. package/dist/components/Radio/Radio.module.js.map +1 -1
  674. package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
  675. package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
  676. package/dist/components/RangeSlider/RangeSlider.module.cjs.map +1 -1
  677. package/dist/components/RangeSlider/RangeSlider.module.js.map +1 -1
  678. package/dist/components/RatingStars/RatingStars.cjs.map +1 -1
  679. package/dist/components/RatingStars/RatingStars.js.map +1 -1
  680. package/dist/components/RatingStars/RatingStars.module.cjs.map +1 -1
  681. package/dist/components/RatingStars/RatingStars.module.js.map +1 -1
  682. package/dist/components/RefreshIndicator/RefreshIndicator.cjs +1 -1
  683. package/dist/components/RefreshIndicator/RefreshIndicator.cjs.map +1 -1
  684. package/dist/components/RefreshIndicator/RefreshIndicator.js +10 -18
  685. package/dist/components/RefreshIndicator/RefreshIndicator.js.map +1 -1
  686. package/dist/components/RefreshIndicator/RefreshIndicator.module.cjs.map +1 -1
  687. package/dist/components/RefreshIndicator/RefreshIndicator.module.js.map +1 -1
  688. package/dist/components/RelativeTime/RelativeTime.cjs.map +1 -1
  689. package/dist/components/RelativeTime/RelativeTime.js.map +1 -1
  690. package/dist/components/Resizable/Resizable.cjs +1 -1
  691. package/dist/components/Resizable/Resizable.cjs.map +1 -1
  692. package/dist/components/Resizable/Resizable.js +1 -9
  693. package/dist/components/Resizable/Resizable.js.map +1 -1
  694. package/dist/components/Resizable/Resizable.module.cjs.map +1 -1
  695. package/dist/components/Resizable/Resizable.module.js.map +1 -1
  696. package/dist/components/Responsive/Responsive.cjs.map +1 -1
  697. package/dist/components/Responsive/Responsive.js.map +1 -1
  698. package/dist/components/Reveal/Reveal.cjs.map +1 -1
  699. package/dist/components/Reveal/Reveal.js.map +1 -1
  700. package/dist/components/Reveal/Reveal.module.cjs.map +1 -1
  701. package/dist/components/Reveal/Reveal.module.js.map +1 -1
  702. package/dist/components/Reveal/reveal-threshold.cjs.map +1 -1
  703. package/dist/components/Reveal/reveal-threshold.js.map +1 -1
  704. package/dist/components/SafeArea/SafeArea.cjs.map +1 -1
  705. package/dist/components/SafeArea/SafeArea.js.map +1 -1
  706. package/dist/components/SafeArea/SafeArea.module.cjs.map +1 -1
  707. package/dist/components/SafeArea/SafeArea.module.js.map +1 -1
  708. package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
  709. package/dist/components/Scheduler/Scheduler.js.map +1 -1
  710. package/dist/components/Scheduler/Scheduler.module.cjs.map +1 -1
  711. package/dist/components/Scheduler/Scheduler.module.js.map +1 -1
  712. package/dist/components/Scheduler/scheduler-layout.cjs.map +1 -1
  713. package/dist/components/Scheduler/scheduler-layout.js.map +1 -1
  714. package/dist/components/ScrollArea/ScrollArea.cjs.map +1 -1
  715. package/dist/components/ScrollArea/ScrollArea.js.map +1 -1
  716. package/dist/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
  717. package/dist/components/ScrollArea/ScrollArea.module.js.map +1 -1
  718. package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
  719. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  720. package/dist/components/SearchBar/SearchBar.module.cjs.map +1 -1
  721. package/dist/components/SearchBar/SearchBar.module.js.map +1 -1
  722. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
  723. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  724. package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -1
  725. package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -1
  726. package/dist/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  727. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  728. package/dist/components/SegmentedControl/SegmentedControl.module.cjs.map +1 -1
  729. package/dist/components/SegmentedControl/SegmentedControl.module.js.map +1 -1
  730. package/dist/components/Select/CaretIcon.cjs.map +1 -1
  731. package/dist/components/Select/CaretIcon.js.map +1 -1
  732. package/dist/components/Select/Select.cjs.map +1 -1
  733. package/dist/components/Select/Select.js.map +1 -1
  734. package/dist/components/Select/Select.module.cjs.map +1 -1
  735. package/dist/components/Select/Select.module.js.map +1 -1
  736. package/dist/components/Select/options.cjs.map +1 -1
  737. package/dist/components/Select/options.js.map +1 -1
  738. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  739. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  740. package/dist/components/Sidebar/Sidebar.js +13 -23
  741. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  742. package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
  743. package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
  744. package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
  745. package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
  746. package/dist/components/Sidebar/active-nav-key.cjs.map +1 -1
  747. package/dist/components/Sidebar/active-nav-key.js.map +1 -1
  748. package/dist/components/SignaturePad/SignaturePad.cjs +1 -1
  749. package/dist/components/SignaturePad/SignaturePad.cjs.map +1 -1
  750. package/dist/components/SignaturePad/SignaturePad.js +1 -5
  751. package/dist/components/SignaturePad/SignaturePad.js.map +1 -1
  752. package/dist/components/SignaturePad/SignaturePad.module.cjs.map +1 -1
  753. package/dist/components/SignaturePad/SignaturePad.module.js.map +1 -1
  754. package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
  755. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  756. package/dist/components/Skeleton/Skeleton.module.cjs.map +1 -1
  757. package/dist/components/Skeleton/Skeleton.module.js.map +1 -1
  758. package/dist/components/Slider/Slider.cjs.map +1 -1
  759. package/dist/components/Slider/Slider.js.map +1 -1
  760. package/dist/components/Slider/Slider.module.cjs.map +1 -1
  761. package/dist/components/Slider/Slider.module.js.map +1 -1
  762. package/dist/components/Spacer/Spacer.cjs.map +1 -1
  763. package/dist/components/Spacer/Spacer.js.map +1 -1
  764. package/dist/components/Spacer/Spacer.module.cjs.map +1 -1
  765. package/dist/components/Spacer/Spacer.module.js.map +1 -1
  766. package/dist/components/Sparkline/Sparkline.cjs.map +1 -1
  767. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  768. package/dist/components/Sparkline/Sparkline.module.cjs.map +1 -1
  769. package/dist/components/Sparkline/Sparkline.module.js.map +1 -1
  770. package/dist/components/Sparkline/sparkline-geometry.cjs.map +1 -1
  771. package/dist/components/Sparkline/sparkline-geometry.js.map +1 -1
  772. package/dist/components/Spinner/Spinner.cjs.map +1 -1
  773. package/dist/components/Spinner/Spinner.js.map +1 -1
  774. package/dist/components/Spinner/Spinner.module.cjs.map +1 -1
  775. package/dist/components/Spinner/Spinner.module.js.map +1 -1
  776. package/dist/components/Stat/Stat.cjs.map +1 -1
  777. package/dist/components/Stat/Stat.js.map +1 -1
  778. package/dist/components/Stat/Stat.module.cjs.map +1 -1
  779. package/dist/components/Stat/Stat.module.js.map +1 -1
  780. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  781. package/dist/components/Stepper/Stepper.js.map +1 -1
  782. package/dist/components/Stepper/Stepper.module.cjs.map +1 -1
  783. package/dist/components/Stepper/Stepper.module.js.map +1 -1
  784. package/dist/components/StepperInput/StepperInput.cjs.map +1 -1
  785. package/dist/components/StepperInput/StepperInput.js.map +1 -1
  786. package/dist/components/StepperInput/StepperInput.module.cjs.map +1 -1
  787. package/dist/components/StepperInput/StepperInput.module.js.map +1 -1
  788. package/dist/components/Switch/Switch.cjs.map +1 -1
  789. package/dist/components/Switch/Switch.js.map +1 -1
  790. package/dist/components/Switch/Switch.module.cjs.map +1 -1
  791. package/dist/components/Switch/Switch.module.js.map +1 -1
  792. package/dist/components/SyncStatusBadge/SyncStatusBadge.cjs.map +1 -1
  793. package/dist/components/SyncStatusBadge/SyncStatusBadge.js.map +1 -1
  794. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.cjs.map +1 -1
  795. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.js.map +1 -1
  796. package/dist/components/Table/Table.cjs.map +1 -1
  797. package/dist/components/Table/Table.js.map +1 -1
  798. package/dist/components/Table/Table.module.cjs.map +1 -1
  799. package/dist/components/Table/Table.module.js.map +1 -1
  800. package/dist/components/Tabs/Tabs.cjs.map +1 -1
  801. package/dist/components/Tabs/Tabs.js.map +1 -1
  802. package/dist/components/Tabs/Tabs.module.cjs.map +1 -1
  803. package/dist/components/Tabs/Tabs.module.js.map +1 -1
  804. package/dist/components/Tag/Tag.cjs.map +1 -1
  805. package/dist/components/Tag/Tag.js.map +1 -1
  806. package/dist/components/Tag/Tag.module.cjs.map +1 -1
  807. package/dist/components/Tag/Tag.module.js.map +1 -1
  808. package/dist/components/Textarea/Textarea.cjs.map +1 -1
  809. package/dist/components/Textarea/Textarea.js.map +1 -1
  810. package/dist/components/Textarea/Textarea.module.cjs.map +1 -1
  811. package/dist/components/Textarea/Textarea.module.js.map +1 -1
  812. package/dist/components/TimePicker/TimePicker.cjs.map +1 -1
  813. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  814. package/dist/components/TimePicker/TimePicker.module.cjs.map +1 -1
  815. package/dist/components/TimePicker/TimePicker.module.js.map +1 -1
  816. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  817. package/dist/components/Timeline/Timeline.js.map +1 -1
  818. package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
  819. package/dist/components/Timeline/Timeline.module.js.map +1 -1
  820. package/dist/components/Toast/Toast.module.cjs.map +1 -1
  821. package/dist/components/Toast/Toast.module.js.map +1 -1
  822. package/dist/components/Toast/ToastProvider.cjs.map +1 -1
  823. package/dist/components/Toast/ToastProvider.js.map +1 -1
  824. package/dist/components/Toggle/Toggle.cjs.map +1 -1
  825. package/dist/components/Toggle/Toggle.js.map +1 -1
  826. package/dist/components/Toggle/Toggle.module.cjs.map +1 -1
  827. package/dist/components/Toggle/Toggle.module.js.map +1 -1
  828. package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
  829. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  830. package/dist/components/ToggleGroup/ToggleGroup.module.cjs.map +1 -1
  831. package/dist/components/ToggleGroup/ToggleGroup.module.js.map +1 -1
  832. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  833. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  834. package/dist/components/Tooltip/Tooltip.module.cjs.map +1 -1
  835. package/dist/components/Tooltip/Tooltip.module.js.map +1 -1
  836. package/dist/components/Tour/Tour.cjs +1 -1
  837. package/dist/components/Tour/Tour.cjs.map +1 -1
  838. package/dist/components/Tour/Tour.js +1 -5
  839. package/dist/components/Tour/Tour.js.map +1 -1
  840. package/dist/components/Tour/Tour.module.cjs.map +1 -1
  841. package/dist/components/Tour/Tour.module.js.map +1 -1
  842. package/dist/components/Tour/tour-position.cjs.map +1 -1
  843. package/dist/components/Tour/tour-position.js.map +1 -1
  844. package/dist/components/Transfer/Transfer.cjs.map +1 -1
  845. package/dist/components/Transfer/Transfer.js.map +1 -1
  846. package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
  847. package/dist/components/Transfer/Transfer.module.js.map +1 -1
  848. package/dist/components/Transfer/transfer-state.cjs.map +1 -1
  849. package/dist/components/Transfer/transfer-state.js.map +1 -1
  850. package/dist/components/TreeView/TreeView.cjs.map +1 -1
  851. package/dist/components/TreeView/TreeView.js.map +1 -1
  852. package/dist/components/TreeView/TreeView.module.cjs.map +1 -1
  853. package/dist/components/TreeView/TreeView.module.js.map +1 -1
  854. package/dist/components/TruncateText/TruncateText.cjs.map +1 -1
  855. package/dist/components/TruncateText/TruncateText.js.map +1 -1
  856. package/dist/components/TruncateText/TruncateText.module.cjs.map +1 -1
  857. package/dist/components/TruncateText/TruncateText.module.js.map +1 -1
  858. package/dist/components/UpdatePrompt/UpdatePrompt.cjs.map +1 -1
  859. package/dist/components/UpdatePrompt/UpdatePrompt.js.map +1 -1
  860. package/dist/components/UpdatePrompt/UpdatePrompt.module.cjs.map +1 -1
  861. package/dist/components/UpdatePrompt/UpdatePrompt.module.js.map +1 -1
  862. package/dist/components/VideoPlayer/VideoPlayer.cjs +1 -1
  863. package/dist/components/VideoPlayer/VideoPlayer.cjs.map +1 -1
  864. package/dist/components/VideoPlayer/VideoPlayer.js +1 -7
  865. package/dist/components/VideoPlayer/VideoPlayer.js.map +1 -1
  866. package/dist/components/VideoPlayer/VideoPlayer.module.cjs.map +1 -1
  867. package/dist/components/VideoPlayer/VideoPlayer.module.js.map +1 -1
  868. package/dist/components/VideoPlayer/playback-rates.cjs.map +1 -1
  869. package/dist/components/VideoPlayer/playback-rates.js.map +1 -1
  870. package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
  871. package/dist/components/VirtualList/VirtualList.js.map +1 -1
  872. package/dist/components/VirtualList/VirtualList.module.cjs.map +1 -1
  873. package/dist/components/VirtualList/VirtualList.module.js.map +1 -1
  874. package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
  875. package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
  876. package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
  877. package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
  878. package/dist/components/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
  879. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  880. package/dist/components/VisuallyHidden/VisuallyHidden.module.cjs.map +1 -1
  881. package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -1
  882. package/dist/components/Wizard/Wizard.cjs +1 -1
  883. package/dist/components/Wizard/Wizard.cjs.map +1 -1
  884. package/dist/components/Wizard/Wizard.js +4 -11
  885. package/dist/components/Wizard/Wizard.js.map +1 -1
  886. package/dist/components/Wizard/Wizard.module.cjs.map +1 -1
  887. package/dist/components/Wizard/Wizard.module.js.map +1 -1
  888. package/dist/data/create-data-provider.cjs.map +1 -1
  889. package/dist/data/create-data-provider.js.map +1 -1
  890. package/dist/data/data-provider-context.cjs.map +1 -1
  891. package/dist/data/data-provider-context.js.map +1 -1
  892. package/dist/data/use-resource.cjs.map +1 -1
  893. package/dist/data/use-resource.js.map +1 -1
  894. package/dist/editor/RichTextEditor.cjs.map +1 -1
  895. package/dist/editor/RichTextEditor.js.map +1 -1
  896. package/dist/editor/RichTextEditor.module.cjs.map +1 -1
  897. package/dist/editor/RichTextEditor.module.js.map +1 -1
  898. package/dist/editor.js +1 -2
  899. package/dist/error-boundary/ErrorBoundary.cjs.map +1 -1
  900. package/dist/error-boundary/ErrorBoundary.js.map +1 -1
  901. package/dist/error-boundary/use-error-handler.cjs.map +1 -1
  902. package/dist/error-boundary/use-error-handler.js.map +1 -1
  903. package/dist/feature-flags/FeatureFlagsProvider.cjs.map +1 -1
  904. package/dist/feature-flags/FeatureFlagsProvider.js.map +1 -1
  905. package/dist/feature-flags/growthbook-adapter.cjs.map +1 -1
  906. package/dist/feature-flags/growthbook-adapter.js.map +1 -1
  907. package/dist/feature-flags/in-memory-adapter.cjs.map +1 -1
  908. package/dist/feature-flags/in-memory-adapter.js.map +1 -1
  909. package/dist/feature-flags/launchdarkly-adapter.cjs.map +1 -1
  910. package/dist/feature-flags/launchdarkly-adapter.js.map +1 -1
  911. package/dist/forms/FormField.cjs.map +1 -1
  912. package/dist/forms/FormField.js.map +1 -1
  913. package/dist/forms/br-validators.cjs.map +1 -1
  914. package/dist/forms/br-validators.js.map +1 -1
  915. package/dist/forms/masked-inputs.cjs.map +1 -1
  916. package/dist/forms/masked-inputs.js.map +1 -1
  917. package/dist/forms/use-viacep.cjs.map +1 -1
  918. package/dist/forms/use-viacep.js.map +1 -1
  919. package/dist/forms/use-zod-form.cjs.map +1 -1
  920. package/dist/forms/use-zod-form.js.map +1 -1
  921. package/dist/forms/validate-form.cjs.map +1 -1
  922. package/dist/forms/validate-form.js.map +1 -1
  923. package/dist/forms/zod-resolver.cjs.map +1 -1
  924. package/dist/forms/zod-resolver.js.map +1 -1
  925. package/dist/geo/TrajectoryMap.cjs.map +1 -1
  926. package/dist/geo/TrajectoryMap.js.map +1 -1
  927. package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
  928. package/dist/geo/TrajectoryMap.module.js.map +1 -1
  929. package/dist/geo/bounds.cjs.map +1 -1
  930. package/dist/geo/bounds.js.map +1 -1
  931. package/dist/geo/create-position-tracker.cjs +1 -1
  932. package/dist/geo/create-position-tracker.cjs.map +1 -1
  933. package/dist/geo/create-position-tracker.js +1 -7
  934. package/dist/geo/create-position-tracker.js.map +1 -1
  935. package/dist/geo/distance.cjs.map +1 -1
  936. package/dist/geo/distance.js.map +1 -1
  937. package/dist/geo/estimate.cjs.map +1 -1
  938. package/dist/geo/estimate.js.map +1 -1
  939. package/dist/geo/leaflet-map.cjs.map +1 -1
  940. package/dist/geo/leaflet-map.js.map +1 -1
  941. package/dist/geo/projection.cjs.map +1 -1
  942. package/dist/geo/projection.js.map +1 -1
  943. package/dist/geo/routing.cjs.map +1 -1
  944. package/dist/geo/routing.js.map +1 -1
  945. package/dist/geo/types.cjs.map +1 -1
  946. package/dist/geo/types.js.map +1 -1
  947. package/dist/geo/use-position-tracker.cjs.map +1 -1
  948. package/dist/geo/use-position-tracker.js.map +1 -1
  949. package/dist/hooks/pwa-env.cjs.map +1 -1
  950. package/dist/hooks/pwa-env.js.map +1 -1
  951. package/dist/hooks/tab-sequence.cjs.map +1 -1
  952. package/dist/hooks/tab-sequence.js.map +1 -1
  953. package/dist/hooks/use-announce.cjs +1 -1
  954. package/dist/hooks/use-announce.cjs.map +1 -1
  955. package/dist/hooks/use-announce.js +2 -2
  956. package/dist/hooks/use-announce.js.map +1 -1
  957. package/dist/hooks/use-async.cjs.map +1 -1
  958. package/dist/hooks/use-async.js.map +1 -1
  959. package/dist/hooks/use-before-install-prompt.cjs.map +1 -1
  960. package/dist/hooks/use-before-install-prompt.js.map +1 -1
  961. package/dist/hooks/use-breakpoint.cjs.map +1 -1
  962. package/dist/hooks/use-breakpoint.js.map +1 -1
  963. package/dist/hooks/use-click-outside.cjs.map +1 -1
  964. package/dist/hooks/use-click-outside.js.map +1 -1
  965. package/dist/hooks/use-client-filter.cjs.map +1 -1
  966. package/dist/hooks/use-client-filter.js.map +1 -1
  967. package/dist/hooks/use-clipboard.cjs.map +1 -1
  968. package/dist/hooks/use-clipboard.js.map +1 -1
  969. package/dist/hooks/use-countdown.cjs.map +1 -1
  970. package/dist/hooks/use-countdown.js.map +1 -1
  971. package/dist/hooks/use-counter.cjs.map +1 -1
  972. package/dist/hooks/use-counter.js.map +1 -1
  973. package/dist/hooks/use-debounce.cjs.map +1 -1
  974. package/dist/hooks/use-debounce.js.map +1 -1
  975. package/dist/hooks/use-deep-memo.cjs.map +1 -1
  976. package/dist/hooks/use-deep-memo.js.map +1 -1
  977. package/dist/hooks/use-disclosure.cjs.map +1 -1
  978. package/dist/hooks/use-disclosure.js.map +1 -1
  979. package/dist/hooks/use-document-title.cjs.map +1 -1
  980. package/dist/hooks/use-document-title.js.map +1 -1
  981. package/dist/hooks/use-document-visibility.cjs.map +1 -1
  982. package/dist/hooks/use-document-visibility.js.map +1 -1
  983. package/dist/hooks/use-draft-filters.cjs.map +1 -1
  984. package/dist/hooks/use-draft-filters.js.map +1 -1
  985. package/dist/hooks/use-event-listener.cjs.map +1 -1
  986. package/dist/hooks/use-event-listener.js.map +1 -1
  987. package/dist/hooks/use-favicon.cjs.map +1 -1
  988. package/dist/hooks/use-favicon.js.map +1 -1
  989. package/dist/hooks/use-focus-trap.cjs.map +1 -1
  990. package/dist/hooks/use-focus-trap.js.map +1 -1
  991. package/dist/hooks/use-fullscreen-element.cjs.map +1 -1
  992. package/dist/hooks/use-fullscreen-element.js.map +1 -1
  993. package/dist/hooks/use-fullscreen.cjs +1 -1
  994. package/dist/hooks/use-fullscreen.cjs.map +1 -1
  995. package/dist/hooks/use-fullscreen.js +7 -23
  996. package/dist/hooks/use-fullscreen.js.map +1 -1
  997. package/dist/hooks/use-geolocation.cjs.map +1 -1
  998. package/dist/hooks/use-geolocation.js.map +1 -1
  999. package/dist/hooks/use-hover.cjs.map +1 -1
  1000. package/dist/hooks/use-hover.js.map +1 -1
  1001. package/dist/hooks/use-idle.cjs.map +1 -1
  1002. package/dist/hooks/use-idle.js.map +1 -1
  1003. package/dist/hooks/use-install-prompt.cjs +1 -1
  1004. package/dist/hooks/use-install-prompt.cjs.map +1 -1
  1005. package/dist/hooks/use-install-prompt.js +1 -1
  1006. package/dist/hooks/use-install-prompt.js.map +1 -1
  1007. package/dist/hooks/use-intersection-observer.cjs.map +1 -1
  1008. package/dist/hooks/use-intersection-observer.js.map +1 -1
  1009. package/dist/hooks/use-interval.cjs.map +1 -1
  1010. package/dist/hooks/use-interval.js.map +1 -1
  1011. package/dist/hooks/use-is-first-render.cjs.map +1 -1
  1012. package/dist/hooks/use-is-first-render.js.map +1 -1
  1013. package/dist/hooks/use-keyboard-shortcut.cjs.map +1 -1
  1014. package/dist/hooks/use-keyboard-shortcut.js.map +1 -1
  1015. package/dist/hooks/use-latest-ref.cjs.map +1 -1
  1016. package/dist/hooks/use-latest-ref.js.map +1 -1
  1017. package/dist/hooks/use-list-state.cjs.map +1 -1
  1018. package/dist/hooks/use-list-state.js.map +1 -1
  1019. package/dist/hooks/use-local-storage.cjs +1 -1
  1020. package/dist/hooks/use-local-storage.cjs.map +1 -1
  1021. package/dist/hooks/use-local-storage.js +2 -5
  1022. package/dist/hooks/use-local-storage.js.map +1 -1
  1023. package/dist/hooks/use-long-press-handlers.cjs.map +1 -1
  1024. package/dist/hooks/use-long-press-handlers.js.map +1 -1
  1025. package/dist/hooks/use-long-press.cjs.map +1 -1
  1026. package/dist/hooks/use-long-press.js.map +1 -1
  1027. package/dist/hooks/use-map.cjs.map +1 -1
  1028. package/dist/hooks/use-map.js.map +1 -1
  1029. package/dist/hooks/use-media-devices.cjs.map +1 -1
  1030. package/dist/hooks/use-media-devices.js.map +1 -1
  1031. package/dist/hooks/use-media-permission.cjs +1 -1
  1032. package/dist/hooks/use-media-permission.cjs.map +1 -1
  1033. package/dist/hooks/use-media-permission.js +2 -5
  1034. package/dist/hooks/use-media-permission.js.map +1 -1
  1035. package/dist/hooks/use-media-query.cjs.map +1 -1
  1036. package/dist/hooks/use-media-query.js.map +1 -1
  1037. package/dist/hooks/use-object-url.cjs.map +1 -1
  1038. package/dist/hooks/use-object-url.js.map +1 -1
  1039. package/dist/hooks/use-online.cjs.map +1 -1
  1040. package/dist/hooks/use-online.js.map +1 -1
  1041. package/dist/hooks/use-pagination.cjs.map +1 -1
  1042. package/dist/hooks/use-pagination.js.map +1 -1
  1043. package/dist/hooks/use-previous.cjs.map +1 -1
  1044. package/dist/hooks/use-previous.js.map +1 -1
  1045. package/dist/hooks/use-push-to-talk.cjs.map +1 -1
  1046. package/dist/hooks/use-push-to-talk.js.map +1 -1
  1047. package/dist/hooks/use-queue.cjs.map +1 -1
  1048. package/dist/hooks/use-queue.js.map +1 -1
  1049. package/dist/hooks/use-resize-observer.cjs.map +1 -1
  1050. package/dist/hooks/use-resize-observer.js.map +1 -1
  1051. package/dist/hooks/use-scroll-lock.cjs.map +1 -1
  1052. package/dist/hooks/use-scroll-lock.js.map +1 -1
  1053. package/dist/hooks/use-scroll-overflow.cjs.map +1 -1
  1054. package/dist/hooks/use-scroll-overflow.js.map +1 -1
  1055. package/dist/hooks/use-service-worker-update.cjs.map +1 -1
  1056. package/dist/hooks/use-service-worker-update.js.map +1 -1
  1057. package/dist/hooks/use-set.cjs.map +1 -1
  1058. package/dist/hooks/use-set.js.map +1 -1
  1059. package/dist/hooks/use-sortable.cjs.map +1 -1
  1060. package/dist/hooks/use-sortable.js.map +1 -1
  1061. package/dist/hooks/use-stable-callback.cjs.map +1 -1
  1062. package/dist/hooks/use-stable-callback.js.map +1 -1
  1063. package/dist/hooks/use-storage-estimate.cjs.map +1 -1
  1064. package/dist/hooks/use-storage-estimate.js.map +1 -1
  1065. package/dist/hooks/use-throttle.cjs.map +1 -1
  1066. package/dist/hooks/use-throttle.js.map +1 -1
  1067. package/dist/hooks/use-timeout.cjs.map +1 -1
  1068. package/dist/hooks/use-timeout.js.map +1 -1
  1069. package/dist/hooks/use-toggle.cjs.map +1 -1
  1070. package/dist/hooks/use-toggle.js.map +1 -1
  1071. package/dist/hooks/use-typewriter.cjs.map +1 -1
  1072. package/dist/hooks/use-typewriter.js.map +1 -1
  1073. package/dist/hooks/use-window-size.cjs.map +1 -1
  1074. package/dist/hooks/use-window-size.js.map +1 -1
  1075. package/dist/http/api-client.cjs +1 -1
  1076. package/dist/http/api-client.cjs.map +1 -1
  1077. package/dist/http/api-client.js +5 -1
  1078. package/dist/http/api-client.js.map +1 -1
  1079. package/dist/http/build-url.cjs +1 -1
  1080. package/dist/http/build-url.cjs.map +1 -1
  1081. package/dist/http/build-url.js +3 -1
  1082. package/dist/http/build-url.js.map +1 -1
  1083. package/dist/http/credential-scope.cjs.map +1 -1
  1084. package/dist/http/credential-scope.js.map +1 -1
  1085. package/dist/http/csrf.cjs.map +1 -1
  1086. package/dist/http/csrf.js.map +1 -1
  1087. package/dist/http/decode-response.cjs.map +1 -1
  1088. package/dist/http/decode-response.js.map +1 -1
  1089. package/dist/http/describe-api-error.cjs.map +1 -1
  1090. package/dist/http/describe-api-error.js.map +1 -1
  1091. package/dist/http/errors.cjs.map +1 -1
  1092. package/dist/http/errors.js.map +1 -1
  1093. package/dist/http/idempotency.cjs.map +1 -1
  1094. package/dist/http/idempotency.js.map +1 -1
  1095. package/dist/http/parse-response.cjs.map +1 -1
  1096. package/dist/http/parse-response.js.map +1 -1
  1097. package/dist/http/presigned-post.cjs +2 -0
  1098. package/dist/http/presigned-post.cjs.map +1 -0
  1099. package/dist/http/presigned-post.js +73 -0
  1100. package/dist/http/presigned-post.js.map +1 -0
  1101. package/dist/http/resumable-upload.cjs.map +1 -1
  1102. package/dist/http/resumable-upload.js.map +1 -1
  1103. package/dist/http/retry.cjs.map +1 -1
  1104. package/dist/http/retry.js.map +1 -1
  1105. package/dist/http/timeout.cjs.map +1 -1
  1106. package/dist/http/timeout.js.map +1 -1
  1107. package/dist/http/upload-with-progress.cjs +1 -1
  1108. package/dist/http/upload-with-progress.cjs.map +1 -1
  1109. package/dist/http/upload-with-progress.js +2 -7
  1110. package/dist/http/upload-with-progress.js.map +1 -1
  1111. package/dist/http/use-describe-api-error.cjs.map +1 -1
  1112. package/dist/http/use-describe-api-error.js.map +1 -1
  1113. package/dist/http/use-poll.cjs +1 -1
  1114. package/dist/http/use-poll.cjs.map +1 -1
  1115. package/dist/http/use-poll.js +2 -5
  1116. package/dist/http/use-poll.js.map +1 -1
  1117. package/dist/i18n/I18nProvider.cjs.map +1 -1
  1118. package/dist/i18n/I18nProvider.js.map +1 -1
  1119. package/dist/i18n/create-i18n.cjs.map +1 -1
  1120. package/dist/i18n/create-i18n.js.map +1 -1
  1121. package/dist/icons/Icon.cjs.map +1 -1
  1122. package/dist/icons/Icon.js.map +1 -1
  1123. package/dist/icons/IconPicker.cjs.map +1 -1
  1124. package/dist/icons/IconPicker.js.map +1 -1
  1125. package/dist/icons/IconPicker.module.cjs.map +1 -1
  1126. package/dist/icons/IconPicker.module.js.map +1 -1
  1127. package/dist/icons/IconProvider.cjs.map +1 -1
  1128. package/dist/icons/IconProvider.js.map +1 -1
  1129. package/dist/icons/alias.cjs.map +1 -1
  1130. package/dist/icons/alias.js.map +1 -1
  1131. package/dist/icons/generated/aliases.cjs.map +1 -1
  1132. package/dist/icons/generated/aliases.js.map +1 -1
  1133. package/dist/icons/generated/icon-names.cjs.map +1 -1
  1134. package/dist/icons/generated/icon-names.js.map +1 -1
  1135. package/dist/icons/generated/loaders.cjs.map +1 -1
  1136. package/dist/icons/generated/loaders.js.map +1 -1
  1137. package/dist/icons/generated/shard-00.cjs.map +1 -1
  1138. package/dist/icons/generated/shard-00.js.map +1 -1
  1139. package/dist/icons/generated/shard-01.cjs.map +1 -1
  1140. package/dist/icons/generated/shard-01.js.map +1 -1
  1141. package/dist/icons/generated/shard-02.cjs.map +1 -1
  1142. package/dist/icons/generated/shard-02.js.map +1 -1
  1143. package/dist/icons/generated/shard-03.cjs.map +1 -1
  1144. package/dist/icons/generated/shard-03.js.map +1 -1
  1145. package/dist/icons/generated/shard-04.cjs.map +1 -1
  1146. package/dist/icons/generated/shard-04.js.map +1 -1
  1147. package/dist/icons/generated/shard-05.cjs.map +1 -1
  1148. package/dist/icons/generated/shard-05.js.map +1 -1
  1149. package/dist/icons/generated/shard-06.cjs.map +1 -1
  1150. package/dist/icons/generated/shard-06.js.map +1 -1
  1151. package/dist/icons/generated/shard-07.cjs.map +1 -1
  1152. package/dist/icons/generated/shard-07.js.map +1 -1
  1153. package/dist/icons/generated/shard-08.cjs.map +1 -1
  1154. package/dist/icons/generated/shard-08.js.map +1 -1
  1155. package/dist/icons/generated/shard-09.cjs.map +1 -1
  1156. package/dist/icons/generated/shard-09.js.map +1 -1
  1157. package/dist/icons/generated/shard-10.cjs.map +1 -1
  1158. package/dist/icons/generated/shard-10.js.map +1 -1
  1159. package/dist/icons/generated/shard-11.cjs.map +1 -1
  1160. package/dist/icons/generated/shard-11.js.map +1 -1
  1161. package/dist/icons/generated/shard-12.cjs.map +1 -1
  1162. package/dist/icons/generated/shard-12.js.map +1 -1
  1163. package/dist/icons/generated/shard-13.cjs.map +1 -1
  1164. package/dist/icons/generated/shard-13.js.map +1 -1
  1165. package/dist/icons/generated/shard-14.cjs.map +1 -1
  1166. package/dist/icons/generated/shard-14.js.map +1 -1
  1167. package/dist/icons/generated/shard-15.cjs.map +1 -1
  1168. package/dist/icons/generated/shard-15.js.map +1 -1
  1169. package/dist/icons/generated/shard-16.cjs.map +1 -1
  1170. package/dist/icons/generated/shard-16.js.map +1 -1
  1171. package/dist/icons/generated/shard-17.cjs.map +1 -1
  1172. package/dist/icons/generated/shard-17.js.map +1 -1
  1173. package/dist/icons/generated/shard-18.cjs.map +1 -1
  1174. package/dist/icons/generated/shard-18.js.map +1 -1
  1175. package/dist/icons/generated/shard-19.cjs.map +1 -1
  1176. package/dist/icons/generated/shard-19.js.map +1 -1
  1177. package/dist/icons/generated/shard-20.cjs.map +1 -1
  1178. package/dist/icons/generated/shard-20.js.map +1 -1
  1179. package/dist/icons/generated/shard-21.cjs.map +1 -1
  1180. package/dist/icons/generated/shard-21.js.map +1 -1
  1181. package/dist/icons/generated/shard-22.cjs.map +1 -1
  1182. package/dist/icons/generated/shard-22.js.map +1 -1
  1183. package/dist/icons/generated/shard-23.cjs.map +1 -1
  1184. package/dist/icons/generated/shard-23.js.map +1 -1
  1185. package/dist/icons/generated/shard-24.cjs.map +1 -1
  1186. package/dist/icons/generated/shard-24.js.map +1 -1
  1187. package/dist/icons/generated/shard-25.cjs.map +1 -1
  1188. package/dist/icons/generated/shard-25.js.map +1 -1
  1189. package/dist/icons/generated/shard-26.cjs.map +1 -1
  1190. package/dist/icons/generated/shard-26.js.map +1 -1
  1191. package/dist/icons/generated/shard-27.cjs.map +1 -1
  1192. package/dist/icons/generated/shard-27.js.map +1 -1
  1193. package/dist/icons/generated/shard-28.cjs.map +1 -1
  1194. package/dist/icons/generated/shard-28.js.map +1 -1
  1195. package/dist/icons/generated/shard-29.cjs.map +1 -1
  1196. package/dist/icons/generated/shard-29.js.map +1 -1
  1197. package/dist/icons/generated/shard-30.cjs.map +1 -1
  1198. package/dist/icons/generated/shard-30.js.map +1 -1
  1199. package/dist/icons/generated/shard-31.cjs.map +1 -1
  1200. package/dist/icons/generated/shard-31.js.map +1 -1
  1201. package/dist/icons/generated/shard-32.cjs.map +1 -1
  1202. package/dist/icons/generated/shard-32.js.map +1 -1
  1203. package/dist/icons/generated/shard-33.cjs.map +1 -1
  1204. package/dist/icons/generated/shard-33.js.map +1 -1
  1205. package/dist/icons/generated/shard-34.cjs.map +1 -1
  1206. package/dist/icons/generated/shard-34.js.map +1 -1
  1207. package/dist/icons/generated/shard-35.cjs.map +1 -1
  1208. package/dist/icons/generated/shard-35.js.map +1 -1
  1209. package/dist/icons/generated/shard-36.cjs.map +1 -1
  1210. package/dist/icons/generated/shard-36.js.map +1 -1
  1211. package/dist/icons/generated/shard-37.cjs.map +1 -1
  1212. package/dist/icons/generated/shard-37.js.map +1 -1
  1213. package/dist/icons/generated/shard-38.cjs.map +1 -1
  1214. package/dist/icons/generated/shard-38.js.map +1 -1
  1215. package/dist/icons/generated/shard-39.cjs.map +1 -1
  1216. package/dist/icons/generated/shard-39.js.map +1 -1
  1217. package/dist/icons/generated/shard-40.cjs.map +1 -1
  1218. package/dist/icons/generated/shard-40.js.map +1 -1
  1219. package/dist/icons/generated/shard-41.cjs.map +1 -1
  1220. package/dist/icons/generated/shard-41.js.map +1 -1
  1221. package/dist/icons/generated/shard-42.cjs.map +1 -1
  1222. package/dist/icons/generated/shard-42.js.map +1 -1
  1223. package/dist/icons/generated/shard-43.cjs.map +1 -1
  1224. package/dist/icons/generated/shard-43.js.map +1 -1
  1225. package/dist/icons/generated/shard-44.cjs.map +1 -1
  1226. package/dist/icons/generated/shard-44.js.map +1 -1
  1227. package/dist/icons/generated/shard-45.cjs.map +1 -1
  1228. package/dist/icons/generated/shard-45.js.map +1 -1
  1229. package/dist/icons/icon-context.cjs.map +1 -1
  1230. package/dist/icons/icon-context.js.map +1 -1
  1231. package/dist/icons/is-icon-name.cjs.map +1 -1
  1232. package/dist/icons/is-icon-name.js.map +1 -1
  1233. package/dist/icons/material-symbols.cjs.map +1 -1
  1234. package/dist/icons/material-symbols.js.map +1 -1
  1235. package/dist/icons/normalize-icon-name.cjs.map +1 -1
  1236. package/dist/icons/normalize-icon-name.js.map +1 -1
  1237. package/dist/icons/shard-cache.cjs +1 -1
  1238. package/dist/icons/shard-cache.cjs.map +1 -1
  1239. package/dist/icons/shard-cache.js +2 -5
  1240. package/dist/icons/shard-cache.js.map +1 -1
  1241. package/dist/icons/use-icon.cjs.map +1 -1
  1242. package/dist/icons/use-icon.js.map +1 -1
  1243. package/dist/icons/validate-icon-name.cjs.map +1 -1
  1244. package/dist/icons/validate-icon-name.js.map +1 -1
  1245. package/dist/icons-virtual.cjs.map +1 -1
  1246. package/dist/icons-virtual.js.map +1 -1
  1247. package/dist/imaging/canvas.cjs.map +1 -1
  1248. package/dist/imaging/canvas.js.map +1 -1
  1249. package/dist/imaging/compress.cjs.map +1 -1
  1250. package/dist/imaging/compress.js.map +1 -1
  1251. package/dist/imaging/decode.cjs.map +1 -1
  1252. package/dist/imaging/decode.js.map +1 -1
  1253. package/dist/imaging/encode.cjs.map +1 -1
  1254. package/dist/imaging/encode.js.map +1 -1
  1255. package/dist/imaging/exceptions.cjs.map +1 -1
  1256. package/dist/imaging/exceptions.js.map +1 -1
  1257. package/dist/imaging/frame.cjs.map +1 -1
  1258. package/dist/imaging/frame.js.map +1 -1
  1259. package/dist/imaging/thumbnails.cjs.map +1 -1
  1260. package/dist/imaging/thumbnails.js.map +1 -1
  1261. package/dist/imaging/transform.cjs.map +1 -1
  1262. package/dist/imaging/transform.js.map +1 -1
  1263. package/dist/imaging/use-image-processing.cjs.map +1 -1
  1264. package/dist/imaging/use-image-processing.js.map +1 -1
  1265. package/dist/logger/logger.cjs.map +1 -1
  1266. package/dist/logger/logger.js.map +1 -1
  1267. package/dist/neural.cjs.map +1 -1
  1268. package/dist/neural.js.map +1 -1
  1269. package/dist/oauth/GoogleSignIn.cjs +1 -1
  1270. package/dist/oauth/GoogleSignIn.cjs.map +1 -1
  1271. package/dist/oauth/GoogleSignIn.js +6 -9
  1272. package/dist/oauth/GoogleSignIn.js.map +1 -1
  1273. package/dist/oauth/callback.cjs.map +1 -1
  1274. package/dist/oauth/callback.js.map +1 -1
  1275. package/dist/oauth/use-oauth-callback.cjs.map +1 -1
  1276. package/dist/oauth/use-oauth-callback.js.map +1 -1
  1277. package/dist/offline/conflict.cjs.map +1 -1
  1278. package/dist/offline/conflict.js.map +1 -1
  1279. package/dist/offline/create-offline-database.cjs.map +1 -1
  1280. package/dist/offline/create-offline-database.js.map +1 -1
  1281. package/dist/offline/create-offline-store.cjs +1 -1
  1282. package/dist/offline/create-offline-store.cjs.map +1 -1
  1283. package/dist/offline/create-offline-store.js +1 -5
  1284. package/dist/offline/create-offline-store.js.map +1 -1
  1285. package/dist/offline/create-offline-sync.cjs +1 -1
  1286. package/dist/offline/create-offline-sync.cjs.map +1 -1
  1287. package/dist/offline/create-offline-sync.js +9 -14
  1288. package/dist/offline/create-offline-sync.js.map +1 -1
  1289. package/dist/offline/use-offline-sync.cjs.map +1 -1
  1290. package/dist/offline/use-offline-sync.js.map +1 -1
  1291. package/dist/perf/cache-size.cjs.map +1 -1
  1292. package/dist/perf/cache-size.js.map +1 -1
  1293. package/dist/perf/device.cjs.map +1 -1
  1294. package/dist/perf/device.js.map +1 -1
  1295. package/dist/perf/format.cjs.map +1 -1
  1296. package/dist/perf/format.js.map +1 -1
  1297. package/dist/perf/profiler.cjs.map +1 -1
  1298. package/dist/perf/profiler.js.map +1 -1
  1299. package/dist/push/use-push-subscription.cjs.map +1 -1
  1300. package/dist/push/use-push-subscription.js.map +1 -1
  1301. package/dist/push/utils.cjs.map +1 -1
  1302. package/dist/push/utils.js.map +1 -1
  1303. package/dist/push/web-push-client.cjs.map +1 -1
  1304. package/dist/push/web-push-client.js.map +1 -1
  1305. package/dist/query/QueryProvider.cjs.map +1 -1
  1306. package/dist/query/QueryProvider.js.map +1 -1
  1307. package/dist/query/constants.cjs.map +1 -1
  1308. package/dist/query/constants.js.map +1 -1
  1309. package/dist/query/create-query-keys.cjs.map +1 -1
  1310. package/dist/query/create-query-keys.js.map +1 -1
  1311. package/dist/query/foreign-client-warning.cjs.map +1 -1
  1312. package/dist/query/foreign-client-warning.js.map +1 -1
  1313. package/dist/query/offline-persistence.cjs +1 -1
  1314. package/dist/query/offline-persistence.cjs.map +1 -1
  1315. package/dist/query/offline-persistence.js +2 -10
  1316. package/dist/query/offline-persistence.js.map +1 -1
  1317. package/dist/query/optimistic.cjs.map +1 -1
  1318. package/dist/query/optimistic.js.map +1 -1
  1319. package/dist/query/pagination.cjs.map +1 -1
  1320. package/dist/query/pagination.js.map +1 -1
  1321. package/dist/query/retry-policy.cjs.map +1 -1
  1322. package/dist/query/retry-policy.js.map +1 -1
  1323. package/dist/query/use-cursor-query.cjs.map +1 -1
  1324. package/dist/query/use-cursor-query.js.map +1 -1
  1325. package/dist/query/use-offline-mutation.cjs.map +1 -1
  1326. package/dist/query/use-offline-mutation.js.map +1 -1
  1327. package/dist/query/use-paginated-query.cjs.map +1 -1
  1328. package/dist/query/use-paginated-query.js.map +1 -1
  1329. package/dist/router/AppRouter.cjs.map +1 -1
  1330. package/dist/router/AppRouter.js.map +1 -1
  1331. package/dist/router/RouteGuard.cjs.map +1 -1
  1332. package/dist/router/RouteGuard.js.map +1 -1
  1333. package/dist/router/index.js +2 -2
  1334. package/dist/share/share-or-download.cjs.map +1 -1
  1335. package/dist/share/share-or-download.js.map +1 -1
  1336. package/dist/share/share.cjs.map +1 -1
  1337. package/dist/share/share.js.map +1 -1
  1338. package/dist/sse/create-event-stream.cjs +1 -1
  1339. package/dist/sse/create-event-stream.cjs.map +1 -1
  1340. package/dist/sse/create-event-stream.js +44 -30
  1341. package/dist/sse/create-event-stream.js.map +1 -1
  1342. package/dist/sse/ticket-event-stream.cjs +2 -0
  1343. package/dist/sse/ticket-event-stream.cjs.map +1 -0
  1344. package/dist/sse/ticket-event-stream.js +41 -0
  1345. package/dist/sse/ticket-event-stream.js.map +1 -0
  1346. package/dist/sse/use-event-stream.cjs +1 -1
  1347. package/dist/sse/use-event-stream.cjs.map +1 -1
  1348. package/dist/sse/use-event-stream.js +7 -4
  1349. package/dist/sse/use-event-stream.js.map +1 -1
  1350. package/dist/store/create-selectors.cjs.map +1 -1
  1351. package/dist/store/create-selectors.js.map +1 -1
  1352. package/dist/store/create-store.cjs.map +1 -1
  1353. package/dist/store/create-store.js.map +1 -1
  1354. package/dist/sw/background-sync.cjs.map +1 -1
  1355. package/dist/sw/background-sync.js.map +1 -1
  1356. package/dist/sw/cache-inspect.cjs.map +1 -1
  1357. package/dist/sw/cache-inspect.js.map +1 -1
  1358. package/dist/sw/cache.cjs +1 -1
  1359. package/dist/sw/cache.cjs.map +1 -1
  1360. package/dist/sw/cache.js +2 -6
  1361. package/dist/sw/cache.js.map +1 -1
  1362. package/dist/sw/create-push-handler.cjs.map +1 -1
  1363. package/dist/sw/create-push-handler.js.map +1 -1
  1364. package/dist/sw/credential-headers.cjs.map +1 -1
  1365. package/dist/sw/credential-headers.js.map +1 -1
  1366. package/dist/sw/periodic-sync.cjs.map +1 -1
  1367. package/dist/sw/periodic-sync.js.map +1 -1
  1368. package/dist/sw/register-service-worker.cjs.map +1 -1
  1369. package/dist/sw/register-service-worker.js.map +1 -1
  1370. package/dist/sw/session-data.cjs.map +1 -1
  1371. package/dist/sw/session-data.js.map +1 -1
  1372. package/dist/tabular/assets.cjs.map +1 -1
  1373. package/dist/tabular/assets.js.map +1 -1
  1374. package/dist/tabular/cache.cjs.map +1 -1
  1375. package/dist/tabular/cache.js.map +1 -1
  1376. package/dist/tabular/compact.cjs.map +1 -1
  1377. package/dist/tabular/compact.js.map +1 -1
  1378. package/dist/tabular/exceptions.cjs.map +1 -1
  1379. package/dist/tabular/exceptions.js.map +1 -1
  1380. package/dist/tabular/manifest.cjs.map +1 -1
  1381. package/dist/tabular/manifest.js.map +1 -1
  1382. package/dist/tabular/predictor.cjs.map +1 -1
  1383. package/dist/tabular/predictor.js.map +1 -1
  1384. package/dist/tabular/use-tabular-predictor.cjs.map +1 -1
  1385. package/dist/tabular/use-tabular-predictor.js.map +1 -1
  1386. package/dist/telemetry/TelemetryProvider.cjs.map +1 -1
  1387. package/dist/telemetry/TelemetryProvider.js.map +1 -1
  1388. package/dist/telemetry/app-error-adapter.cjs.map +1 -1
  1389. package/dist/telemetry/app-error-adapter.js.map +1 -1
  1390. package/dist/telemetry/app-error-queue.cjs.map +1 -1
  1391. package/dist/telemetry/app-error-queue.js.map +1 -1
  1392. package/dist/telemetry/app-error-reporter.cjs.map +1 -1
  1393. package/dist/telemetry/app-error-reporter.js.map +1 -1
  1394. package/dist/telemetry/app-error-schema.cjs.map +1 -1
  1395. package/dist/telemetry/app-error-schema.js.map +1 -1
  1396. package/dist/telemetry/app-error-transport.cjs.map +1 -1
  1397. package/dist/telemetry/app-error-transport.js.map +1 -1
  1398. package/dist/telemetry/console-adapter.cjs.map +1 -1
  1399. package/dist/telemetry/console-adapter.js.map +1 -1
  1400. package/dist/telemetry/describe-app-error.cjs.map +1 -1
  1401. package/dist/telemetry/describe-app-error.js.map +1 -1
  1402. package/dist/telemetry/posthog-adapter.cjs +1 -1
  1403. package/dist/telemetry/posthog-adapter.cjs.map +1 -1
  1404. package/dist/telemetry/posthog-adapter.js +1 -5
  1405. package/dist/telemetry/posthog-adapter.js.map +1 -1
  1406. package/dist/telemetry/sentry-adapter.cjs.map +1 -1
  1407. package/dist/telemetry/sentry-adapter.js.map +1 -1
  1408. package/dist/tempest-react-sdk.cjs +1 -1
  1409. package/dist/tempest-react-sdk.d.ts +440 -7
  1410. package/dist/tempest-react-sdk.js +122 -120
  1411. package/dist/testing/create-mock-handlers.cjs.map +1 -1
  1412. package/dist/testing/create-mock-handlers.js.map +1 -1
  1413. package/dist/testing.js +1 -2
  1414. package/dist/theme/ThemeProvider.cjs.map +1 -1
  1415. package/dist/theme/ThemeProvider.js.map +1 -1
  1416. package/dist/theme/apply-theme.cjs.map +1 -1
  1417. package/dist/theme/apply-theme.js.map +1 -1
  1418. package/dist/theme/color.cjs.map +1 -1
  1419. package/dist/theme/color.js.map +1 -1
  1420. package/dist/theme/create-theme.cjs.map +1 -1
  1421. package/dist/theme/create-theme.js.map +1 -1
  1422. package/dist/theme/data-viz-ramps.cjs.map +1 -1
  1423. package/dist/theme/data-viz-ramps.js.map +1 -1
  1424. package/dist/theme/initial-theme.cjs.map +1 -1
  1425. package/dist/theme/initial-theme.js.map +1 -1
  1426. package/dist/theme/inverse-render.cjs.map +1 -1
  1427. package/dist/theme/inverse-render.js.map +1 -1
  1428. package/dist/theme/inverse-restore.cjs.map +1 -1
  1429. package/dist/theme/inverse-restore.js.map +1 -1
  1430. package/dist/theme/inverse-surface.cjs.map +1 -1
  1431. package/dist/theme/inverse-surface.js.map +1 -1
  1432. package/dist/theme/status-tokens.cjs.map +1 -1
  1433. package/dist/theme/status-tokens.js.map +1 -1
  1434. package/dist/theme/theme-presets.cjs.map +1 -1
  1435. package/dist/theme/theme-presets.js.map +1 -1
  1436. package/dist/utils/absent.cjs.map +1 -1
  1437. package/dist/utils/absent.js.map +1 -1
  1438. package/dist/utils/arrays.cjs.map +1 -1
  1439. package/dist/utils/arrays.js.map +1 -1
  1440. package/dist/utils/base64.cjs.map +1 -1
  1441. package/dist/utils/base64.js.map +1 -1
  1442. package/dist/utils/cn.cjs.map +1 -1
  1443. package/dist/utils/cn.js.map +1 -1
  1444. package/dist/utils/compare-values.cjs.map +1 -1
  1445. package/dist/utils/compare-values.js.map +1 -1
  1446. package/dist/utils/compressed-storage.cjs.map +1 -1
  1447. package/dist/utils/compressed-storage.js.map +1 -1
  1448. package/dist/utils/csv.cjs.map +1 -1
  1449. package/dist/utils/csv.js.map +1 -1
  1450. package/dist/utils/dev-mode.cjs.map +1 -1
  1451. package/dist/utils/dev-mode.js.map +1 -1
  1452. package/dist/utils/duplicate-instance.cjs.map +1 -1
  1453. package/dist/utils/duplicate-instance.js.map +1 -1
  1454. package/dist/utils/format.cjs.map +1 -1
  1455. package/dist/utils/format.js.map +1 -1
  1456. package/dist/utils/functions.cjs +1 -1
  1457. package/dist/utils/functions.cjs.map +1 -1
  1458. package/dist/utils/functions.js +1 -1
  1459. package/dist/utils/functions.js.map +1 -1
  1460. package/dist/utils/guards.cjs.map +1 -1
  1461. package/dist/utils/guards.js.map +1 -1
  1462. package/dist/utils/ids.cjs.map +1 -1
  1463. package/dist/utils/ids.js.map +1 -1
  1464. package/dist/utils/intl-cache.cjs.map +1 -1
  1465. package/dist/utils/intl-cache.js.map +1 -1
  1466. package/dist/utils/json-frame.cjs.map +1 -1
  1467. package/dist/utils/json-frame.js.map +1 -1
  1468. package/dist/utils/numbers.cjs.map +1 -1
  1469. package/dist/utils/numbers.js.map +1 -1
  1470. package/dist/utils/objects.cjs.map +1 -1
  1471. package/dist/utils/objects.js.map +1 -1
  1472. package/dist/utils/owner-fingerprint.cjs.map +1 -1
  1473. package/dist/utils/owner-fingerprint.js.map +1 -1
  1474. package/dist/utils/promises.cjs.map +1 -1
  1475. package/dist/utils/promises.js.map +1 -1
  1476. package/dist/utils/relative-time.cjs.map +1 -1
  1477. package/dist/utils/relative-time.js.map +1 -1
  1478. package/dist/utils/safe-url.cjs.map +1 -1
  1479. package/dist/utils/safe-url.js.map +1 -1
  1480. package/dist/utils/schema-like.cjs.map +1 -1
  1481. package/dist/utils/schema-like.js.map +1 -1
  1482. package/dist/utils/storage.cjs +1 -1
  1483. package/dist/utils/storage.cjs.map +1 -1
  1484. package/dist/utils/storage.js +2 -2
  1485. package/dist/utils/storage.js.map +1 -1
  1486. package/dist/utils/strings.cjs.map +1 -1
  1487. package/dist/utils/strings.js.map +1 -1
  1488. package/dist/utils/xlsx.cjs.map +1 -1
  1489. package/dist/utils/xlsx.js.map +1 -1
  1490. package/dist/vision/core/canvas.cjs.map +1 -1
  1491. package/dist/vision/core/canvas.js.map +1 -1
  1492. package/dist/vision/core/dtypes.cjs.map +1 -1
  1493. package/dist/vision/core/dtypes.js.map +1 -1
  1494. package/dist/vision/core/exceptions.cjs.map +1 -1
  1495. package/dist/vision/core/exceptions.js.map +1 -1
  1496. package/dist/vision/core/graph.cjs.map +1 -1
  1497. package/dist/vision/core/graph.js.map +1 -1
  1498. package/dist/vision/core/metadata.cjs +1 -1
  1499. package/dist/vision/core/metadata.cjs.map +1 -1
  1500. package/dist/vision/core/metadata.js +9 -26
  1501. package/dist/vision/core/metadata.js.map +1 -1
  1502. package/dist/vision/core/providers.cjs.map +1 -1
  1503. package/dist/vision/core/providers.js.map +1 -1
  1504. package/dist/vision/core/session.cjs.map +1 -1
  1505. package/dist/vision/core/session.js.map +1 -1
  1506. package/dist/vision/core/timing.cjs.map +1 -1
  1507. package/dist/vision/core/timing.js.map +1 -1
  1508. package/dist/vision/fusion.cjs.map +1 -1
  1509. package/dist/vision/fusion.js.map +1 -1
  1510. package/dist/vision/index.cjs.map +1 -1
  1511. package/dist/vision/index.js.map +1 -1
  1512. package/dist/vision/io/image.cjs.map +1 -1
  1513. package/dist/vision/io/image.js.map +1 -1
  1514. package/dist/vision/labels.cjs.map +1 -1
  1515. package/dist/vision/labels.js.map +1 -1
  1516. package/dist/vision/luminance.cjs.map +1 -1
  1517. package/dist/vision/luminance.js.map +1 -1
  1518. package/dist/vision/normalization.cjs.map +1 -1
  1519. package/dist/vision/normalization.js.map +1 -1
  1520. package/dist/vision/postprocess/classification.cjs.map +1 -1
  1521. package/dist/vision/postprocess/classification.js.map +1 -1
  1522. package/dist/vision/postprocess/detection.cjs.map +1 -1
  1523. package/dist/vision/postprocess/detection.js.map +1 -1
  1524. package/dist/vision/postprocess/segmentation.cjs.map +1 -1
  1525. package/dist/vision/postprocess/segmentation.js.map +1 -1
  1526. package/dist/vision/preprocess/image.cjs.map +1 -1
  1527. package/dist/vision/preprocess/image.js.map +1 -1
  1528. package/dist/vision/preprocess/pipeline.cjs.map +1 -1
  1529. package/dist/vision/preprocess/pipeline.js.map +1 -1
  1530. package/dist/vision/results.cjs.map +1 -1
  1531. package/dist/vision/results.js.map +1 -1
  1532. package/dist/vision/tasks/base.cjs.map +1 -1
  1533. package/dist/vision/tasks/base.js.map +1 -1
  1534. package/dist/vision/tasks/classifier.cjs.map +1 -1
  1535. package/dist/vision/tasks/classifier.js.map +1 -1
  1536. package/dist/vision/tasks/detectClassify.cjs.map +1 -1
  1537. package/dist/vision/tasks/detectClassify.js.map +1 -1
  1538. package/dist/vision/tasks/detector.cjs.map +1 -1
  1539. package/dist/vision/tasks/detector.js.map +1 -1
  1540. package/dist/vision/tasks/segmenter.cjs.map +1 -1
  1541. package/dist/vision/tasks/segmenter.js.map +1 -1
  1542. package/dist/vision/types.cjs.map +1 -1
  1543. package/dist/vision/types.js.map +1 -1
  1544. package/dist/vision/use-camera-stream.cjs +1 -1
  1545. package/dist/vision/use-camera-stream.cjs.map +1 -1
  1546. package/dist/vision/use-camera-stream.js +3 -9
  1547. package/dist/vision/use-camera-stream.js.map +1 -1
  1548. package/dist/vision/use-live-luminance.cjs +1 -1
  1549. package/dist/vision/use-live-luminance.cjs.map +1 -1
  1550. package/dist/vision/use-live-luminance.js +1 -5
  1551. package/dist/vision/use-live-luminance.js.map +1 -1
  1552. package/dist/vite/base-url.cjs.map +1 -1
  1553. package/dist/vite/base-url.js.map +1 -1
  1554. package/dist/vite/create-vite-config.cjs.map +1 -1
  1555. package/dist/vite/create-vite-config.js.map +1 -1
  1556. package/dist/vite/narrow-tokens.cjs.map +1 -1
  1557. package/dist/vite/narrow-tokens.js.map +1 -1
  1558. package/dist/vite/tempest-csp.cjs +1 -1
  1559. package/dist/vite/tempest-csp.cjs.map +1 -1
  1560. package/dist/vite/tempest-csp.js +2 -10
  1561. package/dist/vite/tempest-csp.js.map +1 -1
  1562. package/dist/vite/tempest-icons.cjs.map +1 -1
  1563. package/dist/vite/tempest-icons.js.map +1 -1
  1564. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  1565. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  1566. package/dist/vite/tempest-pwa-dev-sw.js +9 -16
  1567. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  1568. package/dist/vite/tempest-pwa-icons.cjs.map +1 -1
  1569. package/dist/vite/tempest-pwa-icons.js.map +1 -1
  1570. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  1571. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  1572. package/dist/vite/tempest-styles.cjs.map +1 -1
  1573. package/dist/vite/tempest-styles.js.map +1 -1
  1574. package/dist/vite/tempest-vitest.cjs.map +1 -1
  1575. package/dist/vite/tempest-vitest.js.map +1 -1
  1576. package/dist/webrtc/link-stats.cjs.map +1 -1
  1577. package/dist/webrtc/link-stats.js.map +1 -1
  1578. package/dist/webrtc/mesh-quality.cjs.map +1 -1
  1579. package/dist/webrtc/mesh-quality.js.map +1 -1
  1580. package/dist/webrtc/opus-sdp.cjs.map +1 -1
  1581. package/dist/webrtc/opus-sdp.js.map +1 -1
  1582. package/dist/webrtc/peer-link.cjs +1 -1
  1583. package/dist/webrtc/peer-link.cjs.map +1 -1
  1584. package/dist/webrtc/peer-link.js +2 -5
  1585. package/dist/webrtc/peer-link.js.map +1 -1
  1586. package/dist/webrtc/peer-mesh.cjs +1 -1
  1587. package/dist/webrtc/peer-mesh.cjs.map +1 -1
  1588. package/dist/webrtc/peer-mesh.js +8 -24
  1589. package/dist/webrtc/peer-mesh.js.map +1 -1
  1590. package/dist/webrtc/sender-bitrate.cjs.map +1 -1
  1591. package/dist/webrtc/sender-bitrate.js.map +1 -1
  1592. package/dist/webrtc/use-link-stats.cjs.map +1 -1
  1593. package/dist/webrtc/use-link-stats.js.map +1 -1
  1594. package/dist/ws/create-web-socket.cjs +1 -1
  1595. package/dist/ws/create-web-socket.cjs.map +1 -1
  1596. package/dist/ws/create-web-socket.js +4 -22
  1597. package/dist/ws/create-web-socket.js.map +1 -1
  1598. package/dist/ws/resilience.cjs.map +1 -1
  1599. package/dist/ws/resilience.js.map +1 -1
  1600. package/dist/ws/use-web-socket.cjs.map +1 -1
  1601. package/dist/ws/use-web-socket.js.map +1 -1
  1602. package/package.json +9 -6
  1603. package/template/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TrajectoryMap.js","names":[],"sources":["../../src/geo/TrajectoryMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the SVG plot (points,\n * current, height, padding, showGrid, showScale, strokeColor, label), the optional\n * leaflet tile layer (tileUrl, tileAttribution) and the overlay (markers,\n * onMarkerClick). The body projects the path, fits the bounds and hands the same\n * bounds to the tile layer when there is one.\n */\nimport { lazy, Suspense, useEffect, useMemo, useRef, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { boundingBox, expandBounds } from \"./bounds\";\nimport { haversineKm } from \"./distance\";\nimport { fitProjection, type PixelPoint } from \"./projection\";\nimport type { Coordinate, GeoMarker } from \"./types\";\nimport styles from \"./TrajectoryMap.module.css\";\n\n// Leaflet layer is loaded on demand — only when a `tileUrl` is supplied, so\n// apps that stick to the tile-free SVG never pull leaflet into their bundle.\nconst LeafletTrajectory = lazy(() =>\n import(\"./leaflet-map\").then((m) => ({ default: m.LeafletTrajectory })),\n);\n\nexport interface TrajectoryMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Ordered coordinates forming the trajectory. */\n points: readonly Coordinate[];\n /** Optional \"current position\" marker, drawn on top of the path. */\n current?: Coordinate | null;\n /** Viewport height in pixels. Default: `320`. */\n height?: number;\n /** Inner padding in pixels kept clear on every edge. Default: `24`. */\n padding?: number;\n /** Draw a light reference grid behind the path (SVG mode). Default: `true`. */\n showGrid?: boolean;\n /** Draw a distance scale bar (SVG mode). Default: `true`. */\n showScale?: boolean;\n /** Path stroke color. Default: the primary token. */\n strokeColor?: string;\n /**\n * Tile URL template (`{z}/{x}/{y}`) of a map server **you host**. When set,\n * the map upgrades to a real Leaflet tile layer (requires `leaflet` to be\n * installed). Omit for the zero-dependency, zero-network SVG plot.\n */\n tileUrl?: string;\n /** Attribution text shown over the tile layer. */\n tileAttribution?: string;\n /** Accessible label for the map region. Default: `\"Trajetória\"`. */\n label?: string;\n /** Point markers to overlay (e.g. stops, POIs). Included in the auto-fit. */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\nconst NICE_KM_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000] as const;\n\n/** Pick the largest \"nice\" distance whose bar fits within `maxPixels`. */\nfunction pickScaleKm(kmPerPixel: number, maxPixels: number): { km: number; pixels: number } {\n const maxKm = kmPerPixel * maxPixels;\n let chosen: number = NICE_KM_STEPS[0];\n for (const step of NICE_KM_STEPS) {\n if (step <= maxKm) chosen = step;\n }\n return { km: chosen, pixels: chosen / kmPerPixel };\n}\n\n/** Format a distance in km for the scale bar (meters below 1 km). */\nfunction formatScale(km: number): string {\n return km < 1 ? `${Math.round(km * 1000)} m` : `${km % 1 === 0 ? km : km.toFixed(1)} km`;\n}\n\n/**\n * Plot a GPS trajectory. By default it renders a **tile-free SVG** map (Web\n * Mercator projection, auto-fit to the points, optional grid + scale bar) —\n * 100% self-contained, no external tiles or paid API. Pass `tileUrl` pointing\n * at a map server **you host** to upgrade to a real Leaflet tile layer.\n *\n * @example\n * // Zero-dependency SVG plot\n * <TrajectoryMap points={points} current={lastPoint} height={360} />\n *\n * @example\n * // Real tiles from your own server (requires `leaflet` installed)\n * <TrajectoryMap points={points} tileUrl=\"https://tiles.internal/{z}/{x}/{y}.png\" />\n */\nexport function TrajectoryMap({\n points,\n current,\n height = 320,\n padding = 24,\n showGrid = true,\n showScale = true,\n strokeColor,\n tileUrl,\n tileAttribution,\n label = \"Trajetória\",\n markers,\n onMarkerClick,\n className,\n style,\n ...rest\n}: TrajectoryMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => {\n const measured = entries[0]?.contentRect.width;\n if (measured && measured > 0) setWidth(measured);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const allPoints = useMemo<Coordinate[]>(\n () => [...points, ...(current ? [current] : []), ...(markers ?? [])],\n [points, current, markers],\n );\n\n const svg = useMemo(() => {\n const box = boundingBox(allPoints);\n if (!box) return null;\n\n const projection = fitProjection(expandBounds(box, 0.12), width, height, { padding });\n const pixels: PixelPoint[] = points.map((p) => projection.project(p));\n const polyline = pixels.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(\" \");\n\n const startPixel = pixels[0] ?? null;\n const endPixel = pixels.length > 0 ? pixels[pixels.length - 1] : null;\n const currentPixel = current ? projection.project(current) : null;\n\n // Distance-per-pixel at the map center, for the scale bar: measure the\n // center → east-edge span in both km (haversine) and pixels (projected).\n const centerCoord = {\n latitude: (box.minLatitude + box.maxLatitude) / 2,\n longitude: (box.minLongitude + box.maxLongitude) / 2,\n };\n const center = projection.project(centerCoord);\n const eastRef = projection.project({ ...centerCoord, longitude: box.maxLongitude });\n const edgeKm = haversineKm(centerCoord, { ...centerCoord, longitude: box.maxLongitude });\n const edgePixels = Math.abs(eastRef.x - center.x) || 1;\n const kmPerPixel = edgeKm / edgePixels || 0;\n\n const markerPixels = (markers ?? []).map((m) => ({ marker: m, p: projection.project(m) }));\n\n return { polyline, startPixel, endPixel, currentPixel, kmPerPixel, markerPixels };\n }, [allPoints, points, current, markers, width, height, padding]);\n\n // ── Leaflet tile mode ────────────────────────────────────────────────────\n if (tileUrl) {\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n <Suspense fallback={<div className={styles.loading}>Carregando mapa…</div>}>\n <LeafletTrajectory\n points={points}\n current={current}\n tileUrl={tileUrl}\n tileAttribution={tileAttribution}\n strokeColor={strokeColor}\n />\n </Suspense>\n </div>\n );\n }\n\n // ── Tile-free SVG mode ─────────────────────────────────────────────────────\n const scale =\n showScale && svg && svg.kmPerPixel > 0\n ? pickScaleKm(svg.kmPerPixel, Math.min(120, width * 0.35))\n : null;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {!svg ? (\n <div className={styles.empty}>Sem pontos de trajetória ainda.</div>\n ) : (\n <svg\n className={styles.svg}\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n >\n {showGrid && (\n <g className={styles.grid}>\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`h${f}`}\n x1={0}\n y1={height * f}\n x2={width}\n y2={height * f}\n />\n ))}\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`v${f}`}\n x1={width * f}\n y1={0}\n x2={width * f}\n y2={height}\n />\n ))}\n </g>\n )}\n\n {svg.polyline && (\n <polyline\n className={styles.path}\n points={svg.polyline}\n fill=\"none\"\n stroke={strokeColor}\n data-testid=\"trajectory-path\"\n />\n )}\n\n {svg.startPixel && (\n <circle\n className={styles.start}\n cx={svg.startPixel.x}\n cy={svg.startPixel.y}\n r={5}\n />\n )}\n {svg.endPixel && !current && (\n <circle\n className={styles.end}\n cx={svg.endPixel.x}\n cy={svg.endPixel.y}\n r={5}\n />\n )}\n {svg.currentPixel && (\n <>\n <circle\n className={styles.pulse}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={10}\n />\n <circle\n className={styles.current}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={5}\n />\n </>\n )}\n\n {svg.markerPixels.map(({ marker, p }, i) => {\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? i}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n style={marker.color ? { fill: marker.color } : undefined}\n data-marker-id={marker.id ?? i}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, i) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, i);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n\n {scale && (\n <g\n className={styles.scale}\n transform={`translate(${padding}, ${height - padding})`}\n >\n <line x1={0} y1={0} x2={scale.pixels} y2={0} />\n <line x1={0} y1={-4} x2={0} y2={4} />\n <line x1={scale.pixels} y1={-4} x2={scale.pixels} y2={4} />\n <text x={scale.pixels / 2} y={-8} textAnchor=\"middle\">\n {formatScale(scale.km)}\n </text>\n </g>\n )}\n </svg>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAiBA,IAAM,IAAoB,QACtB,OAAO,mBAAgB,CAAC,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAC1E,GAiCM,IAAgB;CAAC;CAAM;CAAK;CAAM;CAAK;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAK;CAAK;CAAK;AAAI;AAGrF,SAAS,EAAY,GAAoB,GAAmD;CACxF,IAAM,IAAQ,IAAa,GACvB,IAAiB,EAAc;CACnC,KAAK,IAAM,KAAQ,GACf,AAAI,KAAQ,MAAO,IAAS;CAEhC,OAAO;EAAE,IAAI;EAAQ,QAAQ,IAAS;CAAW;AACrD;AAGA,SAAS,EAAY,GAAoB;CACrC,OAAO,IAAK,IAAI,GAAG,KAAK,MAAM,IAAK,GAAI,EAAE,MAAM,GAAG,IAAK,KAAM,IAAI,IAAK,EAAG,QAAQ,CAAC,EAAE;AACxF;AAgBA,SAAgB,EAAc,EAC1B,WACA,YACA,YAAS,KACT,aAAU,IACV,cAAW,IACX,eAAY,IACZ,gBACA,YACA,oBACA,WAAQ,cACR,YACA,kBACA,cACA,UACA,GAAG,KACgB;CACnB,IAAM,IAAe,EAAuB,IAAI,GAC1C,CAAC,GAAO,KAAY,EAAiB,GAAG;CAE9C,QAAgB;EACZ,IAAM,IAAO,EAAa;EAC1B,IAAI,CAAC,KAAQ,OAAO,iBAAmB,KAAa;EACpD,IAAM,IAAW,IAAI,gBAAgB,MAAY;GAC7C,IAAM,IAAW,EAAQ,EAAE,EAAE,YAAY;GACzC,AAAI,KAAY,IAAW,KAAG,EAAS,CAAQ;EACnD,CAAC;EAED,OADA,EAAS,QAAQ,CAAI,SACR,EAAS,WAAW;CACrC,GAAG,CAAC,CAAC;CAEL,IAAM,IAAY,QACR;EAAC,GAAG;EAAQ,GAAI,IAAU,CAAC,CAAO,IAAI,CAAC;EAAI,GAAI,KAAW,CAAC;CAAE,GACnE;EAAC;EAAQ;EAAS;CAAO,CAC7B,GAEM,IAAM,QAAc;EACtB,IAAM,IAAM,EAAY,CAAS;EACjC,IAAI,CAAC,GAAK,OAAO;EAEjB,IAAM,IAAa,EAAc,EAAa,GAAK,GAAI,GAAG,GAAO,GAAQ,EAAE,WAAQ,CAAC,GAC9E,IAAuB,EAAO,KAAK,MAAM,EAAW,QAAQ,CAAC,CAAC,GAC9D,IAAW,EAAO,KAAK,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAE5E,IAAa,EAAO,MAAM,MAC1B,IAAW,EAAO,SAAS,IAAI,EAAO,EAAO,SAAS,KAAK,MAC3D,IAAe,IAAU,EAAW,QAAQ,CAAO,IAAI,MAIvD,IAAc;GAChB,WAAW,EAAI,cAAc,EAAI,eAAe;GAChD,YAAY,EAAI,eAAe,EAAI,gBAAgB;EACvD,GACM,IAAS,EAAW,QAAQ,CAAW,GACvC,IAAU,EAAW,QAAQ;GAAE,GAAG;GAAa,WAAW,EAAI;EAAa,CAAC;EAOlF,OAAO;GAAE;GAAU;GAAY;GAAU;GAAc,YANxC,EAAY,GAAa;IAAE,GAAG;IAAa,WAAW,EAAI;GAAa,CAEnE,KADA,KAAK,IAAI,EAAQ,IAAI,EAAO,CAAC,KAAK,MACX;GAIyB,eAF7C,KAAW,CAAC,EAAA,CAAG,KAAK,OAAO;IAAE,QAAQ;IAAG,GAAG,EAAW,QAAQ,CAAC;GAAE,EAEpB;EAAa;CACpF,GAAG;EAAC;EAAW;EAAQ;EAAS;EAAS;EAAO;EAAQ;CAAO,CAAC;CAGhE,IAAI,GACA,OACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,EAAO,KAAK,CAAS;EACnC,OAAO;GAAE;GAAQ,GAAG;EAAM;EAC1B,MAAK;EACL,cAAY;EACZ,GAAI;EAEJ,UAAA,kBAAC,GAAD;GAAU,UAAU,kBAAC,OAAD;IAAK,WAAW,EAAO;IAAS,UAAA;GAAqB,CAAA;GACrE,UAAA,kBAAC,GAAD;IACY;IACC;IACA;IACQ;IACJ;GAChB,CAAA;EACK,CAAA;CACT,CAAA;CAKb,IAAM,IACF,KAAa,KAAO,EAAI,aAAa,IAC/B,EAAY,EAAI,YAAY,KAAK,IAAI,KAAK,IAAQ,GAAI,CAAC,IACvD;CAEV,OACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,EAAO,KAAK,CAAS;EACnC,OAAO;GAAE;GAAQ,GAAG;EAAM;EAC1B,MAAK;EACL,cAAY;EACZ,GAAI;EAEH,UAAC,IAGE,kBAAC,OAAD;GACI,WAAW,EAAO;GAClB,OAAM;GACE;GACR,SAAS,OAAO,EAAM,GAAG;GACzB,qBAAoB;GALxB,UAAA;IAOK,KACG,kBAAC,KAAD;KAAG,WAAW,EAAO;KAArB,UAAA,CACK;MAAC;MAAM;MAAK;KAAI,CAAC,CAAC,KAAK,MACpB,kBAAC,QAAD;MAEI,IAAI;MACJ,IAAI,IAAS;MACb,IAAI;MACJ,IAAI,IAAS;KAChB,GALQ,IAAI,GAKZ,CACJ,GACA;MAAC;MAAM;MAAK;KAAI,CAAC,CAAC,KAAK,MACpB,kBAAC,QAAD;MAEI,IAAI,IAAQ;MACZ,IAAI;MACJ,IAAI,IAAQ;MACZ,IAAI;KACP,GALQ,IAAI,GAKZ,CACJ,CACF;;IAGN,EAAI,YACD,kBAAC,YAAD;KACI,WAAW,EAAO;KAClB,QAAQ,EAAI;KACZ,MAAK;KACL,QAAQ;KACR,eAAY;IACf,CAAA;IAGJ,EAAI,cACD,kBAAC,UAAD;KACI,WAAW,EAAO;KAClB,IAAI,EAAI,WAAW;KACnB,IAAI,EAAI,WAAW;KACnB,GAAG;IACN,CAAA;IAEJ,EAAI,YAAY,CAAC,KACd,kBAAC,UAAD;KACI,WAAW,EAAO;KAClB,IAAI,EAAI,SAAS;KACjB,IAAI,EAAI,SAAS;KACjB,GAAG;IACN,CAAA;IAEJ,EAAI,gBACD,kBAAA,GAAA,EAAA,UAAA,CACI,kBAAC,UAAD;KACI,WAAW,EAAO;KAClB,IAAI,EAAI,aAAa;KACrB,IAAI,EAAI,aAAa;KACrB,GAAG;IACN,CAAA,GACD,kBAAC,UAAD;KACI,WAAW,EAAO;KAClB,IAAI,EAAI,aAAa;KACrB,IAAI,EAAI,aAAa;KACrB,GAAG;IACN,CAAA,CACH,EAAA,CAAA;IAGL,EAAI,aAAa,KAAK,EAAE,WAAQ,QAAK,MAAM;KACxC,IAAM,IAAc,EAAQ;KAC5B,OACI,kBAAC,UAAD;MAEI,WAAW,EAAO;MAClB,IAAI,EAAE;MACN,IAAI,EAAE;MACN,GAAG,EAAO,UAAU;MACpB,OAAO,EAAO,QAAQ,EAAE,MAAM,EAAO,MAAM,IAAI,KAAA;MAC/C,kBAAgB,EAAO,MAAM;MAC7B,UAAU,IAAc,IAAI,KAAA;MAC5B,MAAM,IAAc,WAAW,KAAA;MAC/B,cAAY,EAAO;MACnB,SAAS,UAAoB,IAAgB,GAAQ,CAAC,IAAI,KAAA;MAC1D,WACI,KACO,MAAM;OACH,CAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAC/B,EAAE,eAAe,GACjB,IAAgB,GAAQ,CAAC;MAEjC,IACA,KAAA;MAGT,UAAA,EAAO,QAAQ,kBAAC,SAAD,EAAA,UAAQ,EAAO,MAAa,CAAA,IAAI;KAC5C,GAvBC,EAAO,MAAM,CAuBd;IAEhB,CAAC;IAEA,KACG,kBAAC,KAAD;KACI,WAAW,EAAO;KAClB,WAAW,aAAa,EAAQ,IAAI,IAAS,EAAQ;KAFzD,UAAA;MAII,kBAAC,QAAD;OAAM,IAAI;OAAG,IAAI;OAAG,IAAI,EAAM;OAAQ,IAAI;MAAI,CAAA;MAC9C,kBAAC,QAAD;OAAM,IAAI;OAAG,IAAI;OAAI,IAAI;OAAG,IAAI;MAAI,CAAA;MACpC,kBAAC,QAAD;OAAM,IAAI,EAAM;OAAQ,IAAI;OAAI,IAAI,EAAM;OAAQ,IAAI;MAAI,CAAA;MAC1D,kBAAC,QAAD;OAAM,GAAG,EAAM,SAAS;OAAG,GAAG;OAAI,YAAW;OACxC,UAAA,EAAY,EAAM,EAAE;MACnB,CAAA;KACP;;GAEN;OAvHL,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAO,UAAA;EAAoC,CAAA;CAyHrE,CAAA;AAEb"}
1
+ {"version":3,"file":"TrajectoryMap.js","names":["styles","_Fragment","TrajectoryMap_module_default","Fragment$1","LeafletTrajectory","lazy","m","NICE_KM_STEPS","pickScaleKm","maxKm","kmPerPixel","maxPixels","chosen","step","formatScale","km","TrajectoryMap","rest","containerRef","useRef","width","setWidth","useState","node","observer","measured","entries","allPoints","useMemo","points","current","markers","svg","box","boundingBox","projection","fitProjection","expandBounds","height","pixels","p","polyline","startPixel","endPixel","currentPixel","centerCoord","center","eastRef","haversineKm","padding","tileUrl","cn","className","style","label","Suspense","scale","showScale","showGrid","f","strokeColor","interactive","onMarkerClick","marker","i","e"],"sources":["../../src/geo/TrajectoryMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the SVG plot (points,\n * current, height, padding, showGrid, showScale, strokeColor, label), the optional\n * leaflet tile layer (tileUrl, tileAttribution) and the overlay (markers,\n * onMarkerClick). The body projects the path, fits the bounds and hands the same\n * bounds to the tile layer when there is one.\n */\nimport { lazy, Suspense, useEffect, useMemo, useRef, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { boundingBox, expandBounds } from \"./bounds\";\nimport { haversineKm } from \"./distance\";\nimport { fitProjection, type PixelPoint } from \"./projection\";\nimport type { Coordinate, GeoMarker } from \"./types\";\nimport styles from \"./TrajectoryMap.module.css\";\n\n// Leaflet layer is loaded on demand — only when a `tileUrl` is supplied, so\n// apps that stick to the tile-free SVG never pull leaflet into their bundle.\nconst LeafletTrajectory = lazy(() =>\n import(\"./leaflet-map\").then((m) => ({ default: m.LeafletTrajectory })),\n);\n\nexport interface TrajectoryMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Ordered coordinates forming the trajectory. */\n points: readonly Coordinate[];\n /** Optional \"current position\" marker, drawn on top of the path. */\n current?: Coordinate | null;\n /** Viewport height in pixels. Default: `320`. */\n height?: number;\n /** Inner padding in pixels kept clear on every edge. Default: `24`. */\n padding?: number;\n /** Draw a light reference grid behind the path (SVG mode). Default: `true`. */\n showGrid?: boolean;\n /** Draw a distance scale bar (SVG mode). Default: `true`. */\n showScale?: boolean;\n /** Path stroke color. Default: the primary token. */\n strokeColor?: string;\n /**\n * Tile URL template (`{z}/{x}/{y}`) of a map server **you host**. When set,\n * the map upgrades to a real Leaflet tile layer (requires `leaflet` to be\n * installed). Omit for the zero-dependency, zero-network SVG plot.\n */\n tileUrl?: string;\n /** Attribution text shown over the tile layer. */\n tileAttribution?: string;\n /** Accessible label for the map region. Default: `\"Trajetória\"`. */\n label?: string;\n /** Point markers to overlay (e.g. stops, POIs). Included in the auto-fit. */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\nconst NICE_KM_STEPS = [0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000] as const;\n\n/** Pick the largest \"nice\" distance whose bar fits within `maxPixels`. */\nfunction pickScaleKm(kmPerPixel: number, maxPixels: number): { km: number; pixels: number } {\n const maxKm = kmPerPixel * maxPixels;\n let chosen: number = NICE_KM_STEPS[0];\n for (const step of NICE_KM_STEPS) {\n if (step <= maxKm) chosen = step;\n }\n return { km: chosen, pixels: chosen / kmPerPixel };\n}\n\n/** Format a distance in km for the scale bar (meters below 1 km). */\nfunction formatScale(km: number): string {\n return km < 1 ? `${Math.round(km * 1000)} m` : `${km % 1 === 0 ? km : km.toFixed(1)} km`;\n}\n\n/**\n * Plot a GPS trajectory. By default it renders a **tile-free SVG** map (Web\n * Mercator projection, auto-fit to the points, optional grid + scale bar) —\n * 100% self-contained, no external tiles or paid API. Pass `tileUrl` pointing\n * at a map server **you host** to upgrade to a real Leaflet tile layer.\n *\n * @example\n * // Zero-dependency SVG plot\n * <TrajectoryMap points={points} current={lastPoint} height={360} />\n *\n * @example\n * // Real tiles from your own server (requires `leaflet` installed)\n * <TrajectoryMap points={points} tileUrl=\"https://tiles.internal/{z}/{x}/{y}.png\" />\n */\nexport function TrajectoryMap({\n points,\n current,\n height = 320,\n padding = 24,\n showGrid = true,\n showScale = true,\n strokeColor,\n tileUrl,\n tileAttribution,\n label = \"Trajetória\",\n markers,\n onMarkerClick,\n className,\n style,\n ...rest\n}: TrajectoryMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => {\n const measured = entries[0]?.contentRect.width;\n if (measured && measured > 0) setWidth(measured);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n const allPoints = useMemo<Coordinate[]>(\n () => [...points, ...(current ? [current] : []), ...(markers ?? [])],\n [points, current, markers],\n );\n\n const svg = useMemo(() => {\n const box = boundingBox(allPoints);\n if (!box) return null;\n\n const projection = fitProjection(expandBounds(box, 0.12), width, height, { padding });\n const pixels: PixelPoint[] = points.map((p) => projection.project(p));\n const polyline = pixels.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(\" \");\n\n const startPixel = pixels[0] ?? null;\n const endPixel = pixels.length > 0 ? pixels[pixels.length - 1] : null;\n const currentPixel = current ? projection.project(current) : null;\n\n // Distance-per-pixel at the map center, for the scale bar: measure the\n // center → east-edge span in both km (haversine) and pixels (projected).\n const centerCoord = {\n latitude: (box.minLatitude + box.maxLatitude) / 2,\n longitude: (box.minLongitude + box.maxLongitude) / 2,\n };\n const center = projection.project(centerCoord);\n const eastRef = projection.project({ ...centerCoord, longitude: box.maxLongitude });\n const edgeKm = haversineKm(centerCoord, { ...centerCoord, longitude: box.maxLongitude });\n const edgePixels = Math.abs(eastRef.x - center.x) || 1;\n const kmPerPixel = edgeKm / edgePixels || 0;\n\n const markerPixels = (markers ?? []).map((m) => ({ marker: m, p: projection.project(m) }));\n\n return { polyline, startPixel, endPixel, currentPixel, kmPerPixel, markerPixels };\n }, [allPoints, points, current, markers, width, height, padding]);\n\n // ── Leaflet tile mode ────────────────────────────────────────────────────\n if (tileUrl) {\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n <Suspense fallback={<div className={styles.loading}>Carregando mapa…</div>}>\n <LeafletTrajectory\n points={points}\n current={current}\n tileUrl={tileUrl}\n tileAttribution={tileAttribution}\n strokeColor={strokeColor}\n />\n </Suspense>\n </div>\n );\n }\n\n // ── Tile-free SVG mode ─────────────────────────────────────────────────────\n const scale =\n showScale && svg && svg.kmPerPixel > 0\n ? pickScaleKm(svg.kmPerPixel, Math.min(120, width * 0.35))\n : null;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {!svg ? (\n <div className={styles.empty}>Sem pontos de trajetória ainda.</div>\n ) : (\n <svg\n className={styles.svg}\n width=\"100%\"\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"xMidYMid meet\"\n >\n {showGrid && (\n <g className={styles.grid}>\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`h${f}`}\n x1={0}\n y1={height * f}\n x2={width}\n y2={height * f}\n />\n ))}\n {[0.25, 0.5, 0.75].map((f) => (\n <line\n key={`v${f}`}\n x1={width * f}\n y1={0}\n x2={width * f}\n y2={height}\n />\n ))}\n </g>\n )}\n\n {svg.polyline && (\n <polyline\n className={styles.path}\n points={svg.polyline}\n fill=\"none\"\n stroke={strokeColor}\n data-testid=\"trajectory-path\"\n />\n )}\n\n {svg.startPixel && (\n <circle\n className={styles.start}\n cx={svg.startPixel.x}\n cy={svg.startPixel.y}\n r={5}\n />\n )}\n {svg.endPixel && !current && (\n <circle\n className={styles.end}\n cx={svg.endPixel.x}\n cy={svg.endPixel.y}\n r={5}\n />\n )}\n {svg.currentPixel && (\n <>\n <circle\n className={styles.pulse}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={10}\n />\n <circle\n className={styles.current}\n cx={svg.currentPixel.x}\n cy={svg.currentPixel.y}\n r={5}\n />\n </>\n )}\n\n {svg.markerPixels.map(({ marker, p }, i) => {\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? i}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n style={marker.color ? { fill: marker.color } : undefined}\n data-marker-id={marker.id ?? i}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, i) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, i);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n\n {scale && (\n <g\n className={styles.scale}\n transform={`translate(${padding}, ${height - padding})`}\n >\n <line x1={0} y1={0} x2={scale.pixels} y2={0} />\n <line x1={0} y1={-4} x2={0} y2={4} />\n <line x1={scale.pixels} y1={-4} x2={scale.pixels} y2={4} />\n <text x={scale.pixels / 2} y={-8} textAnchor=\"middle\">\n {formatScale(scale.km)}\n </text>\n </g>\n )}\n </svg>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAiBA,IAAMI,IAAoBC,QACtB,OAAO,mBAAgB,CAAC,MAAM,OAAO,EAAE,SAASC,EAAE,kBAAkB,EAAE,CAC1E,GAiCMC,IAAgB;CAAC;CAAM;CAAK;CAAM;CAAK;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAK;CAAK;CAAK;AAAI;AAGrF,SAASC,EAAY,GAAoB,GAAmD;CACxF,IAAMC,IAAQC,IAAaC,GACvBC,IAAiBL,EAAc;CACnC,KAAK,IAAMM,KAAQN,GACf,AAAIM,KAAQJ,MAAO,IAASI;CAEhC,OAAO;EAAE,IAAID;EAAQ,QAAQA,IAASF;CAAW;AACrD;AAGA,SAASI,EAAY,GAAoB;CACrC,OAAOC,IAAK,IAAI,GAAG,KAAK,MAAMA,IAAK,GAAI,EAAE,MAAM,GAAGA,IAAK,KAAM,IAAIA,IAAKA,EAAG,QAAQ,CAAC,EAAE;AACxF;AAgBA,SAAgBC,EAAc,EAC1B,WACA,YACA,YAAS,KACT,aAAU,IACV,cAAW,IACX,eAAY,IACZ,gBACA,YACA,oBACA,WAAQ,cACR,YACA,kBACA,cACA,UACA,GAAGC,KACgB;CACnB,IAAMC,IAAeC,EAAuB,IAAI,GAC1C,CAACC,GAAOC,KAAYC,EAAiB,GAAG;CAE9C,QAAgB;EACZ,IAAMC,IAAOL,EAAa;EAC1B,IAAI,CAACK,KAAQ,OAAO,iBAAmB,KAAa;EACpD,IAAMC,IAAW,IAAI,gBAAgB,MAAY;GAC7C,IAAMC,IAAWC,EAAQ,EAAE,EAAE,YAAY;GACzC,AAAID,KAAYA,IAAW,KAAGJ,EAASI,CAAQ;EACnD,CAAC;EAED,OADAD,EAAS,QAAQD,CAAI,SACRC,EAAS,WAAW;CACrC,GAAG,CAAC,CAAC;CAEL,IAAMG,IAAYC,QACR;EAAC,GAAGC;EAAQ,GAAIC,IAAU,CAACA,CAAO,IAAI,CAAC;EAAI,GAAIC,KAAW,CAAC;CAAE,GACnE;EAACF;EAAQC;EAASC;CAAO,CAC7B,GAEMC,IAAMJ,QAAc;EACtB,IAAMK,IAAMC,EAAYP,CAAS;EACjC,IAAI,CAACM,GAAK,OAAO;EAEjB,IAAME,IAAaC,EAAcC,EAAaJ,GAAK,GAAI,GAAGb,GAAOkB,GAAQ,EAAE,WAAQ,CAAC,GAC9EC,IAAuBV,EAAO,KAAK,MAAMM,EAAW,QAAQK,CAAC,CAAC,GAC9DC,IAAWF,EAAO,KAAK,MAAM,GAAGC,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAGA,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAE5EE,IAAaH,EAAO,MAAM,MAC1BI,IAAWJ,EAAO,SAAS,IAAIA,EAAOA,EAAO,SAAS,KAAK,MAC3DK,IAAed,IAAUK,EAAW,QAAQL,CAAO,IAAI,MAIvDe,IAAc;GAChB,WAAWZ,EAAI,cAAcA,EAAI,eAAe;GAChD,YAAYA,EAAI,eAAeA,EAAI,gBAAgB;EACvD,GACMa,IAASX,EAAW,QAAQU,CAAW,GACvCE,IAAUZ,EAAW,QAAQ;GAAE,GAAGU;GAAa,WAAWZ,EAAI;EAAa,CAAC;EAOlF,OAAO;GAAE;GAAU;GAAY;GAAU;GAAc,YANxCe,EAAYH,GAAa;IAAE,GAAGA;IAAa,WAAWZ,EAAI;GAAa,CAEnE,KADA,KAAK,IAAIc,EAAQ,IAAID,EAAO,CAAC,KAAK,MACX;GAIyB,eAF7Cf,KAAW,CAAC,EAAA,CAAG,KAAK,OAAO;IAAE,QAAQzB;IAAG,GAAG6B,EAAW,QAAQ7B,CAAC;GAAE,EAEpB;EAAa;CACpF,GAAG;EAACqB;EAAWE;EAAQC;EAASC;EAASX;EAAOkB;EAAQW;CAAO,CAAC;CAGhE,IAAIC,GACA,OACI,kBAAC,OAAD;EACI,KAAKhC;EACL,WAAWiC,EAAGnD,EAAO,KAAKoD,CAAS;EACnC,OAAO;GAAE;GAAQ,GAAGC;EAAM;EAC1B,MAAK;EACL,cAAYC;EACZ,GAAIrC;EAEJ,UAAA,kBAACsC,GAAD;GAAU,UAAU,kBAAC,OAAD;IAAK,WAAWvD,EAAO;IAAS,UAAA;GAAqB,CAAA;GACrE,UAAA,kBAACI,GAAD;IACY;IACC;IACA;IACQ;IACJ;GAChB,CAAA;EACK,CAAA;CACT,CAAA;CAKb,IAAMoD,IACFC,KAAazB,KAAOA,EAAI,aAAa,IAC/BxB,EAAYwB,EAAI,YAAY,KAAK,IAAI,KAAKZ,IAAQ,GAAI,CAAC,IACvD;CAEV,OACI,kBAAC,OAAD;EACI,KAAKF;EACL,WAAWiC,EAAGnD,EAAO,KAAKoD,CAAS;EACnC,OAAO;GAAE;GAAQ,GAAGC;EAAM;EAC1B,MAAK;EACL,cAAYC;EACZ,GAAIrC;EAEH,UAACe,IAGE,kBAAC,OAAD;GACI,WAAWhC,EAAO;GAClB,OAAM;GACE;GACR,SAAS,OAAOoB,EAAM,GAAGkB;GACzB,qBAAoB;GALxB,UAAA;IAOKoB,KACG,kBAAC,KAAD;KAAG,WAAW1D,EAAO;KAArB,UAAA,CACK;MAAC;MAAM;MAAK;KAAI,CAAC,CAAC,KAAK,MACpB,kBAAC,QAAD;MAEI,IAAI;MACJ,IAAIsC,IAASqB;MACb,IAAIvC;MACJ,IAAIkB,IAASqB;KAChB,GALQ,IAAIA,GAKZ,CACJ,GACA;MAAC;MAAM;MAAK;KAAI,CAAC,CAAC,KAAK,MACpB,kBAAC,QAAD;MAEI,IAAIvC,IAAQuC;MACZ,IAAI;MACJ,IAAIvC,IAAQuC;MACZ,IAAIrB;KACP,GALQ,IAAIqB,GAKZ,CACJ,CACF;;IAGN3B,EAAI,YACD,kBAAC,YAAD;KACI,WAAWhC,EAAO;KAClB,QAAQgC,EAAI;KACZ,MAAK;KACL,QAAQ4B;KACR,eAAY;IACf,CAAA;IAGJ5B,EAAI,cACD,kBAAC,UAAD;KACI,WAAWhC,EAAO;KAClB,IAAIgC,EAAI,WAAW;KACnB,IAAIA,EAAI,WAAW;KACnB,GAAG;IACN,CAAA;IAEJA,EAAI,YAAY,CAACF,KACd,kBAAC,UAAD;KACI,WAAW9B,EAAO;KAClB,IAAIgC,EAAI,SAAS;KACjB,IAAIA,EAAI,SAAS;KACjB,GAAG;IACN,CAAA;IAEJA,EAAI,gBACD,kBAAA/B,GAAA,EAAA,UAAA,CACI,kBAAC,UAAD;KACI,WAAWD,EAAO;KAClB,IAAIgC,EAAI,aAAa;KACrB,IAAIA,EAAI,aAAa;KACrB,GAAG;IACN,CAAA,GACD,kBAAC,UAAD;KACI,WAAWhC,EAAO;KAClB,IAAIgC,EAAI,aAAa;KACrB,IAAIA,EAAI,aAAa;KACrB,GAAG;IACN,CAAA,CACH,EAAA,CAAA;IAGLA,EAAI,aAAa,KAAK,EAAE,WAAQ,QAAK,MAAM;KACxC,IAAM6B,IAAc,EAAQC;KAC5B,OACI,kBAAC,UAAD;MAEI,WAAW9D,EAAO;MAClB,IAAIwC,EAAE;MACN,IAAIA,EAAE;MACN,GAAGuB,EAAO,UAAU;MACpB,OAAOA,EAAO,QAAQ,EAAE,MAAMA,EAAO,MAAM,IAAI,KAAA;MAC/C,kBAAgBA,EAAO,MAAMC;MAC7B,UAAUH,IAAc,IAAI,KAAA;MAC5B,MAAMA,IAAc,WAAW,KAAA;MAC/B,cAAYE,EAAO;MACnB,SAASF,UAAoBC,IAAgBC,GAAQC,CAAC,IAAI,KAAA;MAC1D,WACIH,KACO,MAAM;OACH,CAAII,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAC/BA,EAAE,eAAe,GACjBH,IAAgBC,GAAQC,CAAC;MAEjC,IACA,KAAA;MAGT,UAAAD,EAAO,QAAQ,kBAAC,SAAD,EAAA,UAAQA,EAAO,MAAa,CAAA,IAAI;KAC5C,GAvBCA,EAAO,MAAMC,CAuBd;IAEhB,CAAC;IAEAR,KACG,kBAAC,KAAD;KACI,WAAWxD,EAAO;KAClB,WAAW,aAAaiD,EAAQ,IAAIX,IAASW,EAAQ;KAFzD,UAAA;MAII,kBAAC,QAAD;OAAM,IAAI;OAAG,IAAI;OAAG,IAAIO,EAAM;OAAQ,IAAI;MAAI,CAAA;MAC9C,kBAAC,QAAD;OAAM,IAAI;OAAG,IAAI;OAAI,IAAI;OAAG,IAAI;MAAI,CAAA;MACpC,kBAAC,QAAD;OAAM,IAAIA,EAAM;OAAQ,IAAI;OAAI,IAAIA,EAAM;OAAQ,IAAI;MAAI,CAAA;MAC1D,kBAAC,QAAD;OAAM,GAAGA,EAAM,SAAS;OAAG,GAAG;OAAI,YAAW;OACxC,UAAA1C,EAAY0C,EAAM,EAAE;MACnB,CAAA;KACP;;GAEN;E,KAvHL,kBAAC,OAAD;GAAK,WAAWxD,EAAO;GAAO,UAAA;EAAoC,CAAA;CAyHrE,CAAA;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"TrajectoryMap.module.cjs","names":[],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"TrajectoryMap.module.cjs","names":["map","svg","empty","loading","grid","path","start","end","current","pulse","tempestGeoPulse","marker","scale","TrajectoryMap_module_default"],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"TrajectoryMap.module.js","names":[],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"TrajectoryMap.module.js","names":["map","svg","empty","loading","grid","path","start","end","current","pulse","tempestGeoPulse","marker","scale","TrajectoryMap_module_default"],"sources":["../../src/geo/TrajectoryMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\n overflow: hidden;\n background: var(--tempest-surface-2);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n font-family: var(--tempest-font-sans);\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\n.empty,\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n}\n\n.grid line {\n stroke: var(--tempest-border);\n stroke-width: 1;\n stroke-dasharray: 3 5;\n opacity: 0.5;\n}\n\n.path {\n stroke: var(--tempest-primary);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.start {\n fill: var(--tempest-success-solid);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.end {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.current {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.pulse {\n fill: var(--tempest-primary);\n opacity: 0.25;\n transform-origin: center;\n transform-box: fill-box;\n animation: tempest-geo-pulse 1.8s ease-out infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pulse {\n animation: none;\n }\n}\n\n@keyframes tempest-geo-pulse {\n 0% {\n transform: scale(0.6);\n opacity: 0.35;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n.marker {\n fill: var(--tempest-primary);\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 3;\n}\n\n.scale line {\n stroke: var(--tempest-text);\n stroke-width: 2;\n}\n\n.scale text {\n fill: var(--tempest-text);\n font-size: var(--tempest-text-xs);\n font-family: var(--tempest-font-sans);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"bounds.cjs","names":[],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":"AASA,SAAgB,EAAY,EAAiD,CACzE,GAAI,EAAO,SAAW,EAAG,OAAO,KAEhC,IAAI,EAAc,EAAO,EAAE,CAAC,SACxB,EAAc,EAAO,EAAE,CAAC,SACxB,EAAe,EAAO,EAAE,CAAC,UACzB,EAAe,EAAO,EAAE,CAAC,UAE7B,IAAK,IAAM,KAAS,EACZ,EAAM,SAAW,IAAa,EAAc,EAAM,UAClD,EAAM,SAAW,IAAa,EAAc,EAAM,UAClD,EAAM,UAAY,IAAc,EAAe,EAAM,WACrD,EAAM,UAAY,IAAc,EAAe,EAAM,WAG7D,MAAO,CAAE,cAAa,cAAa,eAAc,cAAa,CAClE,CAGA,SAAgB,EAAa,EAA+B,CACxD,MAAO,CACH,UAAW,EAAO,YAAc,EAAO,aAAe,EACtD,WAAY,EAAO,aAAe,EAAO,cAAgB,CAC7D,CACJ,CAYA,SAAgB,EAAa,EAAmB,EAAQ,GAAgB,CACpE,IAAM,EAAU,EAAO,YAAc,EAAO,YACtC,EAAU,EAAO,aAAe,EAAO,aACvC,EAAS,EAAU,GAAS,KAC5B,EAAS,EAAU,GAAS,KAElC,MAAO,CACH,YAAa,EAAO,YAAc,EAClC,YAAa,EAAO,YAAc,EAClC,aAAc,EAAO,aAAe,EACpC,aAAc,EAAO,aAAe,CACxC,CACJ"}
1
+ {"version":3,"file":"bounds.cjs","names":["boundingBox","points","minLatitude","maxLatitude","minLongitude","maxLongitude","point","boundsCenter","bounds","expandBounds","latSpan","lonSpan","latPad","ratio","lonPad"],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":"AASA,SAAgBA,EAAY,EAAiD,CACzE,GAAIC,EAAO,SAAW,EAAG,OAAO,KAEhC,IAAIC,EAAcD,EAAO,EAAE,CAAC,SACxBE,EAAcF,EAAO,EAAE,CAAC,SACxBG,EAAeH,EAAO,EAAE,CAAC,UACzBI,EAAeJ,EAAO,EAAE,CAAC,UAE7B,IAAK,IAAMK,KAASL,EACZK,EAAM,SAAWJ,IAAa,EAAcI,EAAM,UAClDA,EAAM,SAAWH,IAAa,EAAcG,EAAM,UAClDA,EAAM,UAAYF,IAAc,EAAeE,EAAM,WACrDA,EAAM,UAAYD,IAAc,EAAeC,EAAM,WAG7D,MAAO,CAAE,cAAa,cAAa,eAAc,cAAa,CAClE,CAGA,SAAgBC,EAAa,EAA+B,CACxD,MAAO,CACH,UAAWC,EAAO,YAAcA,EAAO,aAAe,EACtD,WAAYA,EAAO,aAAeA,EAAO,cAAgB,CAC7D,CACJ,CAYA,SAAgBC,EAAa,EAAmB,EAAQ,GAAgB,CACpE,IAAMC,EAAUF,EAAO,YAAcA,EAAO,YACtCG,EAAUH,EAAO,aAAeA,EAAO,aACvCI,EAASF,EAAUG,GAAS,KAC5BC,EAASH,EAAUE,GAAS,KAElC,MAAO,CACH,YAAaL,EAAO,YAAcI,EAClC,YAAaJ,EAAO,YAAcI,EAClC,aAAcJ,EAAO,aAAeM,EACpC,aAAcN,EAAO,aAAeM,CACxC,CACJ,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"bounds.js","names":[],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":";AASA,SAAgB,EAAY,GAAiD;CACzE,IAAI,EAAO,WAAW,GAAG,OAAO;CAEhC,IAAI,IAAc,EAAO,EAAE,CAAC,UACxB,IAAc,EAAO,EAAE,CAAC,UACxB,IAAe,EAAO,EAAE,CAAC,WACzB,IAAe,EAAO,EAAE,CAAC;CAE7B,KAAK,IAAM,KAAS,GAIhB,AAHI,EAAM,WAAW,MAAa,IAAc,EAAM,WAClD,EAAM,WAAW,MAAa,IAAc,EAAM,WAClD,EAAM,YAAY,MAAc,IAAe,EAAM,YACrD,EAAM,YAAY,MAAc,IAAe,EAAM;CAG7D,OAAO;EAAE;EAAa;EAAa;EAAc;CAAa;AAClE;AAGA,SAAgB,EAAa,GAA+B;CACxD,OAAO;EACH,WAAW,EAAO,cAAc,EAAO,eAAe;EACtD,YAAY,EAAO,eAAe,EAAO,gBAAgB;CAC7D;AACJ;AAYA,SAAgB,EAAa,GAAmB,IAAQ,IAAgB;CACpE,IAAM,IAAU,EAAO,cAAc,EAAO,aACtC,IAAU,EAAO,eAAe,EAAO,cACvC,IAAS,IAAU,KAAS,MAC5B,IAAS,IAAU,KAAS;CAElC,OAAO;EACH,aAAa,EAAO,cAAc;EAClC,aAAa,EAAO,cAAc;EAClC,cAAc,EAAO,eAAe;EACpC,cAAc,EAAO,eAAe;CACxC;AACJ"}
1
+ {"version":3,"file":"bounds.js","names":["boundingBox","points","minLatitude","maxLatitude","minLongitude","maxLongitude","point","boundsCenter","bounds","expandBounds","latSpan","lonSpan","latPad","ratio","lonPad"],"sources":["../../src/geo/bounds.ts"],"sourcesContent":["import type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * Compute the axis-aligned bounding box that contains every point. Returns\n * `null` for an empty list (there is nothing to bound).\n *\n * @param points - Coordinates to enclose.\n * @returns The bounds, or `null` when `points` is empty.\n */\nexport function boundingBox(points: readonly Coordinate[]): GeoBounds | null {\n if (points.length === 0) return null;\n\n let minLatitude = points[0].latitude;\n let maxLatitude = points[0].latitude;\n let minLongitude = points[0].longitude;\n let maxLongitude = points[0].longitude;\n\n for (const point of points) {\n if (point.latitude < minLatitude) minLatitude = point.latitude;\n if (point.latitude > maxLatitude) maxLatitude = point.latitude;\n if (point.longitude < minLongitude) minLongitude = point.longitude;\n if (point.longitude > maxLongitude) maxLongitude = point.longitude;\n }\n\n return { minLatitude, maxLatitude, minLongitude, maxLongitude };\n}\n\n/** Geometric center of a bounding box. */\nexport function boundsCenter(bounds: GeoBounds): Coordinate {\n return {\n latitude: (bounds.minLatitude + bounds.maxLatitude) / 2,\n longitude: (bounds.minLongitude + bounds.maxLongitude) / 2,\n };\n}\n\n/**\n * Grow a bounding box outward by `ratio` of its own span on every side, with a\n * small absolute floor so a single-point (zero-span) box still gets padding.\n * A `ratio` of `0.1` adds 10% margin — handy so a plotted trajectory does not\n * hug the edge of the viewport.\n *\n * @param bounds - The box to expand.\n * @param ratio - Fraction of the span to add per side. Default: `0.1`.\n * @returns A new, larger {@link GeoBounds}.\n */\nexport function expandBounds(bounds: GeoBounds, ratio = 0.1): GeoBounds {\n const latSpan = bounds.maxLatitude - bounds.minLatitude;\n const lonSpan = bounds.maxLongitude - bounds.minLongitude;\n const latPad = latSpan * ratio || 0.001;\n const lonPad = lonSpan * ratio || 0.001;\n\n return {\n minLatitude: bounds.minLatitude - latPad,\n maxLatitude: bounds.maxLatitude + latPad,\n minLongitude: bounds.minLongitude - lonPad,\n maxLongitude: bounds.maxLongitude + lonPad,\n };\n}\n"],"mappings":";AASA,SAAgBA,EAAY,GAAiD;CACzE,IAAIC,EAAO,WAAW,GAAG,OAAO;CAEhC,IAAIC,IAAcD,EAAO,EAAE,CAAC,UACxBE,IAAcF,EAAO,EAAE,CAAC,UACxBG,IAAeH,EAAO,EAAE,CAAC,WACzBI,IAAeJ,EAAO,EAAE,CAAC;CAE7B,KAAK,IAAMK,KAASL,GAIhB,AAHIK,EAAM,WAAWJ,MAAa,IAAcI,EAAM,WAClDA,EAAM,WAAWH,MAAa,IAAcG,EAAM,WAClDA,EAAM,YAAYF,MAAc,IAAeE,EAAM,YACrDA,EAAM,YAAYD,MAAc,IAAeC,EAAM;CAG7D,OAAO;EAAE;EAAa;EAAa;EAAc;CAAa;AAClE;AAGA,SAAgBC,EAAa,GAA+B;CACxD,OAAO;EACH,WAAWC,EAAO,cAAcA,EAAO,eAAe;EACtD,YAAYA,EAAO,eAAeA,EAAO,gBAAgB;CAC7D;AACJ;AAYA,SAAgBC,EAAa,GAAmB,IAAQ,IAAgB;CACpE,IAAMC,IAAUF,EAAO,cAAcA,EAAO,aACtCG,IAAUH,EAAO,eAAeA,EAAO,cACvCI,IAASF,IAAUG,KAAS,MAC5BC,IAASH,IAAUE,KAAS;CAElC,OAAO;EACH,aAAaL,EAAO,cAAcI;EAClC,aAAaJ,EAAO,cAAcI;EAClC,cAAcJ,EAAO,eAAeM;EACpC,cAAcN,EAAO,eAAeM;CACxC;AACJ"}
@@ -1,2 +1,2 @@
1
- const e=require("./distance.cjs");function t(t={}){let{minDistanceKm:n=.005,maxPoints:r=1/0,positionOptions:i,onUpdate:a,onError:o,onStatusChange:s}=t,c=[],l=0,u=null,d=null,f=`idle`;function p(e){f!==e&&(f=e,s?.(e))}function m(t){let i={latitude:t.coords.latitude,longitude:t.coords.longitude,timestamp:t.timestamp,accuracy:t.coords.accuracy};if(u){let t=e.haversineKm(u,i);if(t<n)return;l+=t}u=i,c.push(i),c.length>r&&(c=c.slice(c.length-r)),a?.(c)}function h(e){p(`error`),o?.(e)}function g(){if(d===null){if(typeof navigator>`u`||!navigator.geolocation){p(`error`);return}p(`tracking`),d=navigator.geolocation.watchPosition(m,h,i)}}function _(){d!==null&&typeof navigator<`u`&&navigator.geolocation&&navigator.geolocation.clearWatch(d),d=null,p(`idle`)}function v(){_(),c=[],l=0,u=null,a?.(c)}return{start:g,stop:_,clear:v,get points(){return c},get distanceKm(){return l},get status(){return f}}}exports.createPositionTracker=t;
1
+ const e=require("./distance.cjs");function t(t={}){let{minDistanceKm:n=.005,maxPoints:r=1/0,positionOptions:i,onUpdate:a,onError:o,onStatusChange:s}=t,c=[],l=0,u=null,d=null,f=`idle`;function p(e){f!==e&&(f=e,s?.(e))}function m(t){let i={latitude:t.coords.latitude,longitude:t.coords.longitude,timestamp:t.timestamp,accuracy:t.coords.accuracy};if(u){let t=e.haversineKm(u,i);if(t<n)return;l+=t}u=i,c.push(i),c.length>r&&(c=c.slice(c.length-r)),a?.(c)}function h(e){p(`error`),o?.(e)}function g(){d===null&&(typeof navigator>`u`||!navigator.geolocation?p(`error`):(p(`tracking`),d=navigator.geolocation.watchPosition(m,h,i)))}function _(){d!==null&&typeof navigator<`u`&&navigator.geolocation&&navigator.geolocation.clearWatch(d),d=null,p(`idle`)}function v(){_(),c=[],l=0,u=null,a?.(c)}return{start:g,stop:_,clear:v,get points(){return c},get distanceKm(){return l},get status(){return f}}}exports.createPositionTracker=t;
2
2
  //# sourceMappingURL=create-position-tracker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-position-tracker.cjs","names":[],"sources":["../../src/geo/create-position-tracker.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { TrackPoint } from \"./types\";\n\n/** Lifecycle status of a {@link PositionTracker}. */\nexport type TrackerStatus = \"idle\" | \"tracking\" | \"error\";\n\n/** Options for {@link createPositionTracker}. */\nexport interface CreatePositionTrackerOptions {\n /**\n * Discard a new sample when it is closer than this (in km) to the last\n * kept point — filters GPS jitter while standing still. Default: `0.005`\n * (5 meters). Pass `0` to keep every sample.\n */\n minDistanceKm?: number;\n /**\n * Cap the retained trajectory to the most recent N points (older points are\n * dropped, but their distance stays counted). Default: `Infinity`.\n */\n maxPoints?: number;\n /** Forwarded to `navigator.geolocation.watchPosition`. */\n positionOptions?: PositionOptions;\n /** Called with the full trajectory each time a point is added. */\n onUpdate?: (points: readonly TrackPoint[]) => void;\n /** Called on a `GeolocationPositionError`. */\n onError?: (error: GeolocationPositionError) => void;\n /** Called whenever the status changes. */\n onStatusChange?: (status: TrackerStatus) => void;\n}\n\n/** Imperative controller returned by {@link createPositionTracker}. */\nexport interface PositionTracker {\n /** Begin watching position. No-op if already tracking. */\n start: () => void;\n /** Stop watching. Retains the recorded trajectory. */\n stop: () => void;\n /** Stop and discard the recorded trajectory. */\n clear: () => void;\n /** Snapshot of the recorded trajectory (newest last). */\n readonly points: readonly TrackPoint[];\n /** Total distance of the recorded trajectory in kilometers. */\n readonly distanceKm: number;\n /** Current tracker status. */\n readonly status: TrackerStatus;\n}\n\n/**\n * Record a live GPS trajectory from `navigator.geolocation.watchPosition`.\n * Framework-free — the {@link usePositionTracker} hook wraps this for React.\n *\n * Jitter while stationary is filtered by `minDistanceKm`; distance is\n * accumulated across the *full* run even when `maxPoints` trims the retained\n * array. 100% browser-side: no network, no external service.\n *\n * @param options - Filtering, retention and callbacks.\n * @returns A controller with `start`/`stop`/`clear` and live getters.\n *\n * @example\n * const tracker = createPositionTracker({\n * minDistanceKm: 0.01,\n * onUpdate: (pts) => console.log(pts.length, \"points\"),\n * });\n * tracker.start();\n * // …later\n * tracker.stop();\n * console.log(tracker.distanceKm);\n */\nexport function createPositionTracker(options: CreatePositionTrackerOptions = {}): PositionTracker {\n const {\n minDistanceKm = 0.005,\n maxPoints = Infinity,\n positionOptions,\n onUpdate,\n onError,\n onStatusChange,\n } = options;\n\n let points: TrackPoint[] = [];\n let distanceKm = 0;\n let lastKept: TrackPoint | null = null;\n let watchId: number | null = null;\n let status: TrackerStatus = \"idle\";\n\n function setStatus(next: TrackerStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function handlePosition(position: GeolocationPosition): void {\n const point: TrackPoint = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n timestamp: position.timestamp,\n accuracy: position.coords.accuracy,\n };\n\n if (lastKept) {\n const step = haversineKm(lastKept, point);\n if (step < minDistanceKm) return;\n distanceKm += step;\n }\n\n lastKept = point;\n points.push(point);\n if (points.length > maxPoints) {\n points = points.slice(points.length - maxPoints);\n }\n onUpdate?.(points);\n }\n\n function handleError(error: GeolocationPositionError): void {\n setStatus(\"error\");\n onError?.(error);\n }\n\n function start(): void {\n if (watchId !== null) return;\n if (typeof navigator === \"undefined\" || !navigator.geolocation) {\n setStatus(\"error\");\n return;\n }\n setStatus(\"tracking\");\n watchId = navigator.geolocation.watchPosition(handlePosition, handleError, positionOptions);\n }\n\n function stop(): void {\n if (watchId !== null && typeof navigator !== \"undefined\" && navigator.geolocation) {\n navigator.geolocation.clearWatch(watchId);\n }\n watchId = null;\n setStatus(\"idle\");\n }\n\n function clear(): void {\n stop();\n points = [];\n distanceKm = 0;\n lastKept = null;\n onUpdate?.(points);\n }\n\n return {\n start,\n stop,\n clear,\n get points() {\n return points;\n },\n get distanceKm() {\n return distanceKm;\n },\n get status() {\n return status;\n },\n };\n}\n"],"mappings":"kCAkEA,SAAgB,EAAsB,EAAwC,CAAC,EAAoB,CAC/F,GAAM,CACF,gBAAgB,KAChB,YAAY,IACZ,kBACA,WACA,UACA,kBACA,EAEA,EAAuB,CAAC,EACxB,EAAa,EACb,EAA8B,KAC9B,EAAyB,KACzB,EAAwB,OAE5B,SAAS,EAAU,EAA2B,CACtC,IAAW,IACf,EAAS,EACT,IAAiB,CAAI,EACzB,CAEA,SAAS,EAAe,EAAqC,CACzD,IAAM,EAAoB,CACtB,SAAU,EAAS,OAAO,SAC1B,UAAW,EAAS,OAAO,UAC3B,UAAW,EAAS,UACpB,SAAU,EAAS,OAAO,QAC9B,EAEA,GAAI,EAAU,CACV,IAAM,EAAO,EAAA,YAAY,EAAU,CAAK,EACxC,GAAI,EAAO,EAAe,OAC1B,GAAc,CAClB,CAEA,EAAW,EACX,EAAO,KAAK,CAAK,EACb,EAAO,OAAS,IAChB,EAAS,EAAO,MAAM,EAAO,OAAS,CAAS,GAEnD,IAAW,CAAM,CACrB,CAEA,SAAS,EAAY,EAAuC,CACxD,EAAU,OAAO,EACjB,IAAU,CAAK,CACnB,CAEA,SAAS,GAAc,CACf,OAAY,KAChB,IAAI,OAAO,UAAc,KAAe,CAAC,UAAU,YAAa,CAC5D,EAAU,OAAO,EACjB,MACJ,CACA,EAAU,UAAU,EACpB,EAAU,UAAU,YAAY,cAAc,EAAgB,EAAa,CAAe,CAF1F,CAGJ,CAEA,SAAS,GAAa,CACd,IAAY,MAAQ,OAAO,UAAc,KAAe,UAAU,aAClE,UAAU,YAAY,WAAW,CAAO,EAE5C,EAAU,KACV,EAAU,MAAM,CACpB,CAEA,SAAS,GAAc,CACnB,EAAK,EACL,EAAS,CAAC,EACV,EAAa,EACb,EAAW,KACX,IAAW,CAAM,CACrB,CAEA,MAAO,CACH,QACA,OACA,QACA,IAAI,QAAS,CACT,OAAO,CACX,EACA,IAAI,YAAa,CACb,OAAO,CACX,EACA,IAAI,QAAS,CACT,OAAO,CACX,CACJ,CACJ"}
1
+ {"version":3,"file":"create-position-tracker.cjs","names":["haversineKm","require_distance","createPositionTracker","options","points","distanceKm","lastKept","watchId","status","setStatus","next","onStatusChange","handlePosition","point","position","step","minDistanceKm","maxPoints","onUpdate","handleError","onError","error","start","positionOptions","stop","clear"],"sources":["../../src/geo/create-position-tracker.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { TrackPoint } from \"./types\";\n\n/** Lifecycle status of a {@link PositionTracker}. */\nexport type TrackerStatus = \"idle\" | \"tracking\" | \"error\";\n\n/** Options for {@link createPositionTracker}. */\nexport interface CreatePositionTrackerOptions {\n /**\n * Discard a new sample when it is closer than this (in km) to the last\n * kept point — filters GPS jitter while standing still. Default: `0.005`\n * (5 meters). Pass `0` to keep every sample.\n */\n minDistanceKm?: number;\n /**\n * Cap the retained trajectory to the most recent N points (older points are\n * dropped, but their distance stays counted). Default: `Infinity`.\n */\n maxPoints?: number;\n /** Forwarded to `navigator.geolocation.watchPosition`. */\n positionOptions?: PositionOptions;\n /** Called with the full trajectory each time a point is added. */\n onUpdate?: (points: readonly TrackPoint[]) => void;\n /** Called on a `GeolocationPositionError`. */\n onError?: (error: GeolocationPositionError) => void;\n /** Called whenever the status changes. */\n onStatusChange?: (status: TrackerStatus) => void;\n}\n\n/** Imperative controller returned by {@link createPositionTracker}. */\nexport interface PositionTracker {\n /** Begin watching position. No-op if already tracking. */\n start: () => void;\n /** Stop watching. Retains the recorded trajectory. */\n stop: () => void;\n /** Stop and discard the recorded trajectory. */\n clear: () => void;\n /** Snapshot of the recorded trajectory (newest last). */\n readonly points: readonly TrackPoint[];\n /** Total distance of the recorded trajectory in kilometers. */\n readonly distanceKm: number;\n /** Current tracker status. */\n readonly status: TrackerStatus;\n}\n\n/**\n * Record a live GPS trajectory from `navigator.geolocation.watchPosition`.\n * Framework-free — the {@link usePositionTracker} hook wraps this for React.\n *\n * Jitter while stationary is filtered by `minDistanceKm`; distance is\n * accumulated across the *full* run even when `maxPoints` trims the retained\n * array. 100% browser-side: no network, no external service.\n *\n * @param options - Filtering, retention and callbacks.\n * @returns A controller with `start`/`stop`/`clear` and live getters.\n *\n * @example\n * const tracker = createPositionTracker({\n * minDistanceKm: 0.01,\n * onUpdate: (pts) => console.log(pts.length, \"points\"),\n * });\n * tracker.start();\n * // …later\n * tracker.stop();\n * console.log(tracker.distanceKm);\n */\nexport function createPositionTracker(options: CreatePositionTrackerOptions = {}): PositionTracker {\n const {\n minDistanceKm = 0.005,\n maxPoints = Infinity,\n positionOptions,\n onUpdate,\n onError,\n onStatusChange,\n } = options;\n\n let points: TrackPoint[] = [];\n let distanceKm = 0;\n let lastKept: TrackPoint | null = null;\n let watchId: number | null = null;\n let status: TrackerStatus = \"idle\";\n\n function setStatus(next: TrackerStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function handlePosition(position: GeolocationPosition): void {\n const point: TrackPoint = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n timestamp: position.timestamp,\n accuracy: position.coords.accuracy,\n };\n\n if (lastKept) {\n const step = haversineKm(lastKept, point);\n if (step < minDistanceKm) return;\n distanceKm += step;\n }\n\n lastKept = point;\n points.push(point);\n if (points.length > maxPoints) {\n points = points.slice(points.length - maxPoints);\n }\n onUpdate?.(points);\n }\n\n function handleError(error: GeolocationPositionError): void {\n setStatus(\"error\");\n onError?.(error);\n }\n\n function start(): void {\n if (watchId !== null) return;\n if (typeof navigator === \"undefined\" || !navigator.geolocation) {\n setStatus(\"error\");\n return;\n }\n setStatus(\"tracking\");\n watchId = navigator.geolocation.watchPosition(handlePosition, handleError, positionOptions);\n }\n\n function stop(): void {\n if (watchId !== null && typeof navigator !== \"undefined\" && navigator.geolocation) {\n navigator.geolocation.clearWatch(watchId);\n }\n watchId = null;\n setStatus(\"idle\");\n }\n\n function clear(): void {\n stop();\n points = [];\n distanceKm = 0;\n lastKept = null;\n onUpdate?.(points);\n }\n\n return {\n start,\n stop,\n clear,\n get points() {\n return points;\n },\n get distanceKm() {\n return distanceKm;\n },\n get status() {\n return status;\n },\n };\n}\n"],"mappings":"A,kCAkEA,SAAgBE,EAAsB,EAAwC,CAAC,EAAoB,CAC/F,GAAM,CACF,gBAAgB,KAChB,YAAY,IACZ,kBACA,WACA,UACA,kBACAC,EAEAC,EAAuB,CAAC,EACxBC,EAAa,EACbC,EAA8B,KAC9BC,EAAyB,KACzBC,EAAwB,OAE5B,SAASC,EAAU,EAA2B,CACtCD,IAAWE,IACf,EAASA,EACTC,IAAiBD,CAAI,EACzB,CAEA,SAASE,EAAe,EAAqC,CACzD,IAAMC,EAAoB,CACtB,SAAUC,EAAS,OAAO,SAC1B,UAAWA,EAAS,OAAO,UAC3B,UAAWA,EAAS,UACpB,SAAUA,EAAS,OAAO,QAC9B,EAEA,GAAIR,EAAU,CACV,IAAMS,EAAOf,EAAAA,YAAYM,EAAUO,CAAK,EACxC,GAAIE,EAAOC,EAAe,OAC1B,GAAcD,CAClB,CAEA,EAAWF,EACXT,EAAO,KAAKS,CAAK,EACbT,EAAO,OAASa,IAChB,EAASb,EAAO,MAAMA,EAAO,OAASa,CAAS,GAEnDC,IAAWd,CAAM,CACrB,CAEA,SAASe,EAAY,EAAuC,CACxDV,EAAU,OAAO,EACjBW,IAAUC,CAAK,CACnB,CAEA,SAASC,GAAc,CACff,IAAY,OACZ,OAAO,UAAc,KAAe,CAAC,UAAU,YAC/CE,EAAU,OAAO,GAGrBA,EAAU,UAAU,EACpB,EAAU,UAAU,YAAY,cAAcG,EAAgBO,EAAaI,CAAe,GAC9F,CAEA,SAASC,GAAa,CACdjB,IAAY,MAAQ,OAAO,UAAc,KAAe,UAAU,aAClE,UAAU,YAAY,WAAWA,CAAO,EAE5C,EAAU,KACVE,EAAU,MAAM,CACpB,CAEA,SAASgB,GAAc,CACnBD,EAAK,EACL,EAAS,CAAC,EACV,EAAa,EACb,EAAW,KACXN,IAAWd,CAAM,CACrB,CAEA,MAAO,CACH,QACA,OACA,QACA,IAAI,QAAS,CACT,OAAOA,CACX,EACA,IAAI,YAAa,CACb,OAAOC,CACX,EACA,IAAI,QAAS,CACT,OAAOG,CACX,CACJ,CACJ,C"}
@@ -23,13 +23,7 @@ function t(t = {}) {
23
23
  p("error"), o?.(e);
24
24
  }
25
25
  function g() {
26
- if (d === null) {
27
- if (typeof navigator > "u" || !navigator.geolocation) {
28
- p("error");
29
- return;
30
- }
31
- p("tracking"), d = navigator.geolocation.watchPosition(m, h, i);
32
- }
26
+ d === null && (typeof navigator > "u" || !navigator.geolocation ? p("error") : (p("tracking"), d = navigator.geolocation.watchPosition(m, h, i)));
33
27
  }
34
28
  function _() {
35
29
  d !== null && typeof navigator < "u" && navigator.geolocation && navigator.geolocation.clearWatch(d), d = null, p("idle");
@@ -1 +1 @@
1
- {"version":3,"file":"create-position-tracker.js","names":[],"sources":["../../src/geo/create-position-tracker.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { TrackPoint } from \"./types\";\n\n/** Lifecycle status of a {@link PositionTracker}. */\nexport type TrackerStatus = \"idle\" | \"tracking\" | \"error\";\n\n/** Options for {@link createPositionTracker}. */\nexport interface CreatePositionTrackerOptions {\n /**\n * Discard a new sample when it is closer than this (in km) to the last\n * kept point — filters GPS jitter while standing still. Default: `0.005`\n * (5 meters). Pass `0` to keep every sample.\n */\n minDistanceKm?: number;\n /**\n * Cap the retained trajectory to the most recent N points (older points are\n * dropped, but their distance stays counted). Default: `Infinity`.\n */\n maxPoints?: number;\n /** Forwarded to `navigator.geolocation.watchPosition`. */\n positionOptions?: PositionOptions;\n /** Called with the full trajectory each time a point is added. */\n onUpdate?: (points: readonly TrackPoint[]) => void;\n /** Called on a `GeolocationPositionError`. */\n onError?: (error: GeolocationPositionError) => void;\n /** Called whenever the status changes. */\n onStatusChange?: (status: TrackerStatus) => void;\n}\n\n/** Imperative controller returned by {@link createPositionTracker}. */\nexport interface PositionTracker {\n /** Begin watching position. No-op if already tracking. */\n start: () => void;\n /** Stop watching. Retains the recorded trajectory. */\n stop: () => void;\n /** Stop and discard the recorded trajectory. */\n clear: () => void;\n /** Snapshot of the recorded trajectory (newest last). */\n readonly points: readonly TrackPoint[];\n /** Total distance of the recorded trajectory in kilometers. */\n readonly distanceKm: number;\n /** Current tracker status. */\n readonly status: TrackerStatus;\n}\n\n/**\n * Record a live GPS trajectory from `navigator.geolocation.watchPosition`.\n * Framework-free — the {@link usePositionTracker} hook wraps this for React.\n *\n * Jitter while stationary is filtered by `minDistanceKm`; distance is\n * accumulated across the *full* run even when `maxPoints` trims the retained\n * array. 100% browser-side: no network, no external service.\n *\n * @param options - Filtering, retention and callbacks.\n * @returns A controller with `start`/`stop`/`clear` and live getters.\n *\n * @example\n * const tracker = createPositionTracker({\n * minDistanceKm: 0.01,\n * onUpdate: (pts) => console.log(pts.length, \"points\"),\n * });\n * tracker.start();\n * // …later\n * tracker.stop();\n * console.log(tracker.distanceKm);\n */\nexport function createPositionTracker(options: CreatePositionTrackerOptions = {}): PositionTracker {\n const {\n minDistanceKm = 0.005,\n maxPoints = Infinity,\n positionOptions,\n onUpdate,\n onError,\n onStatusChange,\n } = options;\n\n let points: TrackPoint[] = [];\n let distanceKm = 0;\n let lastKept: TrackPoint | null = null;\n let watchId: number | null = null;\n let status: TrackerStatus = \"idle\";\n\n function setStatus(next: TrackerStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function handlePosition(position: GeolocationPosition): void {\n const point: TrackPoint = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n timestamp: position.timestamp,\n accuracy: position.coords.accuracy,\n };\n\n if (lastKept) {\n const step = haversineKm(lastKept, point);\n if (step < minDistanceKm) return;\n distanceKm += step;\n }\n\n lastKept = point;\n points.push(point);\n if (points.length > maxPoints) {\n points = points.slice(points.length - maxPoints);\n }\n onUpdate?.(points);\n }\n\n function handleError(error: GeolocationPositionError): void {\n setStatus(\"error\");\n onError?.(error);\n }\n\n function start(): void {\n if (watchId !== null) return;\n if (typeof navigator === \"undefined\" || !navigator.geolocation) {\n setStatus(\"error\");\n return;\n }\n setStatus(\"tracking\");\n watchId = navigator.geolocation.watchPosition(handlePosition, handleError, positionOptions);\n }\n\n function stop(): void {\n if (watchId !== null && typeof navigator !== \"undefined\" && navigator.geolocation) {\n navigator.geolocation.clearWatch(watchId);\n }\n watchId = null;\n setStatus(\"idle\");\n }\n\n function clear(): void {\n stop();\n points = [];\n distanceKm = 0;\n lastKept = null;\n onUpdate?.(points);\n }\n\n return {\n start,\n stop,\n clear,\n get points() {\n return points;\n },\n get distanceKm() {\n return distanceKm;\n },\n get status() {\n return status;\n },\n };\n}\n"],"mappings":";;AAkEA,SAAgB,EAAsB,IAAwC,CAAC,GAAoB;CAC/F,IAAM,EACF,mBAAgB,MAChB,eAAY,UACZ,oBACA,aACA,YACA,sBACA,GAEA,IAAuB,CAAC,GACxB,IAAa,GACb,IAA8B,MAC9B,IAAyB,MACzB,IAAwB;CAE5B,SAAS,EAAU,GAA2B;EACtC,MAAW,MACf,IAAS,GACT,IAAiB,CAAI;CACzB;CAEA,SAAS,EAAe,GAAqC;EACzD,IAAM,IAAoB;GACtB,UAAU,EAAS,OAAO;GAC1B,WAAW,EAAS,OAAO;GAC3B,WAAW,EAAS;GACpB,UAAU,EAAS,OAAO;EAC9B;EAEA,IAAI,GAAU;GACV,IAAM,IAAO,EAAY,GAAU,CAAK;GACxC,IAAI,IAAO,GAAe;GAC1B,KAAc;EAClB;EAOA,AALA,IAAW,GACX,EAAO,KAAK,CAAK,GACb,EAAO,SAAS,MAChB,IAAS,EAAO,MAAM,EAAO,SAAS,CAAS,IAEnD,IAAW,CAAM;CACrB;CAEA,SAAS,EAAY,GAAuC;EAExD,AADA,EAAU,OAAO,GACjB,IAAU,CAAK;CACnB;CAEA,SAAS,IAAc;EACf,UAAY,MAChB;OAAI,OAAO,YAAc,OAAe,CAAC,UAAU,aAAa;IAC5D,EAAU,OAAO;IACjB;GACJ;GAEA,AADA,EAAU,UAAU,GACpB,IAAU,UAAU,YAAY,cAAc,GAAgB,GAAa,CAAe;EAF1F;CAGJ;CAEA,SAAS,IAAa;EAKlB,AAJI,MAAY,QAAQ,OAAO,YAAc,OAAe,UAAU,eAClE,UAAU,YAAY,WAAW,CAAO,GAE5C,IAAU,MACV,EAAU,MAAM;CACpB;CAEA,SAAS,IAAc;EAKnB,AAJA,EAAK,GACL,IAAS,CAAC,GACV,IAAa,GACb,IAAW,MACX,IAAW,CAAM;CACrB;CAEA,OAAO;EACH;EACA;EACA;EACA,IAAI,SAAS;GACT,OAAO;EACX;EACA,IAAI,aAAa;GACb,OAAO;EACX;EACA,IAAI,SAAS;GACT,OAAO;EACX;CACJ;AACJ"}
1
+ {"version":3,"file":"create-position-tracker.js","names":["createPositionTracker","options","points","distanceKm","lastKept","watchId","status","setStatus","next","onStatusChange","handlePosition","point","position","step","haversineKm","minDistanceKm","maxPoints","onUpdate","handleError","onError","error","start","positionOptions","stop","clear"],"sources":["../../src/geo/create-position-tracker.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { TrackPoint } from \"./types\";\n\n/** Lifecycle status of a {@link PositionTracker}. */\nexport type TrackerStatus = \"idle\" | \"tracking\" | \"error\";\n\n/** Options for {@link createPositionTracker}. */\nexport interface CreatePositionTrackerOptions {\n /**\n * Discard a new sample when it is closer than this (in km) to the last\n * kept point — filters GPS jitter while standing still. Default: `0.005`\n * (5 meters). Pass `0` to keep every sample.\n */\n minDistanceKm?: number;\n /**\n * Cap the retained trajectory to the most recent N points (older points are\n * dropped, but their distance stays counted). Default: `Infinity`.\n */\n maxPoints?: number;\n /** Forwarded to `navigator.geolocation.watchPosition`. */\n positionOptions?: PositionOptions;\n /** Called with the full trajectory each time a point is added. */\n onUpdate?: (points: readonly TrackPoint[]) => void;\n /** Called on a `GeolocationPositionError`. */\n onError?: (error: GeolocationPositionError) => void;\n /** Called whenever the status changes. */\n onStatusChange?: (status: TrackerStatus) => void;\n}\n\n/** Imperative controller returned by {@link createPositionTracker}. */\nexport interface PositionTracker {\n /** Begin watching position. No-op if already tracking. */\n start: () => void;\n /** Stop watching. Retains the recorded trajectory. */\n stop: () => void;\n /** Stop and discard the recorded trajectory. */\n clear: () => void;\n /** Snapshot of the recorded trajectory (newest last). */\n readonly points: readonly TrackPoint[];\n /** Total distance of the recorded trajectory in kilometers. */\n readonly distanceKm: number;\n /** Current tracker status. */\n readonly status: TrackerStatus;\n}\n\n/**\n * Record a live GPS trajectory from `navigator.geolocation.watchPosition`.\n * Framework-free — the {@link usePositionTracker} hook wraps this for React.\n *\n * Jitter while stationary is filtered by `minDistanceKm`; distance is\n * accumulated across the *full* run even when `maxPoints` trims the retained\n * array. 100% browser-side: no network, no external service.\n *\n * @param options - Filtering, retention and callbacks.\n * @returns A controller with `start`/`stop`/`clear` and live getters.\n *\n * @example\n * const tracker = createPositionTracker({\n * minDistanceKm: 0.01,\n * onUpdate: (pts) => console.log(pts.length, \"points\"),\n * });\n * tracker.start();\n * // …later\n * tracker.stop();\n * console.log(tracker.distanceKm);\n */\nexport function createPositionTracker(options: CreatePositionTrackerOptions = {}): PositionTracker {\n const {\n minDistanceKm = 0.005,\n maxPoints = Infinity,\n positionOptions,\n onUpdate,\n onError,\n onStatusChange,\n } = options;\n\n let points: TrackPoint[] = [];\n let distanceKm = 0;\n let lastKept: TrackPoint | null = null;\n let watchId: number | null = null;\n let status: TrackerStatus = \"idle\";\n\n function setStatus(next: TrackerStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function handlePosition(position: GeolocationPosition): void {\n const point: TrackPoint = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n timestamp: position.timestamp,\n accuracy: position.coords.accuracy,\n };\n\n if (lastKept) {\n const step = haversineKm(lastKept, point);\n if (step < minDistanceKm) return;\n distanceKm += step;\n }\n\n lastKept = point;\n points.push(point);\n if (points.length > maxPoints) {\n points = points.slice(points.length - maxPoints);\n }\n onUpdate?.(points);\n }\n\n function handleError(error: GeolocationPositionError): void {\n setStatus(\"error\");\n onError?.(error);\n }\n\n function start(): void {\n if (watchId !== null) return;\n if (typeof navigator === \"undefined\" || !navigator.geolocation) {\n setStatus(\"error\");\n return;\n }\n setStatus(\"tracking\");\n watchId = navigator.geolocation.watchPosition(handlePosition, handleError, positionOptions);\n }\n\n function stop(): void {\n if (watchId !== null && typeof navigator !== \"undefined\" && navigator.geolocation) {\n navigator.geolocation.clearWatch(watchId);\n }\n watchId = null;\n setStatus(\"idle\");\n }\n\n function clear(): void {\n stop();\n points = [];\n distanceKm = 0;\n lastKept = null;\n onUpdate?.(points);\n }\n\n return {\n start,\n stop,\n clear,\n get points() {\n return points;\n },\n get distanceKm() {\n return distanceKm;\n },\n get status() {\n return status;\n },\n };\n}\n"],"mappings":";;AAkEA,SAAgBA,EAAsB,IAAwC,CAAC,GAAoB;CAC/F,IAAM,EACF,mBAAgB,MAChB,eAAY,UACZ,oBACA,aACA,YACA,sBACAC,GAEAC,IAAuB,CAAC,GACxBC,IAAa,GACbC,IAA8B,MAC9BC,IAAyB,MACzBC,IAAwB;CAE5B,SAASC,EAAU,GAA2B;EAC1C,AAAID,MAAWE,MACf,IAASA,GACTC,IAAiBD,CAAI;CACzB;CAEA,SAASE,EAAe,GAAqC;EACzD,IAAMC,IAAoB;GACtB,UAAUC,EAAS,OAAO;GAC1B,WAAWA,EAAS,OAAO;GAC3B,WAAWA,EAAS;GACpB,UAAUA,EAAS,OAAO;EAC9B;EAEA,IAAIR,GAAU;GACV,IAAMS,IAAOC,EAAYV,GAAUO,CAAK;GACxC,IAAIE,IAAOE,GAAe;GAC1B,KAAcF;EAClB;EAOA,AALA,IAAWF,GACXT,EAAO,KAAKS,CAAK,GACbT,EAAO,SAASc,MAChB,IAASd,EAAO,MAAMA,EAAO,SAASc,CAAS,IAEnDC,IAAWf,CAAM;CACrB;CAEA,SAASgB,EAAY,GAAuC;EAExD,AADAX,EAAU,OAAO,GACjBY,IAAUC,CAAK;CACnB;CAEA,SAASC,IAAc;EACnB,AAAIhB,MAAY,SACZ,OAAO,YAAc,OAAe,CAAC,UAAU,cAC/CE,EAAU,OAAO,KAGrBA,EAAU,UAAU,GACpB,IAAU,UAAU,YAAY,cAAcG,GAAgBQ,GAAaI,CAAe;CAC9F;CAEA,SAASC,IAAa;EAKlB,AAJIlB,MAAY,QAAQ,OAAO,YAAc,OAAe,UAAU,eAClE,UAAU,YAAY,WAAWA,CAAO,GAE5C,IAAU,MACVE,EAAU,MAAM;CACpB;CAEA,SAASiB,IAAc;EAKnB,AAJAD,EAAK,GACL,IAAS,CAAC,GACV,IAAa,GACb,IAAW,MACXN,IAAWf,CAAM;CACrB;CAEA,OAAO;EACH;EACA;EACA;EACA,IAAI,SAAS;GACT,OAAOA;EACX;EACA,IAAI,aAAa;GACb,OAAOC;EACX;EACA,IAAI,SAAS;GACT,OAAOG;EACX;CACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"distance.cjs","names":[],"sources":["../../src/geo/distance.ts"],"sourcesContent":["import type { Coordinate } from \"./types\";\n\n/**\n * Mean Earth radius in kilometers. Same value used by `tempest-fastapi-sdk`\n * (`geo/distance.py`) so client and server distances agree.\n */\nexport const EARTH_RADIUS_KM = 6371.0088;\n\n/** Convert degrees to radians. */\nexport function toRadians(degrees: number): number {\n return (degrees * Math.PI) / 180;\n}\n\n/**\n * Great-circle distance between two coordinates using the haversine formula\n * (spherical Earth). Mirrors `haversine_km` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Distance in kilometers (`>= 0`).\n *\n * @example\n * haversineKm(\n * { latitude: -23.5505, longitude: -46.6333 }, // São Paulo\n * { latitude: -22.9068, longitude: -43.1729 }, // Rio de Janeiro\n * ); // ≈ 360.9\n */\nexport function haversineKm(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLat = toRadians(destination.latitude - origin.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const a =\n Math.sin(deltaLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) ** 2;\n\n return 2 * EARTH_RADIUS_KM * Math.asin(Math.sqrt(a));\n}\n\n/**\n * Total length of a trajectory: the sum of haversine distances between each\n * consecutive pair of points. Returns `0` for an empty or single-point path.\n *\n * @param points - Ordered coordinates along the path.\n * @returns Cumulative distance in kilometers.\n */\nexport function pathLengthKm(points: readonly Coordinate[]): number {\n let total = 0;\n for (let i = 1; i < points.length; i += 1) {\n total += haversineKm(points[i - 1], points[i]);\n }\n return total;\n}\n\n/**\n * Initial bearing (forward azimuth) from `origin` to `destination`, in degrees\n * clockwise from true north, normalized to `[0, 360)`. Useful for orienting a\n * heading arrow on a trajectory.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Bearing in degrees, `[0, 360)`.\n */\nexport function bearingDeg(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const y = Math.sin(deltaLon) * Math.cos(lat2);\n const x =\n Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);\n\n const bearing = (Math.atan2(y, x) * 180) / Math.PI;\n return (bearing + 360) % 360;\n}\n"],"mappings":"AAMA,IAAa,EAAkB,UAG/B,SAAgB,EAAU,EAAyB,CAC/C,OAAQ,EAAU,KAAK,GAAM,GACjC,CAgBA,SAAgB,EAAY,EAAoB,EAAiC,CAC7E,IAAM,EAAO,EAAU,EAAO,QAAQ,EAChC,EAAO,EAAU,EAAY,QAAQ,EACrC,EAAW,EAAU,EAAY,SAAW,EAAO,QAAQ,EAC3D,EAAW,EAAU,EAAY,UAAY,EAAO,SAAS,EAE7D,EACF,KAAK,IAAI,EAAW,CAAC,GAAK,EAAI,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,EAAW,CAAC,GAAK,EAE9F,MAAO,GAAI,EAAkB,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,CACvD,CASA,SAAgB,EAAa,EAAuC,CAChE,IAAI,EAAQ,EACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,GAAK,EACpC,GAAS,EAAY,EAAO,EAAI,GAAI,EAAO,EAAE,EAEjD,OAAO,CACX,CAWA,SAAgB,EAAW,EAAoB,EAAiC,CAC5E,IAAM,EAAO,EAAU,EAAO,QAAQ,EAChC,EAAO,EAAU,EAAY,QAAQ,EACrC,EAAW,EAAU,EAAY,UAAY,EAAO,SAAS,EAE7D,EAAI,KAAK,IAAI,CAAQ,EAAI,KAAK,IAAI,CAAI,EACtC,EACF,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAI,EAAI,KAAK,IAAI,CAAQ,EAGzF,OADiB,KAAK,MAAM,EAAG,CAAC,EAAI,IAAO,KAAK,GAC9B,KAAO,GAC7B"}
1
+ {"version":3,"file":"distance.cjs","names":["EARTH_RADIUS_KM","toRadians","degrees","haversineKm","lat1","origin","lat2","destination","deltaLat","deltaLon","a","pathLengthKm","total","i","points","bearingDeg","y","x"],"sources":["../../src/geo/distance.ts"],"sourcesContent":["import type { Coordinate } from \"./types\";\n\n/**\n * Mean Earth radius in kilometers. Same value used by `tempest-fastapi-sdk`\n * (`geo/distance.py`) so client and server distances agree.\n */\nexport const EARTH_RADIUS_KM = 6371.0088;\n\n/** Convert degrees to radians. */\nexport function toRadians(degrees: number): number {\n return (degrees * Math.PI) / 180;\n}\n\n/**\n * Great-circle distance between two coordinates using the haversine formula\n * (spherical Earth). Mirrors `haversine_km` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Distance in kilometers (`>= 0`).\n *\n * @example\n * haversineKm(\n * { latitude: -23.5505, longitude: -46.6333 }, // São Paulo\n * { latitude: -22.9068, longitude: -43.1729 }, // Rio de Janeiro\n * ); // ≈ 360.9\n */\nexport function haversineKm(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLat = toRadians(destination.latitude - origin.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const a =\n Math.sin(deltaLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) ** 2;\n\n return 2 * EARTH_RADIUS_KM * Math.asin(Math.sqrt(a));\n}\n\n/**\n * Total length of a trajectory: the sum of haversine distances between each\n * consecutive pair of points. Returns `0` for an empty or single-point path.\n *\n * @param points - Ordered coordinates along the path.\n * @returns Cumulative distance in kilometers.\n */\nexport function pathLengthKm(points: readonly Coordinate[]): number {\n let total = 0;\n for (let i = 1; i < points.length; i += 1) {\n total += haversineKm(points[i - 1], points[i]);\n }\n return total;\n}\n\n/**\n * Initial bearing (forward azimuth) from `origin` to `destination`, in degrees\n * clockwise from true north, normalized to `[0, 360)`. Useful for orienting a\n * heading arrow on a trajectory.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Bearing in degrees, `[0, 360)`.\n */\nexport function bearingDeg(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const y = Math.sin(deltaLon) * Math.cos(lat2);\n const x =\n Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);\n\n const bearing = (Math.atan2(y, x) * 180) / Math.PI;\n return (bearing + 360) % 360;\n}\n"],"mappings":"AAMA,IAAaA,EAAkB,UAG/B,SAAgBC,EAAU,EAAyB,CAC/C,OAAQC,EAAU,KAAK,GAAM,GACjC,CAgBA,SAAgBC,EAAY,EAAoB,EAAiC,CAC7E,IAAMC,EAAOH,EAAUI,EAAO,QAAQ,EAChCC,EAAOL,EAAUM,EAAY,QAAQ,EACrCC,EAAWP,EAAUM,EAAY,SAAWF,EAAO,QAAQ,EAC3DI,EAAWR,EAAUM,EAAY,UAAYF,EAAO,SAAS,EAE7DK,EACF,KAAK,IAAIF,EAAW,CAAC,GAAK,EAAI,KAAK,IAAIJ,CAAI,EAAI,KAAK,IAAIE,CAAI,EAAI,KAAK,IAAIG,EAAW,CAAC,GAAK,EAE9F,MAAO,GAAIT,EAAkB,KAAK,KAAK,KAAK,KAAKU,CAAC,CAAC,CACvD,CASA,SAAgBC,EAAa,EAAuC,CAChE,IAAIC,EAAQ,EACZ,IAAK,IAAIC,EAAI,EAAGA,EAAIC,EAAO,OAAQ,GAAK,EACpC,GAASX,EAAYW,EAAOD,EAAI,GAAIC,EAAOD,EAAE,EAEjD,OAAOD,CACX,CAWA,SAAgBG,EAAW,EAAoB,EAAiC,CAC5E,IAAMX,EAAOH,EAAUI,EAAO,QAAQ,EAChCC,EAAOL,EAAUM,EAAY,QAAQ,EACrCE,EAAWR,EAAUM,EAAY,UAAYF,EAAO,SAAS,EAE7DW,EAAI,KAAK,IAAIP,CAAQ,EAAI,KAAK,IAAIH,CAAI,EACtCW,EACF,KAAK,IAAIb,CAAI,EAAI,KAAK,IAAIE,CAAI,EAAI,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAIE,CAAI,EAAI,KAAK,IAAIG,CAAQ,EAGzF,OADiB,KAAK,MAAMO,EAAGC,CAAC,EAAI,IAAO,KAAK,GAC9B,KAAO,GAC7B,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"distance.js","names":[],"sources":["../../src/geo/distance.ts"],"sourcesContent":["import type { Coordinate } from \"./types\";\n\n/**\n * Mean Earth radius in kilometers. Same value used by `tempest-fastapi-sdk`\n * (`geo/distance.py`) so client and server distances agree.\n */\nexport const EARTH_RADIUS_KM = 6371.0088;\n\n/** Convert degrees to radians. */\nexport function toRadians(degrees: number): number {\n return (degrees * Math.PI) / 180;\n}\n\n/**\n * Great-circle distance between two coordinates using the haversine formula\n * (spherical Earth). Mirrors `haversine_km` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Distance in kilometers (`>= 0`).\n *\n * @example\n * haversineKm(\n * { latitude: -23.5505, longitude: -46.6333 }, // São Paulo\n * { latitude: -22.9068, longitude: -43.1729 }, // Rio de Janeiro\n * ); // ≈ 360.9\n */\nexport function haversineKm(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLat = toRadians(destination.latitude - origin.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const a =\n Math.sin(deltaLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) ** 2;\n\n return 2 * EARTH_RADIUS_KM * Math.asin(Math.sqrt(a));\n}\n\n/**\n * Total length of a trajectory: the sum of haversine distances between each\n * consecutive pair of points. Returns `0` for an empty or single-point path.\n *\n * @param points - Ordered coordinates along the path.\n * @returns Cumulative distance in kilometers.\n */\nexport function pathLengthKm(points: readonly Coordinate[]): number {\n let total = 0;\n for (let i = 1; i < points.length; i += 1) {\n total += haversineKm(points[i - 1], points[i]);\n }\n return total;\n}\n\n/**\n * Initial bearing (forward azimuth) from `origin` to `destination`, in degrees\n * clockwise from true north, normalized to `[0, 360)`. Useful for orienting a\n * heading arrow on a trajectory.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Bearing in degrees, `[0, 360)`.\n */\nexport function bearingDeg(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const y = Math.sin(deltaLon) * Math.cos(lat2);\n const x =\n Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);\n\n const bearing = (Math.atan2(y, x) * 180) / Math.PI;\n return (bearing + 360) % 360;\n}\n"],"mappings":";AAMA,IAAa,IAAkB;AAG/B,SAAgB,EAAU,GAAyB;CAC/C,OAAQ,IAAU,KAAK,KAAM;AACjC;AAgBA,SAAgB,EAAY,GAAoB,GAAiC;CAC7E,IAAM,IAAO,EAAU,EAAO,QAAQ,GAChC,IAAO,EAAU,EAAY,QAAQ,GACrC,IAAW,EAAU,EAAY,WAAW,EAAO,QAAQ,GAC3D,IAAW,EAAU,EAAY,YAAY,EAAO,SAAS,GAE7D,IACF,KAAK,IAAI,IAAW,CAAC,KAAK,IAAI,KAAK,IAAI,CAAI,IAAI,KAAK,IAAI,CAAI,IAAI,KAAK,IAAI,IAAW,CAAC,KAAK;CAE9F,OAAO,IAAI,IAAkB,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC;AACvD;AASA,SAAgB,EAAa,GAAuC;CAChE,IAAI,IAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KAAK,GACpC,KAAS,EAAY,EAAO,IAAI,IAAI,EAAO,EAAE;CAEjD,OAAO;AACX;AAWA,SAAgB,EAAW,GAAoB,GAAiC;CAC5E,IAAM,IAAO,EAAU,EAAO,QAAQ,GAChC,IAAO,EAAU,EAAY,QAAQ,GACrC,IAAW,EAAU,EAAY,YAAY,EAAO,SAAS,GAE7D,IAAI,KAAK,IAAI,CAAQ,IAAI,KAAK,IAAI,CAAI,GACtC,IACF,KAAK,IAAI,CAAI,IAAI,KAAK,IAAI,CAAI,IAAI,KAAK,IAAI,CAAI,IAAI,KAAK,IAAI,CAAI,IAAI,KAAK,IAAI,CAAQ;CAGzF,QADiB,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK,KAC9B,OAAO;AAC7B"}
1
+ {"version":3,"file":"distance.js","names":["EARTH_RADIUS_KM","toRadians","degrees","haversineKm","lat1","origin","lat2","destination","deltaLat","deltaLon","a","pathLengthKm","total","i","points","bearingDeg","y","x"],"sources":["../../src/geo/distance.ts"],"sourcesContent":["import type { Coordinate } from \"./types\";\n\n/**\n * Mean Earth radius in kilometers. Same value used by `tempest-fastapi-sdk`\n * (`geo/distance.py`) so client and server distances agree.\n */\nexport const EARTH_RADIUS_KM = 6371.0088;\n\n/** Convert degrees to radians. */\nexport function toRadians(degrees: number): number {\n return (degrees * Math.PI) / 180;\n}\n\n/**\n * Great-circle distance between two coordinates using the haversine formula\n * (spherical Earth). Mirrors `haversine_km` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Distance in kilometers (`>= 0`).\n *\n * @example\n * haversineKm(\n * { latitude: -23.5505, longitude: -46.6333 }, // São Paulo\n * { latitude: -22.9068, longitude: -43.1729 }, // Rio de Janeiro\n * ); // ≈ 360.9\n */\nexport function haversineKm(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLat = toRadians(destination.latitude - origin.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const a =\n Math.sin(deltaLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) ** 2;\n\n return 2 * EARTH_RADIUS_KM * Math.asin(Math.sqrt(a));\n}\n\n/**\n * Total length of a trajectory: the sum of haversine distances between each\n * consecutive pair of points. Returns `0` for an empty or single-point path.\n *\n * @param points - Ordered coordinates along the path.\n * @returns Cumulative distance in kilometers.\n */\nexport function pathLengthKm(points: readonly Coordinate[]): number {\n let total = 0;\n for (let i = 1; i < points.length; i += 1) {\n total += haversineKm(points[i - 1], points[i]);\n }\n return total;\n}\n\n/**\n * Initial bearing (forward azimuth) from `origin` to `destination`, in degrees\n * clockwise from true north, normalized to `[0, 360)`. Useful for orienting a\n * heading arrow on a trajectory.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @returns Bearing in degrees, `[0, 360)`.\n */\nexport function bearingDeg(origin: Coordinate, destination: Coordinate): number {\n const lat1 = toRadians(origin.latitude);\n const lat2 = toRadians(destination.latitude);\n const deltaLon = toRadians(destination.longitude - origin.longitude);\n\n const y = Math.sin(deltaLon) * Math.cos(lat2);\n const x =\n Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);\n\n const bearing = (Math.atan2(y, x) * 180) / Math.PI;\n return (bearing + 360) % 360;\n}\n"],"mappings":";AAMA,IAAaA,IAAkB;AAG/B,SAAgBC,EAAU,GAAyB;CAC/C,OAAQC,IAAU,KAAK,KAAM;AACjC;AAgBA,SAAgBC,EAAY,GAAoB,GAAiC;CAC7E,IAAMC,IAAOH,EAAUI,EAAO,QAAQ,GAChCC,IAAOL,EAAUM,EAAY,QAAQ,GACrCC,IAAWP,EAAUM,EAAY,WAAWF,EAAO,QAAQ,GAC3DI,IAAWR,EAAUM,EAAY,YAAYF,EAAO,SAAS,GAE7DK,IACF,KAAK,IAAIF,IAAW,CAAC,KAAK,IAAI,KAAK,IAAIJ,CAAI,IAAI,KAAK,IAAIE,CAAI,IAAI,KAAK,IAAIG,IAAW,CAAC,KAAK;CAE9F,OAAO,IAAIT,IAAkB,KAAK,KAAK,KAAK,KAAKU,CAAC,CAAC;AACvD;AASA,SAAgBC,EAAa,GAAuC;CAChE,IAAIC,IAAQ;CACZ,KAAK,IAAIC,IAAI,GAAGA,IAAIC,EAAO,QAAQ,KAAK,GACpC,KAASX,EAAYW,EAAOD,IAAI,IAAIC,EAAOD,EAAE;CAEjD,OAAOD;AACX;AAWA,SAAgBG,EAAW,GAAoB,GAAiC;CAC5E,IAAMX,IAAOH,EAAUI,EAAO,QAAQ,GAChCC,IAAOL,EAAUM,EAAY,QAAQ,GACrCE,IAAWR,EAAUM,EAAY,YAAYF,EAAO,SAAS,GAE7DW,IAAI,KAAK,IAAIP,CAAQ,IAAI,KAAK,IAAIH,CAAI,GACtCW,IACF,KAAK,IAAIb,CAAI,IAAI,KAAK,IAAIE,CAAI,IAAI,KAAK,IAAIF,CAAI,IAAI,KAAK,IAAIE,CAAI,IAAI,KAAK,IAAIG,CAAQ;CAGzF,QADiB,KAAK,MAAMO,GAAGC,CAAC,IAAI,MAAO,KAAK,KAC9B,OAAO;AAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"estimate.cjs","names":[],"sources":["../../src/geo/estimate.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Multiplier applied to the great-circle distance to approximate real road\n * distance. Mirrors `DEFAULT_CIRCUITY_FACTOR` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CIRCUITY_FACTOR = 1.3;\n\n/**\n * Default average car speed in km/h used to derive duration from distance.\n * Mirrors `DEFAULT_CAR_SPEED_KMH` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CAR_SPEED_KMH = 50.0;\n\n/**\n * Per-mode multipliers applied to the car duration. Mirrors\n * `DEFAULT_MODE_DURATION_FACTORS` from `tempest-fastapi-sdk` — motorcycles are\n * a touch faster, buses considerably slower (stops + dedicated lanes).\n */\nexport const DEFAULT_MODE_DURATION_FACTORS: Record<TravelMode, number> = {\n car: 1.0,\n motorcycle: 0.95,\n bus: 1.6,\n};\n\n/**\n * Look up the duration multiplier for a travel mode, falling back to `1.0`\n * for unknown modes. Mirrors `duration_factor` from `tempest-fastapi-sdk`.\n *\n * @param mode - Travel mode.\n * @param factors - Optional override map (partial merges over the defaults).\n * @returns The multiplier for `mode`.\n */\nexport function durationFactor(\n mode: TravelMode,\n factors?: Partial<Record<TravelMode, number>>,\n): number {\n return factors?.[mode] ?? DEFAULT_MODE_DURATION_FACTORS[mode] ?? 1.0;\n}\n\n/** Options for {@link estimateTravel}. */\nexport interface EstimateTravelOptions {\n /** Distance multiplier over the great-circle line. Default: `1.3`. */\n circuityFactor?: number;\n /** Average car speed in km/h. Default: `50`. */\n carSpeedKmh?: number;\n /** Per-mode duration multipliers (merged over the defaults). */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\n/**\n * Offline travel estimate between two coordinates. No network — distance comes\n * from {@link haversineKm} scaled by circuity, duration from a mode-adjusted\n * average speed. Mirrors `estimate_travel` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @param mode - Travel mode. Default: `\"car\"`.\n * @param options - Tuning knobs (circuity, speed, per-mode factors).\n * @returns A `\"heuristic\"` {@link TravelEstimate}.\n * @throws {RangeError} If `carSpeedKmh <= 0` or `circuityFactor <= 0`.\n *\n * @example\n * estimateTravel(\n * { latitude: -23.5505, longitude: -46.6333 },\n * { latitude: -23.5629, longitude: -46.6544 },\n * \"car\",\n * ); // { mode: \"car\", distance_km: …, duration_minutes: …, source: \"heuristic\" }\n *\n * @tempest-limits param-count — `(origin, destination, mode)` is the shape every\n * routing API uses, and the fourth argument is already the named-options object the\n * rule asks for. Folding origin and destination into it would hide that the pair is\n * ordered, and this function is re-exported from the package root, so the change\n * would break every caller to satisfy a count.\n */\nexport function estimateTravel(\n origin: Coordinate,\n destination: Coordinate,\n mode: TravelMode = \"car\",\n options: EstimateTravelOptions = {},\n): TravelEstimate {\n const {\n circuityFactor = DEFAULT_CIRCUITY_FACTOR,\n carSpeedKmh = DEFAULT_CAR_SPEED_KMH,\n modeDurationFactors,\n } = options;\n\n if (carSpeedKmh <= 0) {\n throw new RangeError(\"carSpeedKmh must be greater than 0\");\n }\n if (circuityFactor <= 0) {\n throw new RangeError(\"circuityFactor must be greater than 0\");\n }\n\n const distanceKm = haversineKm(origin, destination) * circuityFactor;\n const carMinutes = (distanceKm / carSpeedKmh) * 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"heuristic\",\n };\n}\n"],"mappings":"kCAOA,IAAa,EAA0B,IAM1B,EAAwB,GAOxB,EAA4D,CACrE,IAAK,EACL,WAAY,IACZ,IAAK,GACT,EAUA,SAAgB,EACZ,EACA,EACM,CACN,OAAO,IAAU,IAAS,EAA8B,IAAS,CACrE,CAqCA,SAAgB,EACZ,EACA,EACA,EAAmB,MACnB,EAAiC,CAAC,EACpB,CACd,GAAM,CACF,iBAAiB,EACjB,cAAA,GACA,uBACA,EAEJ,GAAI,GAAe,EACf,MAAU,WAAW,oCAAoC,EAE7D,GAAI,GAAkB,EAClB,MAAU,WAAW,uCAAuC,EAGhE,IAAM,EAAa,EAAA,YAAY,EAAQ,CAAW,EAAI,EAItD,MAAO,CACH,OACA,YAAa,EACb,iBANgB,EAAa,EAAe,GACX,EAAe,EAAM,CAAmB,EAMzE,OAAQ,WACZ,CACJ"}
1
+ {"version":3,"file":"estimate.cjs","names":["haversineKm","require_distance","DEFAULT_CIRCUITY_FACTOR","DEFAULT_CAR_SPEED_KMH","DEFAULT_MODE_DURATION_FACTORS","durationFactor","factors","mode","estimateTravel","options","carSpeedKmh","circuityFactor","distanceKm","origin","destination","modeDurationFactors"],"sources":["../../src/geo/estimate.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Multiplier applied to the great-circle distance to approximate real road\n * distance. Mirrors `DEFAULT_CIRCUITY_FACTOR` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CIRCUITY_FACTOR = 1.3;\n\n/**\n * Default average car speed in km/h used to derive duration from distance.\n * Mirrors `DEFAULT_CAR_SPEED_KMH` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CAR_SPEED_KMH = 50.0;\n\n/**\n * Per-mode multipliers applied to the car duration. Mirrors\n * `DEFAULT_MODE_DURATION_FACTORS` from `tempest-fastapi-sdk` — motorcycles are\n * a touch faster, buses considerably slower (stops + dedicated lanes).\n */\nexport const DEFAULT_MODE_DURATION_FACTORS: Record<TravelMode, number> = {\n car: 1.0,\n motorcycle: 0.95,\n bus: 1.6,\n};\n\n/**\n * Look up the duration multiplier for a travel mode, falling back to `1.0`\n * for unknown modes. Mirrors `duration_factor` from `tempest-fastapi-sdk`.\n *\n * @param mode - Travel mode.\n * @param factors - Optional override map (partial merges over the defaults).\n * @returns The multiplier for `mode`.\n */\nexport function durationFactor(\n mode: TravelMode,\n factors?: Partial<Record<TravelMode, number>>,\n): number {\n return factors?.[mode] ?? DEFAULT_MODE_DURATION_FACTORS[mode] ?? 1.0;\n}\n\n/** Options for {@link estimateTravel}. */\nexport interface EstimateTravelOptions {\n /** Distance multiplier over the great-circle line. Default: `1.3`. */\n circuityFactor?: number;\n /** Average car speed in km/h. Default: `50`. */\n carSpeedKmh?: number;\n /** Per-mode duration multipliers (merged over the defaults). */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\n/**\n * Offline travel estimate between two coordinates. No network — distance comes\n * from {@link haversineKm} scaled by circuity, duration from a mode-adjusted\n * average speed. Mirrors `estimate_travel` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @param mode - Travel mode. Default: `\"car\"`.\n * @param options - Tuning knobs (circuity, speed, per-mode factors).\n * @returns A `\"heuristic\"` {@link TravelEstimate}.\n * @throws {RangeError} If `carSpeedKmh <= 0` or `circuityFactor <= 0`.\n *\n * @example\n * estimateTravel(\n * { latitude: -23.5505, longitude: -46.6333 },\n * { latitude: -23.5629, longitude: -46.6544 },\n * \"car\",\n * ); // { mode: \"car\", distance_km: …, duration_minutes: …, source: \"heuristic\" }\n *\n * @tempest-limits param-count — `(origin, destination, mode)` is the shape every\n * routing API uses, and the fourth argument is already the named-options object the\n * rule asks for. Folding origin and destination into it would hide that the pair is\n * ordered, and this function is re-exported from the package root, so the change\n * would break every caller to satisfy a count.\n */\nexport function estimateTravel(\n origin: Coordinate,\n destination: Coordinate,\n mode: TravelMode = \"car\",\n options: EstimateTravelOptions = {},\n): TravelEstimate {\n const {\n circuityFactor = DEFAULT_CIRCUITY_FACTOR,\n carSpeedKmh = DEFAULT_CAR_SPEED_KMH,\n modeDurationFactors,\n } = options;\n\n if (carSpeedKmh <= 0) {\n throw new RangeError(\"carSpeedKmh must be greater than 0\");\n }\n if (circuityFactor <= 0) {\n throw new RangeError(\"circuityFactor must be greater than 0\");\n }\n\n const distanceKm = haversineKm(origin, destination) * circuityFactor;\n const carMinutes = (distanceKm / carSpeedKmh) * 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"heuristic\",\n };\n}\n"],"mappings":"A,kCAOA,IAAaE,EAA0B,IAM1BC,EAAwB,GAOxBC,EAA4D,CACrE,IAAK,EACL,WAAY,IACZ,IAAK,GACT,EAUA,SAAgBC,EACZ,EACA,EACM,CACN,OAAOC,IAAUC,IAASH,EAA8BG,IAAS,CACrE,CAqCA,SAAgBC,EACZ,EACA,EACA,EAAmB,MACnB,EAAiC,CAAC,EACpB,CACd,GAAM,CACF,iBAAiBN,EACjB,cAAA,GACA,uBACAO,EAEJ,GAAIC,GAAe,EACf,MAAU,WAAW,oCAAoC,EAE7D,GAAIC,GAAkB,EAClB,MAAU,WAAW,uCAAuC,EAGhE,IAAMC,EAAaZ,EAAAA,YAAYa,EAAQC,CAAW,EAAIH,EAItD,MAAO,CACH,OACA,YAAaC,EACb,iBANgBA,EAAaF,EAAe,GACXL,EAAeE,EAAMQ,CAAmB,EAMzE,OAAQ,WACZ,CACJ,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"estimate.js","names":[],"sources":["../../src/geo/estimate.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Multiplier applied to the great-circle distance to approximate real road\n * distance. Mirrors `DEFAULT_CIRCUITY_FACTOR` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CIRCUITY_FACTOR = 1.3;\n\n/**\n * Default average car speed in km/h used to derive duration from distance.\n * Mirrors `DEFAULT_CAR_SPEED_KMH` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CAR_SPEED_KMH = 50.0;\n\n/**\n * Per-mode multipliers applied to the car duration. Mirrors\n * `DEFAULT_MODE_DURATION_FACTORS` from `tempest-fastapi-sdk` — motorcycles are\n * a touch faster, buses considerably slower (stops + dedicated lanes).\n */\nexport const DEFAULT_MODE_DURATION_FACTORS: Record<TravelMode, number> = {\n car: 1.0,\n motorcycle: 0.95,\n bus: 1.6,\n};\n\n/**\n * Look up the duration multiplier for a travel mode, falling back to `1.0`\n * for unknown modes. Mirrors `duration_factor` from `tempest-fastapi-sdk`.\n *\n * @param mode - Travel mode.\n * @param factors - Optional override map (partial merges over the defaults).\n * @returns The multiplier for `mode`.\n */\nexport function durationFactor(\n mode: TravelMode,\n factors?: Partial<Record<TravelMode, number>>,\n): number {\n return factors?.[mode] ?? DEFAULT_MODE_DURATION_FACTORS[mode] ?? 1.0;\n}\n\n/** Options for {@link estimateTravel}. */\nexport interface EstimateTravelOptions {\n /** Distance multiplier over the great-circle line. Default: `1.3`. */\n circuityFactor?: number;\n /** Average car speed in km/h. Default: `50`. */\n carSpeedKmh?: number;\n /** Per-mode duration multipliers (merged over the defaults). */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\n/**\n * Offline travel estimate between two coordinates. No network — distance comes\n * from {@link haversineKm} scaled by circuity, duration from a mode-adjusted\n * average speed. Mirrors `estimate_travel` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @param mode - Travel mode. Default: `\"car\"`.\n * @param options - Tuning knobs (circuity, speed, per-mode factors).\n * @returns A `\"heuristic\"` {@link TravelEstimate}.\n * @throws {RangeError} If `carSpeedKmh <= 0` or `circuityFactor <= 0`.\n *\n * @example\n * estimateTravel(\n * { latitude: -23.5505, longitude: -46.6333 },\n * { latitude: -23.5629, longitude: -46.6544 },\n * \"car\",\n * ); // { mode: \"car\", distance_km: …, duration_minutes: …, source: \"heuristic\" }\n *\n * @tempest-limits param-count — `(origin, destination, mode)` is the shape every\n * routing API uses, and the fourth argument is already the named-options object the\n * rule asks for. Folding origin and destination into it would hide that the pair is\n * ordered, and this function is re-exported from the package root, so the change\n * would break every caller to satisfy a count.\n */\nexport function estimateTravel(\n origin: Coordinate,\n destination: Coordinate,\n mode: TravelMode = \"car\",\n options: EstimateTravelOptions = {},\n): TravelEstimate {\n const {\n circuityFactor = DEFAULT_CIRCUITY_FACTOR,\n carSpeedKmh = DEFAULT_CAR_SPEED_KMH,\n modeDurationFactors,\n } = options;\n\n if (carSpeedKmh <= 0) {\n throw new RangeError(\"carSpeedKmh must be greater than 0\");\n }\n if (circuityFactor <= 0) {\n throw new RangeError(\"circuityFactor must be greater than 0\");\n }\n\n const distanceKm = haversineKm(origin, destination) * circuityFactor;\n const carMinutes = (distanceKm / carSpeedKmh) * 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"heuristic\",\n };\n}\n"],"mappings":";;AAOA,IAAa,IAA0B,KAM1B,IAAwB,IAOxB,IAA4D;CACrE,KAAK;CACL,YAAY;CACZ,KAAK;AACT;AAUA,SAAgB,EACZ,GACA,GACM;CACN,OAAO,IAAU,MAAS,EAA8B,MAAS;AACrE;AAqCA,SAAgB,EACZ,GACA,GACA,IAAmB,OACnB,IAAiC,CAAC,GACpB;CACd,IAAM,EACF,oBAAiB,GACjB,iBAAA,IACA,2BACA;CAEJ,IAAI,KAAe,GACf,MAAU,WAAW,oCAAoC;CAE7D,IAAI,KAAkB,GAClB,MAAU,WAAW,uCAAuC;CAGhE,IAAM,IAAa,EAAY,GAAQ,CAAW,IAAI;CAItD,OAAO;EACH;EACA,aAAa;EACb,kBANgB,IAAa,IAAe,KACX,EAAe,GAAM,CAAmB;EAMzE,QAAQ;CACZ;AACJ"}
1
+ {"version":3,"file":"estimate.js","names":["DEFAULT_CIRCUITY_FACTOR","DEFAULT_CAR_SPEED_KMH","DEFAULT_MODE_DURATION_FACTORS","durationFactor","factors","mode","estimateTravel","options","carSpeedKmh","circuityFactor","distanceKm","haversineKm","origin","destination","modeDurationFactors"],"sources":["../../src/geo/estimate.ts"],"sourcesContent":["import { haversineKm } from \"./distance\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Multiplier applied to the great-circle distance to approximate real road\n * distance. Mirrors `DEFAULT_CIRCUITY_FACTOR` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CIRCUITY_FACTOR = 1.3;\n\n/**\n * Default average car speed in km/h used to derive duration from distance.\n * Mirrors `DEFAULT_CAR_SPEED_KMH` from `tempest-fastapi-sdk`.\n */\nexport const DEFAULT_CAR_SPEED_KMH = 50.0;\n\n/**\n * Per-mode multipliers applied to the car duration. Mirrors\n * `DEFAULT_MODE_DURATION_FACTORS` from `tempest-fastapi-sdk` — motorcycles are\n * a touch faster, buses considerably slower (stops + dedicated lanes).\n */\nexport const DEFAULT_MODE_DURATION_FACTORS: Record<TravelMode, number> = {\n car: 1.0,\n motorcycle: 0.95,\n bus: 1.6,\n};\n\n/**\n * Look up the duration multiplier for a travel mode, falling back to `1.0`\n * for unknown modes. Mirrors `duration_factor` from `tempest-fastapi-sdk`.\n *\n * @param mode - Travel mode.\n * @param factors - Optional override map (partial merges over the defaults).\n * @returns The multiplier for `mode`.\n */\nexport function durationFactor(\n mode: TravelMode,\n factors?: Partial<Record<TravelMode, number>>,\n): number {\n return factors?.[mode] ?? DEFAULT_MODE_DURATION_FACTORS[mode] ?? 1.0;\n}\n\n/** Options for {@link estimateTravel}. */\nexport interface EstimateTravelOptions {\n /** Distance multiplier over the great-circle line. Default: `1.3`. */\n circuityFactor?: number;\n /** Average car speed in km/h. Default: `50`. */\n carSpeedKmh?: number;\n /** Per-mode duration multipliers (merged over the defaults). */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\n/**\n * Offline travel estimate between two coordinates. No network — distance comes\n * from {@link haversineKm} scaled by circuity, duration from a mode-adjusted\n * average speed. Mirrors `estimate_travel` from `tempest-fastapi-sdk`.\n *\n * @param origin - Start coordinate.\n * @param destination - End coordinate.\n * @param mode - Travel mode. Default: `\"car\"`.\n * @param options - Tuning knobs (circuity, speed, per-mode factors).\n * @returns A `\"heuristic\"` {@link TravelEstimate}.\n * @throws {RangeError} If `carSpeedKmh <= 0` or `circuityFactor <= 0`.\n *\n * @example\n * estimateTravel(\n * { latitude: -23.5505, longitude: -46.6333 },\n * { latitude: -23.5629, longitude: -46.6544 },\n * \"car\",\n * ); // { mode: \"car\", distance_km: …, duration_minutes: …, source: \"heuristic\" }\n *\n * @tempest-limits param-count — `(origin, destination, mode)` is the shape every\n * routing API uses, and the fourth argument is already the named-options object the\n * rule asks for. Folding origin and destination into it would hide that the pair is\n * ordered, and this function is re-exported from the package root, so the change\n * would break every caller to satisfy a count.\n */\nexport function estimateTravel(\n origin: Coordinate,\n destination: Coordinate,\n mode: TravelMode = \"car\",\n options: EstimateTravelOptions = {},\n): TravelEstimate {\n const {\n circuityFactor = DEFAULT_CIRCUITY_FACTOR,\n carSpeedKmh = DEFAULT_CAR_SPEED_KMH,\n modeDurationFactors,\n } = options;\n\n if (carSpeedKmh <= 0) {\n throw new RangeError(\"carSpeedKmh must be greater than 0\");\n }\n if (circuityFactor <= 0) {\n throw new RangeError(\"circuityFactor must be greater than 0\");\n }\n\n const distanceKm = haversineKm(origin, destination) * circuityFactor;\n const carMinutes = (distanceKm / carSpeedKmh) * 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"heuristic\",\n };\n}\n"],"mappings":";;AAOA,IAAaA,IAA0B,KAM1BC,IAAwB,IAOxBC,IAA4D;CACrE,KAAK;CACL,YAAY;CACZ,KAAK;AACT;AAUA,SAAgBC,EACZ,GACA,GACM;CACN,OAAOC,IAAUC,MAASH,EAA8BG,MAAS;AACrE;AAqCA,SAAgBC,EACZ,GACA,GACA,IAAmB,OACnB,IAAiC,CAAC,GACpB;CACd,IAAM,EACF,oBAAiBN,GACjB,iBAAA,IACA,2BACAO;CAEJ,IAAIC,KAAe,GACf,MAAU,WAAW,oCAAoC;CAE7D,IAAIC,KAAkB,GAClB,MAAU,WAAW,uCAAuC;CAGhE,IAAMC,IAAaC,EAAYC,GAAQC,CAAW,IAAIJ;CAItD,OAAO;EACH;EACA,aAAaC;EACb,kBANgBA,IAAaF,IAAe,KACXL,EAAeE,GAAMS,CAAmB;EAMzE,QAAQ;CACZ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"leaflet-map.cjs","names":[],"sources":["../../src/geo/leaflet-map.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { boundingBox } from \"./bounds\";\nimport type { Coordinate } from \"./types\";\n\n/**\n * Minimal structural typing for the slice of the Leaflet API this layer uses.\n * Declared locally so the SDK type-checks and builds even when `leaflet` (an\n * optional peer) is not installed — the real module is loaded at runtime.\n */\ninterface LeafletMapInstance {\n setView: (center: [number, number], zoom: number) => LeafletMapInstance;\n fitBounds: (bounds: [[number, number], [number, number]], options?: unknown) => void;\n remove: () => void;\n}\ninterface LeafletLayer {\n addTo: (map: LeafletMapInstance) => LeafletLayer;\n}\ninterface LeafletModule {\n map: (el: HTMLElement, options?: unknown) => LeafletMapInstance;\n tileLayer: (url: string, options?: unknown) => LeafletLayer;\n polyline: (latlngs: [number, number][], options?: unknown) => LeafletLayer;\n circleMarker: (latlng: [number, number], options?: unknown) => LeafletLayer;\n}\n\nexport interface LeafletTrajectoryProps {\n points: readonly Coordinate[];\n current?: Coordinate | null;\n tileUrl: string;\n tileAttribution?: string;\n strokeColor?: string;\n}\n\n/**\n * Leaflet-backed tile layer for {@link TrajectoryMap}. Loaded lazily and only\n * when a `tileUrl` is provided. Requires `leaflet` to be installed by the app\n * (optional peer dependency) plus its stylesheet imported once:\n * `import \"leaflet/dist/leaflet.css\"`.\n */\nexport function LeafletTrajectory({\n points,\n current,\n tileUrl,\n tileAttribution,\n strokeColor,\n}: LeafletTrajectoryProps) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let map: LeafletMapInstance | null = null;\n let cancelled = false;\n\n const specifier = \"leaflet\";\n import(/* @vite-ignore */ specifier)\n .then((mod: { default?: LeafletModule } & LeafletModule) => {\n if (cancelled || !nodeRef.current) return;\n const L: LeafletModule = mod.default ?? mod;\n\n map = L.map(nodeRef.current, { attributionControl: true });\n L.tileLayer(tileUrl, {\n attribution: tileAttribution ?? \"\",\n maxZoom: 19,\n }).addTo(map);\n\n const latlngs = points.map((p): [number, number] => [p.latitude, p.longitude]);\n if (latlngs.length > 0) {\n L.polyline(latlngs, {\n color: strokeColor ?? \"#2563eb\",\n weight: 4,\n }).addTo(map);\n L.circleMarker(latlngs[0], { radius: 6, color: \"#16a34a\" }).addTo(map);\n }\n\n const marker = current ?? points[points.length - 1];\n if (marker) {\n L.circleMarker([marker.latitude, marker.longitude], {\n radius: 6,\n color: strokeColor ?? \"#2563eb\",\n }).addTo(map);\n }\n\n const box = boundingBox(current ? [...points, current] : [...points]);\n if (box) {\n map.fitBounds(\n [\n [box.minLatitude, box.minLongitude],\n [box.maxLatitude, box.maxLongitude],\n ],\n { padding: [24, 24] },\n );\n } else {\n map.setView([0, 0], 2);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setError(\n \"Leaflet não encontrado. Instale `leaflet` para usar tiles, ou remova `tileUrl` para o plot SVG.\",\n );\n }\n });\n\n return () => {\n cancelled = true;\n map?.remove();\n };\n }, [points, current, tileUrl, tileAttribution, strokeColor]);\n\n if (error) {\n return (\n <div style={{ padding: 16, fontSize: 13, color: \"var(--tempest-danger-fg)\" }}>\n {error}\n </div>\n );\n }\n\n return <div ref={nodeRef} style={{ width: \"100%\", height: \"100%\" }} />;\n}\n"],"mappings":"sFAsCA,SAAgB,EAAkB,CAC9B,SACA,UACA,UACA,kBACA,eACuB,CACvB,IAAM,GAAA,EAAU,EAAA,OAAA,CAAuB,IAAI,EACrC,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAwB,IAAI,EAsEtD,OApEA,EAAA,EAAA,UAAA,KAAgB,CACZ,IAAI,EAAiC,KACjC,EAAY,GAoDhB,OAjDA,OAA0B,UAAU,CAC/B,KAAM,GAAqD,CACxD,GAAI,GAAa,CAAC,EAAQ,QAAS,OACnC,IAAM,EAAmB,EAAI,SAAW,EAExC,EAAM,EAAE,IAAI,EAAQ,QAAS,CAAE,mBAAoB,EAAK,CAAC,EACzD,EAAE,UAAU,EAAS,CACjB,YAAa,GAAmB,GAChC,QAAS,EACb,CAAC,CAAC,CAAC,MAAM,CAAG,EAEZ,IAAM,EAAU,EAAO,IAAK,GAAwB,CAAC,EAAE,SAAU,EAAE,SAAS,CAAC,EACzE,EAAQ,OAAS,IACjB,EAAE,SAAS,EAAS,CAChB,MAAO,GAAe,UACtB,OAAQ,CACZ,CAAC,CAAC,CAAC,MAAM,CAAG,EACZ,EAAE,aAAa,EAAQ,GAAI,CAAE,OAAQ,EAAG,MAAO,SAAU,CAAC,CAAC,CAAC,MAAM,CAAG,GAGzE,IAAM,EAAS,GAAW,EAAO,EAAO,OAAS,GAC7C,GACA,EAAE,aAAa,CAAC,EAAO,SAAU,EAAO,SAAS,EAAG,CAChD,OAAQ,EACR,MAAO,GAAe,SAC1B,CAAC,CAAC,CAAC,MAAM,CAAG,EAGhB,IAAM,EAAM,EAAA,YAAY,EAAU,CAAC,GAAG,EAAQ,CAAO,EAAI,CAAC,GAAG,CAAM,CAAC,EAChE,EACA,EAAI,UACA,CACI,CAAC,EAAI,YAAa,EAAI,YAAY,EAClC,CAAC,EAAI,YAAa,EAAI,YAAY,CACtC,EACA,CAAE,QAAS,CAAC,GAAI,EAAE,CAAE,CACxB,EAEA,EAAI,QAAQ,CAAC,EAAG,CAAC,EAAG,CAAC,CAE7B,CAAC,CAAC,CACD,UAAY,CACJ,GACD,EACI,iGACJ,CAER,CAAC,MAEQ,CACT,EAAY,GACZ,GAAK,OAAO,CAChB,CACJ,EAAG,CAAC,EAAQ,EAAS,EAAS,EAAiB,CAAW,CAAC,EAEvD,GAEI,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,QAAS,GAAI,SAAU,GAAI,MAAO,0BAA2B,EACtE,SAAA,CACA,CAAA,GAIN,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,IAAK,EAAS,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAO,CAAI,CAAA,CACzE"}
1
+ {"version":3,"file":"leaflet-map.cjs","names":["useRef","useState","boundingBox","require_bounds","react","react_jsx_runtime","LeafletTrajectory","nodeRef","error","setError","map","cancelled","L","mod","tileUrl","tileAttribution","latlngs","points","p","strokeColor","marker","current","box"],"sources":["../../src/geo/leaflet-map.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { boundingBox } from \"./bounds\";\nimport type { Coordinate } from \"./types\";\n\n/**\n * Minimal structural typing for the slice of the Leaflet API this layer uses.\n * Declared locally so the SDK type-checks and builds even when `leaflet` (an\n * optional peer) is not installed — the real module is loaded at runtime.\n */\ninterface LeafletMapInstance {\n setView: (center: [number, number], zoom: number) => LeafletMapInstance;\n fitBounds: (bounds: [[number, number], [number, number]], options?: unknown) => void;\n remove: () => void;\n}\ninterface LeafletLayer {\n addTo: (map: LeafletMapInstance) => LeafletLayer;\n}\ninterface LeafletModule {\n map: (el: HTMLElement, options?: unknown) => LeafletMapInstance;\n tileLayer: (url: string, options?: unknown) => LeafletLayer;\n polyline: (latlngs: [number, number][], options?: unknown) => LeafletLayer;\n circleMarker: (latlng: [number, number], options?: unknown) => LeafletLayer;\n}\n\nexport interface LeafletTrajectoryProps {\n points: readonly Coordinate[];\n current?: Coordinate | null;\n tileUrl: string;\n tileAttribution?: string;\n strokeColor?: string;\n}\n\n/**\n * Leaflet-backed tile layer for {@link TrajectoryMap}. Loaded lazily and only\n * when a `tileUrl` is provided. Requires `leaflet` to be installed by the app\n * (optional peer dependency) plus its stylesheet imported once:\n * `import \"leaflet/dist/leaflet.css\"`.\n */\nexport function LeafletTrajectory({\n points,\n current,\n tileUrl,\n tileAttribution,\n strokeColor,\n}: LeafletTrajectoryProps) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let map: LeafletMapInstance | null = null;\n let cancelled = false;\n\n const specifier = \"leaflet\";\n import(/* @vite-ignore */ specifier)\n .then((mod: { default?: LeafletModule } & LeafletModule) => {\n if (cancelled || !nodeRef.current) return;\n const L: LeafletModule = mod.default ?? mod;\n\n map = L.map(nodeRef.current, { attributionControl: true });\n L.tileLayer(tileUrl, {\n attribution: tileAttribution ?? \"\",\n maxZoom: 19,\n }).addTo(map);\n\n const latlngs = points.map((p): [number, number] => [p.latitude, p.longitude]);\n if (latlngs.length > 0) {\n L.polyline(latlngs, {\n color: strokeColor ?? \"#2563eb\",\n weight: 4,\n }).addTo(map);\n L.circleMarker(latlngs[0], { radius: 6, color: \"#16a34a\" }).addTo(map);\n }\n\n const marker = current ?? points[points.length - 1];\n if (marker) {\n L.circleMarker([marker.latitude, marker.longitude], {\n radius: 6,\n color: strokeColor ?? \"#2563eb\",\n }).addTo(map);\n }\n\n const box = boundingBox(current ? [...points, current] : [...points]);\n if (box) {\n map.fitBounds(\n [\n [box.minLatitude, box.minLongitude],\n [box.maxLatitude, box.maxLongitude],\n ],\n { padding: [24, 24] },\n );\n } else {\n map.setView([0, 0], 2);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setError(\n \"Leaflet não encontrado. Instale `leaflet` para usar tiles, ou remova `tileUrl` para o plot SVG.\",\n );\n }\n });\n\n return () => {\n cancelled = true;\n map?.remove();\n };\n }, [points, current, tileUrl, tileAttribution, strokeColor]);\n\n if (error) {\n return (\n <div style={{ padding: 16, fontSize: 13, color: \"var(--tempest-danger-fg)\" }}>\n {error}\n </div>\n );\n }\n\n return <div ref={nodeRef} style={{ width: \"100%\", height: \"100%\" }} />;\n}\n"],"mappings":"A,sFAsCA,SAAgBM,EAAkB,CAC9B,SACA,UACA,UACA,kBACA,eACuB,CACvB,IAAMC,GAAA,EAAUP,EAAAA,OAAAA,CAAuB,IAAI,EACrC,CAACQ,EAAOC,IAAA,EAAYR,EAAAA,SAAAA,CAAwB,IAAI,EAsEtD,OApEA,EAAAG,EAAA,UAAA,KAAgB,CACZ,IAAIM,EAAiC,KACjCC,EAAY,GAoDhB,OAjDA,OAA0B,UAAU,CAC/B,KAAM,GAAqD,CACxD,GAAIA,GAAa,CAACJ,EAAQ,QAAS,OACnC,IAAMK,EAAmBC,EAAI,SAAWA,EAExC,EAAMD,EAAE,IAAIL,EAAQ,QAAS,CAAE,mBAAoB,EAAK,CAAC,EACzDK,EAAE,UAAUE,EAAS,CACjB,YAAaC,GAAmB,GAChC,QAAS,EACb,CAAC,CAAC,CAAC,MAAML,CAAG,EAEZ,IAAMM,EAAUC,EAAO,IAAK,GAAwB,CAACC,EAAE,SAAUA,EAAE,SAAS,CAAC,EACzEF,EAAQ,OAAS,IACjBJ,EAAE,SAASI,EAAS,CAChB,MAAOG,GAAe,UACtB,OAAQ,CACZ,CAAC,CAAC,CAAC,MAAMT,CAAG,EACZE,EAAE,aAAaI,EAAQ,GAAI,CAAE,OAAQ,EAAG,MAAO,SAAU,CAAC,CAAC,CAAC,MAAMN,CAAG,GAGzE,IAAMU,EAASC,GAAWJ,EAAOA,EAAO,OAAS,GAC7CG,GACAR,EAAE,aAAa,CAACQ,EAAO,SAAUA,EAAO,SAAS,EAAG,CAChD,OAAQ,EACR,MAAOD,GAAe,SAC1B,CAAC,CAAC,CAAC,MAAMT,CAAG,EAGhB,IAAMY,EAAMpB,EAAAA,YAAYmB,EAAU,CAAC,GAAGJ,EAAQI,CAAO,EAAI,CAAC,GAAGJ,CAAM,CAAC,EAChEK,EACAZ,EAAI,UACA,CACI,CAACY,EAAI,YAAaA,EAAI,YAAY,EAClC,CAACA,EAAI,YAAaA,EAAI,YAAY,CACtC,EACA,CAAE,QAAS,CAAC,GAAI,EAAE,CAAE,CACxB,EAEAZ,EAAI,QAAQ,CAAC,EAAG,CAAC,EAAG,CAAC,CAE7B,CAAC,CAAC,CACD,UAAY,CACJC,GACDF,EACI,iGACJ,CAER,CAAC,MAEQ,CACT,EAAY,GACZC,GAAK,OAAO,CAChB,CACJ,EAAG,CAACO,EAAQI,EAASP,EAASC,EAAiBI,CAAW,CAAC,EAEvDX,GAEI,EAAAH,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,QAAS,GAAI,SAAU,GAAI,MAAO,0BAA2B,EACtE,SAAAG,CACA,CAAA,GAIN,EAAAH,EAAA,IAAA,CAAC,MAAD,CAAK,IAAKE,EAAS,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAO,CAAI,CAAA,CACzE,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"leaflet-map.js","names":[],"sources":["../../src/geo/leaflet-map.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { boundingBox } from \"./bounds\";\nimport type { Coordinate } from \"./types\";\n\n/**\n * Minimal structural typing for the slice of the Leaflet API this layer uses.\n * Declared locally so the SDK type-checks and builds even when `leaflet` (an\n * optional peer) is not installed — the real module is loaded at runtime.\n */\ninterface LeafletMapInstance {\n setView: (center: [number, number], zoom: number) => LeafletMapInstance;\n fitBounds: (bounds: [[number, number], [number, number]], options?: unknown) => void;\n remove: () => void;\n}\ninterface LeafletLayer {\n addTo: (map: LeafletMapInstance) => LeafletLayer;\n}\ninterface LeafletModule {\n map: (el: HTMLElement, options?: unknown) => LeafletMapInstance;\n tileLayer: (url: string, options?: unknown) => LeafletLayer;\n polyline: (latlngs: [number, number][], options?: unknown) => LeafletLayer;\n circleMarker: (latlng: [number, number], options?: unknown) => LeafletLayer;\n}\n\nexport interface LeafletTrajectoryProps {\n points: readonly Coordinate[];\n current?: Coordinate | null;\n tileUrl: string;\n tileAttribution?: string;\n strokeColor?: string;\n}\n\n/**\n * Leaflet-backed tile layer for {@link TrajectoryMap}. Loaded lazily and only\n * when a `tileUrl` is provided. Requires `leaflet` to be installed by the app\n * (optional peer dependency) plus its stylesheet imported once:\n * `import \"leaflet/dist/leaflet.css\"`.\n */\nexport function LeafletTrajectory({\n points,\n current,\n tileUrl,\n tileAttribution,\n strokeColor,\n}: LeafletTrajectoryProps) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let map: LeafletMapInstance | null = null;\n let cancelled = false;\n\n const specifier = \"leaflet\";\n import(/* @vite-ignore */ specifier)\n .then((mod: { default?: LeafletModule } & LeafletModule) => {\n if (cancelled || !nodeRef.current) return;\n const L: LeafletModule = mod.default ?? mod;\n\n map = L.map(nodeRef.current, { attributionControl: true });\n L.tileLayer(tileUrl, {\n attribution: tileAttribution ?? \"\",\n maxZoom: 19,\n }).addTo(map);\n\n const latlngs = points.map((p): [number, number] => [p.latitude, p.longitude]);\n if (latlngs.length > 0) {\n L.polyline(latlngs, {\n color: strokeColor ?? \"#2563eb\",\n weight: 4,\n }).addTo(map);\n L.circleMarker(latlngs[0], { radius: 6, color: \"#16a34a\" }).addTo(map);\n }\n\n const marker = current ?? points[points.length - 1];\n if (marker) {\n L.circleMarker([marker.latitude, marker.longitude], {\n radius: 6,\n color: strokeColor ?? \"#2563eb\",\n }).addTo(map);\n }\n\n const box = boundingBox(current ? [...points, current] : [...points]);\n if (box) {\n map.fitBounds(\n [\n [box.minLatitude, box.minLongitude],\n [box.maxLatitude, box.maxLongitude],\n ],\n { padding: [24, 24] },\n );\n } else {\n map.setView([0, 0], 2);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setError(\n \"Leaflet não encontrado. Instale `leaflet` para usar tiles, ou remova `tileUrl` para o plot SVG.\",\n );\n }\n });\n\n return () => {\n cancelled = true;\n map?.remove();\n };\n }, [points, current, tileUrl, tileAttribution, strokeColor]);\n\n if (error) {\n return (\n <div style={{ padding: 16, fontSize: 13, color: \"var(--tempest-danger-fg)\" }}>\n {error}\n </div>\n );\n }\n\n return <div ref={nodeRef} style={{ width: \"100%\", height: \"100%\" }} />;\n}\n"],"mappings":";;;;AAsCA,SAAgB,EAAkB,EAC9B,WACA,YACA,YACA,oBACA,kBACuB;CACvB,IAAM,IAAU,EAAuB,IAAI,GACrC,CAAC,GAAO,KAAY,EAAwB,IAAI;CAsEtD,OApEA,QAAgB;EACZ,IAAI,IAAiC,MACjC,IAAY;EAoDhB,OAjDA;;GAA0B;CAAU,CAC/B,MAAM,MAAqD;GACxD,IAAI,KAAa,CAAC,EAAQ,SAAS;GACnC,IAAM,IAAmB,EAAI,WAAW;GAGxC,AADA,IAAM,EAAE,IAAI,EAAQ,SAAS,EAAE,oBAAoB,GAAK,CAAC,GACzD,EAAE,UAAU,GAAS;IACjB,aAAa,KAAmB;IAChC,SAAS;GACb,CAAC,CAAC,CAAC,MAAM,CAAG;GAEZ,IAAM,IAAU,EAAO,KAAK,MAAwB,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC;GAC7E,AAAI,EAAQ,SAAS,MACjB,EAAE,SAAS,GAAS;IAChB,OAAO,KAAe;IACtB,QAAQ;GACZ,CAAC,CAAC,CAAC,MAAM,CAAG,GACZ,EAAE,aAAa,EAAQ,IAAI;IAAE,QAAQ;IAAG,OAAO;GAAU,CAAC,CAAC,CAAC,MAAM,CAAG;GAGzE,IAAM,IAAS,KAAW,EAAO,EAAO,SAAS;GACjD,AAAI,KACA,EAAE,aAAa,CAAC,EAAO,UAAU,EAAO,SAAS,GAAG;IAChD,QAAQ;IACR,OAAO,KAAe;GAC1B,CAAC,CAAC,CAAC,MAAM,CAAG;GAGhB,IAAM,IAAM,EAAY,IAAU,CAAC,GAAG,GAAQ,CAAO,IAAI,CAAC,GAAG,CAAM,CAAC;GACpE,AAAI,IACA,EAAI,UACA,CACI,CAAC,EAAI,aAAa,EAAI,YAAY,GAClC,CAAC,EAAI,aAAa,EAAI,YAAY,CACtC,GACA,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CACxB,IAEA,EAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;EAE7B,CAAC,CAAC,CACD,YAAY;GACT,AAAK,KACD,EACI,iGACJ;EAER,CAAC,SAEQ;GAET,AADA,IAAY,IACZ,GAAK,OAAO;EAChB;CACJ,GAAG;EAAC;EAAQ;EAAS;EAAS;EAAiB;CAAW,CAAC,GAEvD,IAEI,kBAAC,OAAD;EAAK,OAAO;GAAE,SAAS;GAAI,UAAU;GAAI,OAAO;EAA2B;EACtE,UAAA;CACA,CAAA,IAIN,kBAAC,OAAD;EAAK,KAAK;EAAS,OAAO;GAAE,OAAO;GAAQ,QAAQ;EAAO;CAAI,CAAA;AACzE"}
1
+ {"version":3,"file":"leaflet-map.js","names":["LeafletTrajectory","nodeRef","useRef","error","setError","useState","useEffect","map","cancelled","L","mod","tileUrl","tileAttribution","latlngs","points","p","strokeColor","marker","current","box","boundingBox"],"sources":["../../src/geo/leaflet-map.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { boundingBox } from \"./bounds\";\nimport type { Coordinate } from \"./types\";\n\n/**\n * Minimal structural typing for the slice of the Leaflet API this layer uses.\n * Declared locally so the SDK type-checks and builds even when `leaflet` (an\n * optional peer) is not installed — the real module is loaded at runtime.\n */\ninterface LeafletMapInstance {\n setView: (center: [number, number], zoom: number) => LeafletMapInstance;\n fitBounds: (bounds: [[number, number], [number, number]], options?: unknown) => void;\n remove: () => void;\n}\ninterface LeafletLayer {\n addTo: (map: LeafletMapInstance) => LeafletLayer;\n}\ninterface LeafletModule {\n map: (el: HTMLElement, options?: unknown) => LeafletMapInstance;\n tileLayer: (url: string, options?: unknown) => LeafletLayer;\n polyline: (latlngs: [number, number][], options?: unknown) => LeafletLayer;\n circleMarker: (latlng: [number, number], options?: unknown) => LeafletLayer;\n}\n\nexport interface LeafletTrajectoryProps {\n points: readonly Coordinate[];\n current?: Coordinate | null;\n tileUrl: string;\n tileAttribution?: string;\n strokeColor?: string;\n}\n\n/**\n * Leaflet-backed tile layer for {@link TrajectoryMap}. Loaded lazily and only\n * when a `tileUrl` is provided. Requires `leaflet` to be installed by the app\n * (optional peer dependency) plus its stylesheet imported once:\n * `import \"leaflet/dist/leaflet.css\"`.\n */\nexport function LeafletTrajectory({\n points,\n current,\n tileUrl,\n tileAttribution,\n strokeColor,\n}: LeafletTrajectoryProps) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let map: LeafletMapInstance | null = null;\n let cancelled = false;\n\n const specifier = \"leaflet\";\n import(/* @vite-ignore */ specifier)\n .then((mod: { default?: LeafletModule } & LeafletModule) => {\n if (cancelled || !nodeRef.current) return;\n const L: LeafletModule = mod.default ?? mod;\n\n map = L.map(nodeRef.current, { attributionControl: true });\n L.tileLayer(tileUrl, {\n attribution: tileAttribution ?? \"\",\n maxZoom: 19,\n }).addTo(map);\n\n const latlngs = points.map((p): [number, number] => [p.latitude, p.longitude]);\n if (latlngs.length > 0) {\n L.polyline(latlngs, {\n color: strokeColor ?? \"#2563eb\",\n weight: 4,\n }).addTo(map);\n L.circleMarker(latlngs[0], { radius: 6, color: \"#16a34a\" }).addTo(map);\n }\n\n const marker = current ?? points[points.length - 1];\n if (marker) {\n L.circleMarker([marker.latitude, marker.longitude], {\n radius: 6,\n color: strokeColor ?? \"#2563eb\",\n }).addTo(map);\n }\n\n const box = boundingBox(current ? [...points, current] : [...points]);\n if (box) {\n map.fitBounds(\n [\n [box.minLatitude, box.minLongitude],\n [box.maxLatitude, box.maxLongitude],\n ],\n { padding: [24, 24] },\n );\n } else {\n map.setView([0, 0], 2);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setError(\n \"Leaflet não encontrado. Instale `leaflet` para usar tiles, ou remova `tileUrl` para o plot SVG.\",\n );\n }\n });\n\n return () => {\n cancelled = true;\n map?.remove();\n };\n }, [points, current, tileUrl, tileAttribution, strokeColor]);\n\n if (error) {\n return (\n <div style={{ padding: 16, fontSize: 13, color: \"var(--tempest-danger-fg)\" }}>\n {error}\n </div>\n );\n }\n\n return <div ref={nodeRef} style={{ width: \"100%\", height: \"100%\" }} />;\n}\n"],"mappings":";;;;AAsCA,SAAgBA,EAAkB,EAC9B,WACA,YACA,YACA,oBACA,kBACuB;CACvB,IAAMC,IAAUC,EAAuB,IAAI,GACrC,CAACC,GAAOC,KAAYC,EAAwB,IAAI;CAsEtD,OApEAC,QAAgB;EACZ,IAAIC,IAAiC,MACjCC,IAAY;EAoDhB,OAjDA;;GAA0B;CAAU,CAC/B,MAAM,MAAqD;GACxD,IAAIA,KAAa,CAACP,EAAQ,SAAS;GACnC,IAAMQ,IAAmBC,EAAI,WAAWA;GAGxC,AADA,IAAMD,EAAE,IAAIR,EAAQ,SAAS,EAAE,oBAAoB,GAAK,CAAC,GACzDQ,EAAE,UAAUE,GAAS;IACjB,aAAaC,KAAmB;IAChC,SAAS;GACb,CAAC,CAAC,CAAC,MAAML,CAAG;GAEZ,IAAMM,IAAUC,EAAO,KAAK,MAAwB,CAACC,EAAE,UAAUA,EAAE,SAAS,CAAC;GAC7E,AAAIF,EAAQ,SAAS,MACjBJ,EAAE,SAASI,GAAS;IAChB,OAAOG,KAAe;IACtB,QAAQ;GACZ,CAAC,CAAC,CAAC,MAAMT,CAAG,GACZE,EAAE,aAAaI,EAAQ,IAAI;IAAE,QAAQ;IAAG,OAAO;GAAU,CAAC,CAAC,CAAC,MAAMN,CAAG;GAGzE,IAAMU,IAASC,KAAWJ,EAAOA,EAAO,SAAS;GACjD,AAAIG,KACAR,EAAE,aAAa,CAACQ,EAAO,UAAUA,EAAO,SAAS,GAAG;IAChD,QAAQ;IACR,OAAOD,KAAe;GAC1B,CAAC,CAAC,CAAC,MAAMT,CAAG;GAGhB,IAAMY,IAAMC,EAAYF,IAAU,CAAC,GAAGJ,GAAQI,CAAO,IAAI,CAAC,GAAGJ,CAAM,CAAC;GACpE,AAAIK,IACAZ,EAAI,UACA,CACI,CAACY,EAAI,aAAaA,EAAI,YAAY,GAClC,CAACA,EAAI,aAAaA,EAAI,YAAY,CACtC,GACA,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CACxB,IAEAZ,EAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;EAE7B,CAAC,CAAC,CACD,YAAY;GACT,AAAKC,KACDJ,EACI,iGACJ;EAER,CAAC,SAEQ;GAET,AADA,IAAY,IACZG,GAAK,OAAO;EAChB;CACJ,GAAG;EAACO;EAAQI;EAASP;EAASC;EAAiBI;CAAW,CAAC,GAEvDb,IAEI,kBAAC,OAAD;EAAK,OAAO;GAAE,SAAS;GAAI,UAAU;GAAI,OAAO;EAA2B;EACtE,UAAAA;CACA,CAAA,IAIN,kBAAC,OAAD;EAAK,KAAKF;EAAS,OAAO;GAAE,OAAO;GAAQ,QAAQ;EAAO;CAAI,CAAA;AACzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"projection.cjs","names":[],"sources":["../../src/geo/projection.ts"],"sourcesContent":["import { clampLatitude } from \"./types\";\nimport type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * A point projected onto the unit Web Mercator plane. Both axes are in `[0, 1]`\n * — `x` grows east, `y` grows south (screen convention).\n */\nexport interface MercatorPoint {\n x: number;\n y: number;\n}\n\n/** A pixel coordinate inside the plotting viewport. */\nexport interface PixelPoint {\n x: number;\n y: number;\n}\n\n/**\n * Web Mercator (EPSG:3857) latitude clamp. Latitudes beyond this diverge to\n * infinity in the projection, so tile maps cap here.\n */\nexport const MERCATOR_MAX_LATITUDE = 85.05112878;\n\n/**\n * Project a geographic coordinate onto the unit Web Mercator plane. This is the\n * same projection tile servers use, so a self-hosted tile layer and the\n * tile-free SVG plot line up pixel-for-pixel.\n *\n * @param coord - Coordinate to project.\n * @returns `{ x, y }` in `[0, 1]`.\n */\nexport function projectMercator(coord: Coordinate): MercatorPoint {\n const lat = Math.max(\n -MERCATOR_MAX_LATITUDE,\n Math.min(MERCATOR_MAX_LATITUDE, clampLatitude(coord.latitude)),\n );\n const latRad = (lat * Math.PI) / 180;\n const x = (coord.longitude + 180) / 360;\n const y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2;\n return { x, y };\n}\n\n/**\n * Inverse of {@link projectMercator}: recover a coordinate from a unit-plane\n * point.\n *\n * @param point - `{ x, y }` in `[0, 1]`.\n * @returns The geographic coordinate.\n */\nexport function unprojectMercator(point: MercatorPoint): Coordinate {\n const longitude = point.x * 360 - 180;\n const n = Math.PI * (1 - 2 * point.y);\n const latitude = (Math.atan(Math.sinh(n)) * 180) / Math.PI;\n return { latitude, longitude };\n}\n\n/** A ready-to-use mapping from coordinates to viewport pixels. */\nexport interface FittedProjection {\n /** Project a coordinate to a pixel inside the viewport. */\n project: (coord: Coordinate) => PixelPoint;\n /** Uniform scale (unit-plane → pixels) actually used, after aspect fit. */\n scale: number;\n /** Viewport width in pixels. */\n width: number;\n /** Viewport height in pixels. */\n height: number;\n}\n\n/** Options for {@link fitProjection}. */\nexport interface FitProjectionOptions {\n /** Inner padding in pixels kept clear on every edge. Default: `16`. */\n padding?: number;\n}\n\n/**\n * Build a projection that fits `bounds` into a `width × height` viewport while\n * preserving aspect ratio (uniform scale, centered). This is what powers the\n * tile-free trajectory plot: project the bounds, scale to the SVG box, keep\n * shapes undistorted.\n *\n * @param bounds - Geographic extent to fit.\n * @param width - Viewport width in pixels.\n * @param height - Viewport height in pixels.\n * @param options - Padding tuning.\n * @returns A {@link FittedProjection} with a `project(coord)` mapper.\n *\n * @tempest-limits param-count — `(bounds, width, height)` is the viewport the caller\n * measured, usually straight out of a `getBoundingClientRect()`, and the fourth\n * argument is already the options object. Public surface via the package root:\n * renaming these into one bag breaks callers and buys a count, not clarity.\n */\nexport function fitProjection(\n bounds: GeoBounds,\n width: number,\n height: number,\n options: FitProjectionOptions = {},\n): FittedProjection {\n const { padding = 16 } = options;\n\n const topLeft = projectMercator({\n latitude: bounds.maxLatitude,\n longitude: bounds.minLongitude,\n });\n const bottomRight = projectMercator({\n latitude: bounds.minLatitude,\n longitude: bounds.maxLongitude,\n });\n\n const spanX = bottomRight.x - topLeft.x || Number.EPSILON;\n const spanY = bottomRight.y - topLeft.y || Number.EPSILON;\n\n const innerWidth = Math.max(1, width - padding * 2);\n const innerHeight = Math.max(1, height - padding * 2);\n\n // Uniform scale keeps the trajectory undistorted; fit the tighter axis.\n const scale = Math.min(innerWidth / spanX, innerHeight / spanY);\n\n // Center the projected content within the padded box.\n const offsetX = padding + (innerWidth - spanX * scale) / 2;\n const offsetY = padding + (innerHeight - spanY * scale) / 2;\n\n const project = (coord: Coordinate): PixelPoint => {\n const projected = projectMercator(coord);\n return {\n x: offsetX + (projected.x - topLeft.x) * scale,\n y: offsetY + (projected.y - topLeft.y) * scale,\n };\n };\n\n return { project, scale, width, height };\n}\n"],"mappings":"+BAsBA,IAAa,EAAwB,YAUrC,SAAgB,EAAgB,EAAkC,CAK9D,IAAM,EAJM,KAAK,IACb,aACA,KAAK,IAAI,EAAuB,EAAA,cAAc,EAAM,QAAQ,CAAC,CAEjD,EAAM,KAAK,GAAM,IAGjC,MAAO,CAAE,GAFE,EAAM,UAAY,KAAO,IAExB,GADD,EAAI,KAAK,IAAI,KAAK,IAAI,CAAM,EAAI,EAAI,KAAK,IAAI,CAAM,CAAC,EAAI,KAAK,IAAM,CAChE,CAClB,CASA,SAAgB,EAAkB,EAAkC,CAChE,IAAM,EAAY,EAAM,EAAI,IAAM,IAC5B,EAAI,KAAK,IAAM,EAAI,EAAI,EAAM,GAEnC,MAAO,CAAE,SADS,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,EAAI,IAAO,KAAK,GACrC,WAAU,CACjC,CAqCA,SAAgB,EACZ,EACA,EACA,EACA,EAAgC,CAAC,EACjB,CAChB,GAAM,CAAE,UAAU,IAAO,EAEnB,EAAU,EAAgB,CAC5B,SAAU,EAAO,YACjB,UAAW,EAAO,YACtB,CAAC,EACK,EAAc,EAAgB,CAChC,SAAU,EAAO,YACjB,UAAW,EAAO,YACtB,CAAC,EAEK,EAAQ,EAAY,EAAI,EAAQ,UAChC,EAAQ,EAAY,EAAI,EAAQ,UAEhC,EAAa,KAAK,IAAI,EAAG,EAAQ,EAAU,CAAC,EAC5C,EAAc,KAAK,IAAI,EAAG,EAAS,EAAU,CAAC,EAG9C,EAAQ,KAAK,IAAI,EAAa,EAAO,EAAc,CAAK,EAGxD,EAAU,GAAW,EAAa,EAAQ,GAAS,EACnD,EAAU,GAAW,EAAc,EAAQ,GAAS,EAU1D,MAAO,CAAE,QARQ,GAAkC,CAC/C,IAAM,EAAY,EAAgB,CAAK,EACvC,MAAO,CACH,EAAG,GAAW,EAAU,EAAI,EAAQ,GAAK,EACzC,EAAG,GAAW,EAAU,EAAI,EAAQ,GAAK,CAC7C,CACJ,EAEkB,QAAO,QAAO,QAAO,CAC3C"}
1
+ {"version":3,"file":"projection.cjs","names":["clampLatitude","require_types","MERCATOR_MAX_LATITUDE","projectMercator","latRad","coord","unprojectMercator","longitude","point","fitProjection","options","topLeft","bounds","bottomRight","spanX","spanY","innerWidth","width","padding","innerHeight","height","scale","offsetX","offsetY","projected"],"sources":["../../src/geo/projection.ts"],"sourcesContent":["import { clampLatitude } from \"./types\";\nimport type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * A point projected onto the unit Web Mercator plane. Both axes are in `[0, 1]`\n * — `x` grows east, `y` grows south (screen convention).\n */\nexport interface MercatorPoint {\n x: number;\n y: number;\n}\n\n/** A pixel coordinate inside the plotting viewport. */\nexport interface PixelPoint {\n x: number;\n y: number;\n}\n\n/**\n * Web Mercator (EPSG:3857) latitude clamp. Latitudes beyond this diverge to\n * infinity in the projection, so tile maps cap here.\n */\nexport const MERCATOR_MAX_LATITUDE = 85.05112878;\n\n/**\n * Project a geographic coordinate onto the unit Web Mercator plane. This is the\n * same projection tile servers use, so a self-hosted tile layer and the\n * tile-free SVG plot line up pixel-for-pixel.\n *\n * @param coord - Coordinate to project.\n * @returns `{ x, y }` in `[0, 1]`.\n */\nexport function projectMercator(coord: Coordinate): MercatorPoint {\n const lat = Math.max(\n -MERCATOR_MAX_LATITUDE,\n Math.min(MERCATOR_MAX_LATITUDE, clampLatitude(coord.latitude)),\n );\n const latRad = (lat * Math.PI) / 180;\n const x = (coord.longitude + 180) / 360;\n const y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2;\n return { x, y };\n}\n\n/**\n * Inverse of {@link projectMercator}: recover a coordinate from a unit-plane\n * point.\n *\n * @param point - `{ x, y }` in `[0, 1]`.\n * @returns The geographic coordinate.\n */\nexport function unprojectMercator(point: MercatorPoint): Coordinate {\n const longitude = point.x * 360 - 180;\n const n = Math.PI * (1 - 2 * point.y);\n const latitude = (Math.atan(Math.sinh(n)) * 180) / Math.PI;\n return { latitude, longitude };\n}\n\n/** A ready-to-use mapping from coordinates to viewport pixels. */\nexport interface FittedProjection {\n /** Project a coordinate to a pixel inside the viewport. */\n project: (coord: Coordinate) => PixelPoint;\n /** Uniform scale (unit-plane → pixels) actually used, after aspect fit. */\n scale: number;\n /** Viewport width in pixels. */\n width: number;\n /** Viewport height in pixels. */\n height: number;\n}\n\n/** Options for {@link fitProjection}. */\nexport interface FitProjectionOptions {\n /** Inner padding in pixels kept clear on every edge. Default: `16`. */\n padding?: number;\n}\n\n/**\n * Build a projection that fits `bounds` into a `width × height` viewport while\n * preserving aspect ratio (uniform scale, centered). This is what powers the\n * tile-free trajectory plot: project the bounds, scale to the SVG box, keep\n * shapes undistorted.\n *\n * @param bounds - Geographic extent to fit.\n * @param width - Viewport width in pixels.\n * @param height - Viewport height in pixels.\n * @param options - Padding tuning.\n * @returns A {@link FittedProjection} with a `project(coord)` mapper.\n *\n * @tempest-limits param-count — `(bounds, width, height)` is the viewport the caller\n * measured, usually straight out of a `getBoundingClientRect()`, and the fourth\n * argument is already the options object. Public surface via the package root:\n * renaming these into one bag breaks callers and buys a count, not clarity.\n */\nexport function fitProjection(\n bounds: GeoBounds,\n width: number,\n height: number,\n options: FitProjectionOptions = {},\n): FittedProjection {\n const { padding = 16 } = options;\n\n const topLeft = projectMercator({\n latitude: bounds.maxLatitude,\n longitude: bounds.minLongitude,\n });\n const bottomRight = projectMercator({\n latitude: bounds.minLatitude,\n longitude: bounds.maxLongitude,\n });\n\n const spanX = bottomRight.x - topLeft.x || Number.EPSILON;\n const spanY = bottomRight.y - topLeft.y || Number.EPSILON;\n\n const innerWidth = Math.max(1, width - padding * 2);\n const innerHeight = Math.max(1, height - padding * 2);\n\n // Uniform scale keeps the trajectory undistorted; fit the tighter axis.\n const scale = Math.min(innerWidth / spanX, innerHeight / spanY);\n\n // Center the projected content within the padded box.\n const offsetX = padding + (innerWidth - spanX * scale) / 2;\n const offsetY = padding + (innerHeight - spanY * scale) / 2;\n\n const project = (coord: Coordinate): PixelPoint => {\n const projected = projectMercator(coord);\n return {\n x: offsetX + (projected.x - topLeft.x) * scale,\n y: offsetY + (projected.y - topLeft.y) * scale,\n };\n };\n\n return { project, scale, width, height };\n}\n"],"mappings":"A,+BAsBA,IAAaE,EAAwB,YAUrC,SAAgBC,EAAgB,EAAkC,CAK9D,IAAMC,EAJM,KAAK,IACb,aACA,KAAK,IAAIF,EAAuBF,EAAAA,cAAcK,EAAM,QAAQ,CAAC,CAEjD,EAAM,KAAK,GAAM,IAGjC,MAAO,CAAE,GAFEA,EAAM,UAAY,KAAO,IAExB,GADD,EAAI,KAAK,IAAI,KAAK,IAAID,CAAM,EAAI,EAAI,KAAK,IAAIA,CAAM,CAAC,EAAI,KAAK,IAAM,CAChE,CAClB,CASA,SAAgBE,EAAkB,EAAkC,CAChE,IAAMC,EAAYC,EAAM,EAAI,IAAM,IAC5B,EAAI,KAAK,IAAM,EAAI,EAAIA,EAAM,GAEnC,MAAO,CAAE,SADS,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,EAAI,IAAO,KAAK,GACrC,WAAU,CACjC,CAqCA,SAAgBC,EACZ,EACA,EACA,EACA,EAAgC,CAAC,EACjB,CAChB,GAAM,CAAE,UAAU,IAAOC,EAEnBC,EAAUR,EAAgB,CAC5B,SAAUS,EAAO,YACjB,UAAWA,EAAO,YACtB,CAAC,EACKC,EAAcV,EAAgB,CAChC,SAAUS,EAAO,YACjB,UAAWA,EAAO,YACtB,CAAC,EAEKE,EAAQD,EAAY,EAAIF,EAAQ,UAChCI,EAAQF,EAAY,EAAIF,EAAQ,UAEhCK,EAAa,KAAK,IAAI,EAAGC,EAAQC,EAAU,CAAC,EAC5CC,EAAc,KAAK,IAAI,EAAGC,EAASF,EAAU,CAAC,EAG9CG,EAAQ,KAAK,IAAIL,EAAaF,EAAOK,EAAcJ,CAAK,EAGxDO,EAAUJ,GAAWF,EAAaF,EAAQO,GAAS,EACnDE,EAAUL,GAAWC,EAAcJ,EAAQM,GAAS,EAU1D,MAAO,CAAE,QARQ,GAAkC,CAC/C,IAAMG,EAAYrB,EAAgBE,CAAK,EACvC,MAAO,CACH,EAAGiB,GAAWE,EAAU,EAAIb,EAAQ,GAAKU,EACzC,EAAGE,GAAWC,EAAU,EAAIb,EAAQ,GAAKU,CAC7C,CACJ,EAEkB,QAAO,QAAO,QAAO,CAC3C,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","names":[],"sources":["../../src/geo/projection.ts"],"sourcesContent":["import { clampLatitude } from \"./types\";\nimport type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * A point projected onto the unit Web Mercator plane. Both axes are in `[0, 1]`\n * — `x` grows east, `y` grows south (screen convention).\n */\nexport interface MercatorPoint {\n x: number;\n y: number;\n}\n\n/** A pixel coordinate inside the plotting viewport. */\nexport interface PixelPoint {\n x: number;\n y: number;\n}\n\n/**\n * Web Mercator (EPSG:3857) latitude clamp. Latitudes beyond this diverge to\n * infinity in the projection, so tile maps cap here.\n */\nexport const MERCATOR_MAX_LATITUDE = 85.05112878;\n\n/**\n * Project a geographic coordinate onto the unit Web Mercator plane. This is the\n * same projection tile servers use, so a self-hosted tile layer and the\n * tile-free SVG plot line up pixel-for-pixel.\n *\n * @param coord - Coordinate to project.\n * @returns `{ x, y }` in `[0, 1]`.\n */\nexport function projectMercator(coord: Coordinate): MercatorPoint {\n const lat = Math.max(\n -MERCATOR_MAX_LATITUDE,\n Math.min(MERCATOR_MAX_LATITUDE, clampLatitude(coord.latitude)),\n );\n const latRad = (lat * Math.PI) / 180;\n const x = (coord.longitude + 180) / 360;\n const y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2;\n return { x, y };\n}\n\n/**\n * Inverse of {@link projectMercator}: recover a coordinate from a unit-plane\n * point.\n *\n * @param point - `{ x, y }` in `[0, 1]`.\n * @returns The geographic coordinate.\n */\nexport function unprojectMercator(point: MercatorPoint): Coordinate {\n const longitude = point.x * 360 - 180;\n const n = Math.PI * (1 - 2 * point.y);\n const latitude = (Math.atan(Math.sinh(n)) * 180) / Math.PI;\n return { latitude, longitude };\n}\n\n/** A ready-to-use mapping from coordinates to viewport pixels. */\nexport interface FittedProjection {\n /** Project a coordinate to a pixel inside the viewport. */\n project: (coord: Coordinate) => PixelPoint;\n /** Uniform scale (unit-plane → pixels) actually used, after aspect fit. */\n scale: number;\n /** Viewport width in pixels. */\n width: number;\n /** Viewport height in pixels. */\n height: number;\n}\n\n/** Options for {@link fitProjection}. */\nexport interface FitProjectionOptions {\n /** Inner padding in pixels kept clear on every edge. Default: `16`. */\n padding?: number;\n}\n\n/**\n * Build a projection that fits `bounds` into a `width × height` viewport while\n * preserving aspect ratio (uniform scale, centered). This is what powers the\n * tile-free trajectory plot: project the bounds, scale to the SVG box, keep\n * shapes undistorted.\n *\n * @param bounds - Geographic extent to fit.\n * @param width - Viewport width in pixels.\n * @param height - Viewport height in pixels.\n * @param options - Padding tuning.\n * @returns A {@link FittedProjection} with a `project(coord)` mapper.\n *\n * @tempest-limits param-count — `(bounds, width, height)` is the viewport the caller\n * measured, usually straight out of a `getBoundingClientRect()`, and the fourth\n * argument is already the options object. Public surface via the package root:\n * renaming these into one bag breaks callers and buys a count, not clarity.\n */\nexport function fitProjection(\n bounds: GeoBounds,\n width: number,\n height: number,\n options: FitProjectionOptions = {},\n): FittedProjection {\n const { padding = 16 } = options;\n\n const topLeft = projectMercator({\n latitude: bounds.maxLatitude,\n longitude: bounds.minLongitude,\n });\n const bottomRight = projectMercator({\n latitude: bounds.minLatitude,\n longitude: bounds.maxLongitude,\n });\n\n const spanX = bottomRight.x - topLeft.x || Number.EPSILON;\n const spanY = bottomRight.y - topLeft.y || Number.EPSILON;\n\n const innerWidth = Math.max(1, width - padding * 2);\n const innerHeight = Math.max(1, height - padding * 2);\n\n // Uniform scale keeps the trajectory undistorted; fit the tighter axis.\n const scale = Math.min(innerWidth / spanX, innerHeight / spanY);\n\n // Center the projected content within the padded box.\n const offsetX = padding + (innerWidth - spanX * scale) / 2;\n const offsetY = padding + (innerHeight - spanY * scale) / 2;\n\n const project = (coord: Coordinate): PixelPoint => {\n const projected = projectMercator(coord);\n return {\n x: offsetX + (projected.x - topLeft.x) * scale,\n y: offsetY + (projected.y - topLeft.y) * scale,\n };\n };\n\n return { project, scale, width, height };\n}\n"],"mappings":";;AAsBA,IAAa,IAAwB;AAUrC,SAAgB,EAAgB,GAAkC;CAK9D,IAAM,IAJM,KAAK,IACb,cACA,KAAK,IAAI,GAAuB,EAAc,EAAM,QAAQ,CAAC,CAEjD,IAAM,KAAK,KAAM;CAGjC,OAAO;EAAE,IAFE,EAAM,YAAY,OAAO;EAExB,IADD,IAAI,KAAK,IAAI,KAAK,IAAI,CAAM,IAAI,IAAI,KAAK,IAAI,CAAM,CAAC,IAAI,KAAK,MAAM;CAChE;AAClB;AASA,SAAgB,EAAkB,GAAkC;CAChE,IAAM,IAAY,EAAM,IAAI,MAAM,KAC5B,IAAI,KAAK,MAAM,IAAI,IAAI,EAAM;CAEnC,OAAO;EAAE,UADS,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,IAAI,MAAO,KAAK;EACrC;CAAU;AACjC;AAqCA,SAAgB,EACZ,GACA,GACA,GACA,IAAgC,CAAC,GACjB;CAChB,IAAM,EAAE,aAAU,OAAO,GAEnB,IAAU,EAAgB;EAC5B,UAAU,EAAO;EACjB,WAAW,EAAO;CACtB,CAAC,GACK,IAAc,EAAgB;EAChC,UAAU,EAAO;EACjB,WAAW,EAAO;CACtB,CAAC,GAEK,IAAQ,EAAY,IAAI,EAAQ,eAChC,IAAQ,EAAY,IAAI,EAAQ,eAEhC,IAAa,KAAK,IAAI,GAAG,IAAQ,IAAU,CAAC,GAC5C,IAAc,KAAK,IAAI,GAAG,IAAS,IAAU,CAAC,GAG9C,IAAQ,KAAK,IAAI,IAAa,GAAO,IAAc,CAAK,GAGxD,IAAU,KAAW,IAAa,IAAQ,KAAS,GACnD,IAAU,KAAW,IAAc,IAAQ,KAAS;CAU1D,OAAO;EAAE,UARQ,MAAkC;GAC/C,IAAM,IAAY,EAAgB,CAAK;GACvC,OAAO;IACH,GAAG,KAAW,EAAU,IAAI,EAAQ,KAAK;IACzC,GAAG,KAAW,EAAU,IAAI,EAAQ,KAAK;GAC7C;EACJ;EAEkB;EAAO;EAAO;CAAO;AAC3C"}
1
+ {"version":3,"file":"projection.js","names":["MERCATOR_MAX_LATITUDE","projectMercator","latRad","clampLatitude","coord","unprojectMercator","longitude","point","fitProjection","options","topLeft","bounds","bottomRight","spanX","spanY","innerWidth","width","padding","innerHeight","height","scale","offsetX","offsetY","projected"],"sources":["../../src/geo/projection.ts"],"sourcesContent":["import { clampLatitude } from \"./types\";\nimport type { Coordinate, GeoBounds } from \"./types\";\n\n/**\n * A point projected onto the unit Web Mercator plane. Both axes are in `[0, 1]`\n * — `x` grows east, `y` grows south (screen convention).\n */\nexport interface MercatorPoint {\n x: number;\n y: number;\n}\n\n/** A pixel coordinate inside the plotting viewport. */\nexport interface PixelPoint {\n x: number;\n y: number;\n}\n\n/**\n * Web Mercator (EPSG:3857) latitude clamp. Latitudes beyond this diverge to\n * infinity in the projection, so tile maps cap here.\n */\nexport const MERCATOR_MAX_LATITUDE = 85.05112878;\n\n/**\n * Project a geographic coordinate onto the unit Web Mercator plane. This is the\n * same projection tile servers use, so a self-hosted tile layer and the\n * tile-free SVG plot line up pixel-for-pixel.\n *\n * @param coord - Coordinate to project.\n * @returns `{ x, y }` in `[0, 1]`.\n */\nexport function projectMercator(coord: Coordinate): MercatorPoint {\n const lat = Math.max(\n -MERCATOR_MAX_LATITUDE,\n Math.min(MERCATOR_MAX_LATITUDE, clampLatitude(coord.latitude)),\n );\n const latRad = (lat * Math.PI) / 180;\n const x = (coord.longitude + 180) / 360;\n const y = (1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2;\n return { x, y };\n}\n\n/**\n * Inverse of {@link projectMercator}: recover a coordinate from a unit-plane\n * point.\n *\n * @param point - `{ x, y }` in `[0, 1]`.\n * @returns The geographic coordinate.\n */\nexport function unprojectMercator(point: MercatorPoint): Coordinate {\n const longitude = point.x * 360 - 180;\n const n = Math.PI * (1 - 2 * point.y);\n const latitude = (Math.atan(Math.sinh(n)) * 180) / Math.PI;\n return { latitude, longitude };\n}\n\n/** A ready-to-use mapping from coordinates to viewport pixels. */\nexport interface FittedProjection {\n /** Project a coordinate to a pixel inside the viewport. */\n project: (coord: Coordinate) => PixelPoint;\n /** Uniform scale (unit-plane → pixels) actually used, after aspect fit. */\n scale: number;\n /** Viewport width in pixels. */\n width: number;\n /** Viewport height in pixels. */\n height: number;\n}\n\n/** Options for {@link fitProjection}. */\nexport interface FitProjectionOptions {\n /** Inner padding in pixels kept clear on every edge. Default: `16`. */\n padding?: number;\n}\n\n/**\n * Build a projection that fits `bounds` into a `width × height` viewport while\n * preserving aspect ratio (uniform scale, centered). This is what powers the\n * tile-free trajectory plot: project the bounds, scale to the SVG box, keep\n * shapes undistorted.\n *\n * @param bounds - Geographic extent to fit.\n * @param width - Viewport width in pixels.\n * @param height - Viewport height in pixels.\n * @param options - Padding tuning.\n * @returns A {@link FittedProjection} with a `project(coord)` mapper.\n *\n * @tempest-limits param-count — `(bounds, width, height)` is the viewport the caller\n * measured, usually straight out of a `getBoundingClientRect()`, and the fourth\n * argument is already the options object. Public surface via the package root:\n * renaming these into one bag breaks callers and buys a count, not clarity.\n */\nexport function fitProjection(\n bounds: GeoBounds,\n width: number,\n height: number,\n options: FitProjectionOptions = {},\n): FittedProjection {\n const { padding = 16 } = options;\n\n const topLeft = projectMercator({\n latitude: bounds.maxLatitude,\n longitude: bounds.minLongitude,\n });\n const bottomRight = projectMercator({\n latitude: bounds.minLatitude,\n longitude: bounds.maxLongitude,\n });\n\n const spanX = bottomRight.x - topLeft.x || Number.EPSILON;\n const spanY = bottomRight.y - topLeft.y || Number.EPSILON;\n\n const innerWidth = Math.max(1, width - padding * 2);\n const innerHeight = Math.max(1, height - padding * 2);\n\n // Uniform scale keeps the trajectory undistorted; fit the tighter axis.\n const scale = Math.min(innerWidth / spanX, innerHeight / spanY);\n\n // Center the projected content within the padded box.\n const offsetX = padding + (innerWidth - spanX * scale) / 2;\n const offsetY = padding + (innerHeight - spanY * scale) / 2;\n\n const project = (coord: Coordinate): PixelPoint => {\n const projected = projectMercator(coord);\n return {\n x: offsetX + (projected.x - topLeft.x) * scale,\n y: offsetY + (projected.y - topLeft.y) * scale,\n };\n };\n\n return { project, scale, width, height };\n}\n"],"mappings":";;AAsBA,IAAaA,IAAwB;AAUrC,SAAgBC,EAAgB,GAAkC;CAK9D,IAAMC,IAJM,KAAK,IACb,cACA,KAAK,IAAIF,GAAuBG,EAAcC,EAAM,QAAQ,CAAC,CAEjD,IAAM,KAAK,KAAM;CAGjC,OAAO;EAAE,IAFEA,EAAM,YAAY,OAAO;EAExB,IADD,IAAI,KAAK,IAAI,KAAK,IAAIF,CAAM,IAAI,IAAI,KAAK,IAAIA,CAAM,CAAC,IAAI,KAAK,MAAM;CAChE;AAClB;AASA,SAAgBG,EAAkB,GAAkC;CAChE,IAAMC,IAAYC,EAAM,IAAI,MAAM,KAC5B,IAAI,KAAK,MAAM,IAAI,IAAIA,EAAM;CAEnC,OAAO;EAAE,UADS,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,IAAI,MAAO,KAAK;EACrC;CAAU;AACjC;AAqCA,SAAgBC,EACZ,GACA,GACA,GACA,IAAgC,CAAC,GACjB;CAChB,IAAM,EAAE,aAAU,OAAOC,GAEnBC,IAAUT,EAAgB;EAC5B,UAAUU,EAAO;EACjB,WAAWA,EAAO;CACtB,CAAC,GACKC,IAAcX,EAAgB;EAChC,UAAUU,EAAO;EACjB,WAAWA,EAAO;CACtB,CAAC,GAEKE,IAAQD,EAAY,IAAIF,EAAQ,eAChCI,IAAQF,EAAY,IAAIF,EAAQ,eAEhCK,IAAa,KAAK,IAAI,GAAGC,IAAQC,IAAU,CAAC,GAC5CC,IAAc,KAAK,IAAI,GAAGC,IAASF,IAAU,CAAC,GAG9CG,IAAQ,KAAK,IAAIL,IAAaF,GAAOK,IAAcJ,CAAK,GAGxDO,IAAUJ,KAAWF,IAAaF,IAAQO,KAAS,GACnDE,IAAUL,KAAWC,IAAcJ,IAAQM,KAAS;CAU1D,OAAO;EAAE,UARQ,MAAkC;GAC/C,IAAMG,IAAYtB,EAAgBG,CAAK;GACvC,OAAO;IACH,GAAGiB,KAAWE,EAAU,IAAIb,EAAQ,KAAKU;IACzC,GAAGE,KAAWC,EAAU,IAAIb,EAAQ,KAAKU;GAC7C;EACJ;EAEkB;EAAO;EAAO;CAAO;AAC3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"routing.cjs","names":[],"sources":["../../src/geo/routing.ts"],"sourcesContent":["import { durationFactor } from \"./estimate\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Pluggable routing backend. A backend turns two coordinates into a\n * {@link TravelEstimate}. Mirrors the `RoutingBackend` protocol from\n * `tempest-fastapi-sdk` so client and server share the same contract.\n *\n * Implement this to route against your own self-hosted engine (OSRM, Valhalla,\n * GraphHopper). The offline {@link estimateTravel} heuristic satisfies the same\n * shape without any network.\n */\nexport interface RoutingBackend {\n route: (\n origin: Coordinate,\n destination: Coordinate,\n options?: { mode?: TravelMode },\n ) => Promise<TravelEstimate>;\n}\n\n/** Options for {@link createOSRMBackend}. */\nexport interface OSRMBackendOptions {\n /**\n * Base URL of an **OSRM** HTTP server. There is no default on purpose — this\n * SDK ships no external endpoint. Point it at a routing engine **you host**.\n */\n baseUrl: string;\n /** `fetch` implementation. Default: the global `fetch`. */\n fetch?: typeof globalThis.fetch;\n /** Per-mode duration multipliers applied over the car profile. */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\ninterface OSRMRoute {\n distance: number;\n duration: number;\n}\n\ninterface OSRMResponse {\n code?: string;\n routes?: OSRMRoute[];\n}\n\n/**\n * Build a {@link RoutingBackend} backed by an OSRM server **you host**. OSRM\n * only serves a driving profile, so motorcycle/bus durations are derived by\n * scaling the car duration through {@link durationFactor} — same approach as\n * the FastAPI SDK's `OSRMBackend`.\n *\n * !!! warning\n * This makes a network request to `baseUrl`. It is opt-in: nothing in the\n * SDK calls it unless you construct it and pass your own server URL. For a\n * zero-network estimate, use {@link estimateTravel} instead.\n *\n * @param options - Server URL, optional `fetch`, per-mode factors.\n * @returns A backend whose `route()` queries OSRM.\n *\n * @example\n * const backend = createOSRMBackend({ baseUrl: \"https://osrm.internal\" });\n * const estimate = await backend.route(origin, destination, { mode: \"car\" });\n */\nexport function createOSRMBackend(options: OSRMBackendOptions): RoutingBackend {\n const { baseUrl, fetch = globalThis.fetch, modeDurationFactors } = options;\n const trimmedBaseUrl = baseUrl.replace(/\\/+$/, \"\");\n\n return {\n async route(origin, destination, routeOptions = {}): Promise<TravelEstimate> {\n const mode = routeOptions.mode ?? \"car\";\n const coords = `${origin.longitude},${origin.latitude};${destination.longitude},${destination.latitude}`;\n const url = `${trimmedBaseUrl}/route/v1/driving/${coords}?overview=false`;\n\n let payload: OSRMResponse;\n try {\n const response = await fetch(url);\n payload = (await response.json()) as OSRMResponse;\n } catch (cause) {\n throw new Error(`OSRM request failed: ${String(cause)}`, { cause });\n }\n\n const route = payload.routes?.[0];\n if (payload.code !== \"Ok\" || !route) {\n throw new Error(`OSRM returned no route (code: ${payload.code ?? \"unknown\"})`);\n }\n\n const distanceKm = route.distance / 1000.0;\n const carMinutes = route.duration / 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"osrm\",\n };\n },\n };\n}\n"],"mappings":"kCA6DA,SAAgB,EAAkB,EAA6C,CAC3E,GAAM,CAAE,UAAS,QAAQ,WAAW,MAAO,uBAAwB,EAC7D,EAAiB,EAAQ,QAAQ,OAAQ,EAAE,EAEjD,MAAO,CACH,MAAM,MAAM,EAAQ,EAAa,EAAe,CAAC,EAA4B,CACzE,IAAM,EAAO,EAAa,MAAQ,MAC5B,EAAS,GAAG,EAAO,UAAU,GAAG,EAAO,SAAS,GAAG,EAAY,UAAU,GAAG,EAAY,WACxF,EAAM,GAAG,EAAe,oBAAoB,EAAO,iBAErD,EACJ,GAAI,CAEA,EAAW,MAAM,MADM,EAAM,CAAG,EAAA,CACN,KAAK,CACnC,OAAS,EAAO,CACZ,MAAU,MAAM,wBAAwB,OAAO,CAAK,IAAK,CAAE,OAAM,CAAC,CACtE,CAEA,IAAM,EAAQ,EAAQ,SAAS,GAC/B,GAAI,EAAQ,OAAS,MAAQ,CAAC,EAC1B,MAAU,MAAM,iCAAiC,EAAQ,MAAQ,UAAU,EAAE,EAOjF,MAAO,CACH,OACA,YANe,EAAM,SAAW,IAOhC,iBANe,EAAM,SAAW,GACC,EAAA,eAAe,EAAM,CAAmB,EAMzE,OAAQ,MACZ,CACJ,CACJ,CACJ"}
1
+ {"version":3,"file":"routing.cjs","names":["durationFactor","require_estimate","createOSRMBackend","options","trimmedBaseUrl","baseUrl","mode","routeOptions","coords","origin","destination","url","payload","fetch","cause","route","modeDurationFactors"],"sources":["../../src/geo/routing.ts"],"sourcesContent":["import { durationFactor } from \"./estimate\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Pluggable routing backend. A backend turns two coordinates into a\n * {@link TravelEstimate}. Mirrors the `RoutingBackend` protocol from\n * `tempest-fastapi-sdk` so client and server share the same contract.\n *\n * Implement this to route against your own self-hosted engine (OSRM, Valhalla,\n * GraphHopper). The offline {@link estimateTravel} heuristic satisfies the same\n * shape without any network.\n */\nexport interface RoutingBackend {\n route: (\n origin: Coordinate,\n destination: Coordinate,\n options?: { mode?: TravelMode },\n ) => Promise<TravelEstimate>;\n}\n\n/** Options for {@link createOSRMBackend}. */\nexport interface OSRMBackendOptions {\n /**\n * Base URL of an **OSRM** HTTP server. There is no default on purpose — this\n * SDK ships no external endpoint. Point it at a routing engine **you host**.\n */\n baseUrl: string;\n /** `fetch` implementation. Default: the global `fetch`. */\n fetch?: typeof globalThis.fetch;\n /** Per-mode duration multipliers applied over the car profile. */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\ninterface OSRMRoute {\n distance: number;\n duration: number;\n}\n\ninterface OSRMResponse {\n code?: string;\n routes?: OSRMRoute[];\n}\n\n/**\n * Build a {@link RoutingBackend} backed by an OSRM server **you host**. OSRM\n * only serves a driving profile, so motorcycle/bus durations are derived by\n * scaling the car duration through {@link durationFactor} — same approach as\n * the FastAPI SDK's `OSRMBackend`.\n *\n * !!! warning\n * This makes a network request to `baseUrl`. It is opt-in: nothing in the\n * SDK calls it unless you construct it and pass your own server URL. For a\n * zero-network estimate, use {@link estimateTravel} instead.\n *\n * @param options - Server URL, optional `fetch`, per-mode factors.\n * @returns A backend whose `route()` queries OSRM.\n *\n * @example\n * const backend = createOSRMBackend({ baseUrl: \"https://osrm.internal\" });\n * const estimate = await backend.route(origin, destination, { mode: \"car\" });\n */\nexport function createOSRMBackend(options: OSRMBackendOptions): RoutingBackend {\n const { baseUrl, fetch = globalThis.fetch, modeDurationFactors } = options;\n const trimmedBaseUrl = baseUrl.replace(/\\/+$/, \"\");\n\n return {\n async route(origin, destination, routeOptions = {}): Promise<TravelEstimate> {\n const mode = routeOptions.mode ?? \"car\";\n const coords = `${origin.longitude},${origin.latitude};${destination.longitude},${destination.latitude}`;\n const url = `${trimmedBaseUrl}/route/v1/driving/${coords}?overview=false`;\n\n let payload: OSRMResponse;\n try {\n const response = await fetch(url);\n payload = (await response.json()) as OSRMResponse;\n } catch (cause) {\n throw new Error(`OSRM request failed: ${String(cause)}`, { cause });\n }\n\n const route = payload.routes?.[0];\n if (payload.code !== \"Ok\" || !route) {\n throw new Error(`OSRM returned no route (code: ${payload.code ?? \"unknown\"})`);\n }\n\n const distanceKm = route.distance / 1000.0;\n const carMinutes = route.duration / 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"osrm\",\n };\n },\n };\n}\n"],"mappings":"A,kCA6DA,SAAgBE,EAAkB,EAA6C,CAC3E,GAAM,CAAE,UAAS,QAAQ,WAAW,MAAO,uBAAwBC,EAC7DC,EAAiBC,EAAQ,QAAQ,OAAQ,EAAE,EAEjD,MAAO,CACH,MAAM,MAAM,EAAQ,EAAa,EAAe,CAAC,EAA4B,CACzE,IAAMC,EAAOC,EAAa,MAAQ,MAC5BC,EAAS,GAAGC,EAAO,UAAU,GAAGA,EAAO,SAAS,GAAGC,EAAY,UAAU,GAAGA,EAAY,WACxFC,EAAM,GAAGP,EAAe,oBAAoBI,EAAO,iBAErDI,EACJ,GAAI,CAEA,EAAW,MAAM,MADMC,EAAMF,CAAG,EAAA,CACN,KAAK,CACnC,OAASG,EAAO,CACZ,MAAU,MAAM,wBAAwB,OAAOA,CAAK,IAAK,CAAE,OAAM,CAAC,CACtE,CAEA,IAAMC,EAAQH,EAAQ,SAAS,GAC/B,GAAIA,EAAQ,OAAS,MAAQ,CAACG,EAC1B,MAAU,MAAM,iCAAiCH,EAAQ,MAAQ,UAAU,EAAE,EAOjF,MAAO,CACH,OACA,YANeG,EAAM,SAAW,IAOhC,iBANeA,EAAM,SAAW,GACCf,EAAAA,eAAeM,EAAMU,CAAmB,EAMzE,OAAQ,MACZ,CACJ,CACJ,CACJ,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"routing.js","names":[],"sources":["../../src/geo/routing.ts"],"sourcesContent":["import { durationFactor } from \"./estimate\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Pluggable routing backend. A backend turns two coordinates into a\n * {@link TravelEstimate}. Mirrors the `RoutingBackend` protocol from\n * `tempest-fastapi-sdk` so client and server share the same contract.\n *\n * Implement this to route against your own self-hosted engine (OSRM, Valhalla,\n * GraphHopper). The offline {@link estimateTravel} heuristic satisfies the same\n * shape without any network.\n */\nexport interface RoutingBackend {\n route: (\n origin: Coordinate,\n destination: Coordinate,\n options?: { mode?: TravelMode },\n ) => Promise<TravelEstimate>;\n}\n\n/** Options for {@link createOSRMBackend}. */\nexport interface OSRMBackendOptions {\n /**\n * Base URL of an **OSRM** HTTP server. There is no default on purpose — this\n * SDK ships no external endpoint. Point it at a routing engine **you host**.\n */\n baseUrl: string;\n /** `fetch` implementation. Default: the global `fetch`. */\n fetch?: typeof globalThis.fetch;\n /** Per-mode duration multipliers applied over the car profile. */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\ninterface OSRMRoute {\n distance: number;\n duration: number;\n}\n\ninterface OSRMResponse {\n code?: string;\n routes?: OSRMRoute[];\n}\n\n/**\n * Build a {@link RoutingBackend} backed by an OSRM server **you host**. OSRM\n * only serves a driving profile, so motorcycle/bus durations are derived by\n * scaling the car duration through {@link durationFactor} — same approach as\n * the FastAPI SDK's `OSRMBackend`.\n *\n * !!! warning\n * This makes a network request to `baseUrl`. It is opt-in: nothing in the\n * SDK calls it unless you construct it and pass your own server URL. For a\n * zero-network estimate, use {@link estimateTravel} instead.\n *\n * @param options - Server URL, optional `fetch`, per-mode factors.\n * @returns A backend whose `route()` queries OSRM.\n *\n * @example\n * const backend = createOSRMBackend({ baseUrl: \"https://osrm.internal\" });\n * const estimate = await backend.route(origin, destination, { mode: \"car\" });\n */\nexport function createOSRMBackend(options: OSRMBackendOptions): RoutingBackend {\n const { baseUrl, fetch = globalThis.fetch, modeDurationFactors } = options;\n const trimmedBaseUrl = baseUrl.replace(/\\/+$/, \"\");\n\n return {\n async route(origin, destination, routeOptions = {}): Promise<TravelEstimate> {\n const mode = routeOptions.mode ?? \"car\";\n const coords = `${origin.longitude},${origin.latitude};${destination.longitude},${destination.latitude}`;\n const url = `${trimmedBaseUrl}/route/v1/driving/${coords}?overview=false`;\n\n let payload: OSRMResponse;\n try {\n const response = await fetch(url);\n payload = (await response.json()) as OSRMResponse;\n } catch (cause) {\n throw new Error(`OSRM request failed: ${String(cause)}`, { cause });\n }\n\n const route = payload.routes?.[0];\n if (payload.code !== \"Ok\" || !route) {\n throw new Error(`OSRM returned no route (code: ${payload.code ?? \"unknown\"})`);\n }\n\n const distanceKm = route.distance / 1000.0;\n const carMinutes = route.duration / 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"osrm\",\n };\n },\n };\n}\n"],"mappings":";;AA6DA,SAAgB,EAAkB,GAA6C;CAC3E,IAAM,EAAE,YAAS,WAAQ,WAAW,OAAO,2BAAwB,GAC7D,IAAiB,EAAQ,QAAQ,QAAQ,EAAE;CAEjD,OAAO,EACH,MAAM,MAAM,GAAQ,GAAa,IAAe,CAAC,GAA4B;EACzE,IAAM,IAAO,EAAa,QAAQ,OAC5B,IAAS,GAAG,EAAO,UAAU,GAAG,EAAO,SAAS,GAAG,EAAY,UAAU,GAAG,EAAY,YACxF,IAAM,GAAG,EAAe,oBAAoB,EAAO,kBAErD;EACJ,IAAI;GAEA,IAAW,OAAM,MADM,EAAM,CAAG,EAAA,CACN,KAAK;EACnC,SAAS,GAAO;GACZ,MAAU,MAAM,wBAAwB,OAAO,CAAK,KAAK,EAAE,SAAM,CAAC;EACtE;EAEA,IAAM,IAAQ,EAAQ,SAAS;EAC/B,IAAI,EAAQ,SAAS,QAAQ,CAAC,GAC1B,MAAU,MAAM,iCAAiC,EAAQ,QAAQ,UAAU,EAAE;EAOjF,OAAO;GACH;GACA,aANe,EAAM,WAAW;GAOhC,kBANe,EAAM,WAAW,KACC,EAAe,GAAM,CAAmB;GAMzE,QAAQ;EACZ;CACJ,EACJ;AACJ"}
1
+ {"version":3,"file":"routing.js","names":["createOSRMBackend","options","trimmedBaseUrl","baseUrl","mode","routeOptions","coords","origin","destination","url","payload","fetch","cause","route","durationFactor","modeDurationFactors"],"sources":["../../src/geo/routing.ts"],"sourcesContent":["import { durationFactor } from \"./estimate\";\nimport type { Coordinate, TravelEstimate, TravelMode } from \"./types\";\n\n/**\n * Pluggable routing backend. A backend turns two coordinates into a\n * {@link TravelEstimate}. Mirrors the `RoutingBackend` protocol from\n * `tempest-fastapi-sdk` so client and server share the same contract.\n *\n * Implement this to route against your own self-hosted engine (OSRM, Valhalla,\n * GraphHopper). The offline {@link estimateTravel} heuristic satisfies the same\n * shape without any network.\n */\nexport interface RoutingBackend {\n route: (\n origin: Coordinate,\n destination: Coordinate,\n options?: { mode?: TravelMode },\n ) => Promise<TravelEstimate>;\n}\n\n/** Options for {@link createOSRMBackend}. */\nexport interface OSRMBackendOptions {\n /**\n * Base URL of an **OSRM** HTTP server. There is no default on purpose — this\n * SDK ships no external endpoint. Point it at a routing engine **you host**.\n */\n baseUrl: string;\n /** `fetch` implementation. Default: the global `fetch`. */\n fetch?: typeof globalThis.fetch;\n /** Per-mode duration multipliers applied over the car profile. */\n modeDurationFactors?: Partial<Record<TravelMode, number>>;\n}\n\ninterface OSRMRoute {\n distance: number;\n duration: number;\n}\n\ninterface OSRMResponse {\n code?: string;\n routes?: OSRMRoute[];\n}\n\n/**\n * Build a {@link RoutingBackend} backed by an OSRM server **you host**. OSRM\n * only serves a driving profile, so motorcycle/bus durations are derived by\n * scaling the car duration through {@link durationFactor} — same approach as\n * the FastAPI SDK's `OSRMBackend`.\n *\n * !!! warning\n * This makes a network request to `baseUrl`. It is opt-in: nothing in the\n * SDK calls it unless you construct it and pass your own server URL. For a\n * zero-network estimate, use {@link estimateTravel} instead.\n *\n * @param options - Server URL, optional `fetch`, per-mode factors.\n * @returns A backend whose `route()` queries OSRM.\n *\n * @example\n * const backend = createOSRMBackend({ baseUrl: \"https://osrm.internal\" });\n * const estimate = await backend.route(origin, destination, { mode: \"car\" });\n */\nexport function createOSRMBackend(options: OSRMBackendOptions): RoutingBackend {\n const { baseUrl, fetch = globalThis.fetch, modeDurationFactors } = options;\n const trimmedBaseUrl = baseUrl.replace(/\\/+$/, \"\");\n\n return {\n async route(origin, destination, routeOptions = {}): Promise<TravelEstimate> {\n const mode = routeOptions.mode ?? \"car\";\n const coords = `${origin.longitude},${origin.latitude};${destination.longitude},${destination.latitude}`;\n const url = `${trimmedBaseUrl}/route/v1/driving/${coords}?overview=false`;\n\n let payload: OSRMResponse;\n try {\n const response = await fetch(url);\n payload = (await response.json()) as OSRMResponse;\n } catch (cause) {\n throw new Error(`OSRM request failed: ${String(cause)}`, { cause });\n }\n\n const route = payload.routes?.[0];\n if (payload.code !== \"Ok\" || !route) {\n throw new Error(`OSRM returned no route (code: ${payload.code ?? \"unknown\"})`);\n }\n\n const distanceKm = route.distance / 1000.0;\n const carMinutes = route.duration / 60.0;\n const durationMinutes = carMinutes * durationFactor(mode, modeDurationFactors);\n\n return {\n mode,\n distance_km: distanceKm,\n duration_minutes: durationMinutes,\n source: \"osrm\",\n };\n },\n };\n}\n"],"mappings":";;AA6DA,SAAgBA,EAAkB,GAA6C;CAC3E,IAAM,EAAE,YAAS,WAAQ,WAAW,OAAO,2BAAwBC,GAC7DC,IAAiBC,EAAQ,QAAQ,QAAQ,EAAE;CAEjD,OAAO,EACH,MAAM,MAAM,GAAQ,GAAa,IAAe,CAAC,GAA4B;EACzE,IAAMC,IAAOC,EAAa,QAAQ,OAC5BC,IAAS,GAAGC,EAAO,UAAU,GAAGA,EAAO,SAAS,GAAGC,EAAY,UAAU,GAAGA,EAAY,YACxFC,IAAM,GAAGP,EAAe,oBAAoBI,EAAO,kBAErDI;EACJ,IAAI;GAEA,IAAW,OAAM,MADMC,EAAMF,CAAG,EAAA,CACN,KAAK;EACnC,SAASG,GAAO;GACZ,MAAU,MAAM,wBAAwB,OAAOA,CAAK,KAAK,EAAE,SAAM,CAAC;EACtE;EAEA,IAAMC,IAAQH,EAAQ,SAAS;EAC/B,IAAIA,EAAQ,SAAS,QAAQ,CAACG,GAC1B,MAAU,MAAM,iCAAiCH,EAAQ,QAAQ,UAAU,EAAE;EAOjF,OAAO;GACH;GACA,aANeG,EAAM,WAAW;GAOhC,kBANeA,EAAM,WAAW,KACCC,EAAeV,GAAMW,CAAmB;GAMzE,QAAQ;EACZ;CACJ,EACJ;AACJ"}