tempest-react-sdk 0.52.0 → 0.54.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 (507) hide show
  1. package/README.md +58 -7
  2. package/dist/access/Can.cjs +1 -1
  3. package/dist/access/Can.cjs.map +1 -1
  4. package/dist/access/Can.js +3 -3
  5. package/dist/access/Can.js.map +1 -1
  6. package/dist/audio/audio-bus.cjs +2 -0
  7. package/dist/audio/audio-bus.cjs.map +1 -0
  8. package/dist/audio/audio-bus.js +116 -0
  9. package/dist/audio/audio-bus.js.map +1 -0
  10. package/dist/audio/level-meter.cjs +1 -1
  11. package/dist/audio/level-meter.cjs.map +1 -1
  12. package/dist/audio/level-meter.js +15 -15
  13. package/dist/audio/level-meter.js.map +1 -1
  14. package/dist/audio/noise-floor.cjs +2 -0
  15. package/dist/audio/noise-floor.cjs.map +1 -0
  16. package/dist/audio/noise-floor.js +27 -0
  17. package/dist/audio/noise-floor.js.map +1 -0
  18. package/dist/audio/use-audio-bus.cjs +2 -0
  19. package/dist/audio/use-audio-bus.cjs.map +1 -0
  20. package/dist/audio/use-audio-bus.js +11 -0
  21. package/dist/audio/use-audio-bus.js.map +1 -0
  22. package/dist/audio/voice-activity.cjs +2 -0
  23. package/dist/audio/voice-activity.cjs.map +1 -0
  24. package/dist/audio/voice-activity.js +26 -0
  25. package/dist/audio/voice-activity.js.map +1 -0
  26. package/dist/audio/voice-chain-stages.cjs +2 -0
  27. package/dist/audio/voice-chain-stages.cjs.map +1 -0
  28. package/dist/audio/voice-chain-stages.js +82 -0
  29. package/dist/audio/voice-chain-stages.js.map +1 -0
  30. package/dist/audio/voice-chain.cjs +2 -0
  31. package/dist/audio/voice-chain.cjs.map +1 -0
  32. package/dist/audio/voice-chain.js +74 -0
  33. package/dist/audio/voice-chain.js.map +1 -0
  34. package/dist/auth/lazy-with-retry.cjs.map +1 -1
  35. package/dist/auth/lazy-with-retry.js.map +1 -1
  36. package/dist/auth/passkey.cjs.map +1 -1
  37. package/dist/auth/passkey.js.map +1 -1
  38. package/dist/br/BrazilStateCitySelect.cjs +1 -1
  39. package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
  40. package/dist/br/BrazilStateCitySelect.js +36 -28
  41. package/dist/br/BrazilStateCitySelect.js.map +1 -1
  42. package/dist/br/data/br-centroids.cjs +1 -1
  43. package/dist/br/data/br-centroids.cjs.map +1 -1
  44. package/dist/br/data/br-centroids.js +11105 -11045
  45. package/dist/br/data/br-centroids.js.map +1 -1
  46. package/dist/br/data/br-locations.cjs +1 -1
  47. package/dist/br/data/br-locations.cjs.map +1 -1
  48. package/dist/br/data/br-locations.js +5803 -137
  49. package/dist/br/data/br-locations.js.map +1 -1
  50. package/dist/br/data/br-uf-geo.cjs +1 -1
  51. package/dist/br/data/br-uf-geo.cjs.map +1 -1
  52. package/dist/br/data/br-uf-geo.js +5721 -6777
  53. package/dist/br/data/br-uf-geo.js.map +1 -1
  54. package/dist/br/data/mun/AC.cjs +1 -1
  55. package/dist/br/data/mun/AC.cjs.map +1 -1
  56. package/dist/br/data/mun/AC.js +681 -689
  57. package/dist/br/data/mun/AC.js.map +1 -1
  58. package/dist/br/data/mun/AL.cjs +1 -1
  59. package/dist/br/data/mun/AL.cjs.map +1 -1
  60. package/dist/br/data/mun/AL.js +949 -844
  61. package/dist/br/data/mun/AL.js.map +1 -1
  62. package/dist/br/data/mun/AM.cjs +1 -1
  63. package/dist/br/data/mun/AM.cjs.map +1 -1
  64. package/dist/br/data/mun/AM.js +4337 -4218
  65. package/dist/br/data/mun/AM.js.map +1 -1
  66. package/dist/br/data/mun/AP.cjs +1 -1
  67. package/dist/br/data/mun/AP.cjs.map +1 -1
  68. package/dist/br/data/mun/AP.js +786 -780
  69. package/dist/br/data/mun/AP.js.map +1 -1
  70. package/dist/br/data/mun/BA.cjs +1 -1
  71. package/dist/br/data/mun/BA.cjs.map +1 -1
  72. package/dist/br/data/mun/BA.js +6329 -5633
  73. package/dist/br/data/mun/BA.js.map +1 -1
  74. package/dist/br/data/mun/CE.cjs +1 -1
  75. package/dist/br/data/mun/CE.cjs.map +1 -1
  76. package/dist/br/data/mun/CE.js +2544 -2487
  77. package/dist/br/data/mun/CE.js.map +1 -1
  78. package/dist/br/data/mun/DF.cjs +1 -1
  79. package/dist/br/data/mun/DF.cjs.map +1 -1
  80. package/dist/br/data/mun/DF.js +17 -16
  81. package/dist/br/data/mun/DF.js.map +1 -1
  82. package/dist/br/data/mun/ES.cjs +1 -1
  83. package/dist/br/data/mun/ES.cjs.map +1 -1
  84. package/dist/br/data/mun/ES.js +1101 -1070
  85. package/dist/br/data/mun/ES.js.map +1 -1
  86. package/dist/br/data/mun/GO.cjs +1 -1
  87. package/dist/br/data/mun/GO.cjs.map +1 -1
  88. package/dist/br/data/mun/GO.js +4632 -4636
  89. package/dist/br/data/mun/GO.js.map +1 -1
  90. package/dist/br/data/mun/MA.cjs +1 -1
  91. package/dist/br/data/mun/MA.cjs.map +1 -1
  92. package/dist/br/data/mun/MA.js +3603 -3457
  93. package/dist/br/data/mun/MA.js.map +1 -1
  94. package/dist/br/data/mun/MG.cjs +1 -1
  95. package/dist/br/data/mun/MG.cjs.map +1 -1
  96. package/dist/br/data/mun/MG.js +12716 -11739
  97. package/dist/br/data/mun/MG.js.map +1 -1
  98. package/dist/br/data/mun/MS.cjs +1 -1
  99. package/dist/br/data/mun/MS.cjs.map +1 -1
  100. package/dist/br/data/mun/MS.js +2182 -2335
  101. package/dist/br/data/mun/MS.js.map +1 -1
  102. package/dist/br/data/mun/MT.cjs +1 -1
  103. package/dist/br/data/mun/MT.cjs.map +1 -1
  104. package/dist/br/data/mun/MT.js +4808 -4896
  105. package/dist/br/data/mun/MT.js.map +1 -1
  106. package/dist/br/data/mun/PA.cjs +1 -1
  107. package/dist/br/data/mun/PA.cjs.map +1 -1
  108. package/dist/br/data/mun/PA.js +4981 -4901
  109. package/dist/br/data/mun/PA.js.map +1 -1
  110. package/dist/br/data/mun/PB.cjs +1 -1
  111. package/dist/br/data/mun/PB.cjs.map +1 -1
  112. package/dist/br/data/mun/PB.js +2418 -1956
  113. package/dist/br/data/mun/PB.js.map +1 -1
  114. package/dist/br/data/mun/PE.cjs +1 -1
  115. package/dist/br/data/mun/PE.cjs.map +1 -1
  116. package/dist/br/data/mun/PE.js +2164 -1987
  117. package/dist/br/data/mun/PE.js.map +1 -1
  118. package/dist/br/data/mun/PI.cjs +1 -1
  119. package/dist/br/data/mun/PI.cjs.map +1 -1
  120. package/dist/br/data/mun/PI.js +2982 -2844
  121. package/dist/br/data/mun/PI.js.map +1 -1
  122. package/dist/br/data/mun/PR.cjs +1 -1
  123. package/dist/br/data/mun/PR.cjs.map +1 -1
  124. package/dist/br/data/mun/PR.js +5425 -5240
  125. package/dist/br/data/mun/PR.js.map +1 -1
  126. package/dist/br/data/mun/RJ.cjs +1 -1
  127. package/dist/br/data/mun/RJ.cjs.map +1 -1
  128. package/dist/br/data/mun/RJ.js +1395 -1178
  129. package/dist/br/data/mun/RJ.js.map +1 -1
  130. package/dist/br/data/mun/RN.cjs +1 -1
  131. package/dist/br/data/mun/RN.cjs.map +1 -1
  132. package/dist/br/data/mun/RN.js +1608 -1382
  133. package/dist/br/data/mun/RN.js.map +1 -1
  134. package/dist/br/data/mun/RO.cjs +1 -1
  135. package/dist/br/data/mun/RO.cjs.map +1 -1
  136. package/dist/br/data/mun/RO.js +1392 -1470
  137. package/dist/br/data/mun/RO.js.map +1 -1
  138. package/dist/br/data/mun/RR.cjs +1 -1
  139. package/dist/br/data/mun/RR.cjs.map +1 -1
  140. package/dist/br/data/mun/RR.js +795 -778
  141. package/dist/br/data/mun/RR.js.map +1 -1
  142. package/dist/br/data/mun/RS.cjs +1 -1
  143. package/dist/br/data/mun/RS.cjs.map +1 -1
  144. package/dist/br/data/mun/RS.js +7579 -6424
  145. package/dist/br/data/mun/RS.js.map +1 -1
  146. package/dist/br/data/mun/SC.cjs +1 -1
  147. package/dist/br/data/mun/SC.cjs.map +1 -1
  148. package/dist/br/data/mun/SC.js +3979 -3357
  149. package/dist/br/data/mun/SC.js.map +1 -1
  150. package/dist/br/data/mun/SE.cjs +1 -1
  151. package/dist/br/data/mun/SE.cjs.map +1 -1
  152. package/dist/br/data/mun/SE.js +812 -625
  153. package/dist/br/data/mun/SE.js.map +1 -1
  154. package/dist/br/data/mun/SP.cjs +1 -1
  155. package/dist/br/data/mun/SP.cjs.map +1 -1
  156. package/dist/br/data/mun/SP.js +7866 -6803
  157. package/dist/br/data/mun/SP.js.map +1 -1
  158. package/dist/br/data/mun/TO.cjs +1 -1
  159. package/dist/br/data/mun/TO.cjs.map +1 -1
  160. package/dist/br/data/mun/TO.js +2763 -2817
  161. package/dist/br/data/mun/TO.js.map +1 -1
  162. package/dist/br/locations.cjs +1 -1
  163. package/dist/br/locations.cjs.map +1 -1
  164. package/dist/br/locations.js +97 -24
  165. package/dist/br/locations.js.map +1 -1
  166. package/dist/br/scales.cjs +1 -1
  167. package/dist/br/scales.cjs.map +1 -1
  168. package/dist/br/scales.js +8 -4
  169. package/dist/br/scales.js.map +1 -1
  170. package/dist/br/whatsapp.cjs +2 -0
  171. package/dist/br/whatsapp.cjs.map +1 -0
  172. package/dist/br/whatsapp.js +21 -0
  173. package/dist/br/whatsapp.js.map +1 -0
  174. package/dist/br.cjs +1 -1
  175. package/dist/br.cjs.map +1 -1
  176. package/dist/br.d.ts +188 -10
  177. package/dist/br.js +18 -17
  178. package/dist/br.js.map +1 -1
  179. package/dist/components/BottomSheet/BottomSheet.cjs +1 -1
  180. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  181. package/dist/components/BottomSheet/BottomSheet.js +30 -27
  182. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  183. package/dist/components/Command/Command.cjs +1 -1
  184. package/dist/components/Command/Command.cjs.map +1 -1
  185. package/dist/components/Command/Command.js +78 -75
  186. package/dist/components/Command/Command.js.map +1 -1
  187. package/dist/components/Drawer/Drawer.cjs +1 -1
  188. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  189. package/dist/components/Drawer/Drawer.js +42 -39
  190. package/dist/components/Drawer/Drawer.js.map +1 -1
  191. package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
  192. package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  193. package/dist/components/DropdownMenu/DropdownMenu.js +111 -67
  194. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  195. package/dist/components/Modal/Modal.cjs +1 -1
  196. package/dist/components/Modal/Modal.cjs.map +1 -1
  197. package/dist/components/Modal/Modal.js +45 -42
  198. package/dist/components/Modal/Modal.js.map +1 -1
  199. package/dist/components/Money/Money.cjs +1 -1
  200. package/dist/components/Money/Money.cjs.map +1 -1
  201. package/dist/components/Money/Money.js +10 -9
  202. package/dist/components/Money/Money.js.map +1 -1
  203. package/dist/components/Pagination/Pagination.cjs +1 -1
  204. package/dist/components/Pagination/Pagination.cjs.map +1 -1
  205. package/dist/components/Pagination/Pagination.js +38 -31
  206. package/dist/components/Pagination/Pagination.js.map +1 -1
  207. package/dist/components/Pagination/Pagination.module.cjs +1 -1
  208. package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
  209. package/dist/components/Pagination/Pagination.module.js +4 -4
  210. package/dist/components/Pagination/Pagination.module.js.map +1 -1
  211. package/dist/components/Portal/Portal.cjs +1 -1
  212. package/dist/components/Portal/Portal.cjs.map +1 -1
  213. package/dist/components/Portal/Portal.js +9 -6
  214. package/dist/components/Portal/Portal.js.map +1 -1
  215. package/dist/components/Portal/portal-host.cjs +2 -0
  216. package/dist/components/Portal/portal-host.cjs.map +1 -0
  217. package/dist/components/Portal/portal-host.js +11 -0
  218. package/dist/components/Portal/portal-host.js.map +1 -0
  219. package/dist/components/RangeSlider/RangeSlider.cjs +1 -1
  220. package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
  221. package/dist/components/RangeSlider/RangeSlider.js +23 -23
  222. package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
  223. package/dist/components/Scheduler/Scheduler.cjs +1 -1
  224. package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
  225. package/dist/components/Scheduler/Scheduler.js +83 -82
  226. package/dist/components/Scheduler/Scheduler.js.map +1 -1
  227. package/dist/components/Slider/Slider.cjs +1 -1
  228. package/dist/components/Slider/Slider.cjs.map +1 -1
  229. package/dist/components/Slider/Slider.js +9 -9
  230. package/dist/components/Slider/Slider.js.map +1 -1
  231. package/dist/components/Toast/ToastProvider.cjs +1 -1
  232. package/dist/components/Toast/ToastProvider.cjs.map +1 -1
  233. package/dist/components/Toast/ToastProvider.js +55 -53
  234. package/dist/components/Toast/ToastProvider.js.map +1 -1
  235. package/dist/components/VirtualList/VirtualList.cjs +1 -1
  236. package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
  237. package/dist/components/VirtualList/VirtualList.js +41 -31
  238. package/dist/components/VirtualList/VirtualList.js.map +1 -1
  239. package/dist/components/VirtualTable/VirtualTable.cjs +1 -1
  240. package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
  241. package/dist/components/VirtualTable/VirtualTable.js +78 -68
  242. package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
  243. package/dist/forms/FormField.cjs +1 -1
  244. package/dist/forms/FormField.cjs.map +1 -1
  245. package/dist/forms/FormField.js +23 -21
  246. package/dist/forms/FormField.js.map +1 -1
  247. package/dist/forms/masked-inputs.cjs +1 -1
  248. package/dist/forms/masked-inputs.cjs.map +1 -1
  249. package/dist/forms/masked-inputs.js +20 -19
  250. package/dist/forms/masked-inputs.js.map +1 -1
  251. package/dist/hooks/use-fullscreen-element.cjs +2 -0
  252. package/dist/hooks/use-fullscreen-element.cjs.map +1 -0
  253. package/dist/hooks/use-fullscreen-element.js +20 -0
  254. package/dist/hooks/use-fullscreen-element.js.map +1 -0
  255. package/dist/hooks/use-fullscreen.cjs +2 -0
  256. package/dist/hooks/use-fullscreen.cjs.map +1 -0
  257. package/dist/hooks/use-fullscreen.js +66 -0
  258. package/dist/hooks/use-fullscreen.js.map +1 -0
  259. package/dist/hooks/use-push-to-talk.cjs +2 -0
  260. package/dist/hooks/use-push-to-talk.cjs.map +1 -0
  261. package/dist/hooks/use-push-to-talk.js +61 -0
  262. package/dist/hooks/use-push-to-talk.js.map +1 -0
  263. package/dist/http/describe-api-error.cjs.map +1 -1
  264. package/dist/http/describe-api-error.js.map +1 -1
  265. package/dist/http/errors.cjs +1 -1
  266. package/dist/http/errors.cjs.map +1 -1
  267. package/dist/http/errors.js +34 -16
  268. package/dist/http/errors.js.map +1 -1
  269. package/dist/http/parse-response.cjs +2 -2
  270. package/dist/http/parse-response.cjs.map +1 -1
  271. package/dist/http/parse-response.js +9 -8
  272. package/dist/http/parse-response.js.map +1 -1
  273. package/dist/i18n/create-i18n.cjs +1 -1
  274. package/dist/i18n/create-i18n.cjs.map +1 -1
  275. package/dist/i18n/create-i18n.js +28 -27
  276. package/dist/i18n/create-i18n.js.map +1 -1
  277. package/dist/query/QueryProvider.cjs +1 -1
  278. package/dist/query/QueryProvider.cjs.map +1 -1
  279. package/dist/query/QueryProvider.js +13 -11
  280. package/dist/query/QueryProvider.js.map +1 -1
  281. package/dist/query/foreign-client-warning.cjs +2 -0
  282. package/dist/query/foreign-client-warning.cjs.map +1 -0
  283. package/dist/query/foreign-client-warning.js +12 -0
  284. package/dist/query/foreign-client-warning.js.map +1 -0
  285. package/dist/router/AppRouter.cjs +1 -1
  286. package/dist/router/AppRouter.cjs.map +1 -1
  287. package/dist/router/AppRouter.js +28 -21
  288. package/dist/router/AppRouter.js.map +1 -1
  289. package/dist/router/RouteGuard.cjs +1 -1
  290. package/dist/router/RouteGuard.cjs.map +1 -1
  291. package/dist/router/RouteGuard.js +4 -4
  292. package/dist/router/RouteGuard.js.map +1 -1
  293. package/dist/sse/create-event-stream.cjs +1 -1
  294. package/dist/sse/create-event-stream.cjs.map +1 -1
  295. package/dist/sse/create-event-stream.js +34 -38
  296. package/dist/sse/create-event-stream.js.map +1 -1
  297. package/dist/styles/AIChat.css +79 -0
  298. package/dist/styles/Accordion.css +12 -0
  299. package/dist/styles/Alert.css +32 -0
  300. package/dist/styles/AppBar.css +17 -0
  301. package/dist/styles/AppShell.css +8 -0
  302. package/dist/styles/AspectRatio.css +3 -0
  303. package/dist/styles/AudioPlayer.css +13 -0
  304. package/dist/styles/AudioRecorder.css +20 -0
  305. package/dist/styles/Avatar.css +13 -0
  306. package/dist/styles/AvatarGroup.css +18 -0
  307. package/dist/styles/Badge.css +25 -0
  308. package/dist/styles/Banner.css +13 -0
  309. package/dist/styles/BarList.css +10 -0
  310. package/dist/styles/BarcodeScanner.css +21 -0
  311. package/dist/styles/BottomNavigation.css +10 -0
  312. package/dist/styles/BottomSheet.css +11 -0
  313. package/dist/styles/BrazilMap.css +20 -0
  314. package/dist/styles/Breadcrumbs.css +8 -0
  315. package/dist/styles/Button.css +42 -0
  316. package/dist/styles/Calendar.css +16 -0
  317. package/dist/styles/Card.css +15 -0
  318. package/dist/styles/Carousel.css +17 -0
  319. package/dist/styles/Center.css +5 -0
  320. package/dist/styles/Chat.css +35 -0
  321. package/dist/styles/Checkbox.css +11 -0
  322. package/dist/styles/ChipInput.css +13 -0
  323. package/dist/styles/CodeBlock.css +25 -0
  324. package/dist/styles/Collapsible.css +6 -0
  325. package/dist/styles/Combobox.css +18 -0
  326. package/dist/styles/Command.css +20 -0
  327. package/dist/styles/ContextMenu.css +11 -0
  328. package/dist/styles/CopyButton.css +4 -0
  329. package/dist/styles/DataList.css +3 -0
  330. package/dist/styles/DataTable.css +19 -0
  331. package/dist/styles/DateRangePicker.css +22 -0
  332. package/dist/styles/DescriptionList.css +4 -0
  333. package/dist/styles/Divider.css +11 -0
  334. package/dist/styles/Drawer.css +22 -0
  335. package/dist/styles/DropdownMenu.css +16 -0
  336. package/dist/styles/Dropzone.css +7 -0
  337. package/dist/styles/EmptyState.css +6 -0
  338. package/dist/styles/ErrorState.css +6 -0
  339. package/dist/styles/ErrorText.css +2 -0
  340. package/dist/styles/FileUpload.css +17 -0
  341. package/dist/styles/FilterBar.css +19 -0
  342. package/dist/styles/FloatingActionButton.css +23 -0
  343. package/dist/styles/Form.css +21 -0
  344. package/dist/styles/HoverCard.css +11 -0
  345. package/dist/styles/IconPicker.css +6 -0
  346. package/dist/styles/Image.css +2 -0
  347. package/dist/styles/ImageCropper.css +16 -0
  348. package/dist/styles/Input.css +24 -0
  349. package/dist/styles/InstallBanner.css +8 -0
  350. package/dist/styles/Kanban.css +15 -0
  351. package/dist/styles/Kbd.css +5 -0
  352. package/dist/styles/Label.css +3 -0
  353. package/dist/styles/Layout.css +22 -0
  354. package/dist/styles/Lightbox.css +21 -0
  355. package/dist/styles/ListTile.css +14 -0
  356. package/dist/styles/MapLegend.css +9 -0
  357. package/dist/styles/Markdown.css +24 -0
  358. package/dist/styles/Masonry.css +4 -0
  359. package/dist/styles/Menubar.css +17 -0
  360. package/dist/styles/Modal.css +21 -0
  361. package/dist/styles/ModalsManager.css +2 -0
  362. package/dist/styles/MultiSelect.css +21 -0
  363. package/dist/styles/MunicipalitySearch.css +6 -0
  364. package/dist/styles/NProgress.css +2 -0
  365. package/dist/styles/Navbar.css +10 -0
  366. package/dist/styles/NavigationMenu.css +12 -0
  367. package/dist/styles/NavigationRail.css +14 -0
  368. package/dist/styles/NotificationCenter.css +21 -0
  369. package/dist/styles/OfflineIndicator.css +7 -0
  370. package/dist/styles/Page.css +13 -0
  371. package/dist/styles/Pagination.css +12 -0
  372. package/dist/styles/PasswordInput.css +21 -0
  373. package/dist/styles/PinInput.css +13 -0
  374. package/dist/styles/PixQRCode.css +9 -0
  375. package/dist/styles/Popover.css +10 -0
  376. package/dist/styles/Progress.css +11 -0
  377. package/dist/styles/QRCode.css +3 -0
  378. package/dist/styles/Radio.css +14 -0
  379. package/dist/styles/RangeSlider.css +15 -0
  380. package/dist/styles/RatingStars.css +11 -0
  381. package/dist/styles/RefreshIndicator.css +5 -0
  382. package/dist/styles/Resizable.css +13 -0
  383. package/dist/styles/RichTextEditor.css +19 -0
  384. package/dist/styles/SafeArea.css +7 -0
  385. package/dist/styles/Scheduler.css +24 -0
  386. package/dist/styles/ScrollArea.css +7 -0
  387. package/dist/styles/SearchBar.css +11 -0
  388. package/dist/styles/SegmentedControl.css +12 -0
  389. package/dist/styles/Select.css +14 -0
  390. package/dist/styles/Sidebar.css +19 -0
  391. package/dist/styles/SignaturePad.css +6 -0
  392. package/dist/styles/Skeleton.css +7 -0
  393. package/dist/styles/Slider.css +15 -0
  394. package/dist/styles/Spacer.css +4 -0
  395. package/dist/styles/Sparkline.css +4 -0
  396. package/dist/styles/Spinner.css +12 -0
  397. package/dist/styles/Stat.css +12 -0
  398. package/dist/styles/Stepper.css +17 -0
  399. package/dist/styles/StepperInput.css +15 -0
  400. package/dist/styles/Switch.css +11 -0
  401. package/dist/styles/SyncStatusBadge.css +13 -0
  402. package/dist/styles/Table.css +16 -0
  403. package/dist/styles/Tabs.css +14 -0
  404. package/dist/styles/Tag.css +14 -0
  405. package/dist/styles/Textarea.css +13 -0
  406. package/dist/styles/TimePicker.css +14 -0
  407. package/dist/styles/Timeline.css +17 -0
  408. package/dist/styles/Toast.css +21 -0
  409. package/dist/styles/Toggle.css +12 -0
  410. package/dist/styles/ToggleGroup.css +9 -0
  411. package/dist/styles/Tooltip.css +10 -0
  412. package/dist/styles/Tour.css +20 -0
  413. package/dist/styles/TrajectoryMap.css +16 -0
  414. package/dist/styles/Transfer.css +21 -0
  415. package/dist/styles/TreeView.css +17 -0
  416. package/dist/styles/TruncateText.css +2 -0
  417. package/dist/styles/UpdatePrompt.css +10 -0
  418. package/dist/styles/VirtualList.css +5 -0
  419. package/dist/styles/VirtualTable.css +17 -0
  420. package/dist/styles/VisuallyHidden.css +2 -0
  421. package/dist/styles/Wizard.css +4 -0
  422. package/dist/styles/actions.css +104 -0
  423. package/dist/styles/advanced.css +66 -0
  424. package/dist/styles/br.css +41 -0
  425. package/dist/styles/chat.css +113 -0
  426. package/dist/styles/core.css +40 -0
  427. package/dist/styles/data.css +222 -0
  428. package/dist/styles/editor.css +19 -0
  429. package/dist/styles/feedback.css +201 -0
  430. package/dist/styles/forms.css +321 -0
  431. package/dist/styles/geo.css +16 -0
  432. package/dist/styles/icons.css +6 -0
  433. package/dist/styles/identity.css +48 -0
  434. package/dist/styles/layout.css +122 -0
  435. package/dist/styles/media.css +52 -0
  436. package/dist/styles/navigation.css +167 -0
  437. package/dist/styles/overlay.css +73 -0
  438. package/dist/styles/utility.css +39 -0
  439. package/dist/styles.css +1 -1
  440. package/dist/sw/register-service-worker.cjs +1 -1
  441. package/dist/sw/register-service-worker.cjs.map +1 -1
  442. package/dist/sw/register-service-worker.js +21 -17
  443. package/dist/sw/register-service-worker.js.map +1 -1
  444. package/dist/sw.d.ts +17 -1
  445. package/dist/tempest-react-sdk.cjs +1 -1
  446. package/dist/tempest-react-sdk.d.ts +1382 -76
  447. package/dist/tempest-react-sdk.js +293 -281
  448. package/dist/utils/dev-mode.cjs.map +1 -1
  449. package/dist/utils/dev-mode.js.map +1 -1
  450. package/dist/utils/duplicate-instance.cjs +2 -0
  451. package/dist/utils/duplicate-instance.cjs.map +1 -0
  452. package/dist/utils/duplicate-instance.js +6 -0
  453. package/dist/utils/duplicate-instance.js.map +1 -0
  454. package/dist/utils/format.cjs +1 -1
  455. package/dist/utils/format.cjs.map +1 -1
  456. package/dist/utils/format.js +22 -14
  457. package/dist/utils/format.js.map +1 -1
  458. package/dist/utils/intl-cache.cjs +2 -0
  459. package/dist/utils/intl-cache.cjs.map +1 -0
  460. package/dist/utils/intl-cache.js +23 -0
  461. package/dist/utils/intl-cache.js.map +1 -0
  462. package/dist/utils/json-frame.cjs +2 -0
  463. package/dist/utils/json-frame.cjs.map +1 -0
  464. package/dist/utils/json-frame.js +30 -0
  465. package/dist/utils/json-frame.js.map +1 -0
  466. package/dist/utils/numbers.cjs +1 -1
  467. package/dist/utils/numbers.cjs.map +1 -1
  468. package/dist/utils/numbers.js +8 -7
  469. package/dist/utils/numbers.js.map +1 -1
  470. package/dist/vision/results.cjs +1 -1
  471. package/dist/vision/results.cjs.map +1 -1
  472. package/dist/vision/results.js +26 -17
  473. package/dist/vision/results.js.map +1 -1
  474. package/dist/vision.d.ts +29 -0
  475. package/dist/vite/tempest-icons.cjs +1 -1
  476. package/dist/vite/tempest-icons.cjs.map +1 -1
  477. package/dist/vite/tempest-icons.js +1 -1
  478. package/dist/vite/tempest-icons.js.map +1 -1
  479. package/dist/webrtc/link-stats.cjs +2 -0
  480. package/dist/webrtc/link-stats.cjs.map +1 -0
  481. package/dist/webrtc/link-stats.js +74 -0
  482. package/dist/webrtc/link-stats.js.map +1 -0
  483. package/dist/webrtc/opus-sdp.cjs +3 -0
  484. package/dist/webrtc/opus-sdp.cjs.map +1 -0
  485. package/dist/webrtc/opus-sdp.js +94 -0
  486. package/dist/webrtc/opus-sdp.js.map +1 -0
  487. package/dist/webrtc/sender-bitrate.cjs +2 -0
  488. package/dist/webrtc/sender-bitrate.cjs.map +1 -0
  489. package/dist/webrtc/sender-bitrate.js +15 -0
  490. package/dist/webrtc/sender-bitrate.js.map +1 -0
  491. package/dist/webrtc/use-link-stats.cjs +2 -0
  492. package/dist/webrtc/use-link-stats.cjs.map +1 -0
  493. package/dist/webrtc/use-link-stats.js +22 -0
  494. package/dist/webrtc/use-link-stats.js.map +1 -0
  495. package/dist/ws/create-web-socket.cjs +1 -1
  496. package/dist/ws/create-web-socket.cjs.map +1 -1
  497. package/dist/ws/create-web-socket.js +130 -58
  498. package/dist/ws/create-web-socket.js.map +1 -1
  499. package/dist/ws/resilience.cjs +2 -0
  500. package/dist/ws/resilience.cjs.map +1 -0
  501. package/dist/ws/resilience.js +21 -0
  502. package/dist/ws/resilience.js.map +1 -0
  503. package/dist/ws/use-web-socket.cjs +1 -1
  504. package/dist/ws/use-web-socket.cjs.map +1 -1
  505. package/dist/ws/use-web-socket.js +47 -39
  506. package/dist/ws/use-web-socket.js.map +1 -1
  507. package/package.json +5 -2
@@ -1 +1 @@
1
- {"version":3,"file":"create-event-stream.cjs","names":[],"sources":["../../src/sse/create-event-stream.ts"],"sourcesContent":["/**\n * @tempest-limits function-lines — the body is the SSE line protocol — accumulate\n * `data:` lines until a blank line, track `id:` for Last-Event-ID, honour `retry:` —\n * plus the reconnect that uses the id it just tracked.\n */\nexport type EventStreamStatus = \"idle\" | \"connecting\" | \"open\" | \"closed\" | \"error\";\n\nexport interface EventStreamMessage<T> {\n /** Server-named event (default `\"message\"`). */\n event: string;\n /** Parsed payload — JSON-decoded when possible, raw string otherwise. */\n data: T;\n /** Server-supplied id, if any. */\n id?: string;\n /** Raw `MessageEvent` for advanced cases. */\n raw: MessageEvent;\n}\n\nexport interface CreateEventStreamOptions<T> {\n /** Send cookies with the EventSource handshake. Default: false. */\n withCredentials?: boolean;\n /** Subscribe to named events in addition to `message`. */\n namedEvents?: readonly string[];\n /** Treat these named events as heartbeat-only (no callback). Default: `[\"ping\"]`. */\n heartbeatEvents?: readonly string[];\n /** Max reconnect attempts. Default: 10. Pass 0 to disable reconnect. */\n maxRetries?: number;\n /** Initial backoff in ms; doubles per attempt, capped at `maxBackoff`. Default: 1000. */\n initialBackoff?: number;\n /** Maximum backoff in ms. Default: 30000. */\n maxBackoff?: number;\n /** Parse `event.data`. Defaults to JSON with raw-string fallback. */\n parser?: (raw: string) => T;\n onOpen?: () => void;\n onMessage?: (message: EventStreamMessage<T>) => void;\n onError?: (error: Event) => void;\n onStatusChange?: (status: EventStreamStatus) => void;\n}\n\nexport interface EventStreamController {\n close: () => void;\n /** Force an immediate reconnect, resetting the retry counter. */\n reconnect: () => void;\n /** Current connection status. */\n readonly status: EventStreamStatus;\n}\n\nfunction defaultParser<T>(raw: string): T {\n try {\n return JSON.parse(raw) as T;\n } catch {\n return raw as unknown as T;\n }\n}\n\n/**\n * Open a Server-Sent Events stream with automatic exponential-backoff reconnect.\n *\n * Heartbeat events (default `\"ping\"`) keep the socket alive without firing\n * `onMessage`. Pass `withCredentials: true` when the backend authenticates via\n * cookies. Call `close()` from the returned controller to tear down.\n *\n * @param url - Full SSE endpoint URL.\n * @param options - Stream configuration and callbacks.\n * @returns A controller exposing `close`, `reconnect` and the current `status`.\n */\nexport function createEventStream<T = unknown>(\n url: string,\n options: CreateEventStreamOptions<T> = {},\n): EventStreamController {\n const {\n withCredentials = false,\n namedEvents = [],\n heartbeatEvents = [\"ping\"],\n maxRetries = 10,\n initialBackoff = 1000,\n maxBackoff = 30000,\n parser = defaultParser<T>,\n onOpen,\n onMessage,\n onError,\n onStatusChange,\n } = options;\n\n let source: EventSource | null = null;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n let retries = 0;\n let status: EventStreamStatus = \"idle\";\n let closed = false;\n\n function setStatus(next: EventStreamStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function emit(eventName: string, event: MessageEvent): void {\n if (heartbeatEvents.includes(eventName)) return;\n onMessage?.({\n event: eventName,\n data: parser(event.data),\n id: event.lastEventId || undefined,\n raw: event,\n });\n }\n\n function scheduleReconnect(): void {\n if (closed) return;\n if (retries >= maxRetries) {\n setStatus(\"error\");\n return;\n }\n const delay = Math.min(initialBackoff * 2 ** retries, maxBackoff);\n retries += 1;\n retryTimer = setTimeout(connect, delay);\n }\n\n function connect(): void {\n if (closed) return;\n if (source) source.close();\n setStatus(\"connecting\");\n\n const es = new EventSource(url, { withCredentials });\n source = es;\n\n es.onopen = () => {\n retries = 0;\n setStatus(\"open\");\n onOpen?.();\n };\n\n es.onmessage = (event) => emit(\"message\", event);\n for (const name of namedEvents) {\n es.addEventListener(name, (event) => emit(name, event as MessageEvent));\n }\n for (const name of heartbeatEvents) {\n es.addEventListener(name, () => {\n /* heartbeat — keep socket alive */\n });\n }\n\n es.onerror = (event) => {\n onError?.(event);\n es.close();\n source = null;\n setStatus(\"closed\");\n scheduleReconnect();\n };\n }\n\n function close(): void {\n closed = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n if (source) {\n source.close();\n source = null;\n }\n setStatus(\"closed\");\n }\n\n function reconnect(): void {\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n closed = false;\n connect();\n }\n\n connect();\n\n return {\n close,\n reconnect,\n get status() {\n return status;\n },\n };\n}\n"],"mappings":"AA+CA,SAAS,EAAiB,EAAgB,CACtC,GAAI,CACA,OAAO,KAAK,MAAM,CAAG,CACzB,MAAQ,CACJ,OAAO,CACX,CACJ,CAaA,SAAgB,EACZ,EACA,EAAuC,CAAC,EACnB,CACrB,GAAM,CACF,kBAAkB,GAClB,cAAc,CAAC,EACf,kBAAkB,CAAC,MAAM,EACzB,aAAa,GACb,iBAAiB,IACjB,aAAa,IACb,SAAS,EACT,SACA,YACA,UACA,kBACA,EAEA,EAA6B,KAC7B,EAAmD,KACnD,EAAU,EACV,EAA4B,OAC5B,EAAS,GAEb,SAAS,EAAU,EAA+B,CAC1C,IAAW,IACf,EAAS,EACT,IAAiB,CAAI,EACzB,CAEA,SAAS,EAAK,EAAmB,EAA2B,CACpD,EAAgB,SAAS,CAAS,GACtC,IAAY,CACR,MAAO,EACP,KAAM,EAAO,EAAM,IAAI,EACvB,GAAI,EAAM,aAAe,IAAA,GACzB,IAAK,CACT,CAAC,CACL,CAEA,SAAS,GAA0B,CAC/B,GAAI,EAAQ,OACZ,GAAI,GAAW,EAAY,CACvB,EAAU,OAAO,EACjB,MACJ,CACA,IAAM,EAAQ,KAAK,IAAI,EAAiB,GAAK,EAAS,CAAU,EAChE,GAAW,EACX,EAAa,WAAW,EAAS,CAAK,CAC1C,CAEA,SAAS,GAAgB,CACrB,GAAI,EAAQ,OACR,GAAQ,EAAO,MAAM,EACzB,EAAU,YAAY,EAEtB,IAAM,EAAK,IAAI,YAAY,EAAK,CAAE,iBAAgB,CAAC,EACnD,EAAS,EAET,EAAG,WAAe,CACd,EAAU,EACV,EAAU,MAAM,EAChB,IAAS,CACb,EAEA,EAAG,UAAa,GAAU,EAAK,UAAW,CAAK,EAC/C,IAAK,IAAM,KAAQ,EACf,EAAG,iBAAiB,EAAO,GAAU,EAAK,EAAM,CAAqB,CAAC,EAE1E,IAAK,IAAM,KAAQ,EACf,EAAG,iBAAiB,MAAY,CAEhC,CAAC,EAGL,EAAG,QAAW,GAAU,CACpB,IAAU,CAAK,EACf,EAAG,MAAM,EACT,EAAS,KACT,EAAU,QAAQ,EAClB,EAAkB,CACtB,CACJ,CAEA,SAAS,GAAc,CACnB,EAAS,GACT,AAEI,KADA,aAAa,CAAU,EACV,MAEjB,EAAU,EACV,AAEI,KADA,EAAO,MAAM,EACJ,MAEb,EAAU,QAAQ,CACtB,CAEA,SAAS,GAAkB,CACvB,AAEI,KADA,aAAa,CAAU,EACV,MAEjB,EAAU,EACV,EAAS,GACT,EAAQ,CACZ,CAIA,OAFA,EAAQ,EAED,CACH,QACA,YACA,IAAI,QAAS,CACT,OAAO,CACX,CACJ,CACJ"}
1
+ {"version":3,"file":"create-event-stream.cjs","names":[],"sources":["../../src/sse/create-event-stream.ts"],"sourcesContent":["/**\n * @tempest-limits function-lines — the body is the SSE line protocol — accumulate\n * `data:` lines until a blank line, track `id:` for Last-Event-ID, honour `retry:` —\n * plus the reconnect that uses the id it just tracked.\n */\nimport { decodeFrame } from \"../utils/json-frame\";\nexport type EventStreamStatus = \"idle\" | \"connecting\" | \"open\" | \"closed\" | \"error\";\n\nexport interface EventStreamMessage<T> {\n /** Server-named event (default `\"message\"`). */\n event: string;\n /** Parsed payload — JSON-decoded when possible, raw string otherwise. */\n data: T;\n /** Server-supplied id, if any. */\n id?: string;\n /** Raw `MessageEvent` for advanced cases. */\n raw: MessageEvent;\n}\n\nexport interface CreateEventStreamOptions<T> {\n /** Send cookies with the EventSource handshake. Default: false. */\n withCredentials?: boolean;\n /** Subscribe to named events in addition to `message`. */\n namedEvents?: readonly string[];\n /** Treat these named events as heartbeat-only (no callback). Default: `[\"ping\"]`. */\n heartbeatEvents?: readonly string[];\n /** Max reconnect attempts. Default: 10. Pass 0 to disable reconnect. */\n maxRetries?: number;\n /** Initial backoff in ms; doubles per attempt, capped at `maxBackoff`. Default: 1000. */\n initialBackoff?: number;\n /** Maximum backoff in ms. Default: 30000. */\n maxBackoff?: number;\n /** Parse `event.data`. Defaults to JSON with raw-string fallback. */\n parser?: (raw: string) => T;\n /**\n * A frame arrived that is not valid JSON, and no `parser` was supplied.\n *\n * Registering this drops the frame instead of delivering it: the previous\n * behaviour handed `onMessage` the raw `string` announced as your message\n * type, so the failure surfaced later, at the first property access, with\n * nothing left pointing at the parse. Leave it out and that behaviour is\n * kept, with a one-time warning in development builds.\n */\n onParseError?: (error: unknown, raw: string) => void;\n onOpen?: () => void;\n onMessage?: (message: EventStreamMessage<T>) => void;\n onError?: (error: Event) => void;\n onStatusChange?: (status: EventStreamStatus) => void;\n}\n\nexport interface EventStreamController {\n close: () => void;\n /** Force an immediate reconnect, resetting the retry counter. */\n reconnect: () => void;\n /** Current connection status. */\n readonly status: EventStreamStatus;\n}\n\n/**\n * Open a Server-Sent Events stream with automatic exponential-backoff reconnect.\n *\n * Heartbeat events (default `\"ping\"`) keep the socket alive without firing\n * `onMessage`. Pass `withCredentials: true` when the backend authenticates via\n * cookies. Call `close()` from the returned controller to tear down.\n *\n * @param url - Full SSE endpoint URL.\n * @param options - Stream configuration and callbacks.\n * @returns A controller exposing `close`, `reconnect` and the current `status`.\n */\nexport function createEventStream<T = unknown>(\n url: string,\n options: CreateEventStreamOptions<T> = {},\n): EventStreamController {\n const {\n withCredentials = false,\n namedEvents = [],\n heartbeatEvents = [\"ping\"],\n maxRetries = 10,\n initialBackoff = 1000,\n maxBackoff = 30000,\n parser,\n onOpen,\n onMessage,\n onError,\n onParseError,\n onStatusChange,\n } = options;\n\n let source: EventSource | null = null;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n let retries = 0;\n let status: EventStreamStatus = \"idle\";\n let closed = false;\n\n function setStatus(next: EventStreamStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function emit(eventName: string, event: MessageEvent): void {\n if (heartbeatEvents.includes(eventName)) return;\n const decoded = decodeFrame<T>(\n typeof event.data === \"string\" ? event.data : \"\",\n parser,\n onParseError,\n \"createEventStream\",\n );\n if (!decoded.delivered) return;\n onMessage?.({\n event: eventName,\n data: decoded.data,\n id: event.lastEventId || undefined,\n raw: event,\n });\n }\n\n function scheduleReconnect(): void {\n if (closed) return;\n if (retries >= maxRetries) {\n setStatus(\"error\");\n return;\n }\n const delay = Math.min(initialBackoff * 2 ** retries, maxBackoff);\n retries += 1;\n retryTimer = setTimeout(connect, delay);\n }\n\n function connect(): void {\n if (closed) return;\n if (source) source.close();\n setStatus(\"connecting\");\n\n const es = new EventSource(url, { withCredentials });\n source = es;\n\n es.onopen = () => {\n retries = 0;\n setStatus(\"open\");\n onOpen?.();\n };\n\n es.onmessage = (event) => emit(\"message\", event);\n for (const name of namedEvents) {\n es.addEventListener(name, (event) => emit(name, event as MessageEvent));\n }\n for (const name of heartbeatEvents) {\n es.addEventListener(name, () => {\n /* heartbeat — keep socket alive */\n });\n }\n\n es.onerror = (event) => {\n onError?.(event);\n es.close();\n source = null;\n setStatus(\"closed\");\n scheduleReconnect();\n };\n }\n\n function close(): void {\n closed = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n if (source) {\n source.close();\n source = null;\n }\n setStatus(\"closed\");\n }\n\n function reconnect(): void {\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n closed = false;\n connect();\n }\n\n connect();\n\n return {\n close,\n reconnect,\n get status() {\n return status;\n },\n };\n}\n"],"mappings":"2CAqEA,SAAgB,EACZ,EACA,EAAuC,CAAC,EACnB,CACrB,GAAM,CACF,kBAAkB,GAClB,cAAc,CAAC,EACf,kBAAkB,CAAC,MAAM,EACzB,aAAa,GACb,iBAAiB,IACjB,aAAa,IACb,SACA,SACA,YACA,UACA,eACA,kBACA,EAEA,EAA6B,KAC7B,EAAmD,KACnD,EAAU,EACV,EAA4B,OAC5B,EAAS,GAEb,SAAS,EAAU,EAA+B,CAC1C,IAAW,IACf,EAAS,EACT,IAAiB,CAAI,EACzB,CAEA,SAAS,EAAK,EAAmB,EAA2B,CACxD,GAAI,EAAgB,SAAS,CAAS,EAAG,OACzC,IAAM,EAAU,EAAA,YACZ,OAAO,EAAM,MAAS,SAAW,EAAM,KAAO,GAC9C,EACA,EACA,mBACJ,EACK,EAAQ,WACb,IAAY,CACR,MAAO,EACP,KAAM,EAAQ,KACd,GAAI,EAAM,aAAe,IAAA,GACzB,IAAK,CACT,CAAC,CACL,CAEA,SAAS,GAA0B,CAC/B,GAAI,EAAQ,OACZ,GAAI,GAAW,EAAY,CACvB,EAAU,OAAO,EACjB,MACJ,CACA,IAAM,EAAQ,KAAK,IAAI,EAAiB,GAAK,EAAS,CAAU,EAChE,GAAW,EACX,EAAa,WAAW,EAAS,CAAK,CAC1C,CAEA,SAAS,GAAgB,CACrB,GAAI,EAAQ,OACR,GAAQ,EAAO,MAAM,EACzB,EAAU,YAAY,EAEtB,IAAM,EAAK,IAAI,YAAY,EAAK,CAAE,iBAAgB,CAAC,EACnD,EAAS,EAET,EAAG,WAAe,CACd,EAAU,EACV,EAAU,MAAM,EAChB,IAAS,CACb,EAEA,EAAG,UAAa,GAAU,EAAK,UAAW,CAAK,EAC/C,IAAK,IAAM,KAAQ,EACf,EAAG,iBAAiB,EAAO,GAAU,EAAK,EAAM,CAAqB,CAAC,EAE1E,IAAK,IAAM,KAAQ,EACf,EAAG,iBAAiB,MAAY,CAEhC,CAAC,EAGL,EAAG,QAAW,GAAU,CACpB,IAAU,CAAK,EACf,EAAG,MAAM,EACT,EAAS,KACT,EAAU,QAAQ,EAClB,EAAkB,CACtB,CACJ,CAEA,SAAS,GAAc,CACnB,EAAS,GACT,AAEI,KADA,aAAa,CAAU,EACV,MAEjB,EAAU,EACV,AAEI,KADA,EAAO,MAAM,EACJ,MAEb,EAAU,QAAQ,CACtB,CAEA,SAAS,GAAkB,CACvB,AAEI,KADA,aAAa,CAAU,EACV,MAEjB,EAAU,EACV,EAAS,GACT,EAAQ,CACZ,CAIA,OAFA,EAAQ,EAED,CACH,QACA,YACA,IAAI,QAAS,CACT,OAAO,CACX,CACJ,CACJ"}
@@ -1,57 +1,53 @@
1
+ import { decodeFrame as e } from "../utils/json-frame.js";
1
2
  //#region src/sse/create-event-stream.ts
2
- function e(e) {
3
- try {
4
- return JSON.parse(e);
5
- } catch {
6
- return e;
7
- }
8
- }
9
3
  function t(t, n = {}) {
10
- let { withCredentials: r = !1, namedEvents: i = [], heartbeatEvents: a = ["ping"], maxRetries: o = 10, initialBackoff: s = 1e3, maxBackoff: c = 3e4, parser: l = e, onOpen: u, onMessage: d, onError: f, onStatusChange: p } = n, m = null, h = null, g = 0, _ = "idle", v = !1;
11
- function y(e) {
12
- _ !== e && (_ = e, p?.(e));
4
+ let { withCredentials: r = !1, namedEvents: i = [], heartbeatEvents: a = ["ping"], maxRetries: o = 10, initialBackoff: s = 1e3, maxBackoff: c = 3e4, parser: l, onOpen: u, onMessage: d, onError: f, onParseError: p, onStatusChange: m } = n, h = null, g = null, _ = 0, v = "idle", y = !1;
5
+ function b(e) {
6
+ v !== e && (v = e, m?.(e));
13
7
  }
14
- function b(e, t) {
15
- a.includes(e) || d?.({
16
- event: e,
17
- data: l(t.data),
18
- id: t.lastEventId || void 0,
19
- raw: t
8
+ function x(t, n) {
9
+ if (a.includes(t)) return;
10
+ let r = e(typeof n.data == "string" ? n.data : "", l, p, "createEventStream");
11
+ r.delivered && d?.({
12
+ event: t,
13
+ data: r.data,
14
+ id: n.lastEventId || void 0,
15
+ raw: n
20
16
  });
21
17
  }
22
- function x() {
23
- if (v) return;
24
- if (g >= o) {
25
- y("error");
18
+ function S() {
19
+ if (y) return;
20
+ if (_ >= o) {
21
+ b("error");
26
22
  return;
27
23
  }
28
- let e = Math.min(s * 2 ** g, c);
29
- g += 1, h = setTimeout(S, e);
24
+ let e = Math.min(s * 2 ** _, c);
25
+ _ += 1, g = setTimeout(C, e);
30
26
  }
31
- function S() {
32
- if (v) return;
33
- m && m.close(), y("connecting");
27
+ function C() {
28
+ if (y) return;
29
+ h && h.close(), b("connecting");
34
30
  let e = new EventSource(t, { withCredentials: r });
35
- m = e, e.onopen = () => {
36
- g = 0, y("open"), u?.();
37
- }, e.onmessage = (e) => b("message", e);
38
- for (let t of i) e.addEventListener(t, (e) => b(t, e));
31
+ h = e, e.onopen = () => {
32
+ _ = 0, b("open"), u?.();
33
+ }, e.onmessage = (e) => x("message", e);
34
+ for (let t of i) e.addEventListener(t, (e) => x(t, e));
39
35
  for (let t of a) e.addEventListener(t, () => {});
40
36
  e.onerror = (t) => {
41
- f?.(t), e.close(), m = null, y("closed"), x();
37
+ f?.(t), e.close(), h = null, b("closed"), S();
42
38
  };
43
39
  }
44
- function C() {
45
- v = !0, h &&= (clearTimeout(h), null), g = 0, m &&= (m.close(), null), y("closed");
46
- }
47
40
  function w() {
48
- h &&= (clearTimeout(h), null), g = 0, v = !1, S();
41
+ y = !0, g &&= (clearTimeout(g), null), _ = 0, h &&= (h.close(), null), b("closed");
42
+ }
43
+ function T() {
44
+ g &&= (clearTimeout(g), null), _ = 0, y = !1, C();
49
45
  }
50
- return S(), {
51
- close: C,
52
- reconnect: w,
46
+ return C(), {
47
+ close: w,
48
+ reconnect: T,
53
49
  get status() {
54
- return _;
50
+ return v;
55
51
  }
56
52
  };
57
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-event-stream.js","names":[],"sources":["../../src/sse/create-event-stream.ts"],"sourcesContent":["/**\n * @tempest-limits function-lines — the body is the SSE line protocol — accumulate\n * `data:` lines until a blank line, track `id:` for Last-Event-ID, honour `retry:` —\n * plus the reconnect that uses the id it just tracked.\n */\nexport type EventStreamStatus = \"idle\" | \"connecting\" | \"open\" | \"closed\" | \"error\";\n\nexport interface EventStreamMessage<T> {\n /** Server-named event (default `\"message\"`). */\n event: string;\n /** Parsed payload — JSON-decoded when possible, raw string otherwise. */\n data: T;\n /** Server-supplied id, if any. */\n id?: string;\n /** Raw `MessageEvent` for advanced cases. */\n raw: MessageEvent;\n}\n\nexport interface CreateEventStreamOptions<T> {\n /** Send cookies with the EventSource handshake. Default: false. */\n withCredentials?: boolean;\n /** Subscribe to named events in addition to `message`. */\n namedEvents?: readonly string[];\n /** Treat these named events as heartbeat-only (no callback). Default: `[\"ping\"]`. */\n heartbeatEvents?: readonly string[];\n /** Max reconnect attempts. Default: 10. Pass 0 to disable reconnect. */\n maxRetries?: number;\n /** Initial backoff in ms; doubles per attempt, capped at `maxBackoff`. Default: 1000. */\n initialBackoff?: number;\n /** Maximum backoff in ms. Default: 30000. */\n maxBackoff?: number;\n /** Parse `event.data`. Defaults to JSON with raw-string fallback. */\n parser?: (raw: string) => T;\n onOpen?: () => void;\n onMessage?: (message: EventStreamMessage<T>) => void;\n onError?: (error: Event) => void;\n onStatusChange?: (status: EventStreamStatus) => void;\n}\n\nexport interface EventStreamController {\n close: () => void;\n /** Force an immediate reconnect, resetting the retry counter. */\n reconnect: () => void;\n /** Current connection status. */\n readonly status: EventStreamStatus;\n}\n\nfunction defaultParser<T>(raw: string): T {\n try {\n return JSON.parse(raw) as T;\n } catch {\n return raw as unknown as T;\n }\n}\n\n/**\n * Open a Server-Sent Events stream with automatic exponential-backoff reconnect.\n *\n * Heartbeat events (default `\"ping\"`) keep the socket alive without firing\n * `onMessage`. Pass `withCredentials: true` when the backend authenticates via\n * cookies. Call `close()` from the returned controller to tear down.\n *\n * @param url - Full SSE endpoint URL.\n * @param options - Stream configuration and callbacks.\n * @returns A controller exposing `close`, `reconnect` and the current `status`.\n */\nexport function createEventStream<T = unknown>(\n url: string,\n options: CreateEventStreamOptions<T> = {},\n): EventStreamController {\n const {\n withCredentials = false,\n namedEvents = [],\n heartbeatEvents = [\"ping\"],\n maxRetries = 10,\n initialBackoff = 1000,\n maxBackoff = 30000,\n parser = defaultParser<T>,\n onOpen,\n onMessage,\n onError,\n onStatusChange,\n } = options;\n\n let source: EventSource | null = null;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n let retries = 0;\n let status: EventStreamStatus = \"idle\";\n let closed = false;\n\n function setStatus(next: EventStreamStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function emit(eventName: string, event: MessageEvent): void {\n if (heartbeatEvents.includes(eventName)) return;\n onMessage?.({\n event: eventName,\n data: parser(event.data),\n id: event.lastEventId || undefined,\n raw: event,\n });\n }\n\n function scheduleReconnect(): void {\n if (closed) return;\n if (retries >= maxRetries) {\n setStatus(\"error\");\n return;\n }\n const delay = Math.min(initialBackoff * 2 ** retries, maxBackoff);\n retries += 1;\n retryTimer = setTimeout(connect, delay);\n }\n\n function connect(): void {\n if (closed) return;\n if (source) source.close();\n setStatus(\"connecting\");\n\n const es = new EventSource(url, { withCredentials });\n source = es;\n\n es.onopen = () => {\n retries = 0;\n setStatus(\"open\");\n onOpen?.();\n };\n\n es.onmessage = (event) => emit(\"message\", event);\n for (const name of namedEvents) {\n es.addEventListener(name, (event) => emit(name, event as MessageEvent));\n }\n for (const name of heartbeatEvents) {\n es.addEventListener(name, () => {\n /* heartbeat — keep socket alive */\n });\n }\n\n es.onerror = (event) => {\n onError?.(event);\n es.close();\n source = null;\n setStatus(\"closed\");\n scheduleReconnect();\n };\n }\n\n function close(): void {\n closed = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n if (source) {\n source.close();\n source = null;\n }\n setStatus(\"closed\");\n }\n\n function reconnect(): void {\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n closed = false;\n connect();\n }\n\n connect();\n\n return {\n close,\n reconnect,\n get status() {\n return status;\n },\n };\n}\n"],"mappings":";AA+CA,SAAS,EAAiB,GAAgB;CACtC,IAAI;EACA,OAAO,KAAK,MAAM,CAAG;CACzB,QAAQ;EACJ,OAAO;CACX;AACJ;AAaA,SAAgB,EACZ,GACA,IAAuC,CAAC,GACnB;CACrB,IAAM,EACF,qBAAkB,IAClB,iBAAc,CAAC,GACf,qBAAkB,CAAC,MAAM,GACzB,gBAAa,IACb,oBAAiB,KACjB,gBAAa,KACb,YAAS,GACT,WACA,cACA,YACA,sBACA,GAEA,IAA6B,MAC7B,IAAmD,MACnD,IAAU,GACV,IAA4B,QAC5B,IAAS;CAEb,SAAS,EAAU,GAA+B;EAC1C,MAAW,MACf,IAAS,GACT,IAAiB,CAAI;CACzB;CAEA,SAAS,EAAK,GAAmB,GAA2B;EACpD,EAAgB,SAAS,CAAS,KACtC,IAAY;GACR,OAAO;GACP,MAAM,EAAO,EAAM,IAAI;GACvB,IAAI,EAAM,eAAe,KAAA;GACzB,KAAK;EACT,CAAC;CACL;CAEA,SAAS,IAA0B;EAC/B,IAAI,GAAQ;EACZ,IAAI,KAAW,GAAY;GACvB,EAAU,OAAO;GACjB;EACJ;EACA,IAAM,IAAQ,KAAK,IAAI,IAAiB,KAAK,GAAS,CAAU;EAEhE,AADA,KAAW,GACX,IAAa,WAAW,GAAS,CAAK;CAC1C;CAEA,SAAS,IAAgB;EACrB,IAAI,GAAQ;EAEZ,AADI,KAAQ,EAAO,MAAM,GACzB,EAAU,YAAY;EAEtB,IAAM,IAAK,IAAI,YAAY,GAAK,EAAE,mBAAgB,CAAC;EASnD,AARA,IAAS,GAET,EAAG,eAAe;GAGd,AAFA,IAAU,GACV,EAAU,MAAM,GAChB,IAAS;EACb,GAEA,EAAG,aAAa,MAAU,EAAK,WAAW,CAAK;EAC/C,KAAK,IAAM,KAAQ,GACf,EAAG,iBAAiB,IAAO,MAAU,EAAK,GAAM,CAAqB,CAAC;EAE1E,KAAK,IAAM,KAAQ,GACf,EAAG,iBAAiB,SAAY,CAEhC,CAAC;EAGL,EAAG,WAAW,MAAU;GAKpB,AAJA,IAAU,CAAK,GACf,EAAG,MAAM,GACT,IAAS,MACT,EAAU,QAAQ,GAClB,EAAkB;EACtB;CACJ;CAEA,SAAS,IAAc;EAWnB,AAVA,IAAS,IACT,AAEI,OADA,aAAa,CAAU,GACV,OAEjB,IAAU,GACV,AAEI,OADA,EAAO,MAAM,GACJ,OAEb,EAAU,QAAQ;CACtB;CAEA,SAAS,IAAkB;EAOvB,AANA,AAEI,OADA,aAAa,CAAU,GACV,OAEjB,IAAU,GACV,IAAS,IACT,EAAQ;CACZ;CAIA,OAFA,EAAQ,GAED;EACH;EACA;EACA,IAAI,SAAS;GACT,OAAO;EACX;CACJ;AACJ"}
1
+ {"version":3,"file":"create-event-stream.js","names":[],"sources":["../../src/sse/create-event-stream.ts"],"sourcesContent":["/**\n * @tempest-limits function-lines — the body is the SSE line protocol — accumulate\n * `data:` lines until a blank line, track `id:` for Last-Event-ID, honour `retry:` —\n * plus the reconnect that uses the id it just tracked.\n */\nimport { decodeFrame } from \"../utils/json-frame\";\nexport type EventStreamStatus = \"idle\" | \"connecting\" | \"open\" | \"closed\" | \"error\";\n\nexport interface EventStreamMessage<T> {\n /** Server-named event (default `\"message\"`). */\n event: string;\n /** Parsed payload — JSON-decoded when possible, raw string otherwise. */\n data: T;\n /** Server-supplied id, if any. */\n id?: string;\n /** Raw `MessageEvent` for advanced cases. */\n raw: MessageEvent;\n}\n\nexport interface CreateEventStreamOptions<T> {\n /** Send cookies with the EventSource handshake. Default: false. */\n withCredentials?: boolean;\n /** Subscribe to named events in addition to `message`. */\n namedEvents?: readonly string[];\n /** Treat these named events as heartbeat-only (no callback). Default: `[\"ping\"]`. */\n heartbeatEvents?: readonly string[];\n /** Max reconnect attempts. Default: 10. Pass 0 to disable reconnect. */\n maxRetries?: number;\n /** Initial backoff in ms; doubles per attempt, capped at `maxBackoff`. Default: 1000. */\n initialBackoff?: number;\n /** Maximum backoff in ms. Default: 30000. */\n maxBackoff?: number;\n /** Parse `event.data`. Defaults to JSON with raw-string fallback. */\n parser?: (raw: string) => T;\n /**\n * A frame arrived that is not valid JSON, and no `parser` was supplied.\n *\n * Registering this drops the frame instead of delivering it: the previous\n * behaviour handed `onMessage` the raw `string` announced as your message\n * type, so the failure surfaced later, at the first property access, with\n * nothing left pointing at the parse. Leave it out and that behaviour is\n * kept, with a one-time warning in development builds.\n */\n onParseError?: (error: unknown, raw: string) => void;\n onOpen?: () => void;\n onMessage?: (message: EventStreamMessage<T>) => void;\n onError?: (error: Event) => void;\n onStatusChange?: (status: EventStreamStatus) => void;\n}\n\nexport interface EventStreamController {\n close: () => void;\n /** Force an immediate reconnect, resetting the retry counter. */\n reconnect: () => void;\n /** Current connection status. */\n readonly status: EventStreamStatus;\n}\n\n/**\n * Open a Server-Sent Events stream with automatic exponential-backoff reconnect.\n *\n * Heartbeat events (default `\"ping\"`) keep the socket alive without firing\n * `onMessage`. Pass `withCredentials: true` when the backend authenticates via\n * cookies. Call `close()` from the returned controller to tear down.\n *\n * @param url - Full SSE endpoint URL.\n * @param options - Stream configuration and callbacks.\n * @returns A controller exposing `close`, `reconnect` and the current `status`.\n */\nexport function createEventStream<T = unknown>(\n url: string,\n options: CreateEventStreamOptions<T> = {},\n): EventStreamController {\n const {\n withCredentials = false,\n namedEvents = [],\n heartbeatEvents = [\"ping\"],\n maxRetries = 10,\n initialBackoff = 1000,\n maxBackoff = 30000,\n parser,\n onOpen,\n onMessage,\n onError,\n onParseError,\n onStatusChange,\n } = options;\n\n let source: EventSource | null = null;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n let retries = 0;\n let status: EventStreamStatus = \"idle\";\n let closed = false;\n\n function setStatus(next: EventStreamStatus): void {\n if (status === next) return;\n status = next;\n onStatusChange?.(next);\n }\n\n function emit(eventName: string, event: MessageEvent): void {\n if (heartbeatEvents.includes(eventName)) return;\n const decoded = decodeFrame<T>(\n typeof event.data === \"string\" ? event.data : \"\",\n parser,\n onParseError,\n \"createEventStream\",\n );\n if (!decoded.delivered) return;\n onMessage?.({\n event: eventName,\n data: decoded.data,\n id: event.lastEventId || undefined,\n raw: event,\n });\n }\n\n function scheduleReconnect(): void {\n if (closed) return;\n if (retries >= maxRetries) {\n setStatus(\"error\");\n return;\n }\n const delay = Math.min(initialBackoff * 2 ** retries, maxBackoff);\n retries += 1;\n retryTimer = setTimeout(connect, delay);\n }\n\n function connect(): void {\n if (closed) return;\n if (source) source.close();\n setStatus(\"connecting\");\n\n const es = new EventSource(url, { withCredentials });\n source = es;\n\n es.onopen = () => {\n retries = 0;\n setStatus(\"open\");\n onOpen?.();\n };\n\n es.onmessage = (event) => emit(\"message\", event);\n for (const name of namedEvents) {\n es.addEventListener(name, (event) => emit(name, event as MessageEvent));\n }\n for (const name of heartbeatEvents) {\n es.addEventListener(name, () => {\n /* heartbeat — keep socket alive */\n });\n }\n\n es.onerror = (event) => {\n onError?.(event);\n es.close();\n source = null;\n setStatus(\"closed\");\n scheduleReconnect();\n };\n }\n\n function close(): void {\n closed = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n if (source) {\n source.close();\n source = null;\n }\n setStatus(\"closed\");\n }\n\n function reconnect(): void {\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n retries = 0;\n closed = false;\n connect();\n }\n\n connect();\n\n return {\n close,\n reconnect,\n get status() {\n return status;\n },\n };\n}\n"],"mappings":";;AAqEA,SAAgB,EACZ,GACA,IAAuC,CAAC,GACnB;CACrB,IAAM,EACF,qBAAkB,IAClB,iBAAc,CAAC,GACf,qBAAkB,CAAC,MAAM,GACzB,gBAAa,IACb,oBAAiB,KACjB,gBAAa,KACb,WACA,WACA,cACA,YACA,iBACA,sBACA,GAEA,IAA6B,MAC7B,IAAmD,MACnD,IAAU,GACV,IAA4B,QAC5B,IAAS;CAEb,SAAS,EAAU,GAA+B;EAC1C,MAAW,MACf,IAAS,GACT,IAAiB,CAAI;CACzB;CAEA,SAAS,EAAK,GAAmB,GAA2B;EACxD,IAAI,EAAgB,SAAS,CAAS,GAAG;EACzC,IAAM,IAAU,EACZ,OAAO,EAAM,QAAS,WAAW,EAAM,OAAO,IAC9C,GACA,GACA,mBACJ;EACK,EAAQ,aACb,IAAY;GACR,OAAO;GACP,MAAM,EAAQ;GACd,IAAI,EAAM,eAAe,KAAA;GACzB,KAAK;EACT,CAAC;CACL;CAEA,SAAS,IAA0B;EAC/B,IAAI,GAAQ;EACZ,IAAI,KAAW,GAAY;GACvB,EAAU,OAAO;GACjB;EACJ;EACA,IAAM,IAAQ,KAAK,IAAI,IAAiB,KAAK,GAAS,CAAU;EAEhE,AADA,KAAW,GACX,IAAa,WAAW,GAAS,CAAK;CAC1C;CAEA,SAAS,IAAgB;EACrB,IAAI,GAAQ;EAEZ,AADI,KAAQ,EAAO,MAAM,GACzB,EAAU,YAAY;EAEtB,IAAM,IAAK,IAAI,YAAY,GAAK,EAAE,mBAAgB,CAAC;EASnD,AARA,IAAS,GAET,EAAG,eAAe;GAGd,AAFA,IAAU,GACV,EAAU,MAAM,GAChB,IAAS;EACb,GAEA,EAAG,aAAa,MAAU,EAAK,WAAW,CAAK;EAC/C,KAAK,IAAM,KAAQ,GACf,EAAG,iBAAiB,IAAO,MAAU,EAAK,GAAM,CAAqB,CAAC;EAE1E,KAAK,IAAM,KAAQ,GACf,EAAG,iBAAiB,SAAY,CAEhC,CAAC;EAGL,EAAG,WAAW,MAAU;GAKpB,AAJA,IAAU,CAAK,GACf,EAAG,MAAM,GACT,IAAS,MACT,EAAU,QAAQ,GAClB,EAAkB;EACtB;CACJ;CAEA,SAAS,IAAc;EAWnB,AAVA,IAAS,IACT,AAEI,OADA,aAAa,CAAU,GACV,OAEjB,IAAU,GACV,AAEI,OADA,EAAO,MAAM,GACJ,OAEb,EAAU,QAAQ;CACtB;CAEA,SAAS,IAAkB;EAOvB,AANA,AAEI,OADA,aAAa,CAAU,GACV,OAEjB,IAAU,GACV,IAAS,IACT,EAAQ;CACZ;CAIA,OAFA,EAAQ,GAED;EACH;EACA;EACA,IAAI,SAAS;GACT,OAAO;EACX;CACJ;AACJ"}
@@ -0,0 +1,79 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_panel_W0CCy{min-width:0;min-height:0;height:var(--tempest-ai-chat-height,100%);background-color:var(--tempest-bg);color:var(--tempest-text);font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
3
+ .tempest_header_KYy5l{padding:var(--tempest-space-3) var(--tempest-space-4);border-bottom:1px solid var(--tempest-border);flex:none}
4
+ .tempest_threadWrapper_LjoF6{flex:auto;min-width:0;min-height:0;display:flex;position:relative}
5
+ .tempest_thread_RqELz{gap:var(--tempest-space-5);min-width:0;min-height:0;padding:var(--tempest-space-4);overscroll-behavior:contain;flex-direction:column;flex:auto;display:flex;overflow-y:auto}
6
+ .tempest_thread_RqELz:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-2px}
7
+ .tempest_jump_oBKxQ{right:var(--tempest-space-4);bottom:var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-full);background-color:var(--tempest-surface);width:2rem;height:2rem;color:var(--tempest-text);box-shadow:var(--tempest-shadow-md);cursor:pointer;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute}
8
+ .tempest_jump_oBKxQ:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
9
+ @media (pointer:coarse){.tempest_jump_oBKxQ:after{content:"";position:absolute;inset:-6px}}
10
+ .tempest_turn_k7h7J{gap:var(--tempest-space-2);min-width:0;max-width:var(--tempest-ai-chat-width,48rem);flex-direction:column;width:100%;margin-inline:auto;display:flex}
11
+ .tempest_userTurn_7Csx0{align-items:flex-end}
12
+ .tempest_systemTurn_xpQmC{padding:var(--tempest-space-2) var(--tempest-space-3);border:1px dashed var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-surface);color:var(--tempest-text-muted);font-size:var(--tempest-text-sm)}
13
+ .tempest_turnHeader_l7lv3{align-items:center;gap:var(--tempest-space-2);min-width:0;display:flex}
14
+ .tempest_avatar_XqQ8R{flex:none;display:inline-flex}
15
+ .tempest_role_Vz6Dn{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);font-weight:var(--tempest-weight-semibold)}
16
+ .tempest_visuallyHiddenRole_raKmR{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
17
+ .tempest_model_Z55Ho,.tempest_time_o07s8{color:var(--tempest-text-muted);font-size:var(--tempest-text-2xs);font-variant-numeric:tabular-nums}
18
+ .tempest_body_GnhC7{overflow-wrap:anywhere;min-width:0}
19
+ .tempest_userTurn_7Csx0 .tempest_body_GnhC7{padding:var(--tempest-space-2) var(--tempest-space-3);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-primary-soft);color:var(--tempest-primary-on-soft);font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);max-width:min(85%,36rem)}
20
+ .tempest_plain_MRQet{white-space:pre-wrap}
21
+ .tempest_markdownRoot_nem2U{font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-relaxed)}
22
+ .tempest_streamingBody_YMx1->.tempest_markdownRoot_nem2U>:last-child:after{content:"▍";color:var(--tempest-primary);margin-left:.125em;animation:1s steps(2,jump-none) infinite tempest_caretBlink_IpIIw}
23
+ @keyframes tempest_caretBlink_IpIIw{to{opacity:.2}}
24
+ @media (prefers-reduced-motion:reduce){.tempest_streamingBody_YMx1->.tempest_markdownRoot_nem2U>:last-child:after{animation:none}}
25
+ .tempest_dots_FtZUe{align-items:center;gap:3px;display:inline-flex}
26
+ .tempest_dots_FtZUe>span{background-color:var(--tempest-text-subtle);width:5px;height:5px;animation:tempest_dotPulse_nZJHU 1.2s var(--tempest-ease-in-out) infinite;border-radius:50%}
27
+ .tempest_dots_FtZUe>span:nth-child(2){animation-delay:.15s}
28
+ .tempest_dots_FtZUe>span:nth-child(3){animation-delay:.3s}
29
+ @keyframes tempest_dotPulse_nZJHU{0%,60%,to{opacity:.25}30%{opacity:1}}
30
+ @media (prefers-reduced-motion:reduce){.tempest_dots_FtZUe>span{opacity:.6;animation:none}}
31
+ .tempest_thinking_Dk96l{align-items:center;gap:var(--tempest-space-2);max-width:var(--tempest-ai-chat-width,48rem);width:100%;color:var(--tempest-text-muted);font-size:var(--tempest-text-sm);margin:0 auto;display:flex}
32
+ .tempest_reasoning_kJof1{border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-surface)}
33
+ .tempest_reasoning_kJof1 button[aria-expanded]{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);font-weight:var(--tempest-weight-medium)}
34
+ .tempest_reasoning_kJof1 button[aria-expanded=true] .tempest_reasoningChevron_TObJ2{transform:rotate(90deg)}
35
+ .tempest_reasoningChevron_TObJ2{transition:transform var(--tempest-duration-fast) var(--tempest-ease-out);flex:none}
36
+ @media (prefers-reduced-motion:reduce){.tempest_reasoningChevron_TObJ2{transition:none}}
37
+ .tempest_reasoningBody_ZR910{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);line-height:var(--tempest-leading-relaxed);white-space:pre-wrap}
38
+ .tempest_attachments_qQH3a{gap:var(--tempest-space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}
39
+ .tempest_attachment_z4T-R{align-items:center;gap:var(--tempest-space-2);max-width:16rem;padding:var(--tempest-space-1) var(--tempest-space-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-surface);font-size:var(--tempest-text-xs);display:inline-flex}
40
+ .tempest_attachmentName_2DCGR{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
41
+ .tempest_attachmentMeta_xBy5U{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);flex:none}
42
+ .tempest_thumb_w70uR{border-radius:var(--tempest-radius-sm);object-fit:cover;width:4rem;height:4rem;display:block}
43
+ .tempest_error_CS0Gp{align-items:center;gap:var(--tempest-space-2);padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-danger);border-radius:var(--tempest-radius-md);background-color:var(--tempest-danger-bg);color:var(--tempest-text);font-size:var(--tempest-text-sm);margin:0;display:flex}
44
+ .tempest_retry_8a6Vm{color:var(--tempest-danger);font:inherit;font-weight:var(--tempest-weight-medium);cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}
45
+ .tempest_actions_SZnxe{align-items:center;gap:var(--tempest-space-1);opacity:0;transition:opacity var(--tempest-duration-fast) var(--tempest-ease-out);display:flex}
46
+ .tempest_turn_k7h7J:hover .tempest_actions_SZnxe,.tempest_actions_SZnxe:focus-within{opacity:1}
47
+ @media (hover:none){.tempest_actions_SZnxe{opacity:1}}
48
+ @media (prefers-reduced-motion:reduce){.tempest_actions_SZnxe{transition:none}}
49
+ .tempest_actions_SZnxe .tempest_action_YPvQH{border-radius:var(--tempest-radius-sm);width:1.75rem;height:1.75rem;color:var(--tempest-text-muted);cursor:pointer;transition:var(--tempest-transition-color);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}
50
+ @media (pointer:coarse){.tempest_actions_SZnxe .tempest_action_YPvQH:after{content:"";position:absolute;inset:-8px}}
51
+ @media (hover:hover) and (pointer:fine){.tempest_actions_SZnxe .tempest_action_YPvQH:hover{background-color:var(--tempest-surface-2);color:var(--tempest-text)}}
52
+ .tempest_actions_SZnxe .tempest_action_YPvQH:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:1px}
53
+ .tempest_actions_SZnxe .tempest_action_YPvQH[data-copied],.tempest_actions_SZnxe .tempest_actionActive_DW5O1{color:var(--tempest-primary);background:0 0}
54
+ @media (prefers-reduced-motion:reduce){.tempest_actions_SZnxe .tempest_action_YPvQH{transition:none}}
55
+ .tempest_editor_rk4hA{gap:var(--tempest-space-2);flex-direction:column;width:100%;max-width:min(85%,36rem);display:flex}
56
+ .tempest_editField_Z9neJ{width:100%;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-primary);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-bg);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:vertical}
57
+ .tempest_editField_Z9neJ:focus-visible{outline:2px solid var(--tempest-primary);outline-offset:-1px}
58
+ .tempest_editActions_vfC0b{justify-content:flex-end;gap:var(--tempest-space-2);display:flex}
59
+ .tempest_ghost_S1yuC{padding:var(--tempest-space-1) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);cursor:pointer;background-color:#0000}
60
+ .tempest_primary_wZ-Wu{padding:var(--tempest-space-1) var(--tempest-space-3);border-radius:var(--tempest-radius-md);background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;border:none}
61
+ .tempest_primary_wZ-Wu:disabled{background-color:var(--tempest-surface-3);color:var(--tempest-text-subtle);cursor:not-allowed}
62
+ .tempest_suggestions_V7Zhh{align-items:flex-start;gap:var(--tempest-space-2);max-width:var(--tempest-ai-chat-width,48rem);flex-direction:column;width:100%;margin:auto auto 0;display:flex}
63
+ .tempest_suggestionsTitle_Z-wWe{color:var(--tempest-text-muted);font-size:var(--tempest-text-sm);margin:0}
64
+ .tempest_suggestion_4NYhq{padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-surface);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);text-align:left;cursor:pointer}
65
+ @media (hover:hover) and (pointer:fine){.tempest_suggestion_4NYhq:hover{background-color:var(--tempest-surface-2)}}
66
+ .tempest_suggestion_4NYhq:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
67
+ .tempest_composer_AaB1Q{gap:var(--tempest-space-1);padding:var(--tempest-space-3) var(--tempest-space-4);border-top:1px solid var(--tempest-border);flex-direction:column;flex:none;display:flex}
68
+ .tempest_composerBox_Fz-GG{align-items:flex-end;gap:var(--tempest-space-2);max-width:var(--tempest-ai-chat-width,48rem);width:100%;padding:var(--tempest-space-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-surface);margin-inline:auto;display:flex}
69
+ .tempest_composerBox_Fz-GG:focus-within{border-color:var(--tempest-primary)}
70
+ .tempest_field_7m1Pa{min-width:0;padding:var(--tempest-space-1) var(--tempest-space-2);color:inherit;font:inherit;font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-normal);resize:none;background:0 0;border:none;flex:auto}
71
+ .tempest_field_7m1Pa:focus-visible{outline:none}
72
+ .tempest_field_7m1Pa:disabled{color:var(--tempest-text-subtle);cursor:not-allowed}
73
+ .tempest_composerActions_z1oj9{align-items:center;gap:var(--tempest-space-2);flex:none;display:flex}
74
+ .tempest_composerFooter_WZ1Fo{max-width:var(--tempest-ai-chat-width,48rem);width:100%;padding-inline:var(--tempest-space-2);color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);margin-inline:auto}
75
+ .tempest_send_eVkd6{padding:var(--tempest-space-2) var(--tempest-space-4);border-radius:var(--tempest-radius-md);background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;border:none}
76
+ .tempest_send_eVkd6:disabled{background-color:var(--tempest-surface-3);color:var(--tempest-text-subtle);cursor:not-allowed}
77
+ .tempest_stop_KWS9o{align-items:center;gap:var(--tempest-space-2);padding:var(--tempest-space-2) var(--tempest-space-4);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);background-color:var(--tempest-surface-2);color:var(--tempest-text);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;display:inline-flex}
78
+ .tempest_stopGlyph_Nc19c{background-color:currentColor;border-radius:2px;width:.625rem;height:.625rem;display:inline-block}
79
+ @media (width<=480px){.tempest_thread_RqELz{gap:var(--tempest-space-4);padding:var(--tempest-space-3)}.tempest_userTurn_7Csx0 .tempest_body_GnhC7,.tempest_editor_rk4hA{max-width:100%}.tempest_composer_AaB1Q{padding:var(--tempest-space-2) var(--tempest-space-3)}}
@@ -0,0 +1,12 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_accordion_LVhhv{border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-bg);flex-direction:column;width:100%;display:flex;overflow:hidden}
3
+ .tempest_item_7ryVk{border-bottom:1px solid var(--tempest-border)}
4
+ .tempest_item_7ryVk:last-child{border-bottom:none}
5
+ .tempest_header_WaTdJ{margin:0}
6
+ .tempest_trigger_9BYFY{justify-content:space-between;align-items:center;gap:var(--tempest-space-3);width:100%;padding:var(--tempest-space-3) var(--tempest-space-4);text-align:left;color:var(--tempest-text);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-base);font-weight:var(--tempest-weight-semibold);line-height:var(--tempest-leading-snug);cursor:pointer;transition:var(--tempest-transition-color);background:0 0;border:none;display:flex}
7
+ @media (hover:hover) and (pointer:fine){.tempest_trigger_9BYFY:hover{background-color:var(--tempest-surface)}}
8
+ .tempest_trigger_9BYFY:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:-2px}
9
+ .tempest_trigger_9BYFY:disabled{opacity:.55;cursor:not-allowed}
10
+ .tempest_chevron_i-HVZ{transition:transform var(--tempest-duration-base) var(--tempest-ease-emphasized);color:var(--tempest-text-muted);flex-shrink:0}
11
+ .tempest_open_98jLY .tempest_chevron_i-HVZ{transform:rotate(180deg)}
12
+ .tempest_panel_Wx50w{padding:0 var(--tempest-space-4) var(--tempest-space-4);color:var(--tempest-text);line-height:var(--tempest-leading-normal)}
@@ -0,0 +1,32 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_alert_7cYyI{align-items:flex-start;gap:var(--tempest-space-3);padding:var(--tempest-space-3) var(--tempest-space-4);border-radius:var(--tempest-radius-lg);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-base);line-height:var(--tempest-leading-snug);color:var(--tempest-text);border:1px solid #0000;width:100%;display:flex}
3
+ .tempest_content_UXnmZ{flex:1;min-width:0}
4
+ .tempest_title_abGgF{font-size:var(--tempest-text-base);font-weight:var(--tempest-weight-semibold);line-height:var(--tempest-leading-snug);margin:0}
5
+ .tempest_description_pXPvw{font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-snug);color:var(--tempest-text-muted);margin:2px 0 0}
6
+ .tempest_icon_Zg6SB{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;margin-top:1px;display:inline-flex}
7
+ .tempest_close_narep{color:inherit;opacity:.7;border-radius:var(--tempest-radius-sm);transition:var(--tempest-transition-color), opacity var(--tempest-duration-fast) var(--tempest-ease-out);background:0 0;border:none;align-items:center;margin-left:auto;padding:4px;display:flex}
8
+ .tempest_close_narep:hover{opacity:1;background-color:#0f172a0f}
9
+ .tempest_close_narep:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
10
+ .tempest_neutral_J7MH1{background-color:var(--tempest-surface);color:var(--tempest-text);border-color:var(--tempest-border)}
11
+ .tempest_neutral_J7MH1.tempest_solid_s-oW5{background-color:var(--tempest-gray-700);color:#fff;border-color:#0000}
12
+ .tempest_neutral_J7MH1.tempest_outline_v7w9b{border-color:var(--tempest-border-strong);background-color:#0000}
13
+ .tempest_info_9r3r1{background-color:var(--tempest-info-bg);color:var(--tempest-info-fg);border-color:var(--tempest-info-border)}
14
+ .tempest_info_9r3r1 .tempest_description_pXPvw{color:var(--tempest-info-fg);opacity:.85}
15
+ .tempest_info_9r3r1.tempest_solid_s-oW5{background-color:var(--tempest-info-solid);color:var(--tempest-info-on-solid);border-color:#0000}
16
+ .tempest_info_9r3r1.tempest_solid_s-oW5 .tempest_description_pXPvw{color:#ffffffe6}
17
+ .tempest_info_9r3r1.tempest_outline_v7w9b{color:var(--tempest-info);border-color:var(--tempest-info);background-color:#0000}
18
+ .tempest_success_1bzoB{background-color:var(--tempest-success-bg);color:var(--tempest-success-fg);border-color:var(--tempest-success-border)}
19
+ .tempest_success_1bzoB .tempest_description_pXPvw{color:var(--tempest-success-fg);opacity:.85}
20
+ .tempest_success_1bzoB.tempest_solid_s-oW5{background-color:var(--tempest-success-solid);color:var(--tempest-success-on-solid);border-color:#0000}
21
+ .tempest_success_1bzoB.tempest_solid_s-oW5 .tempest_description_pXPvw{color:#ffffffe6}
22
+ .tempest_success_1bzoB.tempest_outline_v7w9b{color:var(--tempest-success);border-color:var(--tempest-success);background-color:#0000}
23
+ .tempest_warning_q-j1Q{background-color:var(--tempest-warning-bg);color:var(--tempest-warning-fg);border-color:var(--tempest-warning-border)}
24
+ .tempest_warning_q-j1Q .tempest_description_pXPvw{color:var(--tempest-warning-fg);opacity:.85}
25
+ .tempest_warning_q-j1Q.tempest_solid_s-oW5{background-color:var(--tempest-warning-solid);color:var(--tempest-warning-on-solid);border-color:#0000}
26
+ .tempest_warning_q-j1Q.tempest_solid_s-oW5 .tempest_description_pXPvw{color:#ffffffe6}
27
+ .tempest_warning_q-j1Q.tempest_outline_v7w9b{color:var(--tempest-warning);border-color:var(--tempest-warning);background-color:#0000}
28
+ .tempest_danger_CiZkW{background-color:var(--tempest-danger-bg);color:var(--tempest-danger-fg);border-color:var(--tempest-danger-border)}
29
+ .tempest_danger_CiZkW .tempest_description_pXPvw{color:var(--tempest-danger-fg);opacity:.85}
30
+ .tempest_danger_CiZkW.tempest_solid_s-oW5{background-color:var(--tempest-danger-solid);color:var(--tempest-danger-on-solid);border-color:#0000}
31
+ .tempest_danger_CiZkW.tempest_solid_s-oW5 .tempest_description_pXPvw{color:#ffffffe6}
32
+ .tempest_danger_CiZkW.tempest_outline_v7w9b{color:var(--tempest-danger);border-color:var(--tempest-danger);background-color:#0000}
@@ -0,0 +1,17 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_bar_SHqWS{align-items:center;gap:var(--tempest-space-2);width:100%;min-height:56px;padding:var(--tempest-space-3) var(--tempest-space-4);font-family:var(--tempest-font-sans);grid-template-columns:auto 1fr auto;display:grid}
3
+ .tempest_bar_SHqWS.tempest_centered_S0CCw{grid-template-columns:1fr auto 1fr}
4
+ .tempest_bar_SHqWS.tempest_surface_fusKb{background:var(--tempest-surface);color:var(--tempest-text)}
5
+ .tempest_bar_SHqWS.tempest_primary_QcCyN{background:var(--tempest-primary);color:var(--tempest-text-on-primary)}
6
+ .tempest_bar_SHqWS.tempest_transparent_uGrsu{color:inherit;background:0 0}
7
+ .tempest_bar_SHqWS.tempest_bordered_5M9FZ{border-bottom:1px solid var(--tempest-border)}
8
+ .tempest_bar_SHqWS.tempest_sticky_DStUO{z-index:30;position:sticky;top:0}
9
+ .tempest_bar_SHqWS.tempest_safeArea_Vo3Bi{padding-top:max(var(--tempest-space-3), env(safe-area-inset-top,0px))}
10
+ .tempest_leading_mXv-d{align-items:center;gap:var(--tempest-space-2);min-width:0;display:flex}
11
+ .tempest_actions_x7tMx{justify-content:flex-end;align-items:center;gap:var(--tempest-space-1);min-width:0;display:flex}
12
+ .tempest_title_qaMMQ{min-width:0;font-size:var(--tempest-text-xl);font-weight:var(--tempest-weight-bold);text-align:left;white-space:nowrap;text-overflow:ellipsis;margin:0;line-height:1.2;overflow:hidden}
13
+ .tempest_bar_SHqWS.tempest_centered_S0CCw .tempest_title_qaMMQ{text-align:center}
14
+ .tempest_brand_xKt54{font-size:var(--tempest-text-lg);font-weight:var(--tempest-weight-bold);color:inherit;white-space:nowrap}
15
+ .tempest_iconBtn_S-BTg{border-radius:var(--tempest-radius-full);width:36px;height:36px;color:inherit;cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}
16
+ .tempest_iconBtn_S-BTg:hover{background:var(--tempest-surface-2)}
17
+ .tempest_iconBtn_S-BTg:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
@@ -0,0 +1,8 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_shell_-xp0O{background:var(--tempest-bg);width:100%;min-height:100dvh;color:var(--tempest-text);font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
3
+ .tempest_navbar_liTKV{flex:none}
4
+ .tempest_row_PE41P{flex:auto;width:100%;min-height:0;display:flex}
5
+ .tempest_sidebar_wyx-V{flex:none}
6
+ .tempest_main_O3GFv{flex:auto;min-width:0;overflow-x:auto}
7
+ .tempest_footer_IFW4q{flex:none}
8
+ .tempest_bottomNav_pKJ1v{z-index:30;flex:none;position:sticky;bottom:0}
@@ -0,0 +1,3 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_aspect_GnAJt{width:100%;position:relative}
3
+ .tempest_aspect_GnAJt>*{width:100%;height:100%}
@@ -0,0 +1,13 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_player_NEgFD{align-items:center;gap:var(--tempest-space-3);min-width:0;padding:var(--tempest-space-2) var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-surface);color:var(--tempest-text);font-family:var(--tempest-font-sans);display:flex}
3
+ .tempest_transport_-7WMK{border-radius:var(--tempest-radius-full);background-color:var(--tempest-primary);width:2.25rem;height:2.25rem;color:var(--tempest-primary-foreground);cursor:pointer;transition:var(--tempest-transition-color);border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}
4
+ .tempest_transport_-7WMK:disabled{background-color:var(--tempest-surface-3);color:var(--tempest-text-subtle);cursor:not-allowed}
5
+ .tempest_transport_-7WMK:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
6
+ @media (prefers-reduced-motion:reduce){.tempest_transport_-7WMK{transition:none}}
7
+ .tempest_seek_-iy4f{min-width:3rem;height:1.25rem;accent-color:var(--tempest-primary);cursor:pointer;background:0 0;flex:auto;margin:0}
8
+ .tempest_seek_-iy4f:disabled{accent-color:var(--tempest-surface-3);cursor:not-allowed}
9
+ .tempest_seek_-iy4f:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px;border-radius:var(--tempest-radius-sm)}
10
+ .tempest_time_zNVm8{gap:var(--tempest-space-1);color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);font-variant-numeric:tabular-nums;flex:none;display:inline-flex}
11
+ .tempest_actions_QZ7Yn{align-items:center;gap:var(--tempest-space-1);flex:none;display:inline-flex}
12
+ @media (pointer:coarse){.tempest_transport_-7WMK:after{content:"";position:absolute;inset:-4px}}
13
+ @media (width<=480px){.tempest_player_NEgFD{gap:var(--tempest-space-2);padding:var(--tempest-space-2)}}
@@ -0,0 +1,20 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_recorder_4p8pT{gap:var(--tempest-space-2);min-width:0;padding:var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-bg);color:var(--tempest-text);font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
3
+ .tempest_row_gNlbi{align-items:center;gap:var(--tempest-space-2);flex-wrap:wrap;min-width:0;display:flex}
4
+ .tempest_record_dhkt8,.tempest_stop_yMMLh,.tempest_secondary_C13wq{align-items:center;gap:var(--tempest-space-2);padding:var(--tempest-space-2) var(--tempest-space-3);border-radius:var(--tempest-radius-md);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;transition:var(--tempest-transition-color);border:1px solid #0000;flex:none;display:inline-flex;position:relative}
5
+ .tempest_record_dhkt8{background-color:var(--tempest-primary);color:var(--tempest-primary-foreground)}
6
+ .tempest_record_dhkt8:disabled{background-color:var(--tempest-surface-3);color:var(--tempest-text-subtle);cursor:not-allowed}
7
+ .tempest_stop_yMMLh{border-color:var(--tempest-danger);background-color:var(--tempest-danger-bg);color:var(--tempest-danger-fg)}
8
+ .tempest_secondary_C13wq{border-color:var(--tempest-border);background-color:var(--tempest-surface);color:var(--tempest-text);padding-inline:var(--tempest-space-2)}
9
+ .tempest_record_dhkt8:focus-visible,.tempest_stop_yMMLh:focus-visible,.tempest_secondary_C13wq:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
10
+ @media (prefers-reduced-motion:reduce){.tempest_record_dhkt8,.tempest_stop_yMMLh,.tempest_secondary_C13wq{transition:none}}
11
+ @media (pointer:coarse){.tempest_secondary_C13wq:after{content:"";position:absolute;inset:-6px}}
12
+ .tempest_meter_6QDc9{border-radius:var(--tempest-radius-full);background-color:var(--tempest-surface-2);flex:6rem;min-width:3rem;height:.5rem;overflow:hidden}
13
+ .tempest_meterFill_oUoGY{background-color:var(--tempest-success);transform-origin:0;width:100%;height:100%;transition:transform 80ms linear;display:block;transform:scaleX(0)}
14
+ @media (prefers-reduced-motion:reduce){.tempest_meterFill_oUoGY{transition:none}}
15
+ .tempest_clock_VGvvJ{color:var(--tempest-text);font-size:var(--tempest-text-sm);font-variant-numeric:tabular-nums;flex:none}
16
+ .tempest_max_kx9VL{color:var(--tempest-text-muted)}
17
+ .tempest_status_v2kHH{min-height:1.25em;color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);margin:0}
18
+ .tempest_notice_MtPVY{color:var(--tempest-text-muted);font-size:var(--tempest-text-sm);margin:0}
19
+ .tempest_footer_tfueB{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs)}
20
+ @media (width<=480px){.tempest_recorder_4p8pT{padding:var(--tempest-space-2)}.tempest_meter_6QDc9{flex-basis:100%;order:1}}
@@ -0,0 +1,13 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_avatar_3xMuZ{background-color:var(--tempest-surface-2);color:var(--tempest-text);font-family:var(--tempest-font-sans);font-weight:var(--tempest-weight-semibold);text-transform:uppercase;-webkit-user-select:none;user-select:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}
3
+ .tempest_image_ieqGp{object-fit:cover;width:100%;height:100%}
4
+ .tempest_xs_oSaLL{width:24px;height:24px;font-size:var(--tempest-text-2xs)}
5
+ .tempest_sm_sZ2bk{width:32px;height:32px;font-size:var(--tempest-text-xs)}
6
+ .tempest_md_Fdkbz{width:40px;height:40px;font-size:var(--tempest-text-base)}
7
+ .tempest_lg_pTTUA{width:56px;height:56px;font-size:var(--tempest-text-xl)}
8
+ .tempest_xl_mW58F{width:80px;height:80px;font-size:var(--tempest-text-3xl)}
9
+ .tempest_status_ISBnL{position:relative}
10
+ .tempest_dot_Wgfo-{border:2px solid var(--tempest-bg);border-radius:50%;width:28%;height:28%;position:absolute;bottom:0;right:0}
11
+ .tempest_dot_Wgfo-.tempest_online_-aWoW{background-color:var(--tempest-success-solid)}
12
+ .tempest_dot_Wgfo-.tempest_offline_-StX3{background-color:var(--tempest-text-subtle)}
13
+ .tempest_dot_Wgfo-.tempest_busy_TbwuF{background-color:var(--tempest-danger-solid)}
@@ -0,0 +1,18 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_group_qCSYk{align-items:center;display:inline-flex}
3
+ .tempest_slot_KyJQJ{border-radius:var(--tempest-radius-full);box-shadow:0 0 0 2px var(--tempest-bg);display:inline-flex}
4
+ .tempest_slot_KyJQJ+.tempest_slot_KyJQJ{margin-inline-start:var(--tempest-avatar-overlap,-10px)}
5
+ .tempest_xs_PPTP5 .tempest_slot_KyJQJ+.tempest_slot_KyJQJ{margin-inline-start:var(--tempest-avatar-overlap,-8px)}
6
+ .tempest_sm_ptoRA .tempest_slot_KyJQJ+.tempest_slot_KyJQJ{margin-inline-start:var(--tempest-avatar-overlap,-10px)}
7
+ .tempest_md_YbE61 .tempest_slot_KyJQJ+.tempest_slot_KyJQJ{margin-inline-start:var(--tempest-avatar-overlap,-12px)}
8
+ .tempest_lg_oAEMY .tempest_slot_KyJQJ+.tempest_slot_KyJQJ{margin-inline-start:var(--tempest-avatar-overlap,-16px)}
9
+ .tempest_xl_78RZG .tempest_slot_KyJQJ+.tempest_slot_KyJQJ{margin-inline-start:var(--tempest-avatar-overlap,-22px)}
10
+ .tempest_overflow_JZIo-{box-sizing:border-box;border-radius:var(--tempest-radius-full);background-color:var(--tempest-surface-3);width:40px;height:40px;color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);font-weight:var(--tempest-weight-medium);font-variant-numeric:tabular-nums;border:0;justify-content:center;align-items:center;display:inline-flex}
11
+ .tempest_xs_PPTP5 .tempest_overflow_JZIo-{width:24px;height:24px;font-size:var(--tempest-text-2xs)}
12
+ .tempest_sm_ptoRA .tempest_overflow_JZIo-{width:32px;height:32px}
13
+ .tempest_lg_oAEMY .tempest_overflow_JZIo-{width:56px;height:56px;font-size:var(--tempest-text-sm)}
14
+ .tempest_xl_78RZG .tempest_overflow_JZIo-{width:80px;height:80px;font-size:var(--tempest-text-base)}
15
+ .tempest_overflowButton_hSf-2{cursor:pointer;transition:background-color var(--tempest-duration-fast) var(--tempest-ease-out)}
16
+ .tempest_overflowButton_hSf-2:hover{background-color:var(--tempest-border-strong);color:var(--tempest-text)}
17
+ .tempest_overflowButton_hSf-2:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
18
+ @media (prefers-reduced-motion:reduce){.tempest_overflowButton_hSf-2{transition:none}}
@@ -0,0 +1,25 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_badge_RsuMz{align-items:center;gap:var(--tempest-space-1);padding:2px var(--tempest-space-2);border-radius:var(--tempest-radius-full);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-xs);font-weight:var(--tempest-weight-semibold);line-height:var(--tempest-leading-snug);letter-spacing:var(--tempest-tracking-normal);white-space:nowrap;border:1px solid #0000;display:inline-flex}
3
+ .tempest_sm_LYsCn{padding:1px var(--tempest-space-2);font-size:var(--tempest-text-2xs)}
4
+ .tempest_md_4Or8q{padding:2px var(--tempest-space-2);font-size:var(--tempest-text-xs)}
5
+ .tempest_lg_Bseje{padding:3px var(--tempest-space-3);font-size:var(--tempest-text-sm)}
6
+ .tempest_square_l63D-{border-radius:var(--tempest-radius-sm)}
7
+ .tempest_neutral_lulSm{background-color:var(--tempest-surface-2);color:var(--tempest-text)}
8
+ .tempest_neutral_lulSm.tempest_solid_0Leug{background-color:var(--tempest-gray-700);color:#fff}
9
+ .tempest_neutral_lulSm.tempest_outline_x06HL{color:var(--tempest-text);border-color:var(--tempest-border-strong);background-color:#0000}
10
+ .tempest_success_u9JiS{background-color:var(--tempest-success-bg);color:var(--tempest-success-fg)}
11
+ .tempest_success_u9JiS.tempest_solid_0Leug{background-color:var(--tempest-success-solid);color:var(--tempest-success-on-solid)}
12
+ .tempest_success_u9JiS.tempest_outline_x06HL{color:var(--tempest-success);border-color:var(--tempest-success-border);background-color:#0000}
13
+ .tempest_warning_nsGp-{background-color:var(--tempest-warning-bg);color:var(--tempest-warning-fg)}
14
+ .tempest_warning_nsGp-.tempest_solid_0Leug{background-color:var(--tempest-warning-solid);color:var(--tempest-warning-on-solid)}
15
+ .tempest_warning_nsGp-.tempest_outline_x06HL{color:var(--tempest-warning);border-color:var(--tempest-warning-border);background-color:#0000}
16
+ .tempest_danger_PD2hz{background-color:var(--tempest-danger-bg);color:var(--tempest-danger-fg)}
17
+ .tempest_danger_PD2hz.tempest_solid_0Leug{background-color:var(--tempest-danger-solid);color:var(--tempest-danger-on-solid)}
18
+ .tempest_danger_PD2hz.tempest_outline_x06HL{color:var(--tempest-danger);border-color:var(--tempest-danger-border);background-color:#0000}
19
+ .tempest_info_na6DQ{background-color:var(--tempest-info-bg);color:var(--tempest-info-fg)}
20
+ .tempest_info_na6DQ.tempest_solid_0Leug{background-color:var(--tempest-info-solid);color:var(--tempest-info-on-solid)}
21
+ .tempest_info_na6DQ.tempest_outline_x06HL{color:var(--tempest-info);border-color:var(--tempest-info-border);background-color:#0000}
22
+ .tempest_primary_S0WCS{background-color:var(--tempest-primary-soft);color:var(--tempest-primary-on-soft)}
23
+ .tempest_primary_S0WCS.tempest_solid_0Leug{background-color:var(--tempest-primary);color:var(--tempest-primary-foreground)}
24
+ .tempest_primary_S0WCS.tempest_outline_x06HL{color:var(--tempest-primary);border-color:var(--tempest-primary);background-color:#0000}
25
+ .tempest_dot_i0c-G{border-radius:var(--tempest-radius-full);background-color:currentColor;flex-shrink:0;width:6px;height:6px;display:inline-block}
@@ -0,0 +1,13 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_banner_oyoWE{align-items:flex-start;gap:var(--tempest-space-3);padding:var(--tempest-space-3) var(--tempest-space-4);border-radius:var(--tempest-radius-md);width:100%;font-family:var(--tempest-font-sans);font-size:var(--tempest-text-sm);line-height:var(--tempest-leading-snug);border:1px solid;display:flex}
3
+ .tempest_banner_oyoWE.tempest_info_s2q0P{background:var(--tempest-info-bg);color:var(--tempest-info-fg);border-color:var(--tempest-info-border)}
4
+ .tempest_banner_oyoWE.tempest_success_uLYQ3{background:var(--tempest-success-bg);color:var(--tempest-success-fg);border-color:var(--tempest-success-border)}
5
+ .tempest_banner_oyoWE.tempest_warning_9rua8{background:var(--tempest-warning-bg);color:var(--tempest-warning-fg);border-color:var(--tempest-warning-border)}
6
+ .tempest_banner_oyoWE.tempest_danger_Uzb-6{background:var(--tempest-danger-bg);color:var(--tempest-danger-fg);border-color:var(--tempest-danger-border)}
7
+ .tempest_icon_vzKmx{flex:none;align-items:center;line-height:1;display:inline-flex}
8
+ .tempest_body_-Qm4K{flex:auto;min-width:0}
9
+ .tempest_title_AeTHT{margin:0 0 var(--tempest-space-1);font-weight:var(--tempest-weight-semibold)}
10
+ .tempest_description_nbyf-{margin:0}
11
+ .tempest_action_47P8e{flex:none}
12
+ .tempest_close_Iy2oN{color:currentColor;cursor:pointer;border-radius:var(--tempest-radius-sm);background:0 0;border:0;flex:none;width:24px;height:24px;padding:0;font-size:20px;line-height:1}
13
+ .tempest_close_Iy2oN:hover{background:color-mix(in srgb, currentColor 10%, transparent)}
@@ -0,0 +1,10 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_list_XtltA{gap:var(--tempest-space-3,.75rem);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}
3
+ .tempest_item_y-W9f{gap:var(--tempest-space-1,.25rem);flex-direction:column;display:flex}
4
+ .tempest_line_WKQ57{justify-content:space-between;align-items:baseline;gap:var(--tempest-space-3,.75rem);font-size:var(--tempest-font-size-sm,.8125rem);display:flex}
5
+ .tempest_label_AywVf{min-width:0;color:var(--tempest-text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
6
+ .tempest_value_Y0DD0{align-items:baseline;gap:var(--tempest-space-2,.5rem);color:var(--tempest-text);font-variant-numeric:tabular-nums;white-space:nowrap;display:inline-flex}
7
+ .tempest_percentage_YTyMa{color:var(--tempest-text-subtle);font-size:var(--tempest-font-size-xs,.75rem)}
8
+ .tempest_track_OVSC3{border-radius:var(--tempest-radius-sm,.25rem);background-color:var(--tempest-surface-2);width:100%;height:.5rem;overflow:hidden}
9
+ .tempest_fill_kg-Vl{border-radius:inherit;height:100%;transition:width var(--tempest-duration-normal,.2s) ease}
10
+ @media (prefers-reduced-motion:reduce){.tempest_fill_kg-Vl{transition:none}}
@@ -0,0 +1,21 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_scanner_pIsey{gap:var(--tempest-space-2);min-width:0;color:var(--tempest-text);font-family:var(--tempest-font-sans);flex-direction:column;display:flex}
3
+ .tempest_viewport_PA5gg{border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-surface-3);width:100%;position:relative;overflow:hidden}
4
+ .tempest_video_vxiea{object-fit:cover;width:100%;height:100%;display:block}
5
+ .tempest_frame_sWB0M{background-image:linear-gradient(var(--tempest-primary) 0 0), linear-gradient(var(--tempest-primary) 0 0), linear-gradient(var(--tempest-primary) 0 0), linear-gradient(var(--tempest-primary) 0 0), linear-gradient(var(--tempest-primary) 0 0), linear-gradient(var(--tempest-primary) 0 0), linear-gradient(var(--tempest-primary) 0 0), linear-gradient(var(--tempest-primary) 0 0);pointer-events:none;background-position:0 0,0 0,100% 0,100% 0,0 100%,0 100%,100% 100%,100% 100%;background-repeat:no-repeat;background-size:22% 3px,3px 22%,22% 3px,3px 22%,22% 3px,3px 22%,22% 3px,3px 22%;position:absolute;inset:12%}
6
+ .tempest_laser_wloBH{background-color:var(--tempest-primary);opacity:.35;height:2px;position:absolute;top:0;left:0;right:0}
7
+ .tempest_laserActive_cCUwf{opacity:.9;animation:1.6s ease-in-out infinite alternate tempest_tempest-barcode-sweep_UmIe5}
8
+ @keyframes tempest_tempest-barcode-sweep_UmIe5{0%{top:0}to{top:calc(100% - 2px)}}
9
+ @media (prefers-reduced-motion:reduce){.tempest_laserActive_cCUwf{animation:none}}
10
+ .tempest_torch_aw7tt{top:var(--tempest-space-2);right:var(--tempest-space-2);padding:var(--tempest-space-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-full);background-color:var(--tempest-surface);color:var(--tempest-text);cursor:pointer;transition:var(--tempest-transition-color);justify-content:center;align-items:center;display:inline-flex;position:absolute}
11
+ .tempest_torch_aw7tt[aria-pressed=true]{border-color:var(--tempest-warning);background-color:var(--tempest-warning-bg);color:var(--tempest-warning-fg)}
12
+ .tempest_torch_aw7tt:focus-visible,.tempest_retry_3K88V:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:2px}
13
+ @media (prefers-reduced-motion:reduce){.tempest_torch_aw7tt{transition:none}}
14
+ @media (pointer:coarse){.tempest_torch_aw7tt:after{content:"";position:absolute;inset:-8px}}
15
+ .tempest_overlay_ZWMCa{justify-content:center;align-items:center;gap:var(--tempest-space-2);padding:var(--tempest-space-3);background-color:var(--tempest-surface);text-align:center;flex-direction:column;display:flex;position:absolute;inset:0}
16
+ .tempest_overlayText_jBln2{color:var(--tempest-text);font-size:var(--tempest-text-sm);margin:0}
17
+ .tempest_retry_3K88V{padding:var(--tempest-space-2) var(--tempest-space-3);border-radius:var(--tempest-radius-md);background-color:var(--tempest-primary);color:var(--tempest-primary-foreground);font:inherit;font-size:var(--tempest-text-sm);font-weight:var(--tempest-weight-medium);cursor:pointer;border:1px solid #0000}
18
+ .tempest_status_9eKPi{align-items:center;gap:var(--tempest-space-1);min-height:1.25em;color:var(--tempest-text-muted);font-size:var(--tempest-text-xs);margin:0;display:flex}
19
+ .tempest_statusIcon_k2Hmu{flex:none}
20
+ .tempest_notice_ELics{padding:var(--tempest-space-3);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);background-color:var(--tempest-surface);color:var(--tempest-text-muted);font-size:var(--tempest-text-sm);margin:0}
21
+ .tempest_footer_6SO7U{color:var(--tempest-text-muted);font-size:var(--tempest-text-xs)}
@@ -0,0 +1,10 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_bar_kp35Q{background:var(--tempest-surface);border-top:1px solid var(--tempest-border);width:100%;padding-bottom:env(safe-area-inset-bottom,0);font-family:var(--tempest-font-sans);display:flex}
3
+ .tempest_item_XfDIW{cursor:pointer;color:var(--tempest-text-muted);font-size:var(--tempest-text-2xs);transition:color var(--tempest-duration-fast,.12s) var(--tempest-ease-out,ease-out);background:0 0;border:0;flex-direction:column;flex:1 1 0;justify-content:center;align-items:center;gap:2px;min-height:56px;padding:8px 4px;display:flex}
4
+ .tempest_item_XfDIW:hover{color:var(--tempest-text)}
5
+ .tempest_item_XfDIW.tempest_active_sK54f{color:var(--tempest-primary)}
6
+ .tempest_item_XfDIW:disabled{opacity:.4;cursor:not-allowed}
7
+ .tempest_iconWrap_yJ20b{display:inline-flex;position:relative}
8
+ .tempest_icon_TAjtI{justify-content:center;align-items:center;font-size:20px;line-height:1;display:inline-flex}
9
+ .tempest_badge_-c3Do{border-radius:var(--tempest-radius-full);background:var(--tempest-danger-solid);min-width:14px;height:14px;color:var(--tempest-danger-on-solid);text-align:center;font-size:10px;line-height:14px;font-weight:var(--tempest-weight-semibold);padding:0 4px;position:absolute;top:-4px;right:-8px}
10
+ .tempest_label_qJj3L{line-height:1}
@@ -0,0 +1,11 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_root_qXce2{z-index:60;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}
3
+ .tempest_backdrop_WLqh0{animation:tempest_fadeIn_fyyhf var(--tempest-duration-base,.2s) var(--tempest-ease-out,ease-out);background:#00000073;position:absolute;inset:0}
4
+ .tempest_sheet_Okz1P{background:var(--tempest-surface);border-top-left-radius:var(--tempest-radius-2xl,var(--tempest-radius-lg));border-top-right-radius:var(--tempest-radius-2xl,var(--tempest-radius-lg));width:100%;max-width:720px;max-height:90dvh;box-shadow:var(--tempest-shadow-xl,0 -10px 30px #00000040);padding-bottom:env(safe-area-inset-bottom,0);animation:tempest_slideUp_CSrpB var(--tempest-duration-base,.24s) var(--tempest-ease-out,ease-out);font-family:var(--tempest-font-sans);flex-direction:column;display:flex;position:relative;overflow:hidden}
5
+ .tempest_handle_GWCoK{padding:var(--tempest-space-2) 0;cursor:grab;background:0 0;border:0;flex:none;justify-content:center;align-items:center;display:flex}
6
+ .tempest_handleBar_XPPiI{background:var(--tempest-gray-300);border-radius:var(--tempest-radius-full);width:36px;height:4px;display:block}
7
+ .tempest_title_i5Vuc{padding:var(--tempest-space-2) var(--tempest-space-4) var(--tempest-space-3);font-size:var(--tempest-text-lg);font-weight:var(--tempest-weight-semibold);color:var(--tempest-text);border-bottom:1px solid var(--tempest-border);flex:none}
8
+ .tempest_body_bgDhJ{padding:var(--tempest-space-4);color:var(--tempest-text);flex:auto;overflow-y:auto}
9
+ @keyframes tempest_fadeIn_fyyhf{0%{opacity:0}to{opacity:1}}
10
+ @keyframes tempest_slideUp_CSrpB{0%{transform:translateY(100%)}to{transform:translateY(0)}}
11
+ @media (prefers-reduced-motion:reduce){.tempest_backdrop_WLqh0,.tempest_sheet_Okz1P{animation:none}}
@@ -0,0 +1,20 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_map_t-hwx{background:var(--tempest-surface-2);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-lg);width:100%;font-family:var(--tempest-font-sans);position:relative;overflow:hidden}
3
+ .tempest_svg_mUsn2{width:100%;display:block}
4
+ .tempest_loading_55clN{height:100%;color:var(--tempest-text-muted);font-size:var(--tempest-text-sm);justify-content:center;align-items:center;display:flex}
5
+ .tempest_state_JV7Hu{fill:var(--tempest-surface-3);stroke:var(--tempest-border-strong);stroke-width:.75px;stroke-linejoin:round;transition:fill .12s,opacity .12s}
6
+ .tempest_state_JV7Hu[role=button]{cursor:pointer}
7
+ .tempest_state_JV7Hu[role=button]:hover{fill:var(--tempest-primary-soft)}
8
+ .tempest_state_JV7Hu[role=button]:focus-visible{stroke:var(--tempest-primary);stroke-width:1.5px;outline:none}
9
+ .tempest_selected_CNxWu{fill:var(--tempest-primary);stroke:var(--tempest-primary-active);stroke-width:1.25px}
10
+ .tempest_selected_CNxWu:hover{fill:var(--tempest-primary-hover)}
11
+ .tempest_label_PK-ES{fill:var(--tempest-text);font-size:10px;font-weight:var(--tempest-weight-medium);pointer-events:none;-webkit-user-select:none;user-select:none}
12
+ .tempest_tooltip_7n2Ui{z-index:2;max-width:240px;padding:var(--tempest-space-2) var(--tempest-space-3);background:var(--tempest-surface);color:var(--tempest-text);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-md);box-shadow:var(--tempest-shadow-md,0 4px 12px #0000001f);font-size:var(--tempest-text-xs);line-height:var(--tempest-leading-snug);pointer-events:none;white-space:nowrap;position:absolute;transform:translate(12px,12px)}
13
+ .tempest_tooltipTitle_PJZp0{font-weight:var(--tempest-weight-semibold);font-size:var(--tempest-text-sm)}
14
+ .tempest_tooltipMeta_hmNSP{color:var(--tempest-text-muted)}
15
+ .tempest_marker_5td7B{stroke:var(--tempest-surface);stroke-width:2px}
16
+ .tempest_marker_5td7B[role=button]{cursor:pointer}
17
+ .tempest_marker_5td7B[role=button]:hover{stroke:var(--tempest-primary-active)}
18
+ .tempest_marker_5td7B[role=button]:focus-visible{stroke:var(--tempest-primary);stroke-width:3px;outline:none}
19
+ .tempest_zoomReset_IXmak{top:var(--tempest-space-2);right:var(--tempest-space-2);padding:var(--tempest-space-1) var(--tempest-space-2);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-xs);color:var(--tempest-text);background:var(--tempest-surface);border:1px solid var(--tempest-border);border-radius:var(--tempest-radius-sm);cursor:pointer;position:absolute}
20
+ .tempest_zoomReset_IXmak:hover{background:var(--tempest-surface-2)}
@@ -0,0 +1,8 @@
1
+ /* Generated by scripts/split-css.mjs — do not edit. */
2
+ .tempest_nav_H4g6P{align-items:center;gap:var(--tempest-space-1);font-family:var(--tempest-font-sans);font-size:var(--tempest-text-sm);color:var(--tempest-text-muted);flex-wrap:wrap;display:flex}
3
+ .tempest_item_O4g3P{align-items:center;gap:var(--tempest-space-1);display:inline-flex}
4
+ .tempest_link_7WM67{color:var(--tempest-text-muted);border-radius:var(--tempest-radius-sm);transition:var(--tempest-transition-color);padding:2px 6px;text-decoration:none}
5
+ @media (hover:hover) and (pointer:fine){.tempest_link_7WM67:hover{color:var(--tempest-text);background-color:var(--tempest-surface)}}
6
+ .tempest_link_7WM67:focus-visible{outline:var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);outline-offset:var(--tempest-focus-ring-offset)}
7
+ .tempest_current_JdlcS{color:var(--tempest-text);font-weight:var(--tempest-weight-semibold)}
8
+ .tempest_separator_zGWyJ{color:var(--tempest-text-subtle);-webkit-user-select:none;user-select:none;margin:0 2px}