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":"Drawer.js","names":[],"sources":["../../../src/components/Drawer/Drawer.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — placement plus mobilePlacement is\n * the whole point — a drawer that comes from the side on desktop and from the bottom\n * on a phone — and the rest is the dialog contract the SDK's Modal also has (open,\n * onClose, title, children, footer, closeOnBackdrop, closeOnEsc, hideCloseButton)\n * plus showHandle for the sheet affordance.\n */\nimport { useEffect, useRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { cn } from \"@/utils/cn\";\nimport { useBreakpoint } from \"@/hooks/use-breakpoint\";\nimport { useFocusTrap } from \"@/hooks/use-focus-trap\";\nimport styles from \"./Drawer.module.css\";\nimport { usePortalHost } from \"../Portal/portal-host\";\n\nexport type DrawerPlacement = \"right\" | \"left\" | \"top\" | \"bottom\";\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n placement?: DrawerPlacement;\n title?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n hideCloseButton?: boolean;\n className?: string;\n /**\n * Auto-switch to bottom-sheet placement on mobile viewports (< md).\n * Modern mobile apps default to bottom drawers; on desktop the original\n * `placement` is preserved.\n */\n mobilePlacement?: DrawerPlacement;\n /** Render a drag handle indicator at the leading edge (bottom-sheet style). */\n showHandle?: boolean;\n}\n\n/**\n * Sliding side panel. Same building blocks as {@link Modal} but anchored to\n * an edge. Locks body scroll while open, and traps keyboard focus in the panel\n * the same way `Modal` does: focus enters on open, `Tab` cycles inside (portalled\n * panels opened from it included) and returns to the opener on close.\n */\nexport function Drawer({\n open,\n onClose,\n placement = \"right\",\n title,\n children,\n footer,\n closeOnBackdrop = true,\n closeOnEsc = true,\n hideCloseButton = false,\n className,\n mobilePlacement,\n showHandle = false,\n}: DrawerProps) {\n const { isMobile } = useBreakpoint();\n const effectivePlacement: DrawerPlacement =\n isMobile && mobilePlacement ? mobilePlacement : placement;\n\n const panelRef = useRef<HTMLElement>(null);\n useFocusTrap(panelRef, open);\n useEscapeLayer(open, closeOnEsc ? onClose : null);\n useEffect(() => {\n if (!open) return;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [open, closeOnEsc, onClose]);\n\n const portalHost = usePortalHost();\n\n if (!open || !portalHost) return null;\n\n return createPortal(\n <>\n <div\n className={styles.overlay}\n onClick={() => {\n if (closeOnBackdrop) onClose();\n }}\n />\n <aside\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className={cn(styles.panel, styles[effectivePlacement], className)}\n >\n {showHandle &&\n (effectivePlacement === \"bottom\" || effectivePlacement === \"top\") && (\n <div\n className={cn(\n styles.handle,\n effectivePlacement === \"top\" && styles.handleTop,\n )}\n aria-hidden\n />\n )}\n {(title || !hideCloseButton) && (\n <header className={styles.header}>\n <h3 className={styles.title}>{title}</h3>\n {!hideCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Fechar\"\n className={styles.close}\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n )}\n </header>\n )}\n <div className={styles.body}>{children}</div>\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </aside>\n </>,\n portalHost,\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M6 6l12 12M6 18L18 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":";;;;;;;;;;AA8CA,SAAgB,EAAO,EACnB,SACA,YACA,eAAY,SACZ,UACA,aACA,WACA,qBAAkB,IAClB,gBAAa,IACb,qBAAkB,IAClB,cACA,oBACA,gBAAa,MACD;CACZ,IAAM,EAAE,gBAAa,EAAc,GAC7B,IACF,KAAY,IAAkB,IAAkB,GAE9C,IAAW,EAAoB,IAAI;CAGzC,AAFA,EAAa,GAAU,CAAI,GAC3B,EAAe,GAAM,IAAa,IAAU,IAAI,GAChD,QAAgB;EACZ,IAAI,CAAC,GAAM;EACX,IAAM,IAAmB,SAAS,KAAK,MAAM;EAE7C,OADA,SAAS,KAAK,MAAM,WAAW,gBAClB;GACT,SAAS,KAAK,MAAM,WAAW;EACnC;CACJ,GAAG;EAAC;EAAM;EAAY;CAAO,CAAC;CAE9B,IAAM,IAAa,EAAc;CAIjC,OAFI,CAAC,KAAQ,CAAC,IAAmB,OAE1B,EACH,kBAAA,GAAA,EAAA,UAAA,CACI,kBAAC,OAAD;EACI,WAAW,EAAO;EAClB,eAAe;GACX,AAAI,KAAiB,EAAQ;EACjC;CACH,CAAA,GACD,kBAAC,SAAD;EACI,KAAK;EACL,MAAK;EACL,cAAW;EACX,UAAU;EACV,WAAW,EAAG,EAAO,OAAO,EAAO,IAAqB,CAAS;EALrE,UAAA;GAOK,MACI,MAAuB,YAAY,MAAuB,UACvD,kBAAC,OAAD;IACI,WAAW,EACP,EAAO,QACP,MAAuB,SAAS,EAAO,SAC3C;IACA,eAAA;GACH,CAAA;IAEP,KAAS,CAAC,MACR,kBAAC,UAAD;IAAQ,WAAW,EAAO;IAA1B,UAAA,CACI,kBAAC,MAAD;KAAI,WAAW,EAAO;KAAQ,UAAA;IAAU,CAAA,GACvC,CAAC,KACE,kBAAC,UAAD;KACI,MAAK;KACL,cAAW;KACX,WAAW,EAAO;KAClB,SAAS;KAET,UAAA,kBAAC,GAAD,CAAY,CAAA;IACR,CAAA,CAER;;GAEZ,kBAAC,OAAD;IAAK,WAAW,EAAO;IAAO;GAAc,CAAA;GAC3C,KAAU,kBAAC,UAAD;IAAQ,WAAW,EAAO;IAAS,UAAA;GAAe,CAAA;EAC1D;CACT,CAAA,CAAA,EAAA,CAAA,GACF,CACJ;AACJ;AAEA,SAAS,IAAY;CACjB,OACI,kBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EACjD,UAAA,kBAAC,QAAD;GACI,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;EACjB,CAAA;CACA,CAAA;AAEb"}
1
+ {"version":3,"file":"Drawer.js","names":["_Fragment","styles","Drawer_module_default","Fragment$1","Drawer","useBreakpoint","effectivePlacement","isMobile","mobilePlacement","placement","panelRef","useRef","useFocusTrap","open","useEscapeLayer","closeOnEsc","onClose","useEffect","previousOverflow","portalHost","usePortalHost","createPortal","closeOnBackdrop","cn","className","showHandle","title","hideCloseButton","CloseIcon","footer"],"sources":["../../../src/components/Drawer/Drawer.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — placement plus mobilePlacement is\n * the whole point — a drawer that comes from the side on desktop and from the bottom\n * on a phone — and the rest is the dialog contract the SDK's Modal also has (open,\n * onClose, title, children, footer, closeOnBackdrop, closeOnEsc, hideCloseButton)\n * plus showHandle for the sheet affordance.\n */\nimport { useEffect, useRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { cn } from \"@/utils/cn\";\nimport { useBreakpoint } from \"@/hooks/use-breakpoint\";\nimport { useFocusTrap } from \"@/hooks/use-focus-trap\";\nimport styles from \"./Drawer.module.css\";\nimport { usePortalHost } from \"../Portal/portal-host\";\n\nexport type DrawerPlacement = \"right\" | \"left\" | \"top\" | \"bottom\";\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n placement?: DrawerPlacement;\n title?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n hideCloseButton?: boolean;\n className?: string;\n /**\n * Auto-switch to bottom-sheet placement on mobile viewports (< md).\n * Modern mobile apps default to bottom drawers; on desktop the original\n * `placement` is preserved.\n */\n mobilePlacement?: DrawerPlacement;\n /** Render a drag handle indicator at the leading edge (bottom-sheet style). */\n showHandle?: boolean;\n}\n\n/**\n * Sliding side panel. Same building blocks as {@link Modal} but anchored to\n * an edge. Locks body scroll while open, and traps keyboard focus in the panel\n * the same way `Modal` does: focus enters on open, `Tab` cycles inside (portalled\n * panels opened from it included) and returns to the opener on close.\n */\nexport function Drawer({\n open,\n onClose,\n placement = \"right\",\n title,\n children,\n footer,\n closeOnBackdrop = true,\n closeOnEsc = true,\n hideCloseButton = false,\n className,\n mobilePlacement,\n showHandle = false,\n}: DrawerProps) {\n const { isMobile } = useBreakpoint();\n const effectivePlacement: DrawerPlacement =\n isMobile && mobilePlacement ? mobilePlacement : placement;\n\n const panelRef = useRef<HTMLElement>(null);\n useFocusTrap(panelRef, open);\n useEscapeLayer(open, closeOnEsc ? onClose : null);\n useEffect(() => {\n if (!open) return;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [open, closeOnEsc, onClose]);\n\n const portalHost = usePortalHost();\n\n if (!open || !portalHost) return null;\n\n return createPortal(\n <>\n <div\n className={styles.overlay}\n onClick={() => {\n if (closeOnBackdrop) onClose();\n }}\n />\n <aside\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className={cn(styles.panel, styles[effectivePlacement], className)}\n >\n {showHandle &&\n (effectivePlacement === \"bottom\" || effectivePlacement === \"top\") && (\n <div\n className={cn(\n styles.handle,\n effectivePlacement === \"top\" && styles.handleTop,\n )}\n aria-hidden\n />\n )}\n {(title || !hideCloseButton) && (\n <header className={styles.header}>\n <h3 className={styles.title}>{title}</h3>\n {!hideCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Fechar\"\n className={styles.close}\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n )}\n </header>\n )}\n <div className={styles.body}>{children}</div>\n {footer && <footer className={styles.footer}>{footer}</footer>}\n </aside>\n </>,\n portalHost,\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M6 6l12 12M6 18L18 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":";;;;;;;;;;AA8CA,SAAgBI,EAAO,EACnB,SACA,YACA,eAAY,SACZ,UACA,aACA,WACA,qBAAkB,IAClB,gBAAa,IACb,qBAAkB,IAClB,cACA,oBACA,gBAAa,MACD;CACZ,IAAM,EAAE,gBAAaC,EAAc,GAC7BC,IACFC,KAAYC,IAAkBA,IAAkBC,GAE9CC,IAAWC,EAAoB,IAAI;CAGzC,AAFAC,EAAaF,GAAUG,CAAI,GAC3BC,EAAeD,GAAME,IAAaC,IAAU,IAAI,GAChDC,QAAgB;EACZ,IAAI,CAACJ,GAAM;EACX,IAAMK,IAAmB,SAAS,KAAK,MAAM;EAE7C,OADA,SAAS,KAAK,MAAM,WAAW,gBAClB;GACT,SAAS,KAAK,MAAM,WAAWA;EACnC;CACJ,GAAG;EAACL;EAAME;EAAYC;CAAO,CAAC;CAE9B,IAAMG,IAAaC,EAAc;CAIjC,OAFI,CAACP,KAAQ,CAACM,IAAmB,OAE1BE,EACH,kBAAArB,GAAA,EAAA,UAAA,CACI,kBAAC,OAAD;EACI,WAAWC,EAAO;EAClB,eAAe;GACX,AAAIqB,KAAiBN,EAAQ;EACjC;CACH,CAAA,GACD,kBAAC,SAAD;EACI,KAAKN;EACL,MAAK;EACL,cAAW;EACX,UAAU;EACV,WAAWa,EAAGtB,EAAO,OAAOA,EAAOK,IAAqBkB,CAAS;EALrE,UAAA;GAOKC,MACInB,MAAuB,YAAYA,MAAuB,UACvD,kBAAC,OAAD;IACI,WAAWiB,EACPtB,EAAO,QACPK,MAAuB,SAASL,EAAO,SAC3C;IACA,eAAA;GACH,CAAA;IAEPyB,KAAS,CAACC,MACR,kBAAC,UAAD;IAAQ,WAAW1B,EAAO;IAA1B,UAAA,CACI,kBAAC,MAAD;KAAI,WAAWA,EAAO;KAAQ,UAAAyB;IAAU,CAAA,GACvC,CAACC,KACE,kBAAC,UAAD;KACI,MAAK;KACL,cAAW;KACX,WAAW1B,EAAO;KAClB,SAASe;KAET,UAAA,kBAACY,GAAD,CAAY,CAAA;IACR,CAAA,CAER;;GAEZ,kBAAC,OAAD;IAAK,WAAW3B,EAAO;IAAO;GAAc,CAAA;GAC3C4B,KAAU,kBAAC,UAAD;IAAQ,WAAW5B,EAAO;IAAS,UAAA4B;GAAe,CAAA;EAC1D;CACT,CAAA,CAAA,EAAA,CAAA,GACFV,CACJ;AACJ;AAEA,SAASS,IAAY;CACjB,OACI,kBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EACjD,UAAA,kBAAC,QAAD;GACI,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;EACjB,CAAA;CACA,CAAA;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.module.cjs","names":[],"sources":["../../../src/components/Drawer/Drawer.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.5);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n z-index: var(--tempest-z-modal);\n animation: tempest-drawer-overlay var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.panel {\n position: fixed;\n top: 0;\n bottom: 0;\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n box-shadow: var(--tempest-shadow-xl);\n display: flex;\n flex-direction: column;\n z-index: calc(var(--tempest-z-modal) + 1);\n animation-duration: var(--tempest-duration-slow);\n animation-timing-function: var(--tempest-ease-emphasized);\n animation-fill-mode: both;\n}\n\n.right {\n right: 0;\n width: min(420px, 92vw);\n padding-right: var(--tempest-safe-area-right);\n animation-name: tempest-drawer-in-right;\n}\n\n.left {\n left: 0;\n width: min(420px, 92vw);\n padding-left: var(--tempest-safe-area-left);\n animation-name: tempest-drawer-in-left;\n}\n\n.top {\n top: 0;\n left: 0;\n right: 0;\n bottom: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-top: var(--tempest-safe-area-top);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n animation-name: tempest-drawer-in-top;\n}\n\n.bottom {\n bottom: 0;\n left: 0;\n right: 0;\n top: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-bottom: var(--tempest-safe-area-bottom);\n border-radius: var(--tempest-radius-xl) var(--tempest-radius-xl) 0 0;\n animation-name: tempest-drawer-in-bottom;\n}\n\n/* Bottom-sheet drag handle (4px pill at top center). */\n.handle {\n position: relative;\n width: 36px;\n height: 4px;\n margin: var(--tempest-space-2) auto;\n background-color: var(--tempest-border-strong);\n border-radius: var(--tempest-radius-full);\n flex-shrink: 0;\n}\n\n.handleTop {\n margin-top: auto;\n margin-bottom: var(--tempest-space-2);\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n flex: 1;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n@keyframes tempest-drawer-overlay {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-drawer-in-right {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-left {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-top {\n from {\n transform: translateY(-100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes tempest-drawer-in-bottom {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .panel,\n .overlay {\n animation: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Drawer.module.cjs","names":["overlay","tempestDrawerOverlay","panel","right","tempestDrawerInRight","left","tempestDrawerInLeft","top","tempestDrawerInTop","bottom","tempestDrawerInBottom","handle","handleTop","header","title","close","body","footer","Drawer_module_default"],"sources":["../../../src/components/Drawer/Drawer.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.5);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n z-index: var(--tempest-z-modal);\n animation: tempest-drawer-overlay var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.panel {\n position: fixed;\n top: 0;\n bottom: 0;\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n box-shadow: var(--tempest-shadow-xl);\n display: flex;\n flex-direction: column;\n z-index: calc(var(--tempest-z-modal) + 1);\n animation-duration: var(--tempest-duration-slow);\n animation-timing-function: var(--tempest-ease-emphasized);\n animation-fill-mode: both;\n}\n\n.right {\n right: 0;\n width: min(420px, 92vw);\n padding-right: var(--tempest-safe-area-right);\n animation-name: tempest-drawer-in-right;\n}\n\n.left {\n left: 0;\n width: min(420px, 92vw);\n padding-left: var(--tempest-safe-area-left);\n animation-name: tempest-drawer-in-left;\n}\n\n.top {\n top: 0;\n left: 0;\n right: 0;\n bottom: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-top: var(--tempest-safe-area-top);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n animation-name: tempest-drawer-in-top;\n}\n\n.bottom {\n bottom: 0;\n left: 0;\n right: 0;\n top: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-bottom: var(--tempest-safe-area-bottom);\n border-radius: var(--tempest-radius-xl) var(--tempest-radius-xl) 0 0;\n animation-name: tempest-drawer-in-bottom;\n}\n\n/* Bottom-sheet drag handle (4px pill at top center). */\n.handle {\n position: relative;\n width: 36px;\n height: 4px;\n margin: var(--tempest-space-2) auto;\n background-color: var(--tempest-border-strong);\n border-radius: var(--tempest-radius-full);\n flex-shrink: 0;\n}\n\n.handleTop {\n margin-top: auto;\n margin-bottom: var(--tempest-space-2);\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n flex: 1;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n@keyframes tempest-drawer-overlay {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-drawer-in-right {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-left {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-top {\n from {\n transform: translateY(-100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes tempest-drawer-in-bottom {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .panel,\n .overlay {\n animation: none;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.module.js","names":[],"sources":["../../../src/components/Drawer/Drawer.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.5);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n z-index: var(--tempest-z-modal);\n animation: tempest-drawer-overlay var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.panel {\n position: fixed;\n top: 0;\n bottom: 0;\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n box-shadow: var(--tempest-shadow-xl);\n display: flex;\n flex-direction: column;\n z-index: calc(var(--tempest-z-modal) + 1);\n animation-duration: var(--tempest-duration-slow);\n animation-timing-function: var(--tempest-ease-emphasized);\n animation-fill-mode: both;\n}\n\n.right {\n right: 0;\n width: min(420px, 92vw);\n padding-right: var(--tempest-safe-area-right);\n animation-name: tempest-drawer-in-right;\n}\n\n.left {\n left: 0;\n width: min(420px, 92vw);\n padding-left: var(--tempest-safe-area-left);\n animation-name: tempest-drawer-in-left;\n}\n\n.top {\n top: 0;\n left: 0;\n right: 0;\n bottom: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-top: var(--tempest-safe-area-top);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n animation-name: tempest-drawer-in-top;\n}\n\n.bottom {\n bottom: 0;\n left: 0;\n right: 0;\n top: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-bottom: var(--tempest-safe-area-bottom);\n border-radius: var(--tempest-radius-xl) var(--tempest-radius-xl) 0 0;\n animation-name: tempest-drawer-in-bottom;\n}\n\n/* Bottom-sheet drag handle (4px pill at top center). */\n.handle {\n position: relative;\n width: 36px;\n height: 4px;\n margin: var(--tempest-space-2) auto;\n background-color: var(--tempest-border-strong);\n border-radius: var(--tempest-radius-full);\n flex-shrink: 0;\n}\n\n.handleTop {\n margin-top: auto;\n margin-bottom: var(--tempest-space-2);\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n flex: 1;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n@keyframes tempest-drawer-overlay {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-drawer-in-right {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-left {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-top {\n from {\n transform: translateY(-100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes tempest-drawer-in-bottom {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .panel,\n .overlay {\n animation: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Drawer.module.js","names":["overlay","tempestDrawerOverlay","panel","right","tempestDrawerInRight","left","tempestDrawerInLeft","top","tempestDrawerInTop","bottom","tempestDrawerInBottom","handle","handleTop","header","title","close","body","footer","Drawer_module_default"],"sources":["../../../src/components/Drawer/Drawer.module.css"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(15, 23, 42, 0.5);\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n z-index: var(--tempest-z-modal);\n animation: tempest-drawer-overlay var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.panel {\n position: fixed;\n top: 0;\n bottom: 0;\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n box-shadow: var(--tempest-shadow-xl);\n display: flex;\n flex-direction: column;\n z-index: calc(var(--tempest-z-modal) + 1);\n animation-duration: var(--tempest-duration-slow);\n animation-timing-function: var(--tempest-ease-emphasized);\n animation-fill-mode: both;\n}\n\n.right {\n right: 0;\n width: min(420px, 92vw);\n padding-right: var(--tempest-safe-area-right);\n animation-name: tempest-drawer-in-right;\n}\n\n.left {\n left: 0;\n width: min(420px, 92vw);\n padding-left: var(--tempest-safe-area-left);\n animation-name: tempest-drawer-in-left;\n}\n\n.top {\n top: 0;\n left: 0;\n right: 0;\n bottom: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-top: var(--tempest-safe-area-top);\n border-radius: 0 0 var(--tempest-radius-xl) var(--tempest-radius-xl);\n animation-name: tempest-drawer-in-top;\n}\n\n.bottom {\n bottom: 0;\n left: 0;\n right: 0;\n top: auto;\n height: min(70vh, 480px);\n height: min(70dvh, 480px);\n padding-bottom: var(--tempest-safe-area-bottom);\n border-radius: var(--tempest-radius-xl) var(--tempest-radius-xl) 0 0;\n animation-name: tempest-drawer-in-bottom;\n}\n\n/* Bottom-sheet drag handle (4px pill at top center). */\n.handle {\n position: relative;\n width: 36px;\n height: 4px;\n margin: var(--tempest-space-2) auto;\n background-color: var(--tempest-border-strong);\n border-radius: var(--tempest-radius-full);\n flex-shrink: 0;\n}\n\n.handleTop {\n margin-top: auto;\n margin-bottom: var(--tempest-space-2);\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-bottom: 1px solid var(--tempest-border);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n}\n\n.close {\n background: none;\n border: none;\n color: var(--tempest-text-muted);\n padding: var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n display: flex;\n align-items: center;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .close:hover {\n background-color: var(--tempest-surface);\n color: var(--tempest-text);\n }\n}\n\n.close:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.body {\n padding: var(--tempest-space-5);\n overflow-y: auto;\n flex: 1;\n line-height: var(--tempest-leading-normal);\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-4) var(--tempest-space-5);\n border-top: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n@keyframes tempest-drawer-overlay {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tempest-drawer-in-right {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-left {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes tempest-drawer-in-top {\n from {\n transform: translateY(-100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes tempest-drawer-in-bottom {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .panel,\n .overlay {\n animation: none;\n }\n}\n"],"mappings":";"}
@@ -1,2 +1,2 @@
1
- const e=require("../../utils/cn.cjs"),t=require("../Portal/Portal.cjs"),n=require("../Portal/anchor-position.cjs"),r=require("./DropdownMenu.module.cjs");let i=require("react"),a=require("react/jsx-runtime");function o(e){switch(e){case`bottom-end`:return r.default.bottomEnd;case`top-start`:return r.default.topStart;case`top-end`:return r.default.topEnd;default:return r.default.bottomStart}}var s={"bottom-start":[`bottom`,`start`],"bottom-end":[`bottom`,`end`],"top-start":[`top`,`start`],"top-end":[`top`,`end`]},c=4;function l(e){return(e.type===`item`||e.type===`checkbox`)&&!e.disabled}function u({trigger:u,items:d,placement:f=`bottom-start`,portal:p=!0,className:m}){let[h,g]=(0,i.useState)(!1),[_,v]=(0,i.useState)(-1),y=(0,i.useId)(),[b,x]=(0,i.useState)(null),[S,C]=(0,i.useState)(null),w=(0,i.useRef)([]),T=(0,i.useRef)(null),E=d.map((e,t)=>l(e)?t:-1).filter(e=>e!==-1),D=(0,i.useCallback)(()=>{b?.querySelector(`[aria-haspopup='menu']`)?.focus()},[b]),O=(0,i.useCallback)(e=>{g(!1),v(-1),e&&D()},[D]),k=(0,i.useCallback)(e=>{v(e),w.current[e]?.focus()},[]),A=e=>{if(E.length===0)return;let t=(E.indexOf(_)+e+E.length)%E.length;k(E[t]??-1)},[j,M]=s[f],N=n.useAnchorPosition({anchor:b,floating:S,side:j,align:M,offset:c,enabled:p&&h});(0,i.useEffect)(()=>{if(!h||!S||T.current===null)return;let e=T.current===`last`?E.at(-1):E[0];T.current=null,e!==void 0&&k(e)},[h,S,E,k]),(0,i.useEffect)(()=>{if(!h)return;let e=e=>{let t=e.target;b?.contains(t)||S?.contains(t)||O(!1)};return window.addEventListener(`mousedown`,e),()=>window.removeEventListener(`mousedown`,e)},[h,O,b,S]);let P=e=>{T.current=e,g(!0)},F=e=>{if(u.props.onKeyDown?.(e),!e.defaultPrevented){if(e.key===`ArrowDown`||!h&&(e.key===`Enter`||e.key===` `)){e.preventDefault(),P(`first`);return}e.key===`ArrowUp`&&(e.preventDefault(),P(`last`))}},I=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),A(1);break;case`ArrowUp`:e.preventDefault(),A(-1);break;case`Home`:e.preventDefault(),E[0]!==void 0&&k(E[0]);break;case`End`:{e.preventDefault();let t=E.at(-1);t!==void 0&&k(t);break}case`Escape`:e.preventDefault(),O(!0);break;case`Tab`:O(!0)}},L=e=>{if(u.props.onClick?.(e),!e.defaultPrevented){if(h){O(!1);return}P(`first`)}},R={...u,props:{...u.props,onClick:L,onKeyDown:F,"aria-expanded":h,"aria-controls":y,"aria-haspopup":`menu`}},z=e=>{e.onSelect(),e.type!==`checkbox`&&O(!0)},B=(0,a.jsx)(`ul`,{ref:C,id:y,role:`menu`,className:e.cn(r.default.menu,p?r.default.portalled:o(f),m),style:N,onKeyDown:I,children:d.map((t,n)=>{if(t.type===`separator`)return(0,a.jsx)(`li`,{role:`separator`,className:r.default.separator,"aria-hidden":!0},t.id);if(t.type===`label`)return(0,a.jsx)(`li`,{role:`presentation`,className:r.default.label,children:t.label},t.id);let i=t.type===`checkbox`;return(0,a.jsx)(`li`,{role:`none`,children:(0,a.jsxs)(`button`,{ref:e=>{w.current[n]=e},type:`button`,role:i?`menuitemcheckbox`:`menuitem`,"aria-checked":i?t.checked:void 0,tabIndex:_===n?0:-1,className:e.cn(r.default.item,t.type===`item`&&t.danger&&r.default.danger,_===n&&r.default.active),disabled:t.disabled,onClick:()=>z(t),onMouseEnter:()=>v(n),children:[t.icon&&(0,a.jsx)(`span`,{"aria-hidden":!0,children:t.icon}),t.label]})},t.id)})});return(0,a.jsxs)(`span`,{ref:x,className:r.default.root,children:[R,h&&(p?(0,a.jsx)(t.Portal,{children:B}):B)]})}exports.DropdownMenu=u;
1
+ const e=require("../../utils/cn.cjs"),t=require("../Portal/Portal.cjs"),n=require("../Portal/anchor-position.cjs"),r=require("./DropdownMenu.module.cjs");let i=require("react"),a=require("react/jsx-runtime");function o(e){switch(e){case`bottom-end`:return r.default.bottomEnd;case`top-start`:return r.default.topStart;case`top-end`:return r.default.topEnd;default:return r.default.bottomStart}}var s={"bottom-start":[`bottom`,`start`],"bottom-end":[`bottom`,`end`],"top-start":[`top`,`start`],"top-end":[`top`,`end`]},c=4;function l(e){return(e.type===`item`||e.type===`checkbox`)&&!e.disabled}function u({trigger:u,items:d,placement:f=`bottom-start`,portal:p=!0,className:m}){let[h,g]=(0,i.useState)(!1),[_,v]=(0,i.useState)(-1),y=(0,i.useId)(),[b,x]=(0,i.useState)(null),[S,C]=(0,i.useState)(null),w=(0,i.useRef)([]),T=(0,i.useRef)(null),E=d.map((e,t)=>l(e)?t:-1).filter(e=>e!==-1),D=(0,i.useCallback)(()=>{b?.querySelector(`[aria-haspopup='menu']`)?.focus()},[b]),O=(0,i.useCallback)(e=>{g(!1),v(-1),e&&D()},[D]),k=(0,i.useCallback)(e=>{v(e),w.current[e]?.focus()},[]),A=e=>{if(E.length===0)return;let t=(E.indexOf(_)+e+E.length)%E.length;k(E[t]??-1)},[j,M]=s[f],N=n.useAnchorPosition({anchor:b,floating:S,side:j,align:M,offset:c,enabled:p&&h});(0,i.useEffect)(()=>{if(!h||!S||T.current===null)return;let e=T.current===`last`?E.at(-1):E[0];T.current=null,e!==void 0&&k(e)},[h,S,E,k]),(0,i.useEffect)(()=>{if(!h)return;let e=e=>{let t=e.target;b?.contains(t)||S?.contains(t)||O(!1)};return window.addEventListener(`mousedown`,e),()=>window.removeEventListener(`mousedown`,e)},[h,O,b,S]);let P=e=>{T.current=e,g(!0)},F=e=>{u.props.onKeyDown?.(e),!e.defaultPrevented&&(e.key===`ArrowDown`||!h&&(e.key===`Enter`||e.key===` `)?(e.preventDefault(),P(`first`)):e.key===`ArrowUp`&&(e.preventDefault(),P(`last`)))},I=e=>{switch(e.key){case`ArrowDown`:e.preventDefault(),A(1);break;case`ArrowUp`:e.preventDefault(),A(-1);break;case`Home`:e.preventDefault(),E[0]!==void 0&&k(E[0]);break;case`End`:{e.preventDefault();let t=E.at(-1);t!==void 0&&k(t);break}case`Escape`:e.preventDefault(),O(!0);break;case`Tab`:O(!0)}},L=e=>{u.props.onClick?.(e),!e.defaultPrevented&&(h?O(!1):P(`first`))},R={...u,props:{...u.props,onClick:L,onKeyDown:F,"aria-expanded":h,"aria-controls":y,"aria-haspopup":`menu`}},z=e=>{e.onSelect(),e.type!==`checkbox`&&O(!0)},B=(0,a.jsx)(`ul`,{ref:C,id:y,role:`menu`,className:e.cn(r.default.menu,p?r.default.portalled:o(f),m),style:N,onKeyDown:I,children:d.map((t,n)=>{if(t.type===`separator`)return(0,a.jsx)(`li`,{role:`separator`,className:r.default.separator,"aria-hidden":!0},t.id);if(t.type===`label`)return(0,a.jsx)(`li`,{role:`presentation`,className:r.default.label,children:t.label},t.id);let i=t.type===`checkbox`;return(0,a.jsx)(`li`,{role:`none`,children:(0,a.jsxs)(`button`,{ref:e=>{w.current[n]=e},type:`button`,role:i?`menuitemcheckbox`:`menuitem`,"aria-checked":i?t.checked:void 0,tabIndex:_===n?0:-1,className:e.cn(r.default.item,t.type===`item`&&t.danger&&r.default.danger,_===n&&r.default.active),disabled:t.disabled,onClick:()=>z(t),onMouseEnter:()=>v(n),children:[t.icon&&(0,a.jsx)(`span`,{"aria-hidden":!0,children:t.icon}),t.label]})},t.id)})});return(0,a.jsxs)(`span`,{ref:x,className:r.default.root,children:[R,h&&(p?(0,a.jsx)(t.Portal,{children:B}):B)]})}exports.DropdownMenu=u;
2
2
  //# sourceMappingURL=DropdownMenu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.cjs","names":[],"sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body owns placement, outside-\n * click, and the whole APG menu-button keyboard model, which has to see the entire\n * entry list to know where the next stop is. Splitting it would move the focus\n * bookkeeping away from the list it indexes into.\n */\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport type { AnchorAlign, AnchorSide } from \"@/components/Portal/anchor-position\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./DropdownMenu.module.css\";\n\nexport type DropdownMenuPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n\nexport type DropdownMenuEntry =\n | {\n type: \"item\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n danger?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | {\n /**\n * An entry that carries on/off state.\n *\n * Rendered as `role=\"menuitemcheckbox\"` with `aria-checked`, which is how\n * a screen reader announces \"checked\" instead of leaving the state\n * invisible. Selecting it does **not** close the menu: toggling two\n * settings in a row is the ordinary case, and closing after the first\n * would make the second a second trip.\n */\n type: \"checkbox\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n checked: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | { type: \"separator\"; id: string }\n | { type: \"label\"; id: string; label: ReactNode };\n\n/** The entry kinds a user can move focus to and activate. */\ntype SelectableEntry = Extract<DropdownMenuEntry, { type: \"item\" | \"checkbox\" }>;\n\nexport interface DropdownMenuProps {\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n onKeyDown?: (e: ReactKeyboardEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n \"aria-haspopup\"?: boolean | \"menu\";\n }>;\n items: DropdownMenuEntry[];\n placement?: DropdownMenuPlacement;\n /**\n * Render the menu in a portal, positioned against the trigger. Default `true`.\n *\n * Without it the menu is `position: absolute` inside the trigger's wrapper,\n * and any ancestor with `overflow` other than `visible` clips it. The ordinary\n * victim is the action column of a `DataTable`: its wrapper scrolls\n * horizontally, `overflow-x: auto` forces `overflow-y` to `auto` too, and the\n * menu of the last row showed one of three entries (measured in Chrome at\n * 1440 px). In a portal the menu escapes the clip, flips above the trigger\n * when there is no room below, and follows the trigger on scroll and resize.\n *\n * The portalled menu stacks at `--tempest-z-popover`, above\n * `--tempest-z-modal`, so a menu opened inside a `Modal` still paints on top.\n * `false` keeps the in-flow menu, for a container that must own the menu's\n * stacking or clipping on purpose.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction placementClass(placement: DropdownMenuPlacement): string {\n switch (placement) {\n case \"bottom-end\":\n return styles.bottomEnd;\n case \"top-start\":\n return styles.topStart;\n case \"top-end\":\n return styles.topEnd;\n case \"bottom-start\":\n default:\n return styles.bottomStart;\n }\n}\n\nconst PLACEMENT_GEOMETRY: Record<DropdownMenuPlacement, [AnchorSide, AnchorAlign]> = {\n \"bottom-start\": [\"bottom\", \"start\"],\n \"bottom-end\": [\"bottom\", \"end\"],\n \"top-start\": [\"top\", \"start\"],\n \"top-end\": [\"top\", \"end\"],\n};\n\n/** Gap between trigger and menu, in px — the in-flow CSS uses the same 4 px. */\nconst MENU_OFFSET = 4;\n\n/** Whether an entry can take focus — an item or checkbox that is not disabled. */\nfunction isSelectable(entry: DropdownMenuEntry): entry is SelectableEntry {\n return (entry.type === \"item\" || entry.type === \"checkbox\") && !entry.disabled;\n}\n\n/**\n * Dropdown menu — a list of actions anchored to a trigger, following the\n * [APG menu button pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/).\n *\n * `role=\"menu\"` is a promise about the keyboard, and this component keeps it:\n *\n * - `Enter`, `Space` or `ArrowDown` on the trigger opens and focuses the first\n * entry; `ArrowUp` opens and focuses the last.\n * - `ArrowUp` / `ArrowDown` move with wrap, `Home` / `End` jump to the ends.\n * - `Escape` closes and returns focus to the trigger, so the next `Tab` continues\n * from where the user was rather than from the top of the document.\n * - `Tab` closes the menu and lets the page's own tab order take over, counted\n * from the trigger: focus goes back to the trigger synchronously and the key's\n * default action then moves on from there. Without that, a portalled menu —\n * the last thing in `body` — would hand `Tab` to whatever follows it, which\n * inside a `Modal` is outside the dialog.\n * - Focus is managed: entries carry `tabIndex={-1}` and only the active one is\n * `0`, which is what stops `Tab` from walking the menu one entry at a time.\n *\n * Disabled entries, separators and labels are skipped by every movement.\n */\nexport function DropdownMenu({\n trigger,\n items,\n placement = \"bottom-start\",\n portal = true,\n className,\n}: DropdownMenuProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [menuNode, setMenuNode] = useState<HTMLUListElement | null>(null);\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const pendingFocus = useRef<\"first\" | \"last\" | null>(null);\n\n const selectable = items\n .map((entry, index) => (isSelectable(entry) ? index : -1))\n .filter((index) => index !== -1);\n\n /**\n * Focus the trigger again.\n *\n * Found through the `aria-haspopup` this component puts on it, rather than\n * through a ref: `ref` lives in different places in React 18 and 19, and a\n * consumer's custom trigger is under no obligation to forward one. The\n * attribute is on the element either way.\n *\n * @returns Nothing.\n */\n const focusTrigger = useCallback((): void => {\n rootNode?.querySelector<HTMLElement>(\"[aria-haspopup='menu']\")?.focus();\n }, [rootNode]);\n\n const close = useCallback(\n (restoreFocus: boolean): void => {\n setOpen(false);\n setActiveIndex(-1);\n if (restoreFocus) focusTrigger();\n },\n [focusTrigger],\n );\n\n const focusIndex = useCallback((index: number): void => {\n setActiveIndex(index);\n itemRefs.current[index]?.focus();\n }, []);\n\n /**\n * Move focus to the entry `step` positions away, wrapping at both ends.\n *\n * Walks the selectable positions rather than the raw list, so separators,\n * labels and disabled entries are never a stop.\n */\n const move = (step: number): void => {\n if (selectable.length === 0) return;\n const current = selectable.indexOf(activeIndex);\n const next = (current + step + selectable.length) % selectable.length;\n focusIndex(selectable[next] ?? -1);\n };\n\n const [side, align] = PLACEMENT_GEOMETRY[placement];\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: menuNode,\n side,\n align,\n offset: MENU_OFFSET,\n enabled: portal && open,\n });\n\n /**\n * Focus the entry the opening key asked for.\n *\n * Keyed off the menu node rather than off `open` alone: in a portal the menu\n * mounts one commit after `open` flips, and an effect that ran on `open` would\n * find no entries to focus.\n */\n useEffect(() => {\n if (!open || !menuNode || pendingFocus.current === null) return;\n const target = pendingFocus.current === \"last\" ? selectable.at(-1) : selectable[0];\n pendingFocus.current = null;\n if (target !== undefined) focusIndex(target);\n }, [open, menuNode, selectable, focusIndex]);\n\n /**\n * Close on a press outside both the trigger and the menu.\n *\n * The menu is checked separately because in a portal it is not inside the\n * trigger's wrapper: testing the wrapper alone would treat a press on an entry\n * as outside and close the menu before the entry's click lands.\n */\n useEffect(() => {\n if (!open) return;\n const onDown = (event: MouseEvent): void => {\n const target = event.target as Node;\n if (rootNode?.contains(target) || menuNode?.contains(target)) return;\n close(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, close, rootNode, menuNode]);\n\n const openWith = (edge: \"first\" | \"last\"): void => {\n pendingFocus.current = edge;\n setOpen(true);\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent): void => {\n trigger.props.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || (!open && (event.key === \"Enter\" || event.key === \" \"))) {\n event.preventDefault();\n openWith(\"first\");\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openWith(\"last\");\n }\n };\n\n /**\n * Keyboard model of the open menu.\n *\n * Handled on the list rather than on `window`: focus is inside the menu by\n * then, so the keys arrive here by bubbling and cannot be pre-empted by an\n * unrelated global listener — which is how the arrows used to go missing in a\n * host application.\n */\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>): void => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n move(1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n move(-1);\n break;\n case \"Home\":\n event.preventDefault();\n if (selectable[0] !== undefined) focusIndex(selectable[0]);\n break;\n case \"End\": {\n event.preventDefault();\n const last = selectable.at(-1);\n if (last !== undefined) focusIndex(last);\n break;\n }\n case \"Escape\":\n event.preventDefault();\n close(true);\n break;\n case \"Tab\":\n close(true);\n break;\n default:\n break;\n }\n };\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n if (event.defaultPrevented) return;\n if (open) {\n close(false);\n return;\n }\n openWith(\"first\");\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n \"aria-expanded\": open,\n \"aria-controls\": id,\n \"aria-haspopup\": \"menu\" as const,\n },\n } as ReactElement;\n\n const handleSelect = (entry: SelectableEntry): void => {\n entry.onSelect();\n if (entry.type === \"checkbox\") return;\n close(true);\n };\n\n const menu = (\n <ul\n ref={setMenuNode}\n id={id}\n role=\"menu\"\n className={cn(\n styles.menu,\n portal ? styles.portalled : placementClass(placement),\n className,\n )}\n style={floatingStyle}\n onKeyDown={handleMenuKeyDown}\n >\n {items.map((entry, index) => {\n if (entry.type === \"separator\") {\n return (\n <li\n key={entry.id}\n role=\"separator\"\n className={styles.separator}\n aria-hidden\n />\n );\n }\n if (entry.type === \"label\") {\n return (\n <li key={entry.id} role=\"presentation\" className={styles.label}>\n {entry.label}\n </li>\n );\n }\n const checkbox = entry.type === \"checkbox\";\n return (\n <li key={entry.id} role=\"none\">\n <button\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n role={checkbox ? \"menuitemcheckbox\" : \"menuitem\"}\n aria-checked={checkbox ? entry.checked : undefined}\n tabIndex={activeIndex === index ? 0 : -1}\n className={cn(\n styles.item,\n entry.type === \"item\" && entry.danger && styles.danger,\n activeIndex === index && styles.active,\n )}\n disabled={entry.disabled}\n onClick={() => handleSelect(entry)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {entry.icon && <span aria-hidden>{entry.icon}</span>}\n {entry.label}\n </button>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {open && (portal ? <Portal>{menu}</Portal> : menu)}\n </span>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownMenu.cjs","names":["styles","useState","useId","useRef","useCallback","useAnchorPosition","cn","Portal","require_cn","require_Portal","require_anchor_position","require_DropdownMenu_module","react","react_jsx_runtime","placementClass","placement","PLACEMENT_GEOMETRY","MENU_OFFSET","isSelectable","entry","DropdownMenu","open","setOpen","activeIndex","setActiveIndex","id","rootNode","setRootNode","menuNode","setMenuNode","itemRefs","pendingFocus","selectable","items","index","focusTrigger","close","restoreFocus","focusIndex","move","next","step","side","align","floatingStyle","portal","target","onDown","event","openWith","edge","handleTriggerKeyDown","trigger","handleMenuKeyDown","last","handleTriggerClick","triggerClone","handleSelect","menu","className","checkbox","el"],"sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body owns placement, outside-\n * click, and the whole APG menu-button keyboard model, which has to see the entire\n * entry list to know where the next stop is. Splitting it would move the focus\n * bookkeeping away from the list it indexes into.\n */\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport type { AnchorAlign, AnchorSide } from \"@/components/Portal/anchor-position\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./DropdownMenu.module.css\";\n\nexport type DropdownMenuPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n\nexport type DropdownMenuEntry =\n | {\n type: \"item\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n danger?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | {\n /**\n * An entry that carries on/off state.\n *\n * Rendered as `role=\"menuitemcheckbox\"` with `aria-checked`, which is how\n * a screen reader announces \"checked\" instead of leaving the state\n * invisible. Selecting it does **not** close the menu: toggling two\n * settings in a row is the ordinary case, and closing after the first\n * would make the second a second trip.\n */\n type: \"checkbox\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n checked: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | { type: \"separator\"; id: string }\n | { type: \"label\"; id: string; label: ReactNode };\n\n/** The entry kinds a user can move focus to and activate. */\ntype SelectableEntry = Extract<DropdownMenuEntry, { type: \"item\" | \"checkbox\" }>;\n\nexport interface DropdownMenuProps {\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n onKeyDown?: (e: ReactKeyboardEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n \"aria-haspopup\"?: boolean | \"menu\";\n }>;\n items: DropdownMenuEntry[];\n placement?: DropdownMenuPlacement;\n /**\n * Render the menu in a portal, positioned against the trigger. Default `true`.\n *\n * Without it the menu is `position: absolute` inside the trigger's wrapper,\n * and any ancestor with `overflow` other than `visible` clips it. The ordinary\n * victim is the action column of a `DataTable`: its wrapper scrolls\n * horizontally, `overflow-x: auto` forces `overflow-y` to `auto` too, and the\n * menu of the last row showed one of three entries (measured in Chrome at\n * 1440 px). In a portal the menu escapes the clip, flips above the trigger\n * when there is no room below, and follows the trigger on scroll and resize.\n *\n * The portalled menu stacks at `--tempest-z-popover`, above\n * `--tempest-z-modal`, so a menu opened inside a `Modal` still paints on top.\n * `false` keeps the in-flow menu, for a container that must own the menu's\n * stacking or clipping on purpose.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction placementClass(placement: DropdownMenuPlacement): string {\n switch (placement) {\n case \"bottom-end\":\n return styles.bottomEnd;\n case \"top-start\":\n return styles.topStart;\n case \"top-end\":\n return styles.topEnd;\n case \"bottom-start\":\n default:\n return styles.bottomStart;\n }\n}\n\nconst PLACEMENT_GEOMETRY: Record<DropdownMenuPlacement, [AnchorSide, AnchorAlign]> = {\n \"bottom-start\": [\"bottom\", \"start\"],\n \"bottom-end\": [\"bottom\", \"end\"],\n \"top-start\": [\"top\", \"start\"],\n \"top-end\": [\"top\", \"end\"],\n};\n\n/** Gap between trigger and menu, in px — the in-flow CSS uses the same 4 px. */\nconst MENU_OFFSET = 4;\n\n/** Whether an entry can take focus — an item or checkbox that is not disabled. */\nfunction isSelectable(entry: DropdownMenuEntry): entry is SelectableEntry {\n return (entry.type === \"item\" || entry.type === \"checkbox\") && !entry.disabled;\n}\n\n/**\n * Dropdown menu — a list of actions anchored to a trigger, following the\n * [APG menu button pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/).\n *\n * `role=\"menu\"` is a promise about the keyboard, and this component keeps it:\n *\n * - `Enter`, `Space` or `ArrowDown` on the trigger opens and focuses the first\n * entry; `ArrowUp` opens and focuses the last.\n * - `ArrowUp` / `ArrowDown` move with wrap, `Home` / `End` jump to the ends.\n * - `Escape` closes and returns focus to the trigger, so the next `Tab` continues\n * from where the user was rather than from the top of the document.\n * - `Tab` closes the menu and lets the page's own tab order take over, counted\n * from the trigger: focus goes back to the trigger synchronously and the key's\n * default action then moves on from there. Without that, a portalled menu —\n * the last thing in `body` — would hand `Tab` to whatever follows it, which\n * inside a `Modal` is outside the dialog.\n * - Focus is managed: entries carry `tabIndex={-1}` and only the active one is\n * `0`, which is what stops `Tab` from walking the menu one entry at a time.\n *\n * Disabled entries, separators and labels are skipped by every movement.\n */\nexport function DropdownMenu({\n trigger,\n items,\n placement = \"bottom-start\",\n portal = true,\n className,\n}: DropdownMenuProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [menuNode, setMenuNode] = useState<HTMLUListElement | null>(null);\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const pendingFocus = useRef<\"first\" | \"last\" | null>(null);\n\n const selectable = items\n .map((entry, index) => (isSelectable(entry) ? index : -1))\n .filter((index) => index !== -1);\n\n /**\n * Focus the trigger again.\n *\n * Found through the `aria-haspopup` this component puts on it, rather than\n * through a ref: `ref` lives in different places in React 18 and 19, and a\n * consumer's custom trigger is under no obligation to forward one. The\n * attribute is on the element either way.\n *\n * @returns Nothing.\n */\n const focusTrigger = useCallback((): void => {\n rootNode?.querySelector<HTMLElement>(\"[aria-haspopup='menu']\")?.focus();\n }, [rootNode]);\n\n const close = useCallback(\n (restoreFocus: boolean): void => {\n setOpen(false);\n setActiveIndex(-1);\n if (restoreFocus) focusTrigger();\n },\n [focusTrigger],\n );\n\n const focusIndex = useCallback((index: number): void => {\n setActiveIndex(index);\n itemRefs.current[index]?.focus();\n }, []);\n\n /**\n * Move focus to the entry `step` positions away, wrapping at both ends.\n *\n * Walks the selectable positions rather than the raw list, so separators,\n * labels and disabled entries are never a stop.\n */\n const move = (step: number): void => {\n if (selectable.length === 0) return;\n const current = selectable.indexOf(activeIndex);\n const next = (current + step + selectable.length) % selectable.length;\n focusIndex(selectable[next] ?? -1);\n };\n\n const [side, align] = PLACEMENT_GEOMETRY[placement];\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: menuNode,\n side,\n align,\n offset: MENU_OFFSET,\n enabled: portal && open,\n });\n\n /**\n * Focus the entry the opening key asked for.\n *\n * Keyed off the menu node rather than off `open` alone: in a portal the menu\n * mounts one commit after `open` flips, and an effect that ran on `open` would\n * find no entries to focus.\n */\n useEffect(() => {\n if (!open || !menuNode || pendingFocus.current === null) return;\n const target = pendingFocus.current === \"last\" ? selectable.at(-1) : selectable[0];\n pendingFocus.current = null;\n if (target !== undefined) focusIndex(target);\n }, [open, menuNode, selectable, focusIndex]);\n\n /**\n * Close on a press outside both the trigger and the menu.\n *\n * The menu is checked separately because in a portal it is not inside the\n * trigger's wrapper: testing the wrapper alone would treat a press on an entry\n * as outside and close the menu before the entry's click lands.\n */\n useEffect(() => {\n if (!open) return;\n const onDown = (event: MouseEvent): void => {\n const target = event.target as Node;\n if (rootNode?.contains(target) || menuNode?.contains(target)) return;\n close(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, close, rootNode, menuNode]);\n\n const openWith = (edge: \"first\" | \"last\"): void => {\n pendingFocus.current = edge;\n setOpen(true);\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent): void => {\n trigger.props.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || (!open && (event.key === \"Enter\" || event.key === \" \"))) {\n event.preventDefault();\n openWith(\"first\");\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openWith(\"last\");\n }\n };\n\n /**\n * Keyboard model of the open menu.\n *\n * Handled on the list rather than on `window`: focus is inside the menu by\n * then, so the keys arrive here by bubbling and cannot be pre-empted by an\n * unrelated global listener — which is how the arrows used to go missing in a\n * host application.\n */\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>): void => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n move(1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n move(-1);\n break;\n case \"Home\":\n event.preventDefault();\n if (selectable[0] !== undefined) focusIndex(selectable[0]);\n break;\n case \"End\": {\n event.preventDefault();\n const last = selectable.at(-1);\n if (last !== undefined) focusIndex(last);\n break;\n }\n case \"Escape\":\n event.preventDefault();\n close(true);\n break;\n case \"Tab\":\n close(true);\n break;\n default:\n break;\n }\n };\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n if (event.defaultPrevented) return;\n if (open) {\n close(false);\n return;\n }\n openWith(\"first\");\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n \"aria-expanded\": open,\n \"aria-controls\": id,\n \"aria-haspopup\": \"menu\" as const,\n },\n } as ReactElement;\n\n const handleSelect = (entry: SelectableEntry): void => {\n entry.onSelect();\n if (entry.type === \"checkbox\") return;\n close(true);\n };\n\n const menu = (\n <ul\n ref={setMenuNode}\n id={id}\n role=\"menu\"\n className={cn(\n styles.menu,\n portal ? styles.portalled : placementClass(placement),\n className,\n )}\n style={floatingStyle}\n onKeyDown={handleMenuKeyDown}\n >\n {items.map((entry, index) => {\n if (entry.type === \"separator\") {\n return (\n <li\n key={entry.id}\n role=\"separator\"\n className={styles.separator}\n aria-hidden\n />\n );\n }\n if (entry.type === \"label\") {\n return (\n <li key={entry.id} role=\"presentation\" className={styles.label}>\n {entry.label}\n </li>\n );\n }\n const checkbox = entry.type === \"checkbox\";\n return (\n <li key={entry.id} role=\"none\">\n <button\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n role={checkbox ? \"menuitemcheckbox\" : \"menuitem\"}\n aria-checked={checkbox ? entry.checked : undefined}\n tabIndex={activeIndex === index ? 0 : -1}\n className={cn(\n styles.item,\n entry.type === \"item\" && entry.danger && styles.danger,\n activeIndex === index && styles.active,\n )}\n disabled={entry.disabled}\n onClick={() => handleSelect(entry)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {entry.icon && <span aria-hidden>{entry.icon}</span>}\n {entry.label}\n </button>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {open && (portal ? <Portal>{menu}</Portal> : menu)}\n </span>\n );\n}\n"],"mappings":"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"}
@@ -66,13 +66,7 @@ function h({ trigger: h, items: g, placement: _ = "bottom-start", portal: v = !0
66
66
  let z = (e) => {
67
67
  A.current = e, x(!0);
68
68
  }, B = (e) => {
69
- if (h.props.onKeyDown?.(e), !e.defaultPrevented) {
70
- if (e.key === "ArrowDown" || !b && (e.key === "Enter" || e.key === " ")) {
71
- e.preventDefault(), z("first");
72
- return;
73
- }
74
- e.key === "ArrowUp" && (e.preventDefault(), z("last"));
75
- }
69
+ h.props.onKeyDown?.(e), !e.defaultPrevented && (e.key === "ArrowDown" || !b && (e.key === "Enter" || e.key === " ") ? (e.preventDefault(), z("first")) : e.key === "ArrowUp" && (e.preventDefault(), z("last")));
76
70
  }, V = (e) => {
77
71
  switch (e.key) {
78
72
  case "ArrowDown":
@@ -96,13 +90,7 @@ function h({ trigger: h, items: g, placement: _ = "bottom-start", portal: v = !0
96
90
  case "Tab": N(!0);
97
91
  }
98
92
  }, H = (e) => {
99
- if (h.props.onClick?.(e), !e.defaultPrevented) {
100
- if (b) {
101
- N(!1);
102
- return;
103
- }
104
- z("first");
105
- }
93
+ h.props.onClick?.(e), !e.defaultPrevented && (b ? N(!1) : z("first"));
106
94
  }, U = {
107
95
  ...h,
108
96
  props: {
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.js","names":[],"sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body owns placement, outside-\n * click, and the whole APG menu-button keyboard model, which has to see the entire\n * entry list to know where the next stop is. Splitting it would move the focus\n * bookkeeping away from the list it indexes into.\n */\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport type { AnchorAlign, AnchorSide } from \"@/components/Portal/anchor-position\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./DropdownMenu.module.css\";\n\nexport type DropdownMenuPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n\nexport type DropdownMenuEntry =\n | {\n type: \"item\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n danger?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | {\n /**\n * An entry that carries on/off state.\n *\n * Rendered as `role=\"menuitemcheckbox\"` with `aria-checked`, which is how\n * a screen reader announces \"checked\" instead of leaving the state\n * invisible. Selecting it does **not** close the menu: toggling two\n * settings in a row is the ordinary case, and closing after the first\n * would make the second a second trip.\n */\n type: \"checkbox\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n checked: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | { type: \"separator\"; id: string }\n | { type: \"label\"; id: string; label: ReactNode };\n\n/** The entry kinds a user can move focus to and activate. */\ntype SelectableEntry = Extract<DropdownMenuEntry, { type: \"item\" | \"checkbox\" }>;\n\nexport interface DropdownMenuProps {\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n onKeyDown?: (e: ReactKeyboardEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n \"aria-haspopup\"?: boolean | \"menu\";\n }>;\n items: DropdownMenuEntry[];\n placement?: DropdownMenuPlacement;\n /**\n * Render the menu in a portal, positioned against the trigger. Default `true`.\n *\n * Without it the menu is `position: absolute` inside the trigger's wrapper,\n * and any ancestor with `overflow` other than `visible` clips it. The ordinary\n * victim is the action column of a `DataTable`: its wrapper scrolls\n * horizontally, `overflow-x: auto` forces `overflow-y` to `auto` too, and the\n * menu of the last row showed one of three entries (measured in Chrome at\n * 1440 px). In a portal the menu escapes the clip, flips above the trigger\n * when there is no room below, and follows the trigger on scroll and resize.\n *\n * The portalled menu stacks at `--tempest-z-popover`, above\n * `--tempest-z-modal`, so a menu opened inside a `Modal` still paints on top.\n * `false` keeps the in-flow menu, for a container that must own the menu's\n * stacking or clipping on purpose.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction placementClass(placement: DropdownMenuPlacement): string {\n switch (placement) {\n case \"bottom-end\":\n return styles.bottomEnd;\n case \"top-start\":\n return styles.topStart;\n case \"top-end\":\n return styles.topEnd;\n case \"bottom-start\":\n default:\n return styles.bottomStart;\n }\n}\n\nconst PLACEMENT_GEOMETRY: Record<DropdownMenuPlacement, [AnchorSide, AnchorAlign]> = {\n \"bottom-start\": [\"bottom\", \"start\"],\n \"bottom-end\": [\"bottom\", \"end\"],\n \"top-start\": [\"top\", \"start\"],\n \"top-end\": [\"top\", \"end\"],\n};\n\n/** Gap between trigger and menu, in px — the in-flow CSS uses the same 4 px. */\nconst MENU_OFFSET = 4;\n\n/** Whether an entry can take focus — an item or checkbox that is not disabled. */\nfunction isSelectable(entry: DropdownMenuEntry): entry is SelectableEntry {\n return (entry.type === \"item\" || entry.type === \"checkbox\") && !entry.disabled;\n}\n\n/**\n * Dropdown menu — a list of actions anchored to a trigger, following the\n * [APG menu button pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/).\n *\n * `role=\"menu\"` is a promise about the keyboard, and this component keeps it:\n *\n * - `Enter`, `Space` or `ArrowDown` on the trigger opens and focuses the first\n * entry; `ArrowUp` opens and focuses the last.\n * - `ArrowUp` / `ArrowDown` move with wrap, `Home` / `End` jump to the ends.\n * - `Escape` closes and returns focus to the trigger, so the next `Tab` continues\n * from where the user was rather than from the top of the document.\n * - `Tab` closes the menu and lets the page's own tab order take over, counted\n * from the trigger: focus goes back to the trigger synchronously and the key's\n * default action then moves on from there. Without that, a portalled menu —\n * the last thing in `body` — would hand `Tab` to whatever follows it, which\n * inside a `Modal` is outside the dialog.\n * - Focus is managed: entries carry `tabIndex={-1}` and only the active one is\n * `0`, which is what stops `Tab` from walking the menu one entry at a time.\n *\n * Disabled entries, separators and labels are skipped by every movement.\n */\nexport function DropdownMenu({\n trigger,\n items,\n placement = \"bottom-start\",\n portal = true,\n className,\n}: DropdownMenuProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [menuNode, setMenuNode] = useState<HTMLUListElement | null>(null);\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const pendingFocus = useRef<\"first\" | \"last\" | null>(null);\n\n const selectable = items\n .map((entry, index) => (isSelectable(entry) ? index : -1))\n .filter((index) => index !== -1);\n\n /**\n * Focus the trigger again.\n *\n * Found through the `aria-haspopup` this component puts on it, rather than\n * through a ref: `ref` lives in different places in React 18 and 19, and a\n * consumer's custom trigger is under no obligation to forward one. The\n * attribute is on the element either way.\n *\n * @returns Nothing.\n */\n const focusTrigger = useCallback((): void => {\n rootNode?.querySelector<HTMLElement>(\"[aria-haspopup='menu']\")?.focus();\n }, [rootNode]);\n\n const close = useCallback(\n (restoreFocus: boolean): void => {\n setOpen(false);\n setActiveIndex(-1);\n if (restoreFocus) focusTrigger();\n },\n [focusTrigger],\n );\n\n const focusIndex = useCallback((index: number): void => {\n setActiveIndex(index);\n itemRefs.current[index]?.focus();\n }, []);\n\n /**\n * Move focus to the entry `step` positions away, wrapping at both ends.\n *\n * Walks the selectable positions rather than the raw list, so separators,\n * labels and disabled entries are never a stop.\n */\n const move = (step: number): void => {\n if (selectable.length === 0) return;\n const current = selectable.indexOf(activeIndex);\n const next = (current + step + selectable.length) % selectable.length;\n focusIndex(selectable[next] ?? -1);\n };\n\n const [side, align] = PLACEMENT_GEOMETRY[placement];\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: menuNode,\n side,\n align,\n offset: MENU_OFFSET,\n enabled: portal && open,\n });\n\n /**\n * Focus the entry the opening key asked for.\n *\n * Keyed off the menu node rather than off `open` alone: in a portal the menu\n * mounts one commit after `open` flips, and an effect that ran on `open` would\n * find no entries to focus.\n */\n useEffect(() => {\n if (!open || !menuNode || pendingFocus.current === null) return;\n const target = pendingFocus.current === \"last\" ? selectable.at(-1) : selectable[0];\n pendingFocus.current = null;\n if (target !== undefined) focusIndex(target);\n }, [open, menuNode, selectable, focusIndex]);\n\n /**\n * Close on a press outside both the trigger and the menu.\n *\n * The menu is checked separately because in a portal it is not inside the\n * trigger's wrapper: testing the wrapper alone would treat a press on an entry\n * as outside and close the menu before the entry's click lands.\n */\n useEffect(() => {\n if (!open) return;\n const onDown = (event: MouseEvent): void => {\n const target = event.target as Node;\n if (rootNode?.contains(target) || menuNode?.contains(target)) return;\n close(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, close, rootNode, menuNode]);\n\n const openWith = (edge: \"first\" | \"last\"): void => {\n pendingFocus.current = edge;\n setOpen(true);\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent): void => {\n trigger.props.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || (!open && (event.key === \"Enter\" || event.key === \" \"))) {\n event.preventDefault();\n openWith(\"first\");\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openWith(\"last\");\n }\n };\n\n /**\n * Keyboard model of the open menu.\n *\n * Handled on the list rather than on `window`: focus is inside the menu by\n * then, so the keys arrive here by bubbling and cannot be pre-empted by an\n * unrelated global listener — which is how the arrows used to go missing in a\n * host application.\n */\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>): void => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n move(1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n move(-1);\n break;\n case \"Home\":\n event.preventDefault();\n if (selectable[0] !== undefined) focusIndex(selectable[0]);\n break;\n case \"End\": {\n event.preventDefault();\n const last = selectable.at(-1);\n if (last !== undefined) focusIndex(last);\n break;\n }\n case \"Escape\":\n event.preventDefault();\n close(true);\n break;\n case \"Tab\":\n close(true);\n break;\n default:\n break;\n }\n };\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n if (event.defaultPrevented) return;\n if (open) {\n close(false);\n return;\n }\n openWith(\"first\");\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n \"aria-expanded\": open,\n \"aria-controls\": id,\n \"aria-haspopup\": \"menu\" as const,\n },\n } as ReactElement;\n\n const handleSelect = (entry: SelectableEntry): void => {\n entry.onSelect();\n if (entry.type === \"checkbox\") return;\n close(true);\n };\n\n const menu = (\n <ul\n ref={setMenuNode}\n id={id}\n role=\"menu\"\n className={cn(\n styles.menu,\n portal ? styles.portalled : placementClass(placement),\n className,\n )}\n style={floatingStyle}\n onKeyDown={handleMenuKeyDown}\n >\n {items.map((entry, index) => {\n if (entry.type === \"separator\") {\n return (\n <li\n key={entry.id}\n role=\"separator\"\n className={styles.separator}\n aria-hidden\n />\n );\n }\n if (entry.type === \"label\") {\n return (\n <li key={entry.id} role=\"presentation\" className={styles.label}>\n {entry.label}\n </li>\n );\n }\n const checkbox = entry.type === \"checkbox\";\n return (\n <li key={entry.id} role=\"none\">\n <button\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n role={checkbox ? \"menuitemcheckbox\" : \"menuitem\"}\n aria-checked={checkbox ? entry.checked : undefined}\n tabIndex={activeIndex === index ? 0 : -1}\n className={cn(\n styles.item,\n entry.type === \"item\" && entry.danger && styles.danger,\n activeIndex === index && styles.active,\n )}\n disabled={entry.disabled}\n onClick={() => handleSelect(entry)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {entry.icon && <span aria-hidden>{entry.icon}</span>}\n {entry.label}\n </button>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {open && (portal ? <Portal>{menu}</Portal> : menu)}\n </span>\n );\n}\n"],"mappings":";;;;;;;AAgFA,SAAS,EAAe,GAA0C;CAC9D,QAAQ,GAAR;EACI,KAAK,cACD,OAAO,EAAO;EAClB,KAAK,aACD,OAAO,EAAO;EAClB,KAAK,WACD,OAAO,EAAO;EAElB,SACI,OAAO,EAAO;CACtB;AACJ;AAEA,IAAM,IAA+E;CACjF,gBAAgB,CAAC,UAAU,OAAO;CAClC,cAAc,CAAC,UAAU,KAAK;CAC9B,aAAa,CAAC,OAAO,OAAO;CAC5B,WAAW,CAAC,OAAO,KAAK;AAC5B,GAGM,IAAc;AAGpB,SAAS,EAAa,GAAoD;CACtE,QAAQ,EAAM,SAAS,UAAU,EAAM,SAAS,eAAe,CAAC,EAAM;AAC1E;AAuBA,SAAgB,EAAa,EACzB,YACA,UACA,eAAY,gBACZ,YAAS,IACT,gBACkB;CAClB,IAAM,CAAC,GAAM,KAAW,EAAS,EAAK,GAChC,CAAC,GAAa,KAAkB,EAAiB,EAAE,GACnD,IAAK,EAAM,GACX,CAAC,GAAU,KAAe,EAAiC,IAAI,GAC/D,CAAC,GAAU,KAAe,EAAkC,IAAI,GAChE,IAAW,EAAwC,CAAC,CAAC,GACrD,IAAe,EAAgC,IAAI,GAEnD,IAAa,EACd,KAAK,GAAO,MAAW,EAAa,CAAK,IAAI,IAAQ,EAAG,CAAC,CACzD,QAAQ,MAAU,MAAU,EAAE,GAY7B,IAAe,QAAwB;EACzC,GAAU,cAA2B,wBAAwB,CAAC,EAAE,MAAM;CAC1E,GAAG,CAAC,CAAQ,CAAC,GAEP,IAAQ,GACT,MAAgC;EAG7B,AAFA,EAAQ,EAAK,GACb,EAAe,EAAE,GACb,KAAc,EAAa;CACnC,GACA,CAAC,CAAY,CACjB,GAEM,IAAa,GAAa,MAAwB;EAEpD,AADA,EAAe,CAAK,GACpB,EAAS,QAAQ,EAAM,EAAE,MAAM;CACnC,GAAG,CAAC,CAAC,GAQC,KAAQ,MAAuB;EACjC,IAAI,EAAW,WAAW,GAAG;EAE7B,IAAM,KADU,EAAW,QAAQ,CACrB,IAAU,IAAO,EAAW,UAAU,EAAW;EAC/D,EAAW,EAAW,MAAS,EAAE;CACrC,GAEM,CAAC,GAAM,KAAS,EAAmB,IACnC,IAAgB,EAAkB;EACpC,QAAQ;EACR,UAAU;EACV;EACA;EACA,QAAQ;EACR,SAAS,KAAU;CACvB,CAAC;CAuBD,AAdA,QAAgB;EACZ,IAAI,CAAC,KAAQ,CAAC,KAAY,EAAa,YAAY,MAAM;EACzD,IAAM,IAAS,EAAa,YAAY,SAAS,EAAW,GAAG,EAAE,IAAI,EAAW;EAEhF,AADA,EAAa,UAAU,MACnB,MAAW,KAAA,KAAW,EAAW,CAAM;CAC/C,GAAG;EAAC;EAAM;EAAU;EAAY;CAAU,CAAC,GAS3C,QAAgB;EACZ,IAAI,CAAC,GAAM;EACX,IAAM,KAAU,MAA4B;GACxC,IAAM,IAAS,EAAM;GACjB,GAAU,SAAS,CAAM,KAAK,GAAU,SAAS,CAAM,KAC3D,EAAM,EAAK;EACf;EAEA,OADA,OAAO,iBAAiB,aAAa,CAAM,SAC9B,OAAO,oBAAoB,aAAa,CAAM;CAC/D,GAAG;EAAC;EAAM;EAAO;EAAU;CAAQ,CAAC;CAEpC,IAAM,KAAY,MAAiC;EAE/C,AADA,EAAa,UAAU,GACvB,EAAQ,EAAI;CAChB,GAEM,KAAwB,MAAoC;EAC9D,MAAQ,MAAM,YAAY,CAAK,GAC3B,GAAM,kBACV;OAAI,EAAM,QAAQ,eAAgB,CAAC,MAAS,EAAM,QAAQ,WAAW,EAAM,QAAQ,MAAO;IAEtF,AADA,EAAM,eAAe,GACrB,EAAS,OAAO;IAChB;GACJ;GACA,AAAI,EAAM,QAAQ,cACd,EAAM,eAAe,GACrB,EAAS,MAAM;EAHnB;CAKJ,GAUM,KAAqB,MAAsD;EAC7E,QAAQ,EAAM,KAAd;GACI,KAAK;IAED,AADA,EAAM,eAAe,GACrB,EAAK,CAAC;IACN;GACJ,KAAK;IAED,AADA,EAAM,eAAe,GACrB,EAAK,EAAE;IACP;GACJ,KAAK;IAED,AADA,EAAM,eAAe,GACjB,EAAW,OAAO,KAAA,KAAW,EAAW,EAAW,EAAE;IACzD;GACJ,KAAK,OAAO;IACR,EAAM,eAAe;IACrB,IAAM,IAAO,EAAW,GAAG,EAAE;IAC7B,AAAI,MAAS,KAAA,KAAW,EAAW,CAAI;IACvC;GACJ;GACA,KAAK;IAED,AADA,EAAM,eAAe,GACrB,EAAM,EAAI;IACV;GACJ,KAAK,OACD,EAAM,EAAI;EAIlB;CACJ,GAEM,KAAsB,MAAkC;EAC1D,MAAQ,MAAM,UAAU,CAAK,GACzB,GAAM,kBACV;OAAI,GAAM;IACN,EAAM,EAAK;IACX;GACJ;GACA,EAAS,OAAO;EADhB;CAEJ,GAEM,IAAe;EACjB,GAAG;EACH,OAAO;GACH,GAAG,EAAQ;GACX,SAAS;GACT,WAAW;GACX,iBAAiB;GACjB,iBAAiB;GACjB,iBAAiB;EACrB;CACJ,GAEM,KAAgB,MAAiC;EACnD,EAAM,SAAS,GACX,EAAM,SAAS,cACnB,EAAM,EAAI;CACd,GAEM,IACF,kBAAC,MAAD;EACI,KAAK;EACD;EACJ,MAAK;EACL,WAAW,EACP,EAAO,MACP,IAAS,EAAO,YAAY,EAAe,CAAS,GACpD,CACJ;EACA,OAAO;EACP,WAAW;EAEV,UAAA,EAAM,KAAK,GAAO,MAAU;GACzB,IAAI,EAAM,SAAS,aACf,OACI,kBAAC,MAAD;IAEI,MAAK;IACL,WAAW,EAAO;IAClB,eAAA;GACH,GAJQ,EAAM,EAId;GAGT,IAAI,EAAM,SAAS,SACf,OACI,kBAAC,MAAD;IAAmB,MAAK;IAAe,WAAW,EAAO;IACpD,UAAA,EAAM;GACP,GAFK,EAAM,EAEX;GAGZ,IAAM,IAAW,EAAM,SAAS;GAChC,OACI,kBAAC,MAAD;IAAmB,MAAK;IACpB,UAAA,kBAAC,UAAD;KACI,MAAM,MAAO;MACT,EAAS,QAAQ,KAAS;KAC9B;KACA,MAAK;KACL,MAAM,IAAW,qBAAqB;KACtC,gBAAc,IAAW,EAAM,UAAU,KAAA;KACzC,UAAU,MAAgB,IAAQ,IAAI;KACtC,WAAW,EACP,EAAO,MACP,EAAM,SAAS,UAAU,EAAM,UAAU,EAAO,QAChD,MAAgB,KAAS,EAAO,MACpC;KACA,UAAU,EAAM;KAChB,eAAe,EAAa,CAAK;KACjC,oBAAoB,EAAe,CAAK;KAf5C,UAAA,CAiBK,EAAM,QAAQ,kBAAC,QAAD;MAAM,eAAA;MAAa,UAAA,EAAM;KAAW,CAAA,GAClD,EAAM,KACH;;GACR,GArBK,EAAM,EAqBX;EAEZ,CAAC;CACD,CAAA;CAGR,OACI,kBAAC,QAAD;EAAM,KAAK;EAAa,WAAW,EAAO;EAA1C,UAAA,CACK,GACA,MAAS,IAAS,kBAAC,GAAD,EAAA,UAAS,EAAa,CAAA,IAAI,EAC3C;;AAEd"}
1
+ {"version":3,"file":"DropdownMenu.js","names":["styles","DropdownMenu_module_default","placementClass","placement","PLACEMENT_GEOMETRY","MENU_OFFSET","isSelectable","entry","DropdownMenu","open","setOpen","useState","activeIndex","setActiveIndex","id","useId","rootNode","setRootNode","menuNode","setMenuNode","itemRefs","useRef","pendingFocus","selectable","items","index","focusTrigger","useCallback","close","restoreFocus","focusIndex","move","next","step","side","align","floatingStyle","useAnchorPosition","portal","useEffect","target","onDown","event","openWith","edge","handleTriggerKeyDown","trigger","handleMenuKeyDown","last","handleTriggerClick","triggerClone","handleSelect","menu","cn","className","checkbox","el","Portal"],"sources":["../../../src/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body owns placement, outside-\n * click, and the whole APG menu-button keyboard model, which has to see the entire\n * entry list to know where the next stop is. Splitting it would move the focus\n * bookkeeping away from the list it indexes into.\n */\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport type { KeyboardEvent as ReactKeyboardEvent, ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport type { AnchorAlign, AnchorSide } from \"@/components/Portal/anchor-position\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./DropdownMenu.module.css\";\n\nexport type DropdownMenuPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n\nexport type DropdownMenuEntry =\n | {\n type: \"item\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n danger?: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | {\n /**\n * An entry that carries on/off state.\n *\n * Rendered as `role=\"menuitemcheckbox\"` with `aria-checked`, which is how\n * a screen reader announces \"checked\" instead of leaving the state\n * invisible. Selecting it does **not** close the menu: toggling two\n * settings in a row is the ordinary case, and closing after the first\n * would make the second a second trip.\n */\n type: \"checkbox\";\n id: string;\n label: ReactNode;\n icon?: ReactNode;\n checked: boolean;\n disabled?: boolean;\n onSelect: () => void;\n }\n | { type: \"separator\"; id: string }\n | { type: \"label\"; id: string; label: ReactNode };\n\n/** The entry kinds a user can move focus to and activate. */\ntype SelectableEntry = Extract<DropdownMenuEntry, { type: \"item\" | \"checkbox\" }>;\n\nexport interface DropdownMenuProps {\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n onKeyDown?: (e: ReactKeyboardEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n \"aria-haspopup\"?: boolean | \"menu\";\n }>;\n items: DropdownMenuEntry[];\n placement?: DropdownMenuPlacement;\n /**\n * Render the menu in a portal, positioned against the trigger. Default `true`.\n *\n * Without it the menu is `position: absolute` inside the trigger's wrapper,\n * and any ancestor with `overflow` other than `visible` clips it. The ordinary\n * victim is the action column of a `DataTable`: its wrapper scrolls\n * horizontally, `overflow-x: auto` forces `overflow-y` to `auto` too, and the\n * menu of the last row showed one of three entries (measured in Chrome at\n * 1440 px). In a portal the menu escapes the clip, flips above the trigger\n * when there is no room below, and follows the trigger on scroll and resize.\n *\n * The portalled menu stacks at `--tempest-z-popover`, above\n * `--tempest-z-modal`, so a menu opened inside a `Modal` still paints on top.\n * `false` keeps the in-flow menu, for a container that must own the menu's\n * stacking or clipping on purpose.\n */\n portal?: boolean;\n className?: string;\n}\n\nfunction placementClass(placement: DropdownMenuPlacement): string {\n switch (placement) {\n case \"bottom-end\":\n return styles.bottomEnd;\n case \"top-start\":\n return styles.topStart;\n case \"top-end\":\n return styles.topEnd;\n case \"bottom-start\":\n default:\n return styles.bottomStart;\n }\n}\n\nconst PLACEMENT_GEOMETRY: Record<DropdownMenuPlacement, [AnchorSide, AnchorAlign]> = {\n \"bottom-start\": [\"bottom\", \"start\"],\n \"bottom-end\": [\"bottom\", \"end\"],\n \"top-start\": [\"top\", \"start\"],\n \"top-end\": [\"top\", \"end\"],\n};\n\n/** Gap between trigger and menu, in px — the in-flow CSS uses the same 4 px. */\nconst MENU_OFFSET = 4;\n\n/** Whether an entry can take focus — an item or checkbox that is not disabled. */\nfunction isSelectable(entry: DropdownMenuEntry): entry is SelectableEntry {\n return (entry.type === \"item\" || entry.type === \"checkbox\") && !entry.disabled;\n}\n\n/**\n * Dropdown menu — a list of actions anchored to a trigger, following the\n * [APG menu button pattern](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/).\n *\n * `role=\"menu\"` is a promise about the keyboard, and this component keeps it:\n *\n * - `Enter`, `Space` or `ArrowDown` on the trigger opens and focuses the first\n * entry; `ArrowUp` opens and focuses the last.\n * - `ArrowUp` / `ArrowDown` move with wrap, `Home` / `End` jump to the ends.\n * - `Escape` closes and returns focus to the trigger, so the next `Tab` continues\n * from where the user was rather than from the top of the document.\n * - `Tab` closes the menu and lets the page's own tab order take over, counted\n * from the trigger: focus goes back to the trigger synchronously and the key's\n * default action then moves on from there. Without that, a portalled menu —\n * the last thing in `body` — would hand `Tab` to whatever follows it, which\n * inside a `Modal` is outside the dialog.\n * - Focus is managed: entries carry `tabIndex={-1}` and only the active one is\n * `0`, which is what stops `Tab` from walking the menu one entry at a time.\n *\n * Disabled entries, separators and labels are skipped by every movement.\n */\nexport function DropdownMenu({\n trigger,\n items,\n placement = \"bottom-start\",\n portal = true,\n className,\n}: DropdownMenuProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [menuNode, setMenuNode] = useState<HTMLUListElement | null>(null);\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n const pendingFocus = useRef<\"first\" | \"last\" | null>(null);\n\n const selectable = items\n .map((entry, index) => (isSelectable(entry) ? index : -1))\n .filter((index) => index !== -1);\n\n /**\n * Focus the trigger again.\n *\n * Found through the `aria-haspopup` this component puts on it, rather than\n * through a ref: `ref` lives in different places in React 18 and 19, and a\n * consumer's custom trigger is under no obligation to forward one. The\n * attribute is on the element either way.\n *\n * @returns Nothing.\n */\n const focusTrigger = useCallback((): void => {\n rootNode?.querySelector<HTMLElement>(\"[aria-haspopup='menu']\")?.focus();\n }, [rootNode]);\n\n const close = useCallback(\n (restoreFocus: boolean): void => {\n setOpen(false);\n setActiveIndex(-1);\n if (restoreFocus) focusTrigger();\n },\n [focusTrigger],\n );\n\n const focusIndex = useCallback((index: number): void => {\n setActiveIndex(index);\n itemRefs.current[index]?.focus();\n }, []);\n\n /**\n * Move focus to the entry `step` positions away, wrapping at both ends.\n *\n * Walks the selectable positions rather than the raw list, so separators,\n * labels and disabled entries are never a stop.\n */\n const move = (step: number): void => {\n if (selectable.length === 0) return;\n const current = selectable.indexOf(activeIndex);\n const next = (current + step + selectable.length) % selectable.length;\n focusIndex(selectable[next] ?? -1);\n };\n\n const [side, align] = PLACEMENT_GEOMETRY[placement];\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: menuNode,\n side,\n align,\n offset: MENU_OFFSET,\n enabled: portal && open,\n });\n\n /**\n * Focus the entry the opening key asked for.\n *\n * Keyed off the menu node rather than off `open` alone: in a portal the menu\n * mounts one commit after `open` flips, and an effect that ran on `open` would\n * find no entries to focus.\n */\n useEffect(() => {\n if (!open || !menuNode || pendingFocus.current === null) return;\n const target = pendingFocus.current === \"last\" ? selectable.at(-1) : selectable[0];\n pendingFocus.current = null;\n if (target !== undefined) focusIndex(target);\n }, [open, menuNode, selectable, focusIndex]);\n\n /**\n * Close on a press outside both the trigger and the menu.\n *\n * The menu is checked separately because in a portal it is not inside the\n * trigger's wrapper: testing the wrapper alone would treat a press on an entry\n * as outside and close the menu before the entry's click lands.\n */\n useEffect(() => {\n if (!open) return;\n const onDown = (event: MouseEvent): void => {\n const target = event.target as Node;\n if (rootNode?.contains(target) || menuNode?.contains(target)) return;\n close(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, close, rootNode, menuNode]);\n\n const openWith = (edge: \"first\" | \"last\"): void => {\n pendingFocus.current = edge;\n setOpen(true);\n };\n\n const handleTriggerKeyDown = (event: ReactKeyboardEvent): void => {\n trigger.props.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || (!open && (event.key === \"Enter\" || event.key === \" \"))) {\n event.preventDefault();\n openWith(\"first\");\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openWith(\"last\");\n }\n };\n\n /**\n * Keyboard model of the open menu.\n *\n * Handled on the list rather than on `window`: focus is inside the menu by\n * then, so the keys arrive here by bubbling and cannot be pre-empted by an\n * unrelated global listener — which is how the arrows used to go missing in a\n * host application.\n */\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLUListElement>): void => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n move(1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n move(-1);\n break;\n case \"Home\":\n event.preventDefault();\n if (selectable[0] !== undefined) focusIndex(selectable[0]);\n break;\n case \"End\": {\n event.preventDefault();\n const last = selectable.at(-1);\n if (last !== undefined) focusIndex(last);\n break;\n }\n case \"Escape\":\n event.preventDefault();\n close(true);\n break;\n case \"Tab\":\n close(true);\n break;\n default:\n break;\n }\n };\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n if (event.defaultPrevented) return;\n if (open) {\n close(false);\n return;\n }\n openWith(\"first\");\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n onKeyDown: handleTriggerKeyDown,\n \"aria-expanded\": open,\n \"aria-controls\": id,\n \"aria-haspopup\": \"menu\" as const,\n },\n } as ReactElement;\n\n const handleSelect = (entry: SelectableEntry): void => {\n entry.onSelect();\n if (entry.type === \"checkbox\") return;\n close(true);\n };\n\n const menu = (\n <ul\n ref={setMenuNode}\n id={id}\n role=\"menu\"\n className={cn(\n styles.menu,\n portal ? styles.portalled : placementClass(placement),\n className,\n )}\n style={floatingStyle}\n onKeyDown={handleMenuKeyDown}\n >\n {items.map((entry, index) => {\n if (entry.type === \"separator\") {\n return (\n <li\n key={entry.id}\n role=\"separator\"\n className={styles.separator}\n aria-hidden\n />\n );\n }\n if (entry.type === \"label\") {\n return (\n <li key={entry.id} role=\"presentation\" className={styles.label}>\n {entry.label}\n </li>\n );\n }\n const checkbox = entry.type === \"checkbox\";\n return (\n <li key={entry.id} role=\"none\">\n <button\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n role={checkbox ? \"menuitemcheckbox\" : \"menuitem\"}\n aria-checked={checkbox ? entry.checked : undefined}\n tabIndex={activeIndex === index ? 0 : -1}\n className={cn(\n styles.item,\n entry.type === \"item\" && entry.danger && styles.danger,\n activeIndex === index && styles.active,\n )}\n disabled={entry.disabled}\n onClick={() => handleSelect(entry)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {entry.icon && <span aria-hidden>{entry.icon}</span>}\n {entry.label}\n </button>\n </li>\n );\n })}\n </ul>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {open && (portal ? <Portal>{menu}</Portal> : menu)}\n </span>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.module.cjs","names":[],"sources":["../../../src/components/DropdownMenu/DropdownMenu.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.menu {\n position: absolute;\n z-index: var(--tempest-z-dropdown);\n min-width: 180px;\n max-width: 320px;\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n padding: var(--tempest-space-1);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n list-style: none;\n margin: 0;\n animation: tempest-menu-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.portalled {\n z-index: var(--tempest-z-popover);\n}\n\n.bottomStart {\n top: calc(100% + 4px);\n left: 0;\n}\n.bottomEnd {\n top: calc(100% + 4px);\n right: 0;\n}\n.topStart {\n bottom: calc(100% + 4px);\n left: 0;\n}\n.topEnd {\n bottom: calc(100% + 4px);\n right: 0;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n width: 100%;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n border-radius: var(--tempest-radius-sm);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: inherit;\n line-height: var(--tempest-leading-snug);\n text-align: left;\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .item:hover:not(:disabled) {\n background-color: var(--tempest-surface);\n }\n}\n\n.item:focus,\n.item.active {\n outline: none;\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n box-shadow: inset 3px 0 0 0 var(--tempest-selected-indicator);\n}\n\n.item:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.item.danger {\n color: var(--tempest-danger);\n}\n\n.separator {\n height: 1px;\n background-color: var(--tempest-border);\n margin: var(--tempest-space-1) 0;\n}\n\n.label {\n padding: var(--tempest-space-1) var(--tempest-space-3);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n letter-spacing: var(--tempest-tracking-wider);\n}\n\n@keyframes tempest-menu-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .menu {\n animation: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"DropdownMenu.module.cjs","names":["root","menu","tempestMenuIn","portalled","bottomStart","bottomEnd","topStart","topEnd","item","active","danger","separator","label","DropdownMenu_module_default"],"sources":["../../../src/components/DropdownMenu/DropdownMenu.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.menu {\n position: absolute;\n z-index: var(--tempest-z-dropdown);\n min-width: 180px;\n max-width: 320px;\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n padding: var(--tempest-space-1);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n list-style: none;\n margin: 0;\n animation: tempest-menu-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.portalled {\n z-index: var(--tempest-z-popover);\n}\n\n.bottomStart {\n top: calc(100% + 4px);\n left: 0;\n}\n.bottomEnd {\n top: calc(100% + 4px);\n right: 0;\n}\n.topStart {\n bottom: calc(100% + 4px);\n left: 0;\n}\n.topEnd {\n bottom: calc(100% + 4px);\n right: 0;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n width: 100%;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n border-radius: var(--tempest-radius-sm);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: inherit;\n line-height: var(--tempest-leading-snug);\n text-align: left;\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .item:hover:not(:disabled) {\n background-color: var(--tempest-surface);\n }\n}\n\n.item:focus,\n.item.active {\n outline: none;\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n box-shadow: inset 3px 0 0 0 var(--tempest-selected-indicator);\n}\n\n.item:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.item.danger {\n color: var(--tempest-danger);\n}\n\n.separator {\n height: 1px;\n background-color: var(--tempest-border);\n margin: var(--tempest-space-1) 0;\n}\n\n.label {\n padding: var(--tempest-space-1) var(--tempest-space-3);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n letter-spacing: var(--tempest-tracking-wider);\n}\n\n@keyframes tempest-menu-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .menu {\n animation: none;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.module.js","names":[],"sources":["../../../src/components/DropdownMenu/DropdownMenu.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.menu {\n position: absolute;\n z-index: var(--tempest-z-dropdown);\n min-width: 180px;\n max-width: 320px;\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n padding: var(--tempest-space-1);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n list-style: none;\n margin: 0;\n animation: tempest-menu-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.portalled {\n z-index: var(--tempest-z-popover);\n}\n\n.bottomStart {\n top: calc(100% + 4px);\n left: 0;\n}\n.bottomEnd {\n top: calc(100% + 4px);\n right: 0;\n}\n.topStart {\n bottom: calc(100% + 4px);\n left: 0;\n}\n.topEnd {\n bottom: calc(100% + 4px);\n right: 0;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n width: 100%;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n border-radius: var(--tempest-radius-sm);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: inherit;\n line-height: var(--tempest-leading-snug);\n text-align: left;\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .item:hover:not(:disabled) {\n background-color: var(--tempest-surface);\n }\n}\n\n.item:focus,\n.item.active {\n outline: none;\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n box-shadow: inset 3px 0 0 0 var(--tempest-selected-indicator);\n}\n\n.item:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.item.danger {\n color: var(--tempest-danger);\n}\n\n.separator {\n height: 1px;\n background-color: var(--tempest-border);\n margin: var(--tempest-space-1) 0;\n}\n\n.label {\n padding: var(--tempest-space-1) var(--tempest-space-3);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n letter-spacing: var(--tempest-tracking-wider);\n}\n\n@keyframes tempest-menu-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .menu {\n animation: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"DropdownMenu.module.js","names":["root","menu","tempestMenuIn","portalled","bottomStart","bottomEnd","topStart","topEnd","item","active","danger","separator","label","DropdownMenu_module_default"],"sources":["../../../src/components/DropdownMenu/DropdownMenu.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.menu {\n position: absolute;\n z-index: var(--tempest-z-dropdown);\n min-width: 180px;\n max-width: 320px;\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n padding: var(--tempest-space-1);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n list-style: none;\n margin: 0;\n animation: tempest-menu-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.portalled {\n z-index: var(--tempest-z-popover);\n}\n\n.bottomStart {\n top: calc(100% + 4px);\n left: 0;\n}\n.bottomEnd {\n top: calc(100% + 4px);\n right: 0;\n}\n.topStart {\n bottom: calc(100% + 4px);\n left: 0;\n}\n.topEnd {\n bottom: calc(100% + 4px);\n right: 0;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--tempest-space-2);\n width: 100%;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n border-radius: var(--tempest-radius-sm);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: inherit;\n line-height: var(--tempest-leading-snug);\n text-align: left;\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .item:hover:not(:disabled) {\n background-color: var(--tempest-surface);\n }\n}\n\n.item:focus,\n.item.active {\n outline: none;\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n box-shadow: inset 3px 0 0 0 var(--tempest-selected-indicator);\n}\n\n.item:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.item.danger {\n color: var(--tempest-danger);\n}\n\n.separator {\n height: 1px;\n background-color: var(--tempest-border);\n margin: var(--tempest-space-1) 0;\n}\n\n.label {\n padding: var(--tempest-space-1) var(--tempest-space-3);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text-muted);\n text-transform: uppercase;\n letter-spacing: var(--tempest-tracking-wider);\n}\n\n@keyframes tempest-menu-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .menu {\n animation: none;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.cjs","names":[],"sources":["../../../src/components/Dropzone/Dropzone.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — accept, multiple and maxSize are\n * validation the component must apply before it can call onDrop or onReject, and\n * drag state, keyboard activation and the hidden input all live in the body because\n * they resolve to the same file list.\n */\nimport { useRef, useState } from \"react\";\nimport type { DragEvent, KeyboardEvent, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Dropzone.module.css\";\n\n/** Props for {@link Dropzone}. */\nexport interface DropzoneProps {\n /** Called with the accepted files after a drop or file-dialog selection. */\n onDrop: (files: File[]) => void;\n /** `accept` attribute forwarded to the hidden file input. */\n accept?: string;\n /** Allow selecting/dropping multiple files. Default `true`. */\n multiple?: boolean;\n /** Disable interaction. */\n disabled?: boolean;\n /** Maximum file size in bytes; larger files are filtered out. */\n maxSize?: number;\n /** Called with files rejected by `maxSize`. */\n onReject?: (files: File[]) => void;\n /** Custom inner content. Falls back to a default prompt. */\n children?: ReactNode;\n /** Extra class applied to the drop area. */\n className?: string;\n}\n\n/**\n * Drag-and-drop file area with a hidden file input. Clickable and keyboard\n * focusable; filters by `maxSize` before calling `onDrop`.\n *\n * @example\n * <Dropzone accept=\"image/*\" maxSize={5 * 1024 * 1024} onDrop={setFiles}>\n * Solte imagens aqui ou clique para selecionar\n * </Dropzone>\n */\nexport function Dropzone({\n onDrop,\n accept,\n multiple = true,\n disabled = false,\n maxSize,\n onReject,\n children,\n className,\n}: DropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const handleFiles = (fileList: FileList | null): void => {\n if (!fileList || fileList.length === 0) return;\n const all = Array.from(fileList);\n const limited = multiple ? all : all.slice(0, 1);\n\n if (maxSize === undefined) {\n onDrop(limited);\n return;\n }\n\n const accepted: File[] = [];\n const rejected: File[] = [];\n for (const file of limited) {\n if (file.size > maxSize) rejected.push(file);\n else accepted.push(file);\n }\n if (rejected.length > 0) onReject?.(rejected);\n if (accepted.length > 0) onDrop(accepted);\n };\n\n const openDialog = (): void => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleDragEnter = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n if (disabled) return;\n handleFiles(event.dataTransfer.files);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openDialog();\n }\n };\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n styles.zone,\n isDragging && styles.dragging,\n disabled && styles.disabled,\n className,\n )}\n onClick={openDialog}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className={styles.input}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => {\n handleFiles(event.target.files);\n event.target.value = \"\";\n }}\n />\n {children ?? (\n <span className={styles.prompt}>\n Arraste arquivos aqui ou clique para selecionar\n </span>\n )}\n </div>\n );\n}\n"],"mappings":"+HAwCA,SAAgB,EAAS,CACrB,SACA,SACA,WAAW,GACX,WAAW,GACX,UACA,WACA,WACA,aACc,CACd,IAAM,GAAA,EAAW,EAAA,OAAA,CAAyB,IAAI,EACxC,CAAC,EAAY,IAAA,EAAiB,EAAA,SAAA,CAAS,EAAK,EAE5C,EAAe,GAAoC,CACrD,GAAI,CAAC,GAAY,EAAS,SAAW,EAAG,OACxC,IAAM,EAAM,MAAM,KAAK,CAAQ,EACzB,EAAU,EAAW,EAAM,EAAI,MAAM,EAAG,CAAC,EAE/C,GAAI,IAAY,IAAA,GAAW,CACvB,EAAO,CAAO,EACd,MACJ,CAEA,IAAM,EAAmB,CAAC,EACpB,EAAmB,CAAC,EAC1B,IAAK,IAAM,KAAQ,EACX,EAAK,KAAO,EAAS,EAAS,KAAK,CAAI,EACtC,EAAS,KAAK,CAAI,EAEvB,EAAS,OAAS,GAAG,IAAW,CAAQ,EACxC,EAAS,OAAS,GAAG,EAAO,CAAQ,CAC5C,EAEM,MAAyB,CACvB,GACJ,EAAS,SAAS,MAAM,CAC5B,EA+BA,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CACI,KAAK,SACL,SAAU,EAAW,GAAK,EAC1B,gBAAe,GAAY,IAAA,GAC3B,UAAW,EAAA,GACP,EAAA,QAAO,KACP,GAAc,EAAA,QAAO,SACrB,GAAY,EAAA,QAAO,SACnB,CACJ,EACA,QAAS,EACT,UAnBe,GAA+C,EAC9D,EAAM,MAAQ,SAAW,EAAM,MAAQ,OACvC,EAAM,eAAe,EACrB,EAAW,EAEnB,EAeQ,YA1CiB,GAA2C,CAChE,EAAM,eAAe,EACjB,IACJ,EAAc,EAAI,CACtB,EAuCQ,WArCgB,GAA2C,CAC/D,EAAM,eAAe,CACzB,EAoCQ,YAlCiB,GAA2C,CAChE,EAAM,eAAe,EACrB,EAAc,EAAK,CACvB,EAgCQ,OA9BY,GAA2C,CAC3D,EAAM,eAAe,EACrB,EAAc,EAAK,EACf,IACJ,EAAY,EAAM,aAAa,KAAK,CACxC,EAUI,SAAA,EAiBI,EAAA,EAAA,IAAA,CAAC,QAAD,CACI,IAAK,EACL,KAAK,OACL,UAAW,EAAA,QAAO,MACV,SACE,WACA,WACV,SAAW,GAAU,CACjB,EAAY,EAAM,OAAO,KAAK,EAC9B,EAAM,OAAO,MAAQ,EACzB,CACH,CAAA,EACA,IACG,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,OAAQ,SAAA,iDAE1B,CAAA,CAET,GAEb"}
1
+ {"version":3,"file":"Dropzone.cjs","names":["useRef","useState","cn","styles","require_cn","require_Dropzone_module","react","react_jsx_runtime","Dropzone","inputRef","isDragging","setIsDragging","handleFiles","fileList","all","limited","multiple","maxSize","onDrop","accepted","rejected","file","onReject","openDialog","disabled","className","event","children"],"sources":["../../../src/components/Dropzone/Dropzone.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — accept, multiple and maxSize are\n * validation the component must apply before it can call onDrop or onReject, and\n * drag state, keyboard activation and the hidden input all live in the body because\n * they resolve to the same file list.\n */\nimport { useRef, useState } from \"react\";\nimport type { DragEvent, KeyboardEvent, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Dropzone.module.css\";\n\n/** Props for {@link Dropzone}. */\nexport interface DropzoneProps {\n /** Called with the accepted files after a drop or file-dialog selection. */\n onDrop: (files: File[]) => void;\n /** `accept` attribute forwarded to the hidden file input. */\n accept?: string;\n /** Allow selecting/dropping multiple files. Default `true`. */\n multiple?: boolean;\n /** Disable interaction. */\n disabled?: boolean;\n /** Maximum file size in bytes; larger files are filtered out. */\n maxSize?: number;\n /** Called with files rejected by `maxSize`. */\n onReject?: (files: File[]) => void;\n /** Custom inner content. Falls back to a default prompt. */\n children?: ReactNode;\n /** Extra class applied to the drop area. */\n className?: string;\n}\n\n/**\n * Drag-and-drop file area with a hidden file input. Clickable and keyboard\n * focusable; filters by `maxSize` before calling `onDrop`.\n *\n * @example\n * <Dropzone accept=\"image/*\" maxSize={5 * 1024 * 1024} onDrop={setFiles}>\n * Solte imagens aqui ou clique para selecionar\n * </Dropzone>\n */\nexport function Dropzone({\n onDrop,\n accept,\n multiple = true,\n disabled = false,\n maxSize,\n onReject,\n children,\n className,\n}: DropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const handleFiles = (fileList: FileList | null): void => {\n if (!fileList || fileList.length === 0) return;\n const all = Array.from(fileList);\n const limited = multiple ? all : all.slice(0, 1);\n\n if (maxSize === undefined) {\n onDrop(limited);\n return;\n }\n\n const accepted: File[] = [];\n const rejected: File[] = [];\n for (const file of limited) {\n if (file.size > maxSize) rejected.push(file);\n else accepted.push(file);\n }\n if (rejected.length > 0) onReject?.(rejected);\n if (accepted.length > 0) onDrop(accepted);\n };\n\n const openDialog = (): void => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleDragEnter = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n if (disabled) return;\n handleFiles(event.dataTransfer.files);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openDialog();\n }\n };\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n styles.zone,\n isDragging && styles.dragging,\n disabled && styles.disabled,\n className,\n )}\n onClick={openDialog}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className={styles.input}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => {\n handleFiles(event.target.files);\n event.target.value = \"\";\n }}\n />\n {children ?? (\n <span className={styles.prompt}>\n Arraste arquivos aqui ou clique para selecionar\n </span>\n )}\n </div>\n );\n}\n"],"mappings":"A,+HAwCA,SAAgBQ,EAAS,CACrB,SACA,SACA,WAAW,GACX,WAAW,GACX,UACA,WACA,WACA,aACc,CACd,IAAMC,GAAA,EAAWT,EAAAA,OAAAA,CAAyB,IAAI,EACxC,CAACU,EAAYC,IAAA,EAAiBV,EAAAA,SAAAA,CAAS,EAAK,EAE5CW,EAAe,GAAoC,CACrD,GAAI,CAACC,GAAYA,EAAS,SAAW,EAAG,OACxC,IAAMC,EAAM,MAAM,KAAKD,CAAQ,EACzBE,EAAUC,EAAWF,EAAMA,EAAI,MAAM,EAAG,CAAC,EAE/C,GAAIG,IAAY,IAAA,GAAW,CACvBC,EAAOH,CAAO,EACd,MACJ,CAEA,IAAMI,EAAmB,CAAC,EACpBC,EAAmB,CAAC,EAC1B,IAAK,IAAMC,KAAQN,EACXM,EAAK,KAAOJ,EAASG,EAAS,KAAKC,CAAI,EACtCF,EAAS,KAAKE,CAAI,EAEvBD,EAAS,OAAS,GAAGE,IAAWF,CAAQ,EACxCD,EAAS,OAAS,GAAGD,EAAOC,CAAQ,CAC5C,EAEMI,MAAyB,CACvBC,GACJf,EAAS,SAAS,MAAM,CAC5B,EA+BA,OACI,EAAAF,EAAA,KAAA,CAAC,MAAD,CACI,KAAK,SACL,SAAUiB,EAAW,GAAK,EAC1B,gBAAeA,GAAY,IAAA,GAC3B,UAAWtB,EAAAA,GACPC,EAAAA,QAAO,KACPO,GAAcP,EAAAA,QAAO,SACrBqB,GAAYrB,EAAAA,QAAO,SACnBsB,CACJ,EACA,QAASF,EACT,UAnBe,GAA+C,EAC9DG,EAAM,MAAQ,SAAWA,EAAM,MAAQ,OACvCA,EAAM,eAAe,EACrBH,EAAW,EAEnB,EAeQ,YA1CiB,GAA2C,CAChEG,EAAM,eAAe,EACjB,IACJf,EAAc,EAAI,CACtB,EAuCQ,WArCgB,GAA2C,CAC/De,EAAM,eAAe,CACzB,EAoCQ,YAlCiB,GAA2C,CAChEA,EAAM,eAAe,EACrBf,EAAc,EAAK,CACvB,EAgCQ,OA9BY,GAA2C,CAC3De,EAAM,eAAe,EACrBf,EAAc,EAAK,EACf,IACJC,EAAYc,EAAM,aAAa,KAAK,CACxC,EAUI,SAAA,EAiBI,EAAAnB,EAAA,IAAA,CAAC,QAAD,CACI,IAAKE,EACL,KAAK,OACL,UAAWN,EAAAA,QAAO,MACV,SACE,WACA,WACV,SAAW,GAAU,CACjBS,EAAYc,EAAM,OAAO,KAAK,EAC9B,EAAM,OAAO,MAAQ,EACzB,CACH,CAAA,EACAC,IACG,EAAApB,EAAA,IAAA,CAAC,OAAD,CAAM,UAAWJ,EAAAA,QAAO,OAAQ,SAAA,iDAE1B,CAAA,CAET,C,EAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.js","names":[],"sources":["../../../src/components/Dropzone/Dropzone.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — accept, multiple and maxSize are\n * validation the component must apply before it can call onDrop or onReject, and\n * drag state, keyboard activation and the hidden input all live in the body because\n * they resolve to the same file list.\n */\nimport { useRef, useState } from \"react\";\nimport type { DragEvent, KeyboardEvent, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Dropzone.module.css\";\n\n/** Props for {@link Dropzone}. */\nexport interface DropzoneProps {\n /** Called with the accepted files after a drop or file-dialog selection. */\n onDrop: (files: File[]) => void;\n /** `accept` attribute forwarded to the hidden file input. */\n accept?: string;\n /** Allow selecting/dropping multiple files. Default `true`. */\n multiple?: boolean;\n /** Disable interaction. */\n disabled?: boolean;\n /** Maximum file size in bytes; larger files are filtered out. */\n maxSize?: number;\n /** Called with files rejected by `maxSize`. */\n onReject?: (files: File[]) => void;\n /** Custom inner content. Falls back to a default prompt. */\n children?: ReactNode;\n /** Extra class applied to the drop area. */\n className?: string;\n}\n\n/**\n * Drag-and-drop file area with a hidden file input. Clickable and keyboard\n * focusable; filters by `maxSize` before calling `onDrop`.\n *\n * @example\n * <Dropzone accept=\"image/*\" maxSize={5 * 1024 * 1024} onDrop={setFiles}>\n * Solte imagens aqui ou clique para selecionar\n * </Dropzone>\n */\nexport function Dropzone({\n onDrop,\n accept,\n multiple = true,\n disabled = false,\n maxSize,\n onReject,\n children,\n className,\n}: DropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const handleFiles = (fileList: FileList | null): void => {\n if (!fileList || fileList.length === 0) return;\n const all = Array.from(fileList);\n const limited = multiple ? all : all.slice(0, 1);\n\n if (maxSize === undefined) {\n onDrop(limited);\n return;\n }\n\n const accepted: File[] = [];\n const rejected: File[] = [];\n for (const file of limited) {\n if (file.size > maxSize) rejected.push(file);\n else accepted.push(file);\n }\n if (rejected.length > 0) onReject?.(rejected);\n if (accepted.length > 0) onDrop(accepted);\n };\n\n const openDialog = (): void => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleDragEnter = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n if (disabled) return;\n handleFiles(event.dataTransfer.files);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openDialog();\n }\n };\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n styles.zone,\n isDragging && styles.dragging,\n disabled && styles.disabled,\n className,\n )}\n onClick={openDialog}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className={styles.input}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => {\n handleFiles(event.target.files);\n event.target.value = \"\";\n }}\n />\n {children ?? (\n <span className={styles.prompt}>\n Arraste arquivos aqui ou clique para selecionar\n </span>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAwCA,SAAgB,EAAS,EACrB,WACA,WACA,cAAW,IACX,cAAW,IACX,YACA,aACA,aACA,gBACc;CACd,IAAM,IAAW,EAAyB,IAAI,GACxC,CAAC,GAAY,KAAiB,EAAS,EAAK,GAE5C,KAAe,MAAoC;EACrD,IAAI,CAAC,KAAY,EAAS,WAAW,GAAG;EACxC,IAAM,IAAM,MAAM,KAAK,CAAQ,GACzB,IAAU,IAAW,IAAM,EAAI,MAAM,GAAG,CAAC;EAE/C,IAAI,MAAY,KAAA,GAAW;GACvB,EAAO,CAAO;GACd;EACJ;EAEA,IAAM,IAAmB,CAAC,GACpB,IAAmB,CAAC;EAC1B,KAAK,IAAM,KAAQ,GACf,AAAI,EAAK,OAAO,IAAS,EAAS,KAAK,CAAI,IACtC,EAAS,KAAK,CAAI;EAG3B,AADI,EAAS,SAAS,KAAG,IAAW,CAAQ,GACxC,EAAS,SAAS,KAAG,EAAO,CAAQ;CAC5C,GAEM,UAAyB;EACvB,KACJ,EAAS,SAAS,MAAM;CAC5B;CA+BA,OACI,kBAAC,OAAD;EACI,MAAK;EACL,UAAU,IAAW,KAAK;EAC1B,iBAAe,KAAY,KAAA;EAC3B,WAAW,EACP,EAAO,MACP,KAAc,EAAO,UACrB,KAAY,EAAO,UACnB,CACJ;EACA,SAAS;EACT,YAnBe,MAA+C;GAClE,CAAI,EAAM,QAAQ,WAAW,EAAM,QAAQ,SACvC,EAAM,eAAe,GACrB,EAAW;EAEnB;EAeQ,cA1CiB,MAA2C;GAChE,EAAM,eAAe,GACjB,MACJ,EAAc,EAAI;EACtB;EAuCQ,aArCgB,MAA2C;GAC/D,EAAM,eAAe;EACzB;EAoCQ,cAlCiB,MAA2C;GAEhE,AADA,EAAM,eAAe,GACrB,EAAc,EAAK;EACvB;EAgCQ,SA9BY,MAA2C;GAC3D,EAAM,eAAe,GACrB,EAAc,EAAK,GACf,MACJ,EAAY,EAAM,aAAa,KAAK;EACxC;EAUI,UAAA,CAiBI,kBAAC,SAAD;GACI,KAAK;GACL,MAAK;GACL,WAAW,EAAO;GACV;GACE;GACA;GACV,WAAW,MAAU;IAEjB,AADA,EAAY,EAAM,OAAO,KAAK,GAC9B,EAAM,OAAO,QAAQ;GACzB;EACH,CAAA,GACA,KACG,kBAAC,QAAD;GAAM,WAAW,EAAO;GAAQ,UAAA;EAE1B,CAAA,CAET;;AAEb"}
1
+ {"version":3,"file":"Dropzone.js","names":["styles","Dropzone_module_default","Dropzone","inputRef","useRef","isDragging","setIsDragging","useState","handleFiles","fileList","all","limited","multiple","maxSize","accepted","rejected","file","onReject","onDrop","openDialog","disabled","cn","className","event","children"],"sources":["../../../src/components/Dropzone/Dropzone.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count, function-lines — accept, multiple and maxSize are\n * validation the component must apply before it can call onDrop or onReject, and\n * drag state, keyboard activation and the hidden input all live in the body because\n * they resolve to the same file list.\n */\nimport { useRef, useState } from \"react\";\nimport type { DragEvent, KeyboardEvent, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Dropzone.module.css\";\n\n/** Props for {@link Dropzone}. */\nexport interface DropzoneProps {\n /** Called with the accepted files after a drop or file-dialog selection. */\n onDrop: (files: File[]) => void;\n /** `accept` attribute forwarded to the hidden file input. */\n accept?: string;\n /** Allow selecting/dropping multiple files. Default `true`. */\n multiple?: boolean;\n /** Disable interaction. */\n disabled?: boolean;\n /** Maximum file size in bytes; larger files are filtered out. */\n maxSize?: number;\n /** Called with files rejected by `maxSize`. */\n onReject?: (files: File[]) => void;\n /** Custom inner content. Falls back to a default prompt. */\n children?: ReactNode;\n /** Extra class applied to the drop area. */\n className?: string;\n}\n\n/**\n * Drag-and-drop file area with a hidden file input. Clickable and keyboard\n * focusable; filters by `maxSize` before calling `onDrop`.\n *\n * @example\n * <Dropzone accept=\"image/*\" maxSize={5 * 1024 * 1024} onDrop={setFiles}>\n * Solte imagens aqui ou clique para selecionar\n * </Dropzone>\n */\nexport function Dropzone({\n onDrop,\n accept,\n multiple = true,\n disabled = false,\n maxSize,\n onReject,\n children,\n className,\n}: DropzoneProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n const handleFiles = (fileList: FileList | null): void => {\n if (!fileList || fileList.length === 0) return;\n const all = Array.from(fileList);\n const limited = multiple ? all : all.slice(0, 1);\n\n if (maxSize === undefined) {\n onDrop(limited);\n return;\n }\n\n const accepted: File[] = [];\n const rejected: File[] = [];\n for (const file of limited) {\n if (file.size > maxSize) rejected.push(file);\n else accepted.push(file);\n }\n if (rejected.length > 0) onReject?.(rejected);\n if (accepted.length > 0) onDrop(accepted);\n };\n\n const openDialog = (): void => {\n if (disabled) return;\n inputRef.current?.click();\n };\n\n const handleDragEnter = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n if (disabled) return;\n setIsDragging(true);\n };\n\n const handleDragOver = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n };\n\n const handleDragLeave = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n };\n\n const handleDrop = (event: DragEvent<HTMLDivElement>): void => {\n event.preventDefault();\n setIsDragging(false);\n if (disabled) return;\n handleFiles(event.dataTransfer.files);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openDialog();\n }\n };\n\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={cn(\n styles.zone,\n isDragging && styles.dragging,\n disabled && styles.disabled,\n className,\n )}\n onClick={openDialog}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <input\n ref={inputRef}\n type=\"file\"\n className={styles.input}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => {\n handleFiles(event.target.files);\n event.target.value = \"\";\n }}\n />\n {children ?? (\n <span className={styles.prompt}>\n Arraste arquivos aqui ou clique para selecionar\n </span>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAwCA,SAAgBE,EAAS,EACrB,WACA,WACA,cAAW,IACX,cAAW,IACX,YACA,aACA,aACA,gBACc;CACd,IAAMC,IAAWC,EAAyB,IAAI,GACxC,CAACC,GAAYC,KAAiBC,EAAS,EAAK,GAE5CC,KAAe,MAAoC;EACrD,IAAI,CAACC,KAAYA,EAAS,WAAW,GAAG;EACxC,IAAMC,IAAM,MAAM,KAAKD,CAAQ,GACzBE,IAAUC,IAAWF,IAAMA,EAAI,MAAM,GAAG,CAAC;EAE/C,IAAIG,MAAY,KAAA,GAAW;GACvB,EAAOF,CAAO;GACd;EACJ;EAEA,IAAMG,IAAmB,CAAC,GACpBC,IAAmB,CAAC;EAC1B,KAAK,IAAMC,KAAQL,GACf,AAAIK,EAAK,OAAOH,IAASE,EAAS,KAAKC,CAAI,IACtCF,EAAS,KAAKE,CAAI;EAG3B,AADID,EAAS,SAAS,KAAGE,IAAWF,CAAQ,GACxCD,EAAS,SAAS,KAAGI,EAAOJ,CAAQ;CAC5C,GAEMK,UAAyB;EAC3B,AAAIC,KACJjB,EAAS,SAAS,MAAM;CAC5B;CA+BA,OACI,kBAAC,OAAD;EACI,MAAK;EACL,UAAUiB,IAAW,KAAK;EAC1B,iBAAeA,KAAY,KAAA;EAC3B,WAAWC,EACPrB,EAAO,MACPK,KAAcL,EAAO,UACrBoB,KAAYpB,EAAO,UACnBsB,CACJ;EACA,SAASH;EACT,YAnBe,MAA+C;GAClE,CAAII,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACvCA,EAAM,eAAe,GACrBJ,EAAW;EAEnB;EAeQ,cA1CiB,MAA2C;GAEhE,AADAI,EAAM,eAAe,GACjB,MACJjB,EAAc,EAAI;EACtB;EAuCQ,aArCgB,MAA2C;GAC/D,EAAM,eAAe;EACzB;EAoCQ,cAlCiB,MAA2C;GAEhE,AADAiB,EAAM,eAAe,GACrBjB,EAAc,EAAK;EACvB;EAgCQ,SA9BY,MAA2C;GAG3D,AAFAiB,EAAM,eAAe,GACrBjB,EAAc,EAAK,GACf,MACJE,EAAYe,EAAM,aAAa,KAAK;EACxC;EAUI,UAAA,CAiBI,kBAAC,SAAD;GACI,KAAKpB;GACL,MAAK;GACL,WAAWH,EAAO;GACV;GACE;GACA;GACV,WAAW,MAAU;IAEjB,AADAQ,EAAYe,EAAM,OAAO,KAAK,GAC9B,EAAM,OAAO,QAAQ;GACzB;EACH,CAAA,GACAC,KACG,kBAAC,QAAD;GAAM,WAAWxB,EAAO;GAAQ,UAAA;EAE1B,CAAA,CAET;;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.module.cjs","names":[],"sources":["../../../src/components/Dropzone/Dropzone.module.css"],"sourcesContent":[".zone {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n min-height: 120px;\n padding: var(--tempest-space-6, 24px);\n border: 2px dashed var(--tempest-border);\n border-radius: var(--tempest-radius-lg, 12px);\n background: var(--tempest-surface);\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n border-color var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out),\n background var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n}\n\n.zone:hover,\n.zone:focus-visible {\n border-color: var(--tempest-primary);\n color: var(--tempest-text);\n}\n\n.zone:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.dragging {\n border-color: var(--tempest-primary);\n background: var(--tempest-primary-soft);\n color: var(--tempest-text);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.input {\n display: none;\n}\n\n.prompt {\n line-height: 1.4;\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Dropzone.module.cjs","names":["zone","dragging","disabled","input","prompt","Dropzone_module_default"],"sources":["../../../src/components/Dropzone/Dropzone.module.css"],"sourcesContent":[".zone {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n min-height: 120px;\n padding: var(--tempest-space-6, 24px);\n border: 2px dashed var(--tempest-border);\n border-radius: var(--tempest-radius-lg, 12px);\n background: var(--tempest-surface);\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n border-color var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out),\n background var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n}\n\n.zone:hover,\n.zone:focus-visible {\n border-color: var(--tempest-primary);\n color: var(--tempest-text);\n}\n\n.zone:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.dragging {\n border-color: var(--tempest-primary);\n background: var(--tempest-primary-soft);\n color: var(--tempest-text);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.input {\n display: none;\n}\n\n.prompt {\n line-height: 1.4;\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.module.js","names":[],"sources":["../../../src/components/Dropzone/Dropzone.module.css"],"sourcesContent":[".zone {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n min-height: 120px;\n padding: var(--tempest-space-6, 24px);\n border: 2px dashed var(--tempest-border);\n border-radius: var(--tempest-radius-lg, 12px);\n background: var(--tempest-surface);\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n border-color var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out),\n background var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n}\n\n.zone:hover,\n.zone:focus-visible {\n border-color: var(--tempest-primary);\n color: var(--tempest-text);\n}\n\n.zone:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.dragging {\n border-color: var(--tempest-primary);\n background: var(--tempest-primary-soft);\n color: var(--tempest-text);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.input {\n display: none;\n}\n\n.prompt {\n line-height: 1.4;\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Dropzone.module.js","names":["zone","dragging","disabled","input","prompt","Dropzone_module_default"],"sources":["../../../src/components/Dropzone/Dropzone.module.css"],"sourcesContent":[".zone {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n min-height: 120px;\n padding: var(--tempest-space-6, 24px);\n border: 2px dashed var(--tempest-border);\n border-radius: var(--tempest-radius-lg, 12px);\n background: var(--tempest-surface);\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-sm);\n cursor: pointer;\n transition:\n border-color var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out),\n background var(--tempest-duration-fast, 120ms) var(--tempest-ease-out, ease-out);\n}\n\n.zone:hover,\n.zone:focus-visible {\n border-color: var(--tempest-primary);\n color: var(--tempest-text);\n}\n\n.zone:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.dragging {\n border-color: var(--tempest-primary);\n background: var(--tempest-primary-soft);\n color: var(--tempest-text);\n}\n\n.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.input {\n display: none;\n}\n\n.prompt {\n line-height: 1.4;\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.cjs","names":[],"sources":["../../../src/components/EmptyState/EmptyState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\n/** Centered \"nothing here yet\" placeholder with optional icon and CTA. */\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n {icon && <div className={styles.icon}>{icon}</div>}\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n );\n}\n"],"mappings":"8GAaA,SAAgB,EAAW,CAAE,OAAM,QAAO,cAAa,SAAQ,aAA8B,CACzF,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,CAAS,EAA5C,SAAA,CACK,IAAQ,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAO,SAAA,CAAU,CAAA,GACjD,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAW,EAAA,QAAO,MAAQ,SAAA,CAAU,CAAA,EACvC,IAAe,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,YAAc,SAAA,CAAe,CAAA,EACjE,IAAU,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,OAAS,SAAA,CAAY,CAAA,CACtD,GAEb"}
1
+ {"version":3,"file":"EmptyState.cjs","names":["cn","styles","require_cn","require_EmptyState_module","react_jsx_runtime","EmptyState","className","icon","title","description","action"],"sources":["../../../src/components/EmptyState/EmptyState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\n/** Centered \"nothing here yet\" placeholder with optional icon and CTA. */\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n {icon && <div className={styles.icon}>{icon}</div>}\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n );\n}\n"],"mappings":"A,8GAaA,SAAgBK,EAAW,CAAE,OAAM,QAAO,cAAa,SAAQ,aAA8B,CACzF,OACI,EAAAD,EAAA,KAAA,CAAC,MAAD,CAAK,UAAWJ,EAAAA,GAAGC,EAAAA,QAAO,QAASK,CAAS,EAA5C,SAAA,CACKC,IAAQ,EAAAH,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWH,EAAAA,QAAO,KAAO,SAAAM,CAAU,CAAA,GACjD,EAAAH,EAAA,IAAA,CAAC,KAAD,CAAI,UAAWH,EAAAA,QAAO,MAAQ,SAAAO,CAAU,CAAA,EACvCC,IAAe,EAAAL,EAAA,IAAA,CAAC,IAAD,CAAG,UAAWH,EAAAA,QAAO,YAAc,SAAAQ,CAAe,CAAA,EACjEC,IAAU,EAAAN,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWH,EAAAA,QAAO,OAAS,SAAAS,CAAY,CAAA,CACtD,C,EAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.js","names":[],"sources":["../../../src/components/EmptyState/EmptyState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\n/** Centered \"nothing here yet\" placeholder with optional icon and CTA. */\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n {icon && <div className={styles.icon}>{icon}</div>}\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n );\n}\n"],"mappings":";;;;AAaA,SAAgB,EAAW,EAAE,SAAM,UAAO,gBAAa,WAAQ,gBAA8B;CACzF,OACI,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAO,SAAS,CAAS;EAA5C,UAAA;GACK,KAAQ,kBAAC,OAAD;IAAK,WAAW,EAAO;IAAO,UAAA;GAAU,CAAA;GACjD,kBAAC,MAAD;IAAI,WAAW,EAAO;IAAQ,UAAA;GAAU,CAAA;GACvC,KAAe,kBAAC,KAAD;IAAG,WAAW,EAAO;IAAc,UAAA;GAAe,CAAA;GACjE,KAAU,kBAAC,OAAD;IAAK,WAAW,EAAO;IAAS,UAAA;GAAY,CAAA;EACtD;;AAEb"}
1
+ {"version":3,"file":"EmptyState.js","names":["styles","EmptyState_module_default","EmptyState","cn","className","icon","title","description","action"],"sources":["../../../src/components/EmptyState/EmptyState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\n/** Centered \"nothing here yet\" placeholder with optional icon and CTA. */\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n {icon && <div className={styles.icon}>{icon}</div>}\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {action && <div className={styles.action}>{action}</div>}\n </div>\n );\n}\n"],"mappings":";;;;AAaA,SAAgBE,EAAW,EAAE,SAAM,UAAO,gBAAa,WAAQ,gBAA8B;CACzF,OACI,kBAAC,OAAD;EAAK,WAAWC,EAAGH,EAAO,SAASI,CAAS;EAA5C,UAAA;GACKC,KAAQ,kBAAC,OAAD;IAAK,WAAWL,EAAO;IAAO,UAAAK;GAAU,CAAA;GACjD,kBAAC,MAAD;IAAI,WAAWL,EAAO;IAAQ,UAAAM;GAAU,CAAA;GACvCC,KAAe,kBAAC,KAAD;IAAG,WAAWP,EAAO;IAAc,UAAAO;GAAe,CAAA;GACjEC,KAAU,kBAAC,OAAD;IAAK,WAAWR,EAAO;IAAS,UAAAQ;GAAY,CAAA;EACtD;;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.module.cjs","names":[],"sources":["../../../src/components/EmptyState/EmptyState.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-8) var(--tempest-space-4);\n text-align: center;\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-surface);\n color: var(--tempest-text-muted);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.description {\n margin: 0;\n font-size: var(--tempest-text-base);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-normal);\n max-width: 480px;\n}\n\n.action {\n margin-top: var(--tempest-space-2);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"EmptyState.module.cjs","names":["wrapper","icon","title","description","action","EmptyState_module_default"],"sources":["../../../src/components/EmptyState/EmptyState.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-8) var(--tempest-space-4);\n text-align: center;\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-surface);\n color: var(--tempest-text-muted);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.description {\n margin: 0;\n font-size: var(--tempest-text-base);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-normal);\n max-width: 480px;\n}\n\n.action {\n margin-top: var(--tempest-space-2);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.module.js","names":[],"sources":["../../../src/components/EmptyState/EmptyState.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-8) var(--tempest-space-4);\n text-align: center;\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-surface);\n color: var(--tempest-text-muted);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.description {\n margin: 0;\n font-size: var(--tempest-text-base);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-normal);\n max-width: 480px;\n}\n\n.action {\n margin-top: var(--tempest-space-2);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"EmptyState.module.js","names":["wrapper","icon","title","description","action","EmptyState_module_default"],"sources":["../../../src/components/EmptyState/EmptyState.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-8) var(--tempest-space-4);\n text-align: center;\n color: var(--tempest-text-muted);\n font-family: var(--tempest-font-sans);\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-surface);\n color: var(--tempest-text-muted);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.description {\n margin: 0;\n font-size: var(--tempest-text-base);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-normal);\n max-width: 480px;\n}\n\n.action {\n margin-top: var(--tempest-space-2);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorState.cjs","names":[],"sources":["../../../src/components/ErrorState/ErrorState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Button } from \"@/components/Button\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./ErrorState.module.css\";\n\nexport interface ErrorStateProps {\n title?: ReactNode;\n description?: ReactNode;\n onRetry?: () => void;\n retryLabel?: string;\n icon?: ReactNode;\n className?: string;\n}\n\n/** Error placeholder with optional retry CTA. Use when a request fails. */\nexport function ErrorState({\n title = \"Algo deu errado\",\n description = \"Não foi possível carregar essas informações.\",\n onRetry,\n retryLabel = \"Tentar novamente\",\n icon,\n className,\n}: ErrorStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n <div className={styles.icon}>{icon ?? <AlertIcon />}</div>\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {onRetry && (\n <div className={styles.action}>\n <Button variant=\"secondary\" onClick={onRetry}>\n {retryLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction AlertIcon() {\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 9v4m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":"gJAeA,SAAgB,EAAW,CACvB,QAAQ,kBACR,cAAc,+CACd,UACA,aAAa,mBACb,OACA,aACgB,CAChB,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,CAAS,EAA5C,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAO,SAAA,IAAQ,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,CAAA,CAAO,CAAA,GACzD,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAW,EAAA,QAAO,MAAQ,SAAA,CAAU,CAAA,EACvC,IAAe,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAW,EAAA,QAAO,YAAc,SAAA,CAAe,CAAA,EACjE,IACG,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,OACnB,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,OAAD,CAAQ,QAAQ,YAAY,QAAS,EAChC,SAAA,CACG,CAAA,CACP,CAAA,CAER,GAEb,CAEA,SAAS,GAAY,CACjB,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACjD,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CACI,EAAE,qGACF,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,OAClB,CAAA,CACA,CAAA,CAEb"}
1
+ {"version":3,"file":"ErrorState.cjs","names":["cn","styles","Button","require_cn","require_Button","require_ErrorState_module","react_jsx_runtime","ErrorState","className","icon","AlertIcon","title","description","onRetry","retryLabel"],"sources":["../../../src/components/ErrorState/ErrorState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Button } from \"@/components/Button\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./ErrorState.module.css\";\n\nexport interface ErrorStateProps {\n title?: ReactNode;\n description?: ReactNode;\n onRetry?: () => void;\n retryLabel?: string;\n icon?: ReactNode;\n className?: string;\n}\n\n/** Error placeholder with optional retry CTA. Use when a request fails. */\nexport function ErrorState({\n title = \"Algo deu errado\",\n description = \"Não foi possível carregar essas informações.\",\n onRetry,\n retryLabel = \"Tentar novamente\",\n icon,\n className,\n}: ErrorStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n <div className={styles.icon}>{icon ?? <AlertIcon />}</div>\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {onRetry && (\n <div className={styles.action}>\n <Button variant=\"secondary\" onClick={onRetry}>\n {retryLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction AlertIcon() {\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 9v4m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":"A,gJAeA,SAAgBO,EAAW,CACvB,QAAQ,kBACR,cAAc,+CACd,UACA,aAAa,mBACb,OACA,aACgB,CAChB,OACI,EAAAD,EAAA,KAAA,CAAC,MAAD,CAAK,UAAWN,EAAAA,GAAGC,EAAAA,QAAO,QAASO,CAAS,EAA5C,SAAA,EACI,EAAAF,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWL,EAAAA,QAAO,KAAO,SAAAQ,IAAQ,EAAAH,EAAA,IAAA,CAACI,EAAD,CAAY,CAAA,CAAO,CAAA,GACzD,EAAAJ,EAAA,IAAA,CAAC,KAAD,CAAI,UAAWL,EAAAA,QAAO,MAAQ,SAAAU,CAAU,CAAA,EACvCC,IAAe,EAAAN,EAAA,IAAA,CAAC,IAAD,CAAG,UAAWL,EAAAA,QAAO,YAAc,SAAAW,CAAe,CAAA,EACjEC,IACG,EAAAP,EAAA,IAAA,CAAC,MAAD,CAAK,UAAWL,EAAAA,QAAO,OACnB,UAAA,EAAAK,EAAA,IAAA,CAACJ,EAAAA,OAAD,CAAQ,QAAQ,YAAY,QAASW,EAChC,SAAAC,CACG,CAAA,CACP,CAAA,CAER,C,EAEb,CAEA,SAASJ,GAAY,CACjB,OACI,EAAAJ,EAAA,IAAA,CAAC,MAAD,CAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACjD,UAAA,EAAAA,EAAA,IAAA,CAAC,OAAD,CACI,EAAE,qGACF,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,OAClB,CAAA,CACA,CAAA,CAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorState.js","names":[],"sources":["../../../src/components/ErrorState/ErrorState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Button } from \"@/components/Button\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./ErrorState.module.css\";\n\nexport interface ErrorStateProps {\n title?: ReactNode;\n description?: ReactNode;\n onRetry?: () => void;\n retryLabel?: string;\n icon?: ReactNode;\n className?: string;\n}\n\n/** Error placeholder with optional retry CTA. Use when a request fails. */\nexport function ErrorState({\n title = \"Algo deu errado\",\n description = \"Não foi possível carregar essas informações.\",\n onRetry,\n retryLabel = \"Tentar novamente\",\n icon,\n className,\n}: ErrorStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n <div className={styles.icon}>{icon ?? <AlertIcon />}</div>\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {onRetry && (\n <div className={styles.action}>\n <Button variant=\"secondary\" onClick={onRetry}>\n {retryLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction AlertIcon() {\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 9v4m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":";;;;;AAeA,SAAgB,EAAW,EACvB,WAAQ,mBACR,iBAAc,gDACd,YACA,gBAAa,oBACb,SACA,gBACgB;CAChB,OACI,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAO,SAAS,CAAS;EAA5C,UAAA;GACI,kBAAC,OAAD;IAAK,WAAW,EAAO;IAAO,UAAA,KAAQ,kBAAC,GAAD,CAAY,CAAA;GAAO,CAAA;GACzD,kBAAC,MAAD;IAAI,WAAW,EAAO;IAAQ,UAAA;GAAU,CAAA;GACvC,KAAe,kBAAC,KAAD;IAAG,WAAW,EAAO;IAAc,UAAA;GAAe,CAAA;GACjE,KACG,kBAAC,OAAD;IAAK,WAAW,EAAO;IACnB,UAAA,kBAAC,GAAD;KAAQ,SAAQ;KAAY,SAAS;KAChC,UAAA;IACG,CAAA;GACP,CAAA;EAER;;AAEb;AAEA,SAAS,IAAY;CACjB,OACI,kBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EACjD,UAAA,kBAAC,QAAD;GACI,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;EAClB,CAAA;CACA,CAAA;AAEb"}
1
+ {"version":3,"file":"ErrorState.js","names":["styles","ErrorState_module_default","ErrorState","cn","className","icon","AlertIcon","title","description","onRetry","Button","retryLabel"],"sources":["../../../src/components/ErrorState/ErrorState.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Button } from \"@/components/Button\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./ErrorState.module.css\";\n\nexport interface ErrorStateProps {\n title?: ReactNode;\n description?: ReactNode;\n onRetry?: () => void;\n retryLabel?: string;\n icon?: ReactNode;\n className?: string;\n}\n\n/** Error placeholder with optional retry CTA. Use when a request fails. */\nexport function ErrorState({\n title = \"Algo deu errado\",\n description = \"Não foi possível carregar essas informações.\",\n onRetry,\n retryLabel = \"Tentar novamente\",\n icon,\n className,\n}: ErrorStateProps) {\n return (\n <div className={cn(styles.wrapper, className)}>\n <div className={styles.icon}>{icon ?? <AlertIcon />}</div>\n <h4 className={styles.title}>{title}</h4>\n {description && <p className={styles.description}>{description}</p>}\n {onRetry && (\n <div className={styles.action}>\n <Button variant=\"secondary\" onClick={onRetry}>\n {retryLabel}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction AlertIcon() {\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M12 9v4m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n"],"mappings":";;;;;AAeA,SAAgBE,EAAW,EACvB,WAAQ,mBACR,iBAAc,gDACd,YACA,gBAAa,oBACb,SACA,gBACgB;CAChB,OACI,kBAAC,OAAD;EAAK,WAAWC,EAAGH,EAAO,SAASI,CAAS;EAA5C,UAAA;GACI,kBAAC,OAAD;IAAK,WAAWJ,EAAO;IAAO,UAAAK,KAAQ,kBAACC,GAAD,CAAY,CAAA;GAAO,CAAA;GACzD,kBAAC,MAAD;IAAI,WAAWN,EAAO;IAAQ,UAAAO;GAAU,CAAA;GACvCC,KAAe,kBAAC,KAAD;IAAG,WAAWR,EAAO;IAAc,UAAAQ;GAAe,CAAA;GACjEC,KACG,kBAAC,OAAD;IAAK,WAAWT,EAAO;IACnB,UAAA,kBAACU,GAAD;KAAQ,SAAQ;KAAY,SAASD;KAChC,UAAAE;IACG,CAAA;GACP,CAAA;EAER;;AAEb;AAEA,SAASL,IAAY;CACjB,OACI,kBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EACjD,UAAA,kBAAC,QAAD;GACI,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;EAClB,CAAA;CACA,CAAA;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorState.module.cjs","names":[],"sources":["../../../src/components/ErrorState/ErrorState.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-8) var(--tempest-space-4);\n text-align: center;\n font-family: var(--tempest-font-sans);\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-danger-bg);\n color: var(--tempest-danger);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.description {\n margin: 0;\n font-size: var(--tempest-text-base);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-normal);\n max-width: 480px;\n}\n\n.action {\n margin-top: var(--tempest-space-2);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"ErrorState.module.cjs","names":["wrapper","icon","title","description","action","ErrorState_module_default"],"sources":["../../../src/components/ErrorState/ErrorState.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--tempest-space-3);\n padding: var(--tempest-space-8) var(--tempest-space-4);\n text-align: center;\n font-family: var(--tempest-font-sans);\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-danger-bg);\n color: var(--tempest-danger);\n}\n\n.title {\n margin: 0;\n font-size: var(--tempest-text-lg);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.description {\n margin: 0;\n font-size: var(--tempest-text-base);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-normal);\n max-width: 480px;\n}\n\n.action {\n margin-top: var(--tempest-space-2);\n}\n"],"mappings":";"}