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":"Resizable.module.js","names":[],"sources":["../../../src/components/Resizable/Resizable.module.css"],"sourcesContent":[".root {\n display: flex;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.horizontal {\n flex-direction: row;\n}\n\n.vertical {\n flex-direction: column;\n}\n\n.pane {\n flex-grow: 0;\n flex-shrink: 0;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n}\n\n.divider {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--tempest-border);\n transition: background-color var(--tempest-duration-fast) var(--tempest-ease-out);\n touch-action: none;\n user-select: none;\n}\n\n.divider:hover,\n.divider:focus-visible {\n background-color: var(--tempest-primary);\n}\n\n.divider:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.horizontal > .divider {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n}\n\n.vertical > .divider {\n width: 100%;\n height: 6px;\n cursor: row-resize;\n}\n\n.handle {\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-surface);\n opacity: 0.7;\n}\n\n.horizontal > .divider .handle {\n width: 2px;\n height: 24px;\n}\n\n.vertical > .divider .handle {\n width: 24px;\n height: 2px;\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Resizable.module.js","names":["root","horizontal","vertical","pane","divider","handle","Resizable_module_default"],"sources":["../../../src/components/Resizable/Resizable.module.css"],"sourcesContent":[".root {\n display: flex;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.horizontal {\n flex-direction: row;\n}\n\n.vertical {\n flex-direction: column;\n}\n\n.pane {\n flex-grow: 0;\n flex-shrink: 0;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n}\n\n.divider {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--tempest-border);\n transition: background-color var(--tempest-duration-fast) var(--tempest-ease-out);\n touch-action: none;\n user-select: none;\n}\n\n.divider:hover,\n.divider:focus-visible {\n background-color: var(--tempest-primary);\n}\n\n.divider:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: var(--tempest-focus-ring-offset);\n}\n\n.horizontal > .divider {\n width: 6px;\n height: 100%;\n cursor: col-resize;\n}\n\n.vertical > .divider {\n width: 100%;\n height: 6px;\n cursor: row-resize;\n}\n\n.handle {\n border-radius: var(--tempest-radius-full);\n background-color: var(--tempest-surface);\n opacity: 0.7;\n}\n\n.horizontal > .divider .handle {\n width: 2px;\n height: 24px;\n}\n\n.vertical > .divider .handle {\n width: 24px;\n height: 2px;\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Responsive.cjs","names":[],"sources":["../../../src/components/Responsive/Responsive.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useBreakpoint, type Breakpoint } from \"@/hooks/use-breakpoint\";\n\nexport interface ShowProps {\n /** Render children only when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Render children only when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Render only on specific breakpoints. Wins over `above`/`below` when set. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\nfunction shouldRender(\n current: Breakpoint,\n above: Breakpoint | undefined,\n below: Breakpoint | undefined,\n only: Breakpoint | Breakpoint[] | undefined,\n helpers: { above: (bp: Breakpoint) => boolean; below: (bp: Breakpoint) => boolean },\n): boolean {\n if (only) {\n const list = Array.isArray(only) ? only : [only];\n return list.includes(current);\n }\n if (above && !helpers.above(above)) return false;\n if (below && !helpers.below(below)) return false;\n return true;\n}\n\n/**\n * Conditionally render children based on the viewport breakpoint.\n *\n * - `above` — render when viewport width is `>=` the given breakpoint.\n * - `below` — render when viewport width is `<` the given breakpoint.\n * - `only` — render only on the listed breakpoint(s).\n *\n * SSR-safe: first render uses `xs` (renders mobile content first); the\n * component re-renders once `useBreakpoint` has the real viewport width.\n */\nexport function Show({ above, below, only, children }: ShowProps): ReactNode {\n const bp = useBreakpoint();\n if (!shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n\nexport interface HideProps {\n /** Hide children when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Hide children when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Hide on specific breakpoints. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\n/** Inverse of `<Show>` — hides children when the condition matches. */\nexport function Hide({ above, below, only, children }: HideProps): ReactNode {\n const bp = useBreakpoint();\n if (shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n"],"mappings":"kDAaA,SAAS,EACL,EACA,EACA,EACA,EACA,EACO,CAOP,OANI,GACa,MAAM,QAAQ,CAAI,EAAI,EAAO,CAAC,CAAI,EAAA,CACnC,SAAS,CAAO,EAGhC,EADI,GAAS,CAAC,EAAQ,MAAM,CAAK,GAC7B,GAAS,CAAC,EAAQ,MAAM,CAAK,EAErC,CAYA,SAAgB,EAAK,CAAE,QAAO,QAAO,OAAM,YAAkC,CACzE,IAAM,EAAK,EAAA,cAAc,EAEzB,OADK,EAAa,EAAG,QAAS,EAAO,EAAO,EAAM,CAAE,EAC7C,EADuD,IAElE,CAaA,SAAgB,EAAK,CAAE,QAAO,QAAO,OAAM,YAAkC,CACzE,IAAM,EAAK,EAAA,cAAc,EAEzB,OADI,EAAa,EAAG,QAAS,EAAO,EAAO,EAAM,CAAE,EAAU,KACtD,CACX"}
1
+ {"version":3,"file":"Responsive.cjs","names":["useBreakpoint","require_use_breakpoint","shouldRender","only","current","above","helpers","below","Show","bp","children","Hide"],"sources":["../../../src/components/Responsive/Responsive.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useBreakpoint, type Breakpoint } from \"@/hooks/use-breakpoint\";\n\nexport interface ShowProps {\n /** Render children only when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Render children only when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Render only on specific breakpoints. Wins over `above`/`below` when set. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\nfunction shouldRender(\n current: Breakpoint,\n above: Breakpoint | undefined,\n below: Breakpoint | undefined,\n only: Breakpoint | Breakpoint[] | undefined,\n helpers: { above: (bp: Breakpoint) => boolean; below: (bp: Breakpoint) => boolean },\n): boolean {\n if (only) {\n const list = Array.isArray(only) ? only : [only];\n return list.includes(current);\n }\n if (above && !helpers.above(above)) return false;\n if (below && !helpers.below(below)) return false;\n return true;\n}\n\n/**\n * Conditionally render children based on the viewport breakpoint.\n *\n * - `above` — render when viewport width is `>=` the given breakpoint.\n * - `below` — render when viewport width is `<` the given breakpoint.\n * - `only` — render only on the listed breakpoint(s).\n *\n * SSR-safe: first render uses `xs` (renders mobile content first); the\n * component re-renders once `useBreakpoint` has the real viewport width.\n */\nexport function Show({ above, below, only, children }: ShowProps): ReactNode {\n const bp = useBreakpoint();\n if (!shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n\nexport interface HideProps {\n /** Hide children when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Hide children when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Hide on specific breakpoints. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\n/** Inverse of `<Show>` — hides children when the condition matches. */\nexport function Hide({ above, below, only, children }: HideProps): ReactNode {\n const bp = useBreakpoint();\n if (shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n"],"mappings":"A,kDAaA,SAASE,EACL,EACA,EACA,EACA,EACA,EACO,CAOP,OANIC,GACa,MAAM,QAAQA,CAAI,EAAIA,EAAO,CAACA,CAAI,EAAA,CACnC,SAASC,CAAO,EAGhC,EADIC,GAAS,CAACC,EAAQ,MAAMD,CAAK,GAC7BE,GAAS,CAACD,EAAQ,MAAMC,CAAK,EAErC,CAYA,SAAgBC,EAAK,CAAE,QAAO,QAAO,OAAM,YAAkC,CACzE,IAAMC,EAAKT,EAAAA,cAAc,EAEzB,OADKE,EAAaO,EAAG,QAASJ,EAAOE,EAAOJ,EAAMM,CAAE,EAC7CC,EADuD,IAElE,CAaA,SAAgBC,EAAK,CAAE,QAAO,QAAO,OAAM,YAAkC,CACzE,IAAMF,EAAKT,EAAAA,cAAc,EAEzB,OADIE,EAAaO,EAAG,QAASJ,EAAOE,EAAOJ,EAAMM,CAAE,EAAU,KACtDC,CACX,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Responsive.js","names":[],"sources":["../../../src/components/Responsive/Responsive.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useBreakpoint, type Breakpoint } from \"@/hooks/use-breakpoint\";\n\nexport interface ShowProps {\n /** Render children only when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Render children only when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Render only on specific breakpoints. Wins over `above`/`below` when set. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\nfunction shouldRender(\n current: Breakpoint,\n above: Breakpoint | undefined,\n below: Breakpoint | undefined,\n only: Breakpoint | Breakpoint[] | undefined,\n helpers: { above: (bp: Breakpoint) => boolean; below: (bp: Breakpoint) => boolean },\n): boolean {\n if (only) {\n const list = Array.isArray(only) ? only : [only];\n return list.includes(current);\n }\n if (above && !helpers.above(above)) return false;\n if (below && !helpers.below(below)) return false;\n return true;\n}\n\n/**\n * Conditionally render children based on the viewport breakpoint.\n *\n * - `above` — render when viewport width is `>=` the given breakpoint.\n * - `below` — render when viewport width is `<` the given breakpoint.\n * - `only` — render only on the listed breakpoint(s).\n *\n * SSR-safe: first render uses `xs` (renders mobile content first); the\n * component re-renders once `useBreakpoint` has the real viewport width.\n */\nexport function Show({ above, below, only, children }: ShowProps): ReactNode {\n const bp = useBreakpoint();\n if (!shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n\nexport interface HideProps {\n /** Hide children when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Hide children when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Hide on specific breakpoints. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\n/** Inverse of `<Show>` — hides children when the condition matches. */\nexport function Hide({ above, below, only, children }: HideProps): ReactNode {\n const bp = useBreakpoint();\n if (shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n"],"mappings":";;AAaA,SAAS,EACL,GACA,GACA,GACA,GACA,GACO;CAOP,OANI,KACa,MAAM,QAAQ,CAAI,IAAI,IAAO,CAAC,CAAI,EAAA,CACnC,SAAS,CAAO,IAGhC,EADI,KAAS,CAAC,EAAQ,MAAM,CAAK,KAC7B,KAAS,CAAC,EAAQ,MAAM,CAAK;AAErC;AAYA,SAAgB,EAAK,EAAE,UAAO,UAAO,SAAM,eAAkC;CACzE,IAAM,IAAK,EAAc;CAEzB,OADK,EAAa,EAAG,SAAS,GAAO,GAAO,GAAM,CAAE,IAC7C,IADuD;AAElE;AAaA,SAAgB,EAAK,EAAE,UAAO,UAAO,SAAM,eAAkC;CACzE,IAAM,IAAK,EAAc;CAEzB,OADI,EAAa,EAAG,SAAS,GAAO,GAAO,GAAM,CAAE,IAAU,OACtD;AACX"}
1
+ {"version":3,"file":"Responsive.js","names":["shouldRender","only","current","above","helpers","below","Show","bp","useBreakpoint","children","Hide"],"sources":["../../../src/components/Responsive/Responsive.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useBreakpoint, type Breakpoint } from \"@/hooks/use-breakpoint\";\n\nexport interface ShowProps {\n /** Render children only when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Render children only when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Render only on specific breakpoints. Wins over `above`/`below` when set. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\nfunction shouldRender(\n current: Breakpoint,\n above: Breakpoint | undefined,\n below: Breakpoint | undefined,\n only: Breakpoint | Breakpoint[] | undefined,\n helpers: { above: (bp: Breakpoint) => boolean; below: (bp: Breakpoint) => boolean },\n): boolean {\n if (only) {\n const list = Array.isArray(only) ? only : [only];\n return list.includes(current);\n }\n if (above && !helpers.above(above)) return false;\n if (below && !helpers.below(below)) return false;\n return true;\n}\n\n/**\n * Conditionally render children based on the viewport breakpoint.\n *\n * - `above` — render when viewport width is `>=` the given breakpoint.\n * - `below` — render when viewport width is `<` the given breakpoint.\n * - `only` — render only on the listed breakpoint(s).\n *\n * SSR-safe: first render uses `xs` (renders mobile content first); the\n * component re-renders once `useBreakpoint` has the real viewport width.\n */\nexport function Show({ above, below, only, children }: ShowProps): ReactNode {\n const bp = useBreakpoint();\n if (!shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n\nexport interface HideProps {\n /** Hide children when viewport width is `>=` this breakpoint. */\n above?: Breakpoint;\n /** Hide children when viewport width is `<` this breakpoint. */\n below?: Breakpoint;\n /** Hide on specific breakpoints. */\n only?: Breakpoint | Breakpoint[];\n children: ReactNode;\n}\n\n/** Inverse of `<Show>` — hides children when the condition matches. */\nexport function Hide({ above, below, only, children }: HideProps): ReactNode {\n const bp = useBreakpoint();\n if (shouldRender(bp.current, above, below, only, bp)) return null;\n return children;\n}\n"],"mappings":";;AAaA,SAASA,EACL,GACA,GACA,GACA,GACA,GACO;CAOP,OANIC,KACa,MAAM,QAAQA,CAAI,IAAIA,IAAO,CAACA,CAAI,EAAA,CACnC,SAASC,CAAO,IAGhC,EADIC,KAAS,CAACC,EAAQ,MAAMD,CAAK,KAC7BE,KAAS,CAACD,EAAQ,MAAMC,CAAK;AAErC;AAYA,SAAgBC,EAAK,EAAE,UAAO,UAAO,SAAM,eAAkC;CACzE,IAAMC,IAAKC,EAAc;CAEzB,OADKR,EAAaO,EAAG,SAASJ,GAAOE,GAAOJ,GAAMM,CAAE,IAC7CE,IADuD;AAElE;AAaA,SAAgBC,EAAK,EAAE,UAAO,UAAO,SAAM,eAAkC;CACzE,IAAMH,IAAKC,EAAc;CAEzB,OADIR,EAAaO,EAAG,SAASJ,GAAOE,GAAOJ,GAAMM,CAAE,IAAU,OACtDE;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"Reveal.cjs","names":[],"sources":["../../../src/components/Reveal/Reveal.tsx"],"sourcesContent":["import type { CSSProperties, ElementType, HTMLAttributes, JSX, RefObject } from \"react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport { useIntersectionObserver } from \"@/hooks/use-intersection-observer\";\nimport { cn } from \"@/utils/cn\";\nimport { RATIO_EPSILON, effectiveThreshold } from \"./reveal-threshold\";\nimport styles from \"./Reveal.module.css\";\n\n/** Direction the content travels from, or `\"fade\"` / `\"scale\"` for no travel. */\nexport type RevealVariant = \"fade\" | \"up\" | \"down\" | \"left\" | \"right\" | \"scale\";\n\n/** Visual state written to `data-state`. */\nexport type RevealState = \"static\" | \"hidden\" | \"shown\";\n\nexport interface RevealProps extends HTMLAttributes<HTMLElement> {\n /** Intrinsic element to render, e.g. `\"li\"` inside a list. Defaults to `\"div\"`. */\n as?: keyof JSX.IntrinsicElements;\n /** How the content enters. Defaults to `\"up\"`. */\n variant?: RevealVariant;\n /** Wait before the entrance starts, in ms. Stagger siblings with `index * step`. */\n delay?: number;\n /** Length of the entrance, in ms. Defaults to `--tempest-duration-slower`. */\n duration?: number;\n /** Reveal once and stop observing. With `false`, it hides again once fully out of view. Defaults to `true`. */\n once?: boolean;\n /**\n * Fraction of the element — or of the viewport, when the element is taller\n * than it — that must be visible to reveal. Defaults to `0.15`.\n */\n threshold?: number;\n /** Margin around the root, as in `IntersectionObserver`. Defaults to `\"0px\"`. */\n rootMargin?: string;\n}\n\n/** A ref that never points at an element, used to switch the observer off. */\nconst DETACHED: RefObject<Element | null> = { current: null };\n\n/**\n * Subscribe function for a snapshot that never changes after mount.\n *\n * @returns A no-op unsubscribe.\n */\nfunction subscribeNever(): () => void {\n return () => undefined;\n}\n\n/**\n * Whether this environment can observe intersections.\n *\n * @returns `true` when `IntersectionObserver` exists.\n */\nfunction canObserve(): boolean {\n return typeof IntersectionObserver !== \"undefined\";\n}\n\n/**\n * Server snapshot: never hide content that was rendered without JavaScript.\n *\n * @returns Always `false`.\n */\nfunction cannotObserve(): boolean {\n return false;\n}\n\n/**\n * Animate content into view the first time it is scrolled to.\n *\n * The three failure modes of a hand-rolled version are handled here, not left to\n * the docs:\n *\n * - **Reduced motion.** Under `prefers-reduced-motion: reduce` the stylesheet\n * pins the element visible with no transform and no transition, whatever\n * state it is in — so the setting also wins when it changes mid-session.\n * - **No `IntersectionObserver`** (old engines, some crawlers, tests): the\n * element stays in the `\"static\"` state, which is plain visible content. It is\n * never hidden waiting for an observation that cannot come.\n * - **Taller than the viewport.** A box three viewports tall never reaches a\n * ratio of 0.5, so a raw observer with that threshold never reveals it. The\n * threshold is rescaled by the highest ratio the element can reach (see\n * `effectiveThreshold`), read from the first observation.\n *\n * Content is hidden only when the client can observe: the server snapshot of\n * `useSyncExternalStore` is `\"static\"`, so markup rendered without JavaScript —\n * or before hydration — is visible. The transition is declared on the `\"shown\"`\n * state only, so the switch to `\"hidden\"` on mount is instant instead of a\n * fade-out, and with `once={false}` leaving the viewport hides without motion.\n *\n * With `once={false}` the element hides only once it is fully out of view. Hiding\n * on the threshold would oscillate: the hidden state translates the box, which\n * moves it back across the same threshold.\n *\n * @example\n * <ul>\n * {steps.map((step, index) => (\n * <Reveal key={step.id} as=\"li\" delay={index * 80}>\n * {step.title}\n * </Reveal>\n * ))}\n * </ul>\n */\nexport function Reveal({\n as = \"div\",\n variant = \"up\",\n delay,\n duration,\n once = true,\n threshold = 0.15,\n rootMargin = \"0px\",\n className,\n style,\n children,\n ...props\n}: RevealProps) {\n const ref = useRef<HTMLElement>(null);\n const observable = useSyncExternalStore(subscribeNever, canObserve, cannotObserve);\n const [shown, setShown] = useState<boolean>(false);\n const [rescaled, setRescaled] = useState<{ requested: number; value: number }>({\n requested: threshold,\n value: threshold,\n });\n const observeAt = rescaled.requested === threshold ? rescaled.value : threshold;\n const settled = once && shown;\n\n const entry = useIntersectionObserver(observable && !settled ? ref : DETACHED, {\n rootMargin,\n threshold: observeAt,\n });\n\n useEffect(() => {\n if (!entry) return;\n const target = effectiveThreshold(threshold, entry);\n if (Math.abs(target - observeAt) > RATIO_EPSILON) {\n setRescaled({ requested: threshold, value: target });\n }\n if (entry.isIntersecting && entry.intersectionRatio + RATIO_EPSILON >= target) {\n setShown(true);\n } else if (!once && !entry.isIntersecting) {\n setShown(false);\n }\n }, [entry, threshold, observeAt, once]);\n\n const state: RevealState = !observable ? \"static\" : shown ? \"shown\" : \"hidden\";\n const timing: Record<string, string> = {};\n if (delay !== undefined) timing[\"--tempest-reveal-delay\"] = `${delay}ms`;\n if (duration !== undefined) timing[\"--tempest-reveal-duration\"] = `${duration}ms`;\n\n const Tag = as as ElementType;\n\n return (\n <Tag\n {...props}\n ref={ref}\n className={cn(styles.reveal, className)}\n style={{ ...timing, ...style } as CSSProperties}\n data-state={state}\n data-variant={variant}\n >\n {children}\n </Tag>\n );\n}\n"],"mappings":"wNAkCA,IAAM,EAAsC,CAAE,QAAS,IAAK,EAO5D,SAAS,GAA6B,CAClC,UAAa,IAAA,EACjB,CAOA,SAAS,GAAsB,CAC3B,OAAO,OAAO,qBAAyB,GAC3C,CAOA,SAAS,GAAyB,CAC9B,MAAO,EACX,CAsCA,SAAgB,EAAO,CACnB,KAAK,MACL,UAAU,KACV,QACA,WACA,OAAO,GACP,YAAY,IACZ,aAAa,MACb,YACA,QACA,WACA,GAAG,GACS,CACZ,IAAM,GAAA,EAAM,EAAA,OAAA,CAAoB,IAAI,EAC9B,GAAA,EAAa,EAAA,qBAAA,CAAqB,EAAgB,EAAY,CAAa,EAC3E,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAkB,EAAK,EAC3C,CAAC,EAAU,IAAA,EAAe,EAAA,SAAA,CAA+C,CAC3E,UAAW,EACX,MAAO,CACX,CAAC,EACK,EAAY,EAAS,YAAc,EAAY,EAAS,MAAQ,EAGhE,EAAQ,EAAA,wBAAwB,GAAc,EAFpC,GAAQ,GAEuC,EAAM,EAAU,CAC3E,aACA,UAAW,CACf,CAAC,GAED,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,EAAO,OACZ,IAAM,EAAS,EAAA,mBAAmB,EAAW,CAAK,EAC9C,KAAK,IAAI,EAAS,CAAS,EAAA,MAC3B,EAAY,CAAE,UAAW,EAAW,MAAO,CAAO,CAAC,EAEnD,EAAM,gBAAkB,EAAM,kBAAA,MAAqC,EACnE,EAAS,EAAI,EACN,CAAC,GAAQ,CAAC,EAAM,gBACvB,EAAS,EAAK,CAEtB,EAAG,CAAC,EAAO,EAAW,EAAW,CAAI,CAAC,EAEtC,IAAM,EAAsB,EAAwB,EAAQ,QAAU,SAA7B,SACnC,EAAiC,CAAC,EAMxC,OALI,IAAU,IAAA,KAAW,EAAO,0BAA4B,GAAG,EAAM,KACjE,IAAa,IAAA,KAAW,EAAO,6BAA+B,GAAG,EAAS,MAK1E,EAAA,EAAA,IAAA,CAAC,EAAD,CACI,GAAI,EACC,MACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,CAAS,EACtC,MAAO,CAAE,GAAG,EAAQ,GAAG,CAAM,EAC7B,aAAY,EACZ,eAAc,EAEb,UACA,CAAA,CAEb"}
1
+ {"version":3,"file":"Reveal.cjs","names":["useRef","useSyncExternalStore","useState","useIntersectionObserver","effectiveThreshold","Tag","cn","styles","require_cn","require_use_intersection_observer","require_reveal_threshold","require_Reveal_module","react","react_jsx_runtime","DETACHED","subscribeNever","canObserve","cannotObserve","Reveal","props","ref","observable","shown","setShown","rescaled","setRescaled","threshold","observeAt","entry","once","target","state","timing","delay","duration","as","className","style","variant"],"sources":["../../../src/components/Reveal/Reveal.tsx"],"sourcesContent":["import type { CSSProperties, ElementType, HTMLAttributes, JSX, RefObject } from \"react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport { useIntersectionObserver } from \"@/hooks/use-intersection-observer\";\nimport { cn } from \"@/utils/cn\";\nimport { RATIO_EPSILON, effectiveThreshold } from \"./reveal-threshold\";\nimport styles from \"./Reveal.module.css\";\n\n/** Direction the content travels from, or `\"fade\"` / `\"scale\"` for no travel. */\nexport type RevealVariant = \"fade\" | \"up\" | \"down\" | \"left\" | \"right\" | \"scale\";\n\n/** Visual state written to `data-state`. */\nexport type RevealState = \"static\" | \"hidden\" | \"shown\";\n\nexport interface RevealProps extends HTMLAttributes<HTMLElement> {\n /** Intrinsic element to render, e.g. `\"li\"` inside a list. Defaults to `\"div\"`. */\n as?: keyof JSX.IntrinsicElements;\n /** How the content enters. Defaults to `\"up\"`. */\n variant?: RevealVariant;\n /** Wait before the entrance starts, in ms. Stagger siblings with `index * step`. */\n delay?: number;\n /** Length of the entrance, in ms. Defaults to `--tempest-duration-slower`. */\n duration?: number;\n /** Reveal once and stop observing. With `false`, it hides again once fully out of view. Defaults to `true`. */\n once?: boolean;\n /**\n * Fraction of the element — or of the viewport, when the element is taller\n * than it — that must be visible to reveal. Defaults to `0.15`.\n */\n threshold?: number;\n /** Margin around the root, as in `IntersectionObserver`. Defaults to `\"0px\"`. */\n rootMargin?: string;\n}\n\n/** A ref that never points at an element, used to switch the observer off. */\nconst DETACHED: RefObject<Element | null> = { current: null };\n\n/**\n * Subscribe function for a snapshot that never changes after mount.\n *\n * @returns A no-op unsubscribe.\n */\nfunction subscribeNever(): () => void {\n return () => undefined;\n}\n\n/**\n * Whether this environment can observe intersections.\n *\n * @returns `true` when `IntersectionObserver` exists.\n */\nfunction canObserve(): boolean {\n return typeof IntersectionObserver !== \"undefined\";\n}\n\n/**\n * Server snapshot: never hide content that was rendered without JavaScript.\n *\n * @returns Always `false`.\n */\nfunction cannotObserve(): boolean {\n return false;\n}\n\n/**\n * Animate content into view the first time it is scrolled to.\n *\n * The three failure modes of a hand-rolled version are handled here, not left to\n * the docs:\n *\n * - **Reduced motion.** Under `prefers-reduced-motion: reduce` the stylesheet\n * pins the element visible with no transform and no transition, whatever\n * state it is in — so the setting also wins when it changes mid-session.\n * - **No `IntersectionObserver`** (old engines, some crawlers, tests): the\n * element stays in the `\"static\"` state, which is plain visible content. It is\n * never hidden waiting for an observation that cannot come.\n * - **Taller than the viewport.** A box three viewports tall never reaches a\n * ratio of 0.5, so a raw observer with that threshold never reveals it. The\n * threshold is rescaled by the highest ratio the element can reach (see\n * `effectiveThreshold`), read from the first observation.\n *\n * Content is hidden only when the client can observe: the server snapshot of\n * `useSyncExternalStore` is `\"static\"`, so markup rendered without JavaScript —\n * or before hydration — is visible. The transition is declared on the `\"shown\"`\n * state only, so the switch to `\"hidden\"` on mount is instant instead of a\n * fade-out, and with `once={false}` leaving the viewport hides without motion.\n *\n * With `once={false}` the element hides only once it is fully out of view. Hiding\n * on the threshold would oscillate: the hidden state translates the box, which\n * moves it back across the same threshold.\n *\n * @example\n * <ul>\n * {steps.map((step, index) => (\n * <Reveal key={step.id} as=\"li\" delay={index * 80}>\n * {step.title}\n * </Reveal>\n * ))}\n * </ul>\n */\nexport function Reveal({\n as = \"div\",\n variant = \"up\",\n delay,\n duration,\n once = true,\n threshold = 0.15,\n rootMargin = \"0px\",\n className,\n style,\n children,\n ...props\n}: RevealProps) {\n const ref = useRef<HTMLElement>(null);\n const observable = useSyncExternalStore(subscribeNever, canObserve, cannotObserve);\n const [shown, setShown] = useState<boolean>(false);\n const [rescaled, setRescaled] = useState<{ requested: number; value: number }>({\n requested: threshold,\n value: threshold,\n });\n const observeAt = rescaled.requested === threshold ? rescaled.value : threshold;\n const settled = once && shown;\n\n const entry = useIntersectionObserver(observable && !settled ? ref : DETACHED, {\n rootMargin,\n threshold: observeAt,\n });\n\n useEffect(() => {\n if (!entry) return;\n const target = effectiveThreshold(threshold, entry);\n if (Math.abs(target - observeAt) > RATIO_EPSILON) {\n setRescaled({ requested: threshold, value: target });\n }\n if (entry.isIntersecting && entry.intersectionRatio + RATIO_EPSILON >= target) {\n setShown(true);\n } else if (!once && !entry.isIntersecting) {\n setShown(false);\n }\n }, [entry, threshold, observeAt, once]);\n\n const state: RevealState = !observable ? \"static\" : shown ? \"shown\" : \"hidden\";\n const timing: Record<string, string> = {};\n if (delay !== undefined) timing[\"--tempest-reveal-delay\"] = `${delay}ms`;\n if (duration !== undefined) timing[\"--tempest-reveal-duration\"] = `${duration}ms`;\n\n const Tag = as as ElementType;\n\n return (\n <Tag\n {...props}\n ref={ref}\n className={cn(styles.reveal, className)}\n style={{ ...timing, ...style } as CSSProperties}\n data-state={state}\n data-variant={variant}\n >\n {children}\n </Tag>\n );\n}\n"],"mappings":"A,wNAkCA,IAAMc,EAAsC,CAAE,QAAS,IAAK,EAO5D,SAASC,GAA6B,CAClC,UAAa,IAAA,EACjB,CAOA,SAASC,GAAsB,CAC3B,OAAO,OAAO,qBAAyB,GAC3C,CAOA,SAASC,GAAyB,CAC9B,MAAO,EACX,CAsCA,SAAgBC,EAAO,CACnB,KAAK,MACL,UAAU,KACV,QACA,WACA,OAAO,GACP,YAAY,IACZ,aAAa,MACb,YACA,QACA,WACA,GAAGC,GACS,CACZ,IAAMC,GAAA,EAAMpB,EAAAA,OAAAA,CAAoB,IAAI,EAC9BqB,GAAA,EAAapB,EAAAA,qBAAAA,CAAqBc,EAAgBC,EAAYC,CAAa,EAC3E,CAACK,EAAOC,IAAA,EAAYrB,EAAAA,SAAAA,CAAkB,EAAK,EAC3C,CAACsB,EAAUC,IAAA,EAAevB,EAAAA,SAAAA,CAA+C,CAC3E,UAAWwB,EACX,MAAOA,CACX,CAAC,EACKC,EAAYH,EAAS,YAAcE,EAAYF,EAAS,MAAQE,EAGhEE,EAAQzB,EAAAA,wBAAwBkB,GAAc,EAFpCQ,GAAQP,GAEuCF,EAAMN,EAAU,CAC3E,aACA,UAAWa,CACf,CAAC,GAED,EAAAf,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACgB,EAAO,OACZ,IAAME,EAAS1B,EAAAA,mBAAmBsB,EAAWE,CAAK,EAC9C,KAAK,IAAIE,EAASH,CAAS,EAAA,MAC3BF,EAAY,CAAE,UAAWC,EAAW,MAAOI,CAAO,CAAC,EAEnDF,EAAM,gBAAkBA,EAAM,kBAAA,MAAqCE,EACnEP,EAAS,EAAI,EACN,CAACM,GAAQ,CAACD,EAAM,gBACvBL,EAAS,EAAK,CAEtB,EAAG,CAACK,EAAOF,EAAWC,EAAWE,CAAI,CAAC,EAEtC,IAAME,EAAsBV,EAAwBC,EAAQ,QAAU,SAA7B,SACnCU,EAAiC,CAAC,EAMxC,OALIC,IAAU,IAAA,KAAW,EAAO,0BAA4B,GAAGA,EAAM,KACjEC,IAAa,IAAA,KAAW,EAAO,6BAA+B,GAAGA,EAAS,MAK1E,EAAArB,EAAA,IAAA,CAACR,EAAD,CACI,GAAIc,EACC,MACL,UAAWb,EAAAA,GAAGC,EAAAA,QAAO,OAAQ6B,CAAS,EACtC,MAAO,CAAE,GAAGJ,EAAQ,GAAGK,CAAM,EAC7B,aAAYN,EACZ,eAAcO,EAEb,UACA,CAAA,CAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Reveal.js","names":[],"sources":["../../../src/components/Reveal/Reveal.tsx"],"sourcesContent":["import type { CSSProperties, ElementType, HTMLAttributes, JSX, RefObject } from \"react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport { useIntersectionObserver } from \"@/hooks/use-intersection-observer\";\nimport { cn } from \"@/utils/cn\";\nimport { RATIO_EPSILON, effectiveThreshold } from \"./reveal-threshold\";\nimport styles from \"./Reveal.module.css\";\n\n/** Direction the content travels from, or `\"fade\"` / `\"scale\"` for no travel. */\nexport type RevealVariant = \"fade\" | \"up\" | \"down\" | \"left\" | \"right\" | \"scale\";\n\n/** Visual state written to `data-state`. */\nexport type RevealState = \"static\" | \"hidden\" | \"shown\";\n\nexport interface RevealProps extends HTMLAttributes<HTMLElement> {\n /** Intrinsic element to render, e.g. `\"li\"` inside a list. Defaults to `\"div\"`. */\n as?: keyof JSX.IntrinsicElements;\n /** How the content enters. Defaults to `\"up\"`. */\n variant?: RevealVariant;\n /** Wait before the entrance starts, in ms. Stagger siblings with `index * step`. */\n delay?: number;\n /** Length of the entrance, in ms. Defaults to `--tempest-duration-slower`. */\n duration?: number;\n /** Reveal once and stop observing. With `false`, it hides again once fully out of view. Defaults to `true`. */\n once?: boolean;\n /**\n * Fraction of the element — or of the viewport, when the element is taller\n * than it — that must be visible to reveal. Defaults to `0.15`.\n */\n threshold?: number;\n /** Margin around the root, as in `IntersectionObserver`. Defaults to `\"0px\"`. */\n rootMargin?: string;\n}\n\n/** A ref that never points at an element, used to switch the observer off. */\nconst DETACHED: RefObject<Element | null> = { current: null };\n\n/**\n * Subscribe function for a snapshot that never changes after mount.\n *\n * @returns A no-op unsubscribe.\n */\nfunction subscribeNever(): () => void {\n return () => undefined;\n}\n\n/**\n * Whether this environment can observe intersections.\n *\n * @returns `true` when `IntersectionObserver` exists.\n */\nfunction canObserve(): boolean {\n return typeof IntersectionObserver !== \"undefined\";\n}\n\n/**\n * Server snapshot: never hide content that was rendered without JavaScript.\n *\n * @returns Always `false`.\n */\nfunction cannotObserve(): boolean {\n return false;\n}\n\n/**\n * Animate content into view the first time it is scrolled to.\n *\n * The three failure modes of a hand-rolled version are handled here, not left to\n * the docs:\n *\n * - **Reduced motion.** Under `prefers-reduced-motion: reduce` the stylesheet\n * pins the element visible with no transform and no transition, whatever\n * state it is in — so the setting also wins when it changes mid-session.\n * - **No `IntersectionObserver`** (old engines, some crawlers, tests): the\n * element stays in the `\"static\"` state, which is plain visible content. It is\n * never hidden waiting for an observation that cannot come.\n * - **Taller than the viewport.** A box three viewports tall never reaches a\n * ratio of 0.5, so a raw observer with that threshold never reveals it. The\n * threshold is rescaled by the highest ratio the element can reach (see\n * `effectiveThreshold`), read from the first observation.\n *\n * Content is hidden only when the client can observe: the server snapshot of\n * `useSyncExternalStore` is `\"static\"`, so markup rendered without JavaScript —\n * or before hydration — is visible. The transition is declared on the `\"shown\"`\n * state only, so the switch to `\"hidden\"` on mount is instant instead of a\n * fade-out, and with `once={false}` leaving the viewport hides without motion.\n *\n * With `once={false}` the element hides only once it is fully out of view. Hiding\n * on the threshold would oscillate: the hidden state translates the box, which\n * moves it back across the same threshold.\n *\n * @example\n * <ul>\n * {steps.map((step, index) => (\n * <Reveal key={step.id} as=\"li\" delay={index * 80}>\n * {step.title}\n * </Reveal>\n * ))}\n * </ul>\n */\nexport function Reveal({\n as = \"div\",\n variant = \"up\",\n delay,\n duration,\n once = true,\n threshold = 0.15,\n rootMargin = \"0px\",\n className,\n style,\n children,\n ...props\n}: RevealProps) {\n const ref = useRef<HTMLElement>(null);\n const observable = useSyncExternalStore(subscribeNever, canObserve, cannotObserve);\n const [shown, setShown] = useState<boolean>(false);\n const [rescaled, setRescaled] = useState<{ requested: number; value: number }>({\n requested: threshold,\n value: threshold,\n });\n const observeAt = rescaled.requested === threshold ? rescaled.value : threshold;\n const settled = once && shown;\n\n const entry = useIntersectionObserver(observable && !settled ? ref : DETACHED, {\n rootMargin,\n threshold: observeAt,\n });\n\n useEffect(() => {\n if (!entry) return;\n const target = effectiveThreshold(threshold, entry);\n if (Math.abs(target - observeAt) > RATIO_EPSILON) {\n setRescaled({ requested: threshold, value: target });\n }\n if (entry.isIntersecting && entry.intersectionRatio + RATIO_EPSILON >= target) {\n setShown(true);\n } else if (!once && !entry.isIntersecting) {\n setShown(false);\n }\n }, [entry, threshold, observeAt, once]);\n\n const state: RevealState = !observable ? \"static\" : shown ? \"shown\" : \"hidden\";\n const timing: Record<string, string> = {};\n if (delay !== undefined) timing[\"--tempest-reveal-delay\"] = `${delay}ms`;\n if (duration !== undefined) timing[\"--tempest-reveal-duration\"] = `${duration}ms`;\n\n const Tag = as as ElementType;\n\n return (\n <Tag\n {...props}\n ref={ref}\n className={cn(styles.reveal, className)}\n style={{ ...timing, ...style } as CSSProperties}\n data-state={state}\n data-variant={variant}\n >\n {children}\n </Tag>\n );\n}\n"],"mappings":";;;;;;;AAkCA,IAAM,IAAsC,EAAE,SAAS,KAAK;AAO5D,SAAS,IAA6B;CAClC,aAAa,KAAA;AACjB;AAOA,SAAS,IAAsB;CAC3B,OAAO,OAAO,uBAAyB;AAC3C;AAOA,SAAS,IAAyB;CAC9B,OAAO;AACX;AAsCA,SAAgB,EAAO,EACnB,QAAK,OACL,aAAU,MACV,UACA,aACA,UAAO,IACP,eAAY,KACZ,gBAAa,OACb,cACA,UACA,aACA,GAAG,KACS;CACZ,IAAM,IAAM,EAAoB,IAAI,GAC9B,IAAa,EAAqB,GAAgB,GAAY,CAAa,GAC3E,CAAC,GAAO,KAAY,EAAkB,EAAK,GAC3C,CAAC,GAAU,KAAe,EAA+C;EAC3E,WAAW;EACX,OAAO;CACX,CAAC,GACK,IAAY,EAAS,cAAc,IAAY,EAAS,QAAQ,GAGhE,IAAQ,EAAwB,KAAc,EAFpC,KAAQ,KAEuC,IAAM,GAAU;EAC3E;EACA,WAAW;CACf,CAAC;CAED,QAAgB;EACZ,IAAI,CAAC,GAAO;EACZ,IAAM,IAAS,EAAmB,GAAW,CAAK;EAIlD,AAHI,KAAK,IAAI,IAAS,CAAS,IAAA,QAC3B,EAAY;GAAE,WAAW;GAAW,OAAO;EAAO,CAAC,GAEnD,EAAM,kBAAkB,EAAM,oBAAA,QAAqC,IACnE,EAAS,EAAI,IACN,CAAC,KAAQ,CAAC,EAAM,kBACvB,EAAS,EAAK;CAEtB,GAAG;EAAC;EAAO;EAAW;EAAW;CAAI,CAAC;CAEtC,IAAM,IAAsB,IAAwB,IAAQ,UAAU,WAA7B,UACnC,IAAiC,CAAC;CAMxC,OALI,MAAU,KAAA,MAAW,EAAO,4BAA4B,GAAG,EAAM,MACjE,MAAa,KAAA,MAAW,EAAO,+BAA+B,GAAG,EAAS,MAK1E,kBAAC,GAAD;EACI,GAAI;EACC;EACL,WAAW,EAAG,EAAO,QAAQ,CAAS;EACtC,OAAO;GAAE,GAAG;GAAQ,GAAG;EAAM;EAC7B,cAAY;EACZ,gBAAc;EAEb;CACA,CAAA;AAEb"}
1
+ {"version":3,"file":"Reveal.js","names":["Tag","styles","Reveal_module_default","DETACHED","subscribeNever","canObserve","cannotObserve","Reveal","props","ref","useRef","observable","useSyncExternalStore","shown","setShown","useState","rescaled","setRescaled","threshold","observeAt","entry","useIntersectionObserver","once","target","effectiveThreshold","state","timing","delay","duration","as","cn","className","style","variant"],"sources":["../../../src/components/Reveal/Reveal.tsx"],"sourcesContent":["import type { CSSProperties, ElementType, HTMLAttributes, JSX, RefObject } from \"react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport { useIntersectionObserver } from \"@/hooks/use-intersection-observer\";\nimport { cn } from \"@/utils/cn\";\nimport { RATIO_EPSILON, effectiveThreshold } from \"./reveal-threshold\";\nimport styles from \"./Reveal.module.css\";\n\n/** Direction the content travels from, or `\"fade\"` / `\"scale\"` for no travel. */\nexport type RevealVariant = \"fade\" | \"up\" | \"down\" | \"left\" | \"right\" | \"scale\";\n\n/** Visual state written to `data-state`. */\nexport type RevealState = \"static\" | \"hidden\" | \"shown\";\n\nexport interface RevealProps extends HTMLAttributes<HTMLElement> {\n /** Intrinsic element to render, e.g. `\"li\"` inside a list. Defaults to `\"div\"`. */\n as?: keyof JSX.IntrinsicElements;\n /** How the content enters. Defaults to `\"up\"`. */\n variant?: RevealVariant;\n /** Wait before the entrance starts, in ms. Stagger siblings with `index * step`. */\n delay?: number;\n /** Length of the entrance, in ms. Defaults to `--tempest-duration-slower`. */\n duration?: number;\n /** Reveal once and stop observing. With `false`, it hides again once fully out of view. Defaults to `true`. */\n once?: boolean;\n /**\n * Fraction of the element — or of the viewport, when the element is taller\n * than it — that must be visible to reveal. Defaults to `0.15`.\n */\n threshold?: number;\n /** Margin around the root, as in `IntersectionObserver`. Defaults to `\"0px\"`. */\n rootMargin?: string;\n}\n\n/** A ref that never points at an element, used to switch the observer off. */\nconst DETACHED: RefObject<Element | null> = { current: null };\n\n/**\n * Subscribe function for a snapshot that never changes after mount.\n *\n * @returns A no-op unsubscribe.\n */\nfunction subscribeNever(): () => void {\n return () => undefined;\n}\n\n/**\n * Whether this environment can observe intersections.\n *\n * @returns `true` when `IntersectionObserver` exists.\n */\nfunction canObserve(): boolean {\n return typeof IntersectionObserver !== \"undefined\";\n}\n\n/**\n * Server snapshot: never hide content that was rendered without JavaScript.\n *\n * @returns Always `false`.\n */\nfunction cannotObserve(): boolean {\n return false;\n}\n\n/**\n * Animate content into view the first time it is scrolled to.\n *\n * The three failure modes of a hand-rolled version are handled here, not left to\n * the docs:\n *\n * - **Reduced motion.** Under `prefers-reduced-motion: reduce` the stylesheet\n * pins the element visible with no transform and no transition, whatever\n * state it is in — so the setting also wins when it changes mid-session.\n * - **No `IntersectionObserver`** (old engines, some crawlers, tests): the\n * element stays in the `\"static\"` state, which is plain visible content. It is\n * never hidden waiting for an observation that cannot come.\n * - **Taller than the viewport.** A box three viewports tall never reaches a\n * ratio of 0.5, so a raw observer with that threshold never reveals it. The\n * threshold is rescaled by the highest ratio the element can reach (see\n * `effectiveThreshold`), read from the first observation.\n *\n * Content is hidden only when the client can observe: the server snapshot of\n * `useSyncExternalStore` is `\"static\"`, so markup rendered without JavaScript —\n * or before hydration — is visible. The transition is declared on the `\"shown\"`\n * state only, so the switch to `\"hidden\"` on mount is instant instead of a\n * fade-out, and with `once={false}` leaving the viewport hides without motion.\n *\n * With `once={false}` the element hides only once it is fully out of view. Hiding\n * on the threshold would oscillate: the hidden state translates the box, which\n * moves it back across the same threshold.\n *\n * @example\n * <ul>\n * {steps.map((step, index) => (\n * <Reveal key={step.id} as=\"li\" delay={index * 80}>\n * {step.title}\n * </Reveal>\n * ))}\n * </ul>\n */\nexport function Reveal({\n as = \"div\",\n variant = \"up\",\n delay,\n duration,\n once = true,\n threshold = 0.15,\n rootMargin = \"0px\",\n className,\n style,\n children,\n ...props\n}: RevealProps) {\n const ref = useRef<HTMLElement>(null);\n const observable = useSyncExternalStore(subscribeNever, canObserve, cannotObserve);\n const [shown, setShown] = useState<boolean>(false);\n const [rescaled, setRescaled] = useState<{ requested: number; value: number }>({\n requested: threshold,\n value: threshold,\n });\n const observeAt = rescaled.requested === threshold ? rescaled.value : threshold;\n const settled = once && shown;\n\n const entry = useIntersectionObserver(observable && !settled ? ref : DETACHED, {\n rootMargin,\n threshold: observeAt,\n });\n\n useEffect(() => {\n if (!entry) return;\n const target = effectiveThreshold(threshold, entry);\n if (Math.abs(target - observeAt) > RATIO_EPSILON) {\n setRescaled({ requested: threshold, value: target });\n }\n if (entry.isIntersecting && entry.intersectionRatio + RATIO_EPSILON >= target) {\n setShown(true);\n } else if (!once && !entry.isIntersecting) {\n setShown(false);\n }\n }, [entry, threshold, observeAt, once]);\n\n const state: RevealState = !observable ? \"static\" : shown ? \"shown\" : \"hidden\";\n const timing: Record<string, string> = {};\n if (delay !== undefined) timing[\"--tempest-reveal-delay\"] = `${delay}ms`;\n if (duration !== undefined) timing[\"--tempest-reveal-duration\"] = `${duration}ms`;\n\n const Tag = as as ElementType;\n\n return (\n <Tag\n {...props}\n ref={ref}\n className={cn(styles.reveal, className)}\n style={{ ...timing, ...style } as CSSProperties}\n data-state={state}\n data-variant={variant}\n >\n {children}\n </Tag>\n );\n}\n"],"mappings":";;;;;;;AAkCA,IAAMG,IAAsC,EAAE,SAAS,KAAK;AAO5D,SAASC,IAA6B;CAClC,aAAa,KAAA;AACjB;AAOA,SAASC,IAAsB;CAC3B,OAAO,OAAO,uBAAyB;AAC3C;AAOA,SAASC,IAAyB;CAC9B,OAAO;AACX;AAsCA,SAAgBC,EAAO,EACnB,QAAK,OACL,aAAU,MACV,UACA,aACA,UAAO,IACP,eAAY,KACZ,gBAAa,OACb,cACA,UACA,aACA,GAAGC,KACS;CACZ,IAAMC,IAAMC,EAAoB,IAAI,GAC9BC,IAAaC,EAAqBR,GAAgBC,GAAYC,CAAa,GAC3E,CAACO,GAAOC,KAAYC,EAAkB,EAAK,GAC3C,CAACC,GAAUC,KAAeF,EAA+C;EAC3E,WAAWG;EACX,OAAOA;CACX,CAAC,GACKC,IAAYH,EAAS,cAAcE,IAAYF,EAAS,QAAQE,GAGhEE,IAAQC,EAAwBV,KAAc,EAFpCW,KAAQT,KAEuCJ,IAAMN,GAAU;EAC3E;EACA,WAAWgB;CACf,CAAC;CAED,QAAgB;EACZ,IAAI,CAACC,GAAO;EACZ,IAAMG,IAASC,EAAmBN,GAAWE,CAAK;EAIlD,AAHI,KAAK,IAAIG,IAASJ,CAAS,IAAA,QAC3BF,EAAY;GAAE,WAAWC;GAAW,OAAOK;EAAO,CAAC,GAEnDH,EAAM,kBAAkBA,EAAM,oBAAA,QAAqCG,IACnET,EAAS,EAAI,IACN,CAACQ,KAAQ,CAACF,EAAM,kBACvBN,EAAS,EAAK;CAEtB,GAAG;EAACM;EAAOF;EAAWC;EAAWG;CAAI,CAAC;CAEtC,IAAMG,IAAsBd,IAAwBE,IAAQ,UAAU,WAA7B,UACnCa,IAAiC,CAAC;CAMxC,OALIC,MAAU,KAAA,MAAW,EAAO,4BAA4B,GAAGA,EAAM,MACjEC,MAAa,KAAA,MAAW,EAAO,+BAA+B,GAAGA,EAAS,MAK1E,kBAAC5B,GAAD;EACI,GAAIQ;EACC;EACL,WAAWsB,EAAG7B,EAAO,QAAQ8B,CAAS;EACtC,OAAO;GAAE,GAAGL;GAAQ,GAAGM;EAAM;EAC7B,cAAYP;EACZ,gBAAcQ;EAEb;CACA,CAAA;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"Reveal.module.cjs","names":[],"sources":["../../../src/components/Reveal/Reveal.module.css"],"sourcesContent":[".reveal[data-state=\"hidden\"] {\n opacity: 0;\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"up\"] {\n transform: translate3d(0, var(--tempest-reveal-distance, 1.5rem), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"down\"] {\n transform: translate3d(0, calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"left\"] {\n transform: translate3d(var(--tempest-reveal-distance, 1.5rem), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"right\"] {\n transform: translate3d(calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"scale\"] {\n transform: scale(var(--tempest-reveal-scale, 0.95));\n}\n\n.reveal[data-state=\"shown\"] {\n opacity: 1;\n transform: none;\n transition:\n opacity var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-out)),\n transform var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-emphasized));\n transition-delay: var(--tempest-reveal-delay, 0ms);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reveal[data-state][data-variant] {\n opacity: 1;\n transform: none;\n transition: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Reveal.module.cjs","names":["reveal","Reveal_module_default"],"sources":["../../../src/components/Reveal/Reveal.module.css"],"sourcesContent":[".reveal[data-state=\"hidden\"] {\n opacity: 0;\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"up\"] {\n transform: translate3d(0, var(--tempest-reveal-distance, 1.5rem), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"down\"] {\n transform: translate3d(0, calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"left\"] {\n transform: translate3d(var(--tempest-reveal-distance, 1.5rem), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"right\"] {\n transform: translate3d(calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"scale\"] {\n transform: scale(var(--tempest-reveal-scale, 0.95));\n}\n\n.reveal[data-state=\"shown\"] {\n opacity: 1;\n transform: none;\n transition:\n opacity var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-out)),\n transform var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-emphasized));\n transition-delay: var(--tempest-reveal-delay, 0ms);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reveal[data-state][data-variant] {\n opacity: 1;\n transform: none;\n transition: none;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Reveal.module.js","names":[],"sources":["../../../src/components/Reveal/Reveal.module.css"],"sourcesContent":[".reveal[data-state=\"hidden\"] {\n opacity: 0;\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"up\"] {\n transform: translate3d(0, var(--tempest-reveal-distance, 1.5rem), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"down\"] {\n transform: translate3d(0, calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"left\"] {\n transform: translate3d(var(--tempest-reveal-distance, 1.5rem), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"right\"] {\n transform: translate3d(calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"scale\"] {\n transform: scale(var(--tempest-reveal-scale, 0.95));\n}\n\n.reveal[data-state=\"shown\"] {\n opacity: 1;\n transform: none;\n transition:\n opacity var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-out)),\n transform var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-emphasized));\n transition-delay: var(--tempest-reveal-delay, 0ms);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reveal[data-state][data-variant] {\n opacity: 1;\n transform: none;\n transition: none;\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Reveal.module.js","names":["reveal","Reveal_module_default"],"sources":["../../../src/components/Reveal/Reveal.module.css"],"sourcesContent":[".reveal[data-state=\"hidden\"] {\n opacity: 0;\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"up\"] {\n transform: translate3d(0, var(--tempest-reveal-distance, 1.5rem), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"down\"] {\n transform: translate3d(0, calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"left\"] {\n transform: translate3d(var(--tempest-reveal-distance, 1.5rem), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"right\"] {\n transform: translate3d(calc(-1 * var(--tempest-reveal-distance, 1.5rem)), 0, 0);\n}\n\n.reveal[data-state=\"hidden\"][data-variant=\"scale\"] {\n transform: scale(var(--tempest-reveal-scale, 0.95));\n}\n\n.reveal[data-state=\"shown\"] {\n opacity: 1;\n transform: none;\n transition:\n opacity var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-out)),\n transform var(--tempest-reveal-duration, var(--tempest-duration-slower))\n var(--tempest-reveal-easing, var(--tempest-ease-emphasized));\n transition-delay: var(--tempest-reveal-delay, 0ms);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .reveal[data-state][data-variant] {\n opacity: 1;\n transform: none;\n transition: none;\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"reveal-threshold.cjs","names":[],"sources":["../../../src/components/Reveal/reveal-threshold.ts"],"sourcesContent":["/**\n * Tolerance for comparing intersection ratios.\n *\n * Browsers report `intersectionRatio` as the quotient of two rounded areas, so a\n * box sitting exactly on its threshold can come back a hair below it. Without\n * the slack the observer fires (it crossed) and the comparison says it did not.\n */\nexport const RATIO_EPSILON = 0.001;\n\n/**\n * Highest `intersectionRatio` the target can ever reach inside the root.\n *\n * A box taller (or wider) than the root never fits in it: a section three\n * viewports tall tops out at a ratio of about 0.33. Any threshold above that is\n * unreachable, and an observer asked for it never reports the crossing.\n *\n * @param entry - An observation of the target; only its geometry is read.\n * @returns A value in `(0, 1]`, or `1` when the geometry is unknown (no\n * `rootBounds`, as in a cross-origin iframe, or an empty box).\n */\nexport function reachableRatio(entry: IntersectionObserverEntry): number {\n const root = entry.rootBounds;\n const box = entry.boundingClientRect;\n if (!root || box.width <= 0 || box.height <= 0) return 1;\n return Math.min(1, root.height / box.height) * Math.min(1, root.width / box.width);\n}\n\n/**\n * The threshold `Reveal` actually observes with, given the one it was asked for.\n *\n * The requested threshold is read as \"this fraction of whichever is smaller,\n * the element or the viewport\". For a box that fits, that is the plain ratio;\n * for a box taller than the viewport it scales the threshold by the reachable\n * ratio, so `threshold={0.5}` on a 3-viewport section reveals once it fills\n * half the viewport instead of never.\n *\n * @param threshold - The requested threshold, in `[0, 1]`.\n * @param entry - The latest observation, or `null` before the first one.\n * @returns The threshold to observe with.\n */\nexport function effectiveThreshold(\n threshold: number,\n entry: IntersectionObserverEntry | null,\n): number {\n if (!entry) return threshold;\n return threshold * reachableRatio(entry);\n}\n"],"mappings":"AAOA,IAAa,EAAgB,KAa7B,SAAgB,EAAe,EAA0C,CACrE,IAAM,EAAO,EAAM,WACb,EAAM,EAAM,mBAElB,MADI,CAAC,GAAQ,EAAI,OAAS,GAAK,EAAI,QAAU,EAAU,EAChD,KAAK,IAAI,EAAG,EAAK,OAAS,EAAI,MAAM,EAAI,KAAK,IAAI,EAAG,EAAK,MAAQ,EAAI,KAAK,CACrF,CAeA,SAAgB,EACZ,EACA,EACM,CAEN,OADK,EACE,EAAY,EAAe,CAAK,EADpB,CAEvB"}
1
+ {"version":3,"file":"reveal-threshold.cjs","names":["RATIO_EPSILON","reachableRatio","root","entry","box","effectiveThreshold","threshold"],"sources":["../../../src/components/Reveal/reveal-threshold.ts"],"sourcesContent":["/**\n * Tolerance for comparing intersection ratios.\n *\n * Browsers report `intersectionRatio` as the quotient of two rounded areas, so a\n * box sitting exactly on its threshold can come back a hair below it. Without\n * the slack the observer fires (it crossed) and the comparison says it did not.\n */\nexport const RATIO_EPSILON = 0.001;\n\n/**\n * Highest `intersectionRatio` the target can ever reach inside the root.\n *\n * A box taller (or wider) than the root never fits in it: a section three\n * viewports tall tops out at a ratio of about 0.33. Any threshold above that is\n * unreachable, and an observer asked for it never reports the crossing.\n *\n * @param entry - An observation of the target; only its geometry is read.\n * @returns A value in `(0, 1]`, or `1` when the geometry is unknown (no\n * `rootBounds`, as in a cross-origin iframe, or an empty box).\n */\nexport function reachableRatio(entry: IntersectionObserverEntry): number {\n const root = entry.rootBounds;\n const box = entry.boundingClientRect;\n if (!root || box.width <= 0 || box.height <= 0) return 1;\n return Math.min(1, root.height / box.height) * Math.min(1, root.width / box.width);\n}\n\n/**\n * The threshold `Reveal` actually observes with, given the one it was asked for.\n *\n * The requested threshold is read as \"this fraction of whichever is smaller,\n * the element or the viewport\". For a box that fits, that is the plain ratio;\n * for a box taller than the viewport it scales the threshold by the reachable\n * ratio, so `threshold={0.5}` on a 3-viewport section reveals once it fills\n * half the viewport instead of never.\n *\n * @param threshold - The requested threshold, in `[0, 1]`.\n * @param entry - The latest observation, or `null` before the first one.\n * @returns The threshold to observe with.\n */\nexport function effectiveThreshold(\n threshold: number,\n entry: IntersectionObserverEntry | null,\n): number {\n if (!entry) return threshold;\n return threshold * reachableRatio(entry);\n}\n"],"mappings":"AAOA,IAAaA,EAAgB,KAa7B,SAAgBC,EAAe,EAA0C,CACrE,IAAMC,EAAOC,EAAM,WACbC,EAAMD,EAAM,mBAElB,MADI,CAACD,GAAQE,EAAI,OAAS,GAAKA,EAAI,QAAU,EAAU,EAChD,KAAK,IAAI,EAAGF,EAAK,OAASE,EAAI,MAAM,EAAI,KAAK,IAAI,EAAGF,EAAK,MAAQE,EAAI,KAAK,CACrF,CAeA,SAAgBC,EACZ,EACA,EACM,CAEN,OADKF,EACEG,EAAYL,EAAeE,CAAK,EADpBG,CAEvB,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"reveal-threshold.js","names":[],"sources":["../../../src/components/Reveal/reveal-threshold.ts"],"sourcesContent":["/**\n * Tolerance for comparing intersection ratios.\n *\n * Browsers report `intersectionRatio` as the quotient of two rounded areas, so a\n * box sitting exactly on its threshold can come back a hair below it. Without\n * the slack the observer fires (it crossed) and the comparison says it did not.\n */\nexport const RATIO_EPSILON = 0.001;\n\n/**\n * Highest `intersectionRatio` the target can ever reach inside the root.\n *\n * A box taller (or wider) than the root never fits in it: a section three\n * viewports tall tops out at a ratio of about 0.33. Any threshold above that is\n * unreachable, and an observer asked for it never reports the crossing.\n *\n * @param entry - An observation of the target; only its geometry is read.\n * @returns A value in `(0, 1]`, or `1` when the geometry is unknown (no\n * `rootBounds`, as in a cross-origin iframe, or an empty box).\n */\nexport function reachableRatio(entry: IntersectionObserverEntry): number {\n const root = entry.rootBounds;\n const box = entry.boundingClientRect;\n if (!root || box.width <= 0 || box.height <= 0) return 1;\n return Math.min(1, root.height / box.height) * Math.min(1, root.width / box.width);\n}\n\n/**\n * The threshold `Reveal` actually observes with, given the one it was asked for.\n *\n * The requested threshold is read as \"this fraction of whichever is smaller,\n * the element or the viewport\". For a box that fits, that is the plain ratio;\n * for a box taller than the viewport it scales the threshold by the reachable\n * ratio, so `threshold={0.5}` on a 3-viewport section reveals once it fills\n * half the viewport instead of never.\n *\n * @param threshold - The requested threshold, in `[0, 1]`.\n * @param entry - The latest observation, or `null` before the first one.\n * @returns The threshold to observe with.\n */\nexport function effectiveThreshold(\n threshold: number,\n entry: IntersectionObserverEntry | null,\n): number {\n if (!entry) return threshold;\n return threshold * reachableRatio(entry);\n}\n"],"mappings":";AAOA,IAAa,IAAgB;AAa7B,SAAgB,EAAe,GAA0C;CACrE,IAAM,IAAO,EAAM,YACb,IAAM,EAAM;CAElB,OADI,CAAC,KAAQ,EAAI,SAAS,KAAK,EAAI,UAAU,IAAU,IAChD,KAAK,IAAI,GAAG,EAAK,SAAS,EAAI,MAAM,IAAI,KAAK,IAAI,GAAG,EAAK,QAAQ,EAAI,KAAK;AACrF;AAeA,SAAgB,EACZ,GACA,GACM;CAEN,OADK,IACE,IAAY,EAAe,CAAK,IADpB;AAEvB"}
1
+ {"version":3,"file":"reveal-threshold.js","names":["RATIO_EPSILON","reachableRatio","root","entry","box","effectiveThreshold","threshold"],"sources":["../../../src/components/Reveal/reveal-threshold.ts"],"sourcesContent":["/**\n * Tolerance for comparing intersection ratios.\n *\n * Browsers report `intersectionRatio` as the quotient of two rounded areas, so a\n * box sitting exactly on its threshold can come back a hair below it. Without\n * the slack the observer fires (it crossed) and the comparison says it did not.\n */\nexport const RATIO_EPSILON = 0.001;\n\n/**\n * Highest `intersectionRatio` the target can ever reach inside the root.\n *\n * A box taller (or wider) than the root never fits in it: a section three\n * viewports tall tops out at a ratio of about 0.33. Any threshold above that is\n * unreachable, and an observer asked for it never reports the crossing.\n *\n * @param entry - An observation of the target; only its geometry is read.\n * @returns A value in `(0, 1]`, or `1` when the geometry is unknown (no\n * `rootBounds`, as in a cross-origin iframe, or an empty box).\n */\nexport function reachableRatio(entry: IntersectionObserverEntry): number {\n const root = entry.rootBounds;\n const box = entry.boundingClientRect;\n if (!root || box.width <= 0 || box.height <= 0) return 1;\n return Math.min(1, root.height / box.height) * Math.min(1, root.width / box.width);\n}\n\n/**\n * The threshold `Reveal` actually observes with, given the one it was asked for.\n *\n * The requested threshold is read as \"this fraction of whichever is smaller,\n * the element or the viewport\". For a box that fits, that is the plain ratio;\n * for a box taller than the viewport it scales the threshold by the reachable\n * ratio, so `threshold={0.5}` on a 3-viewport section reveals once it fills\n * half the viewport instead of never.\n *\n * @param threshold - The requested threshold, in `[0, 1]`.\n * @param entry - The latest observation, or `null` before the first one.\n * @returns The threshold to observe with.\n */\nexport function effectiveThreshold(\n threshold: number,\n entry: IntersectionObserverEntry | null,\n): number {\n if (!entry) return threshold;\n return threshold * reachableRatio(entry);\n}\n"],"mappings":";AAOA,IAAaA,IAAgB;AAa7B,SAAgBC,EAAe,GAA0C;CACrE,IAAMC,IAAOC,EAAM,YACbC,IAAMD,EAAM;CAElB,OADI,CAACD,KAAQE,EAAI,SAAS,KAAKA,EAAI,UAAU,IAAU,IAChD,KAAK,IAAI,GAAGF,EAAK,SAASE,EAAI,MAAM,IAAI,KAAK,IAAI,GAAGF,EAAK,QAAQE,EAAI,KAAK;AACrF;AAeA,SAAgBC,EACZ,GACA,GACM;CAEN,OADKF,IACEG,IAAYL,EAAeE,CAAK,IADpBG;AAEvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SafeArea.cjs","names":[],"sources":["../../../src/components/SafeArea/SafeArea.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./SafeArea.module.css\";\n\nexport type SafeAreaEdge = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface SafeAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** Edges to pad. Default `[\"top\",\"right\",\"bottom\",\"left\"]` (all). */\n edges?: SafeAreaEdge[];\n /** Render as inline (use `display: contents`). */\n inline?: boolean;\n children?: ReactNode;\n}\n\nconst ALL_EDGES: SafeAreaEdge[] = [\"top\", \"right\", \"bottom\", \"left\"];\n\n/**\n * Apply `env(safe-area-inset-*)` padding so content avoids iOS notch /\n * Android navbar / device chrome. Wrap the outermost container of pages\n * with sticky headers/footers.\n *\n * @example\n * <SafeArea edges={[\"top\"]}>\n * <Navbar />\n * </SafeArea>\n */\nexport function SafeArea({\n edges = ALL_EDGES,\n inline = false,\n className,\n children,\n ...props\n}: SafeAreaProps) {\n return (\n <div\n className={cn(\n styles.safe,\n inline && styles.inline,\n edges.includes(\"top\") && styles.top,\n edges.includes(\"right\") && styles.right,\n edges.includes(\"bottom\") && styles.bottom,\n edges.includes(\"left\") && styles.left,\n className,\n )}\n data-edges={edges.join(\" \")}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"mappings":"4GAcA,IAAM,EAA4B,CAAC,MAAO,QAAS,SAAU,MAAM,EAYnE,SAAgB,EAAS,CACrB,QAAQ,EACR,SAAS,GACT,YACA,WACA,GAAG,GACW,CACd,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,UAAW,EAAA,GACP,EAAA,QAAO,KACP,GAAU,EAAA,QAAO,OACjB,EAAM,SAAS,KAAK,GAAK,EAAA,QAAO,IAChC,EAAM,SAAS,OAAO,GAAK,EAAA,QAAO,MAClC,EAAM,SAAS,QAAQ,GAAK,EAAA,QAAO,OACnC,EAAM,SAAS,MAAM,GAAK,EAAA,QAAO,KACjC,CACJ,EACA,aAAY,EAAM,KAAK,GAAG,EAC1B,GAAI,EAEH,UACA,CAAA,CAEb"}
1
+ {"version":3,"file":"SafeArea.cjs","names":["cn","styles","require_cn","require_SafeArea_module","react_jsx_runtime","ALL_EDGES","SafeArea","props","inline","edges","className"],"sources":["../../../src/components/SafeArea/SafeArea.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./SafeArea.module.css\";\n\nexport type SafeAreaEdge = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface SafeAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** Edges to pad. Default `[\"top\",\"right\",\"bottom\",\"left\"]` (all). */\n edges?: SafeAreaEdge[];\n /** Render as inline (use `display: contents`). */\n inline?: boolean;\n children?: ReactNode;\n}\n\nconst ALL_EDGES: SafeAreaEdge[] = [\"top\", \"right\", \"bottom\", \"left\"];\n\n/**\n * Apply `env(safe-area-inset-*)` padding so content avoids iOS notch /\n * Android navbar / device chrome. Wrap the outermost container of pages\n * with sticky headers/footers.\n *\n * @example\n * <SafeArea edges={[\"top\"]}>\n * <Navbar />\n * </SafeArea>\n */\nexport function SafeArea({\n edges = ALL_EDGES,\n inline = false,\n className,\n children,\n ...props\n}: SafeAreaProps) {\n return (\n <div\n className={cn(\n styles.safe,\n inline && styles.inline,\n edges.includes(\"top\") && styles.top,\n edges.includes(\"right\") && styles.right,\n edges.includes(\"bottom\") && styles.bottom,\n edges.includes(\"left\") && styles.left,\n className,\n )}\n data-edges={edges.join(\" \")}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"mappings":"A,4GAcA,IAAMK,EAA4B,CAAC,MAAO,QAAS,SAAU,MAAM,EAYnE,SAAgBC,EAAS,CACrB,QAAQD,EACR,SAAS,GACT,YACA,WACA,GAAGE,GACW,CACd,OACI,EAAAH,EAAA,IAAA,CAAC,MAAD,CACI,UAAWJ,EAAAA,GACPC,EAAAA,QAAO,KACPO,GAAUP,EAAAA,QAAO,OACjBQ,EAAM,SAAS,KAAK,GAAKR,EAAAA,QAAO,IAChCQ,EAAM,SAAS,OAAO,GAAKR,EAAAA,QAAO,MAClCQ,EAAM,SAAS,QAAQ,GAAKR,EAAAA,QAAO,OACnCQ,EAAM,SAAS,MAAM,GAAKR,EAAAA,QAAO,KACjCS,CACJ,EACA,aAAYD,EAAM,KAAK,GAAG,EAC1B,GAAIF,EAEH,UACA,CAAA,CAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"SafeArea.js","names":[],"sources":["../../../src/components/SafeArea/SafeArea.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./SafeArea.module.css\";\n\nexport type SafeAreaEdge = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface SafeAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** Edges to pad. Default `[\"top\",\"right\",\"bottom\",\"left\"]` (all). */\n edges?: SafeAreaEdge[];\n /** Render as inline (use `display: contents`). */\n inline?: boolean;\n children?: ReactNode;\n}\n\nconst ALL_EDGES: SafeAreaEdge[] = [\"top\", \"right\", \"bottom\", \"left\"];\n\n/**\n * Apply `env(safe-area-inset-*)` padding so content avoids iOS notch /\n * Android navbar / device chrome. Wrap the outermost container of pages\n * with sticky headers/footers.\n *\n * @example\n * <SafeArea edges={[\"top\"]}>\n * <Navbar />\n * </SafeArea>\n */\nexport function SafeArea({\n edges = ALL_EDGES,\n inline = false,\n className,\n children,\n ...props\n}: SafeAreaProps) {\n return (\n <div\n className={cn(\n styles.safe,\n inline && styles.inline,\n edges.includes(\"top\") && styles.top,\n edges.includes(\"right\") && styles.right,\n edges.includes(\"bottom\") && styles.bottom,\n edges.includes(\"left\") && styles.left,\n className,\n )}\n data-edges={edges.join(\" \")}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;AAcA,IAAM,IAA4B;CAAC;CAAO;CAAS;CAAU;AAAM;AAYnE,SAAgB,EAAS,EACrB,WAAQ,GACR,YAAS,IACT,cACA,aACA,GAAG,KACW;CACd,OACI,kBAAC,OAAD;EACI,WAAW,EACP,EAAO,MACP,KAAU,EAAO,QACjB,EAAM,SAAS,KAAK,KAAK,EAAO,KAChC,EAAM,SAAS,OAAO,KAAK,EAAO,OAClC,EAAM,SAAS,QAAQ,KAAK,EAAO,QACnC,EAAM,SAAS,MAAM,KAAK,EAAO,MACjC,CACJ;EACA,cAAY,EAAM,KAAK,GAAG;EAC1B,GAAI;EAEH;CACA,CAAA;AAEb"}
1
+ {"version":3,"file":"SafeArea.js","names":["styles","SafeArea_module_default","ALL_EDGES","SafeArea","props","cn","inline","edges","className"],"sources":["../../../src/components/SafeArea/SafeArea.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./SafeArea.module.css\";\n\nexport type SafeAreaEdge = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface SafeAreaProps extends HTMLAttributes<HTMLDivElement> {\n /** Edges to pad. Default `[\"top\",\"right\",\"bottom\",\"left\"]` (all). */\n edges?: SafeAreaEdge[];\n /** Render as inline (use `display: contents`). */\n inline?: boolean;\n children?: ReactNode;\n}\n\nconst ALL_EDGES: SafeAreaEdge[] = [\"top\", \"right\", \"bottom\", \"left\"];\n\n/**\n * Apply `env(safe-area-inset-*)` padding so content avoids iOS notch /\n * Android navbar / device chrome. Wrap the outermost container of pages\n * with sticky headers/footers.\n *\n * @example\n * <SafeArea edges={[\"top\"]}>\n * <Navbar />\n * </SafeArea>\n */\nexport function SafeArea({\n edges = ALL_EDGES,\n inline = false,\n className,\n children,\n ...props\n}: SafeAreaProps) {\n return (\n <div\n className={cn(\n styles.safe,\n inline && styles.inline,\n edges.includes(\"top\") && styles.top,\n edges.includes(\"right\") && styles.right,\n edges.includes(\"bottom\") && styles.bottom,\n edges.includes(\"left\") && styles.left,\n className,\n )}\n data-edges={edges.join(\" \")}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;AAcA,IAAME,IAA4B;CAAC;CAAO;CAAS;CAAU;AAAM;AAYnE,SAAgBC,EAAS,EACrB,WAAQD,GACR,YAAS,IACT,cACA,aACA,GAAGE,KACW;CACd,OACI,kBAAC,OAAD;EACI,WAAWC,EACPL,EAAO,MACPM,KAAUN,EAAO,QACjBO,EAAM,SAAS,KAAK,KAAKP,EAAO,KAChCO,EAAM,SAAS,OAAO,KAAKP,EAAO,OAClCO,EAAM,SAAS,QAAQ,KAAKP,EAAO,QACnCO,EAAM,SAAS,MAAM,KAAKP,EAAO,MACjCQ,CACJ;EACA,cAAYD,EAAM,KAAK,GAAG;EAC1B,GAAIH;EAEH;CACA,CAAA;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"SafeArea.module.cjs","names":[],"sources":["../../../src/components/SafeArea/SafeArea.module.css"],"sourcesContent":[".safe {\n display: block;\n}\n\n.safe.inline {\n display: contents;\n}\n\n.top {\n padding-top: env(safe-area-inset-top, 0px);\n}\n\n.right {\n padding-right: env(safe-area-inset-right, 0px);\n}\n\n.bottom {\n padding-bottom: env(safe-area-inset-bottom, 0px);\n}\n\n.left {\n padding-left: env(safe-area-inset-left, 0px);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"SafeArea.module.cjs","names":["safe","inline","top","right","bottom","left","SafeArea_module_default"],"sources":["../../../src/components/SafeArea/SafeArea.module.css"],"sourcesContent":[".safe {\n display: block;\n}\n\n.safe.inline {\n display: contents;\n}\n\n.top {\n padding-top: env(safe-area-inset-top, 0px);\n}\n\n.right {\n padding-right: env(safe-area-inset-right, 0px);\n}\n\n.bottom {\n padding-bottom: env(safe-area-inset-bottom, 0px);\n}\n\n.left {\n padding-left: env(safe-area-inset-left, 0px);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"SafeArea.module.js","names":[],"sources":["../../../src/components/SafeArea/SafeArea.module.css"],"sourcesContent":[".safe {\n display: block;\n}\n\n.safe.inline {\n display: contents;\n}\n\n.top {\n padding-top: env(safe-area-inset-top, 0px);\n}\n\n.right {\n padding-right: env(safe-area-inset-right, 0px);\n}\n\n.bottom {\n padding-bottom: env(safe-area-inset-bottom, 0px);\n}\n\n.left {\n padding-left: env(safe-area-inset-left, 0px);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"SafeArea.module.js","names":["safe","inline","top","right","bottom","left","SafeArea_module_default"],"sources":["../../../src/components/SafeArea/SafeArea.module.css"],"sourcesContent":[".safe {\n display: block;\n}\n\n.safe.inline {\n display: contents;\n}\n\n.top {\n padding-top: env(safe-area-inset-top, 0px);\n}\n\n.right {\n padding-right: env(safe-area-inset-right, 0px);\n}\n\n.bottom {\n padding-bottom: env(safe-area-inset-bottom, 0px);\n}\n\n.left {\n padding-left: env(safe-area-inset-left, 0px);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.cjs","names":[],"sources":["../../../src/components/Scheduler/Scheduler.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the grid is defined by\n * anchor, days, startHour, endHour and snapMinutes; the content by events,\n * renderEvent, onEventClick and onSlotClick; the reading by locale, showCurrentTime\n * and now. The body lays out overlapping events into columns, which needs the whole\n * day's events at once.\n */\nimport { type HTMLAttributes, type ReactNode, useEffect, useMemo, useState } from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nimport {\n dayRange,\n type DayWindow,\n fractionOfWindow,\n hourMarks,\n isSameDay,\n layoutAllDay,\n layoutEvents,\n type SchedulerEvent,\n} from \"./scheduler-layout\";\nimport styles from \"./Scheduler.module.css\";\nimport { dateTimeFormat } from \"@/utils/intl-cache\";\n\nexport interface SchedulerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Events to place. Instants are read in the browser's local time. */\n events: readonly SchedulerEvent[];\n /** Any day within the range to show. Default: today. */\n anchor?: Date;\n /** How many consecutive days to render. `1` is a day view, `7` a week. Default `7`. */\n days?: number;\n /** First visible hour, `0`–`23`. Default `8`. */\n startHour?: number;\n /** Last visible hour, `1`–`24`. Default `20`. */\n endHour?: number;\n /** Minutes a click on empty space snaps to. Default `30`. */\n snapMinutes?: number;\n /** Called when an event is activated by click, `Enter` or `Space`. */\n onEventClick?: (event: SchedulerEvent) => void;\n /** Called with the snapped instant when empty space is clicked. */\n onSlotClick?: (start: Date) => void;\n /** Render an event's contents. Defaults to its title and start time. */\n renderEvent?: (event: SchedulerEvent) => ReactNode;\n /** Locale for the day and hour labels. Default `\"pt-BR\"`. */\n locale?: string;\n /** Draw the current-time line. Default `true`. */\n showCurrentTime?: boolean;\n /** Fixed \"now\" for the indicator. Default: the real clock, ticking each minute. */\n now?: Date;\n}\n\n/** Minutes between ticks of the current-time indicator. */\nconst TICK_MS = 60_000;\n\n/**\n * An agenda: events placed on a time grid across consecutive days.\n *\n * `Calendar` is a date *picker* — it answers \"which day?\". This answers \"what is on\n * those days, and when\", which needs a different structure entirely: a vertical time\n * axis, events sized by duration, and overlapping events sitting side by side.\n *\n * That last part is the one worth naming. Overlapping events are grouped into\n * clusters of mutual overlap and every event in a cluster shares one column count,\n * so widths line up; a column is reused the moment it frees, so `9–10`, `9–10`,\n * `10–11` takes two columns and not three. The layout is pure and lives in\n * `scheduler-layout.ts`.\n *\n * Times are local. An event crossing midnight is split into both day columns, and\n * the day range is built by incrementing the calendar day, so a DST boundary does\n * not duplicate or skip a date.\n *\n * @example\n * <Scheduler\n * events={bookings}\n * days={7}\n * startHour={7}\n * endHour={21}\n * onEventClick={(e) => open(e.id)}\n * onSlotClick={(start) => createAt(start)}\n * />\n */\nexport function Scheduler({\n events,\n anchor,\n days: dayCount = 7,\n startHour = 8,\n endHour = 20,\n snapMinutes = 30,\n onEventClick,\n onSlotClick,\n renderEvent,\n locale = \"pt-BR\",\n showCurrentTime = true,\n now,\n className,\n ...rest\n}: SchedulerProps) {\n const [clock, setClock] = useState<Date>(() => now ?? new Date());\n\n /**\n * Keep the current-time line moving.\n *\n * Skipped entirely when `now` is supplied: that is the hook tests and demos use\n * to be deterministic, and a timer would fight it.\n */\n useEffect(() => {\n if (now || !showCurrentTime) return;\n const id = setInterval(() => setClock(new Date()), TICK_MS);\n return () => clearInterval(id);\n }, [now, showCurrentTime]);\n\n const reference = now ?? clock;\n\n const window = useMemo<DayWindow>(\n () => ({ startMinute: startHour * 60, endMinute: endHour * 60 }),\n [startHour, endHour],\n );\n\n /**\n * The calendar day the range starts from, as a stable string.\n *\n * `reference` ticks every minute when the current-time line is live. Depending on\n * the Date itself would re-slice the day range — and therefore relayout every\n * event — once a minute; depending on the day only recomputes at midnight.\n */\n const anchorDay = (anchor ?? reference).toDateString();\n const dayList = useMemo(() => dayRange(new Date(anchorDay), dayCount), [anchorDay, dayCount]);\n\n const placed = useMemo(\n () => layoutEvents({ events, days: dayList, window }),\n [events, dayList, window],\n );\n const allDay = useMemo(() => layoutAllDay({ events, days: dayList }), [events, dayList]);\n const marks = useMemo(() => hourMarks(window), [window]);\n\n const dayLabel = dateTimeFormat(locale, { weekday: \"short\", day: \"numeric\" });\n const timeLabel = dateTimeFormat(locale, { hour: \"2-digit\", minute: \"2-digit\" });\n\n /** Turn a click's vertical position within a day column into a snapped instant. */\n const slotFromClick = (day: Date, event: React.MouseEvent<HTMLDivElement>): Date => {\n const rect = event.currentTarget.getBoundingClientRect();\n const fraction = rect.height > 0 ? (event.clientY - rect.top) / rect.height : 0;\n const raw = window.startMinute + fraction * (window.endMinute - window.startMinute);\n const snapped = Math.round(raw / snapMinutes) * snapMinutes;\n const clamped = Math.max(window.startMinute, Math.min(window.endMinute, snapped));\n const result = new Date(day);\n result.setHours(0, clamped, 0, 0);\n return result;\n };\n\n const currentFraction = showCurrentTime ? fractionOfWindow(reference, window) : null;\n const todayIndex = dayList.findIndex((day) => isSameDay(day, reference));\n\n return (\n <div className={cn(styles.wrapper, className)} {...rest}>\n <div\n className={styles.head}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead} />\n {dayList.map((day, index) => (\n <span\n key={day.toISOString()}\n className={cn(styles.dayHead, index === todayIndex && styles.today)}\n >\n {dayLabel.format(day)}\n </span>\n ))}\n </div>\n\n {allDay.length > 0 && (\n <div\n className={styles.allDayLane}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead}>Dia inteiro</span>\n <div className={styles.allDayTrack}>\n {allDay.map(({ event, dayIndex, span }) => (\n <button\n key={event.id}\n type=\"button\"\n className={styles.allDayEvent}\n style={{ gridColumn: `${dayIndex + 1} / span ${span}` }}\n onClick={() => onEventClick?.(event)}\n disabled={!onEventClick}\n >\n {event.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/*\n * Focusable because it scrolls vertically: a scroll region that cannot be\n * focused is unreachable by keyboard, which is what `axe`'s\n * `scrollable-region-focusable` rule is about. It needs a name too, or the\n * new tab stop would announce nothing — but `group`, not `region`: a named\n * `region` is a landmark, and two schedulers on one page would then be two\n * identically-named landmarks (`landmark-unique`).\n */}\n <div\n className={styles.body}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n tabIndex={0}\n role=\"group\"\n aria-label=\"Grade de horários\"\n >\n <div className={styles.gutter}>\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLabel}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n >\n {timeLabel.format(\n new Date(2026, 0, 1, Math.floor(minute / 60), minute % 60),\n )}\n </span>\n ))}\n </div>\n\n {/*\n * Not `role=\"grid\"`: that requires `row` children, and the events are\n * siblings of the day columns inside one CSS grid — a `row` wrapper\n * would stop the columns being grid items and collapse the layout.\n * A labelled group per day is the honest structure anyway: a screen\n * reader tabs the event buttons and the group name supplies the day.\n */}\n <div className={styles.grid} aria-label=\"Agenda\">\n {dayList.map((day, index) => (\n <div\n key={day.toISOString()}\n className={cn(\n styles.dayColumn,\n index === todayIndex && styles.todayColumn,\n )}\n role=\"group\"\n aria-label={dayLabel.format(day)}\n onClick={\n onSlotClick\n ? (event) => {\n // Only empty space creates: a click that\n // landed on an event is that event's.\n if (event.target !== event.currentTarget) return;\n onSlotClick(slotFromClick(day, event));\n }\n : undefined\n }\n >\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLine}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n />\n ))}\n </div>\n ))}\n\n {placed.map((item) => (\n <button\n key={`${item.event.id}-${item.dayIndex}`}\n type=\"button\"\n className={styles.event}\n style={{\n gridColumn: `${item.dayIndex + 1} / span 1`,\n top: `${item.top * 100}%`,\n height: `${item.height * 100}%`,\n left: `${(item.column / item.columns) * 100}%`,\n width: `${(1 / item.columns) * 100}%`,\n }}\n onClick={() => onEventClick?.(item.event)}\n disabled={!onEventClick}\n title={`${item.event.title} — ${timeLabel.format(item.event.start)}`}\n >\n {renderEvent ? (\n renderEvent(item.event)\n ) : (\n <>\n <span className={styles.eventTime}>\n {timeLabel.format(item.event.start)}\n </span>\n <span className={styles.eventTitle}>{item.event.title}</span>\n </>\n )}\n </button>\n ))}\n\n {currentFraction !== null && todayIndex >= 0 && (\n <span\n className={styles.nowLine}\n style={{ top: `${currentFraction * 100}%` }}\n aria-hidden\n data-testid=\"scheduler-now\"\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport type { SchedulerEvent };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Scheduler.cjs","names":["useState","useMemo","dayRange","layoutEvents","layoutAllDay","hourMarks","dateTimeFormat","fractionOfWindow","isSameDay","cn","styles","_Fragment","require_cn","require_intl_cache","require_scheduler_layout","require_Scheduler_module","react","react_jsx_runtime","TICK_MS","Scheduler","dayCount","rest","clock","setClock","now","showCurrentTime","id","reference","window","startHour","endHour","anchorDay","anchor","dayList","placed","events","allDay","marks","dayLabel","locale","timeLabel","slotFromClick","rect","event","fraction","raw","snapped","snapMinutes","clamped","result","day","currentFraction","todayIndex","className","index","dayIndex","span","onEventClick","minute","onSlotClick","item","renderEvent"],"sources":["../../../src/components/Scheduler/Scheduler.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the grid is defined by\n * anchor, days, startHour, endHour and snapMinutes; the content by events,\n * renderEvent, onEventClick and onSlotClick; the reading by locale, showCurrentTime\n * and now. The body lays out overlapping events into columns, which needs the whole\n * day's events at once.\n */\nimport { type HTMLAttributes, type ReactNode, useEffect, useMemo, useState } from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nimport {\n dayRange,\n type DayWindow,\n fractionOfWindow,\n hourMarks,\n isSameDay,\n layoutAllDay,\n layoutEvents,\n type SchedulerEvent,\n} from \"./scheduler-layout\";\nimport styles from \"./Scheduler.module.css\";\nimport { dateTimeFormat } from \"@/utils/intl-cache\";\n\nexport interface SchedulerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Events to place. Instants are read in the browser's local time. */\n events: readonly SchedulerEvent[];\n /** Any day within the range to show. Default: today. */\n anchor?: Date;\n /** How many consecutive days to render. `1` is a day view, `7` a week. Default `7`. */\n days?: number;\n /** First visible hour, `0`–`23`. Default `8`. */\n startHour?: number;\n /** Last visible hour, `1`–`24`. Default `20`. */\n endHour?: number;\n /** Minutes a click on empty space snaps to. Default `30`. */\n snapMinutes?: number;\n /** Called when an event is activated by click, `Enter` or `Space`. */\n onEventClick?: (event: SchedulerEvent) => void;\n /** Called with the snapped instant when empty space is clicked. */\n onSlotClick?: (start: Date) => void;\n /** Render an event's contents. Defaults to its title and start time. */\n renderEvent?: (event: SchedulerEvent) => ReactNode;\n /** Locale for the day and hour labels. Default `\"pt-BR\"`. */\n locale?: string;\n /** Draw the current-time line. Default `true`. */\n showCurrentTime?: boolean;\n /** Fixed \"now\" for the indicator. Default: the real clock, ticking each minute. */\n now?: Date;\n}\n\n/** Minutes between ticks of the current-time indicator. */\nconst TICK_MS = 60_000;\n\n/**\n * An agenda: events placed on a time grid across consecutive days.\n *\n * `Calendar` is a date *picker* — it answers \"which day?\". This answers \"what is on\n * those days, and when\", which needs a different structure entirely: a vertical time\n * axis, events sized by duration, and overlapping events sitting side by side.\n *\n * That last part is the one worth naming. Overlapping events are grouped into\n * clusters of mutual overlap and every event in a cluster shares one column count,\n * so widths line up; a column is reused the moment it frees, so `9–10`, `9–10`,\n * `10–11` takes two columns and not three. The layout is pure and lives in\n * `scheduler-layout.ts`.\n *\n * Times are local. An event crossing midnight is split into both day columns, and\n * the day range is built by incrementing the calendar day, so a DST boundary does\n * not duplicate or skip a date.\n *\n * @example\n * <Scheduler\n * events={bookings}\n * days={7}\n * startHour={7}\n * endHour={21}\n * onEventClick={(e) => open(e.id)}\n * onSlotClick={(start) => createAt(start)}\n * />\n */\nexport function Scheduler({\n events,\n anchor,\n days: dayCount = 7,\n startHour = 8,\n endHour = 20,\n snapMinutes = 30,\n onEventClick,\n onSlotClick,\n renderEvent,\n locale = \"pt-BR\",\n showCurrentTime = true,\n now,\n className,\n ...rest\n}: SchedulerProps) {\n const [clock, setClock] = useState<Date>(() => now ?? new Date());\n\n /**\n * Keep the current-time line moving.\n *\n * Skipped entirely when `now` is supplied: that is the hook tests and demos use\n * to be deterministic, and a timer would fight it.\n */\n useEffect(() => {\n if (now || !showCurrentTime) return;\n const id = setInterval(() => setClock(new Date()), TICK_MS);\n return () => clearInterval(id);\n }, [now, showCurrentTime]);\n\n const reference = now ?? clock;\n\n const window = useMemo<DayWindow>(\n () => ({ startMinute: startHour * 60, endMinute: endHour * 60 }),\n [startHour, endHour],\n );\n\n /**\n * The calendar day the range starts from, as a stable string.\n *\n * `reference` ticks every minute when the current-time line is live. Depending on\n * the Date itself would re-slice the day range — and therefore relayout every\n * event — once a minute; depending on the day only recomputes at midnight.\n */\n const anchorDay = (anchor ?? reference).toDateString();\n const dayList = useMemo(() => dayRange(new Date(anchorDay), dayCount), [anchorDay, dayCount]);\n\n const placed = useMemo(\n () => layoutEvents({ events, days: dayList, window }),\n [events, dayList, window],\n );\n const allDay = useMemo(() => layoutAllDay({ events, days: dayList }), [events, dayList]);\n const marks = useMemo(() => hourMarks(window), [window]);\n\n const dayLabel = dateTimeFormat(locale, { weekday: \"short\", day: \"numeric\" });\n const timeLabel = dateTimeFormat(locale, { hour: \"2-digit\", minute: \"2-digit\" });\n\n /** Turn a click's vertical position within a day column into a snapped instant. */\n const slotFromClick = (day: Date, event: React.MouseEvent<HTMLDivElement>): Date => {\n const rect = event.currentTarget.getBoundingClientRect();\n const fraction = rect.height > 0 ? (event.clientY - rect.top) / rect.height : 0;\n const raw = window.startMinute + fraction * (window.endMinute - window.startMinute);\n const snapped = Math.round(raw / snapMinutes) * snapMinutes;\n const clamped = Math.max(window.startMinute, Math.min(window.endMinute, snapped));\n const result = new Date(day);\n result.setHours(0, clamped, 0, 0);\n return result;\n };\n\n const currentFraction = showCurrentTime ? fractionOfWindow(reference, window) : null;\n const todayIndex = dayList.findIndex((day) => isSameDay(day, reference));\n\n return (\n <div className={cn(styles.wrapper, className)} {...rest}>\n <div\n className={styles.head}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead} />\n {dayList.map((day, index) => (\n <span\n key={day.toISOString()}\n className={cn(styles.dayHead, index === todayIndex && styles.today)}\n >\n {dayLabel.format(day)}\n </span>\n ))}\n </div>\n\n {allDay.length > 0 && (\n <div\n className={styles.allDayLane}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead}>Dia inteiro</span>\n <div className={styles.allDayTrack}>\n {allDay.map(({ event, dayIndex, span }) => (\n <button\n key={event.id}\n type=\"button\"\n className={styles.allDayEvent}\n style={{ gridColumn: `${dayIndex + 1} / span ${span}` }}\n onClick={() => onEventClick?.(event)}\n disabled={!onEventClick}\n >\n {event.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/*\n * Focusable because it scrolls vertically: a scroll region that cannot be\n * focused is unreachable by keyboard, which is what `axe`'s\n * `scrollable-region-focusable` rule is about. It needs a name too, or the\n * new tab stop would announce nothing — but `group`, not `region`: a named\n * `region` is a landmark, and two schedulers on one page would then be two\n * identically-named landmarks (`landmark-unique`).\n */}\n <div\n className={styles.body}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n tabIndex={0}\n role=\"group\"\n aria-label=\"Grade de horários\"\n >\n <div className={styles.gutter}>\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLabel}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n >\n {timeLabel.format(\n new Date(2026, 0, 1, Math.floor(minute / 60), minute % 60),\n )}\n </span>\n ))}\n </div>\n\n {/*\n * Not `role=\"grid\"`: that requires `row` children, and the events are\n * siblings of the day columns inside one CSS grid — a `row` wrapper\n * would stop the columns being grid items and collapse the layout.\n * A labelled group per day is the honest structure anyway: a screen\n * reader tabs the event buttons and the group name supplies the day.\n */}\n <div className={styles.grid} aria-label=\"Agenda\">\n {dayList.map((day, index) => (\n <div\n key={day.toISOString()}\n className={cn(\n styles.dayColumn,\n index === todayIndex && styles.todayColumn,\n )}\n role=\"group\"\n aria-label={dayLabel.format(day)}\n onClick={\n onSlotClick\n ? (event) => {\n // Only empty space creates: a click that\n // landed on an event is that event's.\n if (event.target !== event.currentTarget) return;\n onSlotClick(slotFromClick(day, event));\n }\n : undefined\n }\n >\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLine}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n />\n ))}\n </div>\n ))}\n\n {placed.map((item) => (\n <button\n key={`${item.event.id}-${item.dayIndex}`}\n type=\"button\"\n className={styles.event}\n style={{\n gridColumn: `${item.dayIndex + 1} / span 1`,\n top: `${item.top * 100}%`,\n height: `${item.height * 100}%`,\n left: `${(item.column / item.columns) * 100}%`,\n width: `${(1 / item.columns) * 100}%`,\n }}\n onClick={() => onEventClick?.(item.event)}\n disabled={!onEventClick}\n title={`${item.event.title} — ${timeLabel.format(item.event.start)}`}\n >\n {renderEvent ? (\n renderEvent(item.event)\n ) : (\n <>\n <span className={styles.eventTime}>\n {timeLabel.format(item.event.start)}\n </span>\n <span className={styles.eventTitle}>{item.event.title}</span>\n </>\n )}\n </button>\n ))}\n\n {currentFraction !== null && todayIndex >= 0 && (\n <span\n className={styles.nowLine}\n style={{ top: `${currentFraction * 100}%` }}\n aria-hidden\n data-testid=\"scheduler-now\"\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport type { SchedulerEvent };\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.js","names":[],"sources":["../../../src/components/Scheduler/Scheduler.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the grid is defined by\n * anchor, days, startHour, endHour and snapMinutes; the content by events,\n * renderEvent, onEventClick and onSlotClick; the reading by locale, showCurrentTime\n * and now. The body lays out overlapping events into columns, which needs the whole\n * day's events at once.\n */\nimport { type HTMLAttributes, type ReactNode, useEffect, useMemo, useState } from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nimport {\n dayRange,\n type DayWindow,\n fractionOfWindow,\n hourMarks,\n isSameDay,\n layoutAllDay,\n layoutEvents,\n type SchedulerEvent,\n} from \"./scheduler-layout\";\nimport styles from \"./Scheduler.module.css\";\nimport { dateTimeFormat } from \"@/utils/intl-cache\";\n\nexport interface SchedulerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Events to place. Instants are read in the browser's local time. */\n events: readonly SchedulerEvent[];\n /** Any day within the range to show. Default: today. */\n anchor?: Date;\n /** How many consecutive days to render. `1` is a day view, `7` a week. Default `7`. */\n days?: number;\n /** First visible hour, `0`–`23`. Default `8`. */\n startHour?: number;\n /** Last visible hour, `1`–`24`. Default `20`. */\n endHour?: number;\n /** Minutes a click on empty space snaps to. Default `30`. */\n snapMinutes?: number;\n /** Called when an event is activated by click, `Enter` or `Space`. */\n onEventClick?: (event: SchedulerEvent) => void;\n /** Called with the snapped instant when empty space is clicked. */\n onSlotClick?: (start: Date) => void;\n /** Render an event's contents. Defaults to its title and start time. */\n renderEvent?: (event: SchedulerEvent) => ReactNode;\n /** Locale for the day and hour labels. Default `\"pt-BR\"`. */\n locale?: string;\n /** Draw the current-time line. Default `true`. */\n showCurrentTime?: boolean;\n /** Fixed \"now\" for the indicator. Default: the real clock, ticking each minute. */\n now?: Date;\n}\n\n/** Minutes between ticks of the current-time indicator. */\nconst TICK_MS = 60_000;\n\n/**\n * An agenda: events placed on a time grid across consecutive days.\n *\n * `Calendar` is a date *picker* — it answers \"which day?\". This answers \"what is on\n * those days, and when\", which needs a different structure entirely: a vertical time\n * axis, events sized by duration, and overlapping events sitting side by side.\n *\n * That last part is the one worth naming. Overlapping events are grouped into\n * clusters of mutual overlap and every event in a cluster shares one column count,\n * so widths line up; a column is reused the moment it frees, so `9–10`, `9–10`,\n * `10–11` takes two columns and not three. The layout is pure and lives in\n * `scheduler-layout.ts`.\n *\n * Times are local. An event crossing midnight is split into both day columns, and\n * the day range is built by incrementing the calendar day, so a DST boundary does\n * not duplicate or skip a date.\n *\n * @example\n * <Scheduler\n * events={bookings}\n * days={7}\n * startHour={7}\n * endHour={21}\n * onEventClick={(e) => open(e.id)}\n * onSlotClick={(start) => createAt(start)}\n * />\n */\nexport function Scheduler({\n events,\n anchor,\n days: dayCount = 7,\n startHour = 8,\n endHour = 20,\n snapMinutes = 30,\n onEventClick,\n onSlotClick,\n renderEvent,\n locale = \"pt-BR\",\n showCurrentTime = true,\n now,\n className,\n ...rest\n}: SchedulerProps) {\n const [clock, setClock] = useState<Date>(() => now ?? new Date());\n\n /**\n * Keep the current-time line moving.\n *\n * Skipped entirely when `now` is supplied: that is the hook tests and demos use\n * to be deterministic, and a timer would fight it.\n */\n useEffect(() => {\n if (now || !showCurrentTime) return;\n const id = setInterval(() => setClock(new Date()), TICK_MS);\n return () => clearInterval(id);\n }, [now, showCurrentTime]);\n\n const reference = now ?? clock;\n\n const window = useMemo<DayWindow>(\n () => ({ startMinute: startHour * 60, endMinute: endHour * 60 }),\n [startHour, endHour],\n );\n\n /**\n * The calendar day the range starts from, as a stable string.\n *\n * `reference` ticks every minute when the current-time line is live. Depending on\n * the Date itself would re-slice the day range — and therefore relayout every\n * event — once a minute; depending on the day only recomputes at midnight.\n */\n const anchorDay = (anchor ?? reference).toDateString();\n const dayList = useMemo(() => dayRange(new Date(anchorDay), dayCount), [anchorDay, dayCount]);\n\n const placed = useMemo(\n () => layoutEvents({ events, days: dayList, window }),\n [events, dayList, window],\n );\n const allDay = useMemo(() => layoutAllDay({ events, days: dayList }), [events, dayList]);\n const marks = useMemo(() => hourMarks(window), [window]);\n\n const dayLabel = dateTimeFormat(locale, { weekday: \"short\", day: \"numeric\" });\n const timeLabel = dateTimeFormat(locale, { hour: \"2-digit\", minute: \"2-digit\" });\n\n /** Turn a click's vertical position within a day column into a snapped instant. */\n const slotFromClick = (day: Date, event: React.MouseEvent<HTMLDivElement>): Date => {\n const rect = event.currentTarget.getBoundingClientRect();\n const fraction = rect.height > 0 ? (event.clientY - rect.top) / rect.height : 0;\n const raw = window.startMinute + fraction * (window.endMinute - window.startMinute);\n const snapped = Math.round(raw / snapMinutes) * snapMinutes;\n const clamped = Math.max(window.startMinute, Math.min(window.endMinute, snapped));\n const result = new Date(day);\n result.setHours(0, clamped, 0, 0);\n return result;\n };\n\n const currentFraction = showCurrentTime ? fractionOfWindow(reference, window) : null;\n const todayIndex = dayList.findIndex((day) => isSameDay(day, reference));\n\n return (\n <div className={cn(styles.wrapper, className)} {...rest}>\n <div\n className={styles.head}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead} />\n {dayList.map((day, index) => (\n <span\n key={day.toISOString()}\n className={cn(styles.dayHead, index === todayIndex && styles.today)}\n >\n {dayLabel.format(day)}\n </span>\n ))}\n </div>\n\n {allDay.length > 0 && (\n <div\n className={styles.allDayLane}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead}>Dia inteiro</span>\n <div className={styles.allDayTrack}>\n {allDay.map(({ event, dayIndex, span }) => (\n <button\n key={event.id}\n type=\"button\"\n className={styles.allDayEvent}\n style={{ gridColumn: `${dayIndex + 1} / span ${span}` }}\n onClick={() => onEventClick?.(event)}\n disabled={!onEventClick}\n >\n {event.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/*\n * Focusable because it scrolls vertically: a scroll region that cannot be\n * focused is unreachable by keyboard, which is what `axe`'s\n * `scrollable-region-focusable` rule is about. It needs a name too, or the\n * new tab stop would announce nothing — but `group`, not `region`: a named\n * `region` is a landmark, and two schedulers on one page would then be two\n * identically-named landmarks (`landmark-unique`).\n */}\n <div\n className={styles.body}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n tabIndex={0}\n role=\"group\"\n aria-label=\"Grade de horários\"\n >\n <div className={styles.gutter}>\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLabel}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n >\n {timeLabel.format(\n new Date(2026, 0, 1, Math.floor(minute / 60), minute % 60),\n )}\n </span>\n ))}\n </div>\n\n {/*\n * Not `role=\"grid\"`: that requires `row` children, and the events are\n * siblings of the day columns inside one CSS grid — a `row` wrapper\n * would stop the columns being grid items and collapse the layout.\n * A labelled group per day is the honest structure anyway: a screen\n * reader tabs the event buttons and the group name supplies the day.\n */}\n <div className={styles.grid} aria-label=\"Agenda\">\n {dayList.map((day, index) => (\n <div\n key={day.toISOString()}\n className={cn(\n styles.dayColumn,\n index === todayIndex && styles.todayColumn,\n )}\n role=\"group\"\n aria-label={dayLabel.format(day)}\n onClick={\n onSlotClick\n ? (event) => {\n // Only empty space creates: a click that\n // landed on an event is that event's.\n if (event.target !== event.currentTarget) return;\n onSlotClick(slotFromClick(day, event));\n }\n : undefined\n }\n >\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLine}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n />\n ))}\n </div>\n ))}\n\n {placed.map((item) => (\n <button\n key={`${item.event.id}-${item.dayIndex}`}\n type=\"button\"\n className={styles.event}\n style={{\n gridColumn: `${item.dayIndex + 1} / span 1`,\n top: `${item.top * 100}%`,\n height: `${item.height * 100}%`,\n left: `${(item.column / item.columns) * 100}%`,\n width: `${(1 / item.columns) * 100}%`,\n }}\n onClick={() => onEventClick?.(item.event)}\n disabled={!onEventClick}\n title={`${item.event.title} — ${timeLabel.format(item.event.start)}`}\n >\n {renderEvent ? (\n renderEvent(item.event)\n ) : (\n <>\n <span className={styles.eventTime}>\n {timeLabel.format(item.event.start)}\n </span>\n <span className={styles.eventTitle}>{item.event.title}</span>\n </>\n )}\n </button>\n ))}\n\n {currentFraction !== null && todayIndex >= 0 && (\n <span\n className={styles.nowLine}\n style={{ top: `${currentFraction * 100}%` }}\n aria-hidden\n data-testid=\"scheduler-now\"\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport type { SchedulerEvent };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Scheduler.js","names":["styles","_Fragment","Scheduler_module_default","Fragment$1","TICK_MS","Scheduler","dayCount","rest","clock","setClock","useState","now","showCurrentTime","id","reference","window","useMemo","startHour","endHour","anchorDay","anchor","dayList","dayRange","placed","layoutEvents","events","allDay","layoutAllDay","marks","hourMarks","dayLabel","dateTimeFormat","locale","timeLabel","slotFromClick","rect","event","fraction","raw","snapped","snapMinutes","clamped","result","day","currentFraction","fractionOfWindow","todayIndex","isSameDay","cn","className","index","dayIndex","span","onEventClick","minute","onSlotClick","item","renderEvent"],"sources":["../../../src/components/Scheduler/Scheduler.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — the grid is defined by\n * anchor, days, startHour, endHour and snapMinutes; the content by events,\n * renderEvent, onEventClick and onSlotClick; the reading by locale, showCurrentTime\n * and now. The body lays out overlapping events into columns, which needs the whole\n * day's events at once.\n */\nimport { type HTMLAttributes, type ReactNode, useEffect, useMemo, useState } from \"react\";\n\nimport { cn } from \"@/utils/cn\";\n\nimport {\n dayRange,\n type DayWindow,\n fractionOfWindow,\n hourMarks,\n isSameDay,\n layoutAllDay,\n layoutEvents,\n type SchedulerEvent,\n} from \"./scheduler-layout\";\nimport styles from \"./Scheduler.module.css\";\nimport { dateTimeFormat } from \"@/utils/intl-cache\";\n\nexport interface SchedulerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /** Events to place. Instants are read in the browser's local time. */\n events: readonly SchedulerEvent[];\n /** Any day within the range to show. Default: today. */\n anchor?: Date;\n /** How many consecutive days to render. `1` is a day view, `7` a week. Default `7`. */\n days?: number;\n /** First visible hour, `0`–`23`. Default `8`. */\n startHour?: number;\n /** Last visible hour, `1`–`24`. Default `20`. */\n endHour?: number;\n /** Minutes a click on empty space snaps to. Default `30`. */\n snapMinutes?: number;\n /** Called when an event is activated by click, `Enter` or `Space`. */\n onEventClick?: (event: SchedulerEvent) => void;\n /** Called with the snapped instant when empty space is clicked. */\n onSlotClick?: (start: Date) => void;\n /** Render an event's contents. Defaults to its title and start time. */\n renderEvent?: (event: SchedulerEvent) => ReactNode;\n /** Locale for the day and hour labels. Default `\"pt-BR\"`. */\n locale?: string;\n /** Draw the current-time line. Default `true`. */\n showCurrentTime?: boolean;\n /** Fixed \"now\" for the indicator. Default: the real clock, ticking each minute. */\n now?: Date;\n}\n\n/** Minutes between ticks of the current-time indicator. */\nconst TICK_MS = 60_000;\n\n/**\n * An agenda: events placed on a time grid across consecutive days.\n *\n * `Calendar` is a date *picker* — it answers \"which day?\". This answers \"what is on\n * those days, and when\", which needs a different structure entirely: a vertical time\n * axis, events sized by duration, and overlapping events sitting side by side.\n *\n * That last part is the one worth naming. Overlapping events are grouped into\n * clusters of mutual overlap and every event in a cluster shares one column count,\n * so widths line up; a column is reused the moment it frees, so `9–10`, `9–10`,\n * `10–11` takes two columns and not three. The layout is pure and lives in\n * `scheduler-layout.ts`.\n *\n * Times are local. An event crossing midnight is split into both day columns, and\n * the day range is built by incrementing the calendar day, so a DST boundary does\n * not duplicate or skip a date.\n *\n * @example\n * <Scheduler\n * events={bookings}\n * days={7}\n * startHour={7}\n * endHour={21}\n * onEventClick={(e) => open(e.id)}\n * onSlotClick={(start) => createAt(start)}\n * />\n */\nexport function Scheduler({\n events,\n anchor,\n days: dayCount = 7,\n startHour = 8,\n endHour = 20,\n snapMinutes = 30,\n onEventClick,\n onSlotClick,\n renderEvent,\n locale = \"pt-BR\",\n showCurrentTime = true,\n now,\n className,\n ...rest\n}: SchedulerProps) {\n const [clock, setClock] = useState<Date>(() => now ?? new Date());\n\n /**\n * Keep the current-time line moving.\n *\n * Skipped entirely when `now` is supplied: that is the hook tests and demos use\n * to be deterministic, and a timer would fight it.\n */\n useEffect(() => {\n if (now || !showCurrentTime) return;\n const id = setInterval(() => setClock(new Date()), TICK_MS);\n return () => clearInterval(id);\n }, [now, showCurrentTime]);\n\n const reference = now ?? clock;\n\n const window = useMemo<DayWindow>(\n () => ({ startMinute: startHour * 60, endMinute: endHour * 60 }),\n [startHour, endHour],\n );\n\n /**\n * The calendar day the range starts from, as a stable string.\n *\n * `reference` ticks every minute when the current-time line is live. Depending on\n * the Date itself would re-slice the day range — and therefore relayout every\n * event — once a minute; depending on the day only recomputes at midnight.\n */\n const anchorDay = (anchor ?? reference).toDateString();\n const dayList = useMemo(() => dayRange(new Date(anchorDay), dayCount), [anchorDay, dayCount]);\n\n const placed = useMemo(\n () => layoutEvents({ events, days: dayList, window }),\n [events, dayList, window],\n );\n const allDay = useMemo(() => layoutAllDay({ events, days: dayList }), [events, dayList]);\n const marks = useMemo(() => hourMarks(window), [window]);\n\n const dayLabel = dateTimeFormat(locale, { weekday: \"short\", day: \"numeric\" });\n const timeLabel = dateTimeFormat(locale, { hour: \"2-digit\", minute: \"2-digit\" });\n\n /** Turn a click's vertical position within a day column into a snapped instant. */\n const slotFromClick = (day: Date, event: React.MouseEvent<HTMLDivElement>): Date => {\n const rect = event.currentTarget.getBoundingClientRect();\n const fraction = rect.height > 0 ? (event.clientY - rect.top) / rect.height : 0;\n const raw = window.startMinute + fraction * (window.endMinute - window.startMinute);\n const snapped = Math.round(raw / snapMinutes) * snapMinutes;\n const clamped = Math.max(window.startMinute, Math.min(window.endMinute, snapped));\n const result = new Date(day);\n result.setHours(0, clamped, 0, 0);\n return result;\n };\n\n const currentFraction = showCurrentTime ? fractionOfWindow(reference, window) : null;\n const todayIndex = dayList.findIndex((day) => isSameDay(day, reference));\n\n return (\n <div className={cn(styles.wrapper, className)} {...rest}>\n <div\n className={styles.head}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead} />\n {dayList.map((day, index) => (\n <span\n key={day.toISOString()}\n className={cn(styles.dayHead, index === todayIndex && styles.today)}\n >\n {dayLabel.format(day)}\n </span>\n ))}\n </div>\n\n {allDay.length > 0 && (\n <div\n className={styles.allDayLane}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n >\n <span className={styles.gutterHead}>Dia inteiro</span>\n <div className={styles.allDayTrack}>\n {allDay.map(({ event, dayIndex, span }) => (\n <button\n key={event.id}\n type=\"button\"\n className={styles.allDayEvent}\n style={{ gridColumn: `${dayIndex + 1} / span ${span}` }}\n onClick={() => onEventClick?.(event)}\n disabled={!onEventClick}\n >\n {event.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/*\n * Focusable because it scrolls vertically: a scroll region that cannot be\n * focused is unreachable by keyboard, which is what `axe`'s\n * `scrollable-region-focusable` rule is about. It needs a name too, or the\n * new tab stop would announce nothing — but `group`, not `region`: a named\n * `region` is a landmark, and two schedulers on one page would then be two\n * identically-named landmarks (`landmark-unique`).\n */}\n <div\n className={styles.body}\n style={{ [\"--tempest-scheduler-days\" as string]: dayCount }}\n tabIndex={0}\n role=\"group\"\n aria-label=\"Grade de horários\"\n >\n <div className={styles.gutter}>\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLabel}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n >\n {timeLabel.format(\n new Date(2026, 0, 1, Math.floor(minute / 60), minute % 60),\n )}\n </span>\n ))}\n </div>\n\n {/*\n * Not `role=\"grid\"`: that requires `row` children, and the events are\n * siblings of the day columns inside one CSS grid — a `row` wrapper\n * would stop the columns being grid items and collapse the layout.\n * A labelled group per day is the honest structure anyway: a screen\n * reader tabs the event buttons and the group name supplies the day.\n */}\n <div className={styles.grid} aria-label=\"Agenda\">\n {dayList.map((day, index) => (\n <div\n key={day.toISOString()}\n className={cn(\n styles.dayColumn,\n index === todayIndex && styles.todayColumn,\n )}\n role=\"group\"\n aria-label={dayLabel.format(day)}\n onClick={\n onSlotClick\n ? (event) => {\n // Only empty space creates: a click that\n // landed on an event is that event's.\n if (event.target !== event.currentTarget) return;\n onSlotClick(slotFromClick(day, event));\n }\n : undefined\n }\n >\n {marks.map((minute) => (\n <span\n key={minute}\n className={styles.hourLine}\n style={{\n top: `${((minute - window.startMinute) / (window.endMinute - window.startMinute)) * 100}%`,\n }}\n />\n ))}\n </div>\n ))}\n\n {placed.map((item) => (\n <button\n key={`${item.event.id}-${item.dayIndex}`}\n type=\"button\"\n className={styles.event}\n style={{\n gridColumn: `${item.dayIndex + 1} / span 1`,\n top: `${item.top * 100}%`,\n height: `${item.height * 100}%`,\n left: `${(item.column / item.columns) * 100}%`,\n width: `${(1 / item.columns) * 100}%`,\n }}\n onClick={() => onEventClick?.(item.event)}\n disabled={!onEventClick}\n title={`${item.event.title} — ${timeLabel.format(item.event.start)}`}\n >\n {renderEvent ? (\n renderEvent(item.event)\n ) : (\n <>\n <span className={styles.eventTime}>\n {timeLabel.format(item.event.start)}\n </span>\n <span className={styles.eventTitle}>{item.event.title}</span>\n </>\n )}\n </button>\n ))}\n\n {currentFraction !== null && todayIndex >= 0 && (\n <span\n className={styles.nowLine}\n style={{ top: `${currentFraction * 100}%` }}\n aria-hidden\n data-testid=\"scheduler-now\"\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport type { SchedulerEvent };\n"],"mappings":";;;;;;;AAoDA,IAAMI,IAAU;AA6BhB,SAAgBC,EAAU,EACtB,WACA,WACA,MAAMC,IAAW,GACjB,eAAY,GACZ,aAAU,IACV,iBAAc,IACd,iBACA,gBACA,gBACA,YAAS,SACT,qBAAkB,IAClB,QACA,cACA,GAAGC,KACY;CACf,IAAM,CAACC,GAAOC,KAAYC,QAAqBC,qBAAO,IAAI,KAAK,CAAC;CAQhE,QAAgB;EACZ,IAAIA,KAAO,CAACC,GAAiB;EAC7B,IAAMC,IAAK,kBAAkBJ,kBAAS,IAAI,KAAK,CAAC,GAAGL,CAAO;EAC1D,aAAa,cAAcS,CAAE;CACjC,GAAG,CAACF,GAAKC,CAAe,CAAC;CAEzB,IAAME,IAAYH,KAAOH,GAEnBO,IAASC,SACJ;EAAE,aAAaC,IAAY;EAAI,WAAWC,IAAU;CAAG,IAC9D,CAACD,GAAWC,CAAO,CACvB,GASMC,KAAaC,KAAUN,EAAA,CAAW,aAAa,GAC/CO,IAAUL,QAAcM,EAAS,IAAI,KAAKH,CAAS,GAAGb,CAAQ,GAAG,CAACa,GAAWb,CAAQ,CAAC,GAEtFiB,IAASP,QACLQ,EAAa;EAAE;EAAQ,MAAMH;EAAS;CAAO,CAAC,GACpD;EAACI;EAAQJ;EAASN;CAAM,CAC5B,GACMW,IAASV,QAAcW,EAAa;EAAE;EAAQ,MAAMN;CAAQ,CAAC,GAAG,CAACI,GAAQJ,CAAO,CAAC,GACjFO,IAAQZ,QAAca,EAAUd,CAAM,GAAG,CAACA,CAAM,CAAC,GAEjDe,IAAWC,EAAeC,GAAQ;EAAE,SAAS;EAAS,KAAK;CAAU,CAAC,GACtEC,IAAYF,EAAeC,GAAQ;EAAE,MAAM;EAAW,QAAQ;CAAU,CAAC,GAGzEE,KAAiB,GAAW,MAAkD;EAChF,IAAMC,IAAOC,EAAM,cAAc,sBAAsB,GACjDC,IAAWF,EAAK,SAAS,KAAKC,EAAM,UAAUD,EAAK,OAAOA,EAAK,SAAS,GACxEG,IAAMvB,EAAO,cAAcsB,KAAYtB,EAAO,YAAYA,EAAO,cACjEwB,IAAU,KAAK,MAAMD,IAAME,CAAW,IAAIA,GAC1CC,IAAU,KAAK,IAAI1B,EAAO,aAAa,KAAK,IAAIA,EAAO,WAAWwB,CAAO,CAAC,GAC1EG,IAAS,IAAI,KAAKC,CAAG;EAE3B,OADAD,EAAO,SAAS,GAAGD,GAAS,GAAG,CAAC,GACzBC;CACX,GAEME,IAAkBhC,IAAkBiC,EAAiB/B,GAAWC,CAAM,IAAI,MAC1E+B,IAAazB,EAAQ,WAAW,MAAQ0B,EAAUJ,GAAK7B,CAAS,CAAC;CAEvE,OACI,kBAAC,OAAD;EAAK,WAAWkC,EAAGhD,EAAO,SAASiD,CAAS;EAAG,GAAI1C;EAAnD,UAAA;GACI,kBAAC,OAAD;IACI,WAAWP,EAAO;IAClB,OAAO,EAAG,4BAAuCM,EAAS;IAF9D,UAAA,CAII,kBAAC,QAAD,EAAM,WAAWN,EAAO,WAAa,CAAA,GACpCqB,EAAQ,KAAK,GAAK,MACf,kBAAC,QAAD;KAEI,WAAW2B,EAAGhD,EAAO,SAASkD,MAAUJ,KAAc9C,EAAO,KAAK;KAEjE,UAAA8B,EAAS,OAAOa,CAAG;IAClB,GAJGA,EAAI,YAAY,CAInB,CACT,CACA;;GAEJjB,EAAO,SAAS,KACb,kBAAC,OAAD;IACI,WAAW1B,EAAO;IAClB,OAAO,EAAG,4BAAuCM,EAAS;IAF9D,UAAA,CAII,kBAAC,QAAD;KAAM,WAAWN,EAAO;KAAY,UAAA;IAAiB,CAAA,GACrD,kBAAC,OAAD;KAAK,WAAWA,EAAO;KAClB,UAAA0B,EAAO,KAAK,EAAE,UAAO,aAAU,cAC5B,kBAAC,UAAD;MAEI,MAAK;MACL,WAAW1B,EAAO;MAClB,OAAO,EAAE,YAAY,GAAGmD,IAAW,EAAE,UAAUC,IAAO;MACtD,eAAeC,IAAejB,CAAK;MACnC,UAAU,CAACiB;MAEV,UAAAjB,EAAM;KACH,GARCA,EAAM,EAQP,CACX;IACA,CAAA,CACJ;;GAWT,kBAAC,OAAD;IACI,WAAWpC,EAAO;IAClB,OAAO,EAAG,4BAAuCM,EAAS;IAC1D,UAAU;IACV,MAAK;IACL,cAAW;IALf,UAAA,CAOI,kBAAC,OAAD;KAAK,WAAWN,EAAO;KAClB,UAAA4B,EAAM,KAAK,MACR,kBAAC,QAAD;MAEI,WAAW5B,EAAO;MAClB,OAAO,EACH,KAAK,IAAKsD,IAASvC,EAAO,gBAAgBA,EAAO,YAAYA,EAAO,eAAgB,IAAI,GAC5F;MAEC,UAAAkB,EAAU,OACP,IAAI,KAAK,MAAM,GAAG,GAAG,KAAK,MAAMqB,IAAS,EAAE,GAAGA,IAAS,EAAE,CAC7D;KACE,GATGA,CASH,CACT;IACA,CAAA,GASL,kBAAC,OAAD;KAAK,WAAWtD,EAAO;KAAM,cAAW;KAAxC,UAAA;MACKqB,EAAQ,KAAK,GAAK,MACf,kBAAC,OAAD;OAEI,WAAW2B,EACPhD,EAAO,WACPkD,MAAUJ,KAAc9C,EAAO,WACnC;OACA,MAAK;OACL,cAAY8B,EAAS,OAAOa,CAAG;OAC/B,SACIY,KACO,MAAU;QAGP,AAAInB,EAAM,WAAWA,EAAM,iBAC3BmB,EAAYrB,EAAcS,GAAKP,CAAK,CAAC;OACzC,IACA,KAAA;OAGT,UAAAR,EAAM,KAAK,MACR,kBAAC,QAAD;QAEI,WAAW5B,EAAO;QAClB,OAAO,EACH,KAAK,IAAKsD,IAASvC,EAAO,gBAAgBA,EAAO,YAAYA,EAAO,eAAgB,IAAI,GAC5F;OACH,GALQuC,CAKR,CACJ;MACA,GA3BIX,EAAI,YAAY,CA2BpB,CACR;MAEApB,EAAO,KAAK,MACT,kBAAC,UAAD;OAEI,MAAK;OACL,WAAWvB,EAAO;OAClB,OAAO;QACH,YAAY,GAAGwD,EAAK,WAAW,EAAE;QACjC,KAAK,GAAGA,EAAK,MAAM,IAAI;QACvB,QAAQ,GAAGA,EAAK,SAAS,IAAI;QAC7B,MAAM,GAAIA,EAAK,SAASA,EAAK,UAAW,IAAI;QAC5C,OAAO,GAAI,IAAIA,EAAK,UAAW,IAAI;OACvC;OACA,eAAeH,IAAeG,EAAK,KAAK;OACxC,UAAU,CAACH;OACX,OAAO,GAAGG,EAAK,MAAM,MAAM,KAAKvB,EAAU,OAAOuB,EAAK,MAAM,KAAK;OAEhE,UAAAC,IACGA,EAAYD,EAAK,KAAK,IAEtB,kBAAAvD,GAAA,EAAA,UAAA,CACI,kBAAC,QAAD;QAAM,WAAWD,EAAO;QACnB,UAAAiC,EAAU,OAAOuB,EAAK,MAAM,KAAK;OAChC,CAAA,GACN,kBAAC,QAAD;QAAM,WAAWxD,EAAO;QAAa,UAAAwD,EAAK,MAAM;OAAY,CAAA,CAC9D,EAAA,CAAA;MAEF,GAxBC,GAAGA,EAAK,MAAM,GAAG,GAAGA,EAAK,UAwB1B,CACX;MAEAZ,MAAoB,QAAQE,KAAc,KACvC,kBAAC,QAAD;OACI,WAAW9C,EAAO;OAClB,OAAO,EAAE,KAAK,GAAG4C,IAAkB,IAAI,GAAG;OAC1C,eAAA;OACA,eAAY;MACf,CAAA;KAEJ;IACJ,CAAA,CAAA;;EACJ;;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.module.cjs","names":[],"sources":["../../../src/components/Scheduler/Scheduler.module.css"],"sourcesContent":[".wrapper {\n /*\n * Column widths are declared once here and reused by the header, the all-day\n * lane and the grid — three separate grids that have to line up exactly, and\n * would drift the moment any of them computed its own tracks.\n */\n --tempest-scheduler-gutter: 3.5rem;\n --tempest-scheduler-height: 32rem;\n\n display: flex;\n flex-direction: column;\n width: 100%;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-bg);\n font-family: var(--tempest-font-sans);\n overflow: hidden;\n}\n\n.head,\n.allDayLane {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) repeat(\n var(--tempest-scheduler-days),\n minmax(0, 1fr)\n );\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.dayHead {\n padding: var(--tempest-space-2);\n text-align: center;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n letter-spacing: var(--tempest-tracking-wide);\n text-transform: capitalize;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayHead.today {\n color: var(--tempest-primary);\n}\n\n.gutterHead {\n padding: var(--tempest-space-2);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n text-align: right;\n}\n\n.allDayTrack {\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n grid-column: 2 / -1;\n gap: 2px;\n padding: 2px;\n}\n\n.allDayEvent {\n overflow: hidden;\n padding: 0 var(--tempest-space-2);\n border: none;\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n font-size: var(--tempest-text-xs);\n line-height: 1.5rem;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.allDayEvent:disabled {\n cursor: default;\n}\n\n.body {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) 1fr;\n height: var(--tempest-scheduler-height);\n overflow-y: auto;\n}\n\n.gutter {\n position: relative;\n border-right: 1px solid var(--tempest-border);\n}\n\n.hourLabel {\n position: absolute;\n right: var(--tempest-space-1);\n /*\n * Nudged up by half a line so the label reads as sitting *on* its hour line\n * rather than hanging below it.\n */\n transform: translateY(-50%);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.grid {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n}\n\n.dayColumn {\n position: relative;\n grid-row: 1;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayColumn:first-child {\n border-left: none;\n}\n\n.todayColumn {\n background-color: var(--tempest-surface);\n}\n\n.hourLine {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px solid var(--tempest-border);\n pointer-events: none;\n}\n\n/*\n * Events live in the same grid as the day columns, one row deep, positioned inside\n * their column by percentage. Being siblings of the columns rather than children is\n * what lets an event overlay the hour lines without clipping.\n */\n/*\n * Absolutely positioned, so the inline `grid-column` it is placed with must name\n * BOTH lines. For an abspos child of a grid container an `auto` side does not\n * mean \"span 1\" — CSS Grid §9.2 resolves it to the container's padding edge, so\n * a bare `grid-column: 3` runs from column 3 to the end of the week and every\n * event covers the whole view. A one-day scheduler hides it: there, \"column 1 to\n * the edge\" happens to be one column. Hence `N / span 1` in Scheduler.tsx.\n */\n.event {\n position: absolute;\n grid-row: 1;\n display: flex;\n flex-direction: column;\n gap: 1px;\n overflow: hidden;\n padding: 2px var(--tempest-space-1);\n border: 1px solid var(--tempest-bg);\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.event:disabled {\n cursor: default;\n}\n\n.event:focus-visible {\n outline: 2px solid var(--tempest-text);\n outline-offset: -2px;\n}\n\n/*\n * No `opacity` here, deliberately. Dimming the time to signal it as secondary drops\n * it below the AA contrast threshold against the event fill — the browser `axe` sweep\n * caught exactly that (jsdom cannot, since it does not paint). The hierarchy comes\n * from size and weight instead, which cost nothing in contrast.\n */\n.eventTime {\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.eventTitle {\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: var(--tempest-leading-snug);\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nowLine {\n position: absolute;\n left: 0;\n right: 0;\n grid-row: 1;\n grid-column: 1 / -1;\n height: 0;\n border-top: 2px solid var(--tempest-danger, #dc2626);\n pointer-events: none;\n z-index: 1;\n}\n\n@media (max-width: 640px) {\n .wrapper {\n --tempest-scheduler-gutter: 2.75rem;\n }\n\n .dayHead {\n font-size: 0.625rem;\n padding: var(--tempest-space-1);\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Scheduler.module.cjs","names":["wrapper","head","allDayLane","dayHead","today","gutterHead","allDayTrack","allDayEvent","body","gutter","hourLabel","grid","dayColumn","todayColumn","hourLine","event","eventTime","eventTitle","nowLine","Scheduler_module_default"],"sources":["../../../src/components/Scheduler/Scheduler.module.css"],"sourcesContent":[".wrapper {\n /*\n * Column widths are declared once here and reused by the header, the all-day\n * lane and the grid — three separate grids that have to line up exactly, and\n * would drift the moment any of them computed its own tracks.\n */\n --tempest-scheduler-gutter: 3.5rem;\n --tempest-scheduler-height: 32rem;\n\n display: flex;\n flex-direction: column;\n width: 100%;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-bg);\n font-family: var(--tempest-font-sans);\n overflow: hidden;\n}\n\n.head,\n.allDayLane {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) repeat(\n var(--tempest-scheduler-days),\n minmax(0, 1fr)\n );\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.dayHead {\n padding: var(--tempest-space-2);\n text-align: center;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n letter-spacing: var(--tempest-tracking-wide);\n text-transform: capitalize;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayHead.today {\n color: var(--tempest-primary);\n}\n\n.gutterHead {\n padding: var(--tempest-space-2);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n text-align: right;\n}\n\n.allDayTrack {\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n grid-column: 2 / -1;\n gap: 2px;\n padding: 2px;\n}\n\n.allDayEvent {\n overflow: hidden;\n padding: 0 var(--tempest-space-2);\n border: none;\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n font-size: var(--tempest-text-xs);\n line-height: 1.5rem;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.allDayEvent:disabled {\n cursor: default;\n}\n\n.body {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) 1fr;\n height: var(--tempest-scheduler-height);\n overflow-y: auto;\n}\n\n.gutter {\n position: relative;\n border-right: 1px solid var(--tempest-border);\n}\n\n.hourLabel {\n position: absolute;\n right: var(--tempest-space-1);\n /*\n * Nudged up by half a line so the label reads as sitting *on* its hour line\n * rather than hanging below it.\n */\n transform: translateY(-50%);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.grid {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n}\n\n.dayColumn {\n position: relative;\n grid-row: 1;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayColumn:first-child {\n border-left: none;\n}\n\n.todayColumn {\n background-color: var(--tempest-surface);\n}\n\n.hourLine {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px solid var(--tempest-border);\n pointer-events: none;\n}\n\n/*\n * Events live in the same grid as the day columns, one row deep, positioned inside\n * their column by percentage. Being siblings of the columns rather than children is\n * what lets an event overlay the hour lines without clipping.\n */\n/*\n * Absolutely positioned, so the inline `grid-column` it is placed with must name\n * BOTH lines. For an abspos child of a grid container an `auto` side does not\n * mean \"span 1\" — CSS Grid §9.2 resolves it to the container's padding edge, so\n * a bare `grid-column: 3` runs from column 3 to the end of the week and every\n * event covers the whole view. A one-day scheduler hides it: there, \"column 1 to\n * the edge\" happens to be one column. Hence `N / span 1` in Scheduler.tsx.\n */\n.event {\n position: absolute;\n grid-row: 1;\n display: flex;\n flex-direction: column;\n gap: 1px;\n overflow: hidden;\n padding: 2px var(--tempest-space-1);\n border: 1px solid var(--tempest-bg);\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.event:disabled {\n cursor: default;\n}\n\n.event:focus-visible {\n outline: 2px solid var(--tempest-text);\n outline-offset: -2px;\n}\n\n/*\n * No `opacity` here, deliberately. Dimming the time to signal it as secondary drops\n * it below the AA contrast threshold against the event fill — the browser `axe` sweep\n * caught exactly that (jsdom cannot, since it does not paint). The hierarchy comes\n * from size and weight instead, which cost nothing in contrast.\n */\n.eventTime {\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.eventTitle {\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: var(--tempest-leading-snug);\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nowLine {\n position: absolute;\n left: 0;\n right: 0;\n grid-row: 1;\n grid-column: 1 / -1;\n height: 0;\n border-top: 2px solid var(--tempest-danger, #dc2626);\n pointer-events: none;\n z-index: 1;\n}\n\n@media (max-width: 640px) {\n .wrapper {\n --tempest-scheduler-gutter: 2.75rem;\n }\n\n .dayHead {\n font-size: 0.625rem;\n padding: var(--tempest-space-1);\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.module.js","names":[],"sources":["../../../src/components/Scheduler/Scheduler.module.css"],"sourcesContent":[".wrapper {\n /*\n * Column widths are declared once here and reused by the header, the all-day\n * lane and the grid — three separate grids that have to line up exactly, and\n * would drift the moment any of them computed its own tracks.\n */\n --tempest-scheduler-gutter: 3.5rem;\n --tempest-scheduler-height: 32rem;\n\n display: flex;\n flex-direction: column;\n width: 100%;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-bg);\n font-family: var(--tempest-font-sans);\n overflow: hidden;\n}\n\n.head,\n.allDayLane {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) repeat(\n var(--tempest-scheduler-days),\n minmax(0, 1fr)\n );\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.dayHead {\n padding: var(--tempest-space-2);\n text-align: center;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n letter-spacing: var(--tempest-tracking-wide);\n text-transform: capitalize;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayHead.today {\n color: var(--tempest-primary);\n}\n\n.gutterHead {\n padding: var(--tempest-space-2);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n text-align: right;\n}\n\n.allDayTrack {\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n grid-column: 2 / -1;\n gap: 2px;\n padding: 2px;\n}\n\n.allDayEvent {\n overflow: hidden;\n padding: 0 var(--tempest-space-2);\n border: none;\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n font-size: var(--tempest-text-xs);\n line-height: 1.5rem;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.allDayEvent:disabled {\n cursor: default;\n}\n\n.body {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) 1fr;\n height: var(--tempest-scheduler-height);\n overflow-y: auto;\n}\n\n.gutter {\n position: relative;\n border-right: 1px solid var(--tempest-border);\n}\n\n.hourLabel {\n position: absolute;\n right: var(--tempest-space-1);\n /*\n * Nudged up by half a line so the label reads as sitting *on* its hour line\n * rather than hanging below it.\n */\n transform: translateY(-50%);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.grid {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n}\n\n.dayColumn {\n position: relative;\n grid-row: 1;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayColumn:first-child {\n border-left: none;\n}\n\n.todayColumn {\n background-color: var(--tempest-surface);\n}\n\n.hourLine {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px solid var(--tempest-border);\n pointer-events: none;\n}\n\n/*\n * Events live in the same grid as the day columns, one row deep, positioned inside\n * their column by percentage. Being siblings of the columns rather than children is\n * what lets an event overlay the hour lines without clipping.\n */\n/*\n * Absolutely positioned, so the inline `grid-column` it is placed with must name\n * BOTH lines. For an abspos child of a grid container an `auto` side does not\n * mean \"span 1\" — CSS Grid §9.2 resolves it to the container's padding edge, so\n * a bare `grid-column: 3` runs from column 3 to the end of the week and every\n * event covers the whole view. A one-day scheduler hides it: there, \"column 1 to\n * the edge\" happens to be one column. Hence `N / span 1` in Scheduler.tsx.\n */\n.event {\n position: absolute;\n grid-row: 1;\n display: flex;\n flex-direction: column;\n gap: 1px;\n overflow: hidden;\n padding: 2px var(--tempest-space-1);\n border: 1px solid var(--tempest-bg);\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.event:disabled {\n cursor: default;\n}\n\n.event:focus-visible {\n outline: 2px solid var(--tempest-text);\n outline-offset: -2px;\n}\n\n/*\n * No `opacity` here, deliberately. Dimming the time to signal it as secondary drops\n * it below the AA contrast threshold against the event fill — the browser `axe` sweep\n * caught exactly that (jsdom cannot, since it does not paint). The hierarchy comes\n * from size and weight instead, which cost nothing in contrast.\n */\n.eventTime {\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.eventTitle {\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: var(--tempest-leading-snug);\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nowLine {\n position: absolute;\n left: 0;\n right: 0;\n grid-row: 1;\n grid-column: 1 / -1;\n height: 0;\n border-top: 2px solid var(--tempest-danger, #dc2626);\n pointer-events: none;\n z-index: 1;\n}\n\n@media (max-width: 640px) {\n .wrapper {\n --tempest-scheduler-gutter: 2.75rem;\n }\n\n .dayHead {\n font-size: 0.625rem;\n padding: var(--tempest-space-1);\n }\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Scheduler.module.js","names":["wrapper","head","allDayLane","dayHead","today","gutterHead","allDayTrack","allDayEvent","body","gutter","hourLabel","grid","dayColumn","todayColumn","hourLine","event","eventTime","eventTitle","nowLine","Scheduler_module_default"],"sources":["../../../src/components/Scheduler/Scheduler.module.css"],"sourcesContent":[".wrapper {\n /*\n * Column widths are declared once here and reused by the header, the all-day\n * lane and the grid — three separate grids that have to line up exactly, and\n * would drift the moment any of them computed its own tracks.\n */\n --tempest-scheduler-gutter: 3.5rem;\n --tempest-scheduler-height: 32rem;\n\n display: flex;\n flex-direction: column;\n width: 100%;\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n background-color: var(--tempest-bg);\n font-family: var(--tempest-font-sans);\n overflow: hidden;\n}\n\n.head,\n.allDayLane {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) repeat(\n var(--tempest-scheduler-days),\n minmax(0, 1fr)\n );\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.dayHead {\n padding: var(--tempest-space-2);\n text-align: center;\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-semibold);\n letter-spacing: var(--tempest-tracking-wide);\n text-transform: capitalize;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayHead.today {\n color: var(--tempest-primary);\n}\n\n.gutterHead {\n padding: var(--tempest-space-2);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n text-align: right;\n}\n\n.allDayTrack {\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n grid-column: 2 / -1;\n gap: 2px;\n padding: 2px;\n}\n\n.allDayEvent {\n overflow: hidden;\n padding: 0 var(--tempest-space-2);\n border: none;\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n font-size: var(--tempest-text-xs);\n line-height: 1.5rem;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.allDayEvent:disabled {\n cursor: default;\n}\n\n.body {\n display: grid;\n grid-template-columns: var(--tempest-scheduler-gutter) 1fr;\n height: var(--tempest-scheduler-height);\n overflow-y: auto;\n}\n\n.gutter {\n position: relative;\n border-right: 1px solid var(--tempest-border);\n}\n\n.hourLabel {\n position: absolute;\n right: var(--tempest-space-1);\n /*\n * Nudged up by half a line so the label reads as sitting *on* its hour line\n * rather than hanging below it.\n */\n transform: translateY(-50%);\n color: var(--tempest-text-muted);\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.grid {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--tempest-scheduler-days), minmax(0, 1fr));\n}\n\n.dayColumn {\n position: relative;\n grid-row: 1;\n border-left: 1px solid var(--tempest-border);\n}\n\n.dayColumn:first-child {\n border-left: none;\n}\n\n.todayColumn {\n background-color: var(--tempest-surface);\n}\n\n.hourLine {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px solid var(--tempest-border);\n pointer-events: none;\n}\n\n/*\n * Events live in the same grid as the day columns, one row deep, positioned inside\n * their column by percentage. Being siblings of the columns rather than children is\n * what lets an event overlay the hour lines without clipping.\n */\n/*\n * Absolutely positioned, so the inline `grid-column` it is placed with must name\n * BOTH lines. For an abspos child of a grid container an `auto` side does not\n * mean \"span 1\" — CSS Grid §9.2 resolves it to the container's padding edge, so\n * a bare `grid-column: 3` runs from column 3 to the end of the week and every\n * event covers the whole view. A one-day scheduler hides it: there, \"column 1 to\n * the edge\" happens to be one column. Hence `N / span 1` in Scheduler.tsx.\n */\n.event {\n position: absolute;\n grid-row: 1;\n display: flex;\n flex-direction: column;\n gap: 1px;\n overflow: hidden;\n padding: 2px var(--tempest-space-1);\n border: 1px solid var(--tempest-bg);\n border-radius: var(--tempest-radius-sm);\n background-color: var(--tempest-primary);\n color: var(--tempest-primary-foreground);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.event:disabled {\n cursor: default;\n}\n\n.event:focus-visible {\n outline: 2px solid var(--tempest-text);\n outline-offset: -2px;\n}\n\n/*\n * No `opacity` here, deliberately. Dimming the time to signal it as secondary drops\n * it below the AA contrast threshold against the event fill — the browser `axe` sweep\n * caught exactly that (jsdom cannot, since it does not paint). The hierarchy comes\n * from size and weight instead, which cost nothing in contrast.\n */\n.eventTime {\n font-size: 0.625rem;\n font-variant-numeric: tabular-nums;\n}\n\n.eventTitle {\n font-size: var(--tempest-text-xs);\n font-weight: var(--tempest-weight-medium);\n line-height: var(--tempest-leading-snug);\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nowLine {\n position: absolute;\n left: 0;\n right: 0;\n grid-row: 1;\n grid-column: 1 / -1;\n height: 0;\n border-top: 2px solid var(--tempest-danger, #dc2626);\n pointer-events: none;\n z-index: 1;\n}\n\n@media (max-width: 640px) {\n .wrapper {\n --tempest-scheduler-gutter: 2.75rem;\n }\n\n .dayHead {\n font-size: 0.625rem;\n padding: var(--tempest-space-1);\n }\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler-layout.cjs","names":[],"sources":["../../../src/components/Scheduler/scheduler-layout.ts"],"sourcesContent":["/** An event on the schedule. `start`/`end` are absolute instants in local time. */\nexport interface SchedulerEvent {\n id: string;\n title: string;\n start: Date;\n end: Date;\n /** Render across the all-day lane instead of the time grid. */\n allDay?: boolean;\n /** Free-form payload the app passes through. */\n data?: Record<string, unknown>;\n}\n\n/** An event placed in the grid: which day, where vertically, which column. */\nexport interface PlacedEvent {\n event: SchedulerEvent;\n /** Index into the rendered day list. */\n dayIndex: number;\n /** Distance from the top of the day column, as a fraction of its height. */\n top: number;\n /** Height as a fraction of the day column. */\n height: number;\n /** Column this event occupies among its overlapping cluster, zero-based. */\n column: number;\n /** How many columns the cluster was split into. */\n columns: number;\n}\n\n/** The visible time window of a day, in minutes from midnight. */\nexport interface DayWindow {\n startMinute: number;\n endMinute: number;\n}\n\n/** Minutes from midnight, in local time. */\nexport function minutesOfDay(date: Date): number {\n return date.getHours() * 60 + date.getMinutes();\n}\n\n/** Midnight local time on the same calendar day as `date`. */\nexport function startOfDay(date: Date): Date {\n const copy = new Date(date);\n copy.setHours(0, 0, 0, 0);\n return copy;\n}\n\n/** `date` shifted by whole days, preserving local wall-clock time. */\nexport function addDays(date: Date, days: number): Date {\n const copy = new Date(date);\n copy.setDate(copy.getDate() + days);\n return copy;\n}\n\n/** Whether two dates fall on the same local calendar day. */\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * The consecutive local days a schedule should render.\n *\n * Built by incrementing the calendar day rather than adding 24 h of milliseconds:\n * across a DST boundary a day is 23 or 25 hours long, and millisecond arithmetic\n * would silently produce a duplicated or skipped date.\n *\n * @param anchor - Any instant within the first day.\n * @param count - How many days to produce.\n * @returns Midnight of each day, in order.\n */\nexport function dayRange(anchor: Date, count: number): Date[] {\n const first = startOfDay(anchor);\n return Array.from({ length: Math.max(0, count) }, (_, index) => addDays(first, index));\n}\n\n/**\n * Split an event into one segment per day it touches, clipped to the window.\n *\n * An event that crosses midnight has to appear in both columns, and each piece has\n * to be clipped to that day's visible window — otherwise a 23:00–01:00 booking\n * either vanishes or is drawn far outside its column.\n *\n * @param event - The event to place.\n * @param days - Midnight of each rendered day.\n * @param window - Visible minute range shared by every day.\n * @returns One entry per day the event is visible on.\n */\nfunction segmentsFor(\n event: SchedulerEvent,\n days: Date[],\n window: DayWindow,\n): { dayIndex: number; from: number; to: number }[] {\n const out: { dayIndex: number; from: number; to: number }[] = [];\n days.forEach((day, dayIndex) => {\n const dayStart = day.getTime();\n const dayEnd = addDays(day, 1).getTime();\n if (event.end.getTime() <= dayStart || event.start.getTime() >= dayEnd) return;\n\n const from = event.start.getTime() <= dayStart ? 0 : minutesOfDay(event.start);\n const to =\n event.end.getTime() >= dayEnd\n ? 24 * 60\n : minutesOfDay(event.end) || (event.end.getTime() > dayStart ? 24 * 60 : 0);\n\n const clippedFrom = Math.max(window.startMinute, from);\n const clippedTo = Math.min(window.endMinute, to);\n if (clippedTo <= clippedFrom) return;\n out.push({ dayIndex, from: clippedFrom, to: clippedTo });\n });\n return out;\n}\n\n/**\n * Assign columns so overlapping events sit side by side instead of on top.\n *\n * Events are grouped into *clusters* of mutual overlap — a chain where each event\n * overlaps at least one other — and every event in a cluster is given the same\n * column count. That shared count is what makes the widths line up; assigning\n * columns per pair instead produces the ragged layout where two events claim half\n * the width and a third silently covers one of them.\n *\n * A column is reused as soon as it is free, so `9–10`, `9–10`, `10–11` needs two\n * columns rather than three.\n *\n * @param segments - Same-day segments, in any order.\n * @returns The same segments with `column` and `columns` filled in.\n */\nfunction assignColumns<T extends { from: number; to: number }>(\n segments: T[],\n): (T & { column: number; columns: number })[] {\n const sorted = [...segments].sort((a, b) => a.from - b.from || a.to - b.to);\n const placed: (T & { column: number; columns: number })[] = [];\n\n let cluster: (T & { column: number; columns: number })[] = [];\n let clusterEnd = -Infinity;\n\n /** Freeze the current cluster: everyone in it shares its column count. */\n const closeCluster = (): void => {\n const width = cluster.reduce((max, item) => Math.max(max, item.column + 1), 0);\n for (const item of cluster) item.columns = width;\n placed.push(...cluster);\n cluster = [];\n clusterEnd = -Infinity;\n };\n\n for (const segment of sorted) {\n if (segment.from >= clusterEnd) closeCluster();\n\n // Lowest column whose last event has already ended.\n const taken = new Set(\n cluster.filter((item) => item.to > segment.from).map((i) => i.column),\n );\n let column = 0;\n while (taken.has(column)) column += 1;\n\n cluster.push({ ...segment, column, columns: 1 });\n clusterEnd = Math.max(clusterEnd, segment.to);\n }\n closeCluster();\n\n return placed;\n}\n\n/**\n * Lay out timed events across the rendered days.\n *\n * All-day events are excluded — they belong in their own lane, where a vertical\n * position would be meaningless.\n *\n * @param params.events - Every event, all-day ones included.\n * @param params.days - Midnight of each rendered day.\n * @param params.window - Visible minute range.\n * @returns Placed events, positioned as fractions of the column height.\n */\nexport function layoutEvents({\n events,\n days,\n window,\n}: {\n events: readonly SchedulerEvent[];\n days: Date[];\n window: DayWindow;\n}): PlacedEvent[] {\n const span = window.endMinute - window.startMinute;\n if (span <= 0 || days.length === 0) return [];\n\n const byDay = new Map<number, { event: SchedulerEvent; from: number; to: number }[]>();\n for (const event of events) {\n if (event.allDay) continue;\n if (event.end.getTime() <= event.start.getTime()) continue;\n for (const segment of segmentsFor(event, days, window)) {\n const list = byDay.get(segment.dayIndex) ?? [];\n list.push({ event, from: segment.from, to: segment.to });\n byDay.set(segment.dayIndex, list);\n }\n }\n\n const placed: PlacedEvent[] = [];\n for (const [dayIndex, segments] of byDay) {\n for (const item of assignColumns(segments)) {\n placed.push({\n event: item.event,\n dayIndex,\n top: (item.from - window.startMinute) / span,\n height: (item.to - item.from) / span,\n column: item.column,\n columns: item.columns,\n });\n }\n }\n return placed;\n}\n\n/**\n * All-day events that intersect the rendered range, with their day span.\n *\n * @param params.events - Every event.\n * @param params.days - Midnight of each rendered day.\n * @returns One entry per all-day event, clipped to the visible days.\n */\nexport function layoutAllDay({\n events,\n days,\n}: {\n events: readonly SchedulerEvent[];\n days: Date[];\n}): { event: SchedulerEvent; dayIndex: number; span: number }[] {\n if (days.length === 0) return [];\n const rangeEnd = addDays(days[days.length - 1], 1).getTime();\n\n return events\n .filter((event) => event.allDay)\n .filter(\n (event) => event.end.getTime() > days[0].getTime() && event.start.getTime() < rangeEnd,\n )\n .map((event) => {\n const firstIndex = days.findIndex(\n (day) => addDays(day, 1).getTime() > event.start.getTime(),\n );\n const lastIndex = days.reduce(\n (last, day, index) => (day.getTime() < event.end.getTime() ? index : last),\n 0,\n );\n const dayIndex = Math.max(0, firstIndex);\n return { event, dayIndex, span: Math.max(1, lastIndex - dayIndex + 1) };\n });\n}\n\n/**\n * Hour marks to label the time gutter with.\n *\n * @param window - Visible minute range.\n * @returns Each whole hour inside the window, in minutes from midnight.\n */\nexport function hourMarks(window: DayWindow): number[] {\n const first = Math.ceil(window.startMinute / 60);\n const last = Math.floor(window.endMinute / 60);\n return Array.from({ length: Math.max(0, last - first + 1) }, (_, i) => (first + i) * 60);\n}\n\n/**\n * Where an instant falls within the window, as a fraction of the column height.\n *\n * @param date - The instant.\n * @param window - Visible minute range.\n * @returns A fraction in `0…1`, or `null` when outside the window.\n */\nexport function fractionOfWindow(date: Date, window: DayWindow): number | null {\n const minute = minutesOfDay(date);\n const span = window.endMinute - window.startMinute;\n if (span <= 0 || minute < window.startMinute || minute > window.endMinute) return null;\n return (minute - window.startMinute) / span;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"scheduler-layout.cjs","names":["minutesOfDay","date","startOfDay","copy","addDays","days","isSameDay","a","b","dayRange","first","anchor","count","index","segmentsFor","out","dayStart","day","dayEnd","event","from","to","clippedFrom","window","clippedTo","assignColumns","sorted","segments","placed","cluster","clusterEnd","closeCluster","width","max","item","segment","taken","i","column","layoutEvents","span","byDay","events","list","dayIndex","layoutAllDay","rangeEnd","firstIndex","lastIndex","last","hourMarks","fractionOfWindow","minute"],"sources":["../../../src/components/Scheduler/scheduler-layout.ts"],"sourcesContent":["/** An event on the schedule. `start`/`end` are absolute instants in local time. */\nexport interface SchedulerEvent {\n id: string;\n title: string;\n start: Date;\n end: Date;\n /** Render across the all-day lane instead of the time grid. */\n allDay?: boolean;\n /** Free-form payload the app passes through. */\n data?: Record<string, unknown>;\n}\n\n/** An event placed in the grid: which day, where vertically, which column. */\nexport interface PlacedEvent {\n event: SchedulerEvent;\n /** Index into the rendered day list. */\n dayIndex: number;\n /** Distance from the top of the day column, as a fraction of its height. */\n top: number;\n /** Height as a fraction of the day column. */\n height: number;\n /** Column this event occupies among its overlapping cluster, zero-based. */\n column: number;\n /** How many columns the cluster was split into. */\n columns: number;\n}\n\n/** The visible time window of a day, in minutes from midnight. */\nexport interface DayWindow {\n startMinute: number;\n endMinute: number;\n}\n\n/** Minutes from midnight, in local time. */\nexport function minutesOfDay(date: Date): number {\n return date.getHours() * 60 + date.getMinutes();\n}\n\n/** Midnight local time on the same calendar day as `date`. */\nexport function startOfDay(date: Date): Date {\n const copy = new Date(date);\n copy.setHours(0, 0, 0, 0);\n return copy;\n}\n\n/** `date` shifted by whole days, preserving local wall-clock time. */\nexport function addDays(date: Date, days: number): Date {\n const copy = new Date(date);\n copy.setDate(copy.getDate() + days);\n return copy;\n}\n\n/** Whether two dates fall on the same local calendar day. */\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/**\n * The consecutive local days a schedule should render.\n *\n * Built by incrementing the calendar day rather than adding 24 h of milliseconds:\n * across a DST boundary a day is 23 or 25 hours long, and millisecond arithmetic\n * would silently produce a duplicated or skipped date.\n *\n * @param anchor - Any instant within the first day.\n * @param count - How many days to produce.\n * @returns Midnight of each day, in order.\n */\nexport function dayRange(anchor: Date, count: number): Date[] {\n const first = startOfDay(anchor);\n return Array.from({ length: Math.max(0, count) }, (_, index) => addDays(first, index));\n}\n\n/**\n * Split an event into one segment per day it touches, clipped to the window.\n *\n * An event that crosses midnight has to appear in both columns, and each piece has\n * to be clipped to that day's visible window — otherwise a 23:00–01:00 booking\n * either vanishes or is drawn far outside its column.\n *\n * @param event - The event to place.\n * @param days - Midnight of each rendered day.\n * @param window - Visible minute range shared by every day.\n * @returns One entry per day the event is visible on.\n */\nfunction segmentsFor(\n event: SchedulerEvent,\n days: Date[],\n window: DayWindow,\n): { dayIndex: number; from: number; to: number }[] {\n const out: { dayIndex: number; from: number; to: number }[] = [];\n days.forEach((day, dayIndex) => {\n const dayStart = day.getTime();\n const dayEnd = addDays(day, 1).getTime();\n if (event.end.getTime() <= dayStart || event.start.getTime() >= dayEnd) return;\n\n const from = event.start.getTime() <= dayStart ? 0 : minutesOfDay(event.start);\n const to =\n event.end.getTime() >= dayEnd\n ? 24 * 60\n : minutesOfDay(event.end) || (event.end.getTime() > dayStart ? 24 * 60 : 0);\n\n const clippedFrom = Math.max(window.startMinute, from);\n const clippedTo = Math.min(window.endMinute, to);\n if (clippedTo <= clippedFrom) return;\n out.push({ dayIndex, from: clippedFrom, to: clippedTo });\n });\n return out;\n}\n\n/**\n * Assign columns so overlapping events sit side by side instead of on top.\n *\n * Events are grouped into *clusters* of mutual overlap — a chain where each event\n * overlaps at least one other — and every event in a cluster is given the same\n * column count. That shared count is what makes the widths line up; assigning\n * columns per pair instead produces the ragged layout where two events claim half\n * the width and a third silently covers one of them.\n *\n * A column is reused as soon as it is free, so `9–10`, `9–10`, `10–11` needs two\n * columns rather than three.\n *\n * @param segments - Same-day segments, in any order.\n * @returns The same segments with `column` and `columns` filled in.\n */\nfunction assignColumns<T extends { from: number; to: number }>(\n segments: T[],\n): (T & { column: number; columns: number })[] {\n const sorted = [...segments].sort((a, b) => a.from - b.from || a.to - b.to);\n const placed: (T & { column: number; columns: number })[] = [];\n\n let cluster: (T & { column: number; columns: number })[] = [];\n let clusterEnd = -Infinity;\n\n /** Freeze the current cluster: everyone in it shares its column count. */\n const closeCluster = (): void => {\n const width = cluster.reduce((max, item) => Math.max(max, item.column + 1), 0);\n for (const item of cluster) item.columns = width;\n placed.push(...cluster);\n cluster = [];\n clusterEnd = -Infinity;\n };\n\n for (const segment of sorted) {\n if (segment.from >= clusterEnd) closeCluster();\n\n // Lowest column whose last event has already ended.\n const taken = new Set(\n cluster.filter((item) => item.to > segment.from).map((i) => i.column),\n );\n let column = 0;\n while (taken.has(column)) column += 1;\n\n cluster.push({ ...segment, column, columns: 1 });\n clusterEnd = Math.max(clusterEnd, segment.to);\n }\n closeCluster();\n\n return placed;\n}\n\n/**\n * Lay out timed events across the rendered days.\n *\n * All-day events are excluded — they belong in their own lane, where a vertical\n * position would be meaningless.\n *\n * @param params.events - Every event, all-day ones included.\n * @param params.days - Midnight of each rendered day.\n * @param params.window - Visible minute range.\n * @returns Placed events, positioned as fractions of the column height.\n */\nexport function layoutEvents({\n events,\n days,\n window,\n}: {\n events: readonly SchedulerEvent[];\n days: Date[];\n window: DayWindow;\n}): PlacedEvent[] {\n const span = window.endMinute - window.startMinute;\n if (span <= 0 || days.length === 0) return [];\n\n const byDay = new Map<number, { event: SchedulerEvent; from: number; to: number }[]>();\n for (const event of events) {\n if (event.allDay) continue;\n if (event.end.getTime() <= event.start.getTime()) continue;\n for (const segment of segmentsFor(event, days, window)) {\n const list = byDay.get(segment.dayIndex) ?? [];\n list.push({ event, from: segment.from, to: segment.to });\n byDay.set(segment.dayIndex, list);\n }\n }\n\n const placed: PlacedEvent[] = [];\n for (const [dayIndex, segments] of byDay) {\n for (const item of assignColumns(segments)) {\n placed.push({\n event: item.event,\n dayIndex,\n top: (item.from - window.startMinute) / span,\n height: (item.to - item.from) / span,\n column: item.column,\n columns: item.columns,\n });\n }\n }\n return placed;\n}\n\n/**\n * All-day events that intersect the rendered range, with their day span.\n *\n * @param params.events - Every event.\n * @param params.days - Midnight of each rendered day.\n * @returns One entry per all-day event, clipped to the visible days.\n */\nexport function layoutAllDay({\n events,\n days,\n}: {\n events: readonly SchedulerEvent[];\n days: Date[];\n}): { event: SchedulerEvent; dayIndex: number; span: number }[] {\n if (days.length === 0) return [];\n const rangeEnd = addDays(days[days.length - 1], 1).getTime();\n\n return events\n .filter((event) => event.allDay)\n .filter(\n (event) => event.end.getTime() > days[0].getTime() && event.start.getTime() < rangeEnd,\n )\n .map((event) => {\n const firstIndex = days.findIndex(\n (day) => addDays(day, 1).getTime() > event.start.getTime(),\n );\n const lastIndex = days.reduce(\n (last, day, index) => (day.getTime() < event.end.getTime() ? index : last),\n 0,\n );\n const dayIndex = Math.max(0, firstIndex);\n return { event, dayIndex, span: Math.max(1, lastIndex - dayIndex + 1) };\n });\n}\n\n/**\n * Hour marks to label the time gutter with.\n *\n * @param window - Visible minute range.\n * @returns Each whole hour inside the window, in minutes from midnight.\n */\nexport function hourMarks(window: DayWindow): number[] {\n const first = Math.ceil(window.startMinute / 60);\n const last = Math.floor(window.endMinute / 60);\n return Array.from({ length: Math.max(0, last - first + 1) }, (_, i) => (first + i) * 60);\n}\n\n/**\n * Where an instant falls within the window, as a fraction of the column height.\n *\n * @param date - The instant.\n * @param window - Visible minute range.\n * @returns A fraction in `0…1`, or `null` when outside the window.\n */\nexport function fractionOfWindow(date: Date, window: DayWindow): number | null {\n const minute = minutesOfDay(date);\n const span = window.endMinute - window.startMinute;\n if (span <= 0 || minute < window.startMinute || minute > window.endMinute) return null;\n return (minute - window.startMinute) / span;\n}\n"],"mappings":"AAkCA,SAAgBA,EAAa,EAAoB,CAC7C,OAAOC,EAAK,SAAS,EAAI,GAAKA,EAAK,WAAW,CAClD,CAGA,SAAgBC,EAAW,EAAkB,CACzC,IAAMC,EAAO,IAAI,KAAKF,CAAI,EAE1B,OADAE,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACX,CAGA,SAAgBC,EAAQ,EAAY,EAAoB,CACpD,IAAMD,EAAO,IAAI,KAAKF,CAAI,EAE1B,OADAE,EAAK,QAAQA,EAAK,QAAQ,EAAIE,CAAI,EAC3BF,CACX,CAGA,SAAgBG,EAAU,EAAS,EAAkB,CACjD,OACIC,EAAE,YAAY,IAAMC,EAAE,YAAY,GAClCD,EAAE,SAAS,IAAMC,EAAE,SAAS,GAC5BD,EAAE,QAAQ,IAAMC,EAAE,QAAQ,CAElC,CAaA,SAAgBC,EAAS,EAAc,EAAuB,CAC1D,IAAMC,EAAQR,EAAWS,CAAM,EAC/B,OAAO,MAAM,KAAK,CAAE,OAAQ,KAAK,IAAI,EAAGC,CAAK,CAAE,GAAI,EAAG,IAAUR,EAAQM,EAAOG,CAAK,CAAC,CACzF,CAcA,SAASC,EACL,EACA,EACA,EACgD,CAChD,IAAMC,EAAwD,CAAC,EAiB/D,OAhBAV,EAAK,SAAS,EAAK,IAAa,CAC5B,IAAMW,EAAWC,EAAI,QAAQ,EACvBC,EAASd,EAAQa,EAAK,CAAC,CAAC,CAAC,QAAQ,EACvC,GAAIE,EAAM,IAAI,QAAQ,GAAKH,GAAYG,EAAM,MAAM,QAAQ,GAAKD,EAAQ,OAExE,IAAME,EAAOD,EAAM,MAAM,QAAQ,GAAKH,EAAW,EAAIhB,EAAamB,EAAM,KAAK,EACvEE,EACFF,EAAM,IAAI,QAAQ,GAAKD,EACjB,KACAlB,EAAamB,EAAM,GAAG,IAAMA,EAAM,IAAI,QAAQ,EAAIH,EAAW,KAAU,GAE3EM,EAAc,KAAK,IAAIC,EAAO,YAAaH,CAAI,EAC/CI,EAAY,KAAK,IAAID,EAAO,UAAWF,CAAE,EAC3CG,GAAaF,GACjBP,EAAI,KAAK,CAAE,WAAU,KAAMO,EAAa,GAAIE,CAAU,CAAC,CAC3D,CAAC,EACMT,CACX,CAiBA,SAASU,EACL,EAC2C,CAC3C,IAAMC,EAAS,CAAC,GAAGC,CAAQ,CAAC,CAAC,MAAM,EAAG,IAAMpB,EAAE,KAAOC,EAAE,MAAQD,EAAE,GAAKC,EAAE,EAAE,EACpEoB,EAAsD,CAAC,EAEzDC,EAAuD,CAAC,EACxDC,EAAa,KAGXC,MAA2B,CAC7B,IAAMC,EAAQH,EAAQ,QAAQ,EAAK,IAAS,KAAK,IAAII,EAAKC,EAAK,OAAS,CAAC,EAAG,CAAC,EAC7E,IAAK,IAAMA,KAAQL,EAAS,EAAK,QAAUG,EAC3CJ,EAAO,KAAK,GAAGC,CAAO,EACtB,EAAU,CAAC,EACX,EAAa,IACjB,EAEA,IAAK,IAAMM,KAAWT,EAAQ,CACtBS,EAAQ,MAAQL,GAAYC,EAAa,EAG7C,IAAMK,EAAQ,IAAI,IACdP,EAAQ,OAAQ,GAASK,EAAK,GAAKC,EAAQ,IAAI,CAAC,CAAC,IAAK,GAAME,EAAE,MAAM,CACxE,EACIC,EAAS,EACb,KAAOF,EAAM,IAAIE,CAAM,GAAG,GAAU,EAEpCT,EAAQ,KAAK,CAAE,GAAGM,EAAS,SAAQ,QAAS,CAAE,CAAC,EAC/C,EAAa,KAAK,IAAIL,EAAYK,EAAQ,EAAE,CAChD,CAGA,OAFAJ,EAAa,EAENH,CACX,CAaA,SAAgBW,EAAa,CACzB,SACA,OACA,UAKc,CACd,IAAMC,EAAOjB,EAAO,UAAYA,EAAO,YACvC,GAAIiB,GAAQ,GAAKnC,EAAK,SAAW,EAAG,MAAO,CAAC,EAE5C,IAAMoC,EAAQ,IAAI,IAClB,IAAK,IAAMtB,KAASuB,EAChB,GAAI,GAAM,QACN,IAAM,IAAI,QAAQ,GAAKvB,EAAM,MAAM,QAAQ,GAC/C,IAAK,IAAMgB,KAAWrB,EAAYK,EAAOd,EAAMkB,CAAM,EAAG,CACpD,IAAMoB,EAAOF,EAAM,IAAIN,EAAQ,QAAQ,GAAK,CAAC,EAC7CQ,EAAK,KAAK,CAAE,QAAO,KAAMR,EAAQ,KAAM,GAAIA,EAAQ,EAAG,CAAC,EACvDM,EAAM,IAAIN,EAAQ,SAAUQ,CAAI,CACpC,CAGJ,IAAMf,EAAwB,CAAC,EAC/B,IAAK,GAAM,CAACgB,EAAUjB,KAAac,EAC/B,IAAK,IAAMP,KAAQT,EAAcE,CAAQ,EACrCC,EAAO,KAAK,CACR,MAAOM,EAAK,MACZ,WACA,KAAMA,EAAK,KAAOX,EAAO,aAAeiB,EACxC,QAASN,EAAK,GAAKA,EAAK,MAAQM,EAChC,OAAQN,EAAK,OACb,QAASA,EAAK,OAClB,CAAC,EAGT,OAAON,CACX,CASA,SAAgBiB,EAAa,CACzB,SACA,QAI4D,CAC5D,GAAIxC,EAAK,SAAW,EAAG,MAAO,CAAC,EAC/B,IAAMyC,EAAW1C,EAAQC,EAAKA,EAAK,OAAS,GAAI,CAAC,CAAC,CAAC,QAAQ,EAE3D,OAAOqC,EACF,OAAQ,GAAUvB,EAAM,MAAM,CAAC,CAC/B,OACI,GAAUA,EAAM,IAAI,QAAQ,EAAId,EAAK,EAAE,CAAC,QAAQ,GAAKc,EAAM,MAAM,QAAQ,EAAI2B,CAClF,CAAC,CACA,IAAK,GAAU,CACZ,IAAMC,EAAa1C,EAAK,UACnB,GAAQD,EAAQa,EAAK,CAAC,CAAC,CAAC,QAAQ,EAAIE,EAAM,MAAM,QAAQ,CAC7D,EACM6B,EAAY3C,EAAK,QAClB,EAAM,EAAK,IAAWY,EAAI,QAAQ,EAAIE,EAAM,IAAI,QAAQ,EAAIN,EAAQoC,EACrE,CACJ,EACML,EAAW,KAAK,IAAI,EAAGG,CAAU,EACvC,MAAO,CAAE,QAAO,WAAU,KAAM,KAAK,IAAI,EAAGC,EAAYJ,EAAW,CAAC,CAAE,CAC1E,CAAC,CACT,CAQA,SAAgBM,EAAU,EAA6B,CACnD,IAAMxC,EAAQ,KAAK,KAAKa,EAAO,YAAc,EAAE,EACzC0B,EAAO,KAAK,MAAM1B,EAAO,UAAY,EAAE,EAC7C,OAAO,MAAM,KAAK,CAAE,OAAQ,KAAK,IAAI,EAAG0B,EAAOvC,EAAQ,CAAC,CAAE,GAAI,EAAG,KAAOA,EAAQ2B,GAAK,EAAE,CAC3F,CASA,SAAgBc,EAAiB,EAAY,EAAkC,CAC3E,IAAMC,EAASpD,EAAaC,CAAI,EAC1BuC,EAAOjB,EAAO,UAAYA,EAAO,YAEvC,OADIiB,GAAQ,GAAKY,EAAS7B,EAAO,aAAe6B,EAAS7B,EAAO,UAAkB,MAC1E6B,EAAS7B,EAAO,aAAeiB,CAC3C,C"}