tempest-react-sdk 0.78.0 → 0.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1603) hide show
  1. package/README.md +6 -6
  2. package/bin/lib/openapi/generate.hostile.test.mjs +45 -4
  3. package/bin/lib/openapi/generate.mjs +303 -88
  4. package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
  5. package/bin/lib/openapi/generate.test.mjs +462 -1
  6. package/bin/lib/openapi/schema-to-zod.mjs +4 -3
  7. package/dist/access/Can.cjs.map +1 -1
  8. package/dist/access/Can.js.map +1 -1
  9. package/dist/access/access-control-context.cjs.map +1 -1
  10. package/dist/access/access-control-context.js.map +1 -1
  11. package/dist/access/create-role-access-control.cjs.map +1 -1
  12. package/dist/access/create-role-access-control.js.map +1 -1
  13. package/dist/access/permissions-from-token.cjs.map +1 -1
  14. package/dist/access/permissions-from-token.js.map +1 -1
  15. package/dist/access/use-can.cjs.map +1 -1
  16. package/dist/access/use-can.js.map +1 -1
  17. package/dist/app/AppProviders.cjs.map +1 -1
  18. package/dist/app/AppProviders.js.map +1 -1
  19. package/dist/audio/audio-bus.cjs.map +1 -1
  20. package/dist/audio/audio-bus.js.map +1 -1
  21. package/dist/audio/audio-output.cjs.map +1 -1
  22. package/dist/audio/audio-output.js.map +1 -1
  23. package/dist/audio/audio-player.cjs.map +1 -1
  24. package/dist/audio/audio-player.js.map +1 -1
  25. package/dist/audio/audio-recorder.cjs.map +1 -1
  26. package/dist/audio/audio-recorder.js.map +1 -1
  27. package/dist/audio/duration.cjs.map +1 -1
  28. package/dist/audio/duration.js.map +1 -1
  29. package/dist/audio/level-meter.cjs.map +1 -1
  30. package/dist/audio/level-meter.js.map +1 -1
  31. package/dist/audio/media-access.cjs.map +1 -1
  32. package/dist/audio/media-access.js.map +1 -1
  33. package/dist/audio/noise-floor.cjs.map +1 -1
  34. package/dist/audio/noise-floor.js.map +1 -1
  35. package/dist/audio/sfx-pool.cjs.map +1 -1
  36. package/dist/audio/sfx-pool.js.map +1 -1
  37. package/dist/audio/use-audio-bus.cjs.map +1 -1
  38. package/dist/audio/use-audio-bus.js.map +1 -1
  39. package/dist/audio/use-audio-recorder.cjs.map +1 -1
  40. package/dist/audio/use-audio-recorder.js.map +1 -1
  41. package/dist/audio/use-audio.cjs.map +1 -1
  42. package/dist/audio/use-audio.js.map +1 -1
  43. package/dist/audio/use-microphone.cjs +1 -1
  44. package/dist/audio/use-microphone.cjs.map +1 -1
  45. package/dist/audio/use-microphone.js +1 -5
  46. package/dist/audio/use-microphone.js.map +1 -1
  47. package/dist/audio/use-sfx-pool.cjs.map +1 -1
  48. package/dist/audio/use-sfx-pool.js.map +1 -1
  49. package/dist/audio/voice-activity.cjs.map +1 -1
  50. package/dist/audio/voice-activity.js.map +1 -1
  51. package/dist/audio/voice-chain-stages.cjs.map +1 -1
  52. package/dist/audio/voice-chain-stages.js.map +1 -1
  53. package/dist/audio/voice-chain.cjs.map +1 -1
  54. package/dist/audio/voice-chain.js.map +1 -1
  55. package/dist/audio/wav.cjs.map +1 -1
  56. package/dist/audio/wav.js.map +1 -1
  57. package/dist/auth/AuthGuard.cjs.map +1 -1
  58. package/dist/auth/AuthGuard.js.map +1 -1
  59. package/dist/auth/create-auth-store.cjs.map +1 -1
  60. package/dist/auth/create-auth-store.js.map +1 -1
  61. package/dist/auth/create-tempest-auth.cjs +1 -1
  62. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  63. package/dist/auth/create-tempest-auth.js +1 -3
  64. package/dist/auth/create-tempest-auth.js.map +1 -1
  65. package/dist/auth/jwt.cjs.map +1 -1
  66. package/dist/auth/jwt.js.map +1 -1
  67. package/dist/auth/lazy-with-retry.cjs.map +1 -1
  68. package/dist/auth/lazy-with-retry.js.map +1 -1
  69. package/dist/auth/passkey.cjs.map +1 -1
  70. package/dist/auth/passkey.js.map +1 -1
  71. package/dist/auth/refresh-queue.cjs.map +1 -1
  72. package/dist/auth/refresh-queue.js.map +1 -1
  73. package/dist/auth/use-passkey.cjs +1 -1
  74. package/dist/auth/use-passkey.cjs.map +1 -1
  75. package/dist/auth/use-passkey.js +1 -1
  76. package/dist/auth/use-passkey.js.map +1 -1
  77. package/dist/br/BrazilMap.cjs.map +1 -1
  78. package/dist/br/BrazilMap.js.map +1 -1
  79. package/dist/br/BrazilMap.module.cjs.map +1 -1
  80. package/dist/br/BrazilMap.module.js.map +1 -1
  81. package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
  82. package/dist/br/BrazilStateCitySelect.js.map +1 -1
  83. package/dist/br/BrazilStateMap.cjs.map +1 -1
  84. package/dist/br/BrazilStateMap.js.map +1 -1
  85. package/dist/br/MapLegend.cjs.map +1 -1
  86. package/dist/br/MapLegend.js.map +1 -1
  87. package/dist/br/MapLegend.module.cjs.map +1 -1
  88. package/dist/br/MapLegend.module.js.map +1 -1
  89. package/dist/br/MapMarkers.cjs.map +1 -1
  90. package/dist/br/MapMarkers.js.map +1 -1
  91. package/dist/br/MapTooltip.cjs.map +1 -1
  92. package/dist/br/MapTooltip.js.map +1 -1
  93. package/dist/br/MunicipalitySearch.cjs +1 -1
  94. package/dist/br/MunicipalitySearch.cjs.map +1 -1
  95. package/dist/br/MunicipalitySearch.js +2 -5
  96. package/dist/br/MunicipalitySearch.js.map +1 -1
  97. package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
  98. package/dist/br/MunicipalitySearch.module.js.map +1 -1
  99. package/dist/br/PixQRCode.cjs.map +1 -1
  100. package/dist/br/PixQRCode.js.map +1 -1
  101. package/dist/br/PixQRCode.module.cjs.map +1 -1
  102. package/dist/br/PixQRCode.module.js.map +1 -1
  103. package/dist/br/boleto.cjs.map +1 -1
  104. package/dist/br/boleto.js.map +1 -1
  105. package/dist/br/br-geo.cjs.map +1 -1
  106. package/dist/br/br-geo.js.map +1 -1
  107. package/dist/br/data/br-centroids.cjs.map +1 -1
  108. package/dist/br/data/br-centroids.js.map +1 -1
  109. package/dist/br/data/br-locations.cjs.map +1 -1
  110. package/dist/br/data/br-locations.js.map +1 -1
  111. package/dist/br/data/br-uf-geo.cjs.map +1 -1
  112. package/dist/br/data/br-uf-geo.js.map +1 -1
  113. package/dist/br/data/mun/AC.cjs.map +1 -1
  114. package/dist/br/data/mun/AC.js.map +1 -1
  115. package/dist/br/data/mun/AL.cjs.map +1 -1
  116. package/dist/br/data/mun/AL.js.map +1 -1
  117. package/dist/br/data/mun/AM.cjs.map +1 -1
  118. package/dist/br/data/mun/AM.js.map +1 -1
  119. package/dist/br/data/mun/AP.cjs.map +1 -1
  120. package/dist/br/data/mun/AP.js.map +1 -1
  121. package/dist/br/data/mun/BA.cjs.map +1 -1
  122. package/dist/br/data/mun/BA.js.map +1 -1
  123. package/dist/br/data/mun/CE.cjs.map +1 -1
  124. package/dist/br/data/mun/CE.js.map +1 -1
  125. package/dist/br/data/mun/DF.cjs.map +1 -1
  126. package/dist/br/data/mun/DF.js.map +1 -1
  127. package/dist/br/data/mun/ES.cjs.map +1 -1
  128. package/dist/br/data/mun/ES.js.map +1 -1
  129. package/dist/br/data/mun/GO.cjs.map +1 -1
  130. package/dist/br/data/mun/GO.js.map +1 -1
  131. package/dist/br/data/mun/MA.cjs.map +1 -1
  132. package/dist/br/data/mun/MA.js.map +1 -1
  133. package/dist/br/data/mun/MG.cjs.map +1 -1
  134. package/dist/br/data/mun/MG.js.map +1 -1
  135. package/dist/br/data/mun/MS.cjs.map +1 -1
  136. package/dist/br/data/mun/MS.js.map +1 -1
  137. package/dist/br/data/mun/MT.cjs.map +1 -1
  138. package/dist/br/data/mun/MT.js.map +1 -1
  139. package/dist/br/data/mun/PA.cjs.map +1 -1
  140. package/dist/br/data/mun/PA.js.map +1 -1
  141. package/dist/br/data/mun/PB.cjs.map +1 -1
  142. package/dist/br/data/mun/PB.js.map +1 -1
  143. package/dist/br/data/mun/PE.cjs.map +1 -1
  144. package/dist/br/data/mun/PE.js.map +1 -1
  145. package/dist/br/data/mun/PI.cjs.map +1 -1
  146. package/dist/br/data/mun/PI.js.map +1 -1
  147. package/dist/br/data/mun/PR.cjs.map +1 -1
  148. package/dist/br/data/mun/PR.js.map +1 -1
  149. package/dist/br/data/mun/RJ.cjs.map +1 -1
  150. package/dist/br/data/mun/RJ.js.map +1 -1
  151. package/dist/br/data/mun/RN.cjs.map +1 -1
  152. package/dist/br/data/mun/RN.js.map +1 -1
  153. package/dist/br/data/mun/RO.cjs.map +1 -1
  154. package/dist/br/data/mun/RO.js.map +1 -1
  155. package/dist/br/data/mun/RR.cjs.map +1 -1
  156. package/dist/br/data/mun/RR.js.map +1 -1
  157. package/dist/br/data/mun/RS.cjs.map +1 -1
  158. package/dist/br/data/mun/RS.js.map +1 -1
  159. package/dist/br/data/mun/SC.cjs.map +1 -1
  160. package/dist/br/data/mun/SC.js.map +1 -1
  161. package/dist/br/data/mun/SE.cjs.map +1 -1
  162. package/dist/br/data/mun/SE.js.map +1 -1
  163. package/dist/br/data/mun/SP.cjs.map +1 -1
  164. package/dist/br/data/mun/SP.js.map +1 -1
  165. package/dist/br/data/mun/TO.cjs.map +1 -1
  166. package/dist/br/data/mun/TO.js.map +1 -1
  167. package/dist/br/geocode.cjs.map +1 -1
  168. package/dist/br/geocode.js.map +1 -1
  169. package/dist/br/holidays.cjs.map +1 -1
  170. package/dist/br/holidays.js.map +1 -1
  171. package/dist/br/locations.cjs.map +1 -1
  172. package/dist/br/locations.js.map +1 -1
  173. package/dist/br/nfe.cjs.map +1 -1
  174. package/dist/br/nfe.js.map +1 -1
  175. package/dist/br/pix.cjs +1 -1
  176. package/dist/br/pix.cjs.map +1 -1
  177. package/dist/br/pix.js +108 -74
  178. package/dist/br/pix.js.map +1 -1
  179. package/dist/br/regions.cjs.map +1 -1
  180. package/dist/br/regions.js.map +1 -1
  181. package/dist/br/scales.cjs.map +1 -1
  182. package/dist/br/scales.js.map +1 -1
  183. package/dist/br/state-geo.cjs.map +1 -1
  184. package/dist/br/state-geo.js.map +1 -1
  185. package/dist/br/svg-utils.cjs.map +1 -1
  186. package/dist/br/svg-utils.js.map +1 -1
  187. package/dist/br/use-map-hover.cjs.map +1 -1
  188. package/dist/br/use-map-hover.js.map +1 -1
  189. package/dist/br/use-map-zoom.cjs.map +1 -1
  190. package/dist/br/use-map-zoom.js.map +1 -1
  191. package/dist/br/whatsapp.cjs.map +1 -1
  192. package/dist/br/whatsapp.js.map +1 -1
  193. package/dist/br.cjs.map +1 -1
  194. package/dist/br.d.ts +6 -2
  195. package/dist/br.js.map +1 -1
  196. package/dist/capture/barcode.cjs.map +1 -1
  197. package/dist/capture/barcode.js.map +1 -1
  198. package/dist/capture/media-recorder.cjs.map +1 -1
  199. package/dist/capture/media-recorder.js.map +1 -1
  200. package/dist/capture/use-barcode-scanner.cjs.map +1 -1
  201. package/dist/capture/use-barcode-scanner.js.map +1 -1
  202. package/dist/capture/use-screen-capture.cjs +1 -1
  203. package/dist/capture/use-screen-capture.cjs.map +1 -1
  204. package/dist/capture/use-screen-capture.js +1 -7
  205. package/dist/capture/use-screen-capture.js.map +1 -1
  206. package/dist/capture/use-speech-recognition.cjs +1 -1
  207. package/dist/capture/use-speech-recognition.cjs.map +1 -1
  208. package/dist/capture/use-speech-recognition.js +35 -36
  209. package/dist/capture/use-speech-recognition.js.map +1 -1
  210. package/dist/capture/use-torch.cjs.map +1 -1
  211. package/dist/capture/use-torch.js.map +1 -1
  212. package/dist/capture/use-video-recorder.cjs.map +1 -1
  213. package/dist/capture/use-video-recorder.js.map +1 -1
  214. package/dist/capture/video-recorder.cjs.map +1 -1
  215. package/dist/capture/video-recorder.js.map +1 -1
  216. package/dist/charts/AreaChart.cjs.map +1 -1
  217. package/dist/charts/AreaChart.js.map +1 -1
  218. package/dist/charts/BarChart.cjs.map +1 -1
  219. package/dist/charts/BarChart.js.map +1 -1
  220. package/dist/charts/LineChart.cjs.map +1 -1
  221. package/dist/charts/LineChart.js.map +1 -1
  222. package/dist/charts/PieChart.cjs.map +1 -1
  223. package/dist/charts/PieChart.js.map +1 -1
  224. package/dist/charts/RadarChart.cjs.map +1 -1
  225. package/dist/charts/RadarChart.js.map +1 -1
  226. package/dist/charts/palette.cjs.map +1 -1
  227. package/dist/charts/palette.js.map +1 -1
  228. package/dist/charts/scales.cjs.map +1 -1
  229. package/dist/charts/scales.js.map +1 -1
  230. package/dist/charts/types.cjs.map +1 -1
  231. package/dist/charts/types.js.map +1 -1
  232. package/dist/charts/use-chart-colors.cjs.map +1 -1
  233. package/dist/charts/use-chart-colors.js.map +1 -1
  234. package/dist/components/AIChat/AIChat.cjs +1 -1
  235. package/dist/components/AIChat/AIChat.cjs.map +1 -1
  236. package/dist/components/AIChat/AIChat.js +1 -5
  237. package/dist/components/AIChat/AIChat.js.map +1 -1
  238. package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
  239. package/dist/components/AIChat/AIChat.module.js.map +1 -1
  240. package/dist/components/AIChat/AIChatComposer.cjs +1 -1
  241. package/dist/components/AIChat/AIChatComposer.cjs.map +1 -1
  242. package/dist/components/AIChat/AIChatComposer.js +1 -7
  243. package/dist/components/AIChat/AIChatComposer.js.map +1 -1
  244. package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
  245. package/dist/components/AIChat/AIChatTurn.js.map +1 -1
  246. package/dist/components/AIChat/ai-chat-turns.cjs.map +1 -1
  247. package/dist/components/AIChat/ai-chat-turns.js.map +1 -1
  248. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  249. package/dist/components/Accordion/Accordion.js.map +1 -1
  250. package/dist/components/Accordion/Accordion.module.cjs.map +1 -1
  251. package/dist/components/Accordion/Accordion.module.js.map +1 -1
  252. package/dist/components/Alert/Alert.cjs.map +1 -1
  253. package/dist/components/Alert/Alert.js.map +1 -1
  254. package/dist/components/Alert/Alert.module.cjs.map +1 -1
  255. package/dist/components/Alert/Alert.module.js.map +1 -1
  256. package/dist/components/AppBar/AppBar.cjs.map +1 -1
  257. package/dist/components/AppBar/AppBar.js.map +1 -1
  258. package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
  259. package/dist/components/AppBar/AppBar.module.js.map +1 -1
  260. package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
  261. package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
  262. package/dist/components/AppBar/use-sticky-body-warning.js +1 -1
  263. package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
  264. package/dist/components/AppShell/AppShell.cjs.map +1 -1
  265. package/dist/components/AppShell/AppShell.js.map +1 -1
  266. package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
  267. package/dist/components/AppShell/AppShell.module.js.map +1 -1
  268. package/dist/components/AspectRatio/AspectRatio.cjs.map +1 -1
  269. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  270. package/dist/components/AspectRatio/AspectRatio.module.cjs.map +1 -1
  271. package/dist/components/AspectRatio/AspectRatio.module.js.map +1 -1
  272. package/dist/components/AudioPlayer/AudioPlayer.cjs +1 -1
  273. package/dist/components/AudioPlayer/AudioPlayer.cjs.map +1 -1
  274. package/dist/components/AudioPlayer/AudioPlayer.js +1 -7
  275. package/dist/components/AudioPlayer/AudioPlayer.js.map +1 -1
  276. package/dist/components/AudioPlayer/AudioPlayer.module.cjs.map +1 -1
  277. package/dist/components/AudioPlayer/AudioPlayer.module.js.map +1 -1
  278. package/dist/components/AudioRecorder/AudioRecorder.cjs +1 -1
  279. package/dist/components/AudioRecorder/AudioRecorder.cjs.map +1 -1
  280. package/dist/components/AudioRecorder/AudioRecorder.js +16 -21
  281. package/dist/components/AudioRecorder/AudioRecorder.js.map +1 -1
  282. package/dist/components/AudioRecorder/AudioRecorder.module.cjs.map +1 -1
  283. package/dist/components/AudioRecorder/AudioRecorder.module.js.map +1 -1
  284. package/dist/components/Avatar/Avatar.cjs.map +1 -1
  285. package/dist/components/Avatar/Avatar.js.map +1 -1
  286. package/dist/components/Avatar/Avatar.module.cjs.map +1 -1
  287. package/dist/components/Avatar/Avatar.module.js.map +1 -1
  288. package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
  289. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  290. package/dist/components/AvatarGroup/AvatarGroup.module.cjs.map +1 -1
  291. package/dist/components/AvatarGroup/AvatarGroup.module.js.map +1 -1
  292. package/dist/components/Badge/Badge.cjs.map +1 -1
  293. package/dist/components/Badge/Badge.js.map +1 -1
  294. package/dist/components/Badge/Badge.module.cjs.map +1 -1
  295. package/dist/components/Badge/Badge.module.js.map +1 -1
  296. package/dist/components/Banner/Banner.cjs.map +1 -1
  297. package/dist/components/Banner/Banner.js.map +1 -1
  298. package/dist/components/Banner/Banner.module.cjs.map +1 -1
  299. package/dist/components/Banner/Banner.module.js.map +1 -1
  300. package/dist/components/BarList/BarList.cjs.map +1 -1
  301. package/dist/components/BarList/BarList.js.map +1 -1
  302. package/dist/components/BarList/BarList.module.cjs.map +1 -1
  303. package/dist/components/BarList/BarList.module.js.map +1 -1
  304. package/dist/components/BarList/bar-list-model.cjs.map +1 -1
  305. package/dist/components/BarList/bar-list-model.js.map +1 -1
  306. package/dist/components/BarcodeScanner/BarcodeScanner.cjs.map +1 -1
  307. package/dist/components/BarcodeScanner/BarcodeScanner.js.map +1 -1
  308. package/dist/components/BarcodeScanner/BarcodeScanner.module.cjs.map +1 -1
  309. package/dist/components/BarcodeScanner/BarcodeScanner.module.js.map +1 -1
  310. package/dist/components/BottomNavigation/BottomNavigation.cjs.map +1 -1
  311. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  312. package/dist/components/BottomNavigation/BottomNavigation.module.cjs.map +1 -1
  313. package/dist/components/BottomNavigation/BottomNavigation.module.js.map +1 -1
  314. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  315. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  316. package/dist/components/BottomSheet/BottomSheet.module.cjs.map +1 -1
  317. package/dist/components/BottomSheet/BottomSheet.module.js.map +1 -1
  318. package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
  319. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  320. package/dist/components/Breadcrumbs/Breadcrumbs.module.cjs.map +1 -1
  321. package/dist/components/Breadcrumbs/Breadcrumbs.module.js.map +1 -1
  322. package/dist/components/Button/Button.cjs.map +1 -1
  323. package/dist/components/Button/Button.js.map +1 -1
  324. package/dist/components/Button/Button.module.cjs.map +1 -1
  325. package/dist/components/Button/Button.module.js.map +1 -1
  326. package/dist/components/Button/ButtonContent.cjs.map +1 -1
  327. package/dist/components/Button/ButtonContent.js.map +1 -1
  328. package/dist/components/Button/ButtonSlot.cjs.map +1 -1
  329. package/dist/components/Button/ButtonSlot.js.map +1 -1
  330. package/dist/components/Button/button-class.cjs.map +1 -1
  331. package/dist/components/Button/button-class.js.map +1 -1
  332. package/dist/components/Button/link-rel.cjs.map +1 -1
  333. package/dist/components/Button/link-rel.js.map +1 -1
  334. package/dist/components/Button/slot.cjs.map +1 -1
  335. package/dist/components/Button/slot.js.map +1 -1
  336. package/dist/components/Calendar/Calendar.cjs.map +1 -1
  337. package/dist/components/Calendar/Calendar.js.map +1 -1
  338. package/dist/components/Calendar/Calendar.module.cjs.map +1 -1
  339. package/dist/components/Calendar/Calendar.module.js.map +1 -1
  340. package/dist/components/Card/Card.cjs.map +1 -1
  341. package/dist/components/Card/Card.js.map +1 -1
  342. package/dist/components/Card/Card.module.cjs.map +1 -1
  343. package/dist/components/Card/Card.module.js.map +1 -1
  344. package/dist/components/Carousel/Carousel.cjs.map +1 -1
  345. package/dist/components/Carousel/Carousel.js.map +1 -1
  346. package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
  347. package/dist/components/Carousel/Carousel.module.js.map +1 -1
  348. package/dist/components/Center/Center.cjs.map +1 -1
  349. package/dist/components/Center/Center.js.map +1 -1
  350. package/dist/components/Center/Center.module.cjs.map +1 -1
  351. package/dist/components/Center/Center.module.js.map +1 -1
  352. package/dist/components/Chat/Chat.cjs.map +1 -1
  353. package/dist/components/Chat/Chat.js.map +1 -1
  354. package/dist/components/Chat/Chat.module.cjs.map +1 -1
  355. package/dist/components/Chat/Chat.module.js.map +1 -1
  356. package/dist/components/Chat/ChatActionsMenu.cjs.map +1 -1
  357. package/dist/components/Chat/ChatActionsMenu.js.map +1 -1
  358. package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
  359. package/dist/components/Chat/ChatAttachments.js.map +1 -1
  360. package/dist/components/Chat/ChatBubble.cjs.map +1 -1
  361. package/dist/components/Chat/ChatBubble.js.map +1 -1
  362. package/dist/components/Chat/ChatComposer.cjs.map +1 -1
  363. package/dist/components/Chat/ChatComposer.js.map +1 -1
  364. package/dist/components/Chat/chat-groups.cjs +1 -1
  365. package/dist/components/Chat/chat-groups.cjs.map +1 -1
  366. package/dist/components/Chat/chat-groups.js +2 -6
  367. package/dist/components/Chat/chat-groups.js.map +1 -1
  368. package/dist/components/Chat/chat-receipt.cjs.map +1 -1
  369. package/dist/components/Chat/chat-receipt.js.map +1 -1
  370. package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
  371. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  372. package/dist/components/Checkbox/Checkbox.module.cjs.map +1 -1
  373. package/dist/components/Checkbox/Checkbox.module.js.map +1 -1
  374. package/dist/components/ChipInput/ChipInput.cjs +1 -1
  375. package/dist/components/ChipInput/ChipInput.cjs.map +1 -1
  376. package/dist/components/ChipInput/ChipInput.js +2 -12
  377. package/dist/components/ChipInput/ChipInput.js.map +1 -1
  378. package/dist/components/ChipInput/ChipInput.module.cjs.map +1 -1
  379. package/dist/components/ChipInput/ChipInput.module.js.map +1 -1
  380. package/dist/components/ClickOutside/ClickOutside.cjs.map +1 -1
  381. package/dist/components/ClickOutside/ClickOutside.js.map +1 -1
  382. package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
  383. package/dist/components/CodeBlock/CodeBlock.js.map +1 -1
  384. package/dist/components/CodeBlock/CodeBlock.module.cjs.map +1 -1
  385. package/dist/components/CodeBlock/CodeBlock.module.js.map +1 -1
  386. package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
  387. package/dist/components/CodeBlock/tokenize.js.map +1 -1
  388. package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
  389. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  390. package/dist/components/Collapsible/Collapsible.module.cjs.map +1 -1
  391. package/dist/components/Collapsible/Collapsible.module.js.map +1 -1
  392. package/dist/components/Combobox/Combobox.cjs.map +1 -1
  393. package/dist/components/Combobox/Combobox.js.map +1 -1
  394. package/dist/components/Combobox/Combobox.module.cjs.map +1 -1
  395. package/dist/components/Combobox/Combobox.module.js.map +1 -1
  396. package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -1
  397. package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -1
  398. package/dist/components/Command/Command.cjs +1 -1
  399. package/dist/components/Command/Command.cjs.map +1 -1
  400. package/dist/components/Command/Command.js +4 -11
  401. package/dist/components/Command/Command.js.map +1 -1
  402. package/dist/components/Command/Command.module.cjs.map +1 -1
  403. package/dist/components/Command/Command.module.js.map +1 -1
  404. package/dist/components/ConditionalWrapper/ConditionalWrapper.cjs.map +1 -1
  405. package/dist/components/ConditionalWrapper/ConditionalWrapper.js.map +1 -1
  406. package/dist/components/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  407. package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -1
  408. package/dist/components/ContextMenu/ContextMenu.cjs +1 -1
  409. package/dist/components/ContextMenu/ContextMenu.cjs.map +1 -1
  410. package/dist/components/ContextMenu/ContextMenu.js +1 -1
  411. package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
  412. package/dist/components/ContextMenu/ContextMenu.module.cjs.map +1 -1
  413. package/dist/components/ContextMenu/ContextMenu.module.js.map +1 -1
  414. package/dist/components/CopyButton/CopyButton.cjs.map +1 -1
  415. package/dist/components/CopyButton/CopyButton.js.map +1 -1
  416. package/dist/components/CopyButton/CopyButton.module.cjs.map +1 -1
  417. package/dist/components/CopyButton/CopyButton.module.js.map +1 -1
  418. package/dist/components/DataList/DataList.cjs.map +1 -1
  419. package/dist/components/DataList/DataList.js.map +1 -1
  420. package/dist/components/DataList/DataList.module.cjs.map +1 -1
  421. package/dist/components/DataList/DataList.module.js.map +1 -1
  422. package/dist/components/DataTable/DataTable.cjs +1 -1
  423. package/dist/components/DataTable/DataTable.cjs.map +1 -1
  424. package/dist/components/DataTable/DataTable.js +6 -14
  425. package/dist/components/DataTable/DataTable.js.map +1 -1
  426. package/dist/components/DataTable/DataTable.module.cjs.map +1 -1
  427. package/dist/components/DataTable/DataTable.module.js.map +1 -1
  428. package/dist/components/DataTable/EditableCell.cjs +1 -1
  429. package/dist/components/DataTable/EditableCell.cjs.map +1 -1
  430. package/dist/components/DataTable/EditableCell.js +1 -9
  431. package/dist/components/DataTable/EditableCell.js.map +1 -1
  432. package/dist/components/DataTable/LoadingRows.cjs.map +1 -1
  433. package/dist/components/DataTable/LoadingRows.js.map +1 -1
  434. package/dist/components/DataTable/edit-labels.cjs.map +1 -1
  435. package/dist/components/DataTable/edit-labels.js.map +1 -1
  436. package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
  437. package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
  438. package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
  439. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  440. package/dist/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
  441. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  442. package/dist/components/DateRangePicker/DateRangePicker.module.cjs.map +1 -1
  443. package/dist/components/DateRangePicker/DateRangePicker.module.js.map +1 -1
  444. package/dist/components/DescriptionList/DescriptionList.cjs.map +1 -1
  445. package/dist/components/DescriptionList/DescriptionList.js.map +1 -1
  446. package/dist/components/DescriptionList/DescriptionList.module.cjs.map +1 -1
  447. package/dist/components/DescriptionList/DescriptionList.module.js.map +1 -1
  448. package/dist/components/Divider/Divider.cjs.map +1 -1
  449. package/dist/components/Divider/Divider.js.map +1 -1
  450. package/dist/components/Divider/Divider.module.cjs.map +1 -1
  451. package/dist/components/Divider/Divider.module.js.map +1 -1
  452. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  453. package/dist/components/Drawer/Drawer.js.map +1 -1
  454. package/dist/components/Drawer/Drawer.module.cjs.map +1 -1
  455. package/dist/components/Drawer/Drawer.module.js.map +1 -1
  456. package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
  457. package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  458. package/dist/components/DropdownMenu/DropdownMenu.js +2 -14
  459. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  460. package/dist/components/DropdownMenu/DropdownMenu.module.cjs.map +1 -1
  461. package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -1
  462. package/dist/components/Dropzone/Dropzone.cjs.map +1 -1
  463. package/dist/components/Dropzone/Dropzone.js.map +1 -1
  464. package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
  465. package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
  466. package/dist/components/EmptyState/EmptyState.cjs.map +1 -1
  467. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  468. package/dist/components/EmptyState/EmptyState.module.cjs.map +1 -1
  469. package/dist/components/EmptyState/EmptyState.module.js.map +1 -1
  470. package/dist/components/ErrorState/ErrorState.cjs.map +1 -1
  471. package/dist/components/ErrorState/ErrorState.js.map +1 -1
  472. package/dist/components/ErrorState/ErrorState.module.cjs.map +1 -1
  473. package/dist/components/ErrorState/ErrorState.module.js.map +1 -1
  474. package/dist/components/ErrorText/ErrorText.cjs.map +1 -1
  475. package/dist/components/ErrorText/ErrorText.js.map +1 -1
  476. package/dist/components/ErrorText/ErrorText.module.cjs.map +1 -1
  477. package/dist/components/ErrorText/ErrorText.module.js.map +1 -1
  478. package/dist/components/FileUpload/FileUpload.cjs +1 -1
  479. package/dist/components/FileUpload/FileUpload.cjs.map +1 -1
  480. package/dist/components/FileUpload/FileUpload.js +7 -17
  481. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  482. package/dist/components/FileUpload/FileUpload.module.cjs.map +1 -1
  483. package/dist/components/FileUpload/FileUpload.module.js.map +1 -1
  484. package/dist/components/FilterBar/FilterBar.cjs.map +1 -1
  485. package/dist/components/FilterBar/FilterBar.js.map +1 -1
  486. package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
  487. package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
  488. package/dist/components/FilterBar/filter-apply.cjs.map +1 -1
  489. package/dist/components/FilterBar/filter-apply.js.map +1 -1
  490. package/dist/components/FilterBar/filter-model.cjs.map +1 -1
  491. package/dist/components/FilterBar/filter-model.js.map +1 -1
  492. package/dist/components/FilterBar/filter-query.cjs +1 -1
  493. package/dist/components/FilterBar/filter-query.cjs.map +1 -1
  494. package/dist/components/FilterBar/filter-query.js +2 -5
  495. package/dist/components/FilterBar/filter-query.js.map +1 -1
  496. package/dist/components/FilterPanel/FilterPanel.cjs.map +1 -1
  497. package/dist/components/FilterPanel/FilterPanel.js.map +1 -1
  498. package/dist/components/FilterPanel/FilterPanel.module.cjs.map +1 -1
  499. package/dist/components/FilterPanel/FilterPanel.module.js.map +1 -1
  500. package/dist/components/FloatingActionButton/FloatingActionButton.cjs.map +1 -1
  501. package/dist/components/FloatingActionButton/FloatingActionButton.js.map +1 -1
  502. package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
  503. package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
  504. package/dist/components/For/For.cjs.map +1 -1
  505. package/dist/components/For/For.js.map +1 -1
  506. package/dist/components/Form/Form.cjs.map +1 -1
  507. package/dist/components/Form/Form.js.map +1 -1
  508. package/dist/components/Form/Form.module.cjs.map +1 -1
  509. package/dist/components/Form/Form.module.js.map +1 -1
  510. package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
  511. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  512. package/dist/components/HoverCard/HoverCard.module.cjs.map +1 -1
  513. package/dist/components/HoverCard/HoverCard.module.js.map +1 -1
  514. package/dist/components/Image/Image.cjs.map +1 -1
  515. package/dist/components/Image/Image.js.map +1 -1
  516. package/dist/components/Image/Image.module.cjs.map +1 -1
  517. package/dist/components/Image/Image.module.js.map +1 -1
  518. package/dist/components/ImageCropper/ImageCropper.cjs +1 -1
  519. package/dist/components/ImageCropper/ImageCropper.cjs.map +1 -1
  520. package/dist/components/ImageCropper/ImageCropper.js +4 -8
  521. package/dist/components/ImageCropper/ImageCropper.js.map +1 -1
  522. package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
  523. package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
  524. package/dist/components/ImageCropper/crop-geometry.cjs.map +1 -1
  525. package/dist/components/ImageCropper/crop-geometry.js.map +1 -1
  526. package/dist/components/Input/Input.cjs.map +1 -1
  527. package/dist/components/Input/Input.js.map +1 -1
  528. package/dist/components/Input/Input.module.cjs.map +1 -1
  529. package/dist/components/Input/Input.module.js.map +1 -1
  530. package/dist/components/InstallBanner/InstallBanner.cjs.map +1 -1
  531. package/dist/components/InstallBanner/InstallBanner.js.map +1 -1
  532. package/dist/components/InstallBanner/InstallBanner.module.cjs.map +1 -1
  533. package/dist/components/InstallBanner/InstallBanner.module.js.map +1 -1
  534. package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
  535. package/dist/components/InstallButton/InstallButton.js.map +1 -1
  536. package/dist/components/InstallButton/InstallButton.module.cjs.map +1 -1
  537. package/dist/components/InstallButton/InstallButton.module.js.map +1 -1
  538. package/dist/components/InstallButton/install-hints.cjs.map +1 -1
  539. package/dist/components/InstallButton/install-hints.js.map +1 -1
  540. package/dist/components/Kanban/Kanban.cjs.map +1 -1
  541. package/dist/components/Kanban/Kanban.js.map +1 -1
  542. package/dist/components/Kanban/Kanban.module.cjs.map +1 -1
  543. package/dist/components/Kanban/Kanban.module.js.map +1 -1
  544. package/dist/components/Kbd/Kbd.cjs.map +1 -1
  545. package/dist/components/Kbd/Kbd.js.map +1 -1
  546. package/dist/components/Kbd/Kbd.module.cjs.map +1 -1
  547. package/dist/components/Kbd/Kbd.module.js.map +1 -1
  548. package/dist/components/Label/Label.cjs.map +1 -1
  549. package/dist/components/Label/Label.js.map +1 -1
  550. package/dist/components/Label/Label.module.cjs.map +1 -1
  551. package/dist/components/Label/Label.module.js.map +1 -1
  552. package/dist/components/Layout/Layout.cjs.map +1 -1
  553. package/dist/components/Layout/Layout.js.map +1 -1
  554. package/dist/components/Layout/Layout.module.cjs.map +1 -1
  555. package/dist/components/Layout/Layout.module.js.map +1 -1
  556. package/dist/components/Lightbox/Lightbox.cjs +1 -1
  557. package/dist/components/Lightbox/Lightbox.cjs.map +1 -1
  558. package/dist/components/Lightbox/Lightbox.js +1 -1
  559. package/dist/components/Lightbox/Lightbox.js.map +1 -1
  560. package/dist/components/Lightbox/Lightbox.module.cjs.map +1 -1
  561. package/dist/components/Lightbox/Lightbox.module.js.map +1 -1
  562. package/dist/components/ListTile/ListTile.cjs.map +1 -1
  563. package/dist/components/ListTile/ListTile.js.map +1 -1
  564. package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
  565. package/dist/components/ListTile/ListTile.module.js.map +1 -1
  566. package/dist/components/Markdown/Markdown.cjs.map +1 -1
  567. package/dist/components/Markdown/Markdown.js.map +1 -1
  568. package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
  569. package/dist/components/Markdown/Markdown.module.js.map +1 -1
  570. package/dist/components/Markdown/markdown-parse.cjs +2 -2
  571. package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
  572. package/dist/components/Markdown/markdown-parse.js +8 -27
  573. package/dist/components/Markdown/markdown-parse.js.map +1 -1
  574. package/dist/components/Masonry/Masonry.cjs.map +1 -1
  575. package/dist/components/Masonry/Masonry.js.map +1 -1
  576. package/dist/components/Masonry/Masonry.module.cjs.map +1 -1
  577. package/dist/components/Masonry/Masonry.module.js.map +1 -1
  578. package/dist/components/Masonry/masonry-layout.cjs.map +1 -1
  579. package/dist/components/Masonry/masonry-layout.js.map +1 -1
  580. package/dist/components/Menubar/Menubar.cjs.map +1 -1
  581. package/dist/components/Menubar/Menubar.js.map +1 -1
  582. package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
  583. package/dist/components/Menubar/Menubar.module.js.map +1 -1
  584. package/dist/components/Modal/Modal.cjs.map +1 -1
  585. package/dist/components/Modal/Modal.js.map +1 -1
  586. package/dist/components/Modal/Modal.module.cjs.map +1 -1
  587. package/dist/components/Modal/Modal.module.js.map +1 -1
  588. package/dist/components/ModalsManager/ModalsManager.cjs.map +1 -1
  589. package/dist/components/ModalsManager/ModalsManager.js.map +1 -1
  590. package/dist/components/ModalsManager/ModalsManager.module.cjs.map +1 -1
  591. package/dist/components/ModalsManager/ModalsManager.module.js.map +1 -1
  592. package/dist/components/Money/Money.cjs.map +1 -1
  593. package/dist/components/Money/Money.js.map +1 -1
  594. package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
  595. package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
  596. package/dist/components/MultiSelect/MultiSelect.module.cjs.map +1 -1
  597. package/dist/components/MultiSelect/MultiSelect.module.js.map +1 -1
  598. package/dist/components/NProgress/NProgress.cjs.map +1 -1
  599. package/dist/components/NProgress/NProgress.js.map +1 -1
  600. package/dist/components/NProgress/NProgress.module.cjs.map +1 -1
  601. package/dist/components/NProgress/NProgress.module.js.map +1 -1
  602. package/dist/components/Navbar/Navbar.cjs.map +1 -1
  603. package/dist/components/Navbar/Navbar.js.map +1 -1
  604. package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
  605. package/dist/components/Navbar/Navbar.module.js.map +1 -1
  606. package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
  607. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
  608. package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
  609. package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
  610. package/dist/components/NavigationRail/NavigationRail.cjs.map +1 -1
  611. package/dist/components/NavigationRail/NavigationRail.js.map +1 -1
  612. package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
  613. package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
  614. package/dist/components/NotificationCenter/NotificationCenter.cjs.map +1 -1
  615. package/dist/components/NotificationCenter/NotificationCenter.js.map +1 -1
  616. package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
  617. package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
  618. package/dist/components/NotificationCenter/use-notification-inbox.cjs.map +1 -1
  619. package/dist/components/NotificationCenter/use-notification-inbox.js.map +1 -1
  620. package/dist/components/OfflineIndicator/OfflineIndicator.cjs.map +1 -1
  621. package/dist/components/OfflineIndicator/OfflineIndicator.js.map +1 -1
  622. package/dist/components/OfflineIndicator/OfflineIndicator.module.cjs.map +1 -1
  623. package/dist/components/OfflineIndicator/OfflineIndicator.module.js.map +1 -1
  624. package/dist/components/Page/Page.cjs.map +1 -1
  625. package/dist/components/Page/Page.js.map +1 -1
  626. package/dist/components/Page/Page.module.cjs.map +1 -1
  627. package/dist/components/Page/Page.module.js.map +1 -1
  628. package/dist/components/Pagination/Pagination.cjs.map +1 -1
  629. package/dist/components/Pagination/Pagination.js.map +1 -1
  630. package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
  631. package/dist/components/Pagination/Pagination.module.js.map +1 -1
  632. package/dist/components/PasswordInput/PasswordInput.cjs.map +1 -1
  633. package/dist/components/PasswordInput/PasswordInput.js.map +1 -1
  634. package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
  635. package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
  636. package/dist/components/PinInput/PinInput.cjs.map +1 -1
  637. package/dist/components/PinInput/PinInput.js.map +1 -1
  638. package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
  639. package/dist/components/PinInput/PinInput.module.js.map +1 -1
  640. package/dist/components/Popover/Popover.cjs.map +1 -1
  641. package/dist/components/Popover/Popover.js.map +1 -1
  642. package/dist/components/Popover/Popover.module.cjs.map +1 -1
  643. package/dist/components/Popover/Popover.module.js.map +1 -1
  644. package/dist/components/Portal/Portal.cjs.map +1 -1
  645. package/dist/components/Portal/Portal.js.map +1 -1
  646. package/dist/components/Portal/anchor-position.cjs.map +1 -1
  647. package/dist/components/Portal/anchor-position.js.map +1 -1
  648. package/dist/components/Portal/escape-layer.cjs.map +1 -1
  649. package/dist/components/Portal/escape-layer.js.map +1 -1
  650. package/dist/components/Portal/portal-host.cjs.map +1 -1
  651. package/dist/components/Portal/portal-host.js.map +1 -1
  652. package/dist/components/Portal/tab-bridge.cjs +1 -1
  653. package/dist/components/Portal/tab-bridge.cjs.map +1 -1
  654. package/dist/components/Portal/tab-bridge.js +1 -5
  655. package/dist/components/Portal/tab-bridge.js.map +1 -1
  656. package/dist/components/Progress/Progress.cjs.map +1 -1
  657. package/dist/components/Progress/Progress.js.map +1 -1
  658. package/dist/components/Progress/Progress.module.cjs.map +1 -1
  659. package/dist/components/Progress/Progress.module.js.map +1 -1
  660. package/dist/components/QRCode/QRCode.cjs.map +1 -1
  661. package/dist/components/QRCode/QRCode.js.map +1 -1
  662. package/dist/components/QRCode/QRCode.module.cjs.map +1 -1
  663. package/dist/components/QRCode/QRCode.module.js.map +1 -1
  664. package/dist/components/QRCode/qr-encode.cjs +1 -1
  665. package/dist/components/QRCode/qr-encode.cjs.map +1 -1
  666. package/dist/components/QRCode/qr-encode.js +7 -13
  667. package/dist/components/QRCode/qr-encode.js.map +1 -1
  668. package/dist/components/QRCode/qr-tables.cjs.map +1 -1
  669. package/dist/components/QRCode/qr-tables.js.map +1 -1
  670. package/dist/components/Radio/Radio.cjs.map +1 -1
  671. package/dist/components/Radio/Radio.js.map +1 -1
  672. package/dist/components/Radio/Radio.module.cjs.map +1 -1
  673. package/dist/components/Radio/Radio.module.js.map +1 -1
  674. package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
  675. package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
  676. package/dist/components/RangeSlider/RangeSlider.module.cjs.map +1 -1
  677. package/dist/components/RangeSlider/RangeSlider.module.js.map +1 -1
  678. package/dist/components/RatingStars/RatingStars.cjs.map +1 -1
  679. package/dist/components/RatingStars/RatingStars.js.map +1 -1
  680. package/dist/components/RatingStars/RatingStars.module.cjs.map +1 -1
  681. package/dist/components/RatingStars/RatingStars.module.js.map +1 -1
  682. package/dist/components/RefreshIndicator/RefreshIndicator.cjs +1 -1
  683. package/dist/components/RefreshIndicator/RefreshIndicator.cjs.map +1 -1
  684. package/dist/components/RefreshIndicator/RefreshIndicator.js +10 -18
  685. package/dist/components/RefreshIndicator/RefreshIndicator.js.map +1 -1
  686. package/dist/components/RefreshIndicator/RefreshIndicator.module.cjs.map +1 -1
  687. package/dist/components/RefreshIndicator/RefreshIndicator.module.js.map +1 -1
  688. package/dist/components/RelativeTime/RelativeTime.cjs.map +1 -1
  689. package/dist/components/RelativeTime/RelativeTime.js.map +1 -1
  690. package/dist/components/Resizable/Resizable.cjs +1 -1
  691. package/dist/components/Resizable/Resizable.cjs.map +1 -1
  692. package/dist/components/Resizable/Resizable.js +1 -9
  693. package/dist/components/Resizable/Resizable.js.map +1 -1
  694. package/dist/components/Resizable/Resizable.module.cjs.map +1 -1
  695. package/dist/components/Resizable/Resizable.module.js.map +1 -1
  696. package/dist/components/Responsive/Responsive.cjs.map +1 -1
  697. package/dist/components/Responsive/Responsive.js.map +1 -1
  698. package/dist/components/Reveal/Reveal.cjs.map +1 -1
  699. package/dist/components/Reveal/Reveal.js.map +1 -1
  700. package/dist/components/Reveal/Reveal.module.cjs.map +1 -1
  701. package/dist/components/Reveal/Reveal.module.js.map +1 -1
  702. package/dist/components/Reveal/reveal-threshold.cjs.map +1 -1
  703. package/dist/components/Reveal/reveal-threshold.js.map +1 -1
  704. package/dist/components/SafeArea/SafeArea.cjs.map +1 -1
  705. package/dist/components/SafeArea/SafeArea.js.map +1 -1
  706. package/dist/components/SafeArea/SafeArea.module.cjs.map +1 -1
  707. package/dist/components/SafeArea/SafeArea.module.js.map +1 -1
  708. package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
  709. package/dist/components/Scheduler/Scheduler.js.map +1 -1
  710. package/dist/components/Scheduler/Scheduler.module.cjs.map +1 -1
  711. package/dist/components/Scheduler/Scheduler.module.js.map +1 -1
  712. package/dist/components/Scheduler/scheduler-layout.cjs.map +1 -1
  713. package/dist/components/Scheduler/scheduler-layout.js.map +1 -1
  714. package/dist/components/ScrollArea/ScrollArea.cjs.map +1 -1
  715. package/dist/components/ScrollArea/ScrollArea.js.map +1 -1
  716. package/dist/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
  717. package/dist/components/ScrollArea/ScrollArea.module.js.map +1 -1
  718. package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
  719. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  720. package/dist/components/SearchBar/SearchBar.module.cjs.map +1 -1
  721. package/dist/components/SearchBar/SearchBar.module.js.map +1 -1
  722. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
  723. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  724. package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -1
  725. package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -1
  726. package/dist/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  727. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  728. package/dist/components/SegmentedControl/SegmentedControl.module.cjs.map +1 -1
  729. package/dist/components/SegmentedControl/SegmentedControl.module.js.map +1 -1
  730. package/dist/components/Select/CaretIcon.cjs.map +1 -1
  731. package/dist/components/Select/CaretIcon.js.map +1 -1
  732. package/dist/components/Select/Select.cjs.map +1 -1
  733. package/dist/components/Select/Select.js.map +1 -1
  734. package/dist/components/Select/Select.module.cjs.map +1 -1
  735. package/dist/components/Select/Select.module.js.map +1 -1
  736. package/dist/components/Select/options.cjs.map +1 -1
  737. package/dist/components/Select/options.js.map +1 -1
  738. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  739. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  740. package/dist/components/Sidebar/Sidebar.js +13 -23
  741. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  742. package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
  743. package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
  744. package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
  745. package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
  746. package/dist/components/Sidebar/active-nav-key.cjs.map +1 -1
  747. package/dist/components/Sidebar/active-nav-key.js.map +1 -1
  748. package/dist/components/SignaturePad/SignaturePad.cjs +1 -1
  749. package/dist/components/SignaturePad/SignaturePad.cjs.map +1 -1
  750. package/dist/components/SignaturePad/SignaturePad.js +1 -5
  751. package/dist/components/SignaturePad/SignaturePad.js.map +1 -1
  752. package/dist/components/SignaturePad/SignaturePad.module.cjs.map +1 -1
  753. package/dist/components/SignaturePad/SignaturePad.module.js.map +1 -1
  754. package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
  755. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  756. package/dist/components/Skeleton/Skeleton.module.cjs.map +1 -1
  757. package/dist/components/Skeleton/Skeleton.module.js.map +1 -1
  758. package/dist/components/Slider/Slider.cjs.map +1 -1
  759. package/dist/components/Slider/Slider.js.map +1 -1
  760. package/dist/components/Slider/Slider.module.cjs.map +1 -1
  761. package/dist/components/Slider/Slider.module.js.map +1 -1
  762. package/dist/components/Spacer/Spacer.cjs.map +1 -1
  763. package/dist/components/Spacer/Spacer.js.map +1 -1
  764. package/dist/components/Spacer/Spacer.module.cjs.map +1 -1
  765. package/dist/components/Spacer/Spacer.module.js.map +1 -1
  766. package/dist/components/Sparkline/Sparkline.cjs.map +1 -1
  767. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  768. package/dist/components/Sparkline/Sparkline.module.cjs.map +1 -1
  769. package/dist/components/Sparkline/Sparkline.module.js.map +1 -1
  770. package/dist/components/Sparkline/sparkline-geometry.cjs.map +1 -1
  771. package/dist/components/Sparkline/sparkline-geometry.js.map +1 -1
  772. package/dist/components/Spinner/Spinner.cjs.map +1 -1
  773. package/dist/components/Spinner/Spinner.js.map +1 -1
  774. package/dist/components/Spinner/Spinner.module.cjs.map +1 -1
  775. package/dist/components/Spinner/Spinner.module.js.map +1 -1
  776. package/dist/components/Stat/Stat.cjs.map +1 -1
  777. package/dist/components/Stat/Stat.js.map +1 -1
  778. package/dist/components/Stat/Stat.module.cjs.map +1 -1
  779. package/dist/components/Stat/Stat.module.js.map +1 -1
  780. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  781. package/dist/components/Stepper/Stepper.js.map +1 -1
  782. package/dist/components/Stepper/Stepper.module.cjs.map +1 -1
  783. package/dist/components/Stepper/Stepper.module.js.map +1 -1
  784. package/dist/components/StepperInput/StepperInput.cjs.map +1 -1
  785. package/dist/components/StepperInput/StepperInput.js.map +1 -1
  786. package/dist/components/StepperInput/StepperInput.module.cjs.map +1 -1
  787. package/dist/components/StepperInput/StepperInput.module.js.map +1 -1
  788. package/dist/components/Switch/Switch.cjs.map +1 -1
  789. package/dist/components/Switch/Switch.js.map +1 -1
  790. package/dist/components/Switch/Switch.module.cjs.map +1 -1
  791. package/dist/components/Switch/Switch.module.js.map +1 -1
  792. package/dist/components/SyncStatusBadge/SyncStatusBadge.cjs.map +1 -1
  793. package/dist/components/SyncStatusBadge/SyncStatusBadge.js.map +1 -1
  794. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.cjs.map +1 -1
  795. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.js.map +1 -1
  796. package/dist/components/Table/Table.cjs.map +1 -1
  797. package/dist/components/Table/Table.js.map +1 -1
  798. package/dist/components/Table/Table.module.cjs.map +1 -1
  799. package/dist/components/Table/Table.module.js.map +1 -1
  800. package/dist/components/Tabs/Tabs.cjs.map +1 -1
  801. package/dist/components/Tabs/Tabs.js.map +1 -1
  802. package/dist/components/Tabs/Tabs.module.cjs.map +1 -1
  803. package/dist/components/Tabs/Tabs.module.js.map +1 -1
  804. package/dist/components/Tag/Tag.cjs.map +1 -1
  805. package/dist/components/Tag/Tag.js.map +1 -1
  806. package/dist/components/Tag/Tag.module.cjs.map +1 -1
  807. package/dist/components/Tag/Tag.module.js.map +1 -1
  808. package/dist/components/Textarea/Textarea.cjs.map +1 -1
  809. package/dist/components/Textarea/Textarea.js.map +1 -1
  810. package/dist/components/Textarea/Textarea.module.cjs.map +1 -1
  811. package/dist/components/Textarea/Textarea.module.js.map +1 -1
  812. package/dist/components/TimePicker/TimePicker.cjs.map +1 -1
  813. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  814. package/dist/components/TimePicker/TimePicker.module.cjs.map +1 -1
  815. package/dist/components/TimePicker/TimePicker.module.js.map +1 -1
  816. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  817. package/dist/components/Timeline/Timeline.js.map +1 -1
  818. package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
  819. package/dist/components/Timeline/Timeline.module.js.map +1 -1
  820. package/dist/components/Toast/Toast.module.cjs.map +1 -1
  821. package/dist/components/Toast/Toast.module.js.map +1 -1
  822. package/dist/components/Toast/ToastProvider.cjs.map +1 -1
  823. package/dist/components/Toast/ToastProvider.js.map +1 -1
  824. package/dist/components/Toggle/Toggle.cjs.map +1 -1
  825. package/dist/components/Toggle/Toggle.js.map +1 -1
  826. package/dist/components/Toggle/Toggle.module.cjs.map +1 -1
  827. package/dist/components/Toggle/Toggle.module.js.map +1 -1
  828. package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
  829. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  830. package/dist/components/ToggleGroup/ToggleGroup.module.cjs.map +1 -1
  831. package/dist/components/ToggleGroup/ToggleGroup.module.js.map +1 -1
  832. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  833. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  834. package/dist/components/Tooltip/Tooltip.module.cjs.map +1 -1
  835. package/dist/components/Tooltip/Tooltip.module.js.map +1 -1
  836. package/dist/components/Tour/Tour.cjs +1 -1
  837. package/dist/components/Tour/Tour.cjs.map +1 -1
  838. package/dist/components/Tour/Tour.js +1 -5
  839. package/dist/components/Tour/Tour.js.map +1 -1
  840. package/dist/components/Tour/Tour.module.cjs.map +1 -1
  841. package/dist/components/Tour/Tour.module.js.map +1 -1
  842. package/dist/components/Tour/tour-position.cjs.map +1 -1
  843. package/dist/components/Tour/tour-position.js.map +1 -1
  844. package/dist/components/Transfer/Transfer.cjs.map +1 -1
  845. package/dist/components/Transfer/Transfer.js.map +1 -1
  846. package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
  847. package/dist/components/Transfer/Transfer.module.js.map +1 -1
  848. package/dist/components/Transfer/transfer-state.cjs.map +1 -1
  849. package/dist/components/Transfer/transfer-state.js.map +1 -1
  850. package/dist/components/TreeView/TreeView.cjs.map +1 -1
  851. package/dist/components/TreeView/TreeView.js.map +1 -1
  852. package/dist/components/TreeView/TreeView.module.cjs.map +1 -1
  853. package/dist/components/TreeView/TreeView.module.js.map +1 -1
  854. package/dist/components/TruncateText/TruncateText.cjs.map +1 -1
  855. package/dist/components/TruncateText/TruncateText.js.map +1 -1
  856. package/dist/components/TruncateText/TruncateText.module.cjs.map +1 -1
  857. package/dist/components/TruncateText/TruncateText.module.js.map +1 -1
  858. package/dist/components/UpdatePrompt/UpdatePrompt.cjs.map +1 -1
  859. package/dist/components/UpdatePrompt/UpdatePrompt.js.map +1 -1
  860. package/dist/components/UpdatePrompt/UpdatePrompt.module.cjs.map +1 -1
  861. package/dist/components/UpdatePrompt/UpdatePrompt.module.js.map +1 -1
  862. package/dist/components/VideoPlayer/VideoPlayer.cjs +1 -1
  863. package/dist/components/VideoPlayer/VideoPlayer.cjs.map +1 -1
  864. package/dist/components/VideoPlayer/VideoPlayer.js +1 -7
  865. package/dist/components/VideoPlayer/VideoPlayer.js.map +1 -1
  866. package/dist/components/VideoPlayer/VideoPlayer.module.cjs.map +1 -1
  867. package/dist/components/VideoPlayer/VideoPlayer.module.js.map +1 -1
  868. package/dist/components/VideoPlayer/playback-rates.cjs.map +1 -1
  869. package/dist/components/VideoPlayer/playback-rates.js.map +1 -1
  870. package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
  871. package/dist/components/VirtualList/VirtualList.js.map +1 -1
  872. package/dist/components/VirtualList/VirtualList.module.cjs.map +1 -1
  873. package/dist/components/VirtualList/VirtualList.module.js.map +1 -1
  874. package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
  875. package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
  876. package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
  877. package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
  878. package/dist/components/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
  879. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  880. package/dist/components/VisuallyHidden/VisuallyHidden.module.cjs.map +1 -1
  881. package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -1
  882. package/dist/components/Wizard/Wizard.cjs +1 -1
  883. package/dist/components/Wizard/Wizard.cjs.map +1 -1
  884. package/dist/components/Wizard/Wizard.js +4 -11
  885. package/dist/components/Wizard/Wizard.js.map +1 -1
  886. package/dist/components/Wizard/Wizard.module.cjs.map +1 -1
  887. package/dist/components/Wizard/Wizard.module.js.map +1 -1
  888. package/dist/data/create-data-provider.cjs.map +1 -1
  889. package/dist/data/create-data-provider.js.map +1 -1
  890. package/dist/data/data-provider-context.cjs.map +1 -1
  891. package/dist/data/data-provider-context.js.map +1 -1
  892. package/dist/data/use-resource.cjs.map +1 -1
  893. package/dist/data/use-resource.js.map +1 -1
  894. package/dist/editor/RichTextEditor.cjs.map +1 -1
  895. package/dist/editor/RichTextEditor.js.map +1 -1
  896. package/dist/editor/RichTextEditor.module.cjs.map +1 -1
  897. package/dist/editor/RichTextEditor.module.js.map +1 -1
  898. package/dist/editor.js +1 -2
  899. package/dist/error-boundary/ErrorBoundary.cjs.map +1 -1
  900. package/dist/error-boundary/ErrorBoundary.js.map +1 -1
  901. package/dist/error-boundary/use-error-handler.cjs.map +1 -1
  902. package/dist/error-boundary/use-error-handler.js.map +1 -1
  903. package/dist/feature-flags/FeatureFlagsProvider.cjs.map +1 -1
  904. package/dist/feature-flags/FeatureFlagsProvider.js.map +1 -1
  905. package/dist/feature-flags/growthbook-adapter.cjs.map +1 -1
  906. package/dist/feature-flags/growthbook-adapter.js.map +1 -1
  907. package/dist/feature-flags/in-memory-adapter.cjs.map +1 -1
  908. package/dist/feature-flags/in-memory-adapter.js.map +1 -1
  909. package/dist/feature-flags/launchdarkly-adapter.cjs.map +1 -1
  910. package/dist/feature-flags/launchdarkly-adapter.js.map +1 -1
  911. package/dist/forms/FormField.cjs.map +1 -1
  912. package/dist/forms/FormField.js.map +1 -1
  913. package/dist/forms/br-validators.cjs.map +1 -1
  914. package/dist/forms/br-validators.js.map +1 -1
  915. package/dist/forms/masked-inputs.cjs.map +1 -1
  916. package/dist/forms/masked-inputs.js.map +1 -1
  917. package/dist/forms/use-viacep.cjs.map +1 -1
  918. package/dist/forms/use-viacep.js.map +1 -1
  919. package/dist/forms/use-zod-form.cjs.map +1 -1
  920. package/dist/forms/use-zod-form.js.map +1 -1
  921. package/dist/forms/validate-form.cjs.map +1 -1
  922. package/dist/forms/validate-form.js.map +1 -1
  923. package/dist/forms/zod-resolver.cjs.map +1 -1
  924. package/dist/forms/zod-resolver.js.map +1 -1
  925. package/dist/geo/TrajectoryMap.cjs.map +1 -1
  926. package/dist/geo/TrajectoryMap.js.map +1 -1
  927. package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
  928. package/dist/geo/TrajectoryMap.module.js.map +1 -1
  929. package/dist/geo/bounds.cjs.map +1 -1
  930. package/dist/geo/bounds.js.map +1 -1
  931. package/dist/geo/create-position-tracker.cjs +1 -1
  932. package/dist/geo/create-position-tracker.cjs.map +1 -1
  933. package/dist/geo/create-position-tracker.js +1 -7
  934. package/dist/geo/create-position-tracker.js.map +1 -1
  935. package/dist/geo/distance.cjs.map +1 -1
  936. package/dist/geo/distance.js.map +1 -1
  937. package/dist/geo/estimate.cjs.map +1 -1
  938. package/dist/geo/estimate.js.map +1 -1
  939. package/dist/geo/leaflet-map.cjs.map +1 -1
  940. package/dist/geo/leaflet-map.js.map +1 -1
  941. package/dist/geo/projection.cjs.map +1 -1
  942. package/dist/geo/projection.js.map +1 -1
  943. package/dist/geo/routing.cjs.map +1 -1
  944. package/dist/geo/routing.js.map +1 -1
  945. package/dist/geo/types.cjs.map +1 -1
  946. package/dist/geo/types.js.map +1 -1
  947. package/dist/geo/use-position-tracker.cjs.map +1 -1
  948. package/dist/geo/use-position-tracker.js.map +1 -1
  949. package/dist/hooks/pwa-env.cjs.map +1 -1
  950. package/dist/hooks/pwa-env.js.map +1 -1
  951. package/dist/hooks/tab-sequence.cjs.map +1 -1
  952. package/dist/hooks/tab-sequence.js.map +1 -1
  953. package/dist/hooks/use-announce.cjs +1 -1
  954. package/dist/hooks/use-announce.cjs.map +1 -1
  955. package/dist/hooks/use-announce.js +2 -2
  956. package/dist/hooks/use-announce.js.map +1 -1
  957. package/dist/hooks/use-async.cjs.map +1 -1
  958. package/dist/hooks/use-async.js.map +1 -1
  959. package/dist/hooks/use-before-install-prompt.cjs.map +1 -1
  960. package/dist/hooks/use-before-install-prompt.js.map +1 -1
  961. package/dist/hooks/use-breakpoint.cjs.map +1 -1
  962. package/dist/hooks/use-breakpoint.js.map +1 -1
  963. package/dist/hooks/use-click-outside.cjs.map +1 -1
  964. package/dist/hooks/use-click-outside.js.map +1 -1
  965. package/dist/hooks/use-client-filter.cjs.map +1 -1
  966. package/dist/hooks/use-client-filter.js.map +1 -1
  967. package/dist/hooks/use-clipboard.cjs.map +1 -1
  968. package/dist/hooks/use-clipboard.js.map +1 -1
  969. package/dist/hooks/use-countdown.cjs.map +1 -1
  970. package/dist/hooks/use-countdown.js.map +1 -1
  971. package/dist/hooks/use-counter.cjs.map +1 -1
  972. package/dist/hooks/use-counter.js.map +1 -1
  973. package/dist/hooks/use-debounce.cjs.map +1 -1
  974. package/dist/hooks/use-debounce.js.map +1 -1
  975. package/dist/hooks/use-deep-memo.cjs.map +1 -1
  976. package/dist/hooks/use-deep-memo.js.map +1 -1
  977. package/dist/hooks/use-disclosure.cjs.map +1 -1
  978. package/dist/hooks/use-disclosure.js.map +1 -1
  979. package/dist/hooks/use-document-title.cjs.map +1 -1
  980. package/dist/hooks/use-document-title.js.map +1 -1
  981. package/dist/hooks/use-document-visibility.cjs.map +1 -1
  982. package/dist/hooks/use-document-visibility.js.map +1 -1
  983. package/dist/hooks/use-draft-filters.cjs.map +1 -1
  984. package/dist/hooks/use-draft-filters.js.map +1 -1
  985. package/dist/hooks/use-event-listener.cjs.map +1 -1
  986. package/dist/hooks/use-event-listener.js.map +1 -1
  987. package/dist/hooks/use-favicon.cjs.map +1 -1
  988. package/dist/hooks/use-favicon.js.map +1 -1
  989. package/dist/hooks/use-focus-trap.cjs.map +1 -1
  990. package/dist/hooks/use-focus-trap.js.map +1 -1
  991. package/dist/hooks/use-fullscreen-element.cjs.map +1 -1
  992. package/dist/hooks/use-fullscreen-element.js.map +1 -1
  993. package/dist/hooks/use-fullscreen.cjs +1 -1
  994. package/dist/hooks/use-fullscreen.cjs.map +1 -1
  995. package/dist/hooks/use-fullscreen.js +7 -23
  996. package/dist/hooks/use-fullscreen.js.map +1 -1
  997. package/dist/hooks/use-geolocation.cjs.map +1 -1
  998. package/dist/hooks/use-geolocation.js.map +1 -1
  999. package/dist/hooks/use-hover.cjs.map +1 -1
  1000. package/dist/hooks/use-hover.js.map +1 -1
  1001. package/dist/hooks/use-idle.cjs.map +1 -1
  1002. package/dist/hooks/use-idle.js.map +1 -1
  1003. package/dist/hooks/use-install-prompt.cjs +1 -1
  1004. package/dist/hooks/use-install-prompt.cjs.map +1 -1
  1005. package/dist/hooks/use-install-prompt.js +1 -1
  1006. package/dist/hooks/use-install-prompt.js.map +1 -1
  1007. package/dist/hooks/use-intersection-observer.cjs.map +1 -1
  1008. package/dist/hooks/use-intersection-observer.js.map +1 -1
  1009. package/dist/hooks/use-interval.cjs.map +1 -1
  1010. package/dist/hooks/use-interval.js.map +1 -1
  1011. package/dist/hooks/use-is-first-render.cjs.map +1 -1
  1012. package/dist/hooks/use-is-first-render.js.map +1 -1
  1013. package/dist/hooks/use-keyboard-shortcut.cjs.map +1 -1
  1014. package/dist/hooks/use-keyboard-shortcut.js.map +1 -1
  1015. package/dist/hooks/use-latest-ref.cjs.map +1 -1
  1016. package/dist/hooks/use-latest-ref.js.map +1 -1
  1017. package/dist/hooks/use-list-state.cjs.map +1 -1
  1018. package/dist/hooks/use-list-state.js.map +1 -1
  1019. package/dist/hooks/use-local-storage.cjs +1 -1
  1020. package/dist/hooks/use-local-storage.cjs.map +1 -1
  1021. package/dist/hooks/use-local-storage.js +2 -5
  1022. package/dist/hooks/use-local-storage.js.map +1 -1
  1023. package/dist/hooks/use-long-press-handlers.cjs.map +1 -1
  1024. package/dist/hooks/use-long-press-handlers.js.map +1 -1
  1025. package/dist/hooks/use-long-press.cjs.map +1 -1
  1026. package/dist/hooks/use-long-press.js.map +1 -1
  1027. package/dist/hooks/use-map.cjs.map +1 -1
  1028. package/dist/hooks/use-map.js.map +1 -1
  1029. package/dist/hooks/use-media-devices.cjs.map +1 -1
  1030. package/dist/hooks/use-media-devices.js.map +1 -1
  1031. package/dist/hooks/use-media-permission.cjs +1 -1
  1032. package/dist/hooks/use-media-permission.cjs.map +1 -1
  1033. package/dist/hooks/use-media-permission.js +2 -5
  1034. package/dist/hooks/use-media-permission.js.map +1 -1
  1035. package/dist/hooks/use-media-query.cjs.map +1 -1
  1036. package/dist/hooks/use-media-query.js.map +1 -1
  1037. package/dist/hooks/use-object-url.cjs.map +1 -1
  1038. package/dist/hooks/use-object-url.js.map +1 -1
  1039. package/dist/hooks/use-online.cjs.map +1 -1
  1040. package/dist/hooks/use-online.js.map +1 -1
  1041. package/dist/hooks/use-pagination.cjs.map +1 -1
  1042. package/dist/hooks/use-pagination.js.map +1 -1
  1043. package/dist/hooks/use-previous.cjs.map +1 -1
  1044. package/dist/hooks/use-previous.js.map +1 -1
  1045. package/dist/hooks/use-push-to-talk.cjs.map +1 -1
  1046. package/dist/hooks/use-push-to-talk.js.map +1 -1
  1047. package/dist/hooks/use-queue.cjs.map +1 -1
  1048. package/dist/hooks/use-queue.js.map +1 -1
  1049. package/dist/hooks/use-resize-observer.cjs.map +1 -1
  1050. package/dist/hooks/use-resize-observer.js.map +1 -1
  1051. package/dist/hooks/use-scroll-lock.cjs.map +1 -1
  1052. package/dist/hooks/use-scroll-lock.js.map +1 -1
  1053. package/dist/hooks/use-scroll-overflow.cjs.map +1 -1
  1054. package/dist/hooks/use-scroll-overflow.js.map +1 -1
  1055. package/dist/hooks/use-service-worker-update.cjs.map +1 -1
  1056. package/dist/hooks/use-service-worker-update.js.map +1 -1
  1057. package/dist/hooks/use-set.cjs.map +1 -1
  1058. package/dist/hooks/use-set.js.map +1 -1
  1059. package/dist/hooks/use-sortable.cjs.map +1 -1
  1060. package/dist/hooks/use-sortable.js.map +1 -1
  1061. package/dist/hooks/use-stable-callback.cjs.map +1 -1
  1062. package/dist/hooks/use-stable-callback.js.map +1 -1
  1063. package/dist/hooks/use-storage-estimate.cjs.map +1 -1
  1064. package/dist/hooks/use-storage-estimate.js.map +1 -1
  1065. package/dist/hooks/use-throttle.cjs.map +1 -1
  1066. package/dist/hooks/use-throttle.js.map +1 -1
  1067. package/dist/hooks/use-timeout.cjs.map +1 -1
  1068. package/dist/hooks/use-timeout.js.map +1 -1
  1069. package/dist/hooks/use-toggle.cjs.map +1 -1
  1070. package/dist/hooks/use-toggle.js.map +1 -1
  1071. package/dist/hooks/use-typewriter.cjs.map +1 -1
  1072. package/dist/hooks/use-typewriter.js.map +1 -1
  1073. package/dist/hooks/use-window-size.cjs.map +1 -1
  1074. package/dist/hooks/use-window-size.js.map +1 -1
  1075. package/dist/http/api-client.cjs +1 -1
  1076. package/dist/http/api-client.cjs.map +1 -1
  1077. package/dist/http/api-client.js +5 -1
  1078. package/dist/http/api-client.js.map +1 -1
  1079. package/dist/http/build-url.cjs +1 -1
  1080. package/dist/http/build-url.cjs.map +1 -1
  1081. package/dist/http/build-url.js +3 -1
  1082. package/dist/http/build-url.js.map +1 -1
  1083. package/dist/http/credential-scope.cjs.map +1 -1
  1084. package/dist/http/credential-scope.js.map +1 -1
  1085. package/dist/http/csrf.cjs.map +1 -1
  1086. package/dist/http/csrf.js.map +1 -1
  1087. package/dist/http/decode-response.cjs.map +1 -1
  1088. package/dist/http/decode-response.js.map +1 -1
  1089. package/dist/http/describe-api-error.cjs.map +1 -1
  1090. package/dist/http/describe-api-error.js.map +1 -1
  1091. package/dist/http/errors.cjs.map +1 -1
  1092. package/dist/http/errors.js.map +1 -1
  1093. package/dist/http/idempotency.cjs.map +1 -1
  1094. package/dist/http/idempotency.js.map +1 -1
  1095. package/dist/http/parse-response.cjs.map +1 -1
  1096. package/dist/http/parse-response.js.map +1 -1
  1097. package/dist/http/presigned-post.cjs +2 -0
  1098. package/dist/http/presigned-post.cjs.map +1 -0
  1099. package/dist/http/presigned-post.js +73 -0
  1100. package/dist/http/presigned-post.js.map +1 -0
  1101. package/dist/http/resumable-upload.cjs.map +1 -1
  1102. package/dist/http/resumable-upload.js.map +1 -1
  1103. package/dist/http/retry.cjs.map +1 -1
  1104. package/dist/http/retry.js.map +1 -1
  1105. package/dist/http/timeout.cjs.map +1 -1
  1106. package/dist/http/timeout.js.map +1 -1
  1107. package/dist/http/upload-with-progress.cjs +1 -1
  1108. package/dist/http/upload-with-progress.cjs.map +1 -1
  1109. package/dist/http/upload-with-progress.js +2 -7
  1110. package/dist/http/upload-with-progress.js.map +1 -1
  1111. package/dist/http/use-describe-api-error.cjs.map +1 -1
  1112. package/dist/http/use-describe-api-error.js.map +1 -1
  1113. package/dist/http/use-poll.cjs +1 -1
  1114. package/dist/http/use-poll.cjs.map +1 -1
  1115. package/dist/http/use-poll.js +2 -5
  1116. package/dist/http/use-poll.js.map +1 -1
  1117. package/dist/i18n/I18nProvider.cjs.map +1 -1
  1118. package/dist/i18n/I18nProvider.js.map +1 -1
  1119. package/dist/i18n/create-i18n.cjs.map +1 -1
  1120. package/dist/i18n/create-i18n.js.map +1 -1
  1121. package/dist/icons/Icon.cjs.map +1 -1
  1122. package/dist/icons/Icon.js.map +1 -1
  1123. package/dist/icons/IconPicker.cjs.map +1 -1
  1124. package/dist/icons/IconPicker.js.map +1 -1
  1125. package/dist/icons/IconPicker.module.cjs.map +1 -1
  1126. package/dist/icons/IconPicker.module.js.map +1 -1
  1127. package/dist/icons/IconProvider.cjs.map +1 -1
  1128. package/dist/icons/IconProvider.js.map +1 -1
  1129. package/dist/icons/alias.cjs.map +1 -1
  1130. package/dist/icons/alias.js.map +1 -1
  1131. package/dist/icons/generated/aliases.cjs.map +1 -1
  1132. package/dist/icons/generated/aliases.js.map +1 -1
  1133. package/dist/icons/generated/icon-names.cjs.map +1 -1
  1134. package/dist/icons/generated/icon-names.js.map +1 -1
  1135. package/dist/icons/generated/loaders.cjs.map +1 -1
  1136. package/dist/icons/generated/loaders.js.map +1 -1
  1137. package/dist/icons/generated/shard-00.cjs.map +1 -1
  1138. package/dist/icons/generated/shard-00.js.map +1 -1
  1139. package/dist/icons/generated/shard-01.cjs.map +1 -1
  1140. package/dist/icons/generated/shard-01.js.map +1 -1
  1141. package/dist/icons/generated/shard-02.cjs.map +1 -1
  1142. package/dist/icons/generated/shard-02.js.map +1 -1
  1143. package/dist/icons/generated/shard-03.cjs.map +1 -1
  1144. package/dist/icons/generated/shard-03.js.map +1 -1
  1145. package/dist/icons/generated/shard-04.cjs.map +1 -1
  1146. package/dist/icons/generated/shard-04.js.map +1 -1
  1147. package/dist/icons/generated/shard-05.cjs.map +1 -1
  1148. package/dist/icons/generated/shard-05.js.map +1 -1
  1149. package/dist/icons/generated/shard-06.cjs.map +1 -1
  1150. package/dist/icons/generated/shard-06.js.map +1 -1
  1151. package/dist/icons/generated/shard-07.cjs.map +1 -1
  1152. package/dist/icons/generated/shard-07.js.map +1 -1
  1153. package/dist/icons/generated/shard-08.cjs.map +1 -1
  1154. package/dist/icons/generated/shard-08.js.map +1 -1
  1155. package/dist/icons/generated/shard-09.cjs.map +1 -1
  1156. package/dist/icons/generated/shard-09.js.map +1 -1
  1157. package/dist/icons/generated/shard-10.cjs.map +1 -1
  1158. package/dist/icons/generated/shard-10.js.map +1 -1
  1159. package/dist/icons/generated/shard-11.cjs.map +1 -1
  1160. package/dist/icons/generated/shard-11.js.map +1 -1
  1161. package/dist/icons/generated/shard-12.cjs.map +1 -1
  1162. package/dist/icons/generated/shard-12.js.map +1 -1
  1163. package/dist/icons/generated/shard-13.cjs.map +1 -1
  1164. package/dist/icons/generated/shard-13.js.map +1 -1
  1165. package/dist/icons/generated/shard-14.cjs.map +1 -1
  1166. package/dist/icons/generated/shard-14.js.map +1 -1
  1167. package/dist/icons/generated/shard-15.cjs.map +1 -1
  1168. package/dist/icons/generated/shard-15.js.map +1 -1
  1169. package/dist/icons/generated/shard-16.cjs.map +1 -1
  1170. package/dist/icons/generated/shard-16.js.map +1 -1
  1171. package/dist/icons/generated/shard-17.cjs.map +1 -1
  1172. package/dist/icons/generated/shard-17.js.map +1 -1
  1173. package/dist/icons/generated/shard-18.cjs.map +1 -1
  1174. package/dist/icons/generated/shard-18.js.map +1 -1
  1175. package/dist/icons/generated/shard-19.cjs.map +1 -1
  1176. package/dist/icons/generated/shard-19.js.map +1 -1
  1177. package/dist/icons/generated/shard-20.cjs.map +1 -1
  1178. package/dist/icons/generated/shard-20.js.map +1 -1
  1179. package/dist/icons/generated/shard-21.cjs.map +1 -1
  1180. package/dist/icons/generated/shard-21.js.map +1 -1
  1181. package/dist/icons/generated/shard-22.cjs.map +1 -1
  1182. package/dist/icons/generated/shard-22.js.map +1 -1
  1183. package/dist/icons/generated/shard-23.cjs.map +1 -1
  1184. package/dist/icons/generated/shard-23.js.map +1 -1
  1185. package/dist/icons/generated/shard-24.cjs.map +1 -1
  1186. package/dist/icons/generated/shard-24.js.map +1 -1
  1187. package/dist/icons/generated/shard-25.cjs.map +1 -1
  1188. package/dist/icons/generated/shard-25.js.map +1 -1
  1189. package/dist/icons/generated/shard-26.cjs.map +1 -1
  1190. package/dist/icons/generated/shard-26.js.map +1 -1
  1191. package/dist/icons/generated/shard-27.cjs.map +1 -1
  1192. package/dist/icons/generated/shard-27.js.map +1 -1
  1193. package/dist/icons/generated/shard-28.cjs.map +1 -1
  1194. package/dist/icons/generated/shard-28.js.map +1 -1
  1195. package/dist/icons/generated/shard-29.cjs.map +1 -1
  1196. package/dist/icons/generated/shard-29.js.map +1 -1
  1197. package/dist/icons/generated/shard-30.cjs.map +1 -1
  1198. package/dist/icons/generated/shard-30.js.map +1 -1
  1199. package/dist/icons/generated/shard-31.cjs.map +1 -1
  1200. package/dist/icons/generated/shard-31.js.map +1 -1
  1201. package/dist/icons/generated/shard-32.cjs.map +1 -1
  1202. package/dist/icons/generated/shard-32.js.map +1 -1
  1203. package/dist/icons/generated/shard-33.cjs.map +1 -1
  1204. package/dist/icons/generated/shard-33.js.map +1 -1
  1205. package/dist/icons/generated/shard-34.cjs.map +1 -1
  1206. package/dist/icons/generated/shard-34.js.map +1 -1
  1207. package/dist/icons/generated/shard-35.cjs.map +1 -1
  1208. package/dist/icons/generated/shard-35.js.map +1 -1
  1209. package/dist/icons/generated/shard-36.cjs.map +1 -1
  1210. package/dist/icons/generated/shard-36.js.map +1 -1
  1211. package/dist/icons/generated/shard-37.cjs.map +1 -1
  1212. package/dist/icons/generated/shard-37.js.map +1 -1
  1213. package/dist/icons/generated/shard-38.cjs.map +1 -1
  1214. package/dist/icons/generated/shard-38.js.map +1 -1
  1215. package/dist/icons/generated/shard-39.cjs.map +1 -1
  1216. package/dist/icons/generated/shard-39.js.map +1 -1
  1217. package/dist/icons/generated/shard-40.cjs.map +1 -1
  1218. package/dist/icons/generated/shard-40.js.map +1 -1
  1219. package/dist/icons/generated/shard-41.cjs.map +1 -1
  1220. package/dist/icons/generated/shard-41.js.map +1 -1
  1221. package/dist/icons/generated/shard-42.cjs.map +1 -1
  1222. package/dist/icons/generated/shard-42.js.map +1 -1
  1223. package/dist/icons/generated/shard-43.cjs.map +1 -1
  1224. package/dist/icons/generated/shard-43.js.map +1 -1
  1225. package/dist/icons/generated/shard-44.cjs.map +1 -1
  1226. package/dist/icons/generated/shard-44.js.map +1 -1
  1227. package/dist/icons/generated/shard-45.cjs.map +1 -1
  1228. package/dist/icons/generated/shard-45.js.map +1 -1
  1229. package/dist/icons/icon-context.cjs.map +1 -1
  1230. package/dist/icons/icon-context.js.map +1 -1
  1231. package/dist/icons/is-icon-name.cjs.map +1 -1
  1232. package/dist/icons/is-icon-name.js.map +1 -1
  1233. package/dist/icons/material-symbols.cjs.map +1 -1
  1234. package/dist/icons/material-symbols.js.map +1 -1
  1235. package/dist/icons/normalize-icon-name.cjs.map +1 -1
  1236. package/dist/icons/normalize-icon-name.js.map +1 -1
  1237. package/dist/icons/shard-cache.cjs +1 -1
  1238. package/dist/icons/shard-cache.cjs.map +1 -1
  1239. package/dist/icons/shard-cache.js +2 -5
  1240. package/dist/icons/shard-cache.js.map +1 -1
  1241. package/dist/icons/use-icon.cjs.map +1 -1
  1242. package/dist/icons/use-icon.js.map +1 -1
  1243. package/dist/icons/validate-icon-name.cjs.map +1 -1
  1244. package/dist/icons/validate-icon-name.js.map +1 -1
  1245. package/dist/icons-virtual.cjs.map +1 -1
  1246. package/dist/icons-virtual.js.map +1 -1
  1247. package/dist/imaging/canvas.cjs.map +1 -1
  1248. package/dist/imaging/canvas.js.map +1 -1
  1249. package/dist/imaging/compress.cjs.map +1 -1
  1250. package/dist/imaging/compress.js.map +1 -1
  1251. package/dist/imaging/decode.cjs.map +1 -1
  1252. package/dist/imaging/decode.js.map +1 -1
  1253. package/dist/imaging/encode.cjs.map +1 -1
  1254. package/dist/imaging/encode.js.map +1 -1
  1255. package/dist/imaging/exceptions.cjs.map +1 -1
  1256. package/dist/imaging/exceptions.js.map +1 -1
  1257. package/dist/imaging/frame.cjs.map +1 -1
  1258. package/dist/imaging/frame.js.map +1 -1
  1259. package/dist/imaging/thumbnails.cjs.map +1 -1
  1260. package/dist/imaging/thumbnails.js.map +1 -1
  1261. package/dist/imaging/transform.cjs.map +1 -1
  1262. package/dist/imaging/transform.js.map +1 -1
  1263. package/dist/imaging/use-image-processing.cjs.map +1 -1
  1264. package/dist/imaging/use-image-processing.js.map +1 -1
  1265. package/dist/logger/logger.cjs.map +1 -1
  1266. package/dist/logger/logger.js.map +1 -1
  1267. package/dist/neural.cjs.map +1 -1
  1268. package/dist/neural.js.map +1 -1
  1269. package/dist/oauth/GoogleSignIn.cjs +1 -1
  1270. package/dist/oauth/GoogleSignIn.cjs.map +1 -1
  1271. package/dist/oauth/GoogleSignIn.js +6 -9
  1272. package/dist/oauth/GoogleSignIn.js.map +1 -1
  1273. package/dist/oauth/callback.cjs.map +1 -1
  1274. package/dist/oauth/callback.js.map +1 -1
  1275. package/dist/oauth/use-oauth-callback.cjs.map +1 -1
  1276. package/dist/oauth/use-oauth-callback.js.map +1 -1
  1277. package/dist/offline/conflict.cjs.map +1 -1
  1278. package/dist/offline/conflict.js.map +1 -1
  1279. package/dist/offline/create-offline-database.cjs.map +1 -1
  1280. package/dist/offline/create-offline-database.js.map +1 -1
  1281. package/dist/offline/create-offline-store.cjs +1 -1
  1282. package/dist/offline/create-offline-store.cjs.map +1 -1
  1283. package/dist/offline/create-offline-store.js +1 -5
  1284. package/dist/offline/create-offline-store.js.map +1 -1
  1285. package/dist/offline/create-offline-sync.cjs +1 -1
  1286. package/dist/offline/create-offline-sync.cjs.map +1 -1
  1287. package/dist/offline/create-offline-sync.js +9 -14
  1288. package/dist/offline/create-offline-sync.js.map +1 -1
  1289. package/dist/offline/use-offline-sync.cjs.map +1 -1
  1290. package/dist/offline/use-offline-sync.js.map +1 -1
  1291. package/dist/perf/cache-size.cjs.map +1 -1
  1292. package/dist/perf/cache-size.js.map +1 -1
  1293. package/dist/perf/device.cjs.map +1 -1
  1294. package/dist/perf/device.js.map +1 -1
  1295. package/dist/perf/format.cjs.map +1 -1
  1296. package/dist/perf/format.js.map +1 -1
  1297. package/dist/perf/profiler.cjs.map +1 -1
  1298. package/dist/perf/profiler.js.map +1 -1
  1299. package/dist/push/use-push-subscription.cjs.map +1 -1
  1300. package/dist/push/use-push-subscription.js.map +1 -1
  1301. package/dist/push/utils.cjs.map +1 -1
  1302. package/dist/push/utils.js.map +1 -1
  1303. package/dist/push/web-push-client.cjs.map +1 -1
  1304. package/dist/push/web-push-client.js.map +1 -1
  1305. package/dist/query/QueryProvider.cjs.map +1 -1
  1306. package/dist/query/QueryProvider.js.map +1 -1
  1307. package/dist/query/constants.cjs.map +1 -1
  1308. package/dist/query/constants.js.map +1 -1
  1309. package/dist/query/create-query-keys.cjs.map +1 -1
  1310. package/dist/query/create-query-keys.js.map +1 -1
  1311. package/dist/query/foreign-client-warning.cjs.map +1 -1
  1312. package/dist/query/foreign-client-warning.js.map +1 -1
  1313. package/dist/query/offline-persistence.cjs +1 -1
  1314. package/dist/query/offline-persistence.cjs.map +1 -1
  1315. package/dist/query/offline-persistence.js +2 -10
  1316. package/dist/query/offline-persistence.js.map +1 -1
  1317. package/dist/query/optimistic.cjs.map +1 -1
  1318. package/dist/query/optimistic.js.map +1 -1
  1319. package/dist/query/pagination.cjs.map +1 -1
  1320. package/dist/query/pagination.js.map +1 -1
  1321. package/dist/query/retry-policy.cjs.map +1 -1
  1322. package/dist/query/retry-policy.js.map +1 -1
  1323. package/dist/query/use-cursor-query.cjs.map +1 -1
  1324. package/dist/query/use-cursor-query.js.map +1 -1
  1325. package/dist/query/use-offline-mutation.cjs.map +1 -1
  1326. package/dist/query/use-offline-mutation.js.map +1 -1
  1327. package/dist/query/use-paginated-query.cjs.map +1 -1
  1328. package/dist/query/use-paginated-query.js.map +1 -1
  1329. package/dist/router/AppRouter.cjs.map +1 -1
  1330. package/dist/router/AppRouter.js.map +1 -1
  1331. package/dist/router/RouteGuard.cjs.map +1 -1
  1332. package/dist/router/RouteGuard.js.map +1 -1
  1333. package/dist/router/index.js +2 -2
  1334. package/dist/share/share-or-download.cjs.map +1 -1
  1335. package/dist/share/share-or-download.js.map +1 -1
  1336. package/dist/share/share.cjs.map +1 -1
  1337. package/dist/share/share.js.map +1 -1
  1338. package/dist/sse/create-event-stream.cjs +1 -1
  1339. package/dist/sse/create-event-stream.cjs.map +1 -1
  1340. package/dist/sse/create-event-stream.js +44 -30
  1341. package/dist/sse/create-event-stream.js.map +1 -1
  1342. package/dist/sse/ticket-event-stream.cjs +2 -0
  1343. package/dist/sse/ticket-event-stream.cjs.map +1 -0
  1344. package/dist/sse/ticket-event-stream.js +41 -0
  1345. package/dist/sse/ticket-event-stream.js.map +1 -0
  1346. package/dist/sse/use-event-stream.cjs +1 -1
  1347. package/dist/sse/use-event-stream.cjs.map +1 -1
  1348. package/dist/sse/use-event-stream.js +7 -4
  1349. package/dist/sse/use-event-stream.js.map +1 -1
  1350. package/dist/store/create-selectors.cjs.map +1 -1
  1351. package/dist/store/create-selectors.js.map +1 -1
  1352. package/dist/store/create-store.cjs.map +1 -1
  1353. package/dist/store/create-store.js.map +1 -1
  1354. package/dist/sw/background-sync.cjs.map +1 -1
  1355. package/dist/sw/background-sync.js.map +1 -1
  1356. package/dist/sw/cache-inspect.cjs.map +1 -1
  1357. package/dist/sw/cache-inspect.js.map +1 -1
  1358. package/dist/sw/cache.cjs +1 -1
  1359. package/dist/sw/cache.cjs.map +1 -1
  1360. package/dist/sw/cache.js +2 -6
  1361. package/dist/sw/cache.js.map +1 -1
  1362. package/dist/sw/create-push-handler.cjs.map +1 -1
  1363. package/dist/sw/create-push-handler.js.map +1 -1
  1364. package/dist/sw/credential-headers.cjs.map +1 -1
  1365. package/dist/sw/credential-headers.js.map +1 -1
  1366. package/dist/sw/periodic-sync.cjs.map +1 -1
  1367. package/dist/sw/periodic-sync.js.map +1 -1
  1368. package/dist/sw/register-service-worker.cjs.map +1 -1
  1369. package/dist/sw/register-service-worker.js.map +1 -1
  1370. package/dist/sw/session-data.cjs.map +1 -1
  1371. package/dist/sw/session-data.js.map +1 -1
  1372. package/dist/tabular/assets.cjs.map +1 -1
  1373. package/dist/tabular/assets.js.map +1 -1
  1374. package/dist/tabular/cache.cjs.map +1 -1
  1375. package/dist/tabular/cache.js.map +1 -1
  1376. package/dist/tabular/compact.cjs.map +1 -1
  1377. package/dist/tabular/compact.js.map +1 -1
  1378. package/dist/tabular/exceptions.cjs.map +1 -1
  1379. package/dist/tabular/exceptions.js.map +1 -1
  1380. package/dist/tabular/manifest.cjs.map +1 -1
  1381. package/dist/tabular/manifest.js.map +1 -1
  1382. package/dist/tabular/predictor.cjs.map +1 -1
  1383. package/dist/tabular/predictor.js.map +1 -1
  1384. package/dist/tabular/use-tabular-predictor.cjs.map +1 -1
  1385. package/dist/tabular/use-tabular-predictor.js.map +1 -1
  1386. package/dist/telemetry/TelemetryProvider.cjs.map +1 -1
  1387. package/dist/telemetry/TelemetryProvider.js.map +1 -1
  1388. package/dist/telemetry/app-error-adapter.cjs.map +1 -1
  1389. package/dist/telemetry/app-error-adapter.js.map +1 -1
  1390. package/dist/telemetry/app-error-queue.cjs.map +1 -1
  1391. package/dist/telemetry/app-error-queue.js.map +1 -1
  1392. package/dist/telemetry/app-error-reporter.cjs.map +1 -1
  1393. package/dist/telemetry/app-error-reporter.js.map +1 -1
  1394. package/dist/telemetry/app-error-schema.cjs.map +1 -1
  1395. package/dist/telemetry/app-error-schema.js.map +1 -1
  1396. package/dist/telemetry/app-error-transport.cjs.map +1 -1
  1397. package/dist/telemetry/app-error-transport.js.map +1 -1
  1398. package/dist/telemetry/console-adapter.cjs.map +1 -1
  1399. package/dist/telemetry/console-adapter.js.map +1 -1
  1400. package/dist/telemetry/describe-app-error.cjs.map +1 -1
  1401. package/dist/telemetry/describe-app-error.js.map +1 -1
  1402. package/dist/telemetry/posthog-adapter.cjs +1 -1
  1403. package/dist/telemetry/posthog-adapter.cjs.map +1 -1
  1404. package/dist/telemetry/posthog-adapter.js +1 -5
  1405. package/dist/telemetry/posthog-adapter.js.map +1 -1
  1406. package/dist/telemetry/sentry-adapter.cjs.map +1 -1
  1407. package/dist/telemetry/sentry-adapter.js.map +1 -1
  1408. package/dist/tempest-react-sdk.cjs +1 -1
  1409. package/dist/tempest-react-sdk.d.ts +440 -7
  1410. package/dist/tempest-react-sdk.js +122 -120
  1411. package/dist/testing/create-mock-handlers.cjs.map +1 -1
  1412. package/dist/testing/create-mock-handlers.js.map +1 -1
  1413. package/dist/testing.js +1 -2
  1414. package/dist/theme/ThemeProvider.cjs.map +1 -1
  1415. package/dist/theme/ThemeProvider.js.map +1 -1
  1416. package/dist/theme/apply-theme.cjs.map +1 -1
  1417. package/dist/theme/apply-theme.js.map +1 -1
  1418. package/dist/theme/color.cjs.map +1 -1
  1419. package/dist/theme/color.js.map +1 -1
  1420. package/dist/theme/create-theme.cjs.map +1 -1
  1421. package/dist/theme/create-theme.js.map +1 -1
  1422. package/dist/theme/data-viz-ramps.cjs.map +1 -1
  1423. package/dist/theme/data-viz-ramps.js.map +1 -1
  1424. package/dist/theme/initial-theme.cjs.map +1 -1
  1425. package/dist/theme/initial-theme.js.map +1 -1
  1426. package/dist/theme/inverse-render.cjs.map +1 -1
  1427. package/dist/theme/inverse-render.js.map +1 -1
  1428. package/dist/theme/inverse-restore.cjs.map +1 -1
  1429. package/dist/theme/inverse-restore.js.map +1 -1
  1430. package/dist/theme/inverse-surface.cjs.map +1 -1
  1431. package/dist/theme/inverse-surface.js.map +1 -1
  1432. package/dist/theme/status-tokens.cjs.map +1 -1
  1433. package/dist/theme/status-tokens.js.map +1 -1
  1434. package/dist/theme/theme-presets.cjs.map +1 -1
  1435. package/dist/theme/theme-presets.js.map +1 -1
  1436. package/dist/utils/absent.cjs.map +1 -1
  1437. package/dist/utils/absent.js.map +1 -1
  1438. package/dist/utils/arrays.cjs.map +1 -1
  1439. package/dist/utils/arrays.js.map +1 -1
  1440. package/dist/utils/base64.cjs.map +1 -1
  1441. package/dist/utils/base64.js.map +1 -1
  1442. package/dist/utils/cn.cjs.map +1 -1
  1443. package/dist/utils/cn.js.map +1 -1
  1444. package/dist/utils/compare-values.cjs.map +1 -1
  1445. package/dist/utils/compare-values.js.map +1 -1
  1446. package/dist/utils/compressed-storage.cjs.map +1 -1
  1447. package/dist/utils/compressed-storage.js.map +1 -1
  1448. package/dist/utils/csv.cjs.map +1 -1
  1449. package/dist/utils/csv.js.map +1 -1
  1450. package/dist/utils/dev-mode.cjs.map +1 -1
  1451. package/dist/utils/dev-mode.js.map +1 -1
  1452. package/dist/utils/duplicate-instance.cjs.map +1 -1
  1453. package/dist/utils/duplicate-instance.js.map +1 -1
  1454. package/dist/utils/format.cjs.map +1 -1
  1455. package/dist/utils/format.js.map +1 -1
  1456. package/dist/utils/functions.cjs +1 -1
  1457. package/dist/utils/functions.cjs.map +1 -1
  1458. package/dist/utils/functions.js +1 -1
  1459. package/dist/utils/functions.js.map +1 -1
  1460. package/dist/utils/guards.cjs.map +1 -1
  1461. package/dist/utils/guards.js.map +1 -1
  1462. package/dist/utils/ids.cjs.map +1 -1
  1463. package/dist/utils/ids.js.map +1 -1
  1464. package/dist/utils/intl-cache.cjs.map +1 -1
  1465. package/dist/utils/intl-cache.js.map +1 -1
  1466. package/dist/utils/json-frame.cjs.map +1 -1
  1467. package/dist/utils/json-frame.js.map +1 -1
  1468. package/dist/utils/numbers.cjs.map +1 -1
  1469. package/dist/utils/numbers.js.map +1 -1
  1470. package/dist/utils/objects.cjs.map +1 -1
  1471. package/dist/utils/objects.js.map +1 -1
  1472. package/dist/utils/owner-fingerprint.cjs.map +1 -1
  1473. package/dist/utils/owner-fingerprint.js.map +1 -1
  1474. package/dist/utils/promises.cjs.map +1 -1
  1475. package/dist/utils/promises.js.map +1 -1
  1476. package/dist/utils/relative-time.cjs.map +1 -1
  1477. package/dist/utils/relative-time.js.map +1 -1
  1478. package/dist/utils/safe-url.cjs.map +1 -1
  1479. package/dist/utils/safe-url.js.map +1 -1
  1480. package/dist/utils/schema-like.cjs.map +1 -1
  1481. package/dist/utils/schema-like.js.map +1 -1
  1482. package/dist/utils/storage.cjs +1 -1
  1483. package/dist/utils/storage.cjs.map +1 -1
  1484. package/dist/utils/storage.js +2 -2
  1485. package/dist/utils/storage.js.map +1 -1
  1486. package/dist/utils/strings.cjs.map +1 -1
  1487. package/dist/utils/strings.js.map +1 -1
  1488. package/dist/utils/xlsx.cjs.map +1 -1
  1489. package/dist/utils/xlsx.js.map +1 -1
  1490. package/dist/vision/core/canvas.cjs.map +1 -1
  1491. package/dist/vision/core/canvas.js.map +1 -1
  1492. package/dist/vision/core/dtypes.cjs.map +1 -1
  1493. package/dist/vision/core/dtypes.js.map +1 -1
  1494. package/dist/vision/core/exceptions.cjs.map +1 -1
  1495. package/dist/vision/core/exceptions.js.map +1 -1
  1496. package/dist/vision/core/graph.cjs.map +1 -1
  1497. package/dist/vision/core/graph.js.map +1 -1
  1498. package/dist/vision/core/metadata.cjs +1 -1
  1499. package/dist/vision/core/metadata.cjs.map +1 -1
  1500. package/dist/vision/core/metadata.js +9 -26
  1501. package/dist/vision/core/metadata.js.map +1 -1
  1502. package/dist/vision/core/providers.cjs.map +1 -1
  1503. package/dist/vision/core/providers.js.map +1 -1
  1504. package/dist/vision/core/session.cjs.map +1 -1
  1505. package/dist/vision/core/session.js.map +1 -1
  1506. package/dist/vision/core/timing.cjs.map +1 -1
  1507. package/dist/vision/core/timing.js.map +1 -1
  1508. package/dist/vision/fusion.cjs.map +1 -1
  1509. package/dist/vision/fusion.js.map +1 -1
  1510. package/dist/vision/index.cjs.map +1 -1
  1511. package/dist/vision/index.js.map +1 -1
  1512. package/dist/vision/io/image.cjs.map +1 -1
  1513. package/dist/vision/io/image.js.map +1 -1
  1514. package/dist/vision/labels.cjs.map +1 -1
  1515. package/dist/vision/labels.js.map +1 -1
  1516. package/dist/vision/luminance.cjs.map +1 -1
  1517. package/dist/vision/luminance.js.map +1 -1
  1518. package/dist/vision/normalization.cjs.map +1 -1
  1519. package/dist/vision/normalization.js.map +1 -1
  1520. package/dist/vision/postprocess/classification.cjs.map +1 -1
  1521. package/dist/vision/postprocess/classification.js.map +1 -1
  1522. package/dist/vision/postprocess/detection.cjs.map +1 -1
  1523. package/dist/vision/postprocess/detection.js.map +1 -1
  1524. package/dist/vision/postprocess/segmentation.cjs.map +1 -1
  1525. package/dist/vision/postprocess/segmentation.js.map +1 -1
  1526. package/dist/vision/preprocess/image.cjs.map +1 -1
  1527. package/dist/vision/preprocess/image.js.map +1 -1
  1528. package/dist/vision/preprocess/pipeline.cjs.map +1 -1
  1529. package/dist/vision/preprocess/pipeline.js.map +1 -1
  1530. package/dist/vision/results.cjs.map +1 -1
  1531. package/dist/vision/results.js.map +1 -1
  1532. package/dist/vision/tasks/base.cjs.map +1 -1
  1533. package/dist/vision/tasks/base.js.map +1 -1
  1534. package/dist/vision/tasks/classifier.cjs.map +1 -1
  1535. package/dist/vision/tasks/classifier.js.map +1 -1
  1536. package/dist/vision/tasks/detectClassify.cjs.map +1 -1
  1537. package/dist/vision/tasks/detectClassify.js.map +1 -1
  1538. package/dist/vision/tasks/detector.cjs.map +1 -1
  1539. package/dist/vision/tasks/detector.js.map +1 -1
  1540. package/dist/vision/tasks/segmenter.cjs.map +1 -1
  1541. package/dist/vision/tasks/segmenter.js.map +1 -1
  1542. package/dist/vision/types.cjs.map +1 -1
  1543. package/dist/vision/types.js.map +1 -1
  1544. package/dist/vision/use-camera-stream.cjs +1 -1
  1545. package/dist/vision/use-camera-stream.cjs.map +1 -1
  1546. package/dist/vision/use-camera-stream.js +3 -9
  1547. package/dist/vision/use-camera-stream.js.map +1 -1
  1548. package/dist/vision/use-live-luminance.cjs +1 -1
  1549. package/dist/vision/use-live-luminance.cjs.map +1 -1
  1550. package/dist/vision/use-live-luminance.js +1 -5
  1551. package/dist/vision/use-live-luminance.js.map +1 -1
  1552. package/dist/vite/base-url.cjs.map +1 -1
  1553. package/dist/vite/base-url.js.map +1 -1
  1554. package/dist/vite/create-vite-config.cjs.map +1 -1
  1555. package/dist/vite/create-vite-config.js.map +1 -1
  1556. package/dist/vite/narrow-tokens.cjs.map +1 -1
  1557. package/dist/vite/narrow-tokens.js.map +1 -1
  1558. package/dist/vite/tempest-csp.cjs +1 -1
  1559. package/dist/vite/tempest-csp.cjs.map +1 -1
  1560. package/dist/vite/tempest-csp.js +2 -10
  1561. package/dist/vite/tempest-csp.js.map +1 -1
  1562. package/dist/vite/tempest-icons.cjs.map +1 -1
  1563. package/dist/vite/tempest-icons.js.map +1 -1
  1564. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  1565. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  1566. package/dist/vite/tempest-pwa-dev-sw.js +9 -16
  1567. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  1568. package/dist/vite/tempest-pwa-icons.cjs.map +1 -1
  1569. package/dist/vite/tempest-pwa-icons.js.map +1 -1
  1570. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  1571. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  1572. package/dist/vite/tempest-styles.cjs.map +1 -1
  1573. package/dist/vite/tempest-styles.js.map +1 -1
  1574. package/dist/vite/tempest-vitest.cjs.map +1 -1
  1575. package/dist/vite/tempest-vitest.js.map +1 -1
  1576. package/dist/webrtc/link-stats.cjs.map +1 -1
  1577. package/dist/webrtc/link-stats.js.map +1 -1
  1578. package/dist/webrtc/mesh-quality.cjs.map +1 -1
  1579. package/dist/webrtc/mesh-quality.js.map +1 -1
  1580. package/dist/webrtc/opus-sdp.cjs.map +1 -1
  1581. package/dist/webrtc/opus-sdp.js.map +1 -1
  1582. package/dist/webrtc/peer-link.cjs +1 -1
  1583. package/dist/webrtc/peer-link.cjs.map +1 -1
  1584. package/dist/webrtc/peer-link.js +2 -5
  1585. package/dist/webrtc/peer-link.js.map +1 -1
  1586. package/dist/webrtc/peer-mesh.cjs +1 -1
  1587. package/dist/webrtc/peer-mesh.cjs.map +1 -1
  1588. package/dist/webrtc/peer-mesh.js +8 -24
  1589. package/dist/webrtc/peer-mesh.js.map +1 -1
  1590. package/dist/webrtc/sender-bitrate.cjs.map +1 -1
  1591. package/dist/webrtc/sender-bitrate.js.map +1 -1
  1592. package/dist/webrtc/use-link-stats.cjs.map +1 -1
  1593. package/dist/webrtc/use-link-stats.js.map +1 -1
  1594. package/dist/ws/create-web-socket.cjs +1 -1
  1595. package/dist/ws/create-web-socket.cjs.map +1 -1
  1596. package/dist/ws/create-web-socket.js +4 -22
  1597. package/dist/ws/create-web-socket.js.map +1 -1
  1598. package/dist/ws/resilience.cjs.map +1 -1
  1599. package/dist/ws/resilience.js.map +1 -1
  1600. package/dist/ws/use-web-socket.cjs.map +1 -1
  1601. package/dist/ws/use-web-socket.js.map +1 -1
  1602. package/package.json +9 -6
  1603. package/template/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.cjs","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — trigger and children are the two halves, placement\n * is where it lands, portal is whether it escapes the tree, and open/onOpenChange/defaultOpen is the standard controlled-\n * or-not pair. closeOnEsc and closeOnOutsideClick are separate because a popover\n * holding a form wants one and not the other.\n */\nimport { useCallback, useEffect, useId, useState } from \"react\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { usePortalTabOrder } from \"@/components/Portal/tab-bridge\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Popover.module.css\";\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface PopoverProps {\n /** Trigger element. Receives `onClick`/`aria-expanded`/`aria-controls`. */\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n }>;\n children: ReactNode;\n placement?: PopoverPlacement;\n /**\n * Render the panel in a portal, positioned against the trigger. Default `true`.\n *\n * In flow, any ancestor with `overflow` other than `visible` clips the panel —\n * inside a `DataTable` cell only 3% of it was visible (measured in Chrome at\n * 1440 px). In a portal it escapes the clip, flips to the opposite side when\n * the requested one has no room, and follows the trigger on scroll and resize.\n * `false` keeps the in-flow panel.\n */\n portal?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the user toggles or dismisses. */\n onOpenChange?: (open: boolean) => void;\n /** Default open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Close on Escape. Default true. */\n closeOnEsc?: boolean;\n /** Close on outside click. Default true. */\n closeOnOutsideClick?: boolean;\n className?: string;\n}\n\n/** Gap between trigger and panel, in px — the in-flow CSS uses the same 8 px. */\nconst POPOVER_OFFSET = 8;\n\n/**\n * Lightweight popover. Renders a panel anchored to a trigger, dismissed on\n * outside click / Escape.\n *\n * Portalled by default, with viewport-aware placement: the panel flips to the\n * opposite side when the requested one overflows, and is clamped inside the\n * viewport otherwise.\n */\nexport function Popover({\n trigger,\n children,\n placement = \"bottom\",\n portal = true,\n open,\n onOpenChange,\n defaultOpen = false,\n closeOnEsc = true,\n closeOnOutsideClick = true,\n className,\n}: PopoverProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [panelNode, setPanelNode] = useState<HTMLDivElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: panelNode,\n side: placement,\n align: \"center\",\n offset: POPOVER_OFFSET,\n enabled: portal && isOpen,\n });\n usePortalTabOrder({ enabled: portal && isOpen, anchor: rootNode, panel: panelNode });\n\n const setOpen = useCallback(\n (next: boolean): void => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useEscapeLayer(isOpen && closeOnEsc, () => setOpen(false));\n\n /**\n * Dismiss on a press outside both trigger and panel.\n *\n * The panel is checked on its own because in a portal it is not inside the\n * trigger's wrapper, and a press inside it — on a form field, say — would\n * otherwise count as outside.\n */\n useEffect(() => {\n if (!isOpen) return;\n const onDown = (event: MouseEvent): void => {\n if (!closeOnOutsideClick) return;\n const target = event.target as Node;\n if (rootNode?.contains(target) || panelNode?.contains(target)) return;\n setOpen(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => {\n window.removeEventListener(\"mousedown\", onDown);\n };\n }, [isOpen, closeOnOutsideClick, setOpen, rootNode, panelNode]);\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n setOpen(!isOpen);\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n \"aria-expanded\": isOpen,\n \"aria-controls\": id,\n },\n } as ReactElement;\n\n const panel = (\n <div\n ref={setPanelNode}\n id={id}\n role=\"dialog\"\n className={cn(styles.popover, portal ? styles.portalled : styles[placement], className)}\n style={floatingStyle}\n >\n {children}\n </div>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {isOpen && (portal ? <Portal>{panel}</Portal> : panel)}\n </span>\n );\n}\n"],"mappings":"yRAkDA,IAAM,EAAiB,EAUvB,SAAgB,EAAQ,CACpB,UACA,WACA,YAAY,SACZ,SAAS,GACT,OACA,eACA,cAAc,GACd,aAAa,GACb,sBAAsB,GACtB,aACa,CACb,IAAM,EAAe,IAAS,IAAA,GACxB,CAAC,EAAc,IAAA,EAAmB,EAAA,SAAA,CAAkB,CAAW,EAC/D,EAAS,EAAe,EAAO,EAC/B,GAAA,EAAK,EAAA,MAAA,CAAM,EACX,CAAC,EAAU,IAAA,EAAe,EAAA,SAAA,CAAiC,IAAI,EAC/D,CAAC,EAAW,IAAA,EAAgB,EAAA,SAAA,CAAgC,IAAI,EAChE,EAAgB,EAAA,kBAAkB,CACpC,OAAQ,EACR,SAAU,EACV,KAAM,EACN,MAAO,SACP,OAAQ,EACR,QAAS,GAAU,CACvB,CAAC,EACD,EAAA,kBAAkB,CAAE,QAAS,GAAU,EAAQ,OAAQ,EAAU,MAAO,CAAU,CAAC,EAEnF,IAAM,GAAA,EAAU,EAAA,YAAA,CACX,GAAwB,CAChB,GAAc,EAAgB,CAAI,EACvC,IAAe,CAAI,CACvB,EACA,CAAC,EAAc,CAAY,CAC/B,EAEA,EAAA,eAAe,GAAU,MAAkB,EAAQ,EAAK,CAAC,GASzD,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,EAAQ,OACb,IAAM,EAAU,GAA4B,CACxC,GAAI,CAAC,EAAqB,OAC1B,IAAM,EAAS,EAAM,OACjB,GAAU,SAAS,CAAM,GAAK,GAAW,SAAS,CAAM,GAC5D,EAAQ,EAAK,CACjB,EAEA,OADA,OAAO,iBAAiB,YAAa,CAAM,MAC9B,CACT,OAAO,oBAAoB,YAAa,CAAM,CAClD,CACJ,EAAG,CAAC,EAAQ,EAAqB,EAAS,EAAU,CAAS,CAAC,EAE9D,IAAM,EAAsB,GAAkC,CAC1D,EAAQ,MAAM,UAAU,CAAK,EAC7B,EAAQ,CAAC,CAAM,CACnB,EAEM,EAAe,CACjB,GAAG,EACH,MAAO,CACH,GAAG,EAAQ,MACX,QAAS,EACT,gBAAiB,EACjB,gBAAiB,CACrB,CACJ,EAEM,GACF,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,IAAK,EACD,KACJ,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,EAAS,EAAA,QAAO,UAAY,EAAA,QAAO,GAAY,CAAS,EACtF,MAAO,EAEN,UACA,CAAA,EAGT,OACI,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,IAAK,EAAa,UAAW,EAAA,QAAO,KAA1C,SAAA,CACK,EACA,IAAW,GAAS,EAAA,EAAA,IAAA,CAAC,EAAA,OAAD,CAAA,SAAS,CAAc,CAAA,EAAI,EAC9C,GAEd"}
1
+ {"version":3,"file":"Popover.cjs","names":["useState","useId","useAnchorPosition","useCallback","cn","styles","Portal","require_cn","require_escape_layer","require_Portal","require_anchor_position","require_tab_bridge","require_Popover_module","react","react_jsx_runtime","POPOVER_OFFSET","Popover","isControlled","open","internalOpen","setInternalOpen","defaultOpen","isOpen","id","rootNode","setRootNode","panelNode","setPanelNode","floatingStyle","placement","portal","setOpen","next","onOpenChange","closeOnEsc","onDown","closeOnOutsideClick","target","event","handleTriggerClick","trigger","triggerClone","panel","className"],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — trigger and children are the two halves, placement\n * is where it lands, portal is whether it escapes the tree, and open/onOpenChange/defaultOpen is the standard controlled-\n * or-not pair. closeOnEsc and closeOnOutsideClick are separate because a popover\n * holding a form wants one and not the other.\n */\nimport { useCallback, useEffect, useId, useState } from \"react\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { usePortalTabOrder } from \"@/components/Portal/tab-bridge\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Popover.module.css\";\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface PopoverProps {\n /** Trigger element. Receives `onClick`/`aria-expanded`/`aria-controls`. */\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n }>;\n children: ReactNode;\n placement?: PopoverPlacement;\n /**\n * Render the panel in a portal, positioned against the trigger. Default `true`.\n *\n * In flow, any ancestor with `overflow` other than `visible` clips the panel —\n * inside a `DataTable` cell only 3% of it was visible (measured in Chrome at\n * 1440 px). In a portal it escapes the clip, flips to the opposite side when\n * the requested one has no room, and follows the trigger on scroll and resize.\n * `false` keeps the in-flow panel.\n */\n portal?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the user toggles or dismisses. */\n onOpenChange?: (open: boolean) => void;\n /** Default open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Close on Escape. Default true. */\n closeOnEsc?: boolean;\n /** Close on outside click. Default true. */\n closeOnOutsideClick?: boolean;\n className?: string;\n}\n\n/** Gap between trigger and panel, in px — the in-flow CSS uses the same 8 px. */\nconst POPOVER_OFFSET = 8;\n\n/**\n * Lightweight popover. Renders a panel anchored to a trigger, dismissed on\n * outside click / Escape.\n *\n * Portalled by default, with viewport-aware placement: the panel flips to the\n * opposite side when the requested one overflows, and is clamped inside the\n * viewport otherwise.\n */\nexport function Popover({\n trigger,\n children,\n placement = \"bottom\",\n portal = true,\n open,\n onOpenChange,\n defaultOpen = false,\n closeOnEsc = true,\n closeOnOutsideClick = true,\n className,\n}: PopoverProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [panelNode, setPanelNode] = useState<HTMLDivElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: panelNode,\n side: placement,\n align: \"center\",\n offset: POPOVER_OFFSET,\n enabled: portal && isOpen,\n });\n usePortalTabOrder({ enabled: portal && isOpen, anchor: rootNode, panel: panelNode });\n\n const setOpen = useCallback(\n (next: boolean): void => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useEscapeLayer(isOpen && closeOnEsc, () => setOpen(false));\n\n /**\n * Dismiss on a press outside both trigger and panel.\n *\n * The panel is checked on its own because in a portal it is not inside the\n * trigger's wrapper, and a press inside it — on a form field, say — would\n * otherwise count as outside.\n */\n useEffect(() => {\n if (!isOpen) return;\n const onDown = (event: MouseEvent): void => {\n if (!closeOnOutsideClick) return;\n const target = event.target as Node;\n if (rootNode?.contains(target) || panelNode?.contains(target)) return;\n setOpen(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => {\n window.removeEventListener(\"mousedown\", onDown);\n };\n }, [isOpen, closeOnOutsideClick, setOpen, rootNode, panelNode]);\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n setOpen(!isOpen);\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n \"aria-expanded\": isOpen,\n \"aria-controls\": id,\n },\n } as ReactElement;\n\n const panel = (\n <div\n ref={setPanelNode}\n id={id}\n role=\"dialog\"\n className={cn(styles.popover, portal ? styles.portalled : styles[placement], className)}\n style={floatingStyle}\n >\n {children}\n </div>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {isOpen && (portal ? <Portal>{panel}</Portal> : panel)}\n </span>\n );\n}\n"],"mappings":"A,yRAkDA,IAAMe,EAAiB,EAUvB,SAAgBC,EAAQ,CACpB,UACA,WACA,YAAY,SACZ,SAAS,GACT,OACA,eACA,cAAc,GACd,aAAa,GACb,sBAAsB,GACtB,aACa,CACb,IAAMC,EAAeC,IAAS,IAAA,GACxB,CAACC,EAAcC,IAAA,EAAmBpB,EAAAA,SAAAA,CAAkBqB,CAAW,EAC/DC,EAASL,EAAeC,EAAOC,EAC/BI,GAAA,EAAKtB,EAAAA,MAAAA,CAAM,EACX,CAACuB,EAAUC,IAAA,EAAezB,EAAAA,SAAAA,CAAiC,IAAI,EAC/D,CAAC0B,EAAWC,IAAA,EAAgB3B,EAAAA,SAAAA,CAAgC,IAAI,EAChE4B,EAAgB1B,EAAAA,kBAAkB,CACpC,OAAQsB,EACR,SAAUE,EACV,KAAMG,EACN,MAAO,SACP,OAAQd,EACR,QAASe,GAAUR,CACvB,CAAC,EACDX,EAAA,kBAAkB,CAAE,QAASmB,GAAUR,EAAQ,OAAQE,EAAU,MAAOE,CAAU,CAAC,EAEnF,IAAMK,GAAA,EAAU5B,EAAAA,YAAAA,CACX,GAAwB,CAChBc,GAAcG,EAAgBY,CAAI,EACvCC,IAAeD,CAAI,CACvB,EACA,CAACf,EAAcgB,CAAY,CAC/B,EAEAzB,EAAA,eAAec,GAAUY,MAAkBH,EAAQ,EAAK,CAAC,GASzD,EAAAlB,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACS,EAAQ,OACb,IAAMa,EAAU,GAA4B,CACxC,GAAI,CAACC,EAAqB,OAC1B,IAAMC,EAASC,EAAM,OACjBd,GAAU,SAASa,CAAM,GAAKX,GAAW,SAASW,CAAM,GAC5DN,EAAQ,EAAK,CACjB,EAEA,OADA,OAAO,iBAAiB,YAAaI,CAAM,MAC9B,CACT,OAAO,oBAAoB,YAAaA,CAAM,CAClD,CACJ,EAAG,CAACb,EAAQc,EAAqBL,EAASP,EAAUE,CAAS,CAAC,EAE9D,IAAMa,EAAsB,GAAkC,CAC1DC,EAAQ,MAAM,UAAUF,CAAK,EAC7BP,EAAQ,CAACT,CAAM,CACnB,EAEMmB,EAAe,CACjB,GAAGD,EACH,MAAO,CACH,GAAGA,EAAQ,MACX,QAASD,EACT,gBAAiBjB,EACjB,gBAAiBC,CACrB,CACJ,EAEMmB,GACF,EAAA5B,EAAA,IAAA,CAAC,MAAD,CACI,IAAKa,EACD,KACJ,KAAK,SACL,UAAWvB,EAAAA,GAAGC,EAAAA,QAAO,QAASyB,EAASzB,EAAAA,QAAO,UAAYA,EAAAA,QAAOwB,GAAYc,CAAS,EACtF,MAAOf,EAEN,UACA,CAAA,EAGT,OACI,EAAAd,EAAA,KAAA,CAAC,OAAD,CAAM,IAAKW,EAAa,UAAWpB,EAAAA,QAAO,KAA1C,SAAA,CACKoC,EACAnB,IAAWQ,GAAS,EAAAhB,EAAA,IAAA,CAACR,EAAAA,OAAD,CAAA,SAASoC,CAAc,CAAA,EAAIA,EAC9C,C,EAEd,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — trigger and children are the two halves, placement\n * is where it lands, portal is whether it escapes the tree, and open/onOpenChange/defaultOpen is the standard controlled-\n * or-not pair. closeOnEsc and closeOnOutsideClick are separate because a popover\n * holding a form wants one and not the other.\n */\nimport { useCallback, useEffect, useId, useState } from \"react\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { usePortalTabOrder } from \"@/components/Portal/tab-bridge\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Popover.module.css\";\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface PopoverProps {\n /** Trigger element. Receives `onClick`/`aria-expanded`/`aria-controls`. */\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n }>;\n children: ReactNode;\n placement?: PopoverPlacement;\n /**\n * Render the panel in a portal, positioned against the trigger. Default `true`.\n *\n * In flow, any ancestor with `overflow` other than `visible` clips the panel —\n * inside a `DataTable` cell only 3% of it was visible (measured in Chrome at\n * 1440 px). In a portal it escapes the clip, flips to the opposite side when\n * the requested one has no room, and follows the trigger on scroll and resize.\n * `false` keeps the in-flow panel.\n */\n portal?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the user toggles or dismisses. */\n onOpenChange?: (open: boolean) => void;\n /** Default open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Close on Escape. Default true. */\n closeOnEsc?: boolean;\n /** Close on outside click. Default true. */\n closeOnOutsideClick?: boolean;\n className?: string;\n}\n\n/** Gap between trigger and panel, in px — the in-flow CSS uses the same 8 px. */\nconst POPOVER_OFFSET = 8;\n\n/**\n * Lightweight popover. Renders a panel anchored to a trigger, dismissed on\n * outside click / Escape.\n *\n * Portalled by default, with viewport-aware placement: the panel flips to the\n * opposite side when the requested one overflows, and is clamped inside the\n * viewport otherwise.\n */\nexport function Popover({\n trigger,\n children,\n placement = \"bottom\",\n portal = true,\n open,\n onOpenChange,\n defaultOpen = false,\n closeOnEsc = true,\n closeOnOutsideClick = true,\n className,\n}: PopoverProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [panelNode, setPanelNode] = useState<HTMLDivElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: panelNode,\n side: placement,\n align: \"center\",\n offset: POPOVER_OFFSET,\n enabled: portal && isOpen,\n });\n usePortalTabOrder({ enabled: portal && isOpen, anchor: rootNode, panel: panelNode });\n\n const setOpen = useCallback(\n (next: boolean): void => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useEscapeLayer(isOpen && closeOnEsc, () => setOpen(false));\n\n /**\n * Dismiss on a press outside both trigger and panel.\n *\n * The panel is checked on its own because in a portal it is not inside the\n * trigger's wrapper, and a press inside it — on a form field, say — would\n * otherwise count as outside.\n */\n useEffect(() => {\n if (!isOpen) return;\n const onDown = (event: MouseEvent): void => {\n if (!closeOnOutsideClick) return;\n const target = event.target as Node;\n if (rootNode?.contains(target) || panelNode?.contains(target)) return;\n setOpen(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => {\n window.removeEventListener(\"mousedown\", onDown);\n };\n }, [isOpen, closeOnOutsideClick, setOpen, rootNode, panelNode]);\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n setOpen(!isOpen);\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n \"aria-expanded\": isOpen,\n \"aria-controls\": id,\n },\n } as ReactElement;\n\n const panel = (\n <div\n ref={setPanelNode}\n id={id}\n role=\"dialog\"\n className={cn(styles.popover, portal ? styles.portalled : styles[placement], className)}\n style={floatingStyle}\n >\n {children}\n </div>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {isOpen && (portal ? <Portal>{panel}</Portal> : panel)}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;AAkDA,IAAM,IAAiB;AAUvB,SAAgB,EAAQ,EACpB,YACA,aACA,eAAY,UACZ,YAAS,IACT,SACA,iBACA,iBAAc,IACd,gBAAa,IACb,yBAAsB,IACtB,gBACa;CACb,IAAM,IAAe,MAAS,KAAA,GACxB,CAAC,GAAc,KAAmB,EAAkB,CAAW,GAC/D,IAAS,IAAe,IAAO,GAC/B,IAAK,EAAM,GACX,CAAC,GAAU,KAAe,EAAiC,IAAI,GAC/D,CAAC,GAAW,KAAgB,EAAgC,IAAI,GAChE,IAAgB,EAAkB;EACpC,QAAQ;EACR,UAAU;EACV,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS,KAAU;CACvB,CAAC;CACD,EAAkB;EAAE,SAAS,KAAU;EAAQ,QAAQ;EAAU,OAAO;CAAU,CAAC;CAEnF,IAAM,IAAU,GACX,MAAwB;EAErB,AADK,KAAc,EAAgB,CAAI,GACvC,IAAe,CAAI;CACvB,GACA,CAAC,GAAc,CAAY,CAC/B;CAWA,AATA,EAAe,KAAU,SAAkB,EAAQ,EAAK,CAAC,GASzD,QAAgB;EACZ,IAAI,CAAC,GAAQ;EACb,IAAM,KAAU,MAA4B;GACxC,IAAI,CAAC,GAAqB;GAC1B,IAAM,IAAS,EAAM;GACjB,GAAU,SAAS,CAAM,KAAK,GAAW,SAAS,CAAM,KAC5D,EAAQ,EAAK;EACjB;EAEA,OADA,OAAO,iBAAiB,aAAa,CAAM,SAC9B;GACT,OAAO,oBAAoB,aAAa,CAAM;EAClD;CACJ,GAAG;EAAC;EAAQ;EAAqB;EAAS;EAAU;CAAS,CAAC;CAE9D,IAAM,KAAsB,MAAkC;EAE1D,AADA,EAAQ,MAAM,UAAU,CAAK,GAC7B,EAAQ,CAAC,CAAM;CACnB,GAEM,IAAe;EACjB,GAAG;EACH,OAAO;GACH,GAAG,EAAQ;GACX,SAAS;GACT,iBAAiB;GACjB,iBAAiB;EACrB;CACJ,GAEM,IACF,kBAAC,OAAD;EACI,KAAK;EACD;EACJ,MAAK;EACL,WAAW,EAAG,EAAO,SAAS,IAAS,EAAO,YAAY,EAAO,IAAY,CAAS;EACtF,OAAO;EAEN;CACA,CAAA;CAGT,OACI,kBAAC,QAAD;EAAM,KAAK;EAAa,WAAW,EAAO;EAA1C,UAAA,CACK,GACA,MAAW,IAAS,kBAAC,GAAD,EAAA,UAAS,EAAc,CAAA,IAAI,EAC9C;;AAEd"}
1
+ {"version":3,"file":"Popover.js","names":["styles","Popover_module_default","POPOVER_OFFSET","Popover","isControlled","open","internalOpen","setInternalOpen","useState","defaultOpen","isOpen","id","useId","rootNode","setRootNode","panelNode","setPanelNode","floatingStyle","useAnchorPosition","placement","portal","setOpen","useCallback","next","onOpenChange","useEscapeLayer","closeOnEsc","useEffect","onDown","closeOnOutsideClick","target","event","handleTriggerClick","trigger","triggerClone","panel","cn","className","Portal"],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — trigger and children are the two halves, placement\n * is where it lands, portal is whether it escapes the tree, and open/onOpenChange/defaultOpen is the standard controlled-\n * or-not pair. closeOnEsc and closeOnOutsideClick are separate because a popover\n * holding a form wants one and not the other.\n */\nimport { useCallback, useEffect, useId, useState } from \"react\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { useEscapeLayer } from \"@/components/Portal/escape-layer\";\nimport { usePortalTabOrder } from \"@/components/Portal/tab-bridge\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Popover.module.css\";\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface PopoverProps {\n /** Trigger element. Receives `onClick`/`aria-expanded`/`aria-controls`. */\n trigger: ReactElement<{\n onClick?: (e: React.MouseEvent) => void;\n \"aria-expanded\"?: boolean;\n \"aria-controls\"?: string;\n }>;\n children: ReactNode;\n placement?: PopoverPlacement;\n /**\n * Render the panel in a portal, positioned against the trigger. Default `true`.\n *\n * In flow, any ancestor with `overflow` other than `visible` clips the panel —\n * inside a `DataTable` cell only 3% of it was visible (measured in Chrome at\n * 1440 px). In a portal it escapes the clip, flips to the opposite side when\n * the requested one has no room, and follows the trigger on scroll and resize.\n * `false` keeps the in-flow panel.\n */\n portal?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the user toggles or dismisses. */\n onOpenChange?: (open: boolean) => void;\n /** Default open state for uncontrolled usage. */\n defaultOpen?: boolean;\n /** Close on Escape. Default true. */\n closeOnEsc?: boolean;\n /** Close on outside click. Default true. */\n closeOnOutsideClick?: boolean;\n className?: string;\n}\n\n/** Gap between trigger and panel, in px — the in-flow CSS uses the same 8 px. */\nconst POPOVER_OFFSET = 8;\n\n/**\n * Lightweight popover. Renders a panel anchored to a trigger, dismissed on\n * outside click / Escape.\n *\n * Portalled by default, with viewport-aware placement: the panel flips to the\n * opposite side when the requested one overflows, and is clamped inside the\n * viewport otherwise.\n */\nexport function Popover({\n trigger,\n children,\n placement = \"bottom\",\n portal = true,\n open,\n onOpenChange,\n defaultOpen = false,\n closeOnEsc = true,\n closeOnOutsideClick = true,\n className,\n}: PopoverProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n const id = useId();\n const [rootNode, setRootNode] = useState<HTMLSpanElement | null>(null);\n const [panelNode, setPanelNode] = useState<HTMLDivElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: rootNode,\n floating: panelNode,\n side: placement,\n align: \"center\",\n offset: POPOVER_OFFSET,\n enabled: portal && isOpen,\n });\n usePortalTabOrder({ enabled: portal && isOpen, anchor: rootNode, panel: panelNode });\n\n const setOpen = useCallback(\n (next: boolean): void => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n useEscapeLayer(isOpen && closeOnEsc, () => setOpen(false));\n\n /**\n * Dismiss on a press outside both trigger and panel.\n *\n * The panel is checked on its own because in a portal it is not inside the\n * trigger's wrapper, and a press inside it — on a form field, say — would\n * otherwise count as outside.\n */\n useEffect(() => {\n if (!isOpen) return;\n const onDown = (event: MouseEvent): void => {\n if (!closeOnOutsideClick) return;\n const target = event.target as Node;\n if (rootNode?.contains(target) || panelNode?.contains(target)) return;\n setOpen(false);\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => {\n window.removeEventListener(\"mousedown\", onDown);\n };\n }, [isOpen, closeOnOutsideClick, setOpen, rootNode, panelNode]);\n\n const handleTriggerClick = (event: React.MouseEvent): void => {\n trigger.props.onClick?.(event);\n setOpen(!isOpen);\n };\n\n const triggerClone = {\n ...trigger,\n props: {\n ...trigger.props,\n onClick: handleTriggerClick,\n \"aria-expanded\": isOpen,\n \"aria-controls\": id,\n },\n } as ReactElement;\n\n const panel = (\n <div\n ref={setPanelNode}\n id={id}\n role=\"dialog\"\n className={cn(styles.popover, portal ? styles.portalled : styles[placement], className)}\n style={floatingStyle}\n >\n {children}\n </div>\n );\n\n return (\n <span ref={setRootNode} className={styles.root}>\n {triggerClone}\n {isOpen && (portal ? <Portal>{panel}</Portal> : panel)}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;AAkDA,IAAME,IAAiB;AAUvB,SAAgBC,EAAQ,EACpB,YACA,aACA,eAAY,UACZ,YAAS,IACT,SACA,iBACA,iBAAc,IACd,gBAAa,IACb,yBAAsB,IACtB,gBACa;CACb,IAAMC,IAAeC,MAAS,KAAA,GACxB,CAACC,GAAcC,KAAmBC,EAAkBC,CAAW,GAC/DC,IAASN,IAAeC,IAAOC,GAC/BK,IAAKC,EAAM,GACX,CAACC,GAAUC,KAAeN,EAAiC,IAAI,GAC/D,CAACO,GAAWC,KAAgBR,EAAgC,IAAI,GAChES,IAAgBC,EAAkB;EACpC,QAAQL;EACR,UAAUE;EACV,MAAMI;EACN,OAAO;EACP,QAAQjB;EACR,SAASkB,KAAUV;CACvB,CAAC;CACD,EAAkB;EAAE,SAASU,KAAUV;EAAQ,QAAQG;EAAU,OAAOE;CAAU,CAAC;CAEnF,IAAMM,IAAUC,GACX,MAAwB;EAErB,AADKlB,KAAcG,EAAgBgB,CAAI,GACvCC,IAAeD,CAAI;CACvB,GACA,CAACnB,GAAcoB,CAAY,CAC/B;CAWA,AATAC,EAAef,KAAUgB,SAAkBL,EAAQ,EAAK,CAAC,GASzDM,QAAgB;EACZ,IAAI,CAACjB,GAAQ;EACb,IAAMkB,KAAU,MAA4B;GACxC,IAAI,CAACC,GAAqB;GAC1B,IAAMC,IAASC,EAAM;GACrB,AAAIlB,GAAU,SAASiB,CAAM,KAAKf,GAAW,SAASe,CAAM,KAC5DT,EAAQ,EAAK;EACjB;EAEA,OADA,OAAO,iBAAiB,aAAaO,CAAM,SAC9B;GACT,OAAO,oBAAoB,aAAaA,CAAM;EAClD;CACJ,GAAG;EAAClB;EAAQmB;EAAqBR;EAASR;EAAUE;CAAS,CAAC;CAE9D,IAAMiB,KAAsB,MAAkC;EAE1D,AADAC,EAAQ,MAAM,UAAUF,CAAK,GAC7BV,EAAQ,CAACX,CAAM;CACnB,GAEMwB,IAAe;EACjB,GAAGD;EACH,OAAO;GACH,GAAGA,EAAQ;GACX,SAASD;GACT,iBAAiBtB;GACjB,iBAAiBC;EACrB;CACJ,GAEMwB,IACF,kBAAC,OAAD;EACI,KAAKnB;EACD;EACJ,MAAK;EACL,WAAWoB,EAAGpC,EAAO,SAASoB,IAASpB,EAAO,YAAYA,EAAOmB,IAAYkB,CAAS;EACtF,OAAOpB;EAEN;CACA,CAAA;CAGT,OACI,kBAAC,QAAD;EAAM,KAAKH;EAAa,WAAWd,EAAO;EAA1C,UAAA,CACKkC,GACAxB,MAAWU,IAAS,kBAACkB,GAAD,EAAA,UAASH,EAAc,CAAA,IAAIA,EAC9C;;AAEd"}
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.module.cjs","names":[],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.popover {\n position: absolute;\n z-index: var(--tempest-z-popover);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\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-3) var(--tempest-space-4);\n min-width: 200px;\n max-width: 320px;\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n animation: tempest-popover-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.popover:focus {\n outline: none;\n}\n\n.portalled {\n --tempest-popover-tx: 0;\n}\n\n/* Placements (center-aligned across the trigger). */\n.top {\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.bottom {\n top: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.left {\n right: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n.right {\n left: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n\n@keyframes tempest-popover-in {\n from {\n opacity: 0;\n transform: translate(var(--tempest-popover-tx, -50%), 4px);\n }\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .popover {\n animation: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Popover.module.cjs","names":["root","popover","tempestPopoverIn","portalled","top","bottom","left","right","Popover_module_default"],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.popover {\n position: absolute;\n z-index: var(--tempest-z-popover);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\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-3) var(--tempest-space-4);\n min-width: 200px;\n max-width: 320px;\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n animation: tempest-popover-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.popover:focus {\n outline: none;\n}\n\n.portalled {\n --tempest-popover-tx: 0;\n}\n\n/* Placements (center-aligned across the trigger). */\n.top {\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.bottom {\n top: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.left {\n right: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n.right {\n left: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n\n@keyframes tempest-popover-in {\n from {\n opacity: 0;\n transform: translate(var(--tempest-popover-tx, -50%), 4px);\n }\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .popover {\n animation: none;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.module.js","names":[],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.popover {\n position: absolute;\n z-index: var(--tempest-z-popover);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\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-3) var(--tempest-space-4);\n min-width: 200px;\n max-width: 320px;\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n animation: tempest-popover-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.popover:focus {\n outline: none;\n}\n\n.portalled {\n --tempest-popover-tx: 0;\n}\n\n/* Placements (center-aligned across the trigger). */\n.top {\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.bottom {\n top: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.left {\n right: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n.right {\n left: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n\n@keyframes tempest-popover-in {\n from {\n opacity: 0;\n transform: translate(var(--tempest-popover-tx, -50%), 4px);\n }\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .popover {\n animation: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Popover.module.js","names":["root","popover","tempestPopoverIn","portalled","top","bottom","left","right","Popover_module_default"],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":[".root {\n position: relative;\n display: inline-flex;\n}\n\n.popover {\n position: absolute;\n z-index: var(--tempest-z-popover);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\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-3) var(--tempest-space-4);\n min-width: 200px;\n max-width: 320px;\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n animation: tempest-popover-in var(--tempest-duration-fast) var(--tempest-ease-out);\n}\n\n.popover:focus {\n outline: none;\n}\n\n.portalled {\n --tempest-popover-tx: 0;\n}\n\n/* Placements (center-aligned across the trigger). */\n.top {\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.bottom {\n top: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n}\n.left {\n right: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n.right {\n left: calc(100% + 8px);\n top: 50%;\n transform: translateY(-50%);\n}\n\n@keyframes tempest-popover-in {\n from {\n opacity: 0;\n transform: translate(var(--tempest-popover-tx, -50%), 4px);\n }\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .popover {\n animation: none;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.cjs","names":[],"sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalHost } from \"./portal-host\";\n\nexport interface PortalProps {\n /** Content rendered through the portal. */\n children: ReactNode;\n /**\n * Target DOM node to render into.\n *\n * Defaults to the fullscreen element while one is presented, and to\n * `document.body` otherwise.\n */\n container?: Element | null;\n}\n\n/**\n * Renders its children into a different part of the DOM tree via a React portal.\n *\n * Useful for overlays (modals, tooltips, dropdowns) that must escape parent\n * overflow/stacking contexts.\n *\n * Without `container` the target is the element currently presented fullscreen,\n * and `document.body` the rest of the time. `body` alone would be wrong during\n * fullscreen: the browser paints only the fullscreen element's subtree, so an\n * overlay mounted outside it is invisible and unclickable while looking perfectly\n * healthy in the DOM. Passing `container` opts out of that and pins the target.\n *\n * SSR-safe: renders `null` on the server and on the first client render, then\n * mounts the portal after hydration (when `document` is available).\n *\n * @param props - The portal props.\n * @returns The portal node once mounted, otherwise `null`.\n */\nexport function Portal({ children, container }: PortalProps): ReactNode {\n const [mounted, setMounted] = useState(false);\n const host = usePortalHost();\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n const target = container ?? host;\n if (!mounted || !target) return null;\n\n return createPortal(children, target);\n}\n"],"mappings":"mFAkCA,SAAgB,EAAO,CAAE,WAAU,aAAqC,CACpE,GAAM,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAAS,EAAK,EACtC,EAAO,EAAA,cAAc,GAE3B,EAAA,EAAA,UAAA,MACI,EAAW,EAAI,MACF,EAAW,EAAK,GAC9B,CAAC,CAAC,EAEL,IAAM,EAAS,GAAa,EAG5B,MAFI,CAAC,GAAW,CAAC,EAAe,MAEhC,EAAO,EAAA,aAAA,CAAa,EAAU,CAAM,CACxC"}
1
+ {"version":3,"file":"Portal.cjs","names":["useState","usePortalHost","createPortal","require_portal_host","react","react_dom","Portal","mounted","setMounted","host","target","container","children"],"sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalHost } from \"./portal-host\";\n\nexport interface PortalProps {\n /** Content rendered through the portal. */\n children: ReactNode;\n /**\n * Target DOM node to render into.\n *\n * Defaults to the fullscreen element while one is presented, and to\n * `document.body` otherwise.\n */\n container?: Element | null;\n}\n\n/**\n * Renders its children into a different part of the DOM tree via a React portal.\n *\n * Useful for overlays (modals, tooltips, dropdowns) that must escape parent\n * overflow/stacking contexts.\n *\n * Without `container` the target is the element currently presented fullscreen,\n * and `document.body` the rest of the time. `body` alone would be wrong during\n * fullscreen: the browser paints only the fullscreen element's subtree, so an\n * overlay mounted outside it is invisible and unclickable while looking perfectly\n * healthy in the DOM. Passing `container` opts out of that and pins the target.\n *\n * SSR-safe: renders `null` on the server and on the first client render, then\n * mounts the portal after hydration (when `document` is available).\n *\n * @param props - The portal props.\n * @returns The portal node once mounted, otherwise `null`.\n */\nexport function Portal({ children, container }: PortalProps): ReactNode {\n const [mounted, setMounted] = useState(false);\n const host = usePortalHost();\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n const target = container ?? host;\n if (!mounted || !target) return null;\n\n return createPortal(children, target);\n}\n"],"mappings":"A,mFAkCA,SAAgBM,EAAO,CAAE,WAAU,aAAqC,CACpE,GAAM,CAACC,EAASC,IAAA,EAAcR,EAAAA,SAAAA,CAAS,EAAK,EACtCS,EAAOR,EAAAA,cAAc,GAE3B,EAAAG,EAAA,UAAA,MACII,EAAW,EAAI,MACFA,EAAW,EAAK,GAC9B,CAAC,CAAC,EAEL,IAAME,EAASC,GAAaF,EAG5B,MAFI,CAACF,GAAW,CAACG,EAAe,MAEhC,EAAOR,EAAAA,aAAAA,CAAaU,EAAUF,CAAM,CACxC,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.js","names":[],"sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalHost } from \"./portal-host\";\n\nexport interface PortalProps {\n /** Content rendered through the portal. */\n children: ReactNode;\n /**\n * Target DOM node to render into.\n *\n * Defaults to the fullscreen element while one is presented, and to\n * `document.body` otherwise.\n */\n container?: Element | null;\n}\n\n/**\n * Renders its children into a different part of the DOM tree via a React portal.\n *\n * Useful for overlays (modals, tooltips, dropdowns) that must escape parent\n * overflow/stacking contexts.\n *\n * Without `container` the target is the element currently presented fullscreen,\n * and `document.body` the rest of the time. `body` alone would be wrong during\n * fullscreen: the browser paints only the fullscreen element's subtree, so an\n * overlay mounted outside it is invisible and unclickable while looking perfectly\n * healthy in the DOM. Passing `container` opts out of that and pins the target.\n *\n * SSR-safe: renders `null` on the server and on the first client render, then\n * mounts the portal after hydration (when `document` is available).\n *\n * @param props - The portal props.\n * @returns The portal node once mounted, otherwise `null`.\n */\nexport function Portal({ children, container }: PortalProps): ReactNode {\n const [mounted, setMounted] = useState(false);\n const host = usePortalHost();\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n const target = container ?? host;\n if (!mounted || !target) return null;\n\n return createPortal(children, target);\n}\n"],"mappings":";;;;AAkCA,SAAgB,EAAO,EAAE,aAAU,gBAAqC;CACpE,IAAM,CAAC,GAAS,KAAc,EAAS,EAAK,GACtC,IAAO,EAAc;CAE3B,SACI,EAAW,EAAI,SACF,EAAW,EAAK,IAC9B,CAAC,CAAC;CAEL,IAAM,IAAS,KAAa;CAG5B,OAFI,CAAC,KAAW,CAAC,IAAe,OAEzB,EAAa,GAAU,CAAM;AACxC"}
1
+ {"version":3,"file":"Portal.js","names":["Portal","mounted","setMounted","useState","host","usePortalHost","target","container","createPortal","children"],"sources":["../../../src/components/Portal/Portal.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalHost } from \"./portal-host\";\n\nexport interface PortalProps {\n /** Content rendered through the portal. */\n children: ReactNode;\n /**\n * Target DOM node to render into.\n *\n * Defaults to the fullscreen element while one is presented, and to\n * `document.body` otherwise.\n */\n container?: Element | null;\n}\n\n/**\n * Renders its children into a different part of the DOM tree via a React portal.\n *\n * Useful for overlays (modals, tooltips, dropdowns) that must escape parent\n * overflow/stacking contexts.\n *\n * Without `container` the target is the element currently presented fullscreen,\n * and `document.body` the rest of the time. `body` alone would be wrong during\n * fullscreen: the browser paints only the fullscreen element's subtree, so an\n * overlay mounted outside it is invisible and unclickable while looking perfectly\n * healthy in the DOM. Passing `container` opts out of that and pins the target.\n *\n * SSR-safe: renders `null` on the server and on the first client render, then\n * mounts the portal after hydration (when `document` is available).\n *\n * @param props - The portal props.\n * @returns The portal node once mounted, otherwise `null`.\n */\nexport function Portal({ children, container }: PortalProps): ReactNode {\n const [mounted, setMounted] = useState(false);\n const host = usePortalHost();\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n const target = container ?? host;\n if (!mounted || !target) return null;\n\n return createPortal(children, target);\n}\n"],"mappings":";;;;AAkCA,SAAgBA,EAAO,EAAE,aAAU,gBAAqC;CACpE,IAAM,CAACC,GAASC,KAAcC,EAAS,EAAK,GACtCC,IAAOC,EAAc;CAE3B,SACIH,EAAW,EAAI,SACFA,EAAW,EAAK,IAC9B,CAAC,CAAC;CAEL,IAAMI,IAASC,KAAaH;CAG5B,OAFI,CAACH,KAAW,CAACK,IAAe,OAEzBE,EAAaC,GAAUH,CAAM;AACxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"anchor-position.cjs","names":[],"sources":["../../../src/components/Portal/anchor-position.ts"],"sourcesContent":["import { useLayoutEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\n\n/** Side of the anchor a floating layer is placed on. */\nexport type AnchorSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\n/** Alignment of the floating layer along the anchor's edge. */\nexport type AnchorAlign = \"start\" | \"center\" | \"end\";\n\n/** The viewport-relative box a placement is computed from. */\nexport interface AnchorRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\n/** Everything {@link computeAnchorPosition} needs, all in CSS pixels. */\nexport interface AnchorGeometry {\n anchor: AnchorRect;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n side: AnchorSide;\n align: AnchorAlign;\n offset: number;\n margin: number;\n}\n\n/** A resolved placement: viewport coordinates plus the side actually used. */\nexport interface AnchorPlacement {\n top: number;\n left: number;\n side: AnchorSide;\n}\n\n/** What {@link useAnchorPosition} keeps between measurements. */\ninterface MeasuredPlacement extends AnchorPlacement {\n /** The anchor's width, when the layer matches it. */\n width: number | undefined;\n}\n\nconst OPPOSITE: Record<AnchorSide, AnchorSide> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\n/** Distance kept between a floating layer and the viewport edge, in px. */\nexport const ANCHOR_VIEWPORT_MARGIN = 8;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, Math.max(min, max)));\n}\n\nfunction mainAxis(geometry: AnchorGeometry, side: AnchorSide): number {\n const { anchor, width, height, offset } = geometry;\n switch (side) {\n case \"top\":\n return anchor.top - offset - height;\n case \"bottom\":\n return anchor.top + anchor.height + offset;\n case \"left\":\n return anchor.left - offset - width;\n case \"right\":\n default:\n return anchor.left + anchor.width + offset;\n }\n}\n\nfunction fits(geometry: AnchorGeometry, side: AnchorSide): boolean {\n const { width, height, viewportWidth, viewportHeight, margin } = geometry;\n const start = mainAxis(geometry, side);\n const size = side === \"top\" || side === \"bottom\" ? height : width;\n const limit = side === \"top\" || side === \"bottom\" ? viewportHeight : viewportWidth;\n return start >= margin && start + size <= limit - margin;\n}\n\nfunction crossAxis(start: number, length: number, size: number, align: AnchorAlign): number {\n if (align === \"start\") return start;\n if (align === \"end\") return start + length - size;\n return start + (length - size) / 2;\n}\n\n/**\n * Place a floating layer next to its anchor, inside the viewport.\n *\n * The requested side wins when the layer fits there. When it does not and the\n * opposite side does, the layer flips — the case that matters is the action menu\n * of the last row of a table near the bottom of the screen, which would otherwise\n * open below the fold. When neither side fits, the requested one is kept and the\n * layer is clamped, because a partially visible menu the user can scroll to beats\n * one that jumps sides depending on a pixel.\n *\n * Both axes are then clamped to the viewport minus `margin`.\n *\n * @param geometry - The anchor box, the floating layer's size, the viewport, and\n * the requested placement.\n * @returns The viewport coordinates for a `position: fixed` layer, and the side\n * that was used after flipping.\n */\nexport function computeAnchorPosition(geometry: AnchorGeometry): AnchorPlacement {\n const { anchor, width, height, viewportWidth, viewportHeight, align, margin } = geometry;\n const requested = geometry.side;\n const flipped = OPPOSITE[requested];\n const side = !fits(geometry, requested) && fits(geometry, flipped) ? flipped : requested;\n const vertical = side === \"top\" || side === \"bottom\";\n const main = mainAxis(geometry, side);\n const top = vertical ? main : crossAxis(anchor.top, anchor.height, height, align);\n const left = vertical ? crossAxis(anchor.left, anchor.width, width, align) : main;\n return {\n top: clamp(top, margin, viewportHeight - height - margin),\n left: clamp(left, margin, viewportWidth - width - margin),\n side,\n };\n}\n\n/** Options of {@link useAnchorPosition}. */\nexport interface AnchorPositionOptions {\n /** Element the layer is anchored to. */\n anchor: HTMLElement | null;\n /** The floating layer itself, once mounted. */\n floating: HTMLElement | null;\n side: AnchorSide;\n align: AnchorAlign;\n /** Gap between anchor and layer, in px. */\n offset: number;\n /** When false the hook does nothing and returns `undefined`. */\n enabled: boolean;\n /**\n * Give the layer the anchor's width — a listbox under its input. Default\n * `false`.\n */\n matchWidth?: boolean;\n}\n\n/**\n * Keep a portalled layer glued to its anchor.\n *\n * Takes the floating element as a value rather than a ref, because `Portal`\n * renders `null` on its first pass and mounts in an effect: a layout effect keyed\n * off `open` would run while the layer does not exist and measure nothing. With\n * the node held in state (a callback ref), the effect runs on the render that has\n * it, and `useLayoutEffect` settles the position before the first paint.\n *\n * The size comes from `offsetWidth`/`offsetHeight`, not from\n * `getBoundingClientRect`, which reports the transformed box — the layers enter\n * with a `translate`/`scale` animation, and the transformed rect would place them\n * a few pixels off. The anchor's rect is the right one to read: it is where the\n * trigger is painted.\n *\n * Scroll (captured, so a scrolling table wrapper counts) and resize reposition the\n * layer on the next animation frame, so a menu open inside a table that scrolls\n * follows its row instead of floating where the row used to be. So does a change\n * in the size of either box, through a `ResizeObserver`: a combobox list flipped\n * above its input shrinks as the user types, and a multi-select field grows a\n * line as chips are added — without the observer the list would keep its old\n * top and float away from the field, or cover it.\n *\n * With `matchWidth` the anchor's width is written to the layer **before** its\n * height is read, so the height is measured at the width it will be painted at —\n * a list whose options wrap at the narrower width is taller.\n *\n * The unmeasured first pass is **not** hidden with `visibility: hidden`: an\n * element under it cannot take focus, and the menu's focus effect runs before\n * the measured re-render, so the first entry silently kept no focus (measured in\n * Chrome; jsdom does not enforce it). Nothing is painted at the unmeasured\n * position anyway — the layout effect re-renders before the browser paints.\n *\n * @param options - Anchor, floating node, placement, and whether it is active.\n * @returns A `position: fixed` style for the layer, or `undefined` when disabled.\n */\nexport function useAnchorPosition({\n anchor,\n floating,\n side,\n align,\n offset,\n enabled,\n matchWidth = false,\n}: AnchorPositionOptions): CSSProperties | undefined {\n const [placement, setPlacement] = useState<MeasuredPlacement | null>(null);\n\n useLayoutEffect(() => {\n if (!enabled || !anchor || !floating) {\n setPlacement(null);\n return;\n }\n const update = (): void => {\n const rect = anchor.getBoundingClientRect();\n const width = matchWidth ? rect.width : undefined;\n if (width !== undefined) floating.style.setProperty(\"width\", `${width}px`);\n const position = computeAnchorPosition({\n anchor: { top: rect.top, left: rect.left, width: rect.width, height: rect.height },\n width: floating.offsetWidth,\n height: floating.offsetHeight,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n side,\n align,\n offset,\n margin: ANCHOR_VIEWPORT_MARGIN,\n });\n const next: MeasuredPlacement = { ...position, width };\n setPlacement((current) =>\n current &&\n current.top === next.top &&\n current.left === next.left &&\n current.side === next.side &&\n current.width === next.width\n ? current\n : next,\n );\n };\n update();\n let frame = 0;\n const schedule = (): void => {\n if (frame !== 0) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n };\n window.addEventListener(\"scroll\", schedule, { capture: true, passive: true });\n window.addEventListener(\"resize\", schedule);\n const observer =\n typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(schedule);\n observer?.observe(floating);\n observer?.observe(anchor);\n return () => {\n observer?.disconnect();\n if (frame !== 0) cancelAnimationFrame(frame);\n window.removeEventListener(\"scroll\", schedule, { capture: true });\n window.removeEventListener(\"resize\", schedule);\n };\n }, [enabled, anchor, floating, side, align, offset, matchWidth]);\n\n if (!enabled) return undefined;\n return {\n position: \"fixed\",\n top: placement?.top ?? 0,\n left: placement?.left ?? 0,\n width: placement?.width,\n };\n}\n"],"mappings":"uBA2CA,IAAM,EAA2C,CAC7C,IAAK,SACL,OAAQ,MACR,KAAM,QACN,MAAO,MACX,EAKA,SAAS,EAAM,EAAe,EAAa,EAAqB,CAC5D,OAAO,KAAK,IAAI,EAAK,KAAK,IAAI,EAAO,KAAK,IAAI,EAAK,CAAG,CAAC,CAAC,CAC5D,CAEA,SAAS,EAAS,EAA0B,EAA0B,CAClE,GAAM,CAAE,SAAQ,QAAO,SAAQ,UAAW,EAC1C,OAAQ,EAAR,CACI,IAAK,MACD,OAAO,EAAO,IAAM,EAAS,EACjC,IAAK,SACD,OAAO,EAAO,IAAM,EAAO,OAAS,EACxC,IAAK,OACD,OAAO,EAAO,KAAO,EAAS,EAElC,QACI,OAAO,EAAO,KAAO,EAAO,MAAQ,CAC5C,CACJ,CAEA,SAAS,EAAK,EAA0B,EAA2B,CAC/D,GAAM,CAAE,QAAO,SAAQ,gBAAe,iBAAgB,UAAW,EAC3D,EAAQ,EAAS,EAAU,CAAI,EAC/B,EAAO,IAAS,OAAS,IAAS,SAAW,EAAS,EACtD,EAAQ,IAAS,OAAS,IAAS,SAAW,EAAiB,EACrE,OAAO,GAAS,GAAU,EAAQ,GAAQ,EAAQ,CACtD,CAEA,SAAS,EAAU,EAAe,EAAgB,EAAc,EAA4B,CAGxF,OAFI,IAAU,QAAgB,EAC1B,IAAU,MAAc,EAAQ,EAAS,EACtC,GAAS,EAAS,GAAQ,CACrC,CAmBA,SAAgB,EAAsB,EAA2C,CAC7E,GAAM,CAAE,SAAQ,QAAO,SAAQ,gBAAe,iBAAgB,QAAO,UAAW,EAC1E,EAAY,EAAS,KACrB,EAAU,EAAS,GACnB,EAAO,CAAC,EAAK,EAAU,CAAS,GAAK,EAAK,EAAU,CAAO,EAAI,EAAU,EACzE,EAAW,IAAS,OAAS,IAAS,SACtC,EAAO,EAAS,EAAU,CAAI,EAC9B,EAAM,EAAW,EAAO,EAAU,EAAO,IAAK,EAAO,OAAQ,EAAQ,CAAK,EAC1E,EAAO,EAAW,EAAU,EAAO,KAAM,EAAO,MAAO,EAAO,CAAK,EAAI,EAC7E,MAAO,CACH,IAAK,EAAM,EAAK,EAAQ,EAAiB,EAAS,CAAM,EACxD,KAAM,EAAM,EAAM,EAAQ,EAAgB,EAAQ,CAAM,EACxD,MACJ,CACJ,CAyDA,SAAgB,EAAkB,CAC9B,SACA,WACA,OACA,QACA,SACA,UACA,aAAa,IACoC,CACjD,GAAM,CAAC,EAAW,IAAA,EAAgB,EAAA,SAAA,CAAmC,IAAI,EAEzE,IAAA,EAAA,EAAA,gBAAA,KAAsB,CAClB,GAAI,CAAC,GAAW,CAAC,GAAU,CAAC,EAAU,CAClC,EAAa,IAAI,EACjB,MACJ,CACA,IAAM,MAAqB,CACvB,IAAM,EAAO,EAAO,sBAAsB,EACpC,EAAQ,EAAa,EAAK,MAAQ,IAAA,GACpC,IAAU,IAAA,IAAW,EAAS,MAAM,YAAY,QAAS,GAAG,EAAM,GAAG,EAYzE,IAAM,EAA0B,CAAE,GAXjB,EAAsB,CACnC,OAAQ,CAAE,IAAK,EAAK,IAAK,KAAM,EAAK,KAAM,MAAO,EAAK,MAAO,OAAQ,EAAK,MAAO,EACjF,MAAO,EAAS,YAChB,OAAQ,EAAS,aACjB,cAAe,OAAO,WACtB,eAAgB,OAAO,YACvB,OACA,QACA,SACA,OAAA,CACJ,CACqC,EAAU,OAAM,EACrD,EAAc,GACV,GACA,EAAQ,MAAQ,EAAK,KACrB,EAAQ,OAAS,EAAK,MACtB,EAAQ,OAAS,EAAK,MACtB,EAAQ,QAAU,EAAK,MACjB,EACA,CACV,CACJ,EACA,EAAO,EACP,IAAI,EAAQ,EACN,MAAuB,CACrB,IAAU,IACd,EAAQ,0BAA4B,CAChC,EAAQ,EACR,EAAO,CACX,CAAC,EACL,EACA,OAAO,iBAAiB,SAAU,EAAU,CAAE,QAAS,GAAM,QAAS,EAAK,CAAC,EAC5E,OAAO,iBAAiB,SAAU,CAAQ,EAC1C,IAAM,EACF,OAAO,eAAmB,IAAc,KAAO,IAAI,eAAe,CAAQ,EAG9E,OAFA,GAAU,QAAQ,CAAQ,EAC1B,GAAU,QAAQ,CAAM,MACX,CACT,GAAU,WAAW,EACjB,IAAU,GAAG,qBAAqB,CAAK,EAC3C,OAAO,oBAAoB,SAAU,EAAU,CAAE,QAAS,EAAK,CAAC,EAChE,OAAO,oBAAoB,SAAU,CAAQ,CACjD,CACJ,EAAG,CAAC,EAAS,EAAQ,EAAU,EAAM,EAAO,EAAQ,CAAU,CAAC,EAE1D,EACL,MAAO,CACH,SAAU,QACV,IAAK,GAAW,KAAO,EACvB,KAAM,GAAW,MAAQ,EACzB,MAAO,GAAW,KACtB,CACJ"}
1
+ {"version":3,"file":"anchor-position.cjs","names":["useState","react","OPPOSITE","clamp","min","value","max","mainAxis","geometry","side","anchor","offset","height","width","fits","start","size","limit","viewportHeight","viewportWidth","margin","crossAxis","align","length","computeAnchorPosition","requested","flipped","vertical","main","top","left","useAnchorPosition","placement","setPlacement","enabled","floating","update","rect","matchWidth","next","current","frame","schedule","observer"],"sources":["../../../src/components/Portal/anchor-position.ts"],"sourcesContent":["import { useLayoutEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\n\n/** Side of the anchor a floating layer is placed on. */\nexport type AnchorSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\n/** Alignment of the floating layer along the anchor's edge. */\nexport type AnchorAlign = \"start\" | \"center\" | \"end\";\n\n/** The viewport-relative box a placement is computed from. */\nexport interface AnchorRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\n/** Everything {@link computeAnchorPosition} needs, all in CSS pixels. */\nexport interface AnchorGeometry {\n anchor: AnchorRect;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n side: AnchorSide;\n align: AnchorAlign;\n offset: number;\n margin: number;\n}\n\n/** A resolved placement: viewport coordinates plus the side actually used. */\nexport interface AnchorPlacement {\n top: number;\n left: number;\n side: AnchorSide;\n}\n\n/** What {@link useAnchorPosition} keeps between measurements. */\ninterface MeasuredPlacement extends AnchorPlacement {\n /** The anchor's width, when the layer matches it. */\n width: number | undefined;\n}\n\nconst OPPOSITE: Record<AnchorSide, AnchorSide> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\n/** Distance kept between a floating layer and the viewport edge, in px. */\nexport const ANCHOR_VIEWPORT_MARGIN = 8;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, Math.max(min, max)));\n}\n\nfunction mainAxis(geometry: AnchorGeometry, side: AnchorSide): number {\n const { anchor, width, height, offset } = geometry;\n switch (side) {\n case \"top\":\n return anchor.top - offset - height;\n case \"bottom\":\n return anchor.top + anchor.height + offset;\n case \"left\":\n return anchor.left - offset - width;\n case \"right\":\n default:\n return anchor.left + anchor.width + offset;\n }\n}\n\nfunction fits(geometry: AnchorGeometry, side: AnchorSide): boolean {\n const { width, height, viewportWidth, viewportHeight, margin } = geometry;\n const start = mainAxis(geometry, side);\n const size = side === \"top\" || side === \"bottom\" ? height : width;\n const limit = side === \"top\" || side === \"bottom\" ? viewportHeight : viewportWidth;\n return start >= margin && start + size <= limit - margin;\n}\n\nfunction crossAxis(start: number, length: number, size: number, align: AnchorAlign): number {\n if (align === \"start\") return start;\n if (align === \"end\") return start + length - size;\n return start + (length - size) / 2;\n}\n\n/**\n * Place a floating layer next to its anchor, inside the viewport.\n *\n * The requested side wins when the layer fits there. When it does not and the\n * opposite side does, the layer flips — the case that matters is the action menu\n * of the last row of a table near the bottom of the screen, which would otherwise\n * open below the fold. When neither side fits, the requested one is kept and the\n * layer is clamped, because a partially visible menu the user can scroll to beats\n * one that jumps sides depending on a pixel.\n *\n * Both axes are then clamped to the viewport minus `margin`.\n *\n * @param geometry - The anchor box, the floating layer's size, the viewport, and\n * the requested placement.\n * @returns The viewport coordinates for a `position: fixed` layer, and the side\n * that was used after flipping.\n */\nexport function computeAnchorPosition(geometry: AnchorGeometry): AnchorPlacement {\n const { anchor, width, height, viewportWidth, viewportHeight, align, margin } = geometry;\n const requested = geometry.side;\n const flipped = OPPOSITE[requested];\n const side = !fits(geometry, requested) && fits(geometry, flipped) ? flipped : requested;\n const vertical = side === \"top\" || side === \"bottom\";\n const main = mainAxis(geometry, side);\n const top = vertical ? main : crossAxis(anchor.top, anchor.height, height, align);\n const left = vertical ? crossAxis(anchor.left, anchor.width, width, align) : main;\n return {\n top: clamp(top, margin, viewportHeight - height - margin),\n left: clamp(left, margin, viewportWidth - width - margin),\n side,\n };\n}\n\n/** Options of {@link useAnchorPosition}. */\nexport interface AnchorPositionOptions {\n /** Element the layer is anchored to. */\n anchor: HTMLElement | null;\n /** The floating layer itself, once mounted. */\n floating: HTMLElement | null;\n side: AnchorSide;\n align: AnchorAlign;\n /** Gap between anchor and layer, in px. */\n offset: number;\n /** When false the hook does nothing and returns `undefined`. */\n enabled: boolean;\n /**\n * Give the layer the anchor's width — a listbox under its input. Default\n * `false`.\n */\n matchWidth?: boolean;\n}\n\n/**\n * Keep a portalled layer glued to its anchor.\n *\n * Takes the floating element as a value rather than a ref, because `Portal`\n * renders `null` on its first pass and mounts in an effect: a layout effect keyed\n * off `open` would run while the layer does not exist and measure nothing. With\n * the node held in state (a callback ref), the effect runs on the render that has\n * it, and `useLayoutEffect` settles the position before the first paint.\n *\n * The size comes from `offsetWidth`/`offsetHeight`, not from\n * `getBoundingClientRect`, which reports the transformed box — the layers enter\n * with a `translate`/`scale` animation, and the transformed rect would place them\n * a few pixels off. The anchor's rect is the right one to read: it is where the\n * trigger is painted.\n *\n * Scroll (captured, so a scrolling table wrapper counts) and resize reposition the\n * layer on the next animation frame, so a menu open inside a table that scrolls\n * follows its row instead of floating where the row used to be. So does a change\n * in the size of either box, through a `ResizeObserver`: a combobox list flipped\n * above its input shrinks as the user types, and a multi-select field grows a\n * line as chips are added — without the observer the list would keep its old\n * top and float away from the field, or cover it.\n *\n * With `matchWidth` the anchor's width is written to the layer **before** its\n * height is read, so the height is measured at the width it will be painted at —\n * a list whose options wrap at the narrower width is taller.\n *\n * The unmeasured first pass is **not** hidden with `visibility: hidden`: an\n * element under it cannot take focus, and the menu's focus effect runs before\n * the measured re-render, so the first entry silently kept no focus (measured in\n * Chrome; jsdom does not enforce it). Nothing is painted at the unmeasured\n * position anyway — the layout effect re-renders before the browser paints.\n *\n * @param options - Anchor, floating node, placement, and whether it is active.\n * @returns A `position: fixed` style for the layer, or `undefined` when disabled.\n */\nexport function useAnchorPosition({\n anchor,\n floating,\n side,\n align,\n offset,\n enabled,\n matchWidth = false,\n}: AnchorPositionOptions): CSSProperties | undefined {\n const [placement, setPlacement] = useState<MeasuredPlacement | null>(null);\n\n useLayoutEffect(() => {\n if (!enabled || !anchor || !floating) {\n setPlacement(null);\n return;\n }\n const update = (): void => {\n const rect = anchor.getBoundingClientRect();\n const width = matchWidth ? rect.width : undefined;\n if (width !== undefined) floating.style.setProperty(\"width\", `${width}px`);\n const position = computeAnchorPosition({\n anchor: { top: rect.top, left: rect.left, width: rect.width, height: rect.height },\n width: floating.offsetWidth,\n height: floating.offsetHeight,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n side,\n align,\n offset,\n margin: ANCHOR_VIEWPORT_MARGIN,\n });\n const next: MeasuredPlacement = { ...position, width };\n setPlacement((current) =>\n current &&\n current.top === next.top &&\n current.left === next.left &&\n current.side === next.side &&\n current.width === next.width\n ? current\n : next,\n );\n };\n update();\n let frame = 0;\n const schedule = (): void => {\n if (frame !== 0) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n };\n window.addEventListener(\"scroll\", schedule, { capture: true, passive: true });\n window.addEventListener(\"resize\", schedule);\n const observer =\n typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(schedule);\n observer?.observe(floating);\n observer?.observe(anchor);\n return () => {\n observer?.disconnect();\n if (frame !== 0) cancelAnimationFrame(frame);\n window.removeEventListener(\"scroll\", schedule, { capture: true });\n window.removeEventListener(\"resize\", schedule);\n };\n }, [enabled, anchor, floating, side, align, offset, matchWidth]);\n\n if (!enabled) return undefined;\n return {\n position: \"fixed\",\n top: placement?.top ?? 0,\n left: placement?.left ?? 0,\n width: placement?.width,\n };\n}\n"],"mappings":"A,uBA2CA,IAAME,EAA2C,CAC7C,IAAK,SACL,OAAQ,MACR,KAAM,QACN,MAAO,MACX,EAKA,SAASC,EAAM,EAAe,EAAa,EAAqB,CAC5D,OAAO,KAAK,IAAIC,EAAK,KAAK,IAAIC,EAAO,KAAK,IAAID,EAAKE,CAAG,CAAC,CAAC,CAC5D,CAEA,SAASC,EAAS,EAA0B,EAA0B,CAClE,GAAM,CAAE,SAAQ,QAAO,SAAQ,UAAWC,EAC1C,OAAQC,EAAR,CACI,IAAK,MACD,OAAOC,EAAO,IAAMC,EAASC,EACjC,IAAK,SACD,OAAOF,EAAO,IAAMA,EAAO,OAASC,EACxC,IAAK,OACD,OAAOD,EAAO,KAAOC,EAASE,EAElC,QACI,OAAOH,EAAO,KAAOA,EAAO,MAAQC,CAC5C,CACJ,CAEA,SAASG,EAAK,EAA0B,EAA2B,CAC/D,GAAM,CAAE,QAAO,SAAQ,gBAAe,iBAAgB,UAAWN,EAC3DO,EAAQR,EAASC,EAAUC,CAAI,EAC/BO,EAAOP,IAAS,OAASA,IAAS,SAAWG,EAASC,EACtDI,EAAQR,IAAS,OAASA,IAAS,SAAWS,EAAiBC,EACrE,OAAOJ,GAASK,GAAUL,EAAQC,GAAQC,EAAQG,CACtD,CAEA,SAASC,EAAU,EAAe,EAAgB,EAAc,EAA4B,CAGxF,OAFIC,IAAU,QAAgBP,EAC1BO,IAAU,MAAcP,EAAQQ,EAASP,EACtCD,GAASQ,EAASP,GAAQ,CACrC,CAmBA,SAAgBQ,EAAsB,EAA2C,CAC7E,GAAM,CAAE,SAAQ,QAAO,SAAQ,gBAAe,iBAAgB,QAAO,UAAWhB,EAC1EiB,EAAYjB,EAAS,KACrBkB,EAAUxB,EAASuB,GACnBhB,EAAO,CAACK,EAAKN,EAAUiB,CAAS,GAAKX,EAAKN,EAAUkB,CAAO,EAAIA,EAAUD,EACzEE,EAAWlB,IAAS,OAASA,IAAS,SACtCmB,EAAOrB,EAASC,EAAUC,CAAI,EAC9BoB,EAAMF,EAAWC,EAAOP,EAAUX,EAAO,IAAKA,EAAO,OAAQE,EAAQU,CAAK,EAC1EQ,EAAOH,EAAWN,EAAUX,EAAO,KAAMA,EAAO,MAAOG,EAAOS,CAAK,EAAIM,EAC7E,MAAO,CACH,IAAKzB,EAAM0B,EAAKT,EAAQF,EAAiBN,EAASQ,CAAM,EACxD,KAAMjB,EAAM2B,EAAMV,EAAQD,EAAgBN,EAAQO,CAAM,EACxD,MACJ,CACJ,CAyDA,SAAgBW,EAAkB,CAC9B,SACA,WACA,OACA,QACA,SACA,UACA,aAAa,IACoC,CACjD,GAAM,CAACC,EAAWC,IAAA,EAAgBjC,EAAAA,SAAAA,CAAmC,IAAI,EAwDzE,IAtDA,EAAAC,EAAA,gBAAA,KAAsB,CAClB,GAAI,CAACiC,GAAW,CAACxB,GAAU,CAACyB,EAAU,CAClCF,EAAa,IAAI,EACjB,MACJ,CACA,IAAMG,MAAqB,CACvB,IAAMC,EAAO3B,EAAO,sBAAsB,EACpCG,EAAQyB,EAAaD,EAAK,MAAQ,IAAA,GACpCxB,IAAU,IAAA,IAAWsB,EAAS,MAAM,YAAY,QAAS,GAAGtB,EAAM,GAAG,EAYzE,IAAM0B,EAA0B,CAAE,GAXjBf,EAAsB,CACnC,OAAQ,CAAE,IAAKa,EAAK,IAAK,KAAMA,EAAK,KAAM,MAAOA,EAAK,MAAO,OAAQA,EAAK,MAAO,EACjF,MAAOF,EAAS,YAChB,OAAQA,EAAS,aACjB,cAAe,OAAO,WACtB,eAAgB,OAAO,YACvB,OACA,QACA,SACA,OAAA,CACJ,CACqC,EAAU,OAAM,EACrDF,EAAc,GACVO,GACAA,EAAQ,MAAQD,EAAK,KACrBC,EAAQ,OAASD,EAAK,MACtBC,EAAQ,OAASD,EAAK,MACtBC,EAAQ,QAAUD,EAAK,MACjBC,EACAD,CACV,CACJ,EACAH,EAAO,EACP,IAAIK,EAAQ,EACNC,MAAuB,CACrBD,IAAU,IACd,EAAQ,0BAA4B,CAChC,EAAQ,EACRL,EAAO,CACX,CAAC,EACL,EACA,OAAO,iBAAiB,SAAUM,EAAU,CAAE,QAAS,GAAM,QAAS,EAAK,CAAC,EAC5E,OAAO,iBAAiB,SAAUA,CAAQ,EAC1C,IAAMC,EACF,OAAO,eAAmB,IAAc,KAAO,IAAI,eAAeD,CAAQ,EAG9E,OAFAC,GAAU,QAAQR,CAAQ,EAC1BQ,GAAU,QAAQjC,CAAM,MACX,CACTiC,GAAU,WAAW,EACjBF,IAAU,GAAG,qBAAqBA,CAAK,EAC3C,OAAO,oBAAoB,SAAUC,EAAU,CAAE,QAAS,EAAK,CAAC,EAChE,OAAO,oBAAoB,SAAUA,CAAQ,CACjD,CACJ,EAAG,CAACR,EAASxB,EAAQyB,EAAU1B,EAAMa,EAAOX,EAAQ2B,CAAU,CAAC,EAE1DJ,EACL,MAAO,CACH,SAAU,QACV,IAAKF,GAAW,KAAO,EACvB,KAAMA,GAAW,MAAQ,EACzB,MAAOA,GAAW,KACtB,CACJ,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"anchor-position.js","names":[],"sources":["../../../src/components/Portal/anchor-position.ts"],"sourcesContent":["import { useLayoutEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\n\n/** Side of the anchor a floating layer is placed on. */\nexport type AnchorSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\n/** Alignment of the floating layer along the anchor's edge. */\nexport type AnchorAlign = \"start\" | \"center\" | \"end\";\n\n/** The viewport-relative box a placement is computed from. */\nexport interface AnchorRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\n/** Everything {@link computeAnchorPosition} needs, all in CSS pixels. */\nexport interface AnchorGeometry {\n anchor: AnchorRect;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n side: AnchorSide;\n align: AnchorAlign;\n offset: number;\n margin: number;\n}\n\n/** A resolved placement: viewport coordinates plus the side actually used. */\nexport interface AnchorPlacement {\n top: number;\n left: number;\n side: AnchorSide;\n}\n\n/** What {@link useAnchorPosition} keeps between measurements. */\ninterface MeasuredPlacement extends AnchorPlacement {\n /** The anchor's width, when the layer matches it. */\n width: number | undefined;\n}\n\nconst OPPOSITE: Record<AnchorSide, AnchorSide> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\n/** Distance kept between a floating layer and the viewport edge, in px. */\nexport const ANCHOR_VIEWPORT_MARGIN = 8;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, Math.max(min, max)));\n}\n\nfunction mainAxis(geometry: AnchorGeometry, side: AnchorSide): number {\n const { anchor, width, height, offset } = geometry;\n switch (side) {\n case \"top\":\n return anchor.top - offset - height;\n case \"bottom\":\n return anchor.top + anchor.height + offset;\n case \"left\":\n return anchor.left - offset - width;\n case \"right\":\n default:\n return anchor.left + anchor.width + offset;\n }\n}\n\nfunction fits(geometry: AnchorGeometry, side: AnchorSide): boolean {\n const { width, height, viewportWidth, viewportHeight, margin } = geometry;\n const start = mainAxis(geometry, side);\n const size = side === \"top\" || side === \"bottom\" ? height : width;\n const limit = side === \"top\" || side === \"bottom\" ? viewportHeight : viewportWidth;\n return start >= margin && start + size <= limit - margin;\n}\n\nfunction crossAxis(start: number, length: number, size: number, align: AnchorAlign): number {\n if (align === \"start\") return start;\n if (align === \"end\") return start + length - size;\n return start + (length - size) / 2;\n}\n\n/**\n * Place a floating layer next to its anchor, inside the viewport.\n *\n * The requested side wins when the layer fits there. When it does not and the\n * opposite side does, the layer flips — the case that matters is the action menu\n * of the last row of a table near the bottom of the screen, which would otherwise\n * open below the fold. When neither side fits, the requested one is kept and the\n * layer is clamped, because a partially visible menu the user can scroll to beats\n * one that jumps sides depending on a pixel.\n *\n * Both axes are then clamped to the viewport minus `margin`.\n *\n * @param geometry - The anchor box, the floating layer's size, the viewport, and\n * the requested placement.\n * @returns The viewport coordinates for a `position: fixed` layer, and the side\n * that was used after flipping.\n */\nexport function computeAnchorPosition(geometry: AnchorGeometry): AnchorPlacement {\n const { anchor, width, height, viewportWidth, viewportHeight, align, margin } = geometry;\n const requested = geometry.side;\n const flipped = OPPOSITE[requested];\n const side = !fits(geometry, requested) && fits(geometry, flipped) ? flipped : requested;\n const vertical = side === \"top\" || side === \"bottom\";\n const main = mainAxis(geometry, side);\n const top = vertical ? main : crossAxis(anchor.top, anchor.height, height, align);\n const left = vertical ? crossAxis(anchor.left, anchor.width, width, align) : main;\n return {\n top: clamp(top, margin, viewportHeight - height - margin),\n left: clamp(left, margin, viewportWidth - width - margin),\n side,\n };\n}\n\n/** Options of {@link useAnchorPosition}. */\nexport interface AnchorPositionOptions {\n /** Element the layer is anchored to. */\n anchor: HTMLElement | null;\n /** The floating layer itself, once mounted. */\n floating: HTMLElement | null;\n side: AnchorSide;\n align: AnchorAlign;\n /** Gap between anchor and layer, in px. */\n offset: number;\n /** When false the hook does nothing and returns `undefined`. */\n enabled: boolean;\n /**\n * Give the layer the anchor's width — a listbox under its input. Default\n * `false`.\n */\n matchWidth?: boolean;\n}\n\n/**\n * Keep a portalled layer glued to its anchor.\n *\n * Takes the floating element as a value rather than a ref, because `Portal`\n * renders `null` on its first pass and mounts in an effect: a layout effect keyed\n * off `open` would run while the layer does not exist and measure nothing. With\n * the node held in state (a callback ref), the effect runs on the render that has\n * it, and `useLayoutEffect` settles the position before the first paint.\n *\n * The size comes from `offsetWidth`/`offsetHeight`, not from\n * `getBoundingClientRect`, which reports the transformed box — the layers enter\n * with a `translate`/`scale` animation, and the transformed rect would place them\n * a few pixels off. The anchor's rect is the right one to read: it is where the\n * trigger is painted.\n *\n * Scroll (captured, so a scrolling table wrapper counts) and resize reposition the\n * layer on the next animation frame, so a menu open inside a table that scrolls\n * follows its row instead of floating where the row used to be. So does a change\n * in the size of either box, through a `ResizeObserver`: a combobox list flipped\n * above its input shrinks as the user types, and a multi-select field grows a\n * line as chips are added — without the observer the list would keep its old\n * top and float away from the field, or cover it.\n *\n * With `matchWidth` the anchor's width is written to the layer **before** its\n * height is read, so the height is measured at the width it will be painted at —\n * a list whose options wrap at the narrower width is taller.\n *\n * The unmeasured first pass is **not** hidden with `visibility: hidden`: an\n * element under it cannot take focus, and the menu's focus effect runs before\n * the measured re-render, so the first entry silently kept no focus (measured in\n * Chrome; jsdom does not enforce it). Nothing is painted at the unmeasured\n * position anyway — the layout effect re-renders before the browser paints.\n *\n * @param options - Anchor, floating node, placement, and whether it is active.\n * @returns A `position: fixed` style for the layer, or `undefined` when disabled.\n */\nexport function useAnchorPosition({\n anchor,\n floating,\n side,\n align,\n offset,\n enabled,\n matchWidth = false,\n}: AnchorPositionOptions): CSSProperties | undefined {\n const [placement, setPlacement] = useState<MeasuredPlacement | null>(null);\n\n useLayoutEffect(() => {\n if (!enabled || !anchor || !floating) {\n setPlacement(null);\n return;\n }\n const update = (): void => {\n const rect = anchor.getBoundingClientRect();\n const width = matchWidth ? rect.width : undefined;\n if (width !== undefined) floating.style.setProperty(\"width\", `${width}px`);\n const position = computeAnchorPosition({\n anchor: { top: rect.top, left: rect.left, width: rect.width, height: rect.height },\n width: floating.offsetWidth,\n height: floating.offsetHeight,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n side,\n align,\n offset,\n margin: ANCHOR_VIEWPORT_MARGIN,\n });\n const next: MeasuredPlacement = { ...position, width };\n setPlacement((current) =>\n current &&\n current.top === next.top &&\n current.left === next.left &&\n current.side === next.side &&\n current.width === next.width\n ? current\n : next,\n );\n };\n update();\n let frame = 0;\n const schedule = (): void => {\n if (frame !== 0) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n };\n window.addEventListener(\"scroll\", schedule, { capture: true, passive: true });\n window.addEventListener(\"resize\", schedule);\n const observer =\n typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(schedule);\n observer?.observe(floating);\n observer?.observe(anchor);\n return () => {\n observer?.disconnect();\n if (frame !== 0) cancelAnimationFrame(frame);\n window.removeEventListener(\"scroll\", schedule, { capture: true });\n window.removeEventListener(\"resize\", schedule);\n };\n }, [enabled, anchor, floating, side, align, offset, matchWidth]);\n\n if (!enabled) return undefined;\n return {\n position: \"fixed\",\n top: placement?.top ?? 0,\n left: placement?.left ?? 0,\n width: placement?.width,\n };\n}\n"],"mappings":";;AA2CA,IAAM,IAA2C;CAC7C,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;AACX;AAKA,SAAS,EAAM,GAAe,GAAa,GAAqB;CAC5D,OAAO,KAAK,IAAI,GAAK,KAAK,IAAI,GAAO,KAAK,IAAI,GAAK,CAAG,CAAC,CAAC;AAC5D;AAEA,SAAS,EAAS,GAA0B,GAA0B;CAClE,IAAM,EAAE,WAAQ,UAAO,WAAQ,cAAW;CAC1C,QAAQ,GAAR;EACI,KAAK,OACD,OAAO,EAAO,MAAM,IAAS;EACjC,KAAK,UACD,OAAO,EAAO,MAAM,EAAO,SAAS;EACxC,KAAK,QACD,OAAO,EAAO,OAAO,IAAS;EAElC,SACI,OAAO,EAAO,OAAO,EAAO,QAAQ;CAC5C;AACJ;AAEA,SAAS,EAAK,GAA0B,GAA2B;CAC/D,IAAM,EAAE,UAAO,WAAQ,kBAAe,mBAAgB,cAAW,GAC3D,IAAQ,EAAS,GAAU,CAAI,GAC/B,IAAO,MAAS,SAAS,MAAS,WAAW,IAAS,GACtD,IAAQ,MAAS,SAAS,MAAS,WAAW,IAAiB;CACrE,OAAO,KAAS,KAAU,IAAQ,KAAQ,IAAQ;AACtD;AAEA,SAAS,EAAU,GAAe,GAAgB,GAAc,GAA4B;CAGxF,OAFI,MAAU,UAAgB,IAC1B,MAAU,QAAc,IAAQ,IAAS,IACtC,KAAS,IAAS,KAAQ;AACrC;AAmBA,SAAgB,EAAsB,GAA2C;CAC7E,IAAM,EAAE,WAAQ,UAAO,WAAQ,kBAAe,mBAAgB,UAAO,cAAW,GAC1E,IAAY,EAAS,MACrB,IAAU,EAAS,IACnB,IAAO,CAAC,EAAK,GAAU,CAAS,KAAK,EAAK,GAAU,CAAO,IAAI,IAAU,GACzE,IAAW,MAAS,SAAS,MAAS,UACtC,IAAO,EAAS,GAAU,CAAI,GAC9B,IAAM,IAAW,IAAO,EAAU,EAAO,KAAK,EAAO,QAAQ,GAAQ,CAAK,GAC1E,IAAO,IAAW,EAAU,EAAO,MAAM,EAAO,OAAO,GAAO,CAAK,IAAI;CAC7E,OAAO;EACH,KAAK,EAAM,GAAK,GAAQ,IAAiB,IAAS,CAAM;EACxD,MAAM,EAAM,GAAM,GAAQ,IAAgB,IAAQ,CAAM;EACxD;CACJ;AACJ;AAyDA,SAAgB,EAAkB,EAC9B,WACA,aACA,SACA,UACA,WACA,YACA,gBAAa,MACoC;CACjD,IAAM,CAAC,GAAW,KAAgB,EAAmC,IAAI;CAEzE,YAAsB;EAClB,IAAI,CAAC,KAAW,CAAC,KAAU,CAAC,GAAU;GAClC,EAAa,IAAI;GACjB;EACJ;EACA,IAAM,UAAqB;GACvB,IAAM,IAAO,EAAO,sBAAsB,GACpC,IAAQ,IAAa,EAAK,QAAQ,KAAA;GACxC,AAAI,MAAU,KAAA,KAAW,EAAS,MAAM,YAAY,SAAS,GAAG,EAAM,GAAG;GAYzE,IAAM,IAA0B;IAAE,GAXjB,EAAsB;KACnC,QAAQ;MAAE,KAAK,EAAK;MAAK,MAAM,EAAK;MAAM,OAAO,EAAK;MAAO,QAAQ,EAAK;KAAO;KACjF,OAAO,EAAS;KAChB,QAAQ,EAAS;KACjB,eAAe,OAAO;KACtB,gBAAgB,OAAO;KACvB;KACA;KACA;KACA,QAAA;IACJ,CACqC;IAAU;GAAM;GACrD,GAAc,MACV,KACA,EAAQ,QAAQ,EAAK,OACrB,EAAQ,SAAS,EAAK,QACtB,EAAQ,SAAS,EAAK,QACtB,EAAQ,UAAU,EAAK,QACjB,IACA,CACV;EACJ;EACA,EAAO;EACP,IAAI,IAAQ,GACN,UAAuB;GACrB,MAAU,MACd,IAAQ,4BAA4B;IAEhC,AADA,IAAQ,GACR,EAAO;GACX,CAAC;EACL;EAEA,AADA,OAAO,iBAAiB,UAAU,GAAU;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC,GAC5E,OAAO,iBAAiB,UAAU,CAAQ;EAC1C,IAAM,IACF,OAAO,iBAAmB,MAAc,OAAO,IAAI,eAAe,CAAQ;EAG9E,OAFA,GAAU,QAAQ,CAAQ,GAC1B,GAAU,QAAQ,CAAM,SACX;GAIT,AAHA,GAAU,WAAW,GACjB,MAAU,KAAG,qBAAqB,CAAK,GAC3C,OAAO,oBAAoB,UAAU,GAAU,EAAE,SAAS,GAAK,CAAC,GAChE,OAAO,oBAAoB,UAAU,CAAQ;EACjD;CACJ,GAAG;EAAC;EAAS;EAAQ;EAAU;EAAM;EAAO;EAAQ;CAAU,CAAC,GAE1D,GACL,OAAO;EACH,UAAU;EACV,KAAK,GAAW,OAAO;EACvB,MAAM,GAAW,QAAQ;EACzB,OAAO,GAAW;CACtB;AACJ"}
1
+ {"version":3,"file":"anchor-position.js","names":["OPPOSITE","clamp","min","value","max","mainAxis","geometry","side","anchor","offset","height","width","fits","start","size","limit","viewportHeight","viewportWidth","margin","crossAxis","align","length","computeAnchorPosition","requested","flipped","vertical","main","top","left","useAnchorPosition","placement","setPlacement","useState","useLayoutEffect","enabled","floating","update","rect","matchWidth","next","current","frame","schedule","observer"],"sources":["../../../src/components/Portal/anchor-position.ts"],"sourcesContent":["import { useLayoutEffect, useState } from \"react\";\nimport type { CSSProperties } from \"react\";\n\n/** Side of the anchor a floating layer is placed on. */\nexport type AnchorSide = \"top\" | \"bottom\" | \"left\" | \"right\";\n\n/** Alignment of the floating layer along the anchor's edge. */\nexport type AnchorAlign = \"start\" | \"center\" | \"end\";\n\n/** The viewport-relative box a placement is computed from. */\nexport interface AnchorRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\n/** Everything {@link computeAnchorPosition} needs, all in CSS pixels. */\nexport interface AnchorGeometry {\n anchor: AnchorRect;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n side: AnchorSide;\n align: AnchorAlign;\n offset: number;\n margin: number;\n}\n\n/** A resolved placement: viewport coordinates plus the side actually used. */\nexport interface AnchorPlacement {\n top: number;\n left: number;\n side: AnchorSide;\n}\n\n/** What {@link useAnchorPosition} keeps between measurements. */\ninterface MeasuredPlacement extends AnchorPlacement {\n /** The anchor's width, when the layer matches it. */\n width: number | undefined;\n}\n\nconst OPPOSITE: Record<AnchorSide, AnchorSide> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\n/** Distance kept between a floating layer and the viewport edge, in px. */\nexport const ANCHOR_VIEWPORT_MARGIN = 8;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, Math.max(min, max)));\n}\n\nfunction mainAxis(geometry: AnchorGeometry, side: AnchorSide): number {\n const { anchor, width, height, offset } = geometry;\n switch (side) {\n case \"top\":\n return anchor.top - offset - height;\n case \"bottom\":\n return anchor.top + anchor.height + offset;\n case \"left\":\n return anchor.left - offset - width;\n case \"right\":\n default:\n return anchor.left + anchor.width + offset;\n }\n}\n\nfunction fits(geometry: AnchorGeometry, side: AnchorSide): boolean {\n const { width, height, viewportWidth, viewportHeight, margin } = geometry;\n const start = mainAxis(geometry, side);\n const size = side === \"top\" || side === \"bottom\" ? height : width;\n const limit = side === \"top\" || side === \"bottom\" ? viewportHeight : viewportWidth;\n return start >= margin && start + size <= limit - margin;\n}\n\nfunction crossAxis(start: number, length: number, size: number, align: AnchorAlign): number {\n if (align === \"start\") return start;\n if (align === \"end\") return start + length - size;\n return start + (length - size) / 2;\n}\n\n/**\n * Place a floating layer next to its anchor, inside the viewport.\n *\n * The requested side wins when the layer fits there. When it does not and the\n * opposite side does, the layer flips — the case that matters is the action menu\n * of the last row of a table near the bottom of the screen, which would otherwise\n * open below the fold. When neither side fits, the requested one is kept and the\n * layer is clamped, because a partially visible menu the user can scroll to beats\n * one that jumps sides depending on a pixel.\n *\n * Both axes are then clamped to the viewport minus `margin`.\n *\n * @param geometry - The anchor box, the floating layer's size, the viewport, and\n * the requested placement.\n * @returns The viewport coordinates for a `position: fixed` layer, and the side\n * that was used after flipping.\n */\nexport function computeAnchorPosition(geometry: AnchorGeometry): AnchorPlacement {\n const { anchor, width, height, viewportWidth, viewportHeight, align, margin } = geometry;\n const requested = geometry.side;\n const flipped = OPPOSITE[requested];\n const side = !fits(geometry, requested) && fits(geometry, flipped) ? flipped : requested;\n const vertical = side === \"top\" || side === \"bottom\";\n const main = mainAxis(geometry, side);\n const top = vertical ? main : crossAxis(anchor.top, anchor.height, height, align);\n const left = vertical ? crossAxis(anchor.left, anchor.width, width, align) : main;\n return {\n top: clamp(top, margin, viewportHeight - height - margin),\n left: clamp(left, margin, viewportWidth - width - margin),\n side,\n };\n}\n\n/** Options of {@link useAnchorPosition}. */\nexport interface AnchorPositionOptions {\n /** Element the layer is anchored to. */\n anchor: HTMLElement | null;\n /** The floating layer itself, once mounted. */\n floating: HTMLElement | null;\n side: AnchorSide;\n align: AnchorAlign;\n /** Gap between anchor and layer, in px. */\n offset: number;\n /** When false the hook does nothing and returns `undefined`. */\n enabled: boolean;\n /**\n * Give the layer the anchor's width — a listbox under its input. Default\n * `false`.\n */\n matchWidth?: boolean;\n}\n\n/**\n * Keep a portalled layer glued to its anchor.\n *\n * Takes the floating element as a value rather than a ref, because `Portal`\n * renders `null` on its first pass and mounts in an effect: a layout effect keyed\n * off `open` would run while the layer does not exist and measure nothing. With\n * the node held in state (a callback ref), the effect runs on the render that has\n * it, and `useLayoutEffect` settles the position before the first paint.\n *\n * The size comes from `offsetWidth`/`offsetHeight`, not from\n * `getBoundingClientRect`, which reports the transformed box — the layers enter\n * with a `translate`/`scale` animation, and the transformed rect would place them\n * a few pixels off. The anchor's rect is the right one to read: it is where the\n * trigger is painted.\n *\n * Scroll (captured, so a scrolling table wrapper counts) and resize reposition the\n * layer on the next animation frame, so a menu open inside a table that scrolls\n * follows its row instead of floating where the row used to be. So does a change\n * in the size of either box, through a `ResizeObserver`: a combobox list flipped\n * above its input shrinks as the user types, and a multi-select field grows a\n * line as chips are added — without the observer the list would keep its old\n * top and float away from the field, or cover it.\n *\n * With `matchWidth` the anchor's width is written to the layer **before** its\n * height is read, so the height is measured at the width it will be painted at —\n * a list whose options wrap at the narrower width is taller.\n *\n * The unmeasured first pass is **not** hidden with `visibility: hidden`: an\n * element under it cannot take focus, and the menu's focus effect runs before\n * the measured re-render, so the first entry silently kept no focus (measured in\n * Chrome; jsdom does not enforce it). Nothing is painted at the unmeasured\n * position anyway — the layout effect re-renders before the browser paints.\n *\n * @param options - Anchor, floating node, placement, and whether it is active.\n * @returns A `position: fixed` style for the layer, or `undefined` when disabled.\n */\nexport function useAnchorPosition({\n anchor,\n floating,\n side,\n align,\n offset,\n enabled,\n matchWidth = false,\n}: AnchorPositionOptions): CSSProperties | undefined {\n const [placement, setPlacement] = useState<MeasuredPlacement | null>(null);\n\n useLayoutEffect(() => {\n if (!enabled || !anchor || !floating) {\n setPlacement(null);\n return;\n }\n const update = (): void => {\n const rect = anchor.getBoundingClientRect();\n const width = matchWidth ? rect.width : undefined;\n if (width !== undefined) floating.style.setProperty(\"width\", `${width}px`);\n const position = computeAnchorPosition({\n anchor: { top: rect.top, left: rect.left, width: rect.width, height: rect.height },\n width: floating.offsetWidth,\n height: floating.offsetHeight,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n side,\n align,\n offset,\n margin: ANCHOR_VIEWPORT_MARGIN,\n });\n const next: MeasuredPlacement = { ...position, width };\n setPlacement((current) =>\n current &&\n current.top === next.top &&\n current.left === next.left &&\n current.side === next.side &&\n current.width === next.width\n ? current\n : next,\n );\n };\n update();\n let frame = 0;\n const schedule = (): void => {\n if (frame !== 0) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n };\n window.addEventListener(\"scroll\", schedule, { capture: true, passive: true });\n window.addEventListener(\"resize\", schedule);\n const observer =\n typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(schedule);\n observer?.observe(floating);\n observer?.observe(anchor);\n return () => {\n observer?.disconnect();\n if (frame !== 0) cancelAnimationFrame(frame);\n window.removeEventListener(\"scroll\", schedule, { capture: true });\n window.removeEventListener(\"resize\", schedule);\n };\n }, [enabled, anchor, floating, side, align, offset, matchWidth]);\n\n if (!enabled) return undefined;\n return {\n position: \"fixed\",\n top: placement?.top ?? 0,\n left: placement?.left ?? 0,\n width: placement?.width,\n };\n}\n"],"mappings":";;AA2CA,IAAMA,IAA2C;CAC7C,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;AACX;AAKA,SAASC,EAAM,GAAe,GAAa,GAAqB;CAC5D,OAAO,KAAK,IAAIC,GAAK,KAAK,IAAIC,GAAO,KAAK,IAAID,GAAKE,CAAG,CAAC,CAAC;AAC5D;AAEA,SAASC,EAAS,GAA0B,GAA0B;CAClE,IAAM,EAAE,WAAQ,UAAO,WAAQ,cAAWC;CAC1C,QAAQC,GAAR;EACI,KAAK,OACD,OAAOC,EAAO,MAAMC,IAASC;EACjC,KAAK,UACD,OAAOF,EAAO,MAAMA,EAAO,SAASC;EACxC,KAAK,QACD,OAAOD,EAAO,OAAOC,IAASE;EAElC,SACI,OAAOH,EAAO,OAAOA,EAAO,QAAQC;CAC5C;AACJ;AAEA,SAASG,EAAK,GAA0B,GAA2B;CAC/D,IAAM,EAAE,UAAO,WAAQ,kBAAe,mBAAgB,cAAWN,GAC3DO,IAAQR,EAASC,GAAUC,CAAI,GAC/BO,IAAOP,MAAS,SAASA,MAAS,WAAWG,IAASC,GACtDI,IAAQR,MAAS,SAASA,MAAS,WAAWS,IAAiBC;CACrE,OAAOJ,KAASK,KAAUL,IAAQC,KAAQC,IAAQG;AACtD;AAEA,SAASC,EAAU,GAAe,GAAgB,GAAc,GAA4B;CAGxF,OAFIC,MAAU,UAAgBP,IAC1BO,MAAU,QAAcP,IAAQQ,IAASP,IACtCD,KAASQ,IAASP,KAAQ;AACrC;AAmBA,SAAgBQ,EAAsB,GAA2C;CAC7E,IAAM,EAAE,WAAQ,UAAO,WAAQ,kBAAe,mBAAgB,UAAO,cAAWhB,GAC1EiB,IAAYjB,EAAS,MACrBkB,IAAUxB,EAASuB,IACnBhB,IAAO,CAACK,EAAKN,GAAUiB,CAAS,KAAKX,EAAKN,GAAUkB,CAAO,IAAIA,IAAUD,GACzEE,IAAWlB,MAAS,SAASA,MAAS,UACtCmB,IAAOrB,EAASC,GAAUC,CAAI,GAC9BoB,IAAMF,IAAWC,IAAOP,EAAUX,EAAO,KAAKA,EAAO,QAAQE,GAAQU,CAAK,GAC1EQ,IAAOH,IAAWN,EAAUX,EAAO,MAAMA,EAAO,OAAOG,GAAOS,CAAK,IAAIM;CAC7E,OAAO;EACH,KAAKzB,EAAM0B,GAAKT,GAAQF,IAAiBN,IAASQ,CAAM;EACxD,MAAMjB,EAAM2B,GAAMV,GAAQD,IAAgBN,IAAQO,CAAM;EACxD;CACJ;AACJ;AAyDA,SAAgBW,EAAkB,EAC9B,WACA,aACA,SACA,UACA,WACA,YACA,gBAAa,MACoC;CACjD,IAAM,CAACC,GAAWC,KAAgBC,EAAmC,IAAI;CAwDzE,IAtDAC,QAAsB;EAClB,IAAI,CAACC,KAAW,CAAC1B,KAAU,CAAC2B,GAAU;GAClC,EAAa,IAAI;GACjB;EACJ;EACA,IAAMC,UAAqB;GACvB,IAAMC,IAAO7B,EAAO,sBAAsB,GACpCG,IAAQ2B,IAAaD,EAAK,QAAQ,KAAA;GACxC,AAAI1B,MAAU,KAAA,KAAWwB,EAAS,MAAM,YAAY,SAAS,GAAGxB,EAAM,GAAG;GAYzE,IAAM4B,IAA0B;IAAE,GAXjBjB,EAAsB;KACnC,QAAQ;MAAE,KAAKe,EAAK;MAAK,MAAMA,EAAK;MAAM,OAAOA,EAAK;MAAO,QAAQA,EAAK;KAAO;KACjF,OAAOF,EAAS;KAChB,QAAQA,EAAS;KACjB,eAAe,OAAO;KACtB,gBAAgB,OAAO;KACvB;KACA;KACA;KACA,QAAA;IACJ,CACqC;IAAU;GAAM;GACrD,GAAc,MACVK,KACAA,EAAQ,QAAQD,EAAK,OACrBC,EAAQ,SAASD,EAAK,QACtBC,EAAQ,SAASD,EAAK,QACtBC,EAAQ,UAAUD,EAAK,QACjBC,IACAD,CACV;EACJ;EACA,EAAO;EACP,IAAIE,IAAQ,GACNC,UAAuB;GACzB,AAAID,MAAU,MACd,IAAQ,4BAA4B;IAEhC,AADA,IAAQ,GACRL,EAAO;GACX,CAAC;EACL;EAEA,AADA,OAAO,iBAAiB,UAAUM,GAAU;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC,GAC5E,OAAO,iBAAiB,UAAUA,CAAQ;EAC1C,IAAMC,IACF,OAAO,iBAAmB,MAAc,OAAO,IAAI,eAAeD,CAAQ;EAG9E,OAFAC,GAAU,QAAQR,CAAQ,GAC1BQ,GAAU,QAAQnC,CAAM,SACX;GAIT,AAHAmC,GAAU,WAAW,GACjBF,MAAU,KAAG,qBAAqBA,CAAK,GAC3C,OAAO,oBAAoB,UAAUC,GAAU,EAAE,SAAS,GAAK,CAAC,GAChE,OAAO,oBAAoB,UAAUA,CAAQ;EACjD;CACJ,GAAG;EAACR;EAAS1B;EAAQ2B;EAAU5B;EAAMa;EAAOX;EAAQ6B;CAAU,CAAC,GAE1DJ,GACL,OAAO;EACH,UAAU;EACV,KAAKJ,GAAW,OAAO;EACvB,MAAMA,GAAW,QAAQ;EACzB,OAAOA,GAAW;CACtB;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"escape-layer.cjs","names":[],"sources":["../../../src/components/Portal/escape-layer.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\n\n/** One open layer that `Escape` can dismiss. */\ninterface EscapeLayer {\n /** Latest dismiss callback; `null` makes the layer swallow the key without closing. */\n current: (() => void) | null;\n /** Position in the stack: higher is more recently opened, or deeper in the tree. */\n order: number;\n}\n\nconst stack: EscapeLayer[] = [];\n\nlet sequence = 0;\n\n/**\n * The single `keydown` listener behind every layer.\n *\n * Dismisses only the top of the stack. Every overlay used to listen on `window`\n * and close on any `Escape`, so one key press closed everything open at once —\n * measured in Chrome, a `Modal` holding a `DropdownMenu`, `Combobox`,\n * `MultiSelect`, `Popover`, `ContextMenu`, editable `DataTable` cell or a second\n * `Modal` closed together with the inner layer in all seven cases, and a\n * `Drawer` closed with the `Popover` inside it.\n *\n * Two kinds of inner layer exist, and this covers both:\n *\n * - Layers that listen on `window` themselves can never see each other's\n * events, so they register here and only the most recently opened one reacts.\n * - Layers that handle the key on their own element (a menu, a combobox input,\n * an inline cell editor) run first — React's delegated listener sits below\n * `window` — and call `preventDefault()`. A consumed key is left alone.\n *\n * A key pressed while an IME is composing belongs to the composition (it cancels\n * the candidate), so it is ignored too.\n *\n * @param event - The native keyboard event.\n * @returns Nothing.\n */\nfunction handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== \"Escape\" || event.defaultPrevented || event.isComposing) return;\n const top = stack.at(-1);\n if (!top) return;\n event.preventDefault();\n top.current?.();\n}\n\n/**\n * Register an overlay as an `Escape`-dismissable layer while it is open.\n *\n * Layers stack in the order they open, so the one opened last is dismissed\n * first, and a second `Escape` reaches the next one down. The callback is read\n * through a ref, so a new closure on every render does not move the layer in\n * the stack.\n *\n * Pass `null` as `onEscape` for a modal layer whose dismissal is turned off\n * (`closeOnEsc={false}`): it stays on the stack and swallows the key, instead of\n * letting it fall through and close the modal underneath.\n *\n * The position is taken when the layer **renders** open, not when its effect\n * runs. Effects run child-first, so a `Modal` that mounts already holding an open\n * inner `Modal` would register the inner one first and put the outer one on top —\n * `Escape` would close the wrong layer, or a locked inner modal would let the key\n * through to the outer one. Parents render before their children, so render\n * order is tree order within a commit and opening order across commits. A\n * discarded or doubled render (Strict Mode, concurrent rendering) only skips\n * numbers; the relative order stays.\n *\n * @param active - Whether the layer is currently open.\n * @param onEscape - What `Escape` does to this layer, or `null` to block only.\n * @returns Nothing.\n */\nexport function useEscapeLayer(active: boolean, onEscape: (() => void) | null): void {\n const order = useMemo(() => (active ? ++sequence : 0), [active]);\n const layer = useRef<EscapeLayer>({ current: onEscape, order });\n\n useEffect(() => {\n layer.current.current = onEscape;\n }, [onEscape]);\n\n useEffect(() => {\n if (!active) return;\n const entry = layer.current;\n entry.order = order;\n if (stack.length === 0) window.addEventListener(\"keydown\", handleKeyDown);\n const index = stack.findIndex((other) => other.order > order);\n stack.splice(index === -1 ? stack.length : index, 0, entry);\n return () => {\n const index = stack.lastIndexOf(entry);\n if (index !== -1) stack.splice(index, 1);\n if (stack.length === 0) window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [active, order]);\n}\n"],"mappings":"uBAUA,IAAM,EAAuB,CAAC,EAE1B,EAAW,EA0Bf,SAAS,EAAc,EAA4B,CAC/C,GAAI,EAAM,MAAQ,UAAY,EAAM,kBAAoB,EAAM,YAAa,OAC3E,IAAM,EAAM,EAAM,GAAG,EAAE,EAClB,IACL,EAAM,eAAe,EACrB,EAAI,UAAU,EAClB,CA2BA,SAAgB,EAAe,EAAiB,EAAqC,CACjF,IAAM,GAAA,EAAQ,EAAA,QAAA,KAAe,EAAS,EAAE,EAAW,EAAI,CAAC,CAAM,CAAC,EACzD,GAAA,EAAQ,EAAA,OAAA,CAAoB,CAAE,QAAS,EAAU,OAAM,CAAC,GAE9D,EAAA,EAAA,UAAA,KAAgB,CACZ,EAAM,QAAQ,QAAU,CAC5B,EAAG,CAAC,CAAQ,CAAC,GAEb,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,EAAQ,OACb,IAAM,EAAQ,EAAM,QACpB,EAAM,MAAQ,EACV,EAAM,SAAW,GAAG,OAAO,iBAAiB,UAAW,CAAa,EACxE,IAAM,EAAQ,EAAM,UAAW,GAAU,EAAM,MAAQ,CAAK,EAE5D,OADA,EAAM,OAAO,IAAU,GAAK,EAAM,OAAS,EAAO,EAAG,CAAK,MAC7C,CACT,IAAM,EAAQ,EAAM,YAAY,CAAK,EACjC,IAAU,IAAI,EAAM,OAAO,EAAO,CAAC,EACnC,EAAM,SAAW,GAAG,OAAO,oBAAoB,UAAW,CAAa,CAC/E,CACJ,EAAG,CAAC,EAAQ,CAAK,CAAC,CACtB"}
1
+ {"version":3,"file":"escape-layer.cjs","names":["useMemo","useRef","react","stack","sequence","handleKeyDown","event","top","useEscapeLayer","order","active","layer","onEscape","entry","index","other"],"sources":["../../../src/components/Portal/escape-layer.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\n\n/** One open layer that `Escape` can dismiss. */\ninterface EscapeLayer {\n /** Latest dismiss callback; `null` makes the layer swallow the key without closing. */\n current: (() => void) | null;\n /** Position in the stack: higher is more recently opened, or deeper in the tree. */\n order: number;\n}\n\nconst stack: EscapeLayer[] = [];\n\nlet sequence = 0;\n\n/**\n * The single `keydown` listener behind every layer.\n *\n * Dismisses only the top of the stack. Every overlay used to listen on `window`\n * and close on any `Escape`, so one key press closed everything open at once —\n * measured in Chrome, a `Modal` holding a `DropdownMenu`, `Combobox`,\n * `MultiSelect`, `Popover`, `ContextMenu`, editable `DataTable` cell or a second\n * `Modal` closed together with the inner layer in all seven cases, and a\n * `Drawer` closed with the `Popover` inside it.\n *\n * Two kinds of inner layer exist, and this covers both:\n *\n * - Layers that listen on `window` themselves can never see each other's\n * events, so they register here and only the most recently opened one reacts.\n * - Layers that handle the key on their own element (a menu, a combobox input,\n * an inline cell editor) run first — React's delegated listener sits below\n * `window` — and call `preventDefault()`. A consumed key is left alone.\n *\n * A key pressed while an IME is composing belongs to the composition (it cancels\n * the candidate), so it is ignored too.\n *\n * @param event - The native keyboard event.\n * @returns Nothing.\n */\nfunction handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== \"Escape\" || event.defaultPrevented || event.isComposing) return;\n const top = stack.at(-1);\n if (!top) return;\n event.preventDefault();\n top.current?.();\n}\n\n/**\n * Register an overlay as an `Escape`-dismissable layer while it is open.\n *\n * Layers stack in the order they open, so the one opened last is dismissed\n * first, and a second `Escape` reaches the next one down. The callback is read\n * through a ref, so a new closure on every render does not move the layer in\n * the stack.\n *\n * Pass `null` as `onEscape` for a modal layer whose dismissal is turned off\n * (`closeOnEsc={false}`): it stays on the stack and swallows the key, instead of\n * letting it fall through and close the modal underneath.\n *\n * The position is taken when the layer **renders** open, not when its effect\n * runs. Effects run child-first, so a `Modal` that mounts already holding an open\n * inner `Modal` would register the inner one first and put the outer one on top —\n * `Escape` would close the wrong layer, or a locked inner modal would let the key\n * through to the outer one. Parents render before their children, so render\n * order is tree order within a commit and opening order across commits. A\n * discarded or doubled render (Strict Mode, concurrent rendering) only skips\n * numbers; the relative order stays.\n *\n * @param active - Whether the layer is currently open.\n * @param onEscape - What `Escape` does to this layer, or `null` to block only.\n * @returns Nothing.\n */\nexport function useEscapeLayer(active: boolean, onEscape: (() => void) | null): void {\n const order = useMemo(() => (active ? ++sequence : 0), [active]);\n const layer = useRef<EscapeLayer>({ current: onEscape, order });\n\n useEffect(() => {\n layer.current.current = onEscape;\n }, [onEscape]);\n\n useEffect(() => {\n if (!active) return;\n const entry = layer.current;\n entry.order = order;\n if (stack.length === 0) window.addEventListener(\"keydown\", handleKeyDown);\n const index = stack.findIndex((other) => other.order > order);\n stack.splice(index === -1 ? stack.length : index, 0, entry);\n return () => {\n const index = stack.lastIndexOf(entry);\n if (index !== -1) stack.splice(index, 1);\n if (stack.length === 0) window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [active, order]);\n}\n"],"mappings":"A,uBAUA,IAAMG,EAAuB,CAAC,EAE1BC,EAAW,EA0Bf,SAASC,EAAc,EAA4B,CAC/C,GAAIC,EAAM,MAAQ,UAAYA,EAAM,kBAAoBA,EAAM,YAAa,OAC3E,IAAMC,EAAMJ,EAAM,GAAG,EAAE,EAClBI,IACLD,EAAM,eAAe,EACrBC,EAAI,UAAU,EAClB,CA2BA,SAAgBC,EAAe,EAAiB,EAAqC,CACjF,IAAMC,GAAA,EAAQT,EAAAA,QAAAA,KAAeU,EAAS,EAAEN,EAAW,EAAI,CAACM,CAAM,CAAC,EACzDC,GAAA,EAAQV,EAAAA,OAAAA,CAAoB,CAAE,QAASW,EAAU,OAAM,CAAC,GAE9D,EAAAV,EAAA,UAAA,KAAgB,CACZ,EAAM,QAAQ,QAAUU,CAC5B,EAAG,CAACA,CAAQ,CAAC,GAEb,EAAAV,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACQ,EAAQ,OACb,IAAMG,EAAQF,EAAM,QACpB,EAAM,MAAQF,EACVN,EAAM,SAAW,GAAG,OAAO,iBAAiB,UAAWE,CAAa,EACxE,IAAMS,EAAQX,EAAM,UAAW,GAAUY,EAAM,MAAQN,CAAK,EAE5D,OADAN,EAAM,OAAOW,IAAU,GAAKX,EAAM,OAASW,EAAO,EAAGD,CAAK,MAC7C,CACT,IAAMC,EAAQX,EAAM,YAAYU,CAAK,EACjCC,IAAU,IAAIX,EAAM,OAAOW,EAAO,CAAC,EACnCX,EAAM,SAAW,GAAG,OAAO,oBAAoB,UAAWE,CAAa,CAC/E,CACJ,EAAG,CAACK,EAAQD,CAAK,CAAC,CACtB,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"escape-layer.js","names":[],"sources":["../../../src/components/Portal/escape-layer.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\n\n/** One open layer that `Escape` can dismiss. */\ninterface EscapeLayer {\n /** Latest dismiss callback; `null` makes the layer swallow the key without closing. */\n current: (() => void) | null;\n /** Position in the stack: higher is more recently opened, or deeper in the tree. */\n order: number;\n}\n\nconst stack: EscapeLayer[] = [];\n\nlet sequence = 0;\n\n/**\n * The single `keydown` listener behind every layer.\n *\n * Dismisses only the top of the stack. Every overlay used to listen on `window`\n * and close on any `Escape`, so one key press closed everything open at once —\n * measured in Chrome, a `Modal` holding a `DropdownMenu`, `Combobox`,\n * `MultiSelect`, `Popover`, `ContextMenu`, editable `DataTable` cell or a second\n * `Modal` closed together with the inner layer in all seven cases, and a\n * `Drawer` closed with the `Popover` inside it.\n *\n * Two kinds of inner layer exist, and this covers both:\n *\n * - Layers that listen on `window` themselves can never see each other's\n * events, so they register here and only the most recently opened one reacts.\n * - Layers that handle the key on their own element (a menu, a combobox input,\n * an inline cell editor) run first — React's delegated listener sits below\n * `window` — and call `preventDefault()`. A consumed key is left alone.\n *\n * A key pressed while an IME is composing belongs to the composition (it cancels\n * the candidate), so it is ignored too.\n *\n * @param event - The native keyboard event.\n * @returns Nothing.\n */\nfunction handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== \"Escape\" || event.defaultPrevented || event.isComposing) return;\n const top = stack.at(-1);\n if (!top) return;\n event.preventDefault();\n top.current?.();\n}\n\n/**\n * Register an overlay as an `Escape`-dismissable layer while it is open.\n *\n * Layers stack in the order they open, so the one opened last is dismissed\n * first, and a second `Escape` reaches the next one down. The callback is read\n * through a ref, so a new closure on every render does not move the layer in\n * the stack.\n *\n * Pass `null` as `onEscape` for a modal layer whose dismissal is turned off\n * (`closeOnEsc={false}`): it stays on the stack and swallows the key, instead of\n * letting it fall through and close the modal underneath.\n *\n * The position is taken when the layer **renders** open, not when its effect\n * runs. Effects run child-first, so a `Modal` that mounts already holding an open\n * inner `Modal` would register the inner one first and put the outer one on top —\n * `Escape` would close the wrong layer, or a locked inner modal would let the key\n * through to the outer one. Parents render before their children, so render\n * order is tree order within a commit and opening order across commits. A\n * discarded or doubled render (Strict Mode, concurrent rendering) only skips\n * numbers; the relative order stays.\n *\n * @param active - Whether the layer is currently open.\n * @param onEscape - What `Escape` does to this layer, or `null` to block only.\n * @returns Nothing.\n */\nexport function useEscapeLayer(active: boolean, onEscape: (() => void) | null): void {\n const order = useMemo(() => (active ? ++sequence : 0), [active]);\n const layer = useRef<EscapeLayer>({ current: onEscape, order });\n\n useEffect(() => {\n layer.current.current = onEscape;\n }, [onEscape]);\n\n useEffect(() => {\n if (!active) return;\n const entry = layer.current;\n entry.order = order;\n if (stack.length === 0) window.addEventListener(\"keydown\", handleKeyDown);\n const index = stack.findIndex((other) => other.order > order);\n stack.splice(index === -1 ? stack.length : index, 0, entry);\n return () => {\n const index = stack.lastIndexOf(entry);\n if (index !== -1) stack.splice(index, 1);\n if (stack.length === 0) window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [active, order]);\n}\n"],"mappings":";;AAUA,IAAM,IAAuB,CAAC,GAE1B,IAAW;AA0Bf,SAAS,EAAc,GAA4B;CAC/C,IAAI,EAAM,QAAQ,YAAY,EAAM,oBAAoB,EAAM,aAAa;CAC3E,IAAM,IAAM,EAAM,GAAG,EAAE;CAClB,MACL,EAAM,eAAe,GACrB,EAAI,UAAU;AAClB;AA2BA,SAAgB,EAAe,GAAiB,GAAqC;CACjF,IAAM,IAAQ,QAAe,IAAS,EAAE,IAAW,GAAI,CAAC,CAAM,CAAC,GACzD,IAAQ,EAAoB;EAAE,SAAS;EAAU;CAAM,CAAC;CAM9D,AAJA,QAAgB;EACZ,EAAM,QAAQ,UAAU;CAC5B,GAAG,CAAC,CAAQ,CAAC,GAEb,QAAgB;EACZ,IAAI,CAAC,GAAQ;EACb,IAAM,IAAQ,EAAM;EAEpB,AADA,EAAM,QAAQ,GACV,EAAM,WAAW,KAAG,OAAO,iBAAiB,WAAW,CAAa;EACxE,IAAM,IAAQ,EAAM,WAAW,MAAU,EAAM,QAAQ,CAAK;EAE5D,OADA,EAAM,OAAO,MAAU,KAAK,EAAM,SAAS,GAAO,GAAG,CAAK,SAC7C;GACT,IAAM,IAAQ,EAAM,YAAY,CAAK;GAErC,AADI,MAAU,MAAI,EAAM,OAAO,GAAO,CAAC,GACnC,EAAM,WAAW,KAAG,OAAO,oBAAoB,WAAW,CAAa;EAC/E;CACJ,GAAG,CAAC,GAAQ,CAAK,CAAC;AACtB"}
1
+ {"version":3,"file":"escape-layer.js","names":["stack","sequence","handleKeyDown","event","top","useEscapeLayer","order","useMemo","active","layer","useRef","onEscape","useEffect","entry","index","other"],"sources":["../../../src/components/Portal/escape-layer.ts"],"sourcesContent":["import { useEffect, useMemo, useRef } from \"react\";\n\n/** One open layer that `Escape` can dismiss. */\ninterface EscapeLayer {\n /** Latest dismiss callback; `null` makes the layer swallow the key without closing. */\n current: (() => void) | null;\n /** Position in the stack: higher is more recently opened, or deeper in the tree. */\n order: number;\n}\n\nconst stack: EscapeLayer[] = [];\n\nlet sequence = 0;\n\n/**\n * The single `keydown` listener behind every layer.\n *\n * Dismisses only the top of the stack. Every overlay used to listen on `window`\n * and close on any `Escape`, so one key press closed everything open at once —\n * measured in Chrome, a `Modal` holding a `DropdownMenu`, `Combobox`,\n * `MultiSelect`, `Popover`, `ContextMenu`, editable `DataTable` cell or a second\n * `Modal` closed together with the inner layer in all seven cases, and a\n * `Drawer` closed with the `Popover` inside it.\n *\n * Two kinds of inner layer exist, and this covers both:\n *\n * - Layers that listen on `window` themselves can never see each other's\n * events, so they register here and only the most recently opened one reacts.\n * - Layers that handle the key on their own element (a menu, a combobox input,\n * an inline cell editor) run first — React's delegated listener sits below\n * `window` — and call `preventDefault()`. A consumed key is left alone.\n *\n * A key pressed while an IME is composing belongs to the composition (it cancels\n * the candidate), so it is ignored too.\n *\n * @param event - The native keyboard event.\n * @returns Nothing.\n */\nfunction handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== \"Escape\" || event.defaultPrevented || event.isComposing) return;\n const top = stack.at(-1);\n if (!top) return;\n event.preventDefault();\n top.current?.();\n}\n\n/**\n * Register an overlay as an `Escape`-dismissable layer while it is open.\n *\n * Layers stack in the order they open, so the one opened last is dismissed\n * first, and a second `Escape` reaches the next one down. The callback is read\n * through a ref, so a new closure on every render does not move the layer in\n * the stack.\n *\n * Pass `null` as `onEscape` for a modal layer whose dismissal is turned off\n * (`closeOnEsc={false}`): it stays on the stack and swallows the key, instead of\n * letting it fall through and close the modal underneath.\n *\n * The position is taken when the layer **renders** open, not when its effect\n * runs. Effects run child-first, so a `Modal` that mounts already holding an open\n * inner `Modal` would register the inner one first and put the outer one on top —\n * `Escape` would close the wrong layer, or a locked inner modal would let the key\n * through to the outer one. Parents render before their children, so render\n * order is tree order within a commit and opening order across commits. A\n * discarded or doubled render (Strict Mode, concurrent rendering) only skips\n * numbers; the relative order stays.\n *\n * @param active - Whether the layer is currently open.\n * @param onEscape - What `Escape` does to this layer, or `null` to block only.\n * @returns Nothing.\n */\nexport function useEscapeLayer(active: boolean, onEscape: (() => void) | null): void {\n const order = useMemo(() => (active ? ++sequence : 0), [active]);\n const layer = useRef<EscapeLayer>({ current: onEscape, order });\n\n useEffect(() => {\n layer.current.current = onEscape;\n }, [onEscape]);\n\n useEffect(() => {\n if (!active) return;\n const entry = layer.current;\n entry.order = order;\n if (stack.length === 0) window.addEventListener(\"keydown\", handleKeyDown);\n const index = stack.findIndex((other) => other.order > order);\n stack.splice(index === -1 ? stack.length : index, 0, entry);\n return () => {\n const index = stack.lastIndexOf(entry);\n if (index !== -1) stack.splice(index, 1);\n if (stack.length === 0) window.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [active, order]);\n}\n"],"mappings":";;AAUA,IAAMA,IAAuB,CAAC,GAE1BC,IAAW;AA0Bf,SAASC,EAAc,GAA4B;CAC/C,IAAIC,EAAM,QAAQ,YAAYA,EAAM,oBAAoBA,EAAM,aAAa;CAC3E,IAAMC,IAAMJ,EAAM,GAAG,EAAE;CACvB,AAAKI,MACLD,EAAM,eAAe,GACrBC,EAAI,UAAU;AAClB;AA2BA,SAAgBC,EAAe,GAAiB,GAAqC;CACjF,IAAMC,IAAQC,QAAeC,IAAS,EAAEP,IAAW,GAAI,CAACO,CAAM,CAAC,GACzDC,IAAQC,EAAoB;EAAE,SAASC;EAAU;CAAM,CAAC;CAM9D,AAJAC,QAAgB;EACZ,EAAM,QAAQ,UAAUD;CAC5B,GAAG,CAACA,CAAQ,CAAC,GAEbC,QAAgB;EACZ,IAAI,CAACJ,GAAQ;EACb,IAAMK,IAAQJ,EAAM;EAEpB,AADA,EAAM,QAAQH,GACVN,EAAM,WAAW,KAAG,OAAO,iBAAiB,WAAWE,CAAa;EACxE,IAAMY,IAAQd,EAAM,WAAW,MAAUe,EAAM,QAAQT,CAAK;EAE5D,OADAN,EAAM,OAAOc,MAAU,KAAKd,EAAM,SAASc,GAAO,GAAGD,CAAK,SAC7C;GACT,IAAMC,IAAQd,EAAM,YAAYa,CAAK;GAErC,AADIC,MAAU,MAAId,EAAM,OAAOc,GAAO,CAAC,GACnCd,EAAM,WAAW,KAAG,OAAO,oBAAoB,WAAWE,CAAa;EAC/E;CACJ,GAAG,CAACM,GAAQF,CAAK,CAAC;AACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"portal-host.cjs","names":[],"sources":["../../../src/components/Portal/portal-host.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { useFullscreenElement } from \"@/hooks/use-fullscreen-element\";\n\n/**\n * The element a portal should render into.\n *\n * `document.body` is the obvious answer and the wrong one while the page is in\n * fullscreen: the browser paints only the subtree of the fullscreen element, and\n * `body` is outside it. An overlay portalled there exists in the DOM, has a\n * measured box, and is neither visible nor clickable — `elementFromPoint` at its\n * centre returns whatever sits behind it. Nothing throws and nothing logs, so the\n * app is left holding a dialog nobody can see.\n *\n * The fullscreen element can appear and disappear while a portal is mounted, so\n * the host is state rather than a one-time read. That subscription — the two\n * events, standard and WebKit-prefixed — lives in `useFullscreenElement`, because\n * `useFullscreen` needs the identical fact to answer a different question; this\n * module only asks it where to mount.\n */\n\n/**\n * Resolve where a portal should mount, following fullscreen changes.\n *\n * The first value is resolved during render rather than in an effect, so an\n * overlay that opens still mounts in the same commit it used to — the\n * subscription only follows changes from there.\n *\n * @returns The fullscreen element while one is presented, otherwise\n * `document.body`; `null` in any environment without a `document`.\n */\nexport function usePortalHost(): Element | null {\n const fullscreen = useFullscreenElement();\n const [body] = useState<HTMLElement | null>(() =>\n typeof document === \"undefined\" ? null : document.body,\n );\n\n return fullscreen ?? body;\n}\n"],"mappings":"iFA8BA,SAAgB,GAAgC,CAC5C,IAAM,EAAa,EAAA,qBAAqB,EAClC,CAAC,IAAA,EAAQ,EAAA,SAAA,KACX,OAAO,SAAa,IAAc,KAAO,SAAS,IACtD,EAEA,OAAO,GAAc,CACzB"}
1
+ {"version":3,"file":"portal-host.cjs","names":["useFullscreenElement","useState","require_use_fullscreen_element","react","usePortalHost","fullscreen","body"],"sources":["../../../src/components/Portal/portal-host.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { useFullscreenElement } from \"@/hooks/use-fullscreen-element\";\n\n/**\n * The element a portal should render into.\n *\n * `document.body` is the obvious answer and the wrong one while the page is in\n * fullscreen: the browser paints only the subtree of the fullscreen element, and\n * `body` is outside it. An overlay portalled there exists in the DOM, has a\n * measured box, and is neither visible nor clickable — `elementFromPoint` at its\n * centre returns whatever sits behind it. Nothing throws and nothing logs, so the\n * app is left holding a dialog nobody can see.\n *\n * The fullscreen element can appear and disappear while a portal is mounted, so\n * the host is state rather than a one-time read. That subscription — the two\n * events, standard and WebKit-prefixed — lives in `useFullscreenElement`, because\n * `useFullscreen` needs the identical fact to answer a different question; this\n * module only asks it where to mount.\n */\n\n/**\n * Resolve where a portal should mount, following fullscreen changes.\n *\n * The first value is resolved during render rather than in an effect, so an\n * overlay that opens still mounts in the same commit it used to — the\n * subscription only follows changes from there.\n *\n * @returns The fullscreen element while one is presented, otherwise\n * `document.body`; `null` in any environment without a `document`.\n */\nexport function usePortalHost(): Element | null {\n const fullscreen = useFullscreenElement();\n const [body] = useState<HTMLElement | null>(() =>\n typeof document === \"undefined\" ? null : document.body,\n );\n\n return fullscreen ?? body;\n}\n"],"mappings":"A,iFA8BA,SAAgBI,GAAgC,CAC5C,IAAMC,EAAaL,EAAAA,qBAAqB,EAClC,CAACM,IAAA,EAAQL,EAAAA,SAAAA,KACX,OAAO,SAAa,IAAc,KAAO,SAAS,IACtD,EAEA,OAAOI,GAAcC,CACzB,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"portal-host.js","names":[],"sources":["../../../src/components/Portal/portal-host.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { useFullscreenElement } from \"@/hooks/use-fullscreen-element\";\n\n/**\n * The element a portal should render into.\n *\n * `document.body` is the obvious answer and the wrong one while the page is in\n * fullscreen: the browser paints only the subtree of the fullscreen element, and\n * `body` is outside it. An overlay portalled there exists in the DOM, has a\n * measured box, and is neither visible nor clickable — `elementFromPoint` at its\n * centre returns whatever sits behind it. Nothing throws and nothing logs, so the\n * app is left holding a dialog nobody can see.\n *\n * The fullscreen element can appear and disappear while a portal is mounted, so\n * the host is state rather than a one-time read. That subscription — the two\n * events, standard and WebKit-prefixed — lives in `useFullscreenElement`, because\n * `useFullscreen` needs the identical fact to answer a different question; this\n * module only asks it where to mount.\n */\n\n/**\n * Resolve where a portal should mount, following fullscreen changes.\n *\n * The first value is resolved during render rather than in an effect, so an\n * overlay that opens still mounts in the same commit it used to — the\n * subscription only follows changes from there.\n *\n * @returns The fullscreen element while one is presented, otherwise\n * `document.body`; `null` in any environment without a `document`.\n */\nexport function usePortalHost(): Element | null {\n const fullscreen = useFullscreenElement();\n const [body] = useState<HTMLElement | null>(() =>\n typeof document === \"undefined\" ? null : document.body,\n );\n\n return fullscreen ?? body;\n}\n"],"mappings":";;;AA8BA,SAAgB,IAAgC;CAC5C,IAAM,IAAa,EAAqB,GAClC,CAAC,KAAQ,QACX,OAAO,WAAa,MAAc,OAAO,SAAS,IACtD;CAEA,OAAO,KAAc;AACzB"}
1
+ {"version":3,"file":"portal-host.js","names":["usePortalHost","fullscreen","useFullscreenElement","body","useState"],"sources":["../../../src/components/Portal/portal-host.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { useFullscreenElement } from \"@/hooks/use-fullscreen-element\";\n\n/**\n * The element a portal should render into.\n *\n * `document.body` is the obvious answer and the wrong one while the page is in\n * fullscreen: the browser paints only the subtree of the fullscreen element, and\n * `body` is outside it. An overlay portalled there exists in the DOM, has a\n * measured box, and is neither visible nor clickable — `elementFromPoint` at its\n * centre returns whatever sits behind it. Nothing throws and nothing logs, so the\n * app is left holding a dialog nobody can see.\n *\n * The fullscreen element can appear and disappear while a portal is mounted, so\n * the host is state rather than a one-time read. That subscription — the two\n * events, standard and WebKit-prefixed — lives in `useFullscreenElement`, because\n * `useFullscreen` needs the identical fact to answer a different question; this\n * module only asks it where to mount.\n */\n\n/**\n * Resolve where a portal should mount, following fullscreen changes.\n *\n * The first value is resolved during render rather than in an effect, so an\n * overlay that opens still mounts in the same commit it used to — the\n * subscription only follows changes from there.\n *\n * @returns The fullscreen element while one is presented, otherwise\n * `document.body`; `null` in any environment without a `document`.\n */\nexport function usePortalHost(): Element | null {\n const fullscreen = useFullscreenElement();\n const [body] = useState<HTMLElement | null>(() =>\n typeof document === \"undefined\" ? null : document.body,\n );\n\n return fullscreen ?? body;\n}\n"],"mappings":";;;AA8BA,SAAgBA,IAAgC;CAC5C,IAAMC,IAAaC,EAAqB,GAClC,CAACC,KAAQC,QACX,OAAO,WAAa,MAAc,OAAO,SAAS,IACtD;CAEA,OAAOH,KAAcE;AACzB"}
@@ -1,2 +1,2 @@
1
- const e=require("../../hooks/tab-sequence.cjs");let t=require("react");function n({enabled:n,anchor:r,panel:i}){(0,t.useEffect)(()=>{if(!n||!r||!i)return;let t=(e,t)=>{t&&(e.preventDefault(),t.focus())},a=n=>{if(n.key!==`Tab`||n.defaultPrevented)return;let a=e.tabbables(i);if(a.length===0)return;let o=document.activeElement;if(!o)return;let s=e.tabbables(document).filter(e=>!i.contains(e)),c=s.filter(e=>r.contains(e)).at(-1),l=c?s[s.indexOf(c)+1]:void 0;if(i.contains(o)){!n.shiftKey&&o===a.at(-1)&&t(n,l),n.shiftKey&&o===a[0]&&t(n,c);return}!n.shiftKey&&o===c&&t(n,a[0]),n.shiftKey&&l&&o===l&&t(n,a.at(-1))},o=e.registerPortalLayer({anchor:r,panel:i});return document.addEventListener(`keydown`,a,!0),()=>{o(),document.removeEventListener(`keydown`,a,!0)}},[n,r,i])}exports.usePortalTabOrder=n;
1
+ const e=require("../../hooks/tab-sequence.cjs");let t=require("react");function n({enabled:n,anchor:r,panel:i}){(0,t.useEffect)(()=>{if(!n||!r||!i)return;let t=(e,t)=>{t&&(e.preventDefault(),t.focus())},a=n=>{if(n.key!==`Tab`||n.defaultPrevented)return;let a=e.tabbables(i);if(a.length===0)return;let o=document.activeElement;if(!o)return;let s=e.tabbables(document).filter(e=>!i.contains(e)),c=s.filter(e=>r.contains(e)).at(-1),l=c?s[s.indexOf(c)+1]:void 0;i.contains(o)?(!n.shiftKey&&o===a.at(-1)&&t(n,l),n.shiftKey&&o===a[0]&&t(n,c)):(!n.shiftKey&&o===c&&t(n,a[0]),n.shiftKey&&l&&o===l&&t(n,a.at(-1)))},o=e.registerPortalLayer({anchor:r,panel:i});return document.addEventListener(`keydown`,a,!0),()=>{o(),document.removeEventListener(`keydown`,a,!0)}},[n,r,i])}exports.usePortalTabOrder=n;
2
2
  //# sourceMappingURL=tab-bridge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-bridge.cjs","names":[],"sources":["../../../src/components/Portal/tab-bridge.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { registerPortalLayer, tabbables } from \"@/hooks/tab-sequence\";\n\n/** Options of {@link usePortalTabOrder}. */\nexport interface PortalTabOrderOptions {\n /** Whether the panel is open and portalled. */\n enabled: boolean;\n /** Wrapper of the trigger — the spot in the page the panel belongs to. */\n anchor: HTMLElement | null;\n /** The portalled panel. */\n panel: HTMLElement | null;\n}\n\n/**\n * Put a portalled panel back in the tab order, right after its trigger.\n *\n * A portal moves the panel to the end of `body`, so the browser's own order goes\n * from the trigger straight to whatever follows it in the page and reaches the\n * panel last, if ever. Measured in Chrome on a `Popover` holding two inputs:\n * in flow, `Tab` from the open trigger landed on the first input; in a portal it\n * skipped the panel and went to the next button of the page.\n *\n * While the panel is open, this restores the in-flow order:\n *\n * - `Tab` on the last stop of the anchor enters the panel's first stop.\n * - `Tab` on the panel's last stop leaves to the first stop after the anchor.\n * - `Shift+Tab` on the panel's first stop returns to the anchor.\n * - `Shift+Tab` on the first stop after the anchor enters the panel's last stop.\n *\n * Listened on `document` in the capture phase and marked consumed, so it runs\n * before an enclosing `Modal`'s focus trap, which skips a consumed `Tab`. The\n * panel is also registered as a layer of its anchor, which is how that trap\n * knows the panel belongs inside it although the portal put it outside.\n *\n * @param options - Whether it is active, the anchor and the panel.\n * @returns Nothing.\n */\nexport function usePortalTabOrder({ enabled, anchor, panel }: PortalTabOrderOptions): void {\n useEffect(() => {\n if (!enabled || !anchor || !panel) return;\n\n const move = (event: KeyboardEvent, target: HTMLElement | undefined): void => {\n if (!target) return;\n event.preventDefault();\n target.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== \"Tab\" || event.defaultPrevented) return;\n const inPanel = tabbables(panel);\n if (inPanel.length === 0) return;\n const active = document.activeElement as HTMLElement | null;\n if (!active) return;\n const page = tabbables(document).filter((el) => !panel.contains(el));\n const inAnchor = page.filter((el) => anchor.contains(el));\n const lastOfAnchor = inAnchor.at(-1);\n const afterAnchor = lastOfAnchor ? page[page.indexOf(lastOfAnchor) + 1] : undefined;\n\n if (panel.contains(active)) {\n if (!event.shiftKey && active === inPanel.at(-1)) move(event, afterAnchor);\n if (event.shiftKey && active === inPanel[0]) move(event, lastOfAnchor);\n return;\n }\n if (!event.shiftKey && active === lastOfAnchor) move(event, inPanel[0]);\n if (event.shiftKey && afterAnchor && active === afterAnchor) {\n move(event, inPanel.at(-1));\n }\n };\n\n const unregister = registerPortalLayer({ anchor, panel });\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n unregister();\n document.removeEventListener(\"keydown\", onKeyDown, true);\n };\n }, [enabled, anchor, panel]);\n}\n"],"mappings":"uEAqCA,SAAgB,EAAkB,CAAE,UAAS,SAAQ,SAAsC,EACvF,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,GAAW,CAAC,GAAU,CAAC,EAAO,OAEnC,IAAM,GAAQ,EAAsB,IAA0C,CACrE,IACL,EAAM,eAAe,EACrB,EAAO,MAAM,EACjB,EAEM,EAAa,GAA+B,CAC9C,GAAI,EAAM,MAAQ,OAAS,EAAM,iBAAkB,OACnD,IAAM,EAAU,EAAA,UAAU,CAAK,EAC/B,GAAI,EAAQ,SAAW,EAAG,OAC1B,IAAM,EAAS,SAAS,cACxB,GAAI,CAAC,EAAQ,OACb,IAAM,EAAO,EAAA,UAAU,QAAQ,CAAC,CAAC,OAAQ,GAAO,CAAC,EAAM,SAAS,CAAE,CAAC,EAE7D,EADW,EAAK,OAAQ,GAAO,EAAO,SAAS,CAAE,CAClC,CAAA,CAAS,GAAG,EAAE,EAC7B,EAAc,EAAe,EAAK,EAAK,QAAQ,CAAY,EAAI,GAAK,IAAA,GAE1E,GAAI,EAAM,SAAS,CAAM,EAAG,CACpB,CAAC,EAAM,UAAY,IAAW,EAAQ,GAAG,EAAE,GAAG,EAAK,EAAO,CAAW,EACrE,EAAM,UAAY,IAAW,EAAQ,IAAI,EAAK,EAAO,CAAY,EACrE,MACJ,CACI,CAAC,EAAM,UAAY,IAAW,GAAc,EAAK,EAAO,EAAQ,EAAE,EAClE,EAAM,UAAY,GAAe,IAAW,GAC5C,EAAK,EAAO,EAAQ,GAAG,EAAE,CAAC,CAElC,EAEM,EAAa,EAAA,oBAAoB,CAAE,SAAQ,OAAM,CAAC,EAExD,OADA,SAAS,iBAAiB,UAAW,EAAW,EAAI,MACvC,CACT,EAAW,EACX,SAAS,oBAAoB,UAAW,EAAW,EAAI,CAC3D,CACJ,EAAG,CAAC,EAAS,EAAQ,CAAK,CAAC,CAC/B"}
1
+ {"version":3,"file":"tab-bridge.cjs","names":["tabbables","registerPortalLayer","require_tab_sequence","react","usePortalTabOrder","enabled","anchor","panel","move","target","event","onKeyDown","inPanel","active","page","el","lastOfAnchor","afterAnchor","unregister"],"sources":["../../../src/components/Portal/tab-bridge.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { registerPortalLayer, tabbables } from \"@/hooks/tab-sequence\";\n\n/** Options of {@link usePortalTabOrder}. */\nexport interface PortalTabOrderOptions {\n /** Whether the panel is open and portalled. */\n enabled: boolean;\n /** Wrapper of the trigger — the spot in the page the panel belongs to. */\n anchor: HTMLElement | null;\n /** The portalled panel. */\n panel: HTMLElement | null;\n}\n\n/**\n * Put a portalled panel back in the tab order, right after its trigger.\n *\n * A portal moves the panel to the end of `body`, so the browser's own order goes\n * from the trigger straight to whatever follows it in the page and reaches the\n * panel last, if ever. Measured in Chrome on a `Popover` holding two inputs:\n * in flow, `Tab` from the open trigger landed on the first input; in a portal it\n * skipped the panel and went to the next button of the page.\n *\n * While the panel is open, this restores the in-flow order:\n *\n * - `Tab` on the last stop of the anchor enters the panel's first stop.\n * - `Tab` on the panel's last stop leaves to the first stop after the anchor.\n * - `Shift+Tab` on the panel's first stop returns to the anchor.\n * - `Shift+Tab` on the first stop after the anchor enters the panel's last stop.\n *\n * Listened on `document` in the capture phase and marked consumed, so it runs\n * before an enclosing `Modal`'s focus trap, which skips a consumed `Tab`. The\n * panel is also registered as a layer of its anchor, which is how that trap\n * knows the panel belongs inside it although the portal put it outside.\n *\n * @param options - Whether it is active, the anchor and the panel.\n * @returns Nothing.\n */\nexport function usePortalTabOrder({ enabled, anchor, panel }: PortalTabOrderOptions): void {\n useEffect(() => {\n if (!enabled || !anchor || !panel) return;\n\n const move = (event: KeyboardEvent, target: HTMLElement | undefined): void => {\n if (!target) return;\n event.preventDefault();\n target.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== \"Tab\" || event.defaultPrevented) return;\n const inPanel = tabbables(panel);\n if (inPanel.length === 0) return;\n const active = document.activeElement as HTMLElement | null;\n if (!active) return;\n const page = tabbables(document).filter((el) => !panel.contains(el));\n const inAnchor = page.filter((el) => anchor.contains(el));\n const lastOfAnchor = inAnchor.at(-1);\n const afterAnchor = lastOfAnchor ? page[page.indexOf(lastOfAnchor) + 1] : undefined;\n\n if (panel.contains(active)) {\n if (!event.shiftKey && active === inPanel.at(-1)) move(event, afterAnchor);\n if (event.shiftKey && active === inPanel[0]) move(event, lastOfAnchor);\n return;\n }\n if (!event.shiftKey && active === lastOfAnchor) move(event, inPanel[0]);\n if (event.shiftKey && afterAnchor && active === afterAnchor) {\n move(event, inPanel.at(-1));\n }\n };\n\n const unregister = registerPortalLayer({ anchor, panel });\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n unregister();\n document.removeEventListener(\"keydown\", onKeyDown, true);\n };\n }, [enabled, anchor, panel]);\n}\n"],"mappings":"A,uEAqCA,SAAgBI,EAAkB,CAAE,UAAS,SAAQ,SAAsC,EACvF,EAAAD,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACE,GAAW,CAACC,GAAU,CAACC,EAAO,OAEnC,IAAMC,GAAQ,EAAsB,IAA0C,CACrEC,IACLC,EAAM,eAAe,EACrBD,EAAO,MAAM,EACjB,EAEME,EAAa,GAA+B,CAC9C,GAAID,EAAM,MAAQ,OAASA,EAAM,iBAAkB,OACnD,IAAME,EAAUZ,EAAAA,UAAUO,CAAK,EAC/B,GAAIK,EAAQ,SAAW,EAAG,OAC1B,IAAMC,EAAS,SAAS,cACxB,GAAI,CAACA,EAAQ,OACb,IAAMC,EAAOd,EAAAA,UAAU,QAAQ,CAAC,CAAC,OAAQ,GAAO,CAACO,EAAM,SAASQ,CAAE,CAAC,EAE7DC,EADWF,EAAK,OAAQ,GAAOR,EAAO,SAASS,CAAE,CAClC,CAAA,CAAS,GAAG,EAAE,EAC7BE,EAAcD,EAAeF,EAAKA,EAAK,QAAQE,CAAY,EAAI,GAAK,IAAA,GAEtET,EAAM,SAASM,CAAM,GACjB,CAACH,EAAM,UAAYG,IAAWD,EAAQ,GAAG,EAAE,GAAGJ,EAAKE,EAAOO,CAAW,EACrEP,EAAM,UAAYG,IAAWD,EAAQ,IAAIJ,EAAKE,EAAOM,CAAY,IAGrE,CAACN,EAAM,UAAYG,IAAWG,GAAcR,EAAKE,EAAOE,EAAQ,EAAE,EAClEF,EAAM,UAAYO,GAAeJ,IAAWI,GAC5CT,EAAKE,EAAOE,EAAQ,GAAG,EAAE,CAAC,EAElC,EAEMM,EAAajB,EAAAA,oBAAoB,CAAE,SAAQ,OAAM,CAAC,EAExD,OADA,SAAS,iBAAiB,UAAWU,EAAW,EAAI,MACvC,CACTO,EAAW,EACX,SAAS,oBAAoB,UAAWP,EAAW,EAAI,CAC3D,CACJ,EAAG,CAACN,EAASC,EAAQC,CAAK,CAAC,CAC/B,C"}
@@ -13,11 +13,7 @@ function r({ enabled: r, anchor: i, panel: a }) {
13
13
  let o = document.activeElement;
14
14
  if (!o) return;
15
15
  let s = t(document).filter((e) => !a.contains(e)), c = s.filter((e) => i.contains(e)).at(-1), l = c ? s[s.indexOf(c) + 1] : void 0;
16
- if (a.contains(o)) {
17
- !e.shiftKey && o === r.at(-1) && n(e, l), e.shiftKey && o === r[0] && n(e, c);
18
- return;
19
- }
20
- !e.shiftKey && o === c && n(e, r[0]), e.shiftKey && l && o === l && n(e, r.at(-1));
16
+ a.contains(o) ? (!e.shiftKey && o === r.at(-1) && n(e, l), e.shiftKey && o === r[0] && n(e, c)) : (!e.shiftKey && o === c && n(e, r[0]), e.shiftKey && l && o === l && n(e, r.at(-1)));
21
17
  }, s = e({
22
18
  anchor: i,
23
19
  panel: a
@@ -1 +1 @@
1
- {"version":3,"file":"tab-bridge.js","names":[],"sources":["../../../src/components/Portal/tab-bridge.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { registerPortalLayer, tabbables } from \"@/hooks/tab-sequence\";\n\n/** Options of {@link usePortalTabOrder}. */\nexport interface PortalTabOrderOptions {\n /** Whether the panel is open and portalled. */\n enabled: boolean;\n /** Wrapper of the trigger — the spot in the page the panel belongs to. */\n anchor: HTMLElement | null;\n /** The portalled panel. */\n panel: HTMLElement | null;\n}\n\n/**\n * Put a portalled panel back in the tab order, right after its trigger.\n *\n * A portal moves the panel to the end of `body`, so the browser's own order goes\n * from the trigger straight to whatever follows it in the page and reaches the\n * panel last, if ever. Measured in Chrome on a `Popover` holding two inputs:\n * in flow, `Tab` from the open trigger landed on the first input; in a portal it\n * skipped the panel and went to the next button of the page.\n *\n * While the panel is open, this restores the in-flow order:\n *\n * - `Tab` on the last stop of the anchor enters the panel's first stop.\n * - `Tab` on the panel's last stop leaves to the first stop after the anchor.\n * - `Shift+Tab` on the panel's first stop returns to the anchor.\n * - `Shift+Tab` on the first stop after the anchor enters the panel's last stop.\n *\n * Listened on `document` in the capture phase and marked consumed, so it runs\n * before an enclosing `Modal`'s focus trap, which skips a consumed `Tab`. The\n * panel is also registered as a layer of its anchor, which is how that trap\n * knows the panel belongs inside it although the portal put it outside.\n *\n * @param options - Whether it is active, the anchor and the panel.\n * @returns Nothing.\n */\nexport function usePortalTabOrder({ enabled, anchor, panel }: PortalTabOrderOptions): void {\n useEffect(() => {\n if (!enabled || !anchor || !panel) return;\n\n const move = (event: KeyboardEvent, target: HTMLElement | undefined): void => {\n if (!target) return;\n event.preventDefault();\n target.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== \"Tab\" || event.defaultPrevented) return;\n const inPanel = tabbables(panel);\n if (inPanel.length === 0) return;\n const active = document.activeElement as HTMLElement | null;\n if (!active) return;\n const page = tabbables(document).filter((el) => !panel.contains(el));\n const inAnchor = page.filter((el) => anchor.contains(el));\n const lastOfAnchor = inAnchor.at(-1);\n const afterAnchor = lastOfAnchor ? page[page.indexOf(lastOfAnchor) + 1] : undefined;\n\n if (panel.contains(active)) {\n if (!event.shiftKey && active === inPanel.at(-1)) move(event, afterAnchor);\n if (event.shiftKey && active === inPanel[0]) move(event, lastOfAnchor);\n return;\n }\n if (!event.shiftKey && active === lastOfAnchor) move(event, inPanel[0]);\n if (event.shiftKey && afterAnchor && active === afterAnchor) {\n move(event, inPanel.at(-1));\n }\n };\n\n const unregister = registerPortalLayer({ anchor, panel });\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n unregister();\n document.removeEventListener(\"keydown\", onKeyDown, true);\n };\n }, [enabled, anchor, panel]);\n}\n"],"mappings":";;;AAqCA,SAAgB,EAAkB,EAAE,YAAS,WAAQ,YAAsC;CACvF,QAAgB;EACZ,IAAI,CAAC,KAAW,CAAC,KAAU,CAAC,GAAO;EAEnC,IAAM,KAAQ,GAAsB,MAA0C;GACrE,MACL,EAAM,eAAe,GACrB,EAAO,MAAM;EACjB,GAEM,KAAa,MAA+B;GAC9C,IAAI,EAAM,QAAQ,SAAS,EAAM,kBAAkB;GACnD,IAAM,IAAU,EAAU,CAAK;GAC/B,IAAI,EAAQ,WAAW,GAAG;GAC1B,IAAM,IAAS,SAAS;GACxB,IAAI,CAAC,GAAQ;GACb,IAAM,IAAO,EAAU,QAAQ,CAAC,CAAC,QAAQ,MAAO,CAAC,EAAM,SAAS,CAAE,CAAC,GAE7D,IADW,EAAK,QAAQ,MAAO,EAAO,SAAS,CAAE,CAClC,CAAA,CAAS,GAAG,EAAE,GAC7B,IAAc,IAAe,EAAK,EAAK,QAAQ,CAAY,IAAI,KAAK,KAAA;GAE1E,IAAI,EAAM,SAAS,CAAM,GAAG;IAExB,AADI,CAAC,EAAM,YAAY,MAAW,EAAQ,GAAG,EAAE,KAAG,EAAK,GAAO,CAAW,GACrE,EAAM,YAAY,MAAW,EAAQ,MAAI,EAAK,GAAO,CAAY;IACrE;GACJ;GAEA,AADI,CAAC,EAAM,YAAY,MAAW,KAAc,EAAK,GAAO,EAAQ,EAAE,GAClE,EAAM,YAAY,KAAe,MAAW,KAC5C,EAAK,GAAO,EAAQ,GAAG,EAAE,CAAC;EAElC,GAEM,IAAa,EAAoB;GAAE;GAAQ;EAAM,CAAC;EAExD,OADA,SAAS,iBAAiB,WAAW,GAAW,EAAI,SACvC;GAET,AADA,EAAW,GACX,SAAS,oBAAoB,WAAW,GAAW,EAAI;EAC3D;CACJ,GAAG;EAAC;EAAS;EAAQ;CAAK,CAAC;AAC/B"}
1
+ {"version":3,"file":"tab-bridge.js","names":["usePortalTabOrder","enabled","anchor","panel","move","target","event","onKeyDown","inPanel","tabbables","active","page","el","lastOfAnchor","afterAnchor","unregister","registerPortalLayer"],"sources":["../../../src/components/Portal/tab-bridge.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { registerPortalLayer, tabbables } from \"@/hooks/tab-sequence\";\n\n/** Options of {@link usePortalTabOrder}. */\nexport interface PortalTabOrderOptions {\n /** Whether the panel is open and portalled. */\n enabled: boolean;\n /** Wrapper of the trigger — the spot in the page the panel belongs to. */\n anchor: HTMLElement | null;\n /** The portalled panel. */\n panel: HTMLElement | null;\n}\n\n/**\n * Put a portalled panel back in the tab order, right after its trigger.\n *\n * A portal moves the panel to the end of `body`, so the browser's own order goes\n * from the trigger straight to whatever follows it in the page and reaches the\n * panel last, if ever. Measured in Chrome on a `Popover` holding two inputs:\n * in flow, `Tab` from the open trigger landed on the first input; in a portal it\n * skipped the panel and went to the next button of the page.\n *\n * While the panel is open, this restores the in-flow order:\n *\n * - `Tab` on the last stop of the anchor enters the panel's first stop.\n * - `Tab` on the panel's last stop leaves to the first stop after the anchor.\n * - `Shift+Tab` on the panel's first stop returns to the anchor.\n * - `Shift+Tab` on the first stop after the anchor enters the panel's last stop.\n *\n * Listened on `document` in the capture phase and marked consumed, so it runs\n * before an enclosing `Modal`'s focus trap, which skips a consumed `Tab`. The\n * panel is also registered as a layer of its anchor, which is how that trap\n * knows the panel belongs inside it although the portal put it outside.\n *\n * @param options - Whether it is active, the anchor and the panel.\n * @returns Nothing.\n */\nexport function usePortalTabOrder({ enabled, anchor, panel }: PortalTabOrderOptions): void {\n useEffect(() => {\n if (!enabled || !anchor || !panel) return;\n\n const move = (event: KeyboardEvent, target: HTMLElement | undefined): void => {\n if (!target) return;\n event.preventDefault();\n target.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== \"Tab\" || event.defaultPrevented) return;\n const inPanel = tabbables(panel);\n if (inPanel.length === 0) return;\n const active = document.activeElement as HTMLElement | null;\n if (!active) return;\n const page = tabbables(document).filter((el) => !panel.contains(el));\n const inAnchor = page.filter((el) => anchor.contains(el));\n const lastOfAnchor = inAnchor.at(-1);\n const afterAnchor = lastOfAnchor ? page[page.indexOf(lastOfAnchor) + 1] : undefined;\n\n if (panel.contains(active)) {\n if (!event.shiftKey && active === inPanel.at(-1)) move(event, afterAnchor);\n if (event.shiftKey && active === inPanel[0]) move(event, lastOfAnchor);\n return;\n }\n if (!event.shiftKey && active === lastOfAnchor) move(event, inPanel[0]);\n if (event.shiftKey && afterAnchor && active === afterAnchor) {\n move(event, inPanel.at(-1));\n }\n };\n\n const unregister = registerPortalLayer({ anchor, panel });\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n unregister();\n document.removeEventListener(\"keydown\", onKeyDown, true);\n };\n }, [enabled, anchor, panel]);\n}\n"],"mappings":";;;AAqCA,SAAgBA,EAAkB,EAAE,YAAS,WAAQ,YAAsC;CACvF,QAAgB;EACZ,IAAI,CAACC,KAAW,CAACC,KAAU,CAACC,GAAO;EAEnC,IAAMC,KAAQ,GAAsB,MAA0C;GAC1E,AAAKC,MACLC,EAAM,eAAe,GACrBD,EAAO,MAAM;EACjB,GAEME,KAAa,MAA+B;GAC9C,IAAID,EAAM,QAAQ,SAASA,EAAM,kBAAkB;GACnD,IAAME,IAAUC,EAAUN,CAAK;GAC/B,IAAIK,EAAQ,WAAW,GAAG;GAC1B,IAAME,IAAS,SAAS;GACxB,IAAI,CAACA,GAAQ;GACb,IAAMC,IAAOF,EAAU,QAAQ,CAAC,CAAC,QAAQ,MAAO,CAACN,EAAM,SAASS,CAAE,CAAC,GAE7DC,IADWF,EAAK,QAAQ,MAAOT,EAAO,SAASU,CAAE,CAClC,CAAA,CAAS,GAAG,EAAE,GAC7BE,IAAcD,IAAeF,EAAKA,EAAK,QAAQE,CAAY,IAAI,KAAK,KAAA;GAE1E,AAAIV,EAAM,SAASO,CAAM,KACjB,CAACJ,EAAM,YAAYI,MAAWF,EAAQ,GAAG,EAAE,KAAGJ,EAAKE,GAAOQ,CAAW,GACrER,EAAM,YAAYI,MAAWF,EAAQ,MAAIJ,EAAKE,GAAOO,CAAY,MAGrE,CAACP,EAAM,YAAYI,MAAWG,KAAcT,EAAKE,GAAOE,EAAQ,EAAE,GAClEF,EAAM,YAAYQ,KAAeJ,MAAWI,KAC5CV,EAAKE,GAAOE,EAAQ,GAAG,EAAE,CAAC;EAElC,GAEMO,IAAaC,EAAoB;GAAE;GAAQ;EAAM,CAAC;EAExD,OADA,SAAS,iBAAiB,WAAWT,GAAW,EAAI,SACvC;GAET,AADAQ,EAAW,GACX,SAAS,oBAAoB,WAAWR,GAAW,EAAI;EAC3D;CACJ,GAAG;EAACN;EAASC;EAAQC;CAAK,CAAC;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"Progress.cjs","names":[],"sources":["../../../src/components/Progress/Progress.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — value, max, indeterminate, size, tone, label,\n * showValue and className: a progress bar is one element with eight independent\n * presentation choices, and the destructuring counts them all because none has a\n * sensible sub-object.\n */\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Progress.module.css\";\n\nexport type ProgressVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ProgressProps {\n /** Value between 0 and `max` (or 0-100 by default). Ignored when `indeterminate`. */\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n /** Show an animated indeterminate bar. Default: false. */\n indeterminate?: boolean;\n /** Render a numeric label \"x% / max\" above the bar. Default: false. */\n showLabel?: boolean;\n /** Optional left-aligned descriptor (e.g. \"Enviando arquivo…\"). */\n label?: string;\n /**\n * Accessible name for the bar. Defaults to `label` when that is set —\n * provide it explicitly whenever the bar renders without a visible label,\n * otherwise screen readers announce an unnamed progressbar.\n */\n \"aria-label\"?: string;\n /** Id of an existing element that names the bar (alternative to `aria-label`). */\n \"aria-labelledby\"?: string;\n className?: string;\n}\n\n/**\n * Linear progress bar with determinate / indeterminate modes.\n *\n * The `progressbar` role requires an accessible name: it comes from\n * `aria-labelledby`, then explicit `aria-label`, then the visible `label`.\n */\nexport function Progress({\n value = 0,\n max = 100,\n variant = \"primary\",\n indeterminate = false,\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className,\n}: ProgressProps) {\n const pct = indeterminate ? 0 : Math.max(0, Math.min(100, (value / max) * 100));\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {(showLabel || label) && (\n <div className={styles.label}>\n {label && <span>{label}</span>}\n {showLabel && !indeterminate && <span>{Math.round(pct)}%</span>}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={ariaLabelledBy ? undefined : (ariaLabel ?? label)}\n aria-labelledby={ariaLabelledBy}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : value}\n className={cn(styles.bar, indeterminate && styles.indeterminate)}\n >\n <div\n className={cn(styles.fill, variant !== \"primary\" && styles[variant])}\n style={{ width: indeterminate ? undefined : `${pct}%` }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"4GAuCA,SAAgB,EAAS,CACrB,QAAQ,EACR,MAAM,IACN,UAAU,UACV,gBAAgB,GAChB,YAAY,GACZ,QACA,aAAc,EACd,kBAAmB,EACnB,aACc,CACd,IAAM,EAAM,EAAgB,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,IAAM,EAAQ,EAAO,GAAG,CAAC,EAE9E,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,CAAS,EAA5C,SAAA,EACM,GAAa,KACX,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,MAAvB,SAAA,CACK,IAAS,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,SAAO,CAAY,CAAA,EAC5B,GAAa,CAAC,IAAiB,EAAA,EAAA,KAAA,CAAC,OAAD,CAAA,SAAA,CAAO,KAAK,MAAM,CAAG,EAAE,GAAO,CAAA,CAAA,CAC7D,CAET,CAAA,GAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,KAAK,cACL,aAAY,EAAiB,IAAA,GAAa,GAAa,EACvD,kBAAiB,EACjB,gBAAe,EACf,gBAAe,EACf,gBAAe,EAAgB,IAAA,GAAY,EAC3C,UAAW,EAAA,GAAG,EAAA,QAAO,IAAK,GAAiB,EAAA,QAAO,aAAa,EAE/D,UAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,UAAW,EAAA,GAAG,EAAA,QAAO,KAAM,IAAY,WAAa,EAAA,QAAO,EAAQ,EACnE,MAAO,CAAE,MAAO,EAAgB,IAAA,GAAY,GAAG,EAAI,EAAG,CACzD,CAAA,CACA,CAAA,CACJ,GAEb"}
1
+ {"version":3,"file":"Progress.cjs","names":["cn","styles","require_cn","require_Progress_module","react_jsx_runtime","Progress","ariaLabel","ariaLabelledBy","pct","indeterminate","value","max","className","showLabel","label","variant"],"sources":["../../../src/components/Progress/Progress.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — value, max, indeterminate, size, tone, label,\n * showValue and className: a progress bar is one element with eight independent\n * presentation choices, and the destructuring counts them all because none has a\n * sensible sub-object.\n */\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Progress.module.css\";\n\nexport type ProgressVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ProgressProps {\n /** Value between 0 and `max` (or 0-100 by default). Ignored when `indeterminate`. */\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n /** Show an animated indeterminate bar. Default: false. */\n indeterminate?: boolean;\n /** Render a numeric label \"x% / max\" above the bar. Default: false. */\n showLabel?: boolean;\n /** Optional left-aligned descriptor (e.g. \"Enviando arquivo…\"). */\n label?: string;\n /**\n * Accessible name for the bar. Defaults to `label` when that is set —\n * provide it explicitly whenever the bar renders without a visible label,\n * otherwise screen readers announce an unnamed progressbar.\n */\n \"aria-label\"?: string;\n /** Id of an existing element that names the bar (alternative to `aria-label`). */\n \"aria-labelledby\"?: string;\n className?: string;\n}\n\n/**\n * Linear progress bar with determinate / indeterminate modes.\n *\n * The `progressbar` role requires an accessible name: it comes from\n * `aria-labelledby`, then explicit `aria-label`, then the visible `label`.\n */\nexport function Progress({\n value = 0,\n max = 100,\n variant = \"primary\",\n indeterminate = false,\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className,\n}: ProgressProps) {\n const pct = indeterminate ? 0 : Math.max(0, Math.min(100, (value / max) * 100));\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {(showLabel || label) && (\n <div className={styles.label}>\n {label && <span>{label}</span>}\n {showLabel && !indeterminate && <span>{Math.round(pct)}%</span>}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={ariaLabelledBy ? undefined : (ariaLabel ?? label)}\n aria-labelledby={ariaLabelledBy}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : value}\n className={cn(styles.bar, indeterminate && styles.indeterminate)}\n >\n <div\n className={cn(styles.fill, variant !== \"primary\" && styles[variant])}\n style={{ width: indeterminate ? undefined : `${pct}%` }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"A,4GAuCA,SAAgBK,EAAS,CACrB,QAAQ,EACR,MAAM,IACN,UAAU,UACV,gBAAgB,GAChB,YAAY,GACZ,QACA,aAAcC,EACd,kBAAmBC,EACnB,aACc,CACd,IAAMC,EAAMC,EAAgB,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,IAAMC,EAAQC,EAAO,GAAG,CAAC,EAE9E,OACI,EAAAP,EAAA,KAAA,CAAC,MAAD,CAAK,UAAWJ,EAAAA,GAAGC,EAAAA,QAAO,QAASW,CAAS,EAA5C,SAAA,EACMC,GAAaC,KACX,EAAAV,EAAA,KAAA,CAAC,MAAD,CAAK,UAAWH,EAAAA,QAAO,MAAvB,SAAA,CACKa,IAAS,EAAAV,EAAA,IAAA,CAAC,OAAD,CAAA,SAAOU,CAAY,CAAA,EAC5BD,GAAa,CAACJ,IAAiB,EAAAL,EAAA,KAAA,CAAC,OAAD,CAAA,SAAA,CAAO,KAAK,MAAMI,CAAG,EAAE,GAAO,CAAA,CAAA,CAC7D,CAET,CAAA,GAAA,EAAAJ,EAAA,IAAA,CAAC,MAAD,CACI,KAAK,cACL,aAAYG,EAAiB,IAAA,GAAaD,GAAaQ,EACvD,kBAAiBP,EACjB,gBAAe,EACf,gBAAeI,EACf,gBAAeF,EAAgB,IAAA,GAAYC,EAC3C,UAAWV,EAAAA,GAAGC,EAAAA,QAAO,IAAKQ,GAAiBR,EAAAA,QAAO,aAAa,EAE/D,UAAA,EAAAG,EAAA,IAAA,CAAC,MAAD,CACI,UAAWJ,EAAAA,GAAGC,EAAAA,QAAO,KAAMc,IAAY,WAAad,EAAAA,QAAOc,EAAQ,EACnE,MAAO,CAAE,MAAON,EAAgB,IAAA,GAAY,GAAGD,EAAI,EAAG,CACzD,CAAA,CACA,CAAA,CACJ,C,EAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Progress.js","names":[],"sources":["../../../src/components/Progress/Progress.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — value, max, indeterminate, size, tone, label,\n * showValue and className: a progress bar is one element with eight independent\n * presentation choices, and the destructuring counts them all because none has a\n * sensible sub-object.\n */\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Progress.module.css\";\n\nexport type ProgressVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ProgressProps {\n /** Value between 0 and `max` (or 0-100 by default). Ignored when `indeterminate`. */\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n /** Show an animated indeterminate bar. Default: false. */\n indeterminate?: boolean;\n /** Render a numeric label \"x% / max\" above the bar. Default: false. */\n showLabel?: boolean;\n /** Optional left-aligned descriptor (e.g. \"Enviando arquivo…\"). */\n label?: string;\n /**\n * Accessible name for the bar. Defaults to `label` when that is set —\n * provide it explicitly whenever the bar renders without a visible label,\n * otherwise screen readers announce an unnamed progressbar.\n */\n \"aria-label\"?: string;\n /** Id of an existing element that names the bar (alternative to `aria-label`). */\n \"aria-labelledby\"?: string;\n className?: string;\n}\n\n/**\n * Linear progress bar with determinate / indeterminate modes.\n *\n * The `progressbar` role requires an accessible name: it comes from\n * `aria-labelledby`, then explicit `aria-label`, then the visible `label`.\n */\nexport function Progress({\n value = 0,\n max = 100,\n variant = \"primary\",\n indeterminate = false,\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className,\n}: ProgressProps) {\n const pct = indeterminate ? 0 : Math.max(0, Math.min(100, (value / max) * 100));\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {(showLabel || label) && (\n <div className={styles.label}>\n {label && <span>{label}</span>}\n {showLabel && !indeterminate && <span>{Math.round(pct)}%</span>}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={ariaLabelledBy ? undefined : (ariaLabel ?? label)}\n aria-labelledby={ariaLabelledBy}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : value}\n className={cn(styles.bar, indeterminate && styles.indeterminate)}\n >\n <div\n className={cn(styles.fill, variant !== \"primary\" && styles[variant])}\n style={{ width: indeterminate ? undefined : `${pct}%` }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;AAuCA,SAAgB,EAAS,EACrB,WAAQ,GACR,SAAM,KACN,aAAU,WACV,mBAAgB,IAChB,eAAY,IACZ,UACA,cAAc,GACd,mBAAmB,GACnB,gBACc;CACd,IAAM,IAAM,IAAgB,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAM,IAAQ,IAAO,GAAG,CAAC;CAE9E,OACI,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAO,SAAS,CAAS;EAA5C,UAAA,EACM,KAAa,MACX,kBAAC,OAAD;GAAK,WAAW,EAAO;GAAvB,UAAA,CACK,KAAS,kBAAC,QAAD,EAAA,UAAO,EAAY,CAAA,GAC5B,KAAa,CAAC,KAAiB,kBAAC,QAAD,EAAA,UAAA,CAAO,KAAK,MAAM,CAAG,GAAE,GAAO,EAAA,CAAA,CAC7D;EAET,CAAA,GAAA,kBAAC,OAAD;GACI,MAAK;GACL,cAAY,IAAiB,KAAA,IAAa,KAAa;GACvD,mBAAiB;GACjB,iBAAe;GACf,iBAAe;GACf,iBAAe,IAAgB,KAAA,IAAY;GAC3C,WAAW,EAAG,EAAO,KAAK,KAAiB,EAAO,aAAa;GAE/D,UAAA,kBAAC,OAAD;IACI,WAAW,EAAG,EAAO,MAAM,MAAY,aAAa,EAAO,EAAQ;IACnE,OAAO,EAAE,OAAO,IAAgB,KAAA,IAAY,GAAG,EAAI,GAAG;GACzD,CAAA;EACA,CAAA,CACJ;;AAEb"}
1
+ {"version":3,"file":"Progress.js","names":["styles","Progress_module_default","Progress","ariaLabel","ariaLabelledBy","pct","indeterminate","value","max","cn","className","showLabel","label","variant"],"sources":["../../../src/components/Progress/Progress.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — value, max, indeterminate, size, tone, label,\n * showValue and className: a progress bar is one element with eight independent\n * presentation choices, and the destructuring counts them all because none has a\n * sensible sub-object.\n */\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Progress.module.css\";\n\nexport type ProgressVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ProgressProps {\n /** Value between 0 and `max` (or 0-100 by default). Ignored when `indeterminate`. */\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n /** Show an animated indeterminate bar. Default: false. */\n indeterminate?: boolean;\n /** Render a numeric label \"x% / max\" above the bar. Default: false. */\n showLabel?: boolean;\n /** Optional left-aligned descriptor (e.g. \"Enviando arquivo…\"). */\n label?: string;\n /**\n * Accessible name for the bar. Defaults to `label` when that is set —\n * provide it explicitly whenever the bar renders without a visible label,\n * otherwise screen readers announce an unnamed progressbar.\n */\n \"aria-label\"?: string;\n /** Id of an existing element that names the bar (alternative to `aria-label`). */\n \"aria-labelledby\"?: string;\n className?: string;\n}\n\n/**\n * Linear progress bar with determinate / indeterminate modes.\n *\n * The `progressbar` role requires an accessible name: it comes from\n * `aria-labelledby`, then explicit `aria-label`, then the visible `label`.\n */\nexport function Progress({\n value = 0,\n max = 100,\n variant = \"primary\",\n indeterminate = false,\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n className,\n}: ProgressProps) {\n const pct = indeterminate ? 0 : Math.max(0, Math.min(100, (value / max) * 100));\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {(showLabel || label) && (\n <div className={styles.label}>\n {label && <span>{label}</span>}\n {showLabel && !indeterminate && <span>{Math.round(pct)}%</span>}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={ariaLabelledBy ? undefined : (ariaLabel ?? label)}\n aria-labelledby={ariaLabelledBy}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : value}\n className={cn(styles.bar, indeterminate && styles.indeterminate)}\n >\n <div\n className={cn(styles.fill, variant !== \"primary\" && styles[variant])}\n style={{ width: indeterminate ? undefined : `${pct}%` }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;AAuCA,SAAgBE,EAAS,EACrB,WAAQ,GACR,SAAM,KACN,aAAU,WACV,mBAAgB,IAChB,eAAY,IACZ,UACA,cAAcC,GACd,mBAAmBC,GACnB,gBACc;CACd,IAAMC,IAAMC,IAAgB,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAMC,IAAQC,IAAO,GAAG,CAAC;CAE9E,OACI,kBAAC,OAAD;EAAK,WAAWC,EAAGT,EAAO,SAASU,CAAS;EAA5C,UAAA,EACMC,KAAaC,MACX,kBAAC,OAAD;GAAK,WAAWZ,EAAO;GAAvB,UAAA,CACKY,KAAS,kBAAC,QAAD,EAAA,UAAOA,EAAY,CAAA,GAC5BD,KAAa,CAACL,KAAiB,kBAAC,QAAD,EAAA,UAAA,CAAO,KAAK,MAAMD,CAAG,GAAE,GAAO,EAAA,CAAA,CAC7D;EAET,CAAA,GAAA,kBAAC,OAAD;GACI,MAAK;GACL,cAAYD,IAAiB,KAAA,IAAaD,KAAaS;GACvD,mBAAiBR;GACjB,iBAAe;GACf,iBAAeI;GACf,iBAAeF,IAAgB,KAAA,IAAYC;GAC3C,WAAWE,EAAGT,EAAO,KAAKM,KAAiBN,EAAO,aAAa;GAE/D,UAAA,kBAAC,OAAD;IACI,WAAWS,EAAGT,EAAO,MAAMa,MAAY,aAAab,EAAOa,EAAQ;IACnE,OAAO,EAAE,OAAOP,IAAgB,KAAA,IAAY,GAAGD,EAAI,GAAG;GACzD,CAAA;EACA,CAAA,CACJ;;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"Progress.module.cjs","names":[],"sources":["../../../src/components/Progress/Progress.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n}\n\n.bar {\n width: 100%;\n height: 8px;\n background-color: var(--tempest-surface-2);\n border-radius: var(--tempest-radius-full);\n overflow: hidden;\n box-shadow: var(--tempest-shadow-inner);\n}\n\n.fill {\n height: 100%;\n background-color: var(--tempest-primary);\n border-radius: inherit;\n transition: width var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.fill.success {\n background-color: var(--tempest-success-solid);\n}\n.fill.warning {\n background-color: var(--tempest-warning-solid);\n}\n.fill.danger {\n background-color: var(--tempest-danger-solid);\n}\n\n.indeterminate .fill {\n width: 30% !important;\n animation: tempest-progress-loop 1.4s var(--tempest-ease-in-out) infinite;\n}\n\n.label {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-snug);\n display: flex;\n justify-content: space-between;\n}\n\n@keyframes tempest-progress-loop {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(360%);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .indeterminate .fill {\n animation: none;\n width: 100% !important;\n opacity: 0.5;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Progress.module.cjs","names":["wrapper","bar","fill","success","warning","danger","indeterminate","tempestProgressLoop","label","Progress_module_default"],"sources":["../../../src/components/Progress/Progress.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n}\n\n.bar {\n width: 100%;\n height: 8px;\n background-color: var(--tempest-surface-2);\n border-radius: var(--tempest-radius-full);\n overflow: hidden;\n box-shadow: var(--tempest-shadow-inner);\n}\n\n.fill {\n height: 100%;\n background-color: var(--tempest-primary);\n border-radius: inherit;\n transition: width var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.fill.success {\n background-color: var(--tempest-success-solid);\n}\n.fill.warning {\n background-color: var(--tempest-warning-solid);\n}\n.fill.danger {\n background-color: var(--tempest-danger-solid);\n}\n\n.indeterminate .fill {\n width: 30% !important;\n animation: tempest-progress-loop 1.4s var(--tempest-ease-in-out) infinite;\n}\n\n.label {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-snug);\n display: flex;\n justify-content: space-between;\n}\n\n@keyframes tempest-progress-loop {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(360%);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .indeterminate .fill {\n animation: none;\n width: 100% !important;\n opacity: 0.5;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Progress.module.js","names":[],"sources":["../../../src/components/Progress/Progress.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n}\n\n.bar {\n width: 100%;\n height: 8px;\n background-color: var(--tempest-surface-2);\n border-radius: var(--tempest-radius-full);\n overflow: hidden;\n box-shadow: var(--tempest-shadow-inner);\n}\n\n.fill {\n height: 100%;\n background-color: var(--tempest-primary);\n border-radius: inherit;\n transition: width var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.fill.success {\n background-color: var(--tempest-success-solid);\n}\n.fill.warning {\n background-color: var(--tempest-warning-solid);\n}\n.fill.danger {\n background-color: var(--tempest-danger-solid);\n}\n\n.indeterminate .fill {\n width: 30% !important;\n animation: tempest-progress-loop 1.4s var(--tempest-ease-in-out) infinite;\n}\n\n.label {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-snug);\n display: flex;\n justify-content: space-between;\n}\n\n@keyframes tempest-progress-loop {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(360%);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .indeterminate .fill {\n animation: none;\n width: 100% !important;\n opacity: 0.5;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Progress.module.js","names":["wrapper","bar","fill","success","warning","danger","indeterminate","tempestProgressLoop","label","Progress_module_default"],"sources":["../../../src/components/Progress/Progress.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n}\n\n.bar {\n width: 100%;\n height: 8px;\n background-color: var(--tempest-surface-2);\n border-radius: var(--tempest-radius-full);\n overflow: hidden;\n box-shadow: var(--tempest-shadow-inner);\n}\n\n.fill {\n height: 100%;\n background-color: var(--tempest-primary);\n border-radius: inherit;\n transition: width var(--tempest-duration-base) var(--tempest-ease-out);\n}\n\n.fill.success {\n background-color: var(--tempest-success-solid);\n}\n.fill.warning {\n background-color: var(--tempest-warning-solid);\n}\n.fill.danger {\n background-color: var(--tempest-danger-solid);\n}\n\n.indeterminate .fill {\n width: 30% !important;\n animation: tempest-progress-loop 1.4s var(--tempest-ease-in-out) infinite;\n}\n\n.label {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n line-height: var(--tempest-leading-snug);\n display: flex;\n justify-content: space-between;\n}\n\n@keyframes tempest-progress-loop {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(360%);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .indeterminate .fill {\n animation: none;\n width: 100% !important;\n opacity: 0.5;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"QRCode.cjs","names":[],"sources":["../../../src/components/QRCode/QRCode.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nimport { encodeQR, matrixToPath } from \"./qr-encode\";\nimport type { QRErrorCorrection } from \"./qr-encode\";\nimport styles from \"./QRCode.module.css\";\n\nexport interface QRCodeProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** The payload. Encoded as UTF-8 when it is not plain digits or upper-case text. */\n value: string;\n /** Rendered side in px, quiet zone included. Default `160`. */\n size?: number;\n /** Error correction level. Default `\"M\"`. */\n level?: QRErrorCorrection;\n /** Quiet zone in modules. The standard asks for 4; below that, scanners start to miss. */\n margin?: number;\n /** Module colour. Defaults to black — see the note on dark mode below. */\n color?: string;\n /** Background colour. Defaults to white. */\n background?: string;\n /**\n * Accessible name. Defaults to naming the payload, because a screen reader\n * user cannot scan the symbol: the content has to reach them as text.\n */\n label?: string;\n}\n\n/**\n * A QR symbol, encoded in the browser and drawn as SVG.\n *\n * No dependency and no network round trip: an image service would leak the\n * payload — a payment link, a session token, an invite — to a third party, and\n * the encoder is a few kilobytes.\n *\n * SVG rather than canvas so the symbol stays sharp at any size and prints at\n * the printer's resolution instead of the screen's. Everything is one path\n * (horizontal runs merged), because a version-10 symbol is 3 481 modules and\n * that many elements costs real paint time.\n *\n * The colours are **black on white in both themes, on purpose** — they are the\n * one part of the SDK that ignores the theme tokens. Scanners expect\n * dark-on-light, and the ones that cope with an inverted symbol do it slowly and\n * unreliably; a QR that looks integrated with a dark page and scans on the third\n * try is worse than one that looks pasted on. Wiring the modules to\n * `--tempest-text` would flip them light in dark mode and leave a light symbol\n * on the white background, which scans as nothing at all. Override\n * `color`/`background` only with a scanner in hand.\n *\n * @throws {QRCapacityError} When the payload is too long for a version-40\n * symbol at the chosen level. That is a programming error rather than a state\n * to render, so it surfaces instead of silently drawing nothing — wrap it in\n * `ErrorBoundary` if the payload comes from user input.\n *\n * @example\n * <QRCode value=\"https://tempest.dev\" />\n * <QRCode value={pixPayload} level=\"H\" size={220} label=\"QR do Pix\" />\n */\nexport function QRCode({\n value,\n size = 160,\n level = \"M\",\n margin = 4,\n color = \"#000000\",\n background = \"#ffffff\",\n label,\n className,\n style,\n ...rest\n}: QRCodeProps) {\n const { path, side } = useMemo(() => {\n const matrix = encodeQR(value, { level });\n return {\n path: matrixToPath(matrix, margin),\n side: matrix.size + margin * 2,\n };\n }, [value, level, margin]);\n\n return (\n <div\n className={cn(styles.wrapper, className)}\n style={{ width: size, height: size, ...style }}\n {...rest}\n >\n <svg\n className={styles.svg}\n viewBox={`0 0 ${side} ${side}`}\n width={size}\n height={size}\n role=\"img\"\n aria-label={label ?? `QR code: ${value}`}\n shapeRendering=\"crispEdges\"\n >\n <rect width={side} height={side} fill={background} />\n <path d={path} fill={color} />\n </svg>\n </div>\n );\n}\n"],"mappings":"0JA2DA,SAAgB,EAAO,CACnB,QACA,OAAO,IACP,QAAQ,IACR,SAAS,EACT,QAAQ,UACR,aAAa,UACb,QACA,YACA,QACA,GAAG,GACS,CACZ,GAAM,CAAE,OAAM,SAAA,EAAS,EAAA,QAAA,KAAc,CACjC,IAAM,EAAS,EAAA,SAAS,EAAO,CAAE,OAAM,CAAC,EACxC,MAAO,CACH,KAAM,EAAA,aAAa,EAAQ,CAAM,EACjC,KAAM,EAAO,KAAO,EAAS,CACjC,CACJ,EAAG,CAAC,EAAO,EAAO,CAAM,CAAC,EAEzB,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,CAAS,EACvC,MAAO,CAAE,MAAO,EAAM,OAAQ,EAAM,GAAG,CAAM,EAC7C,GAAI,EAEJ,UAAA,EAAA,EAAA,KAAA,CAAC,MAAD,CACI,UAAW,EAAA,QAAO,IAClB,QAAS,OAAO,EAAK,GAAG,IACxB,MAAO,EACP,OAAQ,EACR,KAAK,MACL,aAAY,GAAS,YAAY,IACjC,eAAe,aAPnB,SAAA,EASI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,MAAO,EAAM,OAAQ,EAAM,KAAM,CAAa,CAAA,GACpD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAG,EAAM,KAAM,CAAQ,CAAA,CAC5B,GACJ,CAAA,CAEb"}
1
+ {"version":3,"file":"QRCode.cjs","names":["useMemo","encodeQR","matrixToPath","cn","styles","require_cn","require_qr_encode","require_QRCode_module","react","react_jsx_runtime","QRCode","rest","matrix","value","margin","level","className","size","style","side","label","background","path","color"],"sources":["../../../src/components/QRCode/QRCode.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nimport { encodeQR, matrixToPath } from \"./qr-encode\";\nimport type { QRErrorCorrection } from \"./qr-encode\";\nimport styles from \"./QRCode.module.css\";\n\nexport interface QRCodeProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** The payload. Encoded as UTF-8 when it is not plain digits or upper-case text. */\n value: string;\n /** Rendered side in px, quiet zone included. Default `160`. */\n size?: number;\n /** Error correction level. Default `\"M\"`. */\n level?: QRErrorCorrection;\n /** Quiet zone in modules. The standard asks for 4; below that, scanners start to miss. */\n margin?: number;\n /** Module colour. Defaults to black — see the note on dark mode below. */\n color?: string;\n /** Background colour. Defaults to white. */\n background?: string;\n /**\n * Accessible name. Defaults to naming the payload, because a screen reader\n * user cannot scan the symbol: the content has to reach them as text.\n */\n label?: string;\n}\n\n/**\n * A QR symbol, encoded in the browser and drawn as SVG.\n *\n * No dependency and no network round trip: an image service would leak the\n * payload — a payment link, a session token, an invite — to a third party, and\n * the encoder is a few kilobytes.\n *\n * SVG rather than canvas so the symbol stays sharp at any size and prints at\n * the printer's resolution instead of the screen's. Everything is one path\n * (horizontal runs merged), because a version-10 symbol is 3 481 modules and\n * that many elements costs real paint time.\n *\n * The colours are **black on white in both themes, on purpose** — they are the\n * one part of the SDK that ignores the theme tokens. Scanners expect\n * dark-on-light, and the ones that cope with an inverted symbol do it slowly and\n * unreliably; a QR that looks integrated with a dark page and scans on the third\n * try is worse than one that looks pasted on. Wiring the modules to\n * `--tempest-text` would flip them light in dark mode and leave a light symbol\n * on the white background, which scans as nothing at all. Override\n * `color`/`background` only with a scanner in hand.\n *\n * @throws {QRCapacityError} When the payload is too long for a version-40\n * symbol at the chosen level. That is a programming error rather than a state\n * to render, so it surfaces instead of silently drawing nothing — wrap it in\n * `ErrorBoundary` if the payload comes from user input.\n *\n * @example\n * <QRCode value=\"https://tempest.dev\" />\n * <QRCode value={pixPayload} level=\"H\" size={220} label=\"QR do Pix\" />\n */\nexport function QRCode({\n value,\n size = 160,\n level = \"M\",\n margin = 4,\n color = \"#000000\",\n background = \"#ffffff\",\n label,\n className,\n style,\n ...rest\n}: QRCodeProps) {\n const { path, side } = useMemo(() => {\n const matrix = encodeQR(value, { level });\n return {\n path: matrixToPath(matrix, margin),\n side: matrix.size + margin * 2,\n };\n }, [value, level, margin]);\n\n return (\n <div\n className={cn(styles.wrapper, className)}\n style={{ width: size, height: size, ...style }}\n {...rest}\n >\n <svg\n className={styles.svg}\n viewBox={`0 0 ${side} ${side}`}\n width={size}\n height={size}\n role=\"img\"\n aria-label={label ?? `QR code: ${value}`}\n shapeRendering=\"crispEdges\"\n >\n <rect width={side} height={side} fill={background} />\n <path d={path} fill={color} />\n </svg>\n </div>\n );\n}\n"],"mappings":"A,0JA2DA,SAAgBU,EAAO,CACnB,QACA,OAAO,IACP,QAAQ,IACR,SAAS,EACT,QAAQ,UACR,aAAa,UACb,QACA,YACA,QACA,GAAGC,GACS,CACZ,GAAM,CAAE,OAAM,SAAA,EAASX,EAAAA,QAAAA,KAAc,CACjC,IAAMY,EAASX,EAAAA,SAASY,EAAO,CAAE,OAAM,CAAC,EACxC,MAAO,CACH,KAAMX,EAAAA,aAAaU,EAAQE,CAAM,EACjC,KAAMF,EAAO,KAAOE,EAAS,CACjC,CACJ,EAAG,CAACD,EAAOE,EAAOD,CAAM,CAAC,EAEzB,OACI,EAAAL,EAAA,IAAA,CAAC,MAAD,CACI,UAAWN,EAAAA,GAAGC,EAAAA,QAAO,QAASY,CAAS,EACvC,MAAO,CAAE,MAAOC,EAAM,OAAQA,EAAM,GAAGC,CAAM,EAC7C,GAAIP,EAEJ,UAAA,EAAAF,EAAA,KAAA,CAAC,MAAD,CACI,UAAWL,EAAAA,QAAO,IAClB,QAAS,OAAOe,EAAK,GAAGA,IACxB,MAAOF,EACP,OAAQA,EACR,KAAK,MACL,aAAYG,GAAS,YAAYP,IACjC,eAAe,aAPnB,SAAA,EASI,EAAAJ,EAAA,IAAA,CAAC,OAAD,CAAM,MAAOU,EAAM,OAAQA,EAAM,KAAME,CAAa,CAAA,GACpD,EAAAZ,EAAA,IAAA,CAAC,OAAD,CAAM,EAAGa,EAAM,KAAMC,CAAQ,CAAA,CAC5B,C,EACJ,CAAA,CAEb,C"}