tempest-react-sdk 0.78.0 → 0.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1585) hide show
  1. package/README.md +6 -6
  2. package/bin/lib/openapi/generate.mjs +168 -64
  3. package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
  4. package/bin/lib/openapi/generate.test.mjs +263 -1
  5. package/dist/access/Can.cjs.map +1 -1
  6. package/dist/access/Can.js.map +1 -1
  7. package/dist/access/access-control-context.cjs.map +1 -1
  8. package/dist/access/access-control-context.js.map +1 -1
  9. package/dist/access/create-role-access-control.cjs.map +1 -1
  10. package/dist/access/create-role-access-control.js.map +1 -1
  11. package/dist/access/permissions-from-token.cjs.map +1 -1
  12. package/dist/access/permissions-from-token.js.map +1 -1
  13. package/dist/access/use-can.cjs.map +1 -1
  14. package/dist/access/use-can.js.map +1 -1
  15. package/dist/app/AppProviders.cjs.map +1 -1
  16. package/dist/app/AppProviders.js.map +1 -1
  17. package/dist/audio/audio-bus.cjs.map +1 -1
  18. package/dist/audio/audio-bus.js.map +1 -1
  19. package/dist/audio/audio-output.cjs.map +1 -1
  20. package/dist/audio/audio-output.js.map +1 -1
  21. package/dist/audio/audio-player.cjs.map +1 -1
  22. package/dist/audio/audio-player.js.map +1 -1
  23. package/dist/audio/audio-recorder.cjs.map +1 -1
  24. package/dist/audio/audio-recorder.js.map +1 -1
  25. package/dist/audio/duration.cjs.map +1 -1
  26. package/dist/audio/duration.js.map +1 -1
  27. package/dist/audio/level-meter.cjs.map +1 -1
  28. package/dist/audio/level-meter.js.map +1 -1
  29. package/dist/audio/media-access.cjs.map +1 -1
  30. package/dist/audio/media-access.js.map +1 -1
  31. package/dist/audio/noise-floor.cjs.map +1 -1
  32. package/dist/audio/noise-floor.js.map +1 -1
  33. package/dist/audio/sfx-pool.cjs.map +1 -1
  34. package/dist/audio/sfx-pool.js.map +1 -1
  35. package/dist/audio/use-audio-bus.cjs.map +1 -1
  36. package/dist/audio/use-audio-bus.js.map +1 -1
  37. package/dist/audio/use-audio-recorder.cjs.map +1 -1
  38. package/dist/audio/use-audio-recorder.js.map +1 -1
  39. package/dist/audio/use-audio.cjs.map +1 -1
  40. package/dist/audio/use-audio.js.map +1 -1
  41. package/dist/audio/use-microphone.cjs +1 -1
  42. package/dist/audio/use-microphone.cjs.map +1 -1
  43. package/dist/audio/use-microphone.js +1 -5
  44. package/dist/audio/use-microphone.js.map +1 -1
  45. package/dist/audio/use-sfx-pool.cjs.map +1 -1
  46. package/dist/audio/use-sfx-pool.js.map +1 -1
  47. package/dist/audio/voice-activity.cjs.map +1 -1
  48. package/dist/audio/voice-activity.js.map +1 -1
  49. package/dist/audio/voice-chain-stages.cjs.map +1 -1
  50. package/dist/audio/voice-chain-stages.js.map +1 -1
  51. package/dist/audio/voice-chain.cjs.map +1 -1
  52. package/dist/audio/voice-chain.js.map +1 -1
  53. package/dist/audio/wav.cjs.map +1 -1
  54. package/dist/audio/wav.js.map +1 -1
  55. package/dist/auth/AuthGuard.cjs.map +1 -1
  56. package/dist/auth/AuthGuard.js.map +1 -1
  57. package/dist/auth/create-auth-store.cjs.map +1 -1
  58. package/dist/auth/create-auth-store.js.map +1 -1
  59. package/dist/auth/create-tempest-auth.cjs +1 -1
  60. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  61. package/dist/auth/create-tempest-auth.js +1 -3
  62. package/dist/auth/create-tempest-auth.js.map +1 -1
  63. package/dist/auth/jwt.cjs.map +1 -1
  64. package/dist/auth/jwt.js.map +1 -1
  65. package/dist/auth/lazy-with-retry.cjs.map +1 -1
  66. package/dist/auth/lazy-with-retry.js.map +1 -1
  67. package/dist/auth/passkey.cjs.map +1 -1
  68. package/dist/auth/passkey.js.map +1 -1
  69. package/dist/auth/refresh-queue.cjs.map +1 -1
  70. package/dist/auth/refresh-queue.js.map +1 -1
  71. package/dist/auth/use-passkey.cjs +1 -1
  72. package/dist/auth/use-passkey.cjs.map +1 -1
  73. package/dist/auth/use-passkey.js +1 -1
  74. package/dist/auth/use-passkey.js.map +1 -1
  75. package/dist/br/BrazilMap.cjs.map +1 -1
  76. package/dist/br/BrazilMap.js.map +1 -1
  77. package/dist/br/BrazilMap.module.cjs.map +1 -1
  78. package/dist/br/BrazilMap.module.js.map +1 -1
  79. package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
  80. package/dist/br/BrazilStateCitySelect.js.map +1 -1
  81. package/dist/br/BrazilStateMap.cjs.map +1 -1
  82. package/dist/br/BrazilStateMap.js.map +1 -1
  83. package/dist/br/MapLegend.cjs.map +1 -1
  84. package/dist/br/MapLegend.js.map +1 -1
  85. package/dist/br/MapLegend.module.cjs.map +1 -1
  86. package/dist/br/MapLegend.module.js.map +1 -1
  87. package/dist/br/MapMarkers.cjs.map +1 -1
  88. package/dist/br/MapMarkers.js.map +1 -1
  89. package/dist/br/MapTooltip.cjs.map +1 -1
  90. package/dist/br/MapTooltip.js.map +1 -1
  91. package/dist/br/MunicipalitySearch.cjs +1 -1
  92. package/dist/br/MunicipalitySearch.cjs.map +1 -1
  93. package/dist/br/MunicipalitySearch.js +2 -5
  94. package/dist/br/MunicipalitySearch.js.map +1 -1
  95. package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
  96. package/dist/br/MunicipalitySearch.module.js.map +1 -1
  97. package/dist/br/PixQRCode.cjs.map +1 -1
  98. package/dist/br/PixQRCode.js.map +1 -1
  99. package/dist/br/PixQRCode.module.cjs.map +1 -1
  100. package/dist/br/PixQRCode.module.js.map +1 -1
  101. package/dist/br/boleto.cjs.map +1 -1
  102. package/dist/br/boleto.js.map +1 -1
  103. package/dist/br/br-geo.cjs.map +1 -1
  104. package/dist/br/br-geo.js.map +1 -1
  105. package/dist/br/data/br-centroids.cjs.map +1 -1
  106. package/dist/br/data/br-centroids.js.map +1 -1
  107. package/dist/br/data/br-locations.cjs.map +1 -1
  108. package/dist/br/data/br-locations.js.map +1 -1
  109. package/dist/br/data/br-uf-geo.cjs.map +1 -1
  110. package/dist/br/data/br-uf-geo.js.map +1 -1
  111. package/dist/br/data/mun/AC.cjs.map +1 -1
  112. package/dist/br/data/mun/AC.js.map +1 -1
  113. package/dist/br/data/mun/AL.cjs.map +1 -1
  114. package/dist/br/data/mun/AL.js.map +1 -1
  115. package/dist/br/data/mun/AM.cjs.map +1 -1
  116. package/dist/br/data/mun/AM.js.map +1 -1
  117. package/dist/br/data/mun/AP.cjs.map +1 -1
  118. package/dist/br/data/mun/AP.js.map +1 -1
  119. package/dist/br/data/mun/BA.cjs.map +1 -1
  120. package/dist/br/data/mun/BA.js.map +1 -1
  121. package/dist/br/data/mun/CE.cjs.map +1 -1
  122. package/dist/br/data/mun/CE.js.map +1 -1
  123. package/dist/br/data/mun/DF.cjs.map +1 -1
  124. package/dist/br/data/mun/DF.js.map +1 -1
  125. package/dist/br/data/mun/ES.cjs.map +1 -1
  126. package/dist/br/data/mun/ES.js.map +1 -1
  127. package/dist/br/data/mun/GO.cjs.map +1 -1
  128. package/dist/br/data/mun/GO.js.map +1 -1
  129. package/dist/br/data/mun/MA.cjs.map +1 -1
  130. package/dist/br/data/mun/MA.js.map +1 -1
  131. package/dist/br/data/mun/MG.cjs.map +1 -1
  132. package/dist/br/data/mun/MG.js.map +1 -1
  133. package/dist/br/data/mun/MS.cjs.map +1 -1
  134. package/dist/br/data/mun/MS.js.map +1 -1
  135. package/dist/br/data/mun/MT.cjs.map +1 -1
  136. package/dist/br/data/mun/MT.js.map +1 -1
  137. package/dist/br/data/mun/PA.cjs.map +1 -1
  138. package/dist/br/data/mun/PA.js.map +1 -1
  139. package/dist/br/data/mun/PB.cjs.map +1 -1
  140. package/dist/br/data/mun/PB.js.map +1 -1
  141. package/dist/br/data/mun/PE.cjs.map +1 -1
  142. package/dist/br/data/mun/PE.js.map +1 -1
  143. package/dist/br/data/mun/PI.cjs.map +1 -1
  144. package/dist/br/data/mun/PI.js.map +1 -1
  145. package/dist/br/data/mun/PR.cjs.map +1 -1
  146. package/dist/br/data/mun/PR.js.map +1 -1
  147. package/dist/br/data/mun/RJ.cjs.map +1 -1
  148. package/dist/br/data/mun/RJ.js.map +1 -1
  149. package/dist/br/data/mun/RN.cjs.map +1 -1
  150. package/dist/br/data/mun/RN.js.map +1 -1
  151. package/dist/br/data/mun/RO.cjs.map +1 -1
  152. package/dist/br/data/mun/RO.js.map +1 -1
  153. package/dist/br/data/mun/RR.cjs.map +1 -1
  154. package/dist/br/data/mun/RR.js.map +1 -1
  155. package/dist/br/data/mun/RS.cjs.map +1 -1
  156. package/dist/br/data/mun/RS.js.map +1 -1
  157. package/dist/br/data/mun/SC.cjs.map +1 -1
  158. package/dist/br/data/mun/SC.js.map +1 -1
  159. package/dist/br/data/mun/SE.cjs.map +1 -1
  160. package/dist/br/data/mun/SE.js.map +1 -1
  161. package/dist/br/data/mun/SP.cjs.map +1 -1
  162. package/dist/br/data/mun/SP.js.map +1 -1
  163. package/dist/br/data/mun/TO.cjs.map +1 -1
  164. package/dist/br/data/mun/TO.js.map +1 -1
  165. package/dist/br/geocode.cjs.map +1 -1
  166. package/dist/br/geocode.js.map +1 -1
  167. package/dist/br/holidays.cjs.map +1 -1
  168. package/dist/br/holidays.js.map +1 -1
  169. package/dist/br/locations.cjs.map +1 -1
  170. package/dist/br/locations.js.map +1 -1
  171. package/dist/br/nfe.cjs.map +1 -1
  172. package/dist/br/nfe.js.map +1 -1
  173. package/dist/br/pix.cjs +1 -1
  174. package/dist/br/pix.cjs.map +1 -1
  175. package/dist/br/pix.js +108 -74
  176. package/dist/br/pix.js.map +1 -1
  177. package/dist/br/regions.cjs.map +1 -1
  178. package/dist/br/regions.js.map +1 -1
  179. package/dist/br/scales.cjs.map +1 -1
  180. package/dist/br/scales.js.map +1 -1
  181. package/dist/br/state-geo.cjs.map +1 -1
  182. package/dist/br/state-geo.js.map +1 -1
  183. package/dist/br/svg-utils.cjs.map +1 -1
  184. package/dist/br/svg-utils.js.map +1 -1
  185. package/dist/br/use-map-hover.cjs.map +1 -1
  186. package/dist/br/use-map-hover.js.map +1 -1
  187. package/dist/br/use-map-zoom.cjs.map +1 -1
  188. package/dist/br/use-map-zoom.js.map +1 -1
  189. package/dist/br/whatsapp.cjs.map +1 -1
  190. package/dist/br/whatsapp.js.map +1 -1
  191. package/dist/br.cjs.map +1 -1
  192. package/dist/br.d.ts +6 -2
  193. package/dist/br.js.map +1 -1
  194. package/dist/capture/barcode.cjs.map +1 -1
  195. package/dist/capture/barcode.js.map +1 -1
  196. package/dist/capture/media-recorder.cjs.map +1 -1
  197. package/dist/capture/media-recorder.js.map +1 -1
  198. package/dist/capture/use-barcode-scanner.cjs.map +1 -1
  199. package/dist/capture/use-barcode-scanner.js.map +1 -1
  200. package/dist/capture/use-screen-capture.cjs +1 -1
  201. package/dist/capture/use-screen-capture.cjs.map +1 -1
  202. package/dist/capture/use-screen-capture.js +1 -7
  203. package/dist/capture/use-screen-capture.js.map +1 -1
  204. package/dist/capture/use-speech-recognition.cjs +1 -1
  205. package/dist/capture/use-speech-recognition.cjs.map +1 -1
  206. package/dist/capture/use-speech-recognition.js +35 -36
  207. package/dist/capture/use-speech-recognition.js.map +1 -1
  208. package/dist/capture/use-torch.cjs.map +1 -1
  209. package/dist/capture/use-torch.js.map +1 -1
  210. package/dist/capture/use-video-recorder.cjs.map +1 -1
  211. package/dist/capture/use-video-recorder.js.map +1 -1
  212. package/dist/capture/video-recorder.cjs.map +1 -1
  213. package/dist/capture/video-recorder.js.map +1 -1
  214. package/dist/charts/AreaChart.cjs.map +1 -1
  215. package/dist/charts/AreaChart.js.map +1 -1
  216. package/dist/charts/BarChart.cjs.map +1 -1
  217. package/dist/charts/BarChart.js.map +1 -1
  218. package/dist/charts/LineChart.cjs.map +1 -1
  219. package/dist/charts/LineChart.js.map +1 -1
  220. package/dist/charts/PieChart.cjs.map +1 -1
  221. package/dist/charts/PieChart.js.map +1 -1
  222. package/dist/charts/RadarChart.cjs.map +1 -1
  223. package/dist/charts/RadarChart.js.map +1 -1
  224. package/dist/charts/palette.cjs.map +1 -1
  225. package/dist/charts/palette.js.map +1 -1
  226. package/dist/charts/scales.cjs.map +1 -1
  227. package/dist/charts/scales.js.map +1 -1
  228. package/dist/charts/types.cjs.map +1 -1
  229. package/dist/charts/types.js.map +1 -1
  230. package/dist/charts/use-chart-colors.cjs.map +1 -1
  231. package/dist/charts/use-chart-colors.js.map +1 -1
  232. package/dist/components/AIChat/AIChat.cjs +1 -1
  233. package/dist/components/AIChat/AIChat.cjs.map +1 -1
  234. package/dist/components/AIChat/AIChat.js +1 -5
  235. package/dist/components/AIChat/AIChat.js.map +1 -1
  236. package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
  237. package/dist/components/AIChat/AIChat.module.js.map +1 -1
  238. package/dist/components/AIChat/AIChatComposer.cjs +1 -1
  239. package/dist/components/AIChat/AIChatComposer.cjs.map +1 -1
  240. package/dist/components/AIChat/AIChatComposer.js +1 -7
  241. package/dist/components/AIChat/AIChatComposer.js.map +1 -1
  242. package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
  243. package/dist/components/AIChat/AIChatTurn.js.map +1 -1
  244. package/dist/components/AIChat/ai-chat-turns.cjs.map +1 -1
  245. package/dist/components/AIChat/ai-chat-turns.js.map +1 -1
  246. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  247. package/dist/components/Accordion/Accordion.js.map +1 -1
  248. package/dist/components/Accordion/Accordion.module.cjs.map +1 -1
  249. package/dist/components/Accordion/Accordion.module.js.map +1 -1
  250. package/dist/components/Alert/Alert.cjs.map +1 -1
  251. package/dist/components/Alert/Alert.js.map +1 -1
  252. package/dist/components/Alert/Alert.module.cjs.map +1 -1
  253. package/dist/components/Alert/Alert.module.js.map +1 -1
  254. package/dist/components/AppBar/AppBar.cjs.map +1 -1
  255. package/dist/components/AppBar/AppBar.js.map +1 -1
  256. package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
  257. package/dist/components/AppBar/AppBar.module.js.map +1 -1
  258. package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
  259. package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
  260. package/dist/components/AppBar/use-sticky-body-warning.js +1 -1
  261. package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
  262. package/dist/components/AppShell/AppShell.cjs.map +1 -1
  263. package/dist/components/AppShell/AppShell.js.map +1 -1
  264. package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
  265. package/dist/components/AppShell/AppShell.module.js.map +1 -1
  266. package/dist/components/AspectRatio/AspectRatio.cjs.map +1 -1
  267. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  268. package/dist/components/AspectRatio/AspectRatio.module.cjs.map +1 -1
  269. package/dist/components/AspectRatio/AspectRatio.module.js.map +1 -1
  270. package/dist/components/AudioPlayer/AudioPlayer.cjs +1 -1
  271. package/dist/components/AudioPlayer/AudioPlayer.cjs.map +1 -1
  272. package/dist/components/AudioPlayer/AudioPlayer.js +1 -7
  273. package/dist/components/AudioPlayer/AudioPlayer.js.map +1 -1
  274. package/dist/components/AudioPlayer/AudioPlayer.module.cjs.map +1 -1
  275. package/dist/components/AudioPlayer/AudioPlayer.module.js.map +1 -1
  276. package/dist/components/AudioRecorder/AudioRecorder.cjs +1 -1
  277. package/dist/components/AudioRecorder/AudioRecorder.cjs.map +1 -1
  278. package/dist/components/AudioRecorder/AudioRecorder.js +16 -21
  279. package/dist/components/AudioRecorder/AudioRecorder.js.map +1 -1
  280. package/dist/components/AudioRecorder/AudioRecorder.module.cjs.map +1 -1
  281. package/dist/components/AudioRecorder/AudioRecorder.module.js.map +1 -1
  282. package/dist/components/Avatar/Avatar.cjs.map +1 -1
  283. package/dist/components/Avatar/Avatar.js.map +1 -1
  284. package/dist/components/Avatar/Avatar.module.cjs.map +1 -1
  285. package/dist/components/Avatar/Avatar.module.js.map +1 -1
  286. package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
  287. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  288. package/dist/components/AvatarGroup/AvatarGroup.module.cjs.map +1 -1
  289. package/dist/components/AvatarGroup/AvatarGroup.module.js.map +1 -1
  290. package/dist/components/Badge/Badge.cjs.map +1 -1
  291. package/dist/components/Badge/Badge.js.map +1 -1
  292. package/dist/components/Badge/Badge.module.cjs.map +1 -1
  293. package/dist/components/Badge/Badge.module.js.map +1 -1
  294. package/dist/components/Banner/Banner.cjs.map +1 -1
  295. package/dist/components/Banner/Banner.js.map +1 -1
  296. package/dist/components/Banner/Banner.module.cjs.map +1 -1
  297. package/dist/components/Banner/Banner.module.js.map +1 -1
  298. package/dist/components/BarList/BarList.cjs.map +1 -1
  299. package/dist/components/BarList/BarList.js.map +1 -1
  300. package/dist/components/BarList/BarList.module.cjs.map +1 -1
  301. package/dist/components/BarList/BarList.module.js.map +1 -1
  302. package/dist/components/BarList/bar-list-model.cjs.map +1 -1
  303. package/dist/components/BarList/bar-list-model.js.map +1 -1
  304. package/dist/components/BarcodeScanner/BarcodeScanner.cjs.map +1 -1
  305. package/dist/components/BarcodeScanner/BarcodeScanner.js.map +1 -1
  306. package/dist/components/BarcodeScanner/BarcodeScanner.module.cjs.map +1 -1
  307. package/dist/components/BarcodeScanner/BarcodeScanner.module.js.map +1 -1
  308. package/dist/components/BottomNavigation/BottomNavigation.cjs.map +1 -1
  309. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  310. package/dist/components/BottomNavigation/BottomNavigation.module.cjs.map +1 -1
  311. package/dist/components/BottomNavigation/BottomNavigation.module.js.map +1 -1
  312. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  313. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  314. package/dist/components/BottomSheet/BottomSheet.module.cjs.map +1 -1
  315. package/dist/components/BottomSheet/BottomSheet.module.js.map +1 -1
  316. package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
  317. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  318. package/dist/components/Breadcrumbs/Breadcrumbs.module.cjs.map +1 -1
  319. package/dist/components/Breadcrumbs/Breadcrumbs.module.js.map +1 -1
  320. package/dist/components/Button/Button.cjs.map +1 -1
  321. package/dist/components/Button/Button.js.map +1 -1
  322. package/dist/components/Button/Button.module.cjs.map +1 -1
  323. package/dist/components/Button/Button.module.js.map +1 -1
  324. package/dist/components/Button/ButtonContent.cjs.map +1 -1
  325. package/dist/components/Button/ButtonContent.js.map +1 -1
  326. package/dist/components/Button/ButtonSlot.cjs.map +1 -1
  327. package/dist/components/Button/ButtonSlot.js.map +1 -1
  328. package/dist/components/Button/button-class.cjs.map +1 -1
  329. package/dist/components/Button/button-class.js.map +1 -1
  330. package/dist/components/Button/link-rel.cjs.map +1 -1
  331. package/dist/components/Button/link-rel.js.map +1 -1
  332. package/dist/components/Button/slot.cjs.map +1 -1
  333. package/dist/components/Button/slot.js.map +1 -1
  334. package/dist/components/Calendar/Calendar.cjs.map +1 -1
  335. package/dist/components/Calendar/Calendar.js.map +1 -1
  336. package/dist/components/Calendar/Calendar.module.cjs.map +1 -1
  337. package/dist/components/Calendar/Calendar.module.js.map +1 -1
  338. package/dist/components/Card/Card.cjs.map +1 -1
  339. package/dist/components/Card/Card.js.map +1 -1
  340. package/dist/components/Card/Card.module.cjs.map +1 -1
  341. package/dist/components/Card/Card.module.js.map +1 -1
  342. package/dist/components/Carousel/Carousel.cjs.map +1 -1
  343. package/dist/components/Carousel/Carousel.js.map +1 -1
  344. package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
  345. package/dist/components/Carousel/Carousel.module.js.map +1 -1
  346. package/dist/components/Center/Center.cjs.map +1 -1
  347. package/dist/components/Center/Center.js.map +1 -1
  348. package/dist/components/Center/Center.module.cjs.map +1 -1
  349. package/dist/components/Center/Center.module.js.map +1 -1
  350. package/dist/components/Chat/Chat.cjs.map +1 -1
  351. package/dist/components/Chat/Chat.js.map +1 -1
  352. package/dist/components/Chat/Chat.module.cjs.map +1 -1
  353. package/dist/components/Chat/Chat.module.js.map +1 -1
  354. package/dist/components/Chat/ChatActionsMenu.cjs.map +1 -1
  355. package/dist/components/Chat/ChatActionsMenu.js.map +1 -1
  356. package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
  357. package/dist/components/Chat/ChatAttachments.js.map +1 -1
  358. package/dist/components/Chat/ChatBubble.cjs.map +1 -1
  359. package/dist/components/Chat/ChatBubble.js.map +1 -1
  360. package/dist/components/Chat/ChatComposer.cjs.map +1 -1
  361. package/dist/components/Chat/ChatComposer.js.map +1 -1
  362. package/dist/components/Chat/chat-groups.cjs +1 -1
  363. package/dist/components/Chat/chat-groups.cjs.map +1 -1
  364. package/dist/components/Chat/chat-groups.js +2 -6
  365. package/dist/components/Chat/chat-groups.js.map +1 -1
  366. package/dist/components/Chat/chat-receipt.cjs.map +1 -1
  367. package/dist/components/Chat/chat-receipt.js.map +1 -1
  368. package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
  369. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  370. package/dist/components/Checkbox/Checkbox.module.cjs.map +1 -1
  371. package/dist/components/Checkbox/Checkbox.module.js.map +1 -1
  372. package/dist/components/ChipInput/ChipInput.cjs +1 -1
  373. package/dist/components/ChipInput/ChipInput.cjs.map +1 -1
  374. package/dist/components/ChipInput/ChipInput.js +2 -12
  375. package/dist/components/ChipInput/ChipInput.js.map +1 -1
  376. package/dist/components/ChipInput/ChipInput.module.cjs.map +1 -1
  377. package/dist/components/ChipInput/ChipInput.module.js.map +1 -1
  378. package/dist/components/ClickOutside/ClickOutside.cjs.map +1 -1
  379. package/dist/components/ClickOutside/ClickOutside.js.map +1 -1
  380. package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
  381. package/dist/components/CodeBlock/CodeBlock.js.map +1 -1
  382. package/dist/components/CodeBlock/CodeBlock.module.cjs.map +1 -1
  383. package/dist/components/CodeBlock/CodeBlock.module.js.map +1 -1
  384. package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
  385. package/dist/components/CodeBlock/tokenize.js.map +1 -1
  386. package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
  387. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  388. package/dist/components/Collapsible/Collapsible.module.cjs.map +1 -1
  389. package/dist/components/Collapsible/Collapsible.module.js.map +1 -1
  390. package/dist/components/Combobox/Combobox.cjs.map +1 -1
  391. package/dist/components/Combobox/Combobox.js.map +1 -1
  392. package/dist/components/Combobox/Combobox.module.cjs.map +1 -1
  393. package/dist/components/Combobox/Combobox.module.js.map +1 -1
  394. package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -1
  395. package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -1
  396. package/dist/components/Command/Command.cjs +1 -1
  397. package/dist/components/Command/Command.cjs.map +1 -1
  398. package/dist/components/Command/Command.js +4 -11
  399. package/dist/components/Command/Command.js.map +1 -1
  400. package/dist/components/Command/Command.module.cjs.map +1 -1
  401. package/dist/components/Command/Command.module.js.map +1 -1
  402. package/dist/components/ConditionalWrapper/ConditionalWrapper.cjs.map +1 -1
  403. package/dist/components/ConditionalWrapper/ConditionalWrapper.js.map +1 -1
  404. package/dist/components/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  405. package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -1
  406. package/dist/components/ContextMenu/ContextMenu.cjs +1 -1
  407. package/dist/components/ContextMenu/ContextMenu.cjs.map +1 -1
  408. package/dist/components/ContextMenu/ContextMenu.js +1 -1
  409. package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
  410. package/dist/components/ContextMenu/ContextMenu.module.cjs.map +1 -1
  411. package/dist/components/ContextMenu/ContextMenu.module.js.map +1 -1
  412. package/dist/components/CopyButton/CopyButton.cjs.map +1 -1
  413. package/dist/components/CopyButton/CopyButton.js.map +1 -1
  414. package/dist/components/CopyButton/CopyButton.module.cjs.map +1 -1
  415. package/dist/components/CopyButton/CopyButton.module.js.map +1 -1
  416. package/dist/components/DataList/DataList.cjs.map +1 -1
  417. package/dist/components/DataList/DataList.js.map +1 -1
  418. package/dist/components/DataList/DataList.module.cjs.map +1 -1
  419. package/dist/components/DataList/DataList.module.js.map +1 -1
  420. package/dist/components/DataTable/DataTable.cjs +1 -1
  421. package/dist/components/DataTable/DataTable.cjs.map +1 -1
  422. package/dist/components/DataTable/DataTable.js +6 -14
  423. package/dist/components/DataTable/DataTable.js.map +1 -1
  424. package/dist/components/DataTable/DataTable.module.cjs.map +1 -1
  425. package/dist/components/DataTable/DataTable.module.js.map +1 -1
  426. package/dist/components/DataTable/EditableCell.cjs +1 -1
  427. package/dist/components/DataTable/EditableCell.cjs.map +1 -1
  428. package/dist/components/DataTable/EditableCell.js +1 -9
  429. package/dist/components/DataTable/EditableCell.js.map +1 -1
  430. package/dist/components/DataTable/LoadingRows.cjs.map +1 -1
  431. package/dist/components/DataTable/LoadingRows.js.map +1 -1
  432. package/dist/components/DataTable/edit-labels.cjs.map +1 -1
  433. package/dist/components/DataTable/edit-labels.js.map +1 -1
  434. package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
  435. package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
  436. package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
  437. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  438. package/dist/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
  439. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  440. package/dist/components/DateRangePicker/DateRangePicker.module.cjs.map +1 -1
  441. package/dist/components/DateRangePicker/DateRangePicker.module.js.map +1 -1
  442. package/dist/components/DescriptionList/DescriptionList.cjs.map +1 -1
  443. package/dist/components/DescriptionList/DescriptionList.js.map +1 -1
  444. package/dist/components/DescriptionList/DescriptionList.module.cjs.map +1 -1
  445. package/dist/components/DescriptionList/DescriptionList.module.js.map +1 -1
  446. package/dist/components/Divider/Divider.cjs.map +1 -1
  447. package/dist/components/Divider/Divider.js.map +1 -1
  448. package/dist/components/Divider/Divider.module.cjs.map +1 -1
  449. package/dist/components/Divider/Divider.module.js.map +1 -1
  450. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  451. package/dist/components/Drawer/Drawer.js.map +1 -1
  452. package/dist/components/Drawer/Drawer.module.cjs.map +1 -1
  453. package/dist/components/Drawer/Drawer.module.js.map +1 -1
  454. package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
  455. package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  456. package/dist/components/DropdownMenu/DropdownMenu.js +2 -14
  457. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  458. package/dist/components/DropdownMenu/DropdownMenu.module.cjs.map +1 -1
  459. package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -1
  460. package/dist/components/Dropzone/Dropzone.cjs.map +1 -1
  461. package/dist/components/Dropzone/Dropzone.js.map +1 -1
  462. package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
  463. package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
  464. package/dist/components/EmptyState/EmptyState.cjs.map +1 -1
  465. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  466. package/dist/components/EmptyState/EmptyState.module.cjs.map +1 -1
  467. package/dist/components/EmptyState/EmptyState.module.js.map +1 -1
  468. package/dist/components/ErrorState/ErrorState.cjs.map +1 -1
  469. package/dist/components/ErrorState/ErrorState.js.map +1 -1
  470. package/dist/components/ErrorState/ErrorState.module.cjs.map +1 -1
  471. package/dist/components/ErrorState/ErrorState.module.js.map +1 -1
  472. package/dist/components/ErrorText/ErrorText.cjs.map +1 -1
  473. package/dist/components/ErrorText/ErrorText.js.map +1 -1
  474. package/dist/components/ErrorText/ErrorText.module.cjs.map +1 -1
  475. package/dist/components/ErrorText/ErrorText.module.js.map +1 -1
  476. package/dist/components/FileUpload/FileUpload.cjs +1 -1
  477. package/dist/components/FileUpload/FileUpload.cjs.map +1 -1
  478. package/dist/components/FileUpload/FileUpload.js +7 -17
  479. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  480. package/dist/components/FileUpload/FileUpload.module.cjs.map +1 -1
  481. package/dist/components/FileUpload/FileUpload.module.js.map +1 -1
  482. package/dist/components/FilterBar/FilterBar.cjs.map +1 -1
  483. package/dist/components/FilterBar/FilterBar.js.map +1 -1
  484. package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
  485. package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
  486. package/dist/components/FilterBar/filter-apply.cjs.map +1 -1
  487. package/dist/components/FilterBar/filter-apply.js.map +1 -1
  488. package/dist/components/FilterBar/filter-model.cjs.map +1 -1
  489. package/dist/components/FilterBar/filter-model.js.map +1 -1
  490. package/dist/components/FilterBar/filter-query.cjs +1 -1
  491. package/dist/components/FilterBar/filter-query.cjs.map +1 -1
  492. package/dist/components/FilterBar/filter-query.js +2 -5
  493. package/dist/components/FilterBar/filter-query.js.map +1 -1
  494. package/dist/components/FilterPanel/FilterPanel.cjs.map +1 -1
  495. package/dist/components/FilterPanel/FilterPanel.js.map +1 -1
  496. package/dist/components/FilterPanel/FilterPanel.module.cjs.map +1 -1
  497. package/dist/components/FilterPanel/FilterPanel.module.js.map +1 -1
  498. package/dist/components/FloatingActionButton/FloatingActionButton.cjs.map +1 -1
  499. package/dist/components/FloatingActionButton/FloatingActionButton.js.map +1 -1
  500. package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
  501. package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
  502. package/dist/components/For/For.cjs.map +1 -1
  503. package/dist/components/For/For.js.map +1 -1
  504. package/dist/components/Form/Form.cjs.map +1 -1
  505. package/dist/components/Form/Form.js.map +1 -1
  506. package/dist/components/Form/Form.module.cjs.map +1 -1
  507. package/dist/components/Form/Form.module.js.map +1 -1
  508. package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
  509. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  510. package/dist/components/HoverCard/HoverCard.module.cjs.map +1 -1
  511. package/dist/components/HoverCard/HoverCard.module.js.map +1 -1
  512. package/dist/components/Image/Image.cjs.map +1 -1
  513. package/dist/components/Image/Image.js.map +1 -1
  514. package/dist/components/Image/Image.module.cjs.map +1 -1
  515. package/dist/components/Image/Image.module.js.map +1 -1
  516. package/dist/components/ImageCropper/ImageCropper.cjs +1 -1
  517. package/dist/components/ImageCropper/ImageCropper.cjs.map +1 -1
  518. package/dist/components/ImageCropper/ImageCropper.js +4 -8
  519. package/dist/components/ImageCropper/ImageCropper.js.map +1 -1
  520. package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
  521. package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
  522. package/dist/components/ImageCropper/crop-geometry.cjs.map +1 -1
  523. package/dist/components/ImageCropper/crop-geometry.js.map +1 -1
  524. package/dist/components/Input/Input.cjs.map +1 -1
  525. package/dist/components/Input/Input.js.map +1 -1
  526. package/dist/components/Input/Input.module.cjs.map +1 -1
  527. package/dist/components/Input/Input.module.js.map +1 -1
  528. package/dist/components/InstallBanner/InstallBanner.cjs.map +1 -1
  529. package/dist/components/InstallBanner/InstallBanner.js.map +1 -1
  530. package/dist/components/InstallBanner/InstallBanner.module.cjs.map +1 -1
  531. package/dist/components/InstallBanner/InstallBanner.module.js.map +1 -1
  532. package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
  533. package/dist/components/InstallButton/InstallButton.js.map +1 -1
  534. package/dist/components/InstallButton/InstallButton.module.cjs.map +1 -1
  535. package/dist/components/InstallButton/InstallButton.module.js.map +1 -1
  536. package/dist/components/InstallButton/install-hints.cjs.map +1 -1
  537. package/dist/components/InstallButton/install-hints.js.map +1 -1
  538. package/dist/components/Kanban/Kanban.cjs.map +1 -1
  539. package/dist/components/Kanban/Kanban.js.map +1 -1
  540. package/dist/components/Kanban/Kanban.module.cjs.map +1 -1
  541. package/dist/components/Kanban/Kanban.module.js.map +1 -1
  542. package/dist/components/Kbd/Kbd.cjs.map +1 -1
  543. package/dist/components/Kbd/Kbd.js.map +1 -1
  544. package/dist/components/Kbd/Kbd.module.cjs.map +1 -1
  545. package/dist/components/Kbd/Kbd.module.js.map +1 -1
  546. package/dist/components/Label/Label.cjs.map +1 -1
  547. package/dist/components/Label/Label.js.map +1 -1
  548. package/dist/components/Label/Label.module.cjs.map +1 -1
  549. package/dist/components/Label/Label.module.js.map +1 -1
  550. package/dist/components/Layout/Layout.cjs.map +1 -1
  551. package/dist/components/Layout/Layout.js.map +1 -1
  552. package/dist/components/Layout/Layout.module.cjs.map +1 -1
  553. package/dist/components/Layout/Layout.module.js.map +1 -1
  554. package/dist/components/Lightbox/Lightbox.cjs +1 -1
  555. package/dist/components/Lightbox/Lightbox.cjs.map +1 -1
  556. package/dist/components/Lightbox/Lightbox.js +1 -1
  557. package/dist/components/Lightbox/Lightbox.js.map +1 -1
  558. package/dist/components/Lightbox/Lightbox.module.cjs.map +1 -1
  559. package/dist/components/Lightbox/Lightbox.module.js.map +1 -1
  560. package/dist/components/ListTile/ListTile.cjs.map +1 -1
  561. package/dist/components/ListTile/ListTile.js.map +1 -1
  562. package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
  563. package/dist/components/ListTile/ListTile.module.js.map +1 -1
  564. package/dist/components/Markdown/Markdown.cjs.map +1 -1
  565. package/dist/components/Markdown/Markdown.js.map +1 -1
  566. package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
  567. package/dist/components/Markdown/Markdown.module.js.map +1 -1
  568. package/dist/components/Markdown/markdown-parse.cjs +2 -2
  569. package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
  570. package/dist/components/Markdown/markdown-parse.js +8 -27
  571. package/dist/components/Markdown/markdown-parse.js.map +1 -1
  572. package/dist/components/Masonry/Masonry.cjs.map +1 -1
  573. package/dist/components/Masonry/Masonry.js.map +1 -1
  574. package/dist/components/Masonry/Masonry.module.cjs.map +1 -1
  575. package/dist/components/Masonry/Masonry.module.js.map +1 -1
  576. package/dist/components/Masonry/masonry-layout.cjs.map +1 -1
  577. package/dist/components/Masonry/masonry-layout.js.map +1 -1
  578. package/dist/components/Menubar/Menubar.cjs.map +1 -1
  579. package/dist/components/Menubar/Menubar.js.map +1 -1
  580. package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
  581. package/dist/components/Menubar/Menubar.module.js.map +1 -1
  582. package/dist/components/Modal/Modal.cjs.map +1 -1
  583. package/dist/components/Modal/Modal.js.map +1 -1
  584. package/dist/components/Modal/Modal.module.cjs.map +1 -1
  585. package/dist/components/Modal/Modal.module.js.map +1 -1
  586. package/dist/components/ModalsManager/ModalsManager.cjs.map +1 -1
  587. package/dist/components/ModalsManager/ModalsManager.js.map +1 -1
  588. package/dist/components/ModalsManager/ModalsManager.module.cjs.map +1 -1
  589. package/dist/components/ModalsManager/ModalsManager.module.js.map +1 -1
  590. package/dist/components/Money/Money.cjs.map +1 -1
  591. package/dist/components/Money/Money.js.map +1 -1
  592. package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
  593. package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
  594. package/dist/components/MultiSelect/MultiSelect.module.cjs.map +1 -1
  595. package/dist/components/MultiSelect/MultiSelect.module.js.map +1 -1
  596. package/dist/components/NProgress/NProgress.cjs.map +1 -1
  597. package/dist/components/NProgress/NProgress.js.map +1 -1
  598. package/dist/components/NProgress/NProgress.module.cjs.map +1 -1
  599. package/dist/components/NProgress/NProgress.module.js.map +1 -1
  600. package/dist/components/Navbar/Navbar.cjs.map +1 -1
  601. package/dist/components/Navbar/Navbar.js.map +1 -1
  602. package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
  603. package/dist/components/Navbar/Navbar.module.js.map +1 -1
  604. package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
  605. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
  606. package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
  607. package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
  608. package/dist/components/NavigationRail/NavigationRail.cjs.map +1 -1
  609. package/dist/components/NavigationRail/NavigationRail.js.map +1 -1
  610. package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
  611. package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
  612. package/dist/components/NotificationCenter/NotificationCenter.cjs.map +1 -1
  613. package/dist/components/NotificationCenter/NotificationCenter.js.map +1 -1
  614. package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
  615. package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
  616. package/dist/components/NotificationCenter/use-notification-inbox.cjs.map +1 -1
  617. package/dist/components/NotificationCenter/use-notification-inbox.js.map +1 -1
  618. package/dist/components/OfflineIndicator/OfflineIndicator.cjs.map +1 -1
  619. package/dist/components/OfflineIndicator/OfflineIndicator.js.map +1 -1
  620. package/dist/components/OfflineIndicator/OfflineIndicator.module.cjs.map +1 -1
  621. package/dist/components/OfflineIndicator/OfflineIndicator.module.js.map +1 -1
  622. package/dist/components/Page/Page.cjs.map +1 -1
  623. package/dist/components/Page/Page.js.map +1 -1
  624. package/dist/components/Page/Page.module.cjs.map +1 -1
  625. package/dist/components/Page/Page.module.js.map +1 -1
  626. package/dist/components/Pagination/Pagination.cjs.map +1 -1
  627. package/dist/components/Pagination/Pagination.js.map +1 -1
  628. package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
  629. package/dist/components/Pagination/Pagination.module.js.map +1 -1
  630. package/dist/components/PasswordInput/PasswordInput.cjs.map +1 -1
  631. package/dist/components/PasswordInput/PasswordInput.js.map +1 -1
  632. package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
  633. package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
  634. package/dist/components/PinInput/PinInput.cjs.map +1 -1
  635. package/dist/components/PinInput/PinInput.js.map +1 -1
  636. package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
  637. package/dist/components/PinInput/PinInput.module.js.map +1 -1
  638. package/dist/components/Popover/Popover.cjs.map +1 -1
  639. package/dist/components/Popover/Popover.js.map +1 -1
  640. package/dist/components/Popover/Popover.module.cjs.map +1 -1
  641. package/dist/components/Popover/Popover.module.js.map +1 -1
  642. package/dist/components/Portal/Portal.cjs.map +1 -1
  643. package/dist/components/Portal/Portal.js.map +1 -1
  644. package/dist/components/Portal/anchor-position.cjs.map +1 -1
  645. package/dist/components/Portal/anchor-position.js.map +1 -1
  646. package/dist/components/Portal/escape-layer.cjs.map +1 -1
  647. package/dist/components/Portal/escape-layer.js.map +1 -1
  648. package/dist/components/Portal/portal-host.cjs.map +1 -1
  649. package/dist/components/Portal/portal-host.js.map +1 -1
  650. package/dist/components/Portal/tab-bridge.cjs +1 -1
  651. package/dist/components/Portal/tab-bridge.cjs.map +1 -1
  652. package/dist/components/Portal/tab-bridge.js +1 -5
  653. package/dist/components/Portal/tab-bridge.js.map +1 -1
  654. package/dist/components/Progress/Progress.cjs.map +1 -1
  655. package/dist/components/Progress/Progress.js.map +1 -1
  656. package/dist/components/Progress/Progress.module.cjs.map +1 -1
  657. package/dist/components/Progress/Progress.module.js.map +1 -1
  658. package/dist/components/QRCode/QRCode.cjs.map +1 -1
  659. package/dist/components/QRCode/QRCode.js.map +1 -1
  660. package/dist/components/QRCode/QRCode.module.cjs.map +1 -1
  661. package/dist/components/QRCode/QRCode.module.js.map +1 -1
  662. package/dist/components/QRCode/qr-encode.cjs +1 -1
  663. package/dist/components/QRCode/qr-encode.cjs.map +1 -1
  664. package/dist/components/QRCode/qr-encode.js +7 -13
  665. package/dist/components/QRCode/qr-encode.js.map +1 -1
  666. package/dist/components/QRCode/qr-tables.cjs.map +1 -1
  667. package/dist/components/QRCode/qr-tables.js.map +1 -1
  668. package/dist/components/Radio/Radio.cjs.map +1 -1
  669. package/dist/components/Radio/Radio.js.map +1 -1
  670. package/dist/components/Radio/Radio.module.cjs.map +1 -1
  671. package/dist/components/Radio/Radio.module.js.map +1 -1
  672. package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
  673. package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
  674. package/dist/components/RangeSlider/RangeSlider.module.cjs.map +1 -1
  675. package/dist/components/RangeSlider/RangeSlider.module.js.map +1 -1
  676. package/dist/components/RatingStars/RatingStars.cjs.map +1 -1
  677. package/dist/components/RatingStars/RatingStars.js.map +1 -1
  678. package/dist/components/RatingStars/RatingStars.module.cjs.map +1 -1
  679. package/dist/components/RatingStars/RatingStars.module.js.map +1 -1
  680. package/dist/components/RefreshIndicator/RefreshIndicator.cjs +1 -1
  681. package/dist/components/RefreshIndicator/RefreshIndicator.cjs.map +1 -1
  682. package/dist/components/RefreshIndicator/RefreshIndicator.js +10 -18
  683. package/dist/components/RefreshIndicator/RefreshIndicator.js.map +1 -1
  684. package/dist/components/RefreshIndicator/RefreshIndicator.module.cjs.map +1 -1
  685. package/dist/components/RefreshIndicator/RefreshIndicator.module.js.map +1 -1
  686. package/dist/components/RelativeTime/RelativeTime.cjs.map +1 -1
  687. package/dist/components/RelativeTime/RelativeTime.js.map +1 -1
  688. package/dist/components/Resizable/Resizable.cjs +1 -1
  689. package/dist/components/Resizable/Resizable.cjs.map +1 -1
  690. package/dist/components/Resizable/Resizable.js +1 -9
  691. package/dist/components/Resizable/Resizable.js.map +1 -1
  692. package/dist/components/Resizable/Resizable.module.cjs.map +1 -1
  693. package/dist/components/Resizable/Resizable.module.js.map +1 -1
  694. package/dist/components/Responsive/Responsive.cjs.map +1 -1
  695. package/dist/components/Responsive/Responsive.js.map +1 -1
  696. package/dist/components/Reveal/Reveal.cjs.map +1 -1
  697. package/dist/components/Reveal/Reveal.js.map +1 -1
  698. package/dist/components/Reveal/Reveal.module.cjs.map +1 -1
  699. package/dist/components/Reveal/Reveal.module.js.map +1 -1
  700. package/dist/components/Reveal/reveal-threshold.cjs.map +1 -1
  701. package/dist/components/Reveal/reveal-threshold.js.map +1 -1
  702. package/dist/components/SafeArea/SafeArea.cjs.map +1 -1
  703. package/dist/components/SafeArea/SafeArea.js.map +1 -1
  704. package/dist/components/SafeArea/SafeArea.module.cjs.map +1 -1
  705. package/dist/components/SafeArea/SafeArea.module.js.map +1 -1
  706. package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
  707. package/dist/components/Scheduler/Scheduler.js.map +1 -1
  708. package/dist/components/Scheduler/Scheduler.module.cjs.map +1 -1
  709. package/dist/components/Scheduler/Scheduler.module.js.map +1 -1
  710. package/dist/components/Scheduler/scheduler-layout.cjs.map +1 -1
  711. package/dist/components/Scheduler/scheduler-layout.js.map +1 -1
  712. package/dist/components/ScrollArea/ScrollArea.cjs.map +1 -1
  713. package/dist/components/ScrollArea/ScrollArea.js.map +1 -1
  714. package/dist/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
  715. package/dist/components/ScrollArea/ScrollArea.module.js.map +1 -1
  716. package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
  717. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  718. package/dist/components/SearchBar/SearchBar.module.cjs.map +1 -1
  719. package/dist/components/SearchBar/SearchBar.module.js.map +1 -1
  720. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
  721. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  722. package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -1
  723. package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -1
  724. package/dist/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  725. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  726. package/dist/components/SegmentedControl/SegmentedControl.module.cjs.map +1 -1
  727. package/dist/components/SegmentedControl/SegmentedControl.module.js.map +1 -1
  728. package/dist/components/Select/CaretIcon.cjs.map +1 -1
  729. package/dist/components/Select/CaretIcon.js.map +1 -1
  730. package/dist/components/Select/Select.cjs.map +1 -1
  731. package/dist/components/Select/Select.js.map +1 -1
  732. package/dist/components/Select/Select.module.cjs.map +1 -1
  733. package/dist/components/Select/Select.module.js.map +1 -1
  734. package/dist/components/Select/options.cjs.map +1 -1
  735. package/dist/components/Select/options.js.map +1 -1
  736. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  737. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  738. package/dist/components/Sidebar/Sidebar.js +13 -23
  739. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  740. package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
  741. package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
  742. package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
  743. package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
  744. package/dist/components/Sidebar/active-nav-key.cjs.map +1 -1
  745. package/dist/components/Sidebar/active-nav-key.js.map +1 -1
  746. package/dist/components/SignaturePad/SignaturePad.cjs +1 -1
  747. package/dist/components/SignaturePad/SignaturePad.cjs.map +1 -1
  748. package/dist/components/SignaturePad/SignaturePad.js +1 -5
  749. package/dist/components/SignaturePad/SignaturePad.js.map +1 -1
  750. package/dist/components/SignaturePad/SignaturePad.module.cjs.map +1 -1
  751. package/dist/components/SignaturePad/SignaturePad.module.js.map +1 -1
  752. package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
  753. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  754. package/dist/components/Skeleton/Skeleton.module.cjs.map +1 -1
  755. package/dist/components/Skeleton/Skeleton.module.js.map +1 -1
  756. package/dist/components/Slider/Slider.cjs.map +1 -1
  757. package/dist/components/Slider/Slider.js.map +1 -1
  758. package/dist/components/Slider/Slider.module.cjs.map +1 -1
  759. package/dist/components/Slider/Slider.module.js.map +1 -1
  760. package/dist/components/Spacer/Spacer.cjs.map +1 -1
  761. package/dist/components/Spacer/Spacer.js.map +1 -1
  762. package/dist/components/Spacer/Spacer.module.cjs.map +1 -1
  763. package/dist/components/Spacer/Spacer.module.js.map +1 -1
  764. package/dist/components/Sparkline/Sparkline.cjs.map +1 -1
  765. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  766. package/dist/components/Sparkline/Sparkline.module.cjs.map +1 -1
  767. package/dist/components/Sparkline/Sparkline.module.js.map +1 -1
  768. package/dist/components/Sparkline/sparkline-geometry.cjs.map +1 -1
  769. package/dist/components/Sparkline/sparkline-geometry.js.map +1 -1
  770. package/dist/components/Spinner/Spinner.cjs.map +1 -1
  771. package/dist/components/Spinner/Spinner.js.map +1 -1
  772. package/dist/components/Spinner/Spinner.module.cjs.map +1 -1
  773. package/dist/components/Spinner/Spinner.module.js.map +1 -1
  774. package/dist/components/Stat/Stat.cjs.map +1 -1
  775. package/dist/components/Stat/Stat.js.map +1 -1
  776. package/dist/components/Stat/Stat.module.cjs.map +1 -1
  777. package/dist/components/Stat/Stat.module.js.map +1 -1
  778. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  779. package/dist/components/Stepper/Stepper.js.map +1 -1
  780. package/dist/components/Stepper/Stepper.module.cjs.map +1 -1
  781. package/dist/components/Stepper/Stepper.module.js.map +1 -1
  782. package/dist/components/StepperInput/StepperInput.cjs.map +1 -1
  783. package/dist/components/StepperInput/StepperInput.js.map +1 -1
  784. package/dist/components/StepperInput/StepperInput.module.cjs.map +1 -1
  785. package/dist/components/StepperInput/StepperInput.module.js.map +1 -1
  786. package/dist/components/Switch/Switch.cjs.map +1 -1
  787. package/dist/components/Switch/Switch.js.map +1 -1
  788. package/dist/components/Switch/Switch.module.cjs.map +1 -1
  789. package/dist/components/Switch/Switch.module.js.map +1 -1
  790. package/dist/components/SyncStatusBadge/SyncStatusBadge.cjs.map +1 -1
  791. package/dist/components/SyncStatusBadge/SyncStatusBadge.js.map +1 -1
  792. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.cjs.map +1 -1
  793. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.js.map +1 -1
  794. package/dist/components/Table/Table.cjs.map +1 -1
  795. package/dist/components/Table/Table.js.map +1 -1
  796. package/dist/components/Table/Table.module.cjs.map +1 -1
  797. package/dist/components/Table/Table.module.js.map +1 -1
  798. package/dist/components/Tabs/Tabs.cjs.map +1 -1
  799. package/dist/components/Tabs/Tabs.js.map +1 -1
  800. package/dist/components/Tabs/Tabs.module.cjs.map +1 -1
  801. package/dist/components/Tabs/Tabs.module.js.map +1 -1
  802. package/dist/components/Tag/Tag.cjs.map +1 -1
  803. package/dist/components/Tag/Tag.js.map +1 -1
  804. package/dist/components/Tag/Tag.module.cjs.map +1 -1
  805. package/dist/components/Tag/Tag.module.js.map +1 -1
  806. package/dist/components/Textarea/Textarea.cjs.map +1 -1
  807. package/dist/components/Textarea/Textarea.js.map +1 -1
  808. package/dist/components/Textarea/Textarea.module.cjs.map +1 -1
  809. package/dist/components/Textarea/Textarea.module.js.map +1 -1
  810. package/dist/components/TimePicker/TimePicker.cjs.map +1 -1
  811. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  812. package/dist/components/TimePicker/TimePicker.module.cjs.map +1 -1
  813. package/dist/components/TimePicker/TimePicker.module.js.map +1 -1
  814. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  815. package/dist/components/Timeline/Timeline.js.map +1 -1
  816. package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
  817. package/dist/components/Timeline/Timeline.module.js.map +1 -1
  818. package/dist/components/Toast/Toast.module.cjs.map +1 -1
  819. package/dist/components/Toast/Toast.module.js.map +1 -1
  820. package/dist/components/Toast/ToastProvider.cjs.map +1 -1
  821. package/dist/components/Toast/ToastProvider.js.map +1 -1
  822. package/dist/components/Toggle/Toggle.cjs.map +1 -1
  823. package/dist/components/Toggle/Toggle.js.map +1 -1
  824. package/dist/components/Toggle/Toggle.module.cjs.map +1 -1
  825. package/dist/components/Toggle/Toggle.module.js.map +1 -1
  826. package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
  827. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  828. package/dist/components/ToggleGroup/ToggleGroup.module.cjs.map +1 -1
  829. package/dist/components/ToggleGroup/ToggleGroup.module.js.map +1 -1
  830. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  831. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  832. package/dist/components/Tooltip/Tooltip.module.cjs.map +1 -1
  833. package/dist/components/Tooltip/Tooltip.module.js.map +1 -1
  834. package/dist/components/Tour/Tour.cjs +1 -1
  835. package/dist/components/Tour/Tour.cjs.map +1 -1
  836. package/dist/components/Tour/Tour.js +1 -5
  837. package/dist/components/Tour/Tour.js.map +1 -1
  838. package/dist/components/Tour/Tour.module.cjs.map +1 -1
  839. package/dist/components/Tour/Tour.module.js.map +1 -1
  840. package/dist/components/Tour/tour-position.cjs.map +1 -1
  841. package/dist/components/Tour/tour-position.js.map +1 -1
  842. package/dist/components/Transfer/Transfer.cjs.map +1 -1
  843. package/dist/components/Transfer/Transfer.js.map +1 -1
  844. package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
  845. package/dist/components/Transfer/Transfer.module.js.map +1 -1
  846. package/dist/components/Transfer/transfer-state.cjs.map +1 -1
  847. package/dist/components/Transfer/transfer-state.js.map +1 -1
  848. package/dist/components/TreeView/TreeView.cjs.map +1 -1
  849. package/dist/components/TreeView/TreeView.js.map +1 -1
  850. package/dist/components/TreeView/TreeView.module.cjs.map +1 -1
  851. package/dist/components/TreeView/TreeView.module.js.map +1 -1
  852. package/dist/components/TruncateText/TruncateText.cjs.map +1 -1
  853. package/dist/components/TruncateText/TruncateText.js.map +1 -1
  854. package/dist/components/TruncateText/TruncateText.module.cjs.map +1 -1
  855. package/dist/components/TruncateText/TruncateText.module.js.map +1 -1
  856. package/dist/components/UpdatePrompt/UpdatePrompt.cjs.map +1 -1
  857. package/dist/components/UpdatePrompt/UpdatePrompt.js.map +1 -1
  858. package/dist/components/UpdatePrompt/UpdatePrompt.module.cjs.map +1 -1
  859. package/dist/components/UpdatePrompt/UpdatePrompt.module.js.map +1 -1
  860. package/dist/components/VideoPlayer/VideoPlayer.cjs +1 -1
  861. package/dist/components/VideoPlayer/VideoPlayer.cjs.map +1 -1
  862. package/dist/components/VideoPlayer/VideoPlayer.js +1 -7
  863. package/dist/components/VideoPlayer/VideoPlayer.js.map +1 -1
  864. package/dist/components/VideoPlayer/VideoPlayer.module.cjs.map +1 -1
  865. package/dist/components/VideoPlayer/VideoPlayer.module.js.map +1 -1
  866. package/dist/components/VideoPlayer/playback-rates.cjs.map +1 -1
  867. package/dist/components/VideoPlayer/playback-rates.js.map +1 -1
  868. package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
  869. package/dist/components/VirtualList/VirtualList.js.map +1 -1
  870. package/dist/components/VirtualList/VirtualList.module.cjs.map +1 -1
  871. package/dist/components/VirtualList/VirtualList.module.js.map +1 -1
  872. package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
  873. package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
  874. package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
  875. package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
  876. package/dist/components/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
  877. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  878. package/dist/components/VisuallyHidden/VisuallyHidden.module.cjs.map +1 -1
  879. package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -1
  880. package/dist/components/Wizard/Wizard.cjs +1 -1
  881. package/dist/components/Wizard/Wizard.cjs.map +1 -1
  882. package/dist/components/Wizard/Wizard.js +4 -11
  883. package/dist/components/Wizard/Wizard.js.map +1 -1
  884. package/dist/components/Wizard/Wizard.module.cjs.map +1 -1
  885. package/dist/components/Wizard/Wizard.module.js.map +1 -1
  886. package/dist/data/create-data-provider.cjs.map +1 -1
  887. package/dist/data/create-data-provider.js.map +1 -1
  888. package/dist/data/data-provider-context.cjs.map +1 -1
  889. package/dist/data/data-provider-context.js.map +1 -1
  890. package/dist/data/use-resource.cjs.map +1 -1
  891. package/dist/data/use-resource.js.map +1 -1
  892. package/dist/editor/RichTextEditor.cjs.map +1 -1
  893. package/dist/editor/RichTextEditor.js.map +1 -1
  894. package/dist/editor/RichTextEditor.module.cjs.map +1 -1
  895. package/dist/editor/RichTextEditor.module.js.map +1 -1
  896. package/dist/editor.js +1 -2
  897. package/dist/error-boundary/ErrorBoundary.cjs.map +1 -1
  898. package/dist/error-boundary/ErrorBoundary.js.map +1 -1
  899. package/dist/error-boundary/use-error-handler.cjs.map +1 -1
  900. package/dist/error-boundary/use-error-handler.js.map +1 -1
  901. package/dist/feature-flags/FeatureFlagsProvider.cjs.map +1 -1
  902. package/dist/feature-flags/FeatureFlagsProvider.js.map +1 -1
  903. package/dist/feature-flags/growthbook-adapter.cjs.map +1 -1
  904. package/dist/feature-flags/growthbook-adapter.js.map +1 -1
  905. package/dist/feature-flags/in-memory-adapter.cjs.map +1 -1
  906. package/dist/feature-flags/in-memory-adapter.js.map +1 -1
  907. package/dist/feature-flags/launchdarkly-adapter.cjs.map +1 -1
  908. package/dist/feature-flags/launchdarkly-adapter.js.map +1 -1
  909. package/dist/forms/FormField.cjs.map +1 -1
  910. package/dist/forms/FormField.js.map +1 -1
  911. package/dist/forms/br-validators.cjs.map +1 -1
  912. package/dist/forms/br-validators.js.map +1 -1
  913. package/dist/forms/masked-inputs.cjs.map +1 -1
  914. package/dist/forms/masked-inputs.js.map +1 -1
  915. package/dist/forms/use-viacep.cjs.map +1 -1
  916. package/dist/forms/use-viacep.js.map +1 -1
  917. package/dist/forms/use-zod-form.cjs.map +1 -1
  918. package/dist/forms/use-zod-form.js.map +1 -1
  919. package/dist/forms/validate-form.cjs.map +1 -1
  920. package/dist/forms/validate-form.js.map +1 -1
  921. package/dist/forms/zod-resolver.cjs.map +1 -1
  922. package/dist/forms/zod-resolver.js.map +1 -1
  923. package/dist/geo/TrajectoryMap.cjs.map +1 -1
  924. package/dist/geo/TrajectoryMap.js.map +1 -1
  925. package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
  926. package/dist/geo/TrajectoryMap.module.js.map +1 -1
  927. package/dist/geo/bounds.cjs.map +1 -1
  928. package/dist/geo/bounds.js.map +1 -1
  929. package/dist/geo/create-position-tracker.cjs +1 -1
  930. package/dist/geo/create-position-tracker.cjs.map +1 -1
  931. package/dist/geo/create-position-tracker.js +1 -7
  932. package/dist/geo/create-position-tracker.js.map +1 -1
  933. package/dist/geo/distance.cjs.map +1 -1
  934. package/dist/geo/distance.js.map +1 -1
  935. package/dist/geo/estimate.cjs.map +1 -1
  936. package/dist/geo/estimate.js.map +1 -1
  937. package/dist/geo/leaflet-map.cjs.map +1 -1
  938. package/dist/geo/leaflet-map.js.map +1 -1
  939. package/dist/geo/projection.cjs.map +1 -1
  940. package/dist/geo/projection.js.map +1 -1
  941. package/dist/geo/routing.cjs.map +1 -1
  942. package/dist/geo/routing.js.map +1 -1
  943. package/dist/geo/types.cjs.map +1 -1
  944. package/dist/geo/types.js.map +1 -1
  945. package/dist/geo/use-position-tracker.cjs.map +1 -1
  946. package/dist/geo/use-position-tracker.js.map +1 -1
  947. package/dist/hooks/pwa-env.cjs.map +1 -1
  948. package/dist/hooks/pwa-env.js.map +1 -1
  949. package/dist/hooks/tab-sequence.cjs.map +1 -1
  950. package/dist/hooks/tab-sequence.js.map +1 -1
  951. package/dist/hooks/use-announce.cjs +1 -1
  952. package/dist/hooks/use-announce.cjs.map +1 -1
  953. package/dist/hooks/use-announce.js +2 -2
  954. package/dist/hooks/use-announce.js.map +1 -1
  955. package/dist/hooks/use-async.cjs.map +1 -1
  956. package/dist/hooks/use-async.js.map +1 -1
  957. package/dist/hooks/use-before-install-prompt.cjs.map +1 -1
  958. package/dist/hooks/use-before-install-prompt.js.map +1 -1
  959. package/dist/hooks/use-breakpoint.cjs.map +1 -1
  960. package/dist/hooks/use-breakpoint.js.map +1 -1
  961. package/dist/hooks/use-click-outside.cjs.map +1 -1
  962. package/dist/hooks/use-click-outside.js.map +1 -1
  963. package/dist/hooks/use-client-filter.cjs.map +1 -1
  964. package/dist/hooks/use-client-filter.js.map +1 -1
  965. package/dist/hooks/use-clipboard.cjs.map +1 -1
  966. package/dist/hooks/use-clipboard.js.map +1 -1
  967. package/dist/hooks/use-countdown.cjs.map +1 -1
  968. package/dist/hooks/use-countdown.js.map +1 -1
  969. package/dist/hooks/use-counter.cjs.map +1 -1
  970. package/dist/hooks/use-counter.js.map +1 -1
  971. package/dist/hooks/use-debounce.cjs.map +1 -1
  972. package/dist/hooks/use-debounce.js.map +1 -1
  973. package/dist/hooks/use-deep-memo.cjs.map +1 -1
  974. package/dist/hooks/use-deep-memo.js.map +1 -1
  975. package/dist/hooks/use-disclosure.cjs.map +1 -1
  976. package/dist/hooks/use-disclosure.js.map +1 -1
  977. package/dist/hooks/use-document-title.cjs.map +1 -1
  978. package/dist/hooks/use-document-title.js.map +1 -1
  979. package/dist/hooks/use-document-visibility.cjs.map +1 -1
  980. package/dist/hooks/use-document-visibility.js.map +1 -1
  981. package/dist/hooks/use-draft-filters.cjs.map +1 -1
  982. package/dist/hooks/use-draft-filters.js.map +1 -1
  983. package/dist/hooks/use-event-listener.cjs.map +1 -1
  984. package/dist/hooks/use-event-listener.js.map +1 -1
  985. package/dist/hooks/use-favicon.cjs.map +1 -1
  986. package/dist/hooks/use-favicon.js.map +1 -1
  987. package/dist/hooks/use-focus-trap.cjs.map +1 -1
  988. package/dist/hooks/use-focus-trap.js.map +1 -1
  989. package/dist/hooks/use-fullscreen-element.cjs.map +1 -1
  990. package/dist/hooks/use-fullscreen-element.js.map +1 -1
  991. package/dist/hooks/use-fullscreen.cjs +1 -1
  992. package/dist/hooks/use-fullscreen.cjs.map +1 -1
  993. package/dist/hooks/use-fullscreen.js +7 -23
  994. package/dist/hooks/use-fullscreen.js.map +1 -1
  995. package/dist/hooks/use-geolocation.cjs.map +1 -1
  996. package/dist/hooks/use-geolocation.js.map +1 -1
  997. package/dist/hooks/use-hover.cjs.map +1 -1
  998. package/dist/hooks/use-hover.js.map +1 -1
  999. package/dist/hooks/use-idle.cjs.map +1 -1
  1000. package/dist/hooks/use-idle.js.map +1 -1
  1001. package/dist/hooks/use-install-prompt.cjs +1 -1
  1002. package/dist/hooks/use-install-prompt.cjs.map +1 -1
  1003. package/dist/hooks/use-install-prompt.js +1 -1
  1004. package/dist/hooks/use-install-prompt.js.map +1 -1
  1005. package/dist/hooks/use-intersection-observer.cjs.map +1 -1
  1006. package/dist/hooks/use-intersection-observer.js.map +1 -1
  1007. package/dist/hooks/use-interval.cjs.map +1 -1
  1008. package/dist/hooks/use-interval.js.map +1 -1
  1009. package/dist/hooks/use-is-first-render.cjs.map +1 -1
  1010. package/dist/hooks/use-is-first-render.js.map +1 -1
  1011. package/dist/hooks/use-keyboard-shortcut.cjs.map +1 -1
  1012. package/dist/hooks/use-keyboard-shortcut.js.map +1 -1
  1013. package/dist/hooks/use-latest-ref.cjs.map +1 -1
  1014. package/dist/hooks/use-latest-ref.js.map +1 -1
  1015. package/dist/hooks/use-list-state.cjs.map +1 -1
  1016. package/dist/hooks/use-list-state.js.map +1 -1
  1017. package/dist/hooks/use-local-storage.cjs +1 -1
  1018. package/dist/hooks/use-local-storage.cjs.map +1 -1
  1019. package/dist/hooks/use-local-storage.js +2 -5
  1020. package/dist/hooks/use-local-storage.js.map +1 -1
  1021. package/dist/hooks/use-long-press-handlers.cjs.map +1 -1
  1022. package/dist/hooks/use-long-press-handlers.js.map +1 -1
  1023. package/dist/hooks/use-long-press.cjs.map +1 -1
  1024. package/dist/hooks/use-long-press.js.map +1 -1
  1025. package/dist/hooks/use-map.cjs.map +1 -1
  1026. package/dist/hooks/use-map.js.map +1 -1
  1027. package/dist/hooks/use-media-devices.cjs.map +1 -1
  1028. package/dist/hooks/use-media-devices.js.map +1 -1
  1029. package/dist/hooks/use-media-permission.cjs +1 -1
  1030. package/dist/hooks/use-media-permission.cjs.map +1 -1
  1031. package/dist/hooks/use-media-permission.js +2 -5
  1032. package/dist/hooks/use-media-permission.js.map +1 -1
  1033. package/dist/hooks/use-media-query.cjs.map +1 -1
  1034. package/dist/hooks/use-media-query.js.map +1 -1
  1035. package/dist/hooks/use-object-url.cjs.map +1 -1
  1036. package/dist/hooks/use-object-url.js.map +1 -1
  1037. package/dist/hooks/use-online.cjs.map +1 -1
  1038. package/dist/hooks/use-online.js.map +1 -1
  1039. package/dist/hooks/use-pagination.cjs.map +1 -1
  1040. package/dist/hooks/use-pagination.js.map +1 -1
  1041. package/dist/hooks/use-previous.cjs.map +1 -1
  1042. package/dist/hooks/use-previous.js.map +1 -1
  1043. package/dist/hooks/use-push-to-talk.cjs.map +1 -1
  1044. package/dist/hooks/use-push-to-talk.js.map +1 -1
  1045. package/dist/hooks/use-queue.cjs.map +1 -1
  1046. package/dist/hooks/use-queue.js.map +1 -1
  1047. package/dist/hooks/use-resize-observer.cjs.map +1 -1
  1048. package/dist/hooks/use-resize-observer.js.map +1 -1
  1049. package/dist/hooks/use-scroll-lock.cjs.map +1 -1
  1050. package/dist/hooks/use-scroll-lock.js.map +1 -1
  1051. package/dist/hooks/use-scroll-overflow.cjs.map +1 -1
  1052. package/dist/hooks/use-scroll-overflow.js.map +1 -1
  1053. package/dist/hooks/use-service-worker-update.cjs.map +1 -1
  1054. package/dist/hooks/use-service-worker-update.js.map +1 -1
  1055. package/dist/hooks/use-set.cjs.map +1 -1
  1056. package/dist/hooks/use-set.js.map +1 -1
  1057. package/dist/hooks/use-sortable.cjs.map +1 -1
  1058. package/dist/hooks/use-sortable.js.map +1 -1
  1059. package/dist/hooks/use-stable-callback.cjs.map +1 -1
  1060. package/dist/hooks/use-stable-callback.js.map +1 -1
  1061. package/dist/hooks/use-storage-estimate.cjs.map +1 -1
  1062. package/dist/hooks/use-storage-estimate.js.map +1 -1
  1063. package/dist/hooks/use-throttle.cjs.map +1 -1
  1064. package/dist/hooks/use-throttle.js.map +1 -1
  1065. package/dist/hooks/use-timeout.cjs.map +1 -1
  1066. package/dist/hooks/use-timeout.js.map +1 -1
  1067. package/dist/hooks/use-toggle.cjs.map +1 -1
  1068. package/dist/hooks/use-toggle.js.map +1 -1
  1069. package/dist/hooks/use-typewriter.cjs.map +1 -1
  1070. package/dist/hooks/use-typewriter.js.map +1 -1
  1071. package/dist/hooks/use-window-size.cjs.map +1 -1
  1072. package/dist/hooks/use-window-size.js.map +1 -1
  1073. package/dist/http/api-client.cjs.map +1 -1
  1074. package/dist/http/api-client.js.map +1 -1
  1075. package/dist/http/build-url.cjs.map +1 -1
  1076. package/dist/http/build-url.js.map +1 -1
  1077. package/dist/http/credential-scope.cjs.map +1 -1
  1078. package/dist/http/credential-scope.js.map +1 -1
  1079. package/dist/http/csrf.cjs.map +1 -1
  1080. package/dist/http/csrf.js.map +1 -1
  1081. package/dist/http/decode-response.cjs.map +1 -1
  1082. package/dist/http/decode-response.js.map +1 -1
  1083. package/dist/http/describe-api-error.cjs.map +1 -1
  1084. package/dist/http/describe-api-error.js.map +1 -1
  1085. package/dist/http/errors.cjs.map +1 -1
  1086. package/dist/http/errors.js.map +1 -1
  1087. package/dist/http/idempotency.cjs.map +1 -1
  1088. package/dist/http/idempotency.js.map +1 -1
  1089. package/dist/http/parse-response.cjs.map +1 -1
  1090. package/dist/http/parse-response.js.map +1 -1
  1091. package/dist/http/resumable-upload.cjs.map +1 -1
  1092. package/dist/http/resumable-upload.js.map +1 -1
  1093. package/dist/http/retry.cjs.map +1 -1
  1094. package/dist/http/retry.js.map +1 -1
  1095. package/dist/http/timeout.cjs.map +1 -1
  1096. package/dist/http/timeout.js.map +1 -1
  1097. package/dist/http/upload-with-progress.cjs +1 -1
  1098. package/dist/http/upload-with-progress.cjs.map +1 -1
  1099. package/dist/http/upload-with-progress.js +2 -7
  1100. package/dist/http/upload-with-progress.js.map +1 -1
  1101. package/dist/http/use-describe-api-error.cjs.map +1 -1
  1102. package/dist/http/use-describe-api-error.js.map +1 -1
  1103. package/dist/http/use-poll.cjs +1 -1
  1104. package/dist/http/use-poll.cjs.map +1 -1
  1105. package/dist/http/use-poll.js +2 -5
  1106. package/dist/http/use-poll.js.map +1 -1
  1107. package/dist/i18n/I18nProvider.cjs.map +1 -1
  1108. package/dist/i18n/I18nProvider.js.map +1 -1
  1109. package/dist/i18n/create-i18n.cjs.map +1 -1
  1110. package/dist/i18n/create-i18n.js.map +1 -1
  1111. package/dist/icons/Icon.cjs.map +1 -1
  1112. package/dist/icons/Icon.js.map +1 -1
  1113. package/dist/icons/IconPicker.cjs.map +1 -1
  1114. package/dist/icons/IconPicker.js.map +1 -1
  1115. package/dist/icons/IconPicker.module.cjs.map +1 -1
  1116. package/dist/icons/IconPicker.module.js.map +1 -1
  1117. package/dist/icons/IconProvider.cjs.map +1 -1
  1118. package/dist/icons/IconProvider.js.map +1 -1
  1119. package/dist/icons/alias.cjs.map +1 -1
  1120. package/dist/icons/alias.js.map +1 -1
  1121. package/dist/icons/generated/aliases.cjs.map +1 -1
  1122. package/dist/icons/generated/aliases.js.map +1 -1
  1123. package/dist/icons/generated/icon-names.cjs.map +1 -1
  1124. package/dist/icons/generated/icon-names.js.map +1 -1
  1125. package/dist/icons/generated/loaders.cjs.map +1 -1
  1126. package/dist/icons/generated/loaders.js.map +1 -1
  1127. package/dist/icons/generated/shard-00.cjs.map +1 -1
  1128. package/dist/icons/generated/shard-00.js.map +1 -1
  1129. package/dist/icons/generated/shard-01.cjs.map +1 -1
  1130. package/dist/icons/generated/shard-01.js.map +1 -1
  1131. package/dist/icons/generated/shard-02.cjs.map +1 -1
  1132. package/dist/icons/generated/shard-02.js.map +1 -1
  1133. package/dist/icons/generated/shard-03.cjs.map +1 -1
  1134. package/dist/icons/generated/shard-03.js.map +1 -1
  1135. package/dist/icons/generated/shard-04.cjs.map +1 -1
  1136. package/dist/icons/generated/shard-04.js.map +1 -1
  1137. package/dist/icons/generated/shard-05.cjs.map +1 -1
  1138. package/dist/icons/generated/shard-05.js.map +1 -1
  1139. package/dist/icons/generated/shard-06.cjs.map +1 -1
  1140. package/dist/icons/generated/shard-06.js.map +1 -1
  1141. package/dist/icons/generated/shard-07.cjs.map +1 -1
  1142. package/dist/icons/generated/shard-07.js.map +1 -1
  1143. package/dist/icons/generated/shard-08.cjs.map +1 -1
  1144. package/dist/icons/generated/shard-08.js.map +1 -1
  1145. package/dist/icons/generated/shard-09.cjs.map +1 -1
  1146. package/dist/icons/generated/shard-09.js.map +1 -1
  1147. package/dist/icons/generated/shard-10.cjs.map +1 -1
  1148. package/dist/icons/generated/shard-10.js.map +1 -1
  1149. package/dist/icons/generated/shard-11.cjs.map +1 -1
  1150. package/dist/icons/generated/shard-11.js.map +1 -1
  1151. package/dist/icons/generated/shard-12.cjs.map +1 -1
  1152. package/dist/icons/generated/shard-12.js.map +1 -1
  1153. package/dist/icons/generated/shard-13.cjs.map +1 -1
  1154. package/dist/icons/generated/shard-13.js.map +1 -1
  1155. package/dist/icons/generated/shard-14.cjs.map +1 -1
  1156. package/dist/icons/generated/shard-14.js.map +1 -1
  1157. package/dist/icons/generated/shard-15.cjs.map +1 -1
  1158. package/dist/icons/generated/shard-15.js.map +1 -1
  1159. package/dist/icons/generated/shard-16.cjs.map +1 -1
  1160. package/dist/icons/generated/shard-16.js.map +1 -1
  1161. package/dist/icons/generated/shard-17.cjs.map +1 -1
  1162. package/dist/icons/generated/shard-17.js.map +1 -1
  1163. package/dist/icons/generated/shard-18.cjs.map +1 -1
  1164. package/dist/icons/generated/shard-18.js.map +1 -1
  1165. package/dist/icons/generated/shard-19.cjs.map +1 -1
  1166. package/dist/icons/generated/shard-19.js.map +1 -1
  1167. package/dist/icons/generated/shard-20.cjs.map +1 -1
  1168. package/dist/icons/generated/shard-20.js.map +1 -1
  1169. package/dist/icons/generated/shard-21.cjs.map +1 -1
  1170. package/dist/icons/generated/shard-21.js.map +1 -1
  1171. package/dist/icons/generated/shard-22.cjs.map +1 -1
  1172. package/dist/icons/generated/shard-22.js.map +1 -1
  1173. package/dist/icons/generated/shard-23.cjs.map +1 -1
  1174. package/dist/icons/generated/shard-23.js.map +1 -1
  1175. package/dist/icons/generated/shard-24.cjs.map +1 -1
  1176. package/dist/icons/generated/shard-24.js.map +1 -1
  1177. package/dist/icons/generated/shard-25.cjs.map +1 -1
  1178. package/dist/icons/generated/shard-25.js.map +1 -1
  1179. package/dist/icons/generated/shard-26.cjs.map +1 -1
  1180. package/dist/icons/generated/shard-26.js.map +1 -1
  1181. package/dist/icons/generated/shard-27.cjs.map +1 -1
  1182. package/dist/icons/generated/shard-27.js.map +1 -1
  1183. package/dist/icons/generated/shard-28.cjs.map +1 -1
  1184. package/dist/icons/generated/shard-28.js.map +1 -1
  1185. package/dist/icons/generated/shard-29.cjs.map +1 -1
  1186. package/dist/icons/generated/shard-29.js.map +1 -1
  1187. package/dist/icons/generated/shard-30.cjs.map +1 -1
  1188. package/dist/icons/generated/shard-30.js.map +1 -1
  1189. package/dist/icons/generated/shard-31.cjs.map +1 -1
  1190. package/dist/icons/generated/shard-31.js.map +1 -1
  1191. package/dist/icons/generated/shard-32.cjs.map +1 -1
  1192. package/dist/icons/generated/shard-32.js.map +1 -1
  1193. package/dist/icons/generated/shard-33.cjs.map +1 -1
  1194. package/dist/icons/generated/shard-33.js.map +1 -1
  1195. package/dist/icons/generated/shard-34.cjs.map +1 -1
  1196. package/dist/icons/generated/shard-34.js.map +1 -1
  1197. package/dist/icons/generated/shard-35.cjs.map +1 -1
  1198. package/dist/icons/generated/shard-35.js.map +1 -1
  1199. package/dist/icons/generated/shard-36.cjs.map +1 -1
  1200. package/dist/icons/generated/shard-36.js.map +1 -1
  1201. package/dist/icons/generated/shard-37.cjs.map +1 -1
  1202. package/dist/icons/generated/shard-37.js.map +1 -1
  1203. package/dist/icons/generated/shard-38.cjs.map +1 -1
  1204. package/dist/icons/generated/shard-38.js.map +1 -1
  1205. package/dist/icons/generated/shard-39.cjs.map +1 -1
  1206. package/dist/icons/generated/shard-39.js.map +1 -1
  1207. package/dist/icons/generated/shard-40.cjs.map +1 -1
  1208. package/dist/icons/generated/shard-40.js.map +1 -1
  1209. package/dist/icons/generated/shard-41.cjs.map +1 -1
  1210. package/dist/icons/generated/shard-41.js.map +1 -1
  1211. package/dist/icons/generated/shard-42.cjs.map +1 -1
  1212. package/dist/icons/generated/shard-42.js.map +1 -1
  1213. package/dist/icons/generated/shard-43.cjs.map +1 -1
  1214. package/dist/icons/generated/shard-43.js.map +1 -1
  1215. package/dist/icons/generated/shard-44.cjs.map +1 -1
  1216. package/dist/icons/generated/shard-44.js.map +1 -1
  1217. package/dist/icons/generated/shard-45.cjs.map +1 -1
  1218. package/dist/icons/generated/shard-45.js.map +1 -1
  1219. package/dist/icons/icon-context.cjs.map +1 -1
  1220. package/dist/icons/icon-context.js.map +1 -1
  1221. package/dist/icons/is-icon-name.cjs.map +1 -1
  1222. package/dist/icons/is-icon-name.js.map +1 -1
  1223. package/dist/icons/material-symbols.cjs.map +1 -1
  1224. package/dist/icons/material-symbols.js.map +1 -1
  1225. package/dist/icons/normalize-icon-name.cjs.map +1 -1
  1226. package/dist/icons/normalize-icon-name.js.map +1 -1
  1227. package/dist/icons/shard-cache.cjs +1 -1
  1228. package/dist/icons/shard-cache.cjs.map +1 -1
  1229. package/dist/icons/shard-cache.js +2 -5
  1230. package/dist/icons/shard-cache.js.map +1 -1
  1231. package/dist/icons/use-icon.cjs.map +1 -1
  1232. package/dist/icons/use-icon.js.map +1 -1
  1233. package/dist/icons/validate-icon-name.cjs.map +1 -1
  1234. package/dist/icons/validate-icon-name.js.map +1 -1
  1235. package/dist/icons-virtual.cjs.map +1 -1
  1236. package/dist/icons-virtual.js.map +1 -1
  1237. package/dist/imaging/canvas.cjs.map +1 -1
  1238. package/dist/imaging/canvas.js.map +1 -1
  1239. package/dist/imaging/compress.cjs.map +1 -1
  1240. package/dist/imaging/compress.js.map +1 -1
  1241. package/dist/imaging/decode.cjs.map +1 -1
  1242. package/dist/imaging/decode.js.map +1 -1
  1243. package/dist/imaging/encode.cjs.map +1 -1
  1244. package/dist/imaging/encode.js.map +1 -1
  1245. package/dist/imaging/exceptions.cjs.map +1 -1
  1246. package/dist/imaging/exceptions.js.map +1 -1
  1247. package/dist/imaging/frame.cjs.map +1 -1
  1248. package/dist/imaging/frame.js.map +1 -1
  1249. package/dist/imaging/thumbnails.cjs.map +1 -1
  1250. package/dist/imaging/thumbnails.js.map +1 -1
  1251. package/dist/imaging/transform.cjs.map +1 -1
  1252. package/dist/imaging/transform.js.map +1 -1
  1253. package/dist/imaging/use-image-processing.cjs.map +1 -1
  1254. package/dist/imaging/use-image-processing.js.map +1 -1
  1255. package/dist/logger/logger.cjs.map +1 -1
  1256. package/dist/logger/logger.js.map +1 -1
  1257. package/dist/neural.cjs.map +1 -1
  1258. package/dist/neural.js.map +1 -1
  1259. package/dist/oauth/GoogleSignIn.cjs +1 -1
  1260. package/dist/oauth/GoogleSignIn.cjs.map +1 -1
  1261. package/dist/oauth/GoogleSignIn.js +6 -9
  1262. package/dist/oauth/GoogleSignIn.js.map +1 -1
  1263. package/dist/oauth/callback.cjs.map +1 -1
  1264. package/dist/oauth/callback.js.map +1 -1
  1265. package/dist/oauth/use-oauth-callback.cjs.map +1 -1
  1266. package/dist/oauth/use-oauth-callback.js.map +1 -1
  1267. package/dist/offline/conflict.cjs.map +1 -1
  1268. package/dist/offline/conflict.js.map +1 -1
  1269. package/dist/offline/create-offline-database.cjs.map +1 -1
  1270. package/dist/offline/create-offline-database.js.map +1 -1
  1271. package/dist/offline/create-offline-store.cjs +1 -1
  1272. package/dist/offline/create-offline-store.cjs.map +1 -1
  1273. package/dist/offline/create-offline-store.js +1 -5
  1274. package/dist/offline/create-offline-store.js.map +1 -1
  1275. package/dist/offline/create-offline-sync.cjs +1 -1
  1276. package/dist/offline/create-offline-sync.cjs.map +1 -1
  1277. package/dist/offline/create-offline-sync.js +9 -14
  1278. package/dist/offline/create-offline-sync.js.map +1 -1
  1279. package/dist/offline/use-offline-sync.cjs.map +1 -1
  1280. package/dist/offline/use-offline-sync.js.map +1 -1
  1281. package/dist/perf/cache-size.cjs.map +1 -1
  1282. package/dist/perf/cache-size.js.map +1 -1
  1283. package/dist/perf/device.cjs.map +1 -1
  1284. package/dist/perf/device.js.map +1 -1
  1285. package/dist/perf/format.cjs.map +1 -1
  1286. package/dist/perf/format.js.map +1 -1
  1287. package/dist/perf/profiler.cjs.map +1 -1
  1288. package/dist/perf/profiler.js.map +1 -1
  1289. package/dist/push/use-push-subscription.cjs.map +1 -1
  1290. package/dist/push/use-push-subscription.js.map +1 -1
  1291. package/dist/push/utils.cjs.map +1 -1
  1292. package/dist/push/utils.js.map +1 -1
  1293. package/dist/push/web-push-client.cjs.map +1 -1
  1294. package/dist/push/web-push-client.js.map +1 -1
  1295. package/dist/query/QueryProvider.cjs.map +1 -1
  1296. package/dist/query/QueryProvider.js.map +1 -1
  1297. package/dist/query/constants.cjs.map +1 -1
  1298. package/dist/query/constants.js.map +1 -1
  1299. package/dist/query/create-query-keys.cjs.map +1 -1
  1300. package/dist/query/create-query-keys.js.map +1 -1
  1301. package/dist/query/foreign-client-warning.cjs.map +1 -1
  1302. package/dist/query/foreign-client-warning.js.map +1 -1
  1303. package/dist/query/offline-persistence.cjs +1 -1
  1304. package/dist/query/offline-persistence.cjs.map +1 -1
  1305. package/dist/query/offline-persistence.js +2 -10
  1306. package/dist/query/offline-persistence.js.map +1 -1
  1307. package/dist/query/optimistic.cjs.map +1 -1
  1308. package/dist/query/optimistic.js.map +1 -1
  1309. package/dist/query/pagination.cjs.map +1 -1
  1310. package/dist/query/pagination.js.map +1 -1
  1311. package/dist/query/retry-policy.cjs.map +1 -1
  1312. package/dist/query/retry-policy.js.map +1 -1
  1313. package/dist/query/use-cursor-query.cjs.map +1 -1
  1314. package/dist/query/use-cursor-query.js.map +1 -1
  1315. package/dist/query/use-offline-mutation.cjs.map +1 -1
  1316. package/dist/query/use-offline-mutation.js.map +1 -1
  1317. package/dist/query/use-paginated-query.cjs.map +1 -1
  1318. package/dist/query/use-paginated-query.js.map +1 -1
  1319. package/dist/router/AppRouter.cjs.map +1 -1
  1320. package/dist/router/AppRouter.js.map +1 -1
  1321. package/dist/router/RouteGuard.cjs.map +1 -1
  1322. package/dist/router/RouteGuard.js.map +1 -1
  1323. package/dist/router/index.js +2 -2
  1324. package/dist/share/share-or-download.cjs.map +1 -1
  1325. package/dist/share/share-or-download.js.map +1 -1
  1326. package/dist/share/share.cjs.map +1 -1
  1327. package/dist/share/share.js.map +1 -1
  1328. package/dist/sse/create-event-stream.cjs.map +1 -1
  1329. package/dist/sse/create-event-stream.js.map +1 -1
  1330. package/dist/sse/use-event-stream.cjs.map +1 -1
  1331. package/dist/sse/use-event-stream.js.map +1 -1
  1332. package/dist/store/create-selectors.cjs.map +1 -1
  1333. package/dist/store/create-selectors.js.map +1 -1
  1334. package/dist/store/create-store.cjs.map +1 -1
  1335. package/dist/store/create-store.js.map +1 -1
  1336. package/dist/sw/background-sync.cjs.map +1 -1
  1337. package/dist/sw/background-sync.js.map +1 -1
  1338. package/dist/sw/cache-inspect.cjs.map +1 -1
  1339. package/dist/sw/cache-inspect.js.map +1 -1
  1340. package/dist/sw/cache.cjs +1 -1
  1341. package/dist/sw/cache.cjs.map +1 -1
  1342. package/dist/sw/cache.js +2 -6
  1343. package/dist/sw/cache.js.map +1 -1
  1344. package/dist/sw/create-push-handler.cjs.map +1 -1
  1345. package/dist/sw/create-push-handler.js.map +1 -1
  1346. package/dist/sw/credential-headers.cjs.map +1 -1
  1347. package/dist/sw/credential-headers.js.map +1 -1
  1348. package/dist/sw/periodic-sync.cjs.map +1 -1
  1349. package/dist/sw/periodic-sync.js.map +1 -1
  1350. package/dist/sw/register-service-worker.cjs.map +1 -1
  1351. package/dist/sw/register-service-worker.js.map +1 -1
  1352. package/dist/sw/session-data.cjs.map +1 -1
  1353. package/dist/sw/session-data.js.map +1 -1
  1354. package/dist/tabular/assets.cjs.map +1 -1
  1355. package/dist/tabular/assets.js.map +1 -1
  1356. package/dist/tabular/cache.cjs.map +1 -1
  1357. package/dist/tabular/cache.js.map +1 -1
  1358. package/dist/tabular/compact.cjs.map +1 -1
  1359. package/dist/tabular/compact.js.map +1 -1
  1360. package/dist/tabular/exceptions.cjs.map +1 -1
  1361. package/dist/tabular/exceptions.js.map +1 -1
  1362. package/dist/tabular/manifest.cjs.map +1 -1
  1363. package/dist/tabular/manifest.js.map +1 -1
  1364. package/dist/tabular/predictor.cjs.map +1 -1
  1365. package/dist/tabular/predictor.js.map +1 -1
  1366. package/dist/tabular/use-tabular-predictor.cjs.map +1 -1
  1367. package/dist/tabular/use-tabular-predictor.js.map +1 -1
  1368. package/dist/telemetry/TelemetryProvider.cjs.map +1 -1
  1369. package/dist/telemetry/TelemetryProvider.js.map +1 -1
  1370. package/dist/telemetry/app-error-adapter.cjs.map +1 -1
  1371. package/dist/telemetry/app-error-adapter.js.map +1 -1
  1372. package/dist/telemetry/app-error-queue.cjs.map +1 -1
  1373. package/dist/telemetry/app-error-queue.js.map +1 -1
  1374. package/dist/telemetry/app-error-reporter.cjs.map +1 -1
  1375. package/dist/telemetry/app-error-reporter.js.map +1 -1
  1376. package/dist/telemetry/app-error-schema.cjs.map +1 -1
  1377. package/dist/telemetry/app-error-schema.js.map +1 -1
  1378. package/dist/telemetry/app-error-transport.cjs.map +1 -1
  1379. package/dist/telemetry/app-error-transport.js.map +1 -1
  1380. package/dist/telemetry/console-adapter.cjs.map +1 -1
  1381. package/dist/telemetry/console-adapter.js.map +1 -1
  1382. package/dist/telemetry/describe-app-error.cjs.map +1 -1
  1383. package/dist/telemetry/describe-app-error.js.map +1 -1
  1384. package/dist/telemetry/posthog-adapter.cjs +1 -1
  1385. package/dist/telemetry/posthog-adapter.cjs.map +1 -1
  1386. package/dist/telemetry/posthog-adapter.js +1 -5
  1387. package/dist/telemetry/posthog-adapter.js.map +1 -1
  1388. package/dist/telemetry/sentry-adapter.cjs.map +1 -1
  1389. package/dist/telemetry/sentry-adapter.js.map +1 -1
  1390. package/dist/tempest-react-sdk.cjs +1 -1
  1391. package/dist/tempest-react-sdk.d.ts +234 -3
  1392. package/dist/tempest-react-sdk.js +85 -85
  1393. package/dist/testing/create-mock-handlers.cjs.map +1 -1
  1394. package/dist/testing/create-mock-handlers.js.map +1 -1
  1395. package/dist/testing.js +1 -2
  1396. package/dist/theme/ThemeProvider.cjs.map +1 -1
  1397. package/dist/theme/ThemeProvider.js.map +1 -1
  1398. package/dist/theme/apply-theme.cjs.map +1 -1
  1399. package/dist/theme/apply-theme.js.map +1 -1
  1400. package/dist/theme/color.cjs.map +1 -1
  1401. package/dist/theme/color.js.map +1 -1
  1402. package/dist/theme/create-theme.cjs.map +1 -1
  1403. package/dist/theme/create-theme.js.map +1 -1
  1404. package/dist/theme/data-viz-ramps.cjs.map +1 -1
  1405. package/dist/theme/data-viz-ramps.js.map +1 -1
  1406. package/dist/theme/initial-theme.cjs.map +1 -1
  1407. package/dist/theme/initial-theme.js.map +1 -1
  1408. package/dist/theme/inverse-render.cjs.map +1 -1
  1409. package/dist/theme/inverse-render.js.map +1 -1
  1410. package/dist/theme/inverse-restore.cjs.map +1 -1
  1411. package/dist/theme/inverse-restore.js.map +1 -1
  1412. package/dist/theme/inverse-surface.cjs.map +1 -1
  1413. package/dist/theme/inverse-surface.js.map +1 -1
  1414. package/dist/theme/status-tokens.cjs.map +1 -1
  1415. package/dist/theme/status-tokens.js.map +1 -1
  1416. package/dist/theme/theme-presets.cjs.map +1 -1
  1417. package/dist/theme/theme-presets.js.map +1 -1
  1418. package/dist/utils/absent.cjs.map +1 -1
  1419. package/dist/utils/absent.js.map +1 -1
  1420. package/dist/utils/arrays.cjs.map +1 -1
  1421. package/dist/utils/arrays.js.map +1 -1
  1422. package/dist/utils/base64.cjs.map +1 -1
  1423. package/dist/utils/base64.js.map +1 -1
  1424. package/dist/utils/cn.cjs.map +1 -1
  1425. package/dist/utils/cn.js.map +1 -1
  1426. package/dist/utils/compare-values.cjs.map +1 -1
  1427. package/dist/utils/compare-values.js.map +1 -1
  1428. package/dist/utils/compressed-storage.cjs.map +1 -1
  1429. package/dist/utils/compressed-storage.js.map +1 -1
  1430. package/dist/utils/csv.cjs.map +1 -1
  1431. package/dist/utils/csv.js.map +1 -1
  1432. package/dist/utils/dev-mode.cjs.map +1 -1
  1433. package/dist/utils/dev-mode.js.map +1 -1
  1434. package/dist/utils/duplicate-instance.cjs.map +1 -1
  1435. package/dist/utils/duplicate-instance.js.map +1 -1
  1436. package/dist/utils/format.cjs.map +1 -1
  1437. package/dist/utils/format.js.map +1 -1
  1438. package/dist/utils/functions.cjs +1 -1
  1439. package/dist/utils/functions.cjs.map +1 -1
  1440. package/dist/utils/functions.js +1 -1
  1441. package/dist/utils/functions.js.map +1 -1
  1442. package/dist/utils/guards.cjs.map +1 -1
  1443. package/dist/utils/guards.js.map +1 -1
  1444. package/dist/utils/ids.cjs.map +1 -1
  1445. package/dist/utils/ids.js.map +1 -1
  1446. package/dist/utils/intl-cache.cjs.map +1 -1
  1447. package/dist/utils/intl-cache.js.map +1 -1
  1448. package/dist/utils/json-frame.cjs.map +1 -1
  1449. package/dist/utils/json-frame.js.map +1 -1
  1450. package/dist/utils/numbers.cjs.map +1 -1
  1451. package/dist/utils/numbers.js.map +1 -1
  1452. package/dist/utils/objects.cjs.map +1 -1
  1453. package/dist/utils/objects.js.map +1 -1
  1454. package/dist/utils/owner-fingerprint.cjs.map +1 -1
  1455. package/dist/utils/owner-fingerprint.js.map +1 -1
  1456. package/dist/utils/promises.cjs.map +1 -1
  1457. package/dist/utils/promises.js.map +1 -1
  1458. package/dist/utils/relative-time.cjs.map +1 -1
  1459. package/dist/utils/relative-time.js.map +1 -1
  1460. package/dist/utils/safe-url.cjs.map +1 -1
  1461. package/dist/utils/safe-url.js.map +1 -1
  1462. package/dist/utils/schema-like.cjs.map +1 -1
  1463. package/dist/utils/schema-like.js.map +1 -1
  1464. package/dist/utils/storage.cjs +1 -1
  1465. package/dist/utils/storage.cjs.map +1 -1
  1466. package/dist/utils/storage.js +2 -2
  1467. package/dist/utils/storage.js.map +1 -1
  1468. package/dist/utils/strings.cjs.map +1 -1
  1469. package/dist/utils/strings.js.map +1 -1
  1470. package/dist/utils/xlsx.cjs.map +1 -1
  1471. package/dist/utils/xlsx.js.map +1 -1
  1472. package/dist/vision/core/canvas.cjs.map +1 -1
  1473. package/dist/vision/core/canvas.js.map +1 -1
  1474. package/dist/vision/core/dtypes.cjs.map +1 -1
  1475. package/dist/vision/core/dtypes.js.map +1 -1
  1476. package/dist/vision/core/exceptions.cjs.map +1 -1
  1477. package/dist/vision/core/exceptions.js.map +1 -1
  1478. package/dist/vision/core/graph.cjs.map +1 -1
  1479. package/dist/vision/core/graph.js.map +1 -1
  1480. package/dist/vision/core/metadata.cjs +1 -1
  1481. package/dist/vision/core/metadata.cjs.map +1 -1
  1482. package/dist/vision/core/metadata.js +9 -26
  1483. package/dist/vision/core/metadata.js.map +1 -1
  1484. package/dist/vision/core/providers.cjs.map +1 -1
  1485. package/dist/vision/core/providers.js.map +1 -1
  1486. package/dist/vision/core/session.cjs.map +1 -1
  1487. package/dist/vision/core/session.js.map +1 -1
  1488. package/dist/vision/core/timing.cjs.map +1 -1
  1489. package/dist/vision/core/timing.js.map +1 -1
  1490. package/dist/vision/fusion.cjs.map +1 -1
  1491. package/dist/vision/fusion.js.map +1 -1
  1492. package/dist/vision/index.cjs.map +1 -1
  1493. package/dist/vision/index.js.map +1 -1
  1494. package/dist/vision/io/image.cjs.map +1 -1
  1495. package/dist/vision/io/image.js.map +1 -1
  1496. package/dist/vision/labels.cjs.map +1 -1
  1497. package/dist/vision/labels.js.map +1 -1
  1498. package/dist/vision/luminance.cjs.map +1 -1
  1499. package/dist/vision/luminance.js.map +1 -1
  1500. package/dist/vision/normalization.cjs.map +1 -1
  1501. package/dist/vision/normalization.js.map +1 -1
  1502. package/dist/vision/postprocess/classification.cjs.map +1 -1
  1503. package/dist/vision/postprocess/classification.js.map +1 -1
  1504. package/dist/vision/postprocess/detection.cjs.map +1 -1
  1505. package/dist/vision/postprocess/detection.js.map +1 -1
  1506. package/dist/vision/postprocess/segmentation.cjs.map +1 -1
  1507. package/dist/vision/postprocess/segmentation.js.map +1 -1
  1508. package/dist/vision/preprocess/image.cjs.map +1 -1
  1509. package/dist/vision/preprocess/image.js.map +1 -1
  1510. package/dist/vision/preprocess/pipeline.cjs.map +1 -1
  1511. package/dist/vision/preprocess/pipeline.js.map +1 -1
  1512. package/dist/vision/results.cjs.map +1 -1
  1513. package/dist/vision/results.js.map +1 -1
  1514. package/dist/vision/tasks/base.cjs.map +1 -1
  1515. package/dist/vision/tasks/base.js.map +1 -1
  1516. package/dist/vision/tasks/classifier.cjs.map +1 -1
  1517. package/dist/vision/tasks/classifier.js.map +1 -1
  1518. package/dist/vision/tasks/detectClassify.cjs.map +1 -1
  1519. package/dist/vision/tasks/detectClassify.js.map +1 -1
  1520. package/dist/vision/tasks/detector.cjs.map +1 -1
  1521. package/dist/vision/tasks/detector.js.map +1 -1
  1522. package/dist/vision/tasks/segmenter.cjs.map +1 -1
  1523. package/dist/vision/tasks/segmenter.js.map +1 -1
  1524. package/dist/vision/types.cjs.map +1 -1
  1525. package/dist/vision/types.js.map +1 -1
  1526. package/dist/vision/use-camera-stream.cjs +1 -1
  1527. package/dist/vision/use-camera-stream.cjs.map +1 -1
  1528. package/dist/vision/use-camera-stream.js +3 -9
  1529. package/dist/vision/use-camera-stream.js.map +1 -1
  1530. package/dist/vision/use-live-luminance.cjs +1 -1
  1531. package/dist/vision/use-live-luminance.cjs.map +1 -1
  1532. package/dist/vision/use-live-luminance.js +1 -5
  1533. package/dist/vision/use-live-luminance.js.map +1 -1
  1534. package/dist/vite/base-url.cjs.map +1 -1
  1535. package/dist/vite/base-url.js.map +1 -1
  1536. package/dist/vite/create-vite-config.cjs.map +1 -1
  1537. package/dist/vite/create-vite-config.js.map +1 -1
  1538. package/dist/vite/narrow-tokens.cjs.map +1 -1
  1539. package/dist/vite/narrow-tokens.js.map +1 -1
  1540. package/dist/vite/tempest-csp.cjs +1 -1
  1541. package/dist/vite/tempest-csp.cjs.map +1 -1
  1542. package/dist/vite/tempest-csp.js +2 -10
  1543. package/dist/vite/tempest-csp.js.map +1 -1
  1544. package/dist/vite/tempest-icons.cjs.map +1 -1
  1545. package/dist/vite/tempest-icons.js.map +1 -1
  1546. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  1547. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  1548. package/dist/vite/tempest-pwa-dev-sw.js +9 -16
  1549. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  1550. package/dist/vite/tempest-pwa-icons.cjs.map +1 -1
  1551. package/dist/vite/tempest-pwa-icons.js.map +1 -1
  1552. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  1553. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  1554. package/dist/vite/tempest-styles.cjs.map +1 -1
  1555. package/dist/vite/tempest-styles.js.map +1 -1
  1556. package/dist/vite/tempest-vitest.cjs.map +1 -1
  1557. package/dist/vite/tempest-vitest.js.map +1 -1
  1558. package/dist/webrtc/link-stats.cjs.map +1 -1
  1559. package/dist/webrtc/link-stats.js.map +1 -1
  1560. package/dist/webrtc/mesh-quality.cjs.map +1 -1
  1561. package/dist/webrtc/mesh-quality.js.map +1 -1
  1562. package/dist/webrtc/opus-sdp.cjs.map +1 -1
  1563. package/dist/webrtc/opus-sdp.js.map +1 -1
  1564. package/dist/webrtc/peer-link.cjs +1 -1
  1565. package/dist/webrtc/peer-link.cjs.map +1 -1
  1566. package/dist/webrtc/peer-link.js +2 -5
  1567. package/dist/webrtc/peer-link.js.map +1 -1
  1568. package/dist/webrtc/peer-mesh.cjs +1 -1
  1569. package/dist/webrtc/peer-mesh.cjs.map +1 -1
  1570. package/dist/webrtc/peer-mesh.js +8 -24
  1571. package/dist/webrtc/peer-mesh.js.map +1 -1
  1572. package/dist/webrtc/sender-bitrate.cjs.map +1 -1
  1573. package/dist/webrtc/sender-bitrate.js.map +1 -1
  1574. package/dist/webrtc/use-link-stats.cjs.map +1 -1
  1575. package/dist/webrtc/use-link-stats.js.map +1 -1
  1576. package/dist/ws/create-web-socket.cjs +1 -1
  1577. package/dist/ws/create-web-socket.cjs.map +1 -1
  1578. package/dist/ws/create-web-socket.js +4 -22
  1579. package/dist/ws/create-web-socket.js.map +1 -1
  1580. package/dist/ws/resilience.cjs.map +1 -1
  1581. package/dist/ws/resilience.js.map +1 -1
  1582. package/dist/ws/use-web-socket.cjs.map +1 -1
  1583. package/dist/ws/use-web-socket.js.map +1 -1
  1584. package/package.json +9 -6
  1585. package/template/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BrazilMap.js","names":[],"sources":["../../src/br/BrazilMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the 17 props are five\n * independent axes of one map — choropleth (values, minColor, maxColor, colorScale,\n * colorByRegion), selection (selected, onSelect), overlay (markers, onMarkerClick,\n * zoomable), framing (height, padding, showLabels, label, loadingContent) and\n * tooltip (showTooltip, renderTooltip). None of them is mutually exclusive with\n * another, so there is no second component hiding here; the body is long for the\n * same reason it cannot be split, since the projected paths, the hit-testing and the\n * zoom transform all read the same viewBox state.\n */\nimport { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { fitProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport type { BrUfFeatureCollection } from \"./br-geo\";\nimport { getState, type UF } from \"./locations\";\nimport { MapMarkers } from \"./MapMarkers\";\nimport { MapTooltip } from \"./MapTooltip\";\nimport { REGION_COLORS } from \"./regions\";\nimport type { ColorScale } from \"./scales\";\nimport { useMapZoom } from \"./use-map-zoom\";\nimport { geometriesBounds, geometryCentroid, geometryPath, lerpColor } from \"./svg-utils\";\nimport { useMapHover } from \"./use-map-hover\";\nimport styles from \"./BrazilMap.module.css\";\n\n/** Data passed to a {@link BrazilMapProps.renderTooltip} callback. */\nexport interface BrazilMapTooltipData {\n uf: UF;\n name: string;\n /** Choropleth value for this UF, if `values` was provided. */\n value?: number;\n}\n\nexport interface BrazilMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Currently selected UF(s) — highlighted. Accepts one or many. */\n selected?: UF | readonly UF[] | null;\n /** Fired when a state is clicked. */\n onSelect?: (uf: UF) => void;\n /**\n * Optional choropleth values per UF. When set, each state is tinted between\n * `minColor` and `maxColor` by its value (linear). States without a value\n * use the base surface color.\n */\n values?: Partial<Record<UF, number>>;\n /** Choropleth low-end color (2-color linear ramp). Default: a light primary tint. */\n minColor?: string;\n /** Choropleth high-end color (2-color linear ramp). Default: the primary token. */\n maxColor?: string;\n /**\n * Custom value→color scale (e.g. from `sequentialScale`/`quantizeScale`).\n * Takes precedence over `minColor`/`maxColor`. Pair with a `<MapLegend>`.\n */\n colorScale?: ColorScale;\n /**\n * Tint each state by its macro-region (categorical). Overrides\n * `values`/`colorScale`. Pair with `<MapLegend items={regionLegendItems()} />`.\n */\n colorByRegion?: boolean;\n /** Viewport height in pixels. Default: `440`. */\n height?: number;\n /** Inner padding in pixels. Default: `12`. */\n padding?: number;\n /** Render the UF acronym at each state centroid. Default: `true`. */\n showLabels?: boolean;\n /** Accessible label for the map region. Default: `\"Mapa do Brasil por estado\"`. */\n label?: string;\n /** Custom content when the geometry is still loading. */\n loadingContent?: ReactNode;\n /** Show a floating tooltip (name + region + city count + value) on hover. Default: `true`. */\n showTooltip?: boolean;\n /** Override the default tooltip content. */\n renderTooltip?: (data: BrazilMapTooltipData) => ReactNode;\n /** Point markers to overlay on the map (e.g. capitals, stores). */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n /** Enable wheel-zoom + drag-pan (double-click resets). Default: `false`. */\n zoomable?: boolean;\n}\n\n/**\n * Clickable choropleth map of Brazil's 27 federative units. Renders the bundled\n * simplified UF GeoJSON as SVG paths — **no external tiles or paid API**. Click\n * a state to fire `onSelect(uf)`; pass `selected` to highlight and `values` to\n * tint states by a metric.\n *\n * The GeoJSON (~36 KB gzip) is loaded lazily, so importing this component does\n * not pull the geometry until it actually mounts.\n *\n * @example\n * const [uf, setUf] = useState<UF | null>(null);\n * <BrazilMap selected={uf} onSelect={setUf} />\n *\n * @example\n * // Choropleth by a metric per state\n * <BrazilMap values={{ SP: 120, RJ: 90, MG: 60 }} />\n */\nexport function BrazilMap({\n selected,\n onSelect,\n values,\n minColor = \"#dbeafe\",\n maxColor = \"#2563eb\",\n colorScale,\n colorByRegion = false,\n height = 440,\n padding = 12,\n showLabels = true,\n label = \"Mapa do Brasil por estado\",\n loadingContent,\n showTooltip = true,\n renderTooltip,\n markers,\n onMarkerClick,\n zoomable = false,\n className,\n style,\n ...rest\n}: BrazilMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n const [collection, setCollection] = useState<BrUfFeatureCollection | null>(null);\n const { hover, onMove, onLeave } = useMapHover<{ uf: UF; name: string }>(containerRef);\n const mapZoom = useMapZoom(zoomable);\n\n useEffect(() => {\n let active = true;\n void import(\"./br-geo\").then((m) => {\n if (active) setCollection(m.BR_UF_GEOJSON);\n });\n return () => {\n active = false;\n };\n }, []);\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 selectedSet = useMemo<Set<UF>>(() => {\n if (!selected) return new Set();\n return new Set(Array.isArray(selected) ? selected : [selected as UF]);\n }, [selected]);\n\n const valueRange = useMemo<[number, number] | null>(() => {\n if (!values) return null;\n const nums = Object.values(values).filter((v): v is number => typeof v === \"number\");\n if (nums.length === 0) return null;\n return [Math.min(...nums), Math.max(...nums)];\n }, [values]);\n\n const shapes = useMemo(() => {\n if (!collection) return null;\n const projection = fitProjection(\n geometriesBounds(collection.features.map((f) => f.geometry)),\n width,\n height,\n { padding },\n );\n const items = collection.features.map((feature) => ({\n uf: feature.properties.uf,\n name: feature.properties.name,\n region: feature.properties.region,\n d: geometryPath(feature.geometry, projection),\n centroid: geometryCentroid(feature.geometry, projection),\n }));\n return { projection, items };\n }, [collection, width, height, padding]);\n\n function fillFor(uf: UF): string | undefined {\n const v = values?.[uf];\n if (typeof v !== \"number\") return undefined;\n if (colorScale) return colorScale(v);\n if (!valueRange) return undefined;\n const [min, max] = valueRange;\n const t = max === min ? 1 : (v - min) / (max - min);\n return lerpColor(minColor, maxColor, t);\n }\n\n // Memoized so frequent re-renders (hover tooltip) don't rebuild all 27 paths.\n const stateEls = useMemo(() => {\n if (!shapes) return null;\n return shapes.items.map((shape) => {\n const isSelected = selectedSet.has(shape.uf);\n const fillColor = isSelected\n ? undefined\n : colorByRegion\n ? REGION_COLORS[shape.region]\n : fillFor(shape.uf);\n return (\n <path\n key={shape.uf}\n className={cn(styles.state, isSelected && styles.selected)}\n d={shape.d}\n fillRule=\"evenodd\"\n style={fillColor ? { fill: fillColor } : undefined}\n data-uf={shape.uf}\n tabIndex={onSelect ? 0 : undefined}\n role={onSelect ? \"button\" : undefined}\n aria-label={shape.name}\n aria-pressed={onSelect ? isSelected : undefined}\n onClick={onSelect ? () => onSelect(shape.uf) : undefined}\n onMouseMove={\n showTooltip\n ? (e) => onMove({ uf: shape.uf, name: shape.name }, e)\n : undefined\n }\n onMouseLeave={showTooltip ? onLeave : undefined}\n onKeyDown={\n onSelect\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect(shape.uf);\n }\n }\n : undefined\n }\n />\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shapes,\n selectedSet,\n values,\n colorScale,\n colorByRegion,\n minColor,\n maxColor,\n onSelect,\n showTooltip,\n onMove,\n onLeave,\n ]);\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"group\"\n aria-label={label}\n {...rest}\n >\n {!shapes ? (\n <div className={styles.loading}>{loadingContent ?? \"Carregando mapa…\"}</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 {...mapZoom.handlers}\n >\n <g transform={mapZoom.transform || undefined}>\n {stateEls}\n\n {showLabels &&\n shapes.items.map((shape) => (\n <text\n key={`label-${shape.uf}`}\n className={styles.label}\n x={shape.centroid.x}\n y={shape.centroid.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {shape.uf}\n </text>\n ))}\n\n {markers && markers.length > 0 && (\n <MapMarkers\n projection={shapes.projection}\n markers={markers}\n onMarkerClick={onMarkerClick}\n />\n )}\n </g>\n </svg>\n )}\n\n {mapZoom.isTransformed && (\n <button type=\"button\" className={styles.zoomReset} onClick={mapZoom.reset}>\n Reset\n </button>\n )}\n\n {showTooltip && hover && (\n <MapTooltip x={hover.x} y={hover.y}>\n {renderTooltip ? (\n renderTooltip({\n uf: hover.item.uf,\n name: hover.item.name,\n value: values?.[hover.item.uf],\n })\n ) : (\n <DefaultUfTooltip\n uf={hover.item.uf}\n name={hover.item.name}\n value={values?.[hover.item.uf]}\n />\n )}\n </MapTooltip>\n )}\n </div>\n );\n}\n\n/** Default UF tooltip: name (UF) + region + city count + optional value. */\nfunction DefaultUfTooltip({ uf, name, value }: { uf: UF; name: string; value?: number }) {\n const state = getState(uf);\n return (\n <>\n <div className={styles.tooltipTitle}>\n {name} ({uf})\n </div>\n <div className={styles.tooltipMeta}>\n {state ? `${state.region} · ${state.cities.length} cidades` : uf}\n {typeof value === \"number\" ? ` · ${value}` : \"\"}\n </div>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BrazilMap.js","names":["styles","_Fragment","BrazilMap_module_default","Fragment$1","BrazilMap","rest","containerRef","useRef","width","setWidth","useState","collection","setCollection","useMapHover","mapZoom","useMapZoom","zoomable","useEffect","active","m","node","observer","measured","entries","selectedSet","useMemo","selected","valueRange","values","nums","v","shapes","projection","fitProjection","geometriesBounds","f","height","feature","geometryPath","geometryCentroid","padding","fillFor","uf","colorScale","min","max","t","lerpColor","minColor","maxColor","stateEls","isSelected","shape","fillColor","colorByRegion","REGION_COLORS","cn","onSelect","showTooltip","onMove","onLeave","className","style","label","showLabels","markers","MapMarkers","loadingContent","hover","MapTooltip","renderTooltip","DefaultUfTooltip","state","getState","name","value"],"sources":["../../src/br/BrazilMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the 17 props are five\n * independent axes of one map — choropleth (values, minColor, maxColor, colorScale,\n * colorByRegion), selection (selected, onSelect), overlay (markers, onMarkerClick,\n * zoomable), framing (height, padding, showLabels, label, loadingContent) and\n * tooltip (showTooltip, renderTooltip). None of them is mutually exclusive with\n * another, so there is no second component hiding here; the body is long for the\n * same reason it cannot be split, since the projected paths, the hit-testing and the\n * zoom transform all read the same viewBox state.\n */\nimport { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { fitProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport type { BrUfFeatureCollection } from \"./br-geo\";\nimport { getState, type UF } from \"./locations\";\nimport { MapMarkers } from \"./MapMarkers\";\nimport { MapTooltip } from \"./MapTooltip\";\nimport { REGION_COLORS } from \"./regions\";\nimport type { ColorScale } from \"./scales\";\nimport { useMapZoom } from \"./use-map-zoom\";\nimport { geometriesBounds, geometryCentroid, geometryPath, lerpColor } from \"./svg-utils\";\nimport { useMapHover } from \"./use-map-hover\";\nimport styles from \"./BrazilMap.module.css\";\n\n/** Data passed to a {@link BrazilMapProps.renderTooltip} callback. */\nexport interface BrazilMapTooltipData {\n uf: UF;\n name: string;\n /** Choropleth value for this UF, if `values` was provided. */\n value?: number;\n}\n\nexport interface BrazilMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Currently selected UF(s) — highlighted. Accepts one or many. */\n selected?: UF | readonly UF[] | null;\n /** Fired when a state is clicked. */\n onSelect?: (uf: UF) => void;\n /**\n * Optional choropleth values per UF. When set, each state is tinted between\n * `minColor` and `maxColor` by its value (linear). States without a value\n * use the base surface color.\n */\n values?: Partial<Record<UF, number>>;\n /** Choropleth low-end color (2-color linear ramp). Default: a light primary tint. */\n minColor?: string;\n /** Choropleth high-end color (2-color linear ramp). Default: the primary token. */\n maxColor?: string;\n /**\n * Custom value→color scale (e.g. from `sequentialScale`/`quantizeScale`).\n * Takes precedence over `minColor`/`maxColor`. Pair with a `<MapLegend>`.\n */\n colorScale?: ColorScale;\n /**\n * Tint each state by its macro-region (categorical). Overrides\n * `values`/`colorScale`. Pair with `<MapLegend items={regionLegendItems()} />`.\n */\n colorByRegion?: boolean;\n /** Viewport height in pixels. Default: `440`. */\n height?: number;\n /** Inner padding in pixels. Default: `12`. */\n padding?: number;\n /** Render the UF acronym at each state centroid. Default: `true`. */\n showLabels?: boolean;\n /** Accessible label for the map region. Default: `\"Mapa do Brasil por estado\"`. */\n label?: string;\n /** Custom content when the geometry is still loading. */\n loadingContent?: ReactNode;\n /** Show a floating tooltip (name + region + city count + value) on hover. Default: `true`. */\n showTooltip?: boolean;\n /** Override the default tooltip content. */\n renderTooltip?: (data: BrazilMapTooltipData) => ReactNode;\n /** Point markers to overlay on the map (e.g. capitals, stores). */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n /** Enable wheel-zoom + drag-pan (double-click resets). Default: `false`. */\n zoomable?: boolean;\n}\n\n/**\n * Clickable choropleth map of Brazil's 27 federative units. Renders the bundled\n * simplified UF GeoJSON as SVG paths — **no external tiles or paid API**. Click\n * a state to fire `onSelect(uf)`; pass `selected` to highlight and `values` to\n * tint states by a metric.\n *\n * The GeoJSON (~36 KB gzip) is loaded lazily, so importing this component does\n * not pull the geometry until it actually mounts.\n *\n * @example\n * const [uf, setUf] = useState<UF | null>(null);\n * <BrazilMap selected={uf} onSelect={setUf} />\n *\n * @example\n * // Choropleth by a metric per state\n * <BrazilMap values={{ SP: 120, RJ: 90, MG: 60 }} />\n */\nexport function BrazilMap({\n selected,\n onSelect,\n values,\n minColor = \"#dbeafe\",\n maxColor = \"#2563eb\",\n colorScale,\n colorByRegion = false,\n height = 440,\n padding = 12,\n showLabels = true,\n label = \"Mapa do Brasil por estado\",\n loadingContent,\n showTooltip = true,\n renderTooltip,\n markers,\n onMarkerClick,\n zoomable = false,\n className,\n style,\n ...rest\n}: BrazilMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n const [collection, setCollection] = useState<BrUfFeatureCollection | null>(null);\n const { hover, onMove, onLeave } = useMapHover<{ uf: UF; name: string }>(containerRef);\n const mapZoom = useMapZoom(zoomable);\n\n useEffect(() => {\n let active = true;\n void import(\"./br-geo\").then((m) => {\n if (active) setCollection(m.BR_UF_GEOJSON);\n });\n return () => {\n active = false;\n };\n }, []);\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 selectedSet = useMemo<Set<UF>>(() => {\n if (!selected) return new Set();\n return new Set(Array.isArray(selected) ? selected : [selected as UF]);\n }, [selected]);\n\n const valueRange = useMemo<[number, number] | null>(() => {\n if (!values) return null;\n const nums = Object.values(values).filter((v): v is number => typeof v === \"number\");\n if (nums.length === 0) return null;\n return [Math.min(...nums), Math.max(...nums)];\n }, [values]);\n\n const shapes = useMemo(() => {\n if (!collection) return null;\n const projection = fitProjection(\n geometriesBounds(collection.features.map((f) => f.geometry)),\n width,\n height,\n { padding },\n );\n const items = collection.features.map((feature) => ({\n uf: feature.properties.uf,\n name: feature.properties.name,\n region: feature.properties.region,\n d: geometryPath(feature.geometry, projection),\n centroid: geometryCentroid(feature.geometry, projection),\n }));\n return { projection, items };\n }, [collection, width, height, padding]);\n\n function fillFor(uf: UF): string | undefined {\n const v = values?.[uf];\n if (typeof v !== \"number\") return undefined;\n if (colorScale) return colorScale(v);\n if (!valueRange) return undefined;\n const [min, max] = valueRange;\n const t = max === min ? 1 : (v - min) / (max - min);\n return lerpColor(minColor, maxColor, t);\n }\n\n // Memoized so frequent re-renders (hover tooltip) don't rebuild all 27 paths.\n const stateEls = useMemo(() => {\n if (!shapes) return null;\n return shapes.items.map((shape) => {\n const isSelected = selectedSet.has(shape.uf);\n const fillColor = isSelected\n ? undefined\n : colorByRegion\n ? REGION_COLORS[shape.region]\n : fillFor(shape.uf);\n return (\n <path\n key={shape.uf}\n className={cn(styles.state, isSelected && styles.selected)}\n d={shape.d}\n fillRule=\"evenodd\"\n style={fillColor ? { fill: fillColor } : undefined}\n data-uf={shape.uf}\n tabIndex={onSelect ? 0 : undefined}\n role={onSelect ? \"button\" : undefined}\n aria-label={shape.name}\n aria-pressed={onSelect ? isSelected : undefined}\n onClick={onSelect ? () => onSelect(shape.uf) : undefined}\n onMouseMove={\n showTooltip\n ? (e) => onMove({ uf: shape.uf, name: shape.name }, e)\n : undefined\n }\n onMouseLeave={showTooltip ? onLeave : undefined}\n onKeyDown={\n onSelect\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect(shape.uf);\n }\n }\n : undefined\n }\n />\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shapes,\n selectedSet,\n values,\n colorScale,\n colorByRegion,\n minColor,\n maxColor,\n onSelect,\n showTooltip,\n onMove,\n onLeave,\n ]);\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"group\"\n aria-label={label}\n {...rest}\n >\n {!shapes ? (\n <div className={styles.loading}>{loadingContent ?? \"Carregando mapa…\"}</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 {...mapZoom.handlers}\n >\n <g transform={mapZoom.transform || undefined}>\n {stateEls}\n\n {showLabels &&\n shapes.items.map((shape) => (\n <text\n key={`label-${shape.uf}`}\n className={styles.label}\n x={shape.centroid.x}\n y={shape.centroid.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {shape.uf}\n </text>\n ))}\n\n {markers && markers.length > 0 && (\n <MapMarkers\n projection={shapes.projection}\n markers={markers}\n onMarkerClick={onMarkerClick}\n />\n )}\n </g>\n </svg>\n )}\n\n {mapZoom.isTransformed && (\n <button type=\"button\" className={styles.zoomReset} onClick={mapZoom.reset}>\n Reset\n </button>\n )}\n\n {showTooltip && hover && (\n <MapTooltip x={hover.x} y={hover.y}>\n {renderTooltip ? (\n renderTooltip({\n uf: hover.item.uf,\n name: hover.item.name,\n value: values?.[hover.item.uf],\n })\n ) : (\n <DefaultUfTooltip\n uf={hover.item.uf}\n name={hover.item.name}\n value={values?.[hover.item.uf]}\n />\n )}\n </MapTooltip>\n )}\n </div>\n );\n}\n\n/** Default UF tooltip: name (UF) + region + city count + optional value. */\nfunction DefaultUfTooltip({ uf, name, value }: { uf: UF; name: string; value?: number }) {\n const state = getState(uf);\n return (\n <>\n <div className={styles.tooltipTitle}>\n {name} ({uf})\n </div>\n <div className={styles.tooltipMeta}>\n {state ? `${state.region} · ${state.cities.length} cidades` : uf}\n {typeof value === \"number\" ? ` · ${value}` : \"\"}\n </div>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BrazilMap.module.cjs","names":[],"sources":["../../src/br/BrazilMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\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 overflow: hidden;\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\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.state {\n fill: var(--tempest-surface-3);\n stroke: var(--tempest-border-strong);\n stroke-width: 0.75;\n stroke-linejoin: round;\n transition:\n fill 0.12s ease,\n opacity 0.12s ease;\n}\n\n.state[role=\"button\"] {\n cursor: pointer;\n}\n\n.state[role=\"button\"]:hover {\n fill: var(--tempest-primary-soft);\n}\n\n.state[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 1.5;\n}\n\n.selected {\n fill: var(--tempest-primary);\n stroke: var(--tempest-primary-active);\n stroke-width: 1.25;\n}\n\n.selected:hover {\n fill: var(--tempest-primary-hover);\n}\n\n.label {\n fill: var(--tempest-text);\n font-size: 10px;\n font-weight: var(--tempest-weight-medium);\n pointer-events: none;\n user-select: none;\n}\n\n.tooltip {\n position: absolute;\n z-index: 2;\n transform: translate(12px, 12px);\n max-width: 240px;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n color: var(--tempest-text);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n box-shadow: var(--tempest-shadow-md, 0 4px 12px rgb(0 0 0 / 0.12));\n font-size: var(--tempest-text-xs);\n line-height: var(--tempest-leading-snug);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.tooltipTitle {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.tooltipMeta {\n color: var(--tempest-text-muted);\n}\n\n.marker {\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:hover {\n stroke: var(--tempest-primary-active);\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.zoomReset {\n position: absolute;\n top: var(--tempest-space-2);\n right: var(--tempest-space-2);\n padding: var(--tempest-space-1) var(--tempest-space-2);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n}\n\n.zoomReset:hover {\n background: var(--tempest-surface-2);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"BrazilMap.module.cjs","names":["map","svg","loading","state","selected","label","tooltip","tooltipTitle","tooltipMeta","marker","zoomReset","BrazilMap_module_default"],"sources":["../../src/br/BrazilMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\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 overflow: hidden;\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\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.state {\n fill: var(--tempest-surface-3);\n stroke: var(--tempest-border-strong);\n stroke-width: 0.75;\n stroke-linejoin: round;\n transition:\n fill 0.12s ease,\n opacity 0.12s ease;\n}\n\n.state[role=\"button\"] {\n cursor: pointer;\n}\n\n.state[role=\"button\"]:hover {\n fill: var(--tempest-primary-soft);\n}\n\n.state[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 1.5;\n}\n\n.selected {\n fill: var(--tempest-primary);\n stroke: var(--tempest-primary-active);\n stroke-width: 1.25;\n}\n\n.selected:hover {\n fill: var(--tempest-primary-hover);\n}\n\n.label {\n fill: var(--tempest-text);\n font-size: 10px;\n font-weight: var(--tempest-weight-medium);\n pointer-events: none;\n user-select: none;\n}\n\n.tooltip {\n position: absolute;\n z-index: 2;\n transform: translate(12px, 12px);\n max-width: 240px;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n color: var(--tempest-text);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n box-shadow: var(--tempest-shadow-md, 0 4px 12px rgb(0 0 0 / 0.12));\n font-size: var(--tempest-text-xs);\n line-height: var(--tempest-leading-snug);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.tooltipTitle {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.tooltipMeta {\n color: var(--tempest-text-muted);\n}\n\n.marker {\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:hover {\n stroke: var(--tempest-primary-active);\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.zoomReset {\n position: absolute;\n top: var(--tempest-space-2);\n right: var(--tempest-space-2);\n padding: var(--tempest-space-1) var(--tempest-space-2);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n}\n\n.zoomReset:hover {\n background: var(--tempest-surface-2);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"BrazilMap.module.js","names":[],"sources":["../../src/br/BrazilMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\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 overflow: hidden;\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\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.state {\n fill: var(--tempest-surface-3);\n stroke: var(--tempest-border-strong);\n stroke-width: 0.75;\n stroke-linejoin: round;\n transition:\n fill 0.12s ease,\n opacity 0.12s ease;\n}\n\n.state[role=\"button\"] {\n cursor: pointer;\n}\n\n.state[role=\"button\"]:hover {\n fill: var(--tempest-primary-soft);\n}\n\n.state[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 1.5;\n}\n\n.selected {\n fill: var(--tempest-primary);\n stroke: var(--tempest-primary-active);\n stroke-width: 1.25;\n}\n\n.selected:hover {\n fill: var(--tempest-primary-hover);\n}\n\n.label {\n fill: var(--tempest-text);\n font-size: 10px;\n font-weight: var(--tempest-weight-medium);\n pointer-events: none;\n user-select: none;\n}\n\n.tooltip {\n position: absolute;\n z-index: 2;\n transform: translate(12px, 12px);\n max-width: 240px;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n color: var(--tempest-text);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n box-shadow: var(--tempest-shadow-md, 0 4px 12px rgb(0 0 0 / 0.12));\n font-size: var(--tempest-text-xs);\n line-height: var(--tempest-leading-snug);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.tooltipTitle {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.tooltipMeta {\n color: var(--tempest-text-muted);\n}\n\n.marker {\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:hover {\n stroke: var(--tempest-primary-active);\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.zoomReset {\n position: absolute;\n top: var(--tempest-space-2);\n right: var(--tempest-space-2);\n padding: var(--tempest-space-1) var(--tempest-space-2);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n}\n\n.zoomReset:hover {\n background: var(--tempest-surface-2);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"BrazilMap.module.js","names":["map","svg","loading","state","selected","label","tooltip","tooltipTitle","tooltipMeta","marker","zoomReset","BrazilMap_module_default"],"sources":["../../src/br/BrazilMap.module.css"],"sourcesContent":[".map {\n position: relative;\n width: 100%;\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 overflow: hidden;\n}\n\n.svg {\n display: block;\n width: 100%;\n}\n\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.state {\n fill: var(--tempest-surface-3);\n stroke: var(--tempest-border-strong);\n stroke-width: 0.75;\n stroke-linejoin: round;\n transition:\n fill 0.12s ease,\n opacity 0.12s ease;\n}\n\n.state[role=\"button\"] {\n cursor: pointer;\n}\n\n.state[role=\"button\"]:hover {\n fill: var(--tempest-primary-soft);\n}\n\n.state[role=\"button\"]:focus-visible {\n outline: none;\n stroke: var(--tempest-focus-ring-color);\n stroke-width: 1.5;\n}\n\n.selected {\n fill: var(--tempest-primary);\n stroke: var(--tempest-primary-active);\n stroke-width: 1.25;\n}\n\n.selected:hover {\n fill: var(--tempest-primary-hover);\n}\n\n.label {\n fill: var(--tempest-text);\n font-size: 10px;\n font-weight: var(--tempest-weight-medium);\n pointer-events: none;\n user-select: none;\n}\n\n.tooltip {\n position: absolute;\n z-index: 2;\n transform: translate(12px, 12px);\n max-width: 240px;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n color: var(--tempest-text);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n box-shadow: var(--tempest-shadow-md, 0 4px 12px rgb(0 0 0 / 0.12));\n font-size: var(--tempest-text-xs);\n line-height: var(--tempest-leading-snug);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.tooltipTitle {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.tooltipMeta {\n color: var(--tempest-text-muted);\n}\n\n.marker {\n stroke: var(--tempest-surface);\n stroke-width: 2;\n}\n\n.marker[role=\"button\"] {\n cursor: pointer;\n}\n\n.marker[role=\"button\"]:hover {\n stroke: var(--tempest-primary-active);\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.zoomReset {\n position: absolute;\n top: var(--tempest-space-2);\n right: var(--tempest-space-2);\n padding: var(--tempest-space-1) var(--tempest-space-2);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n}\n\n.zoomReset:hover {\n background: var(--tempest-surface-2);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"BrazilStateCitySelect.cjs","names":[],"sources":["../../src/br/BrazilStateCitySelect.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — two dependent selects in one control, so every knob\n * comes in pairs: stateLabel and cityLabel, statePlaceholder and cityPlaceholder,\n * defaultUf and defaultCity. The pairing is the feature — the city list is derived\n * from the chosen UF, which is exactly what a caller wiring two separate selects has\n * to reimplement.\n */\nimport { useMemo, useState, type ReactElement } from \"react\";\nimport { Select } from \"@/components/Select\";\nimport {\n administrativeRegionsByUf,\n listStates,\n municipalitiesByUf,\n normalizeUf,\n resolveMunicipality,\n type Choice,\n type UF,\n} from \"./locations\";\n\n/** Current selection emitted by {@link BrazilStateCitySelect}. */\nexport interface BrazilStateCitySelection {\n /** Selected federative unit, or `null` when none. */\n uf: UF | null;\n /** Selected city, or `null` when none. */\n city: string | null;\n /**\n * IBGE code of the selected municipality, or `null` when none is selected.\n *\n * This is the value to store. It survives the renames `city` does not, and\n * it is what `geocodeMunicipality` and every other dataset here join on. A\n * DF administrative region carries Brasília's code, because that is the\n * municipality it is part of.\n */\n municipalityId: string | null;\n}\n\nexport interface BrazilStateCitySelectProps {\n /** Pre-selected UF (uncontrolled initial value). */\n defaultUf?: UF;\n /** Pre-selected city (uncontrolled initial value). */\n defaultCity?: string;\n /** Fired whenever the state or city changes. */\n onChange?: (selection: BrazilStateCitySelection) => void;\n /** Label for the state select. Default: `\"Estado\"`. */\n stateLabel?: string;\n /** Label for the city select. Default: `\"Cidade\"`. */\n cityLabel?: string;\n /** Placeholder for the state select. Default: `\"Selecione o estado\"`. */\n statePlaceholder?: string;\n /** Placeholder for the city select. Default: `\"Selecione a cidade\"`. */\n cityPlaceholder?: string;\n /** Disable both selects. */\n disabled?: boolean;\n /** Layout of the two selects. Default: `\"row\"`. */\n layout?: \"row\" | \"column\";\n}\n\n/**\n * Cascading Estado → Cidade selector backed by the bundled BR locations data —\n * pick a state and the city list narrows to that UF's municipalities. No\n * network, no external API. Complements {@link BrazilMap} (wire the map's\n * `onSelect` to drive the same UF).\n *\n * @example\n * <BrazilStateCitySelect onChange={({ uf, city }) => console.log(uf, city)} />\n */\n/**\n * The pickable places of a federative unit: its municipalities, plus the DF's\n * administrative regions.\n *\n * The DF has one municipality and nobody there writes \"Brasília\" in an address\n * field — they write Ceilândia, Taguatinga, Gama. Offering only the municipality\n * would be faithful to IBGE and useless in a form, so the 35 regions are listed\n * beside it and every one of them resolves to Brasília's code.\n *\n * @param uf - The selected federative unit.\n * @returns `{ value, label }` options, alphabetically, value === label.\n */\nfunction placeChoices(uf: UF): Choice[] {\n const names = [\n ...municipalitiesByUf(uf).map((m) => m.name),\n ...administrativeRegionsByUf(uf).map((r) => r.name),\n ].sort((a, b) => a.localeCompare(b, \"pt-BR\"));\n return names.map((name) => ({ value: name, label: name }));\n}\n\nexport function BrazilStateCitySelect({\n defaultUf,\n defaultCity,\n onChange,\n stateLabel = \"Estado\",\n cityLabel = \"Cidade\",\n statePlaceholder = \"Selecione o estado\",\n cityPlaceholder = \"Selecione a cidade\",\n disabled = false,\n layout = \"row\",\n}: BrazilStateCitySelectProps): ReactElement {\n const [uf, setUf] = useState<UF | null>(defaultUf ?? null);\n const [city, setCity] = useState<string | null>(defaultCity ?? null);\n\n const stateOptions = useMemo(\n () => listStates().map((s) => ({ value: s.uf, label: s.name })),\n [],\n );\n const cityOptions = useMemo(() => (uf ? placeChoices(uf) : []), [uf]);\n\n function handleUf(next: string): void {\n const nextUf = normalizeUf(next);\n setUf(nextUf);\n setCity(null);\n onChange?.({ uf: nextUf, city: null, municipalityId: null });\n }\n\n function handleCity(next: string): void {\n const nextCity = next || null;\n setCity(nextCity);\n onChange?.({\n uf,\n city: nextCity,\n municipalityId: uf && nextCity ? (resolveMunicipality(uf, nextCity)?.id ?? null) : null,\n });\n }\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: layout === \"row\" ? \"row\" : \"column\",\n gap: \"var(--tempest-space-3, 12px)\",\n flexWrap: \"wrap\",\n }}\n >\n <Select\n label={stateLabel}\n placeholder={statePlaceholder}\n options={stateOptions}\n value={uf ?? \"\"}\n disabled={disabled}\n onChange={(e) => handleUf(e.target.value)}\n style={{ minWidth: 0 }}\n />\n <Select\n label={cityLabel}\n placeholder={cityPlaceholder}\n options={cityOptions}\n value={city ?? \"\"}\n disabled={disabled || !uf}\n onChange={(e) => handleCity(e.target.value)}\n style={{ minWidth: 0 }}\n />\n </div>\n );\n}\n"],"mappings":"sIA8EA,SAAS,EAAa,EAAkB,CAKpC,MAJc,CACV,GAAG,EAAA,mBAAmB,CAAE,CAAC,CAAC,IAAK,GAAM,EAAE,IAAI,EAC3C,GAAG,EAAA,0BAA0B,CAAE,CAAC,CAAC,IAAK,GAAM,EAAE,IAAI,CACtD,CAAC,CAAC,MAAM,EAAG,IAAM,EAAE,cAAc,EAAG,OAAO,CACpC,CAAA,CAAM,IAAK,IAAU,CAAE,MAAO,EAAM,MAAO,CAAK,EAAE,CAC7D,CAEA,SAAgB,EAAsB,CAClC,YACA,cACA,WACA,aAAa,SACb,YAAY,SACZ,mBAAmB,qBACnB,kBAAkB,qBAClB,WAAW,GACX,SAAS,OACgC,CACzC,GAAM,CAAC,EAAI,IAAA,EAAS,EAAA,SAAA,CAAoB,GAAa,IAAI,EACnD,CAAC,EAAM,IAAA,EAAW,EAAA,SAAA,CAAwB,GAAe,IAAI,EAE7D,GAAA,EAAe,EAAA,QAAA,KACX,EAAA,WAAW,CAAC,CAAC,IAAK,IAAO,CAAE,MAAO,EAAE,GAAI,MAAO,EAAE,IAAK,EAAE,EAC9D,CAAC,CACL,EACM,GAAA,EAAc,EAAA,QAAA,KAAe,EAAK,EAAa,CAAE,EAAI,CAAC,EAAI,CAAC,CAAE,CAAC,EAEpE,SAAS,EAAS,EAAoB,CAClC,IAAM,EAAS,EAAA,YAAY,CAAI,EAC/B,EAAM,CAAM,EACZ,EAAQ,IAAI,EACZ,IAAW,CAAE,GAAI,EAAQ,KAAM,KAAM,eAAgB,IAAK,CAAC,CAC/D,CAEA,SAAS,EAAW,EAAoB,CACpC,IAAM,EAAW,GAAQ,KACzB,EAAQ,CAAQ,EAChB,IAAW,CACP,KACA,KAAM,EACN,eAAgB,GAAM,EAAY,EAAA,oBAAoB,EAAI,CAAQ,CAAC,EAAE,IAAM,KAAQ,IACvF,CAAC,CACL,CAEA,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CACI,MAAO,CACH,QAAS,OACT,cAAe,IAAW,MAAQ,MAAQ,SAC1C,IAAK,+BACL,SAAU,MACd,EANJ,SAAA,EAQI,EAAA,EAAA,IAAA,CAAC,EAAA,OAAD,CACI,MAAO,EACP,YAAa,EACb,QAAS,EACT,MAAO,GAAM,GACH,WACV,SAAW,GAAM,EAAS,EAAE,OAAO,KAAK,EACxC,MAAO,CAAE,SAAU,CAAE,CACxB,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,EAAA,OAAD,CACI,MAAO,EACP,YAAa,EACb,QAAS,EACT,MAAO,GAAQ,GACf,SAAU,GAAY,CAAC,EACvB,SAAW,GAAM,EAAW,EAAE,OAAO,KAAK,EAC1C,MAAO,CAAE,SAAU,CAAE,CACxB,CAAA,CACA,GAEb"}
1
+ {"version":3,"file":"BrazilStateCitySelect.cjs","names":["municipalitiesByUf","administrativeRegionsByUf","useState","useMemo","listStates","normalizeUf","resolveMunicipality","Select","require_Select","require_locations","react","react_jsx_runtime","placeChoices","uf","m","r","a","b","name","BrazilStateCitySelect","setUf","defaultUf","city","setCity","defaultCity","stateOptions","s","cityOptions","handleUf","nextUf","next","onChange","handleCity","nextCity","layout","stateLabel","statePlaceholder","cityLabel","cityPlaceholder","disabled"],"sources":["../../src/br/BrazilStateCitySelect.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — two dependent selects in one control, so every knob\n * comes in pairs: stateLabel and cityLabel, statePlaceholder and cityPlaceholder,\n * defaultUf and defaultCity. The pairing is the feature — the city list is derived\n * from the chosen UF, which is exactly what a caller wiring two separate selects has\n * to reimplement.\n */\nimport { useMemo, useState, type ReactElement } from \"react\";\nimport { Select } from \"@/components/Select\";\nimport {\n administrativeRegionsByUf,\n listStates,\n municipalitiesByUf,\n normalizeUf,\n resolveMunicipality,\n type Choice,\n type UF,\n} from \"./locations\";\n\n/** Current selection emitted by {@link BrazilStateCitySelect}. */\nexport interface BrazilStateCitySelection {\n /** Selected federative unit, or `null` when none. */\n uf: UF | null;\n /** Selected city, or `null` when none. */\n city: string | null;\n /**\n * IBGE code of the selected municipality, or `null` when none is selected.\n *\n * This is the value to store. It survives the renames `city` does not, and\n * it is what `geocodeMunicipality` and every other dataset here join on. A\n * DF administrative region carries Brasília's code, because that is the\n * municipality it is part of.\n */\n municipalityId: string | null;\n}\n\nexport interface BrazilStateCitySelectProps {\n /** Pre-selected UF (uncontrolled initial value). */\n defaultUf?: UF;\n /** Pre-selected city (uncontrolled initial value). */\n defaultCity?: string;\n /** Fired whenever the state or city changes. */\n onChange?: (selection: BrazilStateCitySelection) => void;\n /** Label for the state select. Default: `\"Estado\"`. */\n stateLabel?: string;\n /** Label for the city select. Default: `\"Cidade\"`. */\n cityLabel?: string;\n /** Placeholder for the state select. Default: `\"Selecione o estado\"`. */\n statePlaceholder?: string;\n /** Placeholder for the city select. Default: `\"Selecione a cidade\"`. */\n cityPlaceholder?: string;\n /** Disable both selects. */\n disabled?: boolean;\n /** Layout of the two selects. Default: `\"row\"`. */\n layout?: \"row\" | \"column\";\n}\n\n/**\n * Cascading Estado → Cidade selector backed by the bundled BR locations data —\n * pick a state and the city list narrows to that UF's municipalities. No\n * network, no external API. Complements {@link BrazilMap} (wire the map's\n * `onSelect` to drive the same UF).\n *\n * @example\n * <BrazilStateCitySelect onChange={({ uf, city }) => console.log(uf, city)} />\n */\n/**\n * The pickable places of a federative unit: its municipalities, plus the DF's\n * administrative regions.\n *\n * The DF has one municipality and nobody there writes \"Brasília\" in an address\n * field — they write Ceilândia, Taguatinga, Gama. Offering only the municipality\n * would be faithful to IBGE and useless in a form, so the 35 regions are listed\n * beside it and every one of them resolves to Brasília's code.\n *\n * @param uf - The selected federative unit.\n * @returns `{ value, label }` options, alphabetically, value === label.\n */\nfunction placeChoices(uf: UF): Choice[] {\n const names = [\n ...municipalitiesByUf(uf).map((m) => m.name),\n ...administrativeRegionsByUf(uf).map((r) => r.name),\n ].sort((a, b) => a.localeCompare(b, \"pt-BR\"));\n return names.map((name) => ({ value: name, label: name }));\n}\n\nexport function BrazilStateCitySelect({\n defaultUf,\n defaultCity,\n onChange,\n stateLabel = \"Estado\",\n cityLabel = \"Cidade\",\n statePlaceholder = \"Selecione o estado\",\n cityPlaceholder = \"Selecione a cidade\",\n disabled = false,\n layout = \"row\",\n}: BrazilStateCitySelectProps): ReactElement {\n const [uf, setUf] = useState<UF | null>(defaultUf ?? null);\n const [city, setCity] = useState<string | null>(defaultCity ?? null);\n\n const stateOptions = useMemo(\n () => listStates().map((s) => ({ value: s.uf, label: s.name })),\n [],\n );\n const cityOptions = useMemo(() => (uf ? placeChoices(uf) : []), [uf]);\n\n function handleUf(next: string): void {\n const nextUf = normalizeUf(next);\n setUf(nextUf);\n setCity(null);\n onChange?.({ uf: nextUf, city: null, municipalityId: null });\n }\n\n function handleCity(next: string): void {\n const nextCity = next || null;\n setCity(nextCity);\n onChange?.({\n uf,\n city: nextCity,\n municipalityId: uf && nextCity ? (resolveMunicipality(uf, nextCity)?.id ?? null) : null,\n });\n }\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: layout === \"row\" ? \"row\" : \"column\",\n gap: \"var(--tempest-space-3, 12px)\",\n flexWrap: \"wrap\",\n }}\n >\n <Select\n label={stateLabel}\n placeholder={statePlaceholder}\n options={stateOptions}\n value={uf ?? \"\"}\n disabled={disabled}\n onChange={(e) => handleUf(e.target.value)}\n style={{ minWidth: 0 }}\n />\n <Select\n label={cityLabel}\n placeholder={cityPlaceholder}\n options={cityOptions}\n value={city ?? \"\"}\n disabled={disabled || !uf}\n onChange={(e) => handleCity(e.target.value)}\n style={{ minWidth: 0 }}\n />\n </div>\n );\n}\n"],"mappings":"A,sIA8EA,SAASY,EAAa,EAAkB,CAKpC,MAJc,CACV,GAAGZ,EAAAA,mBAAmBa,CAAE,CAAC,CAAC,IAAK,GAAMC,EAAE,IAAI,EAC3C,GAAGb,EAAAA,0BAA0BY,CAAE,CAAC,CAAC,IAAK,GAAME,EAAE,IAAI,CACtD,CAAC,CAAC,MAAM,EAAG,IAAMC,EAAE,cAAcC,EAAG,OAAO,CACpC,CAAA,CAAM,IAAK,IAAU,CAAE,MAAOC,EAAM,MAAOA,CAAK,EAAE,CAC7D,CAEA,SAAgBC,EAAsB,CAClC,YACA,cACA,WACA,aAAa,SACb,YAAY,SACZ,mBAAmB,qBACnB,kBAAkB,qBAClB,WAAW,GACX,SAAS,OACgC,CACzC,GAAM,CAACN,EAAIO,IAAA,EAASlB,EAAAA,SAAAA,CAAoBmB,GAAa,IAAI,EACnD,CAACC,EAAMC,IAAA,EAAWrB,EAAAA,SAAAA,CAAwBsB,GAAe,IAAI,EAE7DC,GAAA,EAAetB,EAAAA,QAAAA,KACXC,EAAAA,WAAW,CAAC,CAAC,IAAK,IAAO,CAAE,MAAOsB,EAAE,GAAI,MAAOA,EAAE,IAAK,EAAE,EAC9D,CAAC,CACL,EACMC,GAAA,EAAcxB,EAAAA,QAAAA,KAAeU,EAAKD,EAAaC,CAAE,EAAI,CAAC,EAAI,CAACA,CAAE,CAAC,EAEpE,SAASe,EAAS,EAAoB,CAClC,IAAMC,EAASxB,EAAAA,YAAYyB,CAAI,EAC/BV,EAAMS,CAAM,EACZN,EAAQ,IAAI,EACZQ,IAAW,CAAE,GAAIF,EAAQ,KAAM,KAAM,eAAgB,IAAK,CAAC,CAC/D,CAEA,SAASG,EAAW,EAAoB,CACpC,IAAMC,EAAWH,GAAQ,KACzBP,EAAQU,CAAQ,EAChBF,IAAW,CACP,KACA,KAAME,EACN,eAAgBpB,GAAMoB,EAAY3B,EAAAA,oBAAoBO,EAAIoB,CAAQ,CAAC,EAAE,IAAM,KAAQ,IACvF,CAAC,CACL,CAEA,OACI,EAAAtB,EAAA,KAAA,CAAC,MAAD,CACI,MAAO,CACH,QAAS,OACT,cAAeuB,IAAW,MAAQ,MAAQ,SAC1C,IAAK,+BACL,SAAU,MACd,EANJ,SAAA,EAQI,EAAAvB,EAAA,IAAA,CAACJ,EAAAA,OAAD,CACI,MAAO4B,EACP,YAAaC,EACb,QAASX,EACT,MAAOZ,GAAM,GACH,WACV,SAAW,GAAMe,EAAS,EAAE,OAAO,KAAK,EACxC,MAAO,CAAE,SAAU,CAAE,CACxB,CAAA,GACD,EAAAjB,EAAA,IAAA,CAACJ,EAAAA,OAAD,CACI,MAAO8B,EACP,YAAaC,EACb,QAASX,EACT,MAAOL,GAAQ,GACf,SAAUiB,GAAY,CAAC1B,EACvB,SAAW,GAAMmB,EAAW,EAAE,OAAO,KAAK,EAC1C,MAAO,CAAE,SAAU,CAAE,CACxB,CAAA,CACA,C,EAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"BrazilStateCitySelect.js","names":[],"sources":["../../src/br/BrazilStateCitySelect.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — two dependent selects in one control, so every knob\n * comes in pairs: stateLabel and cityLabel, statePlaceholder and cityPlaceholder,\n * defaultUf and defaultCity. The pairing is the feature — the city list is derived\n * from the chosen UF, which is exactly what a caller wiring two separate selects has\n * to reimplement.\n */\nimport { useMemo, useState, type ReactElement } from \"react\";\nimport { Select } from \"@/components/Select\";\nimport {\n administrativeRegionsByUf,\n listStates,\n municipalitiesByUf,\n normalizeUf,\n resolveMunicipality,\n type Choice,\n type UF,\n} from \"./locations\";\n\n/** Current selection emitted by {@link BrazilStateCitySelect}. */\nexport interface BrazilStateCitySelection {\n /** Selected federative unit, or `null` when none. */\n uf: UF | null;\n /** Selected city, or `null` when none. */\n city: string | null;\n /**\n * IBGE code of the selected municipality, or `null` when none is selected.\n *\n * This is the value to store. It survives the renames `city` does not, and\n * it is what `geocodeMunicipality` and every other dataset here join on. A\n * DF administrative region carries Brasília's code, because that is the\n * municipality it is part of.\n */\n municipalityId: string | null;\n}\n\nexport interface BrazilStateCitySelectProps {\n /** Pre-selected UF (uncontrolled initial value). */\n defaultUf?: UF;\n /** Pre-selected city (uncontrolled initial value). */\n defaultCity?: string;\n /** Fired whenever the state or city changes. */\n onChange?: (selection: BrazilStateCitySelection) => void;\n /** Label for the state select. Default: `\"Estado\"`. */\n stateLabel?: string;\n /** Label for the city select. Default: `\"Cidade\"`. */\n cityLabel?: string;\n /** Placeholder for the state select. Default: `\"Selecione o estado\"`. */\n statePlaceholder?: string;\n /** Placeholder for the city select. Default: `\"Selecione a cidade\"`. */\n cityPlaceholder?: string;\n /** Disable both selects. */\n disabled?: boolean;\n /** Layout of the two selects. Default: `\"row\"`. */\n layout?: \"row\" | \"column\";\n}\n\n/**\n * Cascading Estado → Cidade selector backed by the bundled BR locations data —\n * pick a state and the city list narrows to that UF's municipalities. No\n * network, no external API. Complements {@link BrazilMap} (wire the map's\n * `onSelect` to drive the same UF).\n *\n * @example\n * <BrazilStateCitySelect onChange={({ uf, city }) => console.log(uf, city)} />\n */\n/**\n * The pickable places of a federative unit: its municipalities, plus the DF's\n * administrative regions.\n *\n * The DF has one municipality and nobody there writes \"Brasília\" in an address\n * field — they write Ceilândia, Taguatinga, Gama. Offering only the municipality\n * would be faithful to IBGE and useless in a form, so the 35 regions are listed\n * beside it and every one of them resolves to Brasília's code.\n *\n * @param uf - The selected federative unit.\n * @returns `{ value, label }` options, alphabetically, value === label.\n */\nfunction placeChoices(uf: UF): Choice[] {\n const names = [\n ...municipalitiesByUf(uf).map((m) => m.name),\n ...administrativeRegionsByUf(uf).map((r) => r.name),\n ].sort((a, b) => a.localeCompare(b, \"pt-BR\"));\n return names.map((name) => ({ value: name, label: name }));\n}\n\nexport function BrazilStateCitySelect({\n defaultUf,\n defaultCity,\n onChange,\n stateLabel = \"Estado\",\n cityLabel = \"Cidade\",\n statePlaceholder = \"Selecione o estado\",\n cityPlaceholder = \"Selecione a cidade\",\n disabled = false,\n layout = \"row\",\n}: BrazilStateCitySelectProps): ReactElement {\n const [uf, setUf] = useState<UF | null>(defaultUf ?? null);\n const [city, setCity] = useState<string | null>(defaultCity ?? null);\n\n const stateOptions = useMemo(\n () => listStates().map((s) => ({ value: s.uf, label: s.name })),\n [],\n );\n const cityOptions = useMemo(() => (uf ? placeChoices(uf) : []), [uf]);\n\n function handleUf(next: string): void {\n const nextUf = normalizeUf(next);\n setUf(nextUf);\n setCity(null);\n onChange?.({ uf: nextUf, city: null, municipalityId: null });\n }\n\n function handleCity(next: string): void {\n const nextCity = next || null;\n setCity(nextCity);\n onChange?.({\n uf,\n city: nextCity,\n municipalityId: uf && nextCity ? (resolveMunicipality(uf, nextCity)?.id ?? null) : null,\n });\n }\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: layout === \"row\" ? \"row\" : \"column\",\n gap: \"var(--tempest-space-3, 12px)\",\n flexWrap: \"wrap\",\n }}\n >\n <Select\n label={stateLabel}\n placeholder={statePlaceholder}\n options={stateOptions}\n value={uf ?? \"\"}\n disabled={disabled}\n onChange={(e) => handleUf(e.target.value)}\n style={{ minWidth: 0 }}\n />\n <Select\n label={cityLabel}\n placeholder={cityPlaceholder}\n options={cityOptions}\n value={city ?? \"\"}\n disabled={disabled || !uf}\n onChange={(e) => handleCity(e.target.value)}\n style={{ minWidth: 0 }}\n />\n </div>\n );\n}\n"],"mappings":";;;;;AA8EA,SAAS,EAAa,GAAkB;CAKpC,OAJc,CACV,GAAG,EAAmB,CAAE,CAAC,CAAC,KAAK,MAAM,EAAE,IAAI,GAC3C,GAAG,EAA0B,CAAE,CAAC,CAAC,KAAK,MAAM,EAAE,IAAI,CACtD,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,cAAc,GAAG,OAAO,CACpC,CAAA,CAAM,KAAK,OAAU;EAAE,OAAO;EAAM,OAAO;CAAK,EAAE;AAC7D;AAEA,SAAgB,EAAsB,EAClC,cACA,gBACA,aACA,gBAAa,UACb,eAAY,UACZ,sBAAmB,sBACnB,qBAAkB,sBAClB,cAAW,IACX,YAAS,SACgC;CACzC,IAAM,CAAC,GAAI,KAAS,EAAoB,KAAa,IAAI,GACnD,CAAC,GAAM,KAAW,EAAwB,KAAe,IAAI,GAE7D,IAAe,QACX,EAAW,CAAC,CAAC,KAAK,OAAO;EAAE,OAAO,EAAE;EAAI,OAAO,EAAE;CAAK,EAAE,GAC9D,CAAC,CACL,GACM,IAAc,QAAe,IAAK,EAAa,CAAE,IAAI,CAAC,GAAI,CAAC,CAAE,CAAC;CAEpE,SAAS,EAAS,GAAoB;EAClC,IAAM,IAAS,EAAY,CAAI;EAG/B,AAFA,EAAM,CAAM,GACZ,EAAQ,IAAI,GACZ,IAAW;GAAE,IAAI;GAAQ,MAAM;GAAM,gBAAgB;EAAK,CAAC;CAC/D;CAEA,SAAS,EAAW,GAAoB;EACpC,IAAM,IAAW,KAAQ;EAEzB,AADA,EAAQ,CAAQ,GAChB,IAAW;GACP;GACA,MAAM;GACN,gBAAgB,KAAM,IAAY,EAAoB,GAAI,CAAQ,CAAC,EAAE,MAAM,OAAQ;EACvF,CAAC;CACL;CAEA,OACI,kBAAC,OAAD;EACI,OAAO;GACH,SAAS;GACT,eAAe,MAAW,QAAQ,QAAQ;GAC1C,KAAK;GACL,UAAU;EACd;EANJ,UAAA,CAQI,kBAAC,GAAD;GACI,OAAO;GACP,aAAa;GACb,SAAS;GACT,OAAO,KAAM;GACH;GACV,WAAW,MAAM,EAAS,EAAE,OAAO,KAAK;GACxC,OAAO,EAAE,UAAU,EAAE;EACxB,CAAA,GACD,kBAAC,GAAD;GACI,OAAO;GACP,aAAa;GACb,SAAS;GACT,OAAO,KAAQ;GACf,UAAU,KAAY,CAAC;GACvB,WAAW,MAAM,EAAW,EAAE,OAAO,KAAK;GAC1C,OAAO,EAAE,UAAU,EAAE;EACxB,CAAA,CACA;;AAEb"}
1
+ {"version":3,"file":"BrazilStateCitySelect.js","names":["placeChoices","municipalitiesByUf","uf","m","administrativeRegionsByUf","r","a","b","name","BrazilStateCitySelect","setUf","useState","defaultUf","city","setCity","defaultCity","stateOptions","useMemo","listStates","s","cityOptions","handleUf","nextUf","normalizeUf","next","onChange","handleCity","nextCity","resolveMunicipality","layout","Select","stateLabel","statePlaceholder","cityLabel","cityPlaceholder","disabled"],"sources":["../../src/br/BrazilStateCitySelect.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — two dependent selects in one control, so every knob\n * comes in pairs: stateLabel and cityLabel, statePlaceholder and cityPlaceholder,\n * defaultUf and defaultCity. The pairing is the feature — the city list is derived\n * from the chosen UF, which is exactly what a caller wiring two separate selects has\n * to reimplement.\n */\nimport { useMemo, useState, type ReactElement } from \"react\";\nimport { Select } from \"@/components/Select\";\nimport {\n administrativeRegionsByUf,\n listStates,\n municipalitiesByUf,\n normalizeUf,\n resolveMunicipality,\n type Choice,\n type UF,\n} from \"./locations\";\n\n/** Current selection emitted by {@link BrazilStateCitySelect}. */\nexport interface BrazilStateCitySelection {\n /** Selected federative unit, or `null` when none. */\n uf: UF | null;\n /** Selected city, or `null` when none. */\n city: string | null;\n /**\n * IBGE code of the selected municipality, or `null` when none is selected.\n *\n * This is the value to store. It survives the renames `city` does not, and\n * it is what `geocodeMunicipality` and every other dataset here join on. A\n * DF administrative region carries Brasília's code, because that is the\n * municipality it is part of.\n */\n municipalityId: string | null;\n}\n\nexport interface BrazilStateCitySelectProps {\n /** Pre-selected UF (uncontrolled initial value). */\n defaultUf?: UF;\n /** Pre-selected city (uncontrolled initial value). */\n defaultCity?: string;\n /** Fired whenever the state or city changes. */\n onChange?: (selection: BrazilStateCitySelection) => void;\n /** Label for the state select. Default: `\"Estado\"`. */\n stateLabel?: string;\n /** Label for the city select. Default: `\"Cidade\"`. */\n cityLabel?: string;\n /** Placeholder for the state select. Default: `\"Selecione o estado\"`. */\n statePlaceholder?: string;\n /** Placeholder for the city select. Default: `\"Selecione a cidade\"`. */\n cityPlaceholder?: string;\n /** Disable both selects. */\n disabled?: boolean;\n /** Layout of the two selects. Default: `\"row\"`. */\n layout?: \"row\" | \"column\";\n}\n\n/**\n * Cascading Estado → Cidade selector backed by the bundled BR locations data —\n * pick a state and the city list narrows to that UF's municipalities. No\n * network, no external API. Complements {@link BrazilMap} (wire the map's\n * `onSelect` to drive the same UF).\n *\n * @example\n * <BrazilStateCitySelect onChange={({ uf, city }) => console.log(uf, city)} />\n */\n/**\n * The pickable places of a federative unit: its municipalities, plus the DF's\n * administrative regions.\n *\n * The DF has one municipality and nobody there writes \"Brasília\" in an address\n * field — they write Ceilândia, Taguatinga, Gama. Offering only the municipality\n * would be faithful to IBGE and useless in a form, so the 35 regions are listed\n * beside it and every one of them resolves to Brasília's code.\n *\n * @param uf - The selected federative unit.\n * @returns `{ value, label }` options, alphabetically, value === label.\n */\nfunction placeChoices(uf: UF): Choice[] {\n const names = [\n ...municipalitiesByUf(uf).map((m) => m.name),\n ...administrativeRegionsByUf(uf).map((r) => r.name),\n ].sort((a, b) => a.localeCompare(b, \"pt-BR\"));\n return names.map((name) => ({ value: name, label: name }));\n}\n\nexport function BrazilStateCitySelect({\n defaultUf,\n defaultCity,\n onChange,\n stateLabel = \"Estado\",\n cityLabel = \"Cidade\",\n statePlaceholder = \"Selecione o estado\",\n cityPlaceholder = \"Selecione a cidade\",\n disabled = false,\n layout = \"row\",\n}: BrazilStateCitySelectProps): ReactElement {\n const [uf, setUf] = useState<UF | null>(defaultUf ?? null);\n const [city, setCity] = useState<string | null>(defaultCity ?? null);\n\n const stateOptions = useMemo(\n () => listStates().map((s) => ({ value: s.uf, label: s.name })),\n [],\n );\n const cityOptions = useMemo(() => (uf ? placeChoices(uf) : []), [uf]);\n\n function handleUf(next: string): void {\n const nextUf = normalizeUf(next);\n setUf(nextUf);\n setCity(null);\n onChange?.({ uf: nextUf, city: null, municipalityId: null });\n }\n\n function handleCity(next: string): void {\n const nextCity = next || null;\n setCity(nextCity);\n onChange?.({\n uf,\n city: nextCity,\n municipalityId: uf && nextCity ? (resolveMunicipality(uf, nextCity)?.id ?? null) : null,\n });\n }\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: layout === \"row\" ? \"row\" : \"column\",\n gap: \"var(--tempest-space-3, 12px)\",\n flexWrap: \"wrap\",\n }}\n >\n <Select\n label={stateLabel}\n placeholder={statePlaceholder}\n options={stateOptions}\n value={uf ?? \"\"}\n disabled={disabled}\n onChange={(e) => handleUf(e.target.value)}\n style={{ minWidth: 0 }}\n />\n <Select\n label={cityLabel}\n placeholder={cityPlaceholder}\n options={cityOptions}\n value={city ?? \"\"}\n disabled={disabled || !uf}\n onChange={(e) => handleCity(e.target.value)}\n style={{ minWidth: 0 }}\n />\n </div>\n );\n}\n"],"mappings":";;;;;AA8EA,SAASA,EAAa,GAAkB;CAKpC,OAJc,CACV,GAAGC,EAAmBC,CAAE,CAAC,CAAC,KAAK,MAAMC,EAAE,IAAI,GAC3C,GAAGC,EAA0BF,CAAE,CAAC,CAAC,KAAK,MAAMG,EAAE,IAAI,CACtD,CAAC,CAAC,MAAM,GAAG,MAAMC,EAAE,cAAcC,GAAG,OAAO,CACpC,CAAA,CAAM,KAAK,OAAU;EAAE,OAAOC;EAAM,OAAOA;CAAK,EAAE;AAC7D;AAEA,SAAgBC,EAAsB,EAClC,cACA,gBACA,aACA,gBAAa,UACb,eAAY,UACZ,sBAAmB,sBACnB,qBAAkB,sBAClB,cAAW,IACX,YAAS,SACgC;CACzC,IAAM,CAACP,GAAIQ,KAASC,EAAoBC,KAAa,IAAI,GACnD,CAACC,GAAMC,KAAWH,EAAwBI,KAAe,IAAI,GAE7DC,IAAeC,QACXC,EAAW,CAAC,CAAC,KAAK,OAAO;EAAE,OAAOC,EAAE;EAAI,OAAOA,EAAE;CAAK,EAAE,GAC9D,CAAC,CACL,GACMC,IAAcH,QAAef,IAAKF,EAAaE,CAAE,IAAI,CAAC,GAAI,CAACA,CAAE,CAAC;CAEpE,SAASmB,EAAS,GAAoB;EAClC,IAAMC,IAASC,EAAYC,CAAI;EAG/B,AAFAd,EAAMY,CAAM,GACZR,EAAQ,IAAI,GACZW,IAAW;GAAE,IAAIH;GAAQ,MAAM;GAAM,gBAAgB;EAAK,CAAC;CAC/D;CAEA,SAASI,EAAW,GAAoB;EACpC,IAAMC,IAAWH,KAAQ;EAEzB,AADAV,EAAQa,CAAQ,GAChBF,IAAW;GACP;GACA,MAAME;GACN,gBAAgBzB,KAAMyB,IAAYC,EAAoB1B,GAAIyB,CAAQ,CAAC,EAAE,MAAM,OAAQ;EACvF,CAAC;CACL;CAEA,OACI,kBAAC,OAAD;EACI,OAAO;GACH,SAAS;GACT,eAAeE,MAAW,QAAQ,QAAQ;GAC1C,KAAK;GACL,UAAU;EACd;EANJ,UAAA,CAQI,kBAACC,GAAD;GACI,OAAOC;GACP,aAAaC;GACb,SAAShB;GACT,OAAOd,KAAM;GACH;GACV,WAAW,MAAMmB,EAAS,EAAE,OAAO,KAAK;GACxC,OAAO,EAAE,UAAU,EAAE;EACxB,CAAA,GACD,kBAACS,GAAD;GACI,OAAOG;GACP,aAAaC;GACb,SAASd;GACT,OAAOP,KAAQ;GACf,UAAUsB,KAAY,CAACjC;GACvB,WAAW,MAAMwB,EAAW,EAAE,OAAO,KAAK;GAC1C,OAAO,EAAE,UAAU,EAAE;EACxB,CAAA,CACA;;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"BrazilStateMap.cjs","names":[],"sources":["../../src/br/BrazilStateMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the municipality-level\n * twin of BrazilMap, prop for prop, plus the `uf` that selects which state's\n * geometry to load. Splitting it differently from BrazilMap would mean two maps with\n * two shapes for the same job.\n */\nimport { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { fitProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport { getState, type UF } from \"./locations\";\nimport { MapMarkers } from \"./MapMarkers\";\nimport { MapTooltip } from \"./MapTooltip\";\nimport type { ColorScale } from \"./scales\";\nimport { useMapZoom } from \"./use-map-zoom\";\nimport { loadStateMunicipalities, type StateMunicipalities } from \"./state-geo\";\nimport { geometriesBounds, geometryCentroid, geometryPath, lerpColor } from \"./svg-utils\";\nimport { useMapHover } from \"./use-map-hover\";\nimport styles from \"./BrazilMap.module.css\";\n\n/** A municipality identified for selection callbacks. */\nexport interface Municipality {\n /** 7-digit IBGE code. */\n id: string;\n /** Municipality name. */\n name: string;\n}\n\n/** Data passed to a {@link BrazilStateMapProps.renderTooltip} callback. */\nexport interface BrazilStateMapTooltipData extends Municipality {\n /** Choropleth value for this municipality, if `values` was provided. */\n value?: number;\n}\n\nexport interface BrazilStateMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Federative unit to draw (required). */\n uf: UF;\n /** Selected municipality — matched by IBGE `id` or by `name`. Accepts many. */\n selected?: string | readonly string[] | null;\n /** Fired when a municipality is clicked. */\n onSelect?: (municipality: Municipality) => void;\n /**\n * Choropleth values keyed by municipality `id` **or** `name`. When set, each\n * municipality is tinted between `minColor` and `maxColor`.\n */\n values?: Record<string, number>;\n /** Choropleth low-end color (2-color linear ramp). Default: a light primary tint. */\n minColor?: string;\n /** Choropleth high-end color (2-color linear ramp). Default: the primary token. */\n maxColor?: string;\n /**\n * Custom value→color scale (from `sequentialScale`/`quantizeScale`). Takes\n * precedence over `minColor`/`maxColor`. Pair with a `<MapLegend>`.\n */\n colorScale?: ColorScale;\n /** Viewport height in pixels. Default: `440`. */\n height?: number;\n /** Inner padding in pixels. Default: `12`. */\n padding?: number;\n /**\n * Render each municipality name at its centroid. Off by default — a state\n * can have hundreds of municipalities and labels overlap badly.\n */\n showLabels?: boolean;\n /** Accessible label. Default: derived from the state name. */\n label?: string;\n /** Content while the state geometry is loading. */\n loadingContent?: ReactNode;\n /** Show a floating tooltip (name + IBGE code + value) on hover. Default: `true`. */\n showTooltip?: boolean;\n /** Override the default tooltip content. */\n renderTooltip?: (data: BrazilStateMapTooltipData) => ReactNode;\n /** Point markers to overlay on the state (e.g. addresses, POIs). */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n /** Enable wheel-zoom + drag-pan (double-click resets). Default: `false`. */\n zoomable?: boolean;\n}\n\n/**\n * Clickable submap of a single Brazilian state showing **all its\n * municipalities** as SVG paths — no external tiles or paid API. The state's\n * geometry (~40-70 KB gzip) is loaded lazily per UF, so switching states fetches\n * only what is shown.\n *\n * @example\n * const [city, setCity] = useState<string | null>(null);\n * <BrazilStateMap uf=\"SP\" selected={city} onSelect={(m) => setCity(m.name)} />\n *\n * @example\n * // Choropleth of a metric by municipality name\n * <BrazilStateMap uf=\"RJ\" values={{ \"Rio de Janeiro\": 100, Niterói: 40 }} />\n */\nexport function BrazilStateMap({\n uf,\n selected,\n onSelect,\n values,\n minColor = \"#dbeafe\",\n maxColor = \"#2563eb\",\n colorScale,\n height = 440,\n padding = 12,\n showLabels = false,\n label,\n loadingContent,\n showTooltip = true,\n renderTooltip,\n markers,\n onMarkerClick,\n zoomable = false,\n className,\n style,\n ...rest\n}: BrazilStateMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n const [collection, setCollection] = useState<StateMunicipalities | null>(null);\n const mapZoom = useMapZoom(zoomable);\n const { hover, onMove, onLeave } = useMapHover<Municipality>(containerRef);\n\n useEffect(() => {\n let active = true;\n setCollection(null);\n void loadStateMunicipalities(uf).then((data) => {\n if (active) setCollection(data);\n });\n return () => {\n active = false;\n };\n }, [uf]);\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 selectedSet = useMemo<Set<string>>(() => {\n if (!selected) return new Set();\n return new Set(Array.isArray(selected) ? selected : [selected as string]);\n }, [selected]);\n\n const valueRange = useMemo<[number, number] | null>(() => {\n if (!values) return null;\n const nums = Object.values(values).filter((v): v is number => typeof v === \"number\");\n if (nums.length === 0) return null;\n return [Math.min(...nums), Math.max(...nums)];\n }, [values]);\n\n const shapes = useMemo(() => {\n if (!collection) return null;\n const projection = fitProjection(\n geometriesBounds(collection.features.map((f) => f.geometry)),\n width,\n height,\n { padding },\n );\n const items = collection.features.map((feature) => ({\n id: feature.properties.id,\n name: feature.properties.name,\n d: geometryPath(feature.geometry, projection),\n centroid: geometryCentroid(feature.geometry, projection),\n }));\n return { projection, items };\n }, [collection, width, height, padding]);\n\n function fillFor(id: string, name: string): string | undefined {\n const v = values?.[id] ?? values?.[name];\n if (typeof v !== \"number\") return undefined;\n if (colorScale) return colorScale(v);\n if (!valueRange) return undefined;\n const [min, max] = valueRange;\n const t = max === min ? 1 : (v - min) / (max - min);\n return lerpColor(minColor, maxColor, t);\n }\n\n // Memoized so hover re-renders don't rebuild hundreds of municipality paths.\n const cityEls = useMemo(() => {\n if (!shapes) return null;\n return shapes.items.map((shape) => {\n const isSelected = selectedSet.has(shape.id) || selectedSet.has(shape.name);\n const fillColor = isSelected ? undefined : fillFor(shape.id, shape.name);\n return (\n <path\n key={shape.id}\n className={cn(styles.state, isSelected && styles.selected)}\n d={shape.d}\n fillRule=\"evenodd\"\n style={fillColor ? { fill: fillColor } : undefined}\n data-city-id={shape.id}\n data-city={shape.name}\n tabIndex={onSelect ? 0 : undefined}\n role={onSelect ? \"button\" : undefined}\n aria-label={shape.name}\n aria-pressed={onSelect ? isSelected : undefined}\n onClick={\n onSelect ? () => onSelect({ id: shape.id, name: shape.name }) : undefined\n }\n onMouseMove={\n showTooltip\n ? (e) => onMove({ id: shape.id, name: shape.name }, e)\n : undefined\n }\n onMouseLeave={showTooltip ? onLeave : undefined}\n onKeyDown={\n onSelect\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect({ id: shape.id, name: shape.name });\n }\n }\n : undefined\n }\n />\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shapes,\n selectedSet,\n values,\n colorScale,\n minColor,\n maxColor,\n onSelect,\n showTooltip,\n onMove,\n onLeave,\n ]);\n\n const resolvedLabel = label ?? `Municípios de ${getState(uf)?.name ?? uf}`;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"group\"\n aria-label={resolvedLabel}\n {...rest}\n >\n {!shapes ? (\n <div className={styles.loading}>{loadingContent ?? \"Carregando municípios…\"}</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 {...mapZoom.handlers}\n >\n <g transform={mapZoom.transform || undefined}>\n {cityEls}\n\n {showLabels &&\n shapes.items.map((shape) => (\n <text\n key={`label-${shape.id}`}\n className={styles.label}\n x={shape.centroid.x}\n y={shape.centroid.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {shape.name}\n </text>\n ))}\n\n {markers && markers.length > 0 && (\n <MapMarkers\n projection={shapes.projection}\n markers={markers}\n onMarkerClick={onMarkerClick}\n />\n )}\n </g>\n </svg>\n )}\n\n {mapZoom.isTransformed && (\n <button type=\"button\" className={styles.zoomReset} onClick={mapZoom.reset}>\n Reset\n </button>\n )}\n\n {showTooltip && hover && (\n <MapTooltip x={hover.x} y={hover.y}>\n {renderTooltip ? (\n renderTooltip({\n ...hover.item,\n value: values?.[hover.item.id] ?? values?.[hover.item.name],\n })\n ) : (\n <>\n <div className={styles.tooltipTitle}>{hover.item.name}</div>\n <div className={styles.tooltipMeta}>\n IBGE {hover.item.id}\n {(() => {\n const v = values?.[hover.item.id] ?? values?.[hover.item.name];\n return typeof v === \"number\" ? ` · ${v}` : \"\";\n })()}\n </div>\n </>\n )}\n </MapTooltip>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BrazilStateMap.cjs","names":["useRef","useState","useMapZoom","useMapHover","loadStateMunicipalities","useMemo","fitProjection","geometriesBounds","geometryPath","geometryCentroid","lerpColor","cn","styles","getState","MapMarkers","MapTooltip","_Fragment","require_cn","require_projection","require_locations","require_state_geo","require_BrazilMap_module","require_MapMarkers","require_MapTooltip","require_use_map_zoom","require_svg_utils","require_use_map_hover","react","react_jsx_runtime","BrazilStateMap","rest","containerRef","width","setWidth","collection","setCollection","mapZoom","zoomable","active","uf","data","node","observer","measured","entries","selectedSet","selected","valueRange","values","nums","v","shapes","projection","f","height","feature","padding","fillFor","id","name","colorScale","min","max","t","minColor","maxColor","cityEls","isSelected","shape","fillColor","onSelect","showTooltip","onMove","onLeave","resolvedLabel","label","className","style","showLabels","markers","loadingContent","hover","renderTooltip"],"sources":["../../src/br/BrazilStateMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the municipality-level\n * twin of BrazilMap, prop for prop, plus the `uf` that selects which state's\n * geometry to load. Splitting it differently from BrazilMap would mean two maps with\n * two shapes for the same job.\n */\nimport { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { fitProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport { getState, type UF } from \"./locations\";\nimport { MapMarkers } from \"./MapMarkers\";\nimport { MapTooltip } from \"./MapTooltip\";\nimport type { ColorScale } from \"./scales\";\nimport { useMapZoom } from \"./use-map-zoom\";\nimport { loadStateMunicipalities, type StateMunicipalities } from \"./state-geo\";\nimport { geometriesBounds, geometryCentroid, geometryPath, lerpColor } from \"./svg-utils\";\nimport { useMapHover } from \"./use-map-hover\";\nimport styles from \"./BrazilMap.module.css\";\n\n/** A municipality identified for selection callbacks. */\nexport interface Municipality {\n /** 7-digit IBGE code. */\n id: string;\n /** Municipality name. */\n name: string;\n}\n\n/** Data passed to a {@link BrazilStateMapProps.renderTooltip} callback. */\nexport interface BrazilStateMapTooltipData extends Municipality {\n /** Choropleth value for this municipality, if `values` was provided. */\n value?: number;\n}\n\nexport interface BrazilStateMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Federative unit to draw (required). */\n uf: UF;\n /** Selected municipality — matched by IBGE `id` or by `name`. Accepts many. */\n selected?: string | readonly string[] | null;\n /** Fired when a municipality is clicked. */\n onSelect?: (municipality: Municipality) => void;\n /**\n * Choropleth values keyed by municipality `id` **or** `name`. When set, each\n * municipality is tinted between `minColor` and `maxColor`.\n */\n values?: Record<string, number>;\n /** Choropleth low-end color (2-color linear ramp). Default: a light primary tint. */\n minColor?: string;\n /** Choropleth high-end color (2-color linear ramp). Default: the primary token. */\n maxColor?: string;\n /**\n * Custom value→color scale (from `sequentialScale`/`quantizeScale`). Takes\n * precedence over `minColor`/`maxColor`. Pair with a `<MapLegend>`.\n */\n colorScale?: ColorScale;\n /** Viewport height in pixels. Default: `440`. */\n height?: number;\n /** Inner padding in pixels. Default: `12`. */\n padding?: number;\n /**\n * Render each municipality name at its centroid. Off by default — a state\n * can have hundreds of municipalities and labels overlap badly.\n */\n showLabels?: boolean;\n /** Accessible label. Default: derived from the state name. */\n label?: string;\n /** Content while the state geometry is loading. */\n loadingContent?: ReactNode;\n /** Show a floating tooltip (name + IBGE code + value) on hover. Default: `true`. */\n showTooltip?: boolean;\n /** Override the default tooltip content. */\n renderTooltip?: (data: BrazilStateMapTooltipData) => ReactNode;\n /** Point markers to overlay on the state (e.g. addresses, POIs). */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n /** Enable wheel-zoom + drag-pan (double-click resets). Default: `false`. */\n zoomable?: boolean;\n}\n\n/**\n * Clickable submap of a single Brazilian state showing **all its\n * municipalities** as SVG paths — no external tiles or paid API. The state's\n * geometry (~40-70 KB gzip) is loaded lazily per UF, so switching states fetches\n * only what is shown.\n *\n * @example\n * const [city, setCity] = useState<string | null>(null);\n * <BrazilStateMap uf=\"SP\" selected={city} onSelect={(m) => setCity(m.name)} />\n *\n * @example\n * // Choropleth of a metric by municipality name\n * <BrazilStateMap uf=\"RJ\" values={{ \"Rio de Janeiro\": 100, Niterói: 40 }} />\n */\nexport function BrazilStateMap({\n uf,\n selected,\n onSelect,\n values,\n minColor = \"#dbeafe\",\n maxColor = \"#2563eb\",\n colorScale,\n height = 440,\n padding = 12,\n showLabels = false,\n label,\n loadingContent,\n showTooltip = true,\n renderTooltip,\n markers,\n onMarkerClick,\n zoomable = false,\n className,\n style,\n ...rest\n}: BrazilStateMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n const [collection, setCollection] = useState<StateMunicipalities | null>(null);\n const mapZoom = useMapZoom(zoomable);\n const { hover, onMove, onLeave } = useMapHover<Municipality>(containerRef);\n\n useEffect(() => {\n let active = true;\n setCollection(null);\n void loadStateMunicipalities(uf).then((data) => {\n if (active) setCollection(data);\n });\n return () => {\n active = false;\n };\n }, [uf]);\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 selectedSet = useMemo<Set<string>>(() => {\n if (!selected) return new Set();\n return new Set(Array.isArray(selected) ? selected : [selected as string]);\n }, [selected]);\n\n const valueRange = useMemo<[number, number] | null>(() => {\n if (!values) return null;\n const nums = Object.values(values).filter((v): v is number => typeof v === \"number\");\n if (nums.length === 0) return null;\n return [Math.min(...nums), Math.max(...nums)];\n }, [values]);\n\n const shapes = useMemo(() => {\n if (!collection) return null;\n const projection = fitProjection(\n geometriesBounds(collection.features.map((f) => f.geometry)),\n width,\n height,\n { padding },\n );\n const items = collection.features.map((feature) => ({\n id: feature.properties.id,\n name: feature.properties.name,\n d: geometryPath(feature.geometry, projection),\n centroid: geometryCentroid(feature.geometry, projection),\n }));\n return { projection, items };\n }, [collection, width, height, padding]);\n\n function fillFor(id: string, name: string): string | undefined {\n const v = values?.[id] ?? values?.[name];\n if (typeof v !== \"number\") return undefined;\n if (colorScale) return colorScale(v);\n if (!valueRange) return undefined;\n const [min, max] = valueRange;\n const t = max === min ? 1 : (v - min) / (max - min);\n return lerpColor(minColor, maxColor, t);\n }\n\n // Memoized so hover re-renders don't rebuild hundreds of municipality paths.\n const cityEls = useMemo(() => {\n if (!shapes) return null;\n return shapes.items.map((shape) => {\n const isSelected = selectedSet.has(shape.id) || selectedSet.has(shape.name);\n const fillColor = isSelected ? undefined : fillFor(shape.id, shape.name);\n return (\n <path\n key={shape.id}\n className={cn(styles.state, isSelected && styles.selected)}\n d={shape.d}\n fillRule=\"evenodd\"\n style={fillColor ? { fill: fillColor } : undefined}\n data-city-id={shape.id}\n data-city={shape.name}\n tabIndex={onSelect ? 0 : undefined}\n role={onSelect ? \"button\" : undefined}\n aria-label={shape.name}\n aria-pressed={onSelect ? isSelected : undefined}\n onClick={\n onSelect ? () => onSelect({ id: shape.id, name: shape.name }) : undefined\n }\n onMouseMove={\n showTooltip\n ? (e) => onMove({ id: shape.id, name: shape.name }, e)\n : undefined\n }\n onMouseLeave={showTooltip ? onLeave : undefined}\n onKeyDown={\n onSelect\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect({ id: shape.id, name: shape.name });\n }\n }\n : undefined\n }\n />\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shapes,\n selectedSet,\n values,\n colorScale,\n minColor,\n maxColor,\n onSelect,\n showTooltip,\n onMove,\n onLeave,\n ]);\n\n const resolvedLabel = label ?? `Municípios de ${getState(uf)?.name ?? uf}`;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"group\"\n aria-label={resolvedLabel}\n {...rest}\n >\n {!shapes ? (\n <div className={styles.loading}>{loadingContent ?? \"Carregando municípios…\"}</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 {...mapZoom.handlers}\n >\n <g transform={mapZoom.transform || undefined}>\n {cityEls}\n\n {showLabels &&\n shapes.items.map((shape) => (\n <text\n key={`label-${shape.id}`}\n className={styles.label}\n x={shape.centroid.x}\n y={shape.centroid.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {shape.name}\n </text>\n ))}\n\n {markers && markers.length > 0 && (\n <MapMarkers\n projection={shapes.projection}\n markers={markers}\n onMarkerClick={onMarkerClick}\n />\n )}\n </g>\n </svg>\n )}\n\n {mapZoom.isTransformed && (\n <button type=\"button\" className={styles.zoomReset} onClick={mapZoom.reset}>\n Reset\n </button>\n )}\n\n {showTooltip && hover && (\n <MapTooltip x={hover.x} y={hover.y}>\n {renderTooltip ? (\n renderTooltip({\n ...hover.item,\n value: values?.[hover.item.id] ?? values?.[hover.item.name],\n })\n ) : (\n <>\n <div className={styles.tooltipTitle}>{hover.item.name}</div>\n <div className={styles.tooltipMeta}>\n IBGE {hover.item.id}\n {(() => {\n const v = values?.[hover.item.id] ?? values?.[hover.item.name];\n return typeof v === \"number\" ? ` · ${v}` : \"\";\n })()}\n </div>\n </>\n )}\n </MapTooltip>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BrazilStateMap.js","names":[],"sources":["../../src/br/BrazilStateMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the municipality-level\n * twin of BrazilMap, prop for prop, plus the `uf` that selects which state's\n * geometry to load. Splitting it differently from BrazilMap would mean two maps with\n * two shapes for the same job.\n */\nimport { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { fitProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport { getState, type UF } from \"./locations\";\nimport { MapMarkers } from \"./MapMarkers\";\nimport { MapTooltip } from \"./MapTooltip\";\nimport type { ColorScale } from \"./scales\";\nimport { useMapZoom } from \"./use-map-zoom\";\nimport { loadStateMunicipalities, type StateMunicipalities } from \"./state-geo\";\nimport { geometriesBounds, geometryCentroid, geometryPath, lerpColor } from \"./svg-utils\";\nimport { useMapHover } from \"./use-map-hover\";\nimport styles from \"./BrazilMap.module.css\";\n\n/** A municipality identified for selection callbacks. */\nexport interface Municipality {\n /** 7-digit IBGE code. */\n id: string;\n /** Municipality name. */\n name: string;\n}\n\n/** Data passed to a {@link BrazilStateMapProps.renderTooltip} callback. */\nexport interface BrazilStateMapTooltipData extends Municipality {\n /** Choropleth value for this municipality, if `values` was provided. */\n value?: number;\n}\n\nexport interface BrazilStateMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Federative unit to draw (required). */\n uf: UF;\n /** Selected municipality — matched by IBGE `id` or by `name`. Accepts many. */\n selected?: string | readonly string[] | null;\n /** Fired when a municipality is clicked. */\n onSelect?: (municipality: Municipality) => void;\n /**\n * Choropleth values keyed by municipality `id` **or** `name`. When set, each\n * municipality is tinted between `minColor` and `maxColor`.\n */\n values?: Record<string, number>;\n /** Choropleth low-end color (2-color linear ramp). Default: a light primary tint. */\n minColor?: string;\n /** Choropleth high-end color (2-color linear ramp). Default: the primary token. */\n maxColor?: string;\n /**\n * Custom value→color scale (from `sequentialScale`/`quantizeScale`). Takes\n * precedence over `minColor`/`maxColor`. Pair with a `<MapLegend>`.\n */\n colorScale?: ColorScale;\n /** Viewport height in pixels. Default: `440`. */\n height?: number;\n /** Inner padding in pixels. Default: `12`. */\n padding?: number;\n /**\n * Render each municipality name at its centroid. Off by default — a state\n * can have hundreds of municipalities and labels overlap badly.\n */\n showLabels?: boolean;\n /** Accessible label. Default: derived from the state name. */\n label?: string;\n /** Content while the state geometry is loading. */\n loadingContent?: ReactNode;\n /** Show a floating tooltip (name + IBGE code + value) on hover. Default: `true`. */\n showTooltip?: boolean;\n /** Override the default tooltip content. */\n renderTooltip?: (data: BrazilStateMapTooltipData) => ReactNode;\n /** Point markers to overlay on the state (e.g. addresses, POIs). */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n /** Enable wheel-zoom + drag-pan (double-click resets). Default: `false`. */\n zoomable?: boolean;\n}\n\n/**\n * Clickable submap of a single Brazilian state showing **all its\n * municipalities** as SVG paths — no external tiles or paid API. The state's\n * geometry (~40-70 KB gzip) is loaded lazily per UF, so switching states fetches\n * only what is shown.\n *\n * @example\n * const [city, setCity] = useState<string | null>(null);\n * <BrazilStateMap uf=\"SP\" selected={city} onSelect={(m) => setCity(m.name)} />\n *\n * @example\n * // Choropleth of a metric by municipality name\n * <BrazilStateMap uf=\"RJ\" values={{ \"Rio de Janeiro\": 100, Niterói: 40 }} />\n */\nexport function BrazilStateMap({\n uf,\n selected,\n onSelect,\n values,\n minColor = \"#dbeafe\",\n maxColor = \"#2563eb\",\n colorScale,\n height = 440,\n padding = 12,\n showLabels = false,\n label,\n loadingContent,\n showTooltip = true,\n renderTooltip,\n markers,\n onMarkerClick,\n zoomable = false,\n className,\n style,\n ...rest\n}: BrazilStateMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n const [collection, setCollection] = useState<StateMunicipalities | null>(null);\n const mapZoom = useMapZoom(zoomable);\n const { hover, onMove, onLeave } = useMapHover<Municipality>(containerRef);\n\n useEffect(() => {\n let active = true;\n setCollection(null);\n void loadStateMunicipalities(uf).then((data) => {\n if (active) setCollection(data);\n });\n return () => {\n active = false;\n };\n }, [uf]);\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 selectedSet = useMemo<Set<string>>(() => {\n if (!selected) return new Set();\n return new Set(Array.isArray(selected) ? selected : [selected as string]);\n }, [selected]);\n\n const valueRange = useMemo<[number, number] | null>(() => {\n if (!values) return null;\n const nums = Object.values(values).filter((v): v is number => typeof v === \"number\");\n if (nums.length === 0) return null;\n return [Math.min(...nums), Math.max(...nums)];\n }, [values]);\n\n const shapes = useMemo(() => {\n if (!collection) return null;\n const projection = fitProjection(\n geometriesBounds(collection.features.map((f) => f.geometry)),\n width,\n height,\n { padding },\n );\n const items = collection.features.map((feature) => ({\n id: feature.properties.id,\n name: feature.properties.name,\n d: geometryPath(feature.geometry, projection),\n centroid: geometryCentroid(feature.geometry, projection),\n }));\n return { projection, items };\n }, [collection, width, height, padding]);\n\n function fillFor(id: string, name: string): string | undefined {\n const v = values?.[id] ?? values?.[name];\n if (typeof v !== \"number\") return undefined;\n if (colorScale) return colorScale(v);\n if (!valueRange) return undefined;\n const [min, max] = valueRange;\n const t = max === min ? 1 : (v - min) / (max - min);\n return lerpColor(minColor, maxColor, t);\n }\n\n // Memoized so hover re-renders don't rebuild hundreds of municipality paths.\n const cityEls = useMemo(() => {\n if (!shapes) return null;\n return shapes.items.map((shape) => {\n const isSelected = selectedSet.has(shape.id) || selectedSet.has(shape.name);\n const fillColor = isSelected ? undefined : fillFor(shape.id, shape.name);\n return (\n <path\n key={shape.id}\n className={cn(styles.state, isSelected && styles.selected)}\n d={shape.d}\n fillRule=\"evenodd\"\n style={fillColor ? { fill: fillColor } : undefined}\n data-city-id={shape.id}\n data-city={shape.name}\n tabIndex={onSelect ? 0 : undefined}\n role={onSelect ? \"button\" : undefined}\n aria-label={shape.name}\n aria-pressed={onSelect ? isSelected : undefined}\n onClick={\n onSelect ? () => onSelect({ id: shape.id, name: shape.name }) : undefined\n }\n onMouseMove={\n showTooltip\n ? (e) => onMove({ id: shape.id, name: shape.name }, e)\n : undefined\n }\n onMouseLeave={showTooltip ? onLeave : undefined}\n onKeyDown={\n onSelect\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect({ id: shape.id, name: shape.name });\n }\n }\n : undefined\n }\n />\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shapes,\n selectedSet,\n values,\n colorScale,\n minColor,\n maxColor,\n onSelect,\n showTooltip,\n onMove,\n onLeave,\n ]);\n\n const resolvedLabel = label ?? `Municípios de ${getState(uf)?.name ?? uf}`;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"group\"\n aria-label={resolvedLabel}\n {...rest}\n >\n {!shapes ? (\n <div className={styles.loading}>{loadingContent ?? \"Carregando municípios…\"}</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 {...mapZoom.handlers}\n >\n <g transform={mapZoom.transform || undefined}>\n {cityEls}\n\n {showLabels &&\n shapes.items.map((shape) => (\n <text\n key={`label-${shape.id}`}\n className={styles.label}\n x={shape.centroid.x}\n y={shape.centroid.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {shape.name}\n </text>\n ))}\n\n {markers && markers.length > 0 && (\n <MapMarkers\n projection={shapes.projection}\n markers={markers}\n onMarkerClick={onMarkerClick}\n />\n )}\n </g>\n </svg>\n )}\n\n {mapZoom.isTransformed && (\n <button type=\"button\" className={styles.zoomReset} onClick={mapZoom.reset}>\n Reset\n </button>\n )}\n\n {showTooltip && hover && (\n <MapTooltip x={hover.x} y={hover.y}>\n {renderTooltip ? (\n renderTooltip({\n ...hover.item,\n value: values?.[hover.item.id] ?? values?.[hover.item.name],\n })\n ) : (\n <>\n <div className={styles.tooltipTitle}>{hover.item.name}</div>\n <div className={styles.tooltipMeta}>\n IBGE {hover.item.id}\n {(() => {\n const v = values?.[hover.item.id] ?? values?.[hover.item.name];\n return typeof v === \"number\" ? ` · ${v}` : \"\";\n })()}\n </div>\n </>\n )}\n </MapTooltip>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BrazilStateMap.js","names":["styles","_Fragment","BrazilMap_module_default","Fragment$1","BrazilStateMap","rest","containerRef","useRef","width","setWidth","useState","collection","setCollection","mapZoom","useMapZoom","zoomable","useMapHover","useEffect","active","loadStateMunicipalities","uf","data","node","observer","measured","entries","selectedSet","useMemo","selected","valueRange","values","nums","v","shapes","projection","fitProjection","geometriesBounds","f","height","feature","geometryPath","geometryCentroid","padding","fillFor","id","name","colorScale","min","max","t","lerpColor","minColor","maxColor","cityEls","isSelected","shape","fillColor","cn","onSelect","showTooltip","onMove","onLeave","resolvedLabel","label","getState","className","style","showLabels","markers","MapMarkers","loadingContent","hover","MapTooltip","renderTooltip"],"sources":["../../src/br/BrazilStateMap.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the municipality-level\n * twin of BrazilMap, prop for prop, plus the `uf` that selects which state's\n * geometry to load. Splitting it differently from BrazilMap would mean two maps with\n * two shapes for the same job.\n */\nimport { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { fitProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport { getState, type UF } from \"./locations\";\nimport { MapMarkers } from \"./MapMarkers\";\nimport { MapTooltip } from \"./MapTooltip\";\nimport type { ColorScale } from \"./scales\";\nimport { useMapZoom } from \"./use-map-zoom\";\nimport { loadStateMunicipalities, type StateMunicipalities } from \"./state-geo\";\nimport { geometriesBounds, geometryCentroid, geometryPath, lerpColor } from \"./svg-utils\";\nimport { useMapHover } from \"./use-map-hover\";\nimport styles from \"./BrazilMap.module.css\";\n\n/** A municipality identified for selection callbacks. */\nexport interface Municipality {\n /** 7-digit IBGE code. */\n id: string;\n /** Municipality name. */\n name: string;\n}\n\n/** Data passed to a {@link BrazilStateMapProps.renderTooltip} callback. */\nexport interface BrazilStateMapTooltipData extends Municipality {\n /** Choropleth value for this municipality, if `values` was provided. */\n value?: number;\n}\n\nexport interface BrazilStateMapProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Federative unit to draw (required). */\n uf: UF;\n /** Selected municipality — matched by IBGE `id` or by `name`. Accepts many. */\n selected?: string | readonly string[] | null;\n /** Fired when a municipality is clicked. */\n onSelect?: (municipality: Municipality) => void;\n /**\n * Choropleth values keyed by municipality `id` **or** `name`. When set, each\n * municipality is tinted between `minColor` and `maxColor`.\n */\n values?: Record<string, number>;\n /** Choropleth low-end color (2-color linear ramp). Default: a light primary tint. */\n minColor?: string;\n /** Choropleth high-end color (2-color linear ramp). Default: the primary token. */\n maxColor?: string;\n /**\n * Custom value→color scale (from `sequentialScale`/`quantizeScale`). Takes\n * precedence over `minColor`/`maxColor`. Pair with a `<MapLegend>`.\n */\n colorScale?: ColorScale;\n /** Viewport height in pixels. Default: `440`. */\n height?: number;\n /** Inner padding in pixels. Default: `12`. */\n padding?: number;\n /**\n * Render each municipality name at its centroid. Off by default — a state\n * can have hundreds of municipalities and labels overlap badly.\n */\n showLabels?: boolean;\n /** Accessible label. Default: derived from the state name. */\n label?: string;\n /** Content while the state geometry is loading. */\n loadingContent?: ReactNode;\n /** Show a floating tooltip (name + IBGE code + value) on hover. Default: `true`. */\n showTooltip?: boolean;\n /** Override the default tooltip content. */\n renderTooltip?: (data: BrazilStateMapTooltipData) => ReactNode;\n /** Point markers to overlay on the state (e.g. addresses, POIs). */\n markers?: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n /** Enable wheel-zoom + drag-pan (double-click resets). Default: `false`. */\n zoomable?: boolean;\n}\n\n/**\n * Clickable submap of a single Brazilian state showing **all its\n * municipalities** as SVG paths — no external tiles or paid API. The state's\n * geometry (~40-70 KB gzip) is loaded lazily per UF, so switching states fetches\n * only what is shown.\n *\n * @example\n * const [city, setCity] = useState<string | null>(null);\n * <BrazilStateMap uf=\"SP\" selected={city} onSelect={(m) => setCity(m.name)} />\n *\n * @example\n * // Choropleth of a metric by municipality name\n * <BrazilStateMap uf=\"RJ\" values={{ \"Rio de Janeiro\": 100, Niterói: 40 }} />\n */\nexport function BrazilStateMap({\n uf,\n selected,\n onSelect,\n values,\n minColor = \"#dbeafe\",\n maxColor = \"#2563eb\",\n colorScale,\n height = 440,\n padding = 12,\n showLabels = false,\n label,\n loadingContent,\n showTooltip = true,\n renderTooltip,\n markers,\n onMarkerClick,\n zoomable = false,\n className,\n style,\n ...rest\n}: BrazilStateMapProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState<number>(600);\n const [collection, setCollection] = useState<StateMunicipalities | null>(null);\n const mapZoom = useMapZoom(zoomable);\n const { hover, onMove, onLeave } = useMapHover<Municipality>(containerRef);\n\n useEffect(() => {\n let active = true;\n setCollection(null);\n void loadStateMunicipalities(uf).then((data) => {\n if (active) setCollection(data);\n });\n return () => {\n active = false;\n };\n }, [uf]);\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 selectedSet = useMemo<Set<string>>(() => {\n if (!selected) return new Set();\n return new Set(Array.isArray(selected) ? selected : [selected as string]);\n }, [selected]);\n\n const valueRange = useMemo<[number, number] | null>(() => {\n if (!values) return null;\n const nums = Object.values(values).filter((v): v is number => typeof v === \"number\");\n if (nums.length === 0) return null;\n return [Math.min(...nums), Math.max(...nums)];\n }, [values]);\n\n const shapes = useMemo(() => {\n if (!collection) return null;\n const projection = fitProjection(\n geometriesBounds(collection.features.map((f) => f.geometry)),\n width,\n height,\n { padding },\n );\n const items = collection.features.map((feature) => ({\n id: feature.properties.id,\n name: feature.properties.name,\n d: geometryPath(feature.geometry, projection),\n centroid: geometryCentroid(feature.geometry, projection),\n }));\n return { projection, items };\n }, [collection, width, height, padding]);\n\n function fillFor(id: string, name: string): string | undefined {\n const v = values?.[id] ?? values?.[name];\n if (typeof v !== \"number\") return undefined;\n if (colorScale) return colorScale(v);\n if (!valueRange) return undefined;\n const [min, max] = valueRange;\n const t = max === min ? 1 : (v - min) / (max - min);\n return lerpColor(minColor, maxColor, t);\n }\n\n // Memoized so hover re-renders don't rebuild hundreds of municipality paths.\n const cityEls = useMemo(() => {\n if (!shapes) return null;\n return shapes.items.map((shape) => {\n const isSelected = selectedSet.has(shape.id) || selectedSet.has(shape.name);\n const fillColor = isSelected ? undefined : fillFor(shape.id, shape.name);\n return (\n <path\n key={shape.id}\n className={cn(styles.state, isSelected && styles.selected)}\n d={shape.d}\n fillRule=\"evenodd\"\n style={fillColor ? { fill: fillColor } : undefined}\n data-city-id={shape.id}\n data-city={shape.name}\n tabIndex={onSelect ? 0 : undefined}\n role={onSelect ? \"button\" : undefined}\n aria-label={shape.name}\n aria-pressed={onSelect ? isSelected : undefined}\n onClick={\n onSelect ? () => onSelect({ id: shape.id, name: shape.name }) : undefined\n }\n onMouseMove={\n showTooltip\n ? (e) => onMove({ id: shape.id, name: shape.name }, e)\n : undefined\n }\n onMouseLeave={showTooltip ? onLeave : undefined}\n onKeyDown={\n onSelect\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect({ id: shape.id, name: shape.name });\n }\n }\n : undefined\n }\n />\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n shapes,\n selectedSet,\n values,\n colorScale,\n minColor,\n maxColor,\n onSelect,\n showTooltip,\n onMove,\n onLeave,\n ]);\n\n const resolvedLabel = label ?? `Municípios de ${getState(uf)?.name ?? uf}`;\n\n return (\n <div\n ref={containerRef}\n className={cn(styles.map, className)}\n style={{ height, ...style }}\n role=\"group\"\n aria-label={resolvedLabel}\n {...rest}\n >\n {!shapes ? (\n <div className={styles.loading}>{loadingContent ?? \"Carregando municípios…\"}</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 {...mapZoom.handlers}\n >\n <g transform={mapZoom.transform || undefined}>\n {cityEls}\n\n {showLabels &&\n shapes.items.map((shape) => (\n <text\n key={`label-${shape.id}`}\n className={styles.label}\n x={shape.centroid.x}\n y={shape.centroid.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n >\n {shape.name}\n </text>\n ))}\n\n {markers && markers.length > 0 && (\n <MapMarkers\n projection={shapes.projection}\n markers={markers}\n onMarkerClick={onMarkerClick}\n />\n )}\n </g>\n </svg>\n )}\n\n {mapZoom.isTransformed && (\n <button type=\"button\" className={styles.zoomReset} onClick={mapZoom.reset}>\n Reset\n </button>\n )}\n\n {showTooltip && hover && (\n <MapTooltip x={hover.x} y={hover.y}>\n {renderTooltip ? (\n renderTooltip({\n ...hover.item,\n value: values?.[hover.item.id] ?? values?.[hover.item.name],\n })\n ) : (\n <>\n <div className={styles.tooltipTitle}>{hover.item.name}</div>\n <div className={styles.tooltipMeta}>\n IBGE {hover.item.id}\n {(() => {\n const v = values?.[hover.item.id] ?? values?.[hover.item.name];\n return typeof v === \"number\" ? ` · ${v}` : \"\";\n })()}\n </div>\n </>\n )}\n </MapTooltip>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapLegend.cjs","names":[],"sources":["../../src/br/MapLegend.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { SEQUENTIAL_BLUES } from \"./scales\";\nimport styles from \"./MapLegend.module.css\";\n\n/** A discrete legend entry. */\nexport interface LegendItem {\n color: string;\n label: ReactNode;\n}\n\nexport interface MapLegendProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Legend heading. */\n title?: ReactNode;\n /**\n * Discrete entries (swatch + label). When provided the legend renders in\n * \"steps\" mode; otherwise it renders a continuous gradient from `min`/`max`.\n */\n items?: readonly LegendItem[];\n /** Continuous mode: low end of the domain. */\n min?: number;\n /** Continuous mode: high end of the domain. */\n max?: number;\n /** Continuous mode: palette (light → dark). Default: sequential blues. */\n palette?: readonly string[];\n /** Continuous mode: format the min/mid/max tick labels. */\n format?: (value: number) => string;\n}\n\n/**\n * Legend for a choropleth map. Renders a **continuous gradient** (with\n * min/mid/max ticks) from `min`/`max`/`palette`, or **discrete swatches** when\n * `items` is given. Pair it with a `BrazilMap`/`BrazilStateMap` `colorScale`.\n *\n * @example\n * // Continuous, matching a sequentialScale(0, 100)\n * <MapLegend title=\"Vendas\" min={0} max={100} palette={SEQUENTIAL_BLUES} />\n *\n * @example\n * // Discrete buckets\n * <MapLegend\n * title=\"Faixa\"\n * items={[\n * { color: \"#c6dbef\", label: \"< 10\" },\n * { color: \"#6baed6\", label: \"10–50\" },\n * { color: \"#08519c\", label: \"> 50\" },\n * ]}\n * />\n */\nexport function MapLegend({\n title,\n items,\n min = 0,\n max = 1,\n palette = SEQUENTIAL_BLUES,\n format = (v) => String(Math.round(v)),\n className,\n ...rest\n}: MapLegendProps) {\n return (\n <div className={cn(styles.legend, className)} {...rest}>\n {title != null && <div className={styles.title}>{title}</div>}\n\n {items ? (\n <ul className={styles.items}>\n {items.map((item, i) => (\n <li key={i} className={styles.item}>\n <span className={styles.swatch} style={{ background: item.color }} />\n <span className={styles.itemLabel}>{item.label}</span>\n </li>\n ))}\n </ul>\n ) : (\n <>\n <div\n className={styles.gradient}\n style={{ background: `linear-gradient(to right, ${palette.join(\", \")})` }}\n />\n <div className={styles.ticks}>\n <span>{format(min)}</span>\n <span>{format((min + max) / 2)}</span>\n <span>{format(max)}</span>\n </div>\n </>\n )}\n </div>\n );\n}\n"],"mappings":"oIAiDA,SAAgB,EAAU,CACtB,QACA,QACA,MAAM,EACN,MAAM,EACN,UAAU,EAAA,iBACV,SAAU,GAAM,OAAO,KAAK,MAAM,CAAC,CAAC,EACpC,YACA,GAAG,GACY,CACf,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,CAAS,EAAG,GAAI,EAAlD,SAAA,CACK,GAAS,OAAQ,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,MAAQ,SAAA,CAAW,CAAA,EAE3D,GACG,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAW,EAAA,QAAO,MACjB,SAAA,EAAM,KAAK,EAAM,KACd,EAAA,EAAA,KAAA,CAAC,KAAD,CAAY,UAAW,EAAA,QAAO,KAA9B,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,OAAQ,MAAO,CAAE,WAAY,EAAK,KAAM,CAAI,CAAA,GACpE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAY,SAAA,EAAK,KAAY,CAAA,CACrD,CAHK,EAAA,CAGL,CACP,CACD,CAAA,GAEJ,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,UAAW,EAAA,QAAO,SAClB,MAAO,CAAE,WAAY,6BAA6B,EAAQ,KAAK,IAAI,EAAE,EAAG,CAC3E,CAAA,GACD,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,MAAvB,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,EAAO,CAAG,CAAQ,CAAA,GACzB,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,GAAQ,EAAM,GAAO,CAAC,CAAQ,CAAA,GACrC,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,EAAO,CAAG,CAAQ,CAAA,CACxB,CACP,CAAA,CAAA,CAAA,CAAA,CAEL,GAEb"}
1
+ {"version":3,"file":"MapLegend.cjs","names":["SEQUENTIAL_BLUES","cn","styles","_Fragment","require_cn","require_scales","require_MapLegend_module","react_jsx_runtime","MapLegend","v","rest","className","title","items","item","i","palette","format","min","max"],"sources":["../../src/br/MapLegend.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { SEQUENTIAL_BLUES } from \"./scales\";\nimport styles from \"./MapLegend.module.css\";\n\n/** A discrete legend entry. */\nexport interface LegendItem {\n color: string;\n label: ReactNode;\n}\n\nexport interface MapLegendProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Legend heading. */\n title?: ReactNode;\n /**\n * Discrete entries (swatch + label). When provided the legend renders in\n * \"steps\" mode; otherwise it renders a continuous gradient from `min`/`max`.\n */\n items?: readonly LegendItem[];\n /** Continuous mode: low end of the domain. */\n min?: number;\n /** Continuous mode: high end of the domain. */\n max?: number;\n /** Continuous mode: palette (light → dark). Default: sequential blues. */\n palette?: readonly string[];\n /** Continuous mode: format the min/mid/max tick labels. */\n format?: (value: number) => string;\n}\n\n/**\n * Legend for a choropleth map. Renders a **continuous gradient** (with\n * min/mid/max ticks) from `min`/`max`/`palette`, or **discrete swatches** when\n * `items` is given. Pair it with a `BrazilMap`/`BrazilStateMap` `colorScale`.\n *\n * @example\n * // Continuous, matching a sequentialScale(0, 100)\n * <MapLegend title=\"Vendas\" min={0} max={100} palette={SEQUENTIAL_BLUES} />\n *\n * @example\n * // Discrete buckets\n * <MapLegend\n * title=\"Faixa\"\n * items={[\n * { color: \"#c6dbef\", label: \"< 10\" },\n * { color: \"#6baed6\", label: \"10–50\" },\n * { color: \"#08519c\", label: \"> 50\" },\n * ]}\n * />\n */\nexport function MapLegend({\n title,\n items,\n min = 0,\n max = 1,\n palette = SEQUENTIAL_BLUES,\n format = (v) => String(Math.round(v)),\n className,\n ...rest\n}: MapLegendProps) {\n return (\n <div className={cn(styles.legend, className)} {...rest}>\n {title != null && <div className={styles.title}>{title}</div>}\n\n {items ? (\n <ul className={styles.items}>\n {items.map((item, i) => (\n <li key={i} className={styles.item}>\n <span className={styles.swatch} style={{ background: item.color }} />\n <span className={styles.itemLabel}>{item.label}</span>\n </li>\n ))}\n </ul>\n ) : (\n <>\n <div\n className={styles.gradient}\n style={{ background: `linear-gradient(to right, ${palette.join(\", \")})` }}\n />\n <div className={styles.ticks}>\n <span>{format(min)}</span>\n <span>{format((min + max) / 2)}</span>\n <span>{format(max)}</span>\n </div>\n </>\n )}\n </div>\n );\n}\n"],"mappings":"A,oIAiDA,SAAgBQ,EAAU,CACtB,QACA,QACA,MAAM,EACN,MAAM,EACN,UAAUR,EAAAA,iBACV,SAAU,GAAM,OAAO,KAAK,MAAMS,CAAC,CAAC,EACpC,YACA,GAAGC,GACY,CACf,OACI,EAAAH,EAAA,KAAA,CAAC,MAAD,CAAK,UAAWN,EAAAA,GAAGC,EAAAA,QAAO,OAAQS,CAAS,EAAG,GAAID,EAAlD,SAAA,CACKE,GAAS,OAAQ,EAAAL,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWL,EAAAA,QAAO,MAAQ,SAAAU,CAAW,CAAA,EAE3DC,GACG,EAAAN,EAAA,IAAA,CAAC,KAAD,CAAI,UAAWL,EAAAA,QAAO,MACjB,SAAAW,EAAM,KAAK,EAAM,KACd,EAAAN,EAAA,KAAA,CAAC,KAAD,CAAY,UAAWL,EAAAA,QAAO,KAA9B,SAAA,EACI,EAAAK,EAAA,IAAA,CAAC,OAAD,CAAM,UAAWL,EAAAA,QAAO,OAAQ,MAAO,CAAE,WAAYY,EAAK,KAAM,CAAI,CAAA,GACpE,EAAAP,EAAA,IAAA,CAAC,OAAD,CAAM,UAAWL,EAAAA,QAAO,UAAY,SAAAY,EAAK,KAAY,CAAA,CACrD,CAHK,EAAAC,CAGL,CACP,CACD,CAAA,GAEJ,EAAAR,EAAA,KAAA,CAAAJ,EAAAA,SAAA,CAAA,SAAA,EACI,EAAAI,EAAA,IAAA,CAAC,MAAD,CACI,UAAWL,EAAAA,QAAO,SAClB,MAAO,CAAE,WAAY,6BAA6Bc,EAAQ,KAAK,IAAI,EAAE,EAAG,CAC3E,CAAA,GACD,EAAAT,EAAA,KAAA,CAAC,MAAD,CAAK,UAAWL,EAAAA,QAAO,MAAvB,SAAA,EACI,EAAAK,EAAA,IAAA,CAAC,OAAD,CAAA,SAAOU,EAAOC,CAAG,CAAQ,CAAA,GACzB,EAAAX,EAAA,IAAA,CAAC,OAAD,CAAA,SAAOU,GAAQC,EAAMC,GAAO,CAAC,CAAQ,CAAA,GACrC,EAAAZ,EAAA,IAAA,CAAC,OAAD,CAAA,SAAOU,EAAOE,CAAG,CAAQ,CAAA,CACxB,CACP,CAAA,CAAA,CAAA,CAAA,CAEL,C,EAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapLegend.js","names":[],"sources":["../../src/br/MapLegend.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { SEQUENTIAL_BLUES } from \"./scales\";\nimport styles from \"./MapLegend.module.css\";\n\n/** A discrete legend entry. */\nexport interface LegendItem {\n color: string;\n label: ReactNode;\n}\n\nexport interface MapLegendProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Legend heading. */\n title?: ReactNode;\n /**\n * Discrete entries (swatch + label). When provided the legend renders in\n * \"steps\" mode; otherwise it renders a continuous gradient from `min`/`max`.\n */\n items?: readonly LegendItem[];\n /** Continuous mode: low end of the domain. */\n min?: number;\n /** Continuous mode: high end of the domain. */\n max?: number;\n /** Continuous mode: palette (light → dark). Default: sequential blues. */\n palette?: readonly string[];\n /** Continuous mode: format the min/mid/max tick labels. */\n format?: (value: number) => string;\n}\n\n/**\n * Legend for a choropleth map. Renders a **continuous gradient** (with\n * min/mid/max ticks) from `min`/`max`/`palette`, or **discrete swatches** when\n * `items` is given. Pair it with a `BrazilMap`/`BrazilStateMap` `colorScale`.\n *\n * @example\n * // Continuous, matching a sequentialScale(0, 100)\n * <MapLegend title=\"Vendas\" min={0} max={100} palette={SEQUENTIAL_BLUES} />\n *\n * @example\n * // Discrete buckets\n * <MapLegend\n * title=\"Faixa\"\n * items={[\n * { color: \"#c6dbef\", label: \"< 10\" },\n * { color: \"#6baed6\", label: \"10–50\" },\n * { color: \"#08519c\", label: \"> 50\" },\n * ]}\n * />\n */\nexport function MapLegend({\n title,\n items,\n min = 0,\n max = 1,\n palette = SEQUENTIAL_BLUES,\n format = (v) => String(Math.round(v)),\n className,\n ...rest\n}: MapLegendProps) {\n return (\n <div className={cn(styles.legend, className)} {...rest}>\n {title != null && <div className={styles.title}>{title}</div>}\n\n {items ? (\n <ul className={styles.items}>\n {items.map((item, i) => (\n <li key={i} className={styles.item}>\n <span className={styles.swatch} style={{ background: item.color }} />\n <span className={styles.itemLabel}>{item.label}</span>\n </li>\n ))}\n </ul>\n ) : (\n <>\n <div\n className={styles.gradient}\n style={{ background: `linear-gradient(to right, ${palette.join(\", \")})` }}\n />\n <div className={styles.ticks}>\n <span>{format(min)}</span>\n <span>{format((min + max) / 2)}</span>\n <span>{format(max)}</span>\n </div>\n </>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAiDA,SAAgB,EAAU,EACtB,UACA,UACA,SAAM,GACN,SAAM,GACN,aAAU,GACV,aAAU,MAAM,OAAO,KAAK,MAAM,CAAC,CAAC,GACpC,cACA,GAAG,KACY;CACf,OACI,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAO,QAAQ,CAAS;EAAG,GAAI;EAAlD,UAAA,CACK,KAAS,QAAQ,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAQ,UAAA;EAAW,CAAA,GAE3D,IACG,kBAAC,MAAD;GAAI,WAAW,EAAO;GACjB,UAAA,EAAM,KAAK,GAAM,MACd,kBAAC,MAAD;IAAY,WAAW,EAAO;IAA9B,UAAA,CACI,kBAAC,QAAD;KAAM,WAAW,EAAO;KAAQ,OAAO,EAAE,YAAY,EAAK,MAAM;IAAI,CAAA,GACpE,kBAAC,QAAD;KAAM,WAAW,EAAO;KAAY,UAAA,EAAK;IAAY,CAAA,CACrD;GAHK,GAAA,CAGL,CACP;EACD,CAAA,IAEJ,kBAAA,GAAA,EAAA,UAAA,CACI,kBAAC,OAAD;GACI,WAAW,EAAO;GAClB,OAAO,EAAE,YAAY,6BAA6B,EAAQ,KAAK,IAAI,EAAE,GAAG;EAC3E,CAAA,GACD,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAvB,UAAA;IACI,kBAAC,QAAD,EAAA,UAAO,EAAO,CAAG,EAAQ,CAAA;IACzB,kBAAC,QAAD,EAAA,UAAO,GAAQ,IAAM,KAAO,CAAC,EAAQ,CAAA;IACrC,kBAAC,QAAD,EAAA,UAAO,EAAO,CAAG,EAAQ,CAAA;GACxB;EACP,CAAA,CAAA,EAAA,CAAA,CAEL;;AAEb"}
1
+ {"version":3,"file":"MapLegend.js","names":["styles","_Fragment","MapLegend_module_default","MapLegend","SEQUENTIAL_BLUES","v","rest","cn","className","title","items","item","i","Fragment","palette","format","min","max"],"sources":["../../src/br/MapLegend.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport { SEQUENTIAL_BLUES } from \"./scales\";\nimport styles from \"./MapLegend.module.css\";\n\n/** A discrete legend entry. */\nexport interface LegendItem {\n color: string;\n label: ReactNode;\n}\n\nexport interface MapLegendProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Legend heading. */\n title?: ReactNode;\n /**\n * Discrete entries (swatch + label). When provided the legend renders in\n * \"steps\" mode; otherwise it renders a continuous gradient from `min`/`max`.\n */\n items?: readonly LegendItem[];\n /** Continuous mode: low end of the domain. */\n min?: number;\n /** Continuous mode: high end of the domain. */\n max?: number;\n /** Continuous mode: palette (light → dark). Default: sequential blues. */\n palette?: readonly string[];\n /** Continuous mode: format the min/mid/max tick labels. */\n format?: (value: number) => string;\n}\n\n/**\n * Legend for a choropleth map. Renders a **continuous gradient** (with\n * min/mid/max ticks) from `min`/`max`/`palette`, or **discrete swatches** when\n * `items` is given. Pair it with a `BrazilMap`/`BrazilStateMap` `colorScale`.\n *\n * @example\n * // Continuous, matching a sequentialScale(0, 100)\n * <MapLegend title=\"Vendas\" min={0} max={100} palette={SEQUENTIAL_BLUES} />\n *\n * @example\n * // Discrete buckets\n * <MapLegend\n * title=\"Faixa\"\n * items={[\n * { color: \"#c6dbef\", label: \"< 10\" },\n * { color: \"#6baed6\", label: \"10–50\" },\n * { color: \"#08519c\", label: \"> 50\" },\n * ]}\n * />\n */\nexport function MapLegend({\n title,\n items,\n min = 0,\n max = 1,\n palette = SEQUENTIAL_BLUES,\n format = (v) => String(Math.round(v)),\n className,\n ...rest\n}: MapLegendProps) {\n return (\n <div className={cn(styles.legend, className)} {...rest}>\n {title != null && <div className={styles.title}>{title}</div>}\n\n {items ? (\n <ul className={styles.items}>\n {items.map((item, i) => (\n <li key={i} className={styles.item}>\n <span className={styles.swatch} style={{ background: item.color }} />\n <span className={styles.itemLabel}>{item.label}</span>\n </li>\n ))}\n </ul>\n ) : (\n <>\n <div\n className={styles.gradient}\n style={{ background: `linear-gradient(to right, ${palette.join(\", \")})` }}\n />\n <div className={styles.ticks}>\n <span>{format(min)}</span>\n <span>{format((min + max) / 2)}</span>\n <span>{format(max)}</span>\n </div>\n </>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAiDA,SAAgBG,EAAU,EACtB,UACA,UACA,SAAM,GACN,SAAM,GACN,aAAUC,GACV,aAAU,MAAM,OAAO,KAAK,MAAMC,CAAC,CAAC,GACpC,cACA,GAAGC,KACY;CACf,OACI,kBAAC,OAAD;EAAK,WAAWC,EAAGP,EAAO,QAAQQ,CAAS;EAAG,GAAIF;EAAlD,UAAA,CACKG,KAAS,QAAQ,kBAAC,OAAD;GAAK,WAAWT,EAAO;GAAQ,UAAAS;EAAW,CAAA,GAE3DC,IACG,kBAAC,MAAD;GAAI,WAAWV,EAAO;GACjB,UAAAU,EAAM,KAAK,GAAM,MACd,kBAAC,MAAD;IAAY,WAAWV,EAAO;IAA9B,UAAA,CACI,kBAAC,QAAD;KAAM,WAAWA,EAAO;KAAQ,OAAO,EAAE,YAAYW,EAAK,MAAM;IAAI,CAAA,GACpE,kBAAC,QAAD;KAAM,WAAWX,EAAO;KAAY,UAAAW,EAAK;IAAY,CAAA,CACrD;GAHK,GAAAC,CAGL,CACP;EACD,CAAA,IAEJ,kBAAAX,GAAA,EAAA,UAAA,CACI,kBAAC,OAAD;GACI,WAAWD,EAAO;GAClB,OAAO,EAAE,YAAY,6BAA6Bc,EAAQ,KAAK,IAAI,EAAE,GAAG;EAC3E,CAAA,GACD,kBAAC,OAAD;GAAK,WAAWd,EAAO;GAAvB,UAAA;IACI,kBAAC,QAAD,EAAA,UAAOe,EAAOC,CAAG,EAAQ,CAAA;IACzB,kBAAC,QAAD,EAAA,UAAOD,GAAQC,IAAMC,KAAO,CAAC,EAAQ,CAAA;IACrC,kBAAC,QAAD,EAAA,UAAOF,EAAOE,CAAG,EAAQ,CAAA;GACxB;EACP,CAAA,CAAA,EAAA,CAAA,CAEL;;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapLegend.module.cjs","names":[],"sources":["../../src/br/MapLegend.module.css"],"sourcesContent":[".legend {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n min-width: 160px;\n}\n\n.title {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.gradient {\n height: 10px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n}\n\n.ticks {\n display: flex;\n justify-content: space-between;\n color: var(--tempest-text-muted);\n}\n\n.items {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n}\n\n.swatch {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n flex: none;\n}\n\n.itemLabel {\n color: var(--tempest-text-muted);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"MapLegend.module.cjs","names":["legend","title","gradient","ticks","items","item","swatch","itemLabel","MapLegend_module_default"],"sources":["../../src/br/MapLegend.module.css"],"sourcesContent":[".legend {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n min-width: 160px;\n}\n\n.title {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.gradient {\n height: 10px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n}\n\n.ticks {\n display: flex;\n justify-content: space-between;\n color: var(--tempest-text-muted);\n}\n\n.items {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n}\n\n.swatch {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n flex: none;\n}\n\n.itemLabel {\n color: var(--tempest-text-muted);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapLegend.module.js","names":[],"sources":["../../src/br/MapLegend.module.css"],"sourcesContent":[".legend {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n min-width: 160px;\n}\n\n.title {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.gradient {\n height: 10px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n}\n\n.ticks {\n display: flex;\n justify-content: space-between;\n color: var(--tempest-text-muted);\n}\n\n.items {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n}\n\n.swatch {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n flex: none;\n}\n\n.itemLabel {\n color: var(--tempest-text-muted);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"MapLegend.module.js","names":["legend","title","gradient","ticks","items","item","swatch","itemLabel","MapLegend_module_default"],"sources":["../../src/br/MapLegend.module.css"],"sourcesContent":[".legend {\n display: inline-flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: var(--tempest-surface);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-md);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text);\n min-width: 160px;\n}\n\n.title {\n font-weight: var(--tempest-weight-semibold);\n font-size: var(--tempest-text-sm);\n}\n\n.gradient {\n height: 10px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n}\n\n.ticks {\n display: flex;\n justify-content: space-between;\n color: var(--tempest-text-muted);\n}\n\n.items {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n}\n\n.swatch {\n width: 14px;\n height: 14px;\n border-radius: var(--tempest-radius-sm);\n border: 1px solid var(--tempest-border);\n flex: none;\n}\n\n.itemLabel {\n color: var(--tempest-text-muted);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapMarkers.cjs","names":[],"sources":["../../src/br/MapMarkers.tsx"],"sourcesContent":["import type { FittedProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapMarkersProps {\n /** Projection used by the host map (markers must share it to line up). */\n projection: FittedProjection;\n /** Pins to plot. */\n markers: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\n/**\n * SVG overlay of point markers, projected with the host map's projection so\n * they align with its shapes. Each marker carries a native `<title>` (its\n * `label`) and is clickable when `onMarkerClick` is set.\n */\nexport function MapMarkers({ projection, markers, onMarkerClick }: MapMarkersProps) {\n return (\n <g>\n {markers.map((marker, index) => {\n const p = projection.project(marker);\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? index}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n fill={marker.color ?? \"var(--tempest-primary)\"}\n data-marker-id={marker.id ?? index}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, index) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, index);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n </g>\n );\n}\n"],"mappings":"6EAkBA,SAAgB,EAAW,CAAE,aAAY,UAAS,iBAAkC,CAChF,OACI,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SACK,EAAQ,KAAK,EAAQ,IAAU,CAC5B,IAAM,EAAI,EAAW,QAAQ,CAAM,EAC7B,EAAc,EAAQ,EAC5B,OACI,EAAA,EAAA,IAAA,CAAC,SAAD,CAEI,UAAW,EAAA,QAAO,OAClB,GAAI,EAAE,EACN,GAAI,EAAE,EACN,EAAG,EAAO,QAAU,EACpB,KAAM,EAAO,OAAS,yBACtB,iBAAgB,EAAO,IAAM,EAC7B,SAAU,EAAc,EAAI,IAAA,GAC5B,KAAM,EAAc,SAAW,IAAA,GAC/B,aAAY,EAAO,MACnB,QAAS,MAAoB,IAAgB,EAAQ,CAAK,EAAI,IAAA,GAC9D,UACI,EACO,GAAM,EACC,EAAE,MAAQ,SAAW,EAAE,MAAQ,OAC/B,EAAE,eAAe,EACjB,IAAgB,EAAQ,CAAK,EAErC,EACA,IAAA,GAGT,SAAA,EAAO,OAAQ,EAAA,EAAA,IAAA,CAAC,QAAD,CAAA,SAAQ,EAAO,KAAa,CAAA,EAAI,IAC5C,EAvBC,EAAO,IAAM,CAuBd,CAEhB,CAAC,CACF,CAAA,CAEX"}
1
+ {"version":3,"file":"MapMarkers.cjs","names":["styles","require_BrazilMap_module","react_jsx_runtime","MapMarkers","markers","p","projection","marker","interactive","onMarkerClick","index"],"sources":["../../src/br/MapMarkers.tsx"],"sourcesContent":["import type { FittedProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapMarkersProps {\n /** Projection used by the host map (markers must share it to line up). */\n projection: FittedProjection;\n /** Pins to plot. */\n markers: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\n/**\n * SVG overlay of point markers, projected with the host map's projection so\n * they align with its shapes. Each marker carries a native `<title>` (its\n * `label`) and is clickable when `onMarkerClick` is set.\n */\nexport function MapMarkers({ projection, markers, onMarkerClick }: MapMarkersProps) {\n return (\n <g>\n {markers.map((marker, index) => {\n const p = projection.project(marker);\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? index}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n fill={marker.color ?? \"var(--tempest-primary)\"}\n data-marker-id={marker.id ?? index}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, index) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, index);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n </g>\n );\n}\n"],"mappings":"A,6EAkBA,SAAgBG,EAAW,CAAE,aAAY,UAAS,iBAAkC,CAChF,OACI,EAAAD,EAAA,IAAA,CAAC,IAAD,CAAA,SACKE,EAAQ,KAAK,EAAQ,IAAU,CAC5B,IAAMC,EAAIC,EAAW,QAAQC,CAAM,EAC7BC,EAAc,EAAQC,EAC5B,OACI,EAAAP,EAAA,IAAA,CAAC,SAAD,CAEI,UAAWF,EAAAA,QAAO,OAClB,GAAIK,EAAE,EACN,GAAIA,EAAE,EACN,EAAGE,EAAO,QAAU,EACpB,KAAMA,EAAO,OAAS,yBACtB,iBAAgBA,EAAO,IAAMG,EAC7B,SAAUF,EAAc,EAAI,IAAA,GAC5B,KAAMA,EAAc,SAAW,IAAA,GAC/B,aAAYD,EAAO,MACnB,QAASC,MAAoBC,IAAgBF,EAAQG,CAAK,EAAI,IAAA,GAC9D,UACIF,EACO,GAAM,EACC,EAAE,MAAQ,SAAW,EAAE,MAAQ,OAC/B,EAAE,eAAe,EACjBC,IAAgBF,EAAQG,CAAK,EAErC,EACA,IAAA,GAGT,SAAAH,EAAO,OAAQ,EAAAL,EAAA,IAAA,CAAC,QAAD,CAAA,SAAQK,EAAO,KAAa,CAAA,EAAI,IAC5C,EAvBCA,EAAO,IAAMG,CAuBd,CAEhB,CAAC,CACF,CAAA,CAEX,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapMarkers.js","names":[],"sources":["../../src/br/MapMarkers.tsx"],"sourcesContent":["import type { FittedProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapMarkersProps {\n /** Projection used by the host map (markers must share it to line up). */\n projection: FittedProjection;\n /** Pins to plot. */\n markers: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\n/**\n * SVG overlay of point markers, projected with the host map's projection so\n * they align with its shapes. Each marker carries a native `<title>` (its\n * `label`) and is clickable when `onMarkerClick` is set.\n */\nexport function MapMarkers({ projection, markers, onMarkerClick }: MapMarkersProps) {\n return (\n <g>\n {markers.map((marker, index) => {\n const p = projection.project(marker);\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? index}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n fill={marker.color ?? \"var(--tempest-primary)\"}\n data-marker-id={marker.id ?? index}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, index) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, index);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n </g>\n );\n}\n"],"mappings":";;;AAkBA,SAAgB,EAAW,EAAE,eAAY,YAAS,oBAAkC;CAChF,OACI,kBAAC,KAAD,EAAA,UACK,EAAQ,KAAK,GAAQ,MAAU;EAC5B,IAAM,IAAI,EAAW,QAAQ,CAAM,GAC7B,IAAc,EAAQ;EAC5B,OACI,kBAAC,UAAD;GAEI,WAAW,EAAO;GAClB,IAAI,EAAE;GACN,IAAI,EAAE;GACN,GAAG,EAAO,UAAU;GACpB,MAAM,EAAO,SAAS;GACtB,kBAAgB,EAAO,MAAM;GAC7B,UAAU,IAAc,IAAI,KAAA;GAC5B,MAAM,IAAc,WAAW,KAAA;GAC/B,cAAY,EAAO;GACnB,SAAS,UAAoB,IAAgB,GAAQ,CAAK,IAAI,KAAA;GAC9D,WACI,KACO,MAAM;IACH,CAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAC/B,EAAE,eAAe,GACjB,IAAgB,GAAQ,CAAK;GAErC,IACA,KAAA;GAGT,UAAA,EAAO,QAAQ,kBAAC,SAAD,EAAA,UAAQ,EAAO,MAAa,CAAA,IAAI;EAC5C,GAvBC,EAAO,MAAM,CAuBd;CAEhB,CAAC,EACF,CAAA;AAEX"}
1
+ {"version":3,"file":"MapMarkers.js","names":["styles","BrazilMap_module_default","MapMarkers","markers","p","projection","marker","interactive","onMarkerClick","index"],"sources":["../../src/br/MapMarkers.tsx"],"sourcesContent":["import type { FittedProjection } from \"@/geo/projection\";\nimport type { GeoMarker } from \"@/geo/types\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapMarkersProps {\n /** Projection used by the host map (markers must share it to line up). */\n projection: FittedProjection;\n /** Pins to plot. */\n markers: readonly GeoMarker[];\n /** Fired when a marker is clicked. */\n onMarkerClick?: (marker: GeoMarker, index: number) => void;\n}\n\n/**\n * SVG overlay of point markers, projected with the host map's projection so\n * they align with its shapes. Each marker carries a native `<title>` (its\n * `label`) and is clickable when `onMarkerClick` is set.\n */\nexport function MapMarkers({ projection, markers, onMarkerClick }: MapMarkersProps) {\n return (\n <g>\n {markers.map((marker, index) => {\n const p = projection.project(marker);\n const interactive = Boolean(onMarkerClick);\n return (\n <circle\n key={marker.id ?? index}\n className={styles.marker}\n cx={p.x}\n cy={p.y}\n r={marker.radius ?? 6}\n fill={marker.color ?? \"var(--tempest-primary)\"}\n data-marker-id={marker.id ?? index}\n tabIndex={interactive ? 0 : undefined}\n role={interactive ? \"button\" : undefined}\n aria-label={marker.label}\n onClick={interactive ? () => onMarkerClick?.(marker, index) : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onMarkerClick?.(marker, index);\n }\n }\n : undefined\n }\n >\n {marker.label ? <title>{marker.label}</title> : null}\n </circle>\n );\n })}\n </g>\n );\n}\n"],"mappings":";;;AAkBA,SAAgBE,EAAW,EAAE,eAAY,YAAS,oBAAkC;CAChF,OACI,kBAAC,KAAD,EAAA,UACKC,EAAQ,KAAK,GAAQ,MAAU;EAC5B,IAAMC,IAAIC,EAAW,QAAQC,CAAM,GAC7BC,IAAc,EAAQC;EAC5B,OACI,kBAAC,UAAD;GAEI,WAAWR,EAAO;GAClB,IAAII,EAAE;GACN,IAAIA,EAAE;GACN,GAAGE,EAAO,UAAU;GACpB,MAAMA,EAAO,SAAS;GACtB,kBAAgBA,EAAO,MAAMG;GAC7B,UAAUF,IAAc,IAAI,KAAA;GAC5B,MAAMA,IAAc,WAAW,KAAA;GAC/B,cAAYD,EAAO;GACnB,SAASC,UAAoBC,IAAgBF,GAAQG,CAAK,IAAI,KAAA;GAC9D,WACIF,KACO,MAAM;IACH,CAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAC/B,EAAE,eAAe,GACjBC,IAAgBF,GAAQG,CAAK;GAErC,IACA,KAAA;GAGT,UAAAH,EAAO,QAAQ,kBAAC,SAAD,EAAA,UAAQA,EAAO,MAAa,CAAA,IAAI;EAC5C,GAvBCA,EAAO,MAAMG,CAuBd;CAEhB,CAAC,EACF,CAAA;AAEX"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapTooltip.cjs","names":[],"sources":["../../src/br/MapTooltip.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapTooltipProps {\n /** X position in pixels, relative to the map container. */\n x: number;\n /** Y position in pixels, relative to the map container. */\n y: number;\n /** Tooltip body. */\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Floating tooltip anchored near the cursor over a map. Positioned absolutely\n * inside the map container (which is `position: relative`) and non-interactive\n * so it never steals hover from the shapes beneath it.\n */\nexport function MapTooltip({ x, y, children, className }: MapTooltipProps) {\n return (\n <div\n className={cn(styles.tooltip, className)}\n style={{ left: x, top: y }}\n data-testid=\"map-tooltip\"\n aria-hidden\n >\n {children}\n </div>\n );\n}\n"],"mappings":"0GAmBA,SAAgB,EAAW,CAAE,IAAG,IAAG,WAAU,aAA8B,CACvE,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,CAAS,EACvC,MAAO,CAAE,KAAM,EAAG,IAAK,CAAE,EACzB,cAAY,cACZ,cAAA,GAEC,UACA,CAAA,CAEb"}
1
+ {"version":3,"file":"MapTooltip.cjs","names":["cn","styles","require_cn","require_BrazilMap_module","react_jsx_runtime","MapTooltip","className","x","y"],"sources":["../../src/br/MapTooltip.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapTooltipProps {\n /** X position in pixels, relative to the map container. */\n x: number;\n /** Y position in pixels, relative to the map container. */\n y: number;\n /** Tooltip body. */\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Floating tooltip anchored near the cursor over a map. Positioned absolutely\n * inside the map container (which is `position: relative`) and non-interactive\n * so it never steals hover from the shapes beneath it.\n */\nexport function MapTooltip({ x, y, children, className }: MapTooltipProps) {\n return (\n <div\n className={cn(styles.tooltip, className)}\n style={{ left: x, top: y }}\n data-testid=\"map-tooltip\"\n aria-hidden\n >\n {children}\n </div>\n );\n}\n"],"mappings":"A,0GAmBA,SAAgBK,EAAW,CAAE,IAAG,IAAG,WAAU,aAA8B,CACvE,OACI,EAAAD,EAAA,IAAA,CAAC,MAAD,CACI,UAAWJ,EAAAA,GAAGC,EAAAA,QAAO,QAASK,CAAS,EACvC,MAAO,CAAE,KAAMC,EAAG,IAAKC,CAAE,EACzB,cAAY,cACZ,cAAA,GAEC,UACA,CAAA,CAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapTooltip.js","names":[],"sources":["../../src/br/MapTooltip.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapTooltipProps {\n /** X position in pixels, relative to the map container. */\n x: number;\n /** Y position in pixels, relative to the map container. */\n y: number;\n /** Tooltip body. */\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Floating tooltip anchored near the cursor over a map. Positioned absolutely\n * inside the map container (which is `position: relative`) and non-interactive\n * so it never steals hover from the shapes beneath it.\n */\nexport function MapTooltip({ x, y, children, className }: MapTooltipProps) {\n return (\n <div\n className={cn(styles.tooltip, className)}\n style={{ left: x, top: y }}\n data-testid=\"map-tooltip\"\n aria-hidden\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;AAmBA,SAAgB,EAAW,EAAE,MAAG,MAAG,aAAU,gBAA8B;CACvE,OACI,kBAAC,OAAD;EACI,WAAW,EAAG,EAAO,SAAS,CAAS;EACvC,OAAO;GAAE,MAAM;GAAG,KAAK;EAAE;EACzB,eAAY;EACZ,eAAA;EAEC;CACA,CAAA;AAEb"}
1
+ {"version":3,"file":"MapTooltip.js","names":["styles","BrazilMap_module_default","MapTooltip","cn","className","x","y"],"sources":["../../src/br/MapTooltip.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./BrazilMap.module.css\";\n\nexport interface MapTooltipProps {\n /** X position in pixels, relative to the map container. */\n x: number;\n /** Y position in pixels, relative to the map container. */\n y: number;\n /** Tooltip body. */\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Floating tooltip anchored near the cursor over a map. Positioned absolutely\n * inside the map container (which is `position: relative`) and non-interactive\n * so it never steals hover from the shapes beneath it.\n */\nexport function MapTooltip({ x, y, children, className }: MapTooltipProps) {\n return (\n <div\n className={cn(styles.tooltip, className)}\n style={{ left: x, top: y }}\n data-testid=\"map-tooltip\"\n aria-hidden\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;AAmBA,SAAgBE,EAAW,EAAE,MAAG,MAAG,aAAU,gBAA8B;CACvE,OACI,kBAAC,OAAD;EACI,WAAWC,EAAGH,EAAO,SAASI,CAAS;EACvC,OAAO;GAAE,MAAMC;GAAG,KAAKC;EAAE;EACzB,eAAY;EACZ,eAAA;EAEC;CACA,CAAA;AAEb"}
@@ -1,2 +1,2 @@
1
- const e=require("../utils/cn.cjs"),t=require("../components/Input/Input.cjs"),n=require("../hooks/use-debounce.cjs"),r=require("./geocode.cjs"),i=require("./MunicipalitySearch.module.cjs");let a=require("react"),o=require("react/jsx-runtime");function s(e){e.preventDefault()}function c({uf:c,onSelect:l,label:u,placeholder:d=`Buscar município…`,limit:f=8,debounceMs:p=250,disabled:m=!1}){let[h,g]=(0,a.useState)(``),[_,v]=(0,a.useState)([]),[y,b]=(0,a.useState)(!1),[x,S]=(0,a.useState)(0),C=n.useDebounce(h,p),w=(0,a.useId)(),T=y&&_.length>0,E=e=>`${w}-option-${e}`;(0,a.useEffect)(()=>{let e=!0;if(!C.trim()){v([]);return}return r.searchMunicipalities(C,{uf:c,limit:f}).then(t=>{e&&(v(t),S(0))}),()=>{e=!1}},[C,c,f]);function D(e){l(e),g(e.name),b(!1)}function O(e){if(e.key===`ArrowDown`){if(e.preventDefault(),!T){b(!0);return}S(e=>Math.min(_.length-1,e+1))}else if(e.key===`ArrowUp`)e.preventDefault(),S(e=>Math.max(0,e-1));else if(e.key===`Enter`){let t=T?_[x]:void 0;if(!t)return;e.preventDefault(),D(t)}else e.key===`Escape`&&(T&&e.preventDefault(),b(!1))}return(0,o.jsxs)(`div`,{className:i.default.search,children:[(0,o.jsx)(t.Input,{label:u,value:h,placeholder:d,disabled:m,role:`combobox`,"aria-expanded":T,"aria-controls":w,"aria-autocomplete":`list`,"aria-activedescendant":T?E(x):void 0,autoComplete:`off`,onChange:e=>{g(e.target.value),b(!0)},onFocus:()=>b(!0),onBlur:()=>b(!1),onKeyDown:O}),T&&(0,o.jsx)(`ul`,{id:w,className:i.default.results,role:`listbox`,onMouseDown:s,children:_.map((t,n)=>(0,o.jsxs)(`li`,{id:E(n),role:`option`,"aria-selected":n===x,className:e.cn(i.default.result,n===x&&i.default.active),onMouseEnter:()=>S(n),onClick:()=>D(t),children:[(0,o.jsx)(`span`,{children:t.name}),(0,o.jsx)(`span`,{className:i.default.uf,children:t.uf})]},t.id))})]})}exports.MunicipalitySearch=c;
1
+ const e=require("../utils/cn.cjs"),t=require("../components/Input/Input.cjs"),n=require("../hooks/use-debounce.cjs"),r=require("./geocode.cjs"),i=require("./MunicipalitySearch.module.cjs");let a=require("react"),o=require("react/jsx-runtime");function s(e){e.preventDefault()}function c({uf:c,onSelect:l,label:u,placeholder:d=`Buscar município…`,limit:f=8,debounceMs:p=250,disabled:m=!1}){let[h,g]=(0,a.useState)(``),[_,v]=(0,a.useState)([]),[y,b]=(0,a.useState)(!1),[x,S]=(0,a.useState)(0),C=n.useDebounce(h,p),w=(0,a.useId)(),T=y&&_.length>0,E=e=>`${w}-option-${e}`;(0,a.useEffect)(()=>{let e=!0;if(!C.trim())v([]);else return r.searchMunicipalities(C,{uf:c,limit:f}).then(t=>{e&&(v(t),S(0))}),()=>{e=!1}},[C,c,f]);function D(e){l(e),g(e.name),b(!1)}function O(e){if(e.key===`ArrowDown`){if(e.preventDefault(),!T){b(!0);return}S(e=>Math.min(_.length-1,e+1))}else if(e.key===`ArrowUp`)e.preventDefault(),S(e=>Math.max(0,e-1));else if(e.key===`Enter`){let t=T?_[x]:void 0;if(!t)return;e.preventDefault(),D(t)}else e.key===`Escape`&&(T&&e.preventDefault(),b(!1))}return(0,o.jsxs)(`div`,{className:i.default.search,children:[(0,o.jsx)(t.Input,{label:u,value:h,placeholder:d,disabled:m,role:`combobox`,"aria-expanded":T,"aria-controls":w,"aria-autocomplete":`list`,"aria-activedescendant":T?E(x):void 0,autoComplete:`off`,onChange:e=>{g(e.target.value),b(!0)},onFocus:()=>b(!0),onBlur:()=>b(!1),onKeyDown:O}),T&&(0,o.jsx)(`ul`,{id:w,className:i.default.results,role:`listbox`,onMouseDown:s,children:_.map((t,n)=>(0,o.jsxs)(`li`,{id:E(n),role:`option`,"aria-selected":n===x,className:e.cn(i.default.result,n===x&&i.default.active),onMouseEnter:()=>S(n),onClick:()=>D(t),children:[(0,o.jsx)(`span`,{children:t.name}),(0,o.jsx)(`span`,{className:i.default.uf,children:t.uf})]},t.id))})]})}exports.MunicipalitySearch=c;
2
2
  //# sourceMappingURL=MunicipalitySearch.cjs.map