tempest-react-sdk 0.78.0 → 0.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1603) hide show
  1. package/README.md +6 -6
  2. package/bin/lib/openapi/generate.hostile.test.mjs +45 -4
  3. package/bin/lib/openapi/generate.mjs +303 -88
  4. package/bin/lib/openapi/generate.pagination.test.mjs +3 -2
  5. package/bin/lib/openapi/generate.test.mjs +462 -1
  6. package/bin/lib/openapi/schema-to-zod.mjs +4 -3
  7. package/dist/access/Can.cjs.map +1 -1
  8. package/dist/access/Can.js.map +1 -1
  9. package/dist/access/access-control-context.cjs.map +1 -1
  10. package/dist/access/access-control-context.js.map +1 -1
  11. package/dist/access/create-role-access-control.cjs.map +1 -1
  12. package/dist/access/create-role-access-control.js.map +1 -1
  13. package/dist/access/permissions-from-token.cjs.map +1 -1
  14. package/dist/access/permissions-from-token.js.map +1 -1
  15. package/dist/access/use-can.cjs.map +1 -1
  16. package/dist/access/use-can.js.map +1 -1
  17. package/dist/app/AppProviders.cjs.map +1 -1
  18. package/dist/app/AppProviders.js.map +1 -1
  19. package/dist/audio/audio-bus.cjs.map +1 -1
  20. package/dist/audio/audio-bus.js.map +1 -1
  21. package/dist/audio/audio-output.cjs.map +1 -1
  22. package/dist/audio/audio-output.js.map +1 -1
  23. package/dist/audio/audio-player.cjs.map +1 -1
  24. package/dist/audio/audio-player.js.map +1 -1
  25. package/dist/audio/audio-recorder.cjs.map +1 -1
  26. package/dist/audio/audio-recorder.js.map +1 -1
  27. package/dist/audio/duration.cjs.map +1 -1
  28. package/dist/audio/duration.js.map +1 -1
  29. package/dist/audio/level-meter.cjs.map +1 -1
  30. package/dist/audio/level-meter.js.map +1 -1
  31. package/dist/audio/media-access.cjs.map +1 -1
  32. package/dist/audio/media-access.js.map +1 -1
  33. package/dist/audio/noise-floor.cjs.map +1 -1
  34. package/dist/audio/noise-floor.js.map +1 -1
  35. package/dist/audio/sfx-pool.cjs.map +1 -1
  36. package/dist/audio/sfx-pool.js.map +1 -1
  37. package/dist/audio/use-audio-bus.cjs.map +1 -1
  38. package/dist/audio/use-audio-bus.js.map +1 -1
  39. package/dist/audio/use-audio-recorder.cjs.map +1 -1
  40. package/dist/audio/use-audio-recorder.js.map +1 -1
  41. package/dist/audio/use-audio.cjs.map +1 -1
  42. package/dist/audio/use-audio.js.map +1 -1
  43. package/dist/audio/use-microphone.cjs +1 -1
  44. package/dist/audio/use-microphone.cjs.map +1 -1
  45. package/dist/audio/use-microphone.js +1 -5
  46. package/dist/audio/use-microphone.js.map +1 -1
  47. package/dist/audio/use-sfx-pool.cjs.map +1 -1
  48. package/dist/audio/use-sfx-pool.js.map +1 -1
  49. package/dist/audio/voice-activity.cjs.map +1 -1
  50. package/dist/audio/voice-activity.js.map +1 -1
  51. package/dist/audio/voice-chain-stages.cjs.map +1 -1
  52. package/dist/audio/voice-chain-stages.js.map +1 -1
  53. package/dist/audio/voice-chain.cjs.map +1 -1
  54. package/dist/audio/voice-chain.js.map +1 -1
  55. package/dist/audio/wav.cjs.map +1 -1
  56. package/dist/audio/wav.js.map +1 -1
  57. package/dist/auth/AuthGuard.cjs.map +1 -1
  58. package/dist/auth/AuthGuard.js.map +1 -1
  59. package/dist/auth/create-auth-store.cjs.map +1 -1
  60. package/dist/auth/create-auth-store.js.map +1 -1
  61. package/dist/auth/create-tempest-auth.cjs +1 -1
  62. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  63. package/dist/auth/create-tempest-auth.js +1 -3
  64. package/dist/auth/create-tempest-auth.js.map +1 -1
  65. package/dist/auth/jwt.cjs.map +1 -1
  66. package/dist/auth/jwt.js.map +1 -1
  67. package/dist/auth/lazy-with-retry.cjs.map +1 -1
  68. package/dist/auth/lazy-with-retry.js.map +1 -1
  69. package/dist/auth/passkey.cjs.map +1 -1
  70. package/dist/auth/passkey.js.map +1 -1
  71. package/dist/auth/refresh-queue.cjs.map +1 -1
  72. package/dist/auth/refresh-queue.js.map +1 -1
  73. package/dist/auth/use-passkey.cjs +1 -1
  74. package/dist/auth/use-passkey.cjs.map +1 -1
  75. package/dist/auth/use-passkey.js +1 -1
  76. package/dist/auth/use-passkey.js.map +1 -1
  77. package/dist/br/BrazilMap.cjs.map +1 -1
  78. package/dist/br/BrazilMap.js.map +1 -1
  79. package/dist/br/BrazilMap.module.cjs.map +1 -1
  80. package/dist/br/BrazilMap.module.js.map +1 -1
  81. package/dist/br/BrazilStateCitySelect.cjs.map +1 -1
  82. package/dist/br/BrazilStateCitySelect.js.map +1 -1
  83. package/dist/br/BrazilStateMap.cjs.map +1 -1
  84. package/dist/br/BrazilStateMap.js.map +1 -1
  85. package/dist/br/MapLegend.cjs.map +1 -1
  86. package/dist/br/MapLegend.js.map +1 -1
  87. package/dist/br/MapLegend.module.cjs.map +1 -1
  88. package/dist/br/MapLegend.module.js.map +1 -1
  89. package/dist/br/MapMarkers.cjs.map +1 -1
  90. package/dist/br/MapMarkers.js.map +1 -1
  91. package/dist/br/MapTooltip.cjs.map +1 -1
  92. package/dist/br/MapTooltip.js.map +1 -1
  93. package/dist/br/MunicipalitySearch.cjs +1 -1
  94. package/dist/br/MunicipalitySearch.cjs.map +1 -1
  95. package/dist/br/MunicipalitySearch.js +2 -5
  96. package/dist/br/MunicipalitySearch.js.map +1 -1
  97. package/dist/br/MunicipalitySearch.module.cjs.map +1 -1
  98. package/dist/br/MunicipalitySearch.module.js.map +1 -1
  99. package/dist/br/PixQRCode.cjs.map +1 -1
  100. package/dist/br/PixQRCode.js.map +1 -1
  101. package/dist/br/PixQRCode.module.cjs.map +1 -1
  102. package/dist/br/PixQRCode.module.js.map +1 -1
  103. package/dist/br/boleto.cjs.map +1 -1
  104. package/dist/br/boleto.js.map +1 -1
  105. package/dist/br/br-geo.cjs.map +1 -1
  106. package/dist/br/br-geo.js.map +1 -1
  107. package/dist/br/data/br-centroids.cjs.map +1 -1
  108. package/dist/br/data/br-centroids.js.map +1 -1
  109. package/dist/br/data/br-locations.cjs.map +1 -1
  110. package/dist/br/data/br-locations.js.map +1 -1
  111. package/dist/br/data/br-uf-geo.cjs.map +1 -1
  112. package/dist/br/data/br-uf-geo.js.map +1 -1
  113. package/dist/br/data/mun/AC.cjs.map +1 -1
  114. package/dist/br/data/mun/AC.js.map +1 -1
  115. package/dist/br/data/mun/AL.cjs.map +1 -1
  116. package/dist/br/data/mun/AL.js.map +1 -1
  117. package/dist/br/data/mun/AM.cjs.map +1 -1
  118. package/dist/br/data/mun/AM.js.map +1 -1
  119. package/dist/br/data/mun/AP.cjs.map +1 -1
  120. package/dist/br/data/mun/AP.js.map +1 -1
  121. package/dist/br/data/mun/BA.cjs.map +1 -1
  122. package/dist/br/data/mun/BA.js.map +1 -1
  123. package/dist/br/data/mun/CE.cjs.map +1 -1
  124. package/dist/br/data/mun/CE.js.map +1 -1
  125. package/dist/br/data/mun/DF.cjs.map +1 -1
  126. package/dist/br/data/mun/DF.js.map +1 -1
  127. package/dist/br/data/mun/ES.cjs.map +1 -1
  128. package/dist/br/data/mun/ES.js.map +1 -1
  129. package/dist/br/data/mun/GO.cjs.map +1 -1
  130. package/dist/br/data/mun/GO.js.map +1 -1
  131. package/dist/br/data/mun/MA.cjs.map +1 -1
  132. package/dist/br/data/mun/MA.js.map +1 -1
  133. package/dist/br/data/mun/MG.cjs.map +1 -1
  134. package/dist/br/data/mun/MG.js.map +1 -1
  135. package/dist/br/data/mun/MS.cjs.map +1 -1
  136. package/dist/br/data/mun/MS.js.map +1 -1
  137. package/dist/br/data/mun/MT.cjs.map +1 -1
  138. package/dist/br/data/mun/MT.js.map +1 -1
  139. package/dist/br/data/mun/PA.cjs.map +1 -1
  140. package/dist/br/data/mun/PA.js.map +1 -1
  141. package/dist/br/data/mun/PB.cjs.map +1 -1
  142. package/dist/br/data/mun/PB.js.map +1 -1
  143. package/dist/br/data/mun/PE.cjs.map +1 -1
  144. package/dist/br/data/mun/PE.js.map +1 -1
  145. package/dist/br/data/mun/PI.cjs.map +1 -1
  146. package/dist/br/data/mun/PI.js.map +1 -1
  147. package/dist/br/data/mun/PR.cjs.map +1 -1
  148. package/dist/br/data/mun/PR.js.map +1 -1
  149. package/dist/br/data/mun/RJ.cjs.map +1 -1
  150. package/dist/br/data/mun/RJ.js.map +1 -1
  151. package/dist/br/data/mun/RN.cjs.map +1 -1
  152. package/dist/br/data/mun/RN.js.map +1 -1
  153. package/dist/br/data/mun/RO.cjs.map +1 -1
  154. package/dist/br/data/mun/RO.js.map +1 -1
  155. package/dist/br/data/mun/RR.cjs.map +1 -1
  156. package/dist/br/data/mun/RR.js.map +1 -1
  157. package/dist/br/data/mun/RS.cjs.map +1 -1
  158. package/dist/br/data/mun/RS.js.map +1 -1
  159. package/dist/br/data/mun/SC.cjs.map +1 -1
  160. package/dist/br/data/mun/SC.js.map +1 -1
  161. package/dist/br/data/mun/SE.cjs.map +1 -1
  162. package/dist/br/data/mun/SE.js.map +1 -1
  163. package/dist/br/data/mun/SP.cjs.map +1 -1
  164. package/dist/br/data/mun/SP.js.map +1 -1
  165. package/dist/br/data/mun/TO.cjs.map +1 -1
  166. package/dist/br/data/mun/TO.js.map +1 -1
  167. package/dist/br/geocode.cjs.map +1 -1
  168. package/dist/br/geocode.js.map +1 -1
  169. package/dist/br/holidays.cjs.map +1 -1
  170. package/dist/br/holidays.js.map +1 -1
  171. package/dist/br/locations.cjs.map +1 -1
  172. package/dist/br/locations.js.map +1 -1
  173. package/dist/br/nfe.cjs.map +1 -1
  174. package/dist/br/nfe.js.map +1 -1
  175. package/dist/br/pix.cjs +1 -1
  176. package/dist/br/pix.cjs.map +1 -1
  177. package/dist/br/pix.js +108 -74
  178. package/dist/br/pix.js.map +1 -1
  179. package/dist/br/regions.cjs.map +1 -1
  180. package/dist/br/regions.js.map +1 -1
  181. package/dist/br/scales.cjs.map +1 -1
  182. package/dist/br/scales.js.map +1 -1
  183. package/dist/br/state-geo.cjs.map +1 -1
  184. package/dist/br/state-geo.js.map +1 -1
  185. package/dist/br/svg-utils.cjs.map +1 -1
  186. package/dist/br/svg-utils.js.map +1 -1
  187. package/dist/br/use-map-hover.cjs.map +1 -1
  188. package/dist/br/use-map-hover.js.map +1 -1
  189. package/dist/br/use-map-zoom.cjs.map +1 -1
  190. package/dist/br/use-map-zoom.js.map +1 -1
  191. package/dist/br/whatsapp.cjs.map +1 -1
  192. package/dist/br/whatsapp.js.map +1 -1
  193. package/dist/br.cjs.map +1 -1
  194. package/dist/br.d.ts +6 -2
  195. package/dist/br.js.map +1 -1
  196. package/dist/capture/barcode.cjs.map +1 -1
  197. package/dist/capture/barcode.js.map +1 -1
  198. package/dist/capture/media-recorder.cjs.map +1 -1
  199. package/dist/capture/media-recorder.js.map +1 -1
  200. package/dist/capture/use-barcode-scanner.cjs.map +1 -1
  201. package/dist/capture/use-barcode-scanner.js.map +1 -1
  202. package/dist/capture/use-screen-capture.cjs +1 -1
  203. package/dist/capture/use-screen-capture.cjs.map +1 -1
  204. package/dist/capture/use-screen-capture.js +1 -7
  205. package/dist/capture/use-screen-capture.js.map +1 -1
  206. package/dist/capture/use-speech-recognition.cjs +1 -1
  207. package/dist/capture/use-speech-recognition.cjs.map +1 -1
  208. package/dist/capture/use-speech-recognition.js +35 -36
  209. package/dist/capture/use-speech-recognition.js.map +1 -1
  210. package/dist/capture/use-torch.cjs.map +1 -1
  211. package/dist/capture/use-torch.js.map +1 -1
  212. package/dist/capture/use-video-recorder.cjs.map +1 -1
  213. package/dist/capture/use-video-recorder.js.map +1 -1
  214. package/dist/capture/video-recorder.cjs.map +1 -1
  215. package/dist/capture/video-recorder.js.map +1 -1
  216. package/dist/charts/AreaChart.cjs.map +1 -1
  217. package/dist/charts/AreaChart.js.map +1 -1
  218. package/dist/charts/BarChart.cjs.map +1 -1
  219. package/dist/charts/BarChart.js.map +1 -1
  220. package/dist/charts/LineChart.cjs.map +1 -1
  221. package/dist/charts/LineChart.js.map +1 -1
  222. package/dist/charts/PieChart.cjs.map +1 -1
  223. package/dist/charts/PieChart.js.map +1 -1
  224. package/dist/charts/RadarChart.cjs.map +1 -1
  225. package/dist/charts/RadarChart.js.map +1 -1
  226. package/dist/charts/palette.cjs.map +1 -1
  227. package/dist/charts/palette.js.map +1 -1
  228. package/dist/charts/scales.cjs.map +1 -1
  229. package/dist/charts/scales.js.map +1 -1
  230. package/dist/charts/types.cjs.map +1 -1
  231. package/dist/charts/types.js.map +1 -1
  232. package/dist/charts/use-chart-colors.cjs.map +1 -1
  233. package/dist/charts/use-chart-colors.js.map +1 -1
  234. package/dist/components/AIChat/AIChat.cjs +1 -1
  235. package/dist/components/AIChat/AIChat.cjs.map +1 -1
  236. package/dist/components/AIChat/AIChat.js +1 -5
  237. package/dist/components/AIChat/AIChat.js.map +1 -1
  238. package/dist/components/AIChat/AIChat.module.cjs.map +1 -1
  239. package/dist/components/AIChat/AIChat.module.js.map +1 -1
  240. package/dist/components/AIChat/AIChatComposer.cjs +1 -1
  241. package/dist/components/AIChat/AIChatComposer.cjs.map +1 -1
  242. package/dist/components/AIChat/AIChatComposer.js +1 -7
  243. package/dist/components/AIChat/AIChatComposer.js.map +1 -1
  244. package/dist/components/AIChat/AIChatTurn.cjs.map +1 -1
  245. package/dist/components/AIChat/AIChatTurn.js.map +1 -1
  246. package/dist/components/AIChat/ai-chat-turns.cjs.map +1 -1
  247. package/dist/components/AIChat/ai-chat-turns.js.map +1 -1
  248. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  249. package/dist/components/Accordion/Accordion.js.map +1 -1
  250. package/dist/components/Accordion/Accordion.module.cjs.map +1 -1
  251. package/dist/components/Accordion/Accordion.module.js.map +1 -1
  252. package/dist/components/Alert/Alert.cjs.map +1 -1
  253. package/dist/components/Alert/Alert.js.map +1 -1
  254. package/dist/components/Alert/Alert.module.cjs.map +1 -1
  255. package/dist/components/Alert/Alert.module.js.map +1 -1
  256. package/dist/components/AppBar/AppBar.cjs.map +1 -1
  257. package/dist/components/AppBar/AppBar.js.map +1 -1
  258. package/dist/components/AppBar/AppBar.module.cjs.map +1 -1
  259. package/dist/components/AppBar/AppBar.module.js.map +1 -1
  260. package/dist/components/AppBar/use-sticky-body-warning.cjs +1 -1
  261. package/dist/components/AppBar/use-sticky-body-warning.cjs.map +1 -1
  262. package/dist/components/AppBar/use-sticky-body-warning.js +1 -1
  263. package/dist/components/AppBar/use-sticky-body-warning.js.map +1 -1
  264. package/dist/components/AppShell/AppShell.cjs.map +1 -1
  265. package/dist/components/AppShell/AppShell.js.map +1 -1
  266. package/dist/components/AppShell/AppShell.module.cjs.map +1 -1
  267. package/dist/components/AppShell/AppShell.module.js.map +1 -1
  268. package/dist/components/AspectRatio/AspectRatio.cjs.map +1 -1
  269. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  270. package/dist/components/AspectRatio/AspectRatio.module.cjs.map +1 -1
  271. package/dist/components/AspectRatio/AspectRatio.module.js.map +1 -1
  272. package/dist/components/AudioPlayer/AudioPlayer.cjs +1 -1
  273. package/dist/components/AudioPlayer/AudioPlayer.cjs.map +1 -1
  274. package/dist/components/AudioPlayer/AudioPlayer.js +1 -7
  275. package/dist/components/AudioPlayer/AudioPlayer.js.map +1 -1
  276. package/dist/components/AudioPlayer/AudioPlayer.module.cjs.map +1 -1
  277. package/dist/components/AudioPlayer/AudioPlayer.module.js.map +1 -1
  278. package/dist/components/AudioRecorder/AudioRecorder.cjs +1 -1
  279. package/dist/components/AudioRecorder/AudioRecorder.cjs.map +1 -1
  280. package/dist/components/AudioRecorder/AudioRecorder.js +16 -21
  281. package/dist/components/AudioRecorder/AudioRecorder.js.map +1 -1
  282. package/dist/components/AudioRecorder/AudioRecorder.module.cjs.map +1 -1
  283. package/dist/components/AudioRecorder/AudioRecorder.module.js.map +1 -1
  284. package/dist/components/Avatar/Avatar.cjs.map +1 -1
  285. package/dist/components/Avatar/Avatar.js.map +1 -1
  286. package/dist/components/Avatar/Avatar.module.cjs.map +1 -1
  287. package/dist/components/Avatar/Avatar.module.js.map +1 -1
  288. package/dist/components/AvatarGroup/AvatarGroup.cjs.map +1 -1
  289. package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
  290. package/dist/components/AvatarGroup/AvatarGroup.module.cjs.map +1 -1
  291. package/dist/components/AvatarGroup/AvatarGroup.module.js.map +1 -1
  292. package/dist/components/Badge/Badge.cjs.map +1 -1
  293. package/dist/components/Badge/Badge.js.map +1 -1
  294. package/dist/components/Badge/Badge.module.cjs.map +1 -1
  295. package/dist/components/Badge/Badge.module.js.map +1 -1
  296. package/dist/components/Banner/Banner.cjs.map +1 -1
  297. package/dist/components/Banner/Banner.js.map +1 -1
  298. package/dist/components/Banner/Banner.module.cjs.map +1 -1
  299. package/dist/components/Banner/Banner.module.js.map +1 -1
  300. package/dist/components/BarList/BarList.cjs.map +1 -1
  301. package/dist/components/BarList/BarList.js.map +1 -1
  302. package/dist/components/BarList/BarList.module.cjs.map +1 -1
  303. package/dist/components/BarList/BarList.module.js.map +1 -1
  304. package/dist/components/BarList/bar-list-model.cjs.map +1 -1
  305. package/dist/components/BarList/bar-list-model.js.map +1 -1
  306. package/dist/components/BarcodeScanner/BarcodeScanner.cjs.map +1 -1
  307. package/dist/components/BarcodeScanner/BarcodeScanner.js.map +1 -1
  308. package/dist/components/BarcodeScanner/BarcodeScanner.module.cjs.map +1 -1
  309. package/dist/components/BarcodeScanner/BarcodeScanner.module.js.map +1 -1
  310. package/dist/components/BottomNavigation/BottomNavigation.cjs.map +1 -1
  311. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  312. package/dist/components/BottomNavigation/BottomNavigation.module.cjs.map +1 -1
  313. package/dist/components/BottomNavigation/BottomNavigation.module.js.map +1 -1
  314. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  315. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  316. package/dist/components/BottomSheet/BottomSheet.module.cjs.map +1 -1
  317. package/dist/components/BottomSheet/BottomSheet.module.js.map +1 -1
  318. package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
  319. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  320. package/dist/components/Breadcrumbs/Breadcrumbs.module.cjs.map +1 -1
  321. package/dist/components/Breadcrumbs/Breadcrumbs.module.js.map +1 -1
  322. package/dist/components/Button/Button.cjs.map +1 -1
  323. package/dist/components/Button/Button.js.map +1 -1
  324. package/dist/components/Button/Button.module.cjs.map +1 -1
  325. package/dist/components/Button/Button.module.js.map +1 -1
  326. package/dist/components/Button/ButtonContent.cjs.map +1 -1
  327. package/dist/components/Button/ButtonContent.js.map +1 -1
  328. package/dist/components/Button/ButtonSlot.cjs.map +1 -1
  329. package/dist/components/Button/ButtonSlot.js.map +1 -1
  330. package/dist/components/Button/button-class.cjs.map +1 -1
  331. package/dist/components/Button/button-class.js.map +1 -1
  332. package/dist/components/Button/link-rel.cjs.map +1 -1
  333. package/dist/components/Button/link-rel.js.map +1 -1
  334. package/dist/components/Button/slot.cjs.map +1 -1
  335. package/dist/components/Button/slot.js.map +1 -1
  336. package/dist/components/Calendar/Calendar.cjs.map +1 -1
  337. package/dist/components/Calendar/Calendar.js.map +1 -1
  338. package/dist/components/Calendar/Calendar.module.cjs.map +1 -1
  339. package/dist/components/Calendar/Calendar.module.js.map +1 -1
  340. package/dist/components/Card/Card.cjs.map +1 -1
  341. package/dist/components/Card/Card.js.map +1 -1
  342. package/dist/components/Card/Card.module.cjs.map +1 -1
  343. package/dist/components/Card/Card.module.js.map +1 -1
  344. package/dist/components/Carousel/Carousel.cjs.map +1 -1
  345. package/dist/components/Carousel/Carousel.js.map +1 -1
  346. package/dist/components/Carousel/Carousel.module.cjs.map +1 -1
  347. package/dist/components/Carousel/Carousel.module.js.map +1 -1
  348. package/dist/components/Center/Center.cjs.map +1 -1
  349. package/dist/components/Center/Center.js.map +1 -1
  350. package/dist/components/Center/Center.module.cjs.map +1 -1
  351. package/dist/components/Center/Center.module.js.map +1 -1
  352. package/dist/components/Chat/Chat.cjs.map +1 -1
  353. package/dist/components/Chat/Chat.js.map +1 -1
  354. package/dist/components/Chat/Chat.module.cjs.map +1 -1
  355. package/dist/components/Chat/Chat.module.js.map +1 -1
  356. package/dist/components/Chat/ChatActionsMenu.cjs.map +1 -1
  357. package/dist/components/Chat/ChatActionsMenu.js.map +1 -1
  358. package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
  359. package/dist/components/Chat/ChatAttachments.js.map +1 -1
  360. package/dist/components/Chat/ChatBubble.cjs.map +1 -1
  361. package/dist/components/Chat/ChatBubble.js.map +1 -1
  362. package/dist/components/Chat/ChatComposer.cjs.map +1 -1
  363. package/dist/components/Chat/ChatComposer.js.map +1 -1
  364. package/dist/components/Chat/chat-groups.cjs +1 -1
  365. package/dist/components/Chat/chat-groups.cjs.map +1 -1
  366. package/dist/components/Chat/chat-groups.js +2 -6
  367. package/dist/components/Chat/chat-groups.js.map +1 -1
  368. package/dist/components/Chat/chat-receipt.cjs.map +1 -1
  369. package/dist/components/Chat/chat-receipt.js.map +1 -1
  370. package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
  371. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  372. package/dist/components/Checkbox/Checkbox.module.cjs.map +1 -1
  373. package/dist/components/Checkbox/Checkbox.module.js.map +1 -1
  374. package/dist/components/ChipInput/ChipInput.cjs +1 -1
  375. package/dist/components/ChipInput/ChipInput.cjs.map +1 -1
  376. package/dist/components/ChipInput/ChipInput.js +2 -12
  377. package/dist/components/ChipInput/ChipInput.js.map +1 -1
  378. package/dist/components/ChipInput/ChipInput.module.cjs.map +1 -1
  379. package/dist/components/ChipInput/ChipInput.module.js.map +1 -1
  380. package/dist/components/ClickOutside/ClickOutside.cjs.map +1 -1
  381. package/dist/components/ClickOutside/ClickOutside.js.map +1 -1
  382. package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -1
  383. package/dist/components/CodeBlock/CodeBlock.js.map +1 -1
  384. package/dist/components/CodeBlock/CodeBlock.module.cjs.map +1 -1
  385. package/dist/components/CodeBlock/CodeBlock.module.js.map +1 -1
  386. package/dist/components/CodeBlock/tokenize.cjs.map +1 -1
  387. package/dist/components/CodeBlock/tokenize.js.map +1 -1
  388. package/dist/components/Collapsible/Collapsible.cjs.map +1 -1
  389. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  390. package/dist/components/Collapsible/Collapsible.module.cjs.map +1 -1
  391. package/dist/components/Collapsible/Collapsible.module.js.map +1 -1
  392. package/dist/components/Combobox/Combobox.cjs.map +1 -1
  393. package/dist/components/Combobox/Combobox.js.map +1 -1
  394. package/dist/components/Combobox/Combobox.module.cjs.map +1 -1
  395. package/dist/components/Combobox/Combobox.module.js.map +1 -1
  396. package/dist/components/Combobox/use-listbox-dismiss.cjs.map +1 -1
  397. package/dist/components/Combobox/use-listbox-dismiss.js.map +1 -1
  398. package/dist/components/Command/Command.cjs +1 -1
  399. package/dist/components/Command/Command.cjs.map +1 -1
  400. package/dist/components/Command/Command.js +4 -11
  401. package/dist/components/Command/Command.js.map +1 -1
  402. package/dist/components/Command/Command.module.cjs.map +1 -1
  403. package/dist/components/Command/Command.module.js.map +1 -1
  404. package/dist/components/ConditionalWrapper/ConditionalWrapper.cjs.map +1 -1
  405. package/dist/components/ConditionalWrapper/ConditionalWrapper.js.map +1 -1
  406. package/dist/components/ConfirmDialog/ConfirmDialog.cjs.map +1 -1
  407. package/dist/components/ConfirmDialog/ConfirmDialog.js.map +1 -1
  408. package/dist/components/ContextMenu/ContextMenu.cjs +1 -1
  409. package/dist/components/ContextMenu/ContextMenu.cjs.map +1 -1
  410. package/dist/components/ContextMenu/ContextMenu.js +1 -1
  411. package/dist/components/ContextMenu/ContextMenu.js.map +1 -1
  412. package/dist/components/ContextMenu/ContextMenu.module.cjs.map +1 -1
  413. package/dist/components/ContextMenu/ContextMenu.module.js.map +1 -1
  414. package/dist/components/CopyButton/CopyButton.cjs.map +1 -1
  415. package/dist/components/CopyButton/CopyButton.js.map +1 -1
  416. package/dist/components/CopyButton/CopyButton.module.cjs.map +1 -1
  417. package/dist/components/CopyButton/CopyButton.module.js.map +1 -1
  418. package/dist/components/DataList/DataList.cjs.map +1 -1
  419. package/dist/components/DataList/DataList.js.map +1 -1
  420. package/dist/components/DataList/DataList.module.cjs.map +1 -1
  421. package/dist/components/DataList/DataList.module.js.map +1 -1
  422. package/dist/components/DataTable/DataTable.cjs +1 -1
  423. package/dist/components/DataTable/DataTable.cjs.map +1 -1
  424. package/dist/components/DataTable/DataTable.js +6 -14
  425. package/dist/components/DataTable/DataTable.js.map +1 -1
  426. package/dist/components/DataTable/DataTable.module.cjs.map +1 -1
  427. package/dist/components/DataTable/DataTable.module.js.map +1 -1
  428. package/dist/components/DataTable/EditableCell.cjs +1 -1
  429. package/dist/components/DataTable/EditableCell.cjs.map +1 -1
  430. package/dist/components/DataTable/EditableCell.js +1 -9
  431. package/dist/components/DataTable/EditableCell.js.map +1 -1
  432. package/dist/components/DataTable/LoadingRows.cjs.map +1 -1
  433. package/dist/components/DataTable/LoadingRows.js.map +1 -1
  434. package/dist/components/DataTable/edit-labels.cjs.map +1 -1
  435. package/dist/components/DataTable/edit-labels.js.map +1 -1
  436. package/dist/components/DataTable/use-dev-warnings.cjs.map +1 -1
  437. package/dist/components/DataTable/use-dev-warnings.js.map +1 -1
  438. package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
  439. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  440. package/dist/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
  441. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  442. package/dist/components/DateRangePicker/DateRangePicker.module.cjs.map +1 -1
  443. package/dist/components/DateRangePicker/DateRangePicker.module.js.map +1 -1
  444. package/dist/components/DescriptionList/DescriptionList.cjs.map +1 -1
  445. package/dist/components/DescriptionList/DescriptionList.js.map +1 -1
  446. package/dist/components/DescriptionList/DescriptionList.module.cjs.map +1 -1
  447. package/dist/components/DescriptionList/DescriptionList.module.js.map +1 -1
  448. package/dist/components/Divider/Divider.cjs.map +1 -1
  449. package/dist/components/Divider/Divider.js.map +1 -1
  450. package/dist/components/Divider/Divider.module.cjs.map +1 -1
  451. package/dist/components/Divider/Divider.module.js.map +1 -1
  452. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  453. package/dist/components/Drawer/Drawer.js.map +1 -1
  454. package/dist/components/Drawer/Drawer.module.cjs.map +1 -1
  455. package/dist/components/Drawer/Drawer.module.js.map +1 -1
  456. package/dist/components/DropdownMenu/DropdownMenu.cjs +1 -1
  457. package/dist/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  458. package/dist/components/DropdownMenu/DropdownMenu.js +2 -14
  459. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  460. package/dist/components/DropdownMenu/DropdownMenu.module.cjs.map +1 -1
  461. package/dist/components/DropdownMenu/DropdownMenu.module.js.map +1 -1
  462. package/dist/components/Dropzone/Dropzone.cjs.map +1 -1
  463. package/dist/components/Dropzone/Dropzone.js.map +1 -1
  464. package/dist/components/Dropzone/Dropzone.module.cjs.map +1 -1
  465. package/dist/components/Dropzone/Dropzone.module.js.map +1 -1
  466. package/dist/components/EmptyState/EmptyState.cjs.map +1 -1
  467. package/dist/components/EmptyState/EmptyState.js.map +1 -1
  468. package/dist/components/EmptyState/EmptyState.module.cjs.map +1 -1
  469. package/dist/components/EmptyState/EmptyState.module.js.map +1 -1
  470. package/dist/components/ErrorState/ErrorState.cjs.map +1 -1
  471. package/dist/components/ErrorState/ErrorState.js.map +1 -1
  472. package/dist/components/ErrorState/ErrorState.module.cjs.map +1 -1
  473. package/dist/components/ErrorState/ErrorState.module.js.map +1 -1
  474. package/dist/components/ErrorText/ErrorText.cjs.map +1 -1
  475. package/dist/components/ErrorText/ErrorText.js.map +1 -1
  476. package/dist/components/ErrorText/ErrorText.module.cjs.map +1 -1
  477. package/dist/components/ErrorText/ErrorText.module.js.map +1 -1
  478. package/dist/components/FileUpload/FileUpload.cjs +1 -1
  479. package/dist/components/FileUpload/FileUpload.cjs.map +1 -1
  480. package/dist/components/FileUpload/FileUpload.js +7 -17
  481. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  482. package/dist/components/FileUpload/FileUpload.module.cjs.map +1 -1
  483. package/dist/components/FileUpload/FileUpload.module.js.map +1 -1
  484. package/dist/components/FilterBar/FilterBar.cjs.map +1 -1
  485. package/dist/components/FilterBar/FilterBar.js.map +1 -1
  486. package/dist/components/FilterBar/FilterBar.module.cjs.map +1 -1
  487. package/dist/components/FilterBar/FilterBar.module.js.map +1 -1
  488. package/dist/components/FilterBar/filter-apply.cjs.map +1 -1
  489. package/dist/components/FilterBar/filter-apply.js.map +1 -1
  490. package/dist/components/FilterBar/filter-model.cjs.map +1 -1
  491. package/dist/components/FilterBar/filter-model.js.map +1 -1
  492. package/dist/components/FilterBar/filter-query.cjs +1 -1
  493. package/dist/components/FilterBar/filter-query.cjs.map +1 -1
  494. package/dist/components/FilterBar/filter-query.js +2 -5
  495. package/dist/components/FilterBar/filter-query.js.map +1 -1
  496. package/dist/components/FilterPanel/FilterPanel.cjs.map +1 -1
  497. package/dist/components/FilterPanel/FilterPanel.js.map +1 -1
  498. package/dist/components/FilterPanel/FilterPanel.module.cjs.map +1 -1
  499. package/dist/components/FilterPanel/FilterPanel.module.js.map +1 -1
  500. package/dist/components/FloatingActionButton/FloatingActionButton.cjs.map +1 -1
  501. package/dist/components/FloatingActionButton/FloatingActionButton.js.map +1 -1
  502. package/dist/components/FloatingActionButton/FloatingActionButton.module.cjs.map +1 -1
  503. package/dist/components/FloatingActionButton/FloatingActionButton.module.js.map +1 -1
  504. package/dist/components/For/For.cjs.map +1 -1
  505. package/dist/components/For/For.js.map +1 -1
  506. package/dist/components/Form/Form.cjs.map +1 -1
  507. package/dist/components/Form/Form.js.map +1 -1
  508. package/dist/components/Form/Form.module.cjs.map +1 -1
  509. package/dist/components/Form/Form.module.js.map +1 -1
  510. package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
  511. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  512. package/dist/components/HoverCard/HoverCard.module.cjs.map +1 -1
  513. package/dist/components/HoverCard/HoverCard.module.js.map +1 -1
  514. package/dist/components/Image/Image.cjs.map +1 -1
  515. package/dist/components/Image/Image.js.map +1 -1
  516. package/dist/components/Image/Image.module.cjs.map +1 -1
  517. package/dist/components/Image/Image.module.js.map +1 -1
  518. package/dist/components/ImageCropper/ImageCropper.cjs +1 -1
  519. package/dist/components/ImageCropper/ImageCropper.cjs.map +1 -1
  520. package/dist/components/ImageCropper/ImageCropper.js +4 -8
  521. package/dist/components/ImageCropper/ImageCropper.js.map +1 -1
  522. package/dist/components/ImageCropper/ImageCropper.module.cjs.map +1 -1
  523. package/dist/components/ImageCropper/ImageCropper.module.js.map +1 -1
  524. package/dist/components/ImageCropper/crop-geometry.cjs.map +1 -1
  525. package/dist/components/ImageCropper/crop-geometry.js.map +1 -1
  526. package/dist/components/Input/Input.cjs.map +1 -1
  527. package/dist/components/Input/Input.js.map +1 -1
  528. package/dist/components/Input/Input.module.cjs.map +1 -1
  529. package/dist/components/Input/Input.module.js.map +1 -1
  530. package/dist/components/InstallBanner/InstallBanner.cjs.map +1 -1
  531. package/dist/components/InstallBanner/InstallBanner.js.map +1 -1
  532. package/dist/components/InstallBanner/InstallBanner.module.cjs.map +1 -1
  533. package/dist/components/InstallBanner/InstallBanner.module.js.map +1 -1
  534. package/dist/components/InstallButton/InstallButton.cjs.map +1 -1
  535. package/dist/components/InstallButton/InstallButton.js.map +1 -1
  536. package/dist/components/InstallButton/InstallButton.module.cjs.map +1 -1
  537. package/dist/components/InstallButton/InstallButton.module.js.map +1 -1
  538. package/dist/components/InstallButton/install-hints.cjs.map +1 -1
  539. package/dist/components/InstallButton/install-hints.js.map +1 -1
  540. package/dist/components/Kanban/Kanban.cjs.map +1 -1
  541. package/dist/components/Kanban/Kanban.js.map +1 -1
  542. package/dist/components/Kanban/Kanban.module.cjs.map +1 -1
  543. package/dist/components/Kanban/Kanban.module.js.map +1 -1
  544. package/dist/components/Kbd/Kbd.cjs.map +1 -1
  545. package/dist/components/Kbd/Kbd.js.map +1 -1
  546. package/dist/components/Kbd/Kbd.module.cjs.map +1 -1
  547. package/dist/components/Kbd/Kbd.module.js.map +1 -1
  548. package/dist/components/Label/Label.cjs.map +1 -1
  549. package/dist/components/Label/Label.js.map +1 -1
  550. package/dist/components/Label/Label.module.cjs.map +1 -1
  551. package/dist/components/Label/Label.module.js.map +1 -1
  552. package/dist/components/Layout/Layout.cjs.map +1 -1
  553. package/dist/components/Layout/Layout.js.map +1 -1
  554. package/dist/components/Layout/Layout.module.cjs.map +1 -1
  555. package/dist/components/Layout/Layout.module.js.map +1 -1
  556. package/dist/components/Lightbox/Lightbox.cjs +1 -1
  557. package/dist/components/Lightbox/Lightbox.cjs.map +1 -1
  558. package/dist/components/Lightbox/Lightbox.js +1 -1
  559. package/dist/components/Lightbox/Lightbox.js.map +1 -1
  560. package/dist/components/Lightbox/Lightbox.module.cjs.map +1 -1
  561. package/dist/components/Lightbox/Lightbox.module.js.map +1 -1
  562. package/dist/components/ListTile/ListTile.cjs.map +1 -1
  563. package/dist/components/ListTile/ListTile.js.map +1 -1
  564. package/dist/components/ListTile/ListTile.module.cjs.map +1 -1
  565. package/dist/components/ListTile/ListTile.module.js.map +1 -1
  566. package/dist/components/Markdown/Markdown.cjs.map +1 -1
  567. package/dist/components/Markdown/Markdown.js.map +1 -1
  568. package/dist/components/Markdown/Markdown.module.cjs.map +1 -1
  569. package/dist/components/Markdown/Markdown.module.js.map +1 -1
  570. package/dist/components/Markdown/markdown-parse.cjs +2 -2
  571. package/dist/components/Markdown/markdown-parse.cjs.map +1 -1
  572. package/dist/components/Markdown/markdown-parse.js +8 -27
  573. package/dist/components/Markdown/markdown-parse.js.map +1 -1
  574. package/dist/components/Masonry/Masonry.cjs.map +1 -1
  575. package/dist/components/Masonry/Masonry.js.map +1 -1
  576. package/dist/components/Masonry/Masonry.module.cjs.map +1 -1
  577. package/dist/components/Masonry/Masonry.module.js.map +1 -1
  578. package/dist/components/Masonry/masonry-layout.cjs.map +1 -1
  579. package/dist/components/Masonry/masonry-layout.js.map +1 -1
  580. package/dist/components/Menubar/Menubar.cjs.map +1 -1
  581. package/dist/components/Menubar/Menubar.js.map +1 -1
  582. package/dist/components/Menubar/Menubar.module.cjs.map +1 -1
  583. package/dist/components/Menubar/Menubar.module.js.map +1 -1
  584. package/dist/components/Modal/Modal.cjs.map +1 -1
  585. package/dist/components/Modal/Modal.js.map +1 -1
  586. package/dist/components/Modal/Modal.module.cjs.map +1 -1
  587. package/dist/components/Modal/Modal.module.js.map +1 -1
  588. package/dist/components/ModalsManager/ModalsManager.cjs.map +1 -1
  589. package/dist/components/ModalsManager/ModalsManager.js.map +1 -1
  590. package/dist/components/ModalsManager/ModalsManager.module.cjs.map +1 -1
  591. package/dist/components/ModalsManager/ModalsManager.module.js.map +1 -1
  592. package/dist/components/Money/Money.cjs.map +1 -1
  593. package/dist/components/Money/Money.js.map +1 -1
  594. package/dist/components/MultiSelect/MultiSelect.cjs.map +1 -1
  595. package/dist/components/MultiSelect/MultiSelect.js.map +1 -1
  596. package/dist/components/MultiSelect/MultiSelect.module.cjs.map +1 -1
  597. package/dist/components/MultiSelect/MultiSelect.module.js.map +1 -1
  598. package/dist/components/NProgress/NProgress.cjs.map +1 -1
  599. package/dist/components/NProgress/NProgress.js.map +1 -1
  600. package/dist/components/NProgress/NProgress.module.cjs.map +1 -1
  601. package/dist/components/NProgress/NProgress.module.js.map +1 -1
  602. package/dist/components/Navbar/Navbar.cjs.map +1 -1
  603. package/dist/components/Navbar/Navbar.js.map +1 -1
  604. package/dist/components/Navbar/Navbar.module.cjs.map +1 -1
  605. package/dist/components/Navbar/Navbar.module.js.map +1 -1
  606. package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
  607. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
  608. package/dist/components/NavigationMenu/NavigationMenu.module.cjs.map +1 -1
  609. package/dist/components/NavigationMenu/NavigationMenu.module.js.map +1 -1
  610. package/dist/components/NavigationRail/NavigationRail.cjs.map +1 -1
  611. package/dist/components/NavigationRail/NavigationRail.js.map +1 -1
  612. package/dist/components/NavigationRail/NavigationRail.module.cjs.map +1 -1
  613. package/dist/components/NavigationRail/NavigationRail.module.js.map +1 -1
  614. package/dist/components/NotificationCenter/NotificationCenter.cjs.map +1 -1
  615. package/dist/components/NotificationCenter/NotificationCenter.js.map +1 -1
  616. package/dist/components/NotificationCenter/NotificationCenter.module.cjs.map +1 -1
  617. package/dist/components/NotificationCenter/NotificationCenter.module.js.map +1 -1
  618. package/dist/components/NotificationCenter/use-notification-inbox.cjs.map +1 -1
  619. package/dist/components/NotificationCenter/use-notification-inbox.js.map +1 -1
  620. package/dist/components/OfflineIndicator/OfflineIndicator.cjs.map +1 -1
  621. package/dist/components/OfflineIndicator/OfflineIndicator.js.map +1 -1
  622. package/dist/components/OfflineIndicator/OfflineIndicator.module.cjs.map +1 -1
  623. package/dist/components/OfflineIndicator/OfflineIndicator.module.js.map +1 -1
  624. package/dist/components/Page/Page.cjs.map +1 -1
  625. package/dist/components/Page/Page.js.map +1 -1
  626. package/dist/components/Page/Page.module.cjs.map +1 -1
  627. package/dist/components/Page/Page.module.js.map +1 -1
  628. package/dist/components/Pagination/Pagination.cjs.map +1 -1
  629. package/dist/components/Pagination/Pagination.js.map +1 -1
  630. package/dist/components/Pagination/Pagination.module.cjs.map +1 -1
  631. package/dist/components/Pagination/Pagination.module.js.map +1 -1
  632. package/dist/components/PasswordInput/PasswordInput.cjs.map +1 -1
  633. package/dist/components/PasswordInput/PasswordInput.js.map +1 -1
  634. package/dist/components/PasswordInput/PasswordInput.module.cjs.map +1 -1
  635. package/dist/components/PasswordInput/PasswordInput.module.js.map +1 -1
  636. package/dist/components/PinInput/PinInput.cjs.map +1 -1
  637. package/dist/components/PinInput/PinInput.js.map +1 -1
  638. package/dist/components/PinInput/PinInput.module.cjs.map +1 -1
  639. package/dist/components/PinInput/PinInput.module.js.map +1 -1
  640. package/dist/components/Popover/Popover.cjs.map +1 -1
  641. package/dist/components/Popover/Popover.js.map +1 -1
  642. package/dist/components/Popover/Popover.module.cjs.map +1 -1
  643. package/dist/components/Popover/Popover.module.js.map +1 -1
  644. package/dist/components/Portal/Portal.cjs.map +1 -1
  645. package/dist/components/Portal/Portal.js.map +1 -1
  646. package/dist/components/Portal/anchor-position.cjs.map +1 -1
  647. package/dist/components/Portal/anchor-position.js.map +1 -1
  648. package/dist/components/Portal/escape-layer.cjs.map +1 -1
  649. package/dist/components/Portal/escape-layer.js.map +1 -1
  650. package/dist/components/Portal/portal-host.cjs.map +1 -1
  651. package/dist/components/Portal/portal-host.js.map +1 -1
  652. package/dist/components/Portal/tab-bridge.cjs +1 -1
  653. package/dist/components/Portal/tab-bridge.cjs.map +1 -1
  654. package/dist/components/Portal/tab-bridge.js +1 -5
  655. package/dist/components/Portal/tab-bridge.js.map +1 -1
  656. package/dist/components/Progress/Progress.cjs.map +1 -1
  657. package/dist/components/Progress/Progress.js.map +1 -1
  658. package/dist/components/Progress/Progress.module.cjs.map +1 -1
  659. package/dist/components/Progress/Progress.module.js.map +1 -1
  660. package/dist/components/QRCode/QRCode.cjs.map +1 -1
  661. package/dist/components/QRCode/QRCode.js.map +1 -1
  662. package/dist/components/QRCode/QRCode.module.cjs.map +1 -1
  663. package/dist/components/QRCode/QRCode.module.js.map +1 -1
  664. package/dist/components/QRCode/qr-encode.cjs +1 -1
  665. package/dist/components/QRCode/qr-encode.cjs.map +1 -1
  666. package/dist/components/QRCode/qr-encode.js +7 -13
  667. package/dist/components/QRCode/qr-encode.js.map +1 -1
  668. package/dist/components/QRCode/qr-tables.cjs.map +1 -1
  669. package/dist/components/QRCode/qr-tables.js.map +1 -1
  670. package/dist/components/Radio/Radio.cjs.map +1 -1
  671. package/dist/components/Radio/Radio.js.map +1 -1
  672. package/dist/components/Radio/Radio.module.cjs.map +1 -1
  673. package/dist/components/Radio/Radio.module.js.map +1 -1
  674. package/dist/components/RangeSlider/RangeSlider.cjs.map +1 -1
  675. package/dist/components/RangeSlider/RangeSlider.js.map +1 -1
  676. package/dist/components/RangeSlider/RangeSlider.module.cjs.map +1 -1
  677. package/dist/components/RangeSlider/RangeSlider.module.js.map +1 -1
  678. package/dist/components/RatingStars/RatingStars.cjs.map +1 -1
  679. package/dist/components/RatingStars/RatingStars.js.map +1 -1
  680. package/dist/components/RatingStars/RatingStars.module.cjs.map +1 -1
  681. package/dist/components/RatingStars/RatingStars.module.js.map +1 -1
  682. package/dist/components/RefreshIndicator/RefreshIndicator.cjs +1 -1
  683. package/dist/components/RefreshIndicator/RefreshIndicator.cjs.map +1 -1
  684. package/dist/components/RefreshIndicator/RefreshIndicator.js +10 -18
  685. package/dist/components/RefreshIndicator/RefreshIndicator.js.map +1 -1
  686. package/dist/components/RefreshIndicator/RefreshIndicator.module.cjs.map +1 -1
  687. package/dist/components/RefreshIndicator/RefreshIndicator.module.js.map +1 -1
  688. package/dist/components/RelativeTime/RelativeTime.cjs.map +1 -1
  689. package/dist/components/RelativeTime/RelativeTime.js.map +1 -1
  690. package/dist/components/Resizable/Resizable.cjs +1 -1
  691. package/dist/components/Resizable/Resizable.cjs.map +1 -1
  692. package/dist/components/Resizable/Resizable.js +1 -9
  693. package/dist/components/Resizable/Resizable.js.map +1 -1
  694. package/dist/components/Resizable/Resizable.module.cjs.map +1 -1
  695. package/dist/components/Resizable/Resizable.module.js.map +1 -1
  696. package/dist/components/Responsive/Responsive.cjs.map +1 -1
  697. package/dist/components/Responsive/Responsive.js.map +1 -1
  698. package/dist/components/Reveal/Reveal.cjs.map +1 -1
  699. package/dist/components/Reveal/Reveal.js.map +1 -1
  700. package/dist/components/Reveal/Reveal.module.cjs.map +1 -1
  701. package/dist/components/Reveal/Reveal.module.js.map +1 -1
  702. package/dist/components/Reveal/reveal-threshold.cjs.map +1 -1
  703. package/dist/components/Reveal/reveal-threshold.js.map +1 -1
  704. package/dist/components/SafeArea/SafeArea.cjs.map +1 -1
  705. package/dist/components/SafeArea/SafeArea.js.map +1 -1
  706. package/dist/components/SafeArea/SafeArea.module.cjs.map +1 -1
  707. package/dist/components/SafeArea/SafeArea.module.js.map +1 -1
  708. package/dist/components/Scheduler/Scheduler.cjs.map +1 -1
  709. package/dist/components/Scheduler/Scheduler.js.map +1 -1
  710. package/dist/components/Scheduler/Scheduler.module.cjs.map +1 -1
  711. package/dist/components/Scheduler/Scheduler.module.js.map +1 -1
  712. package/dist/components/Scheduler/scheduler-layout.cjs.map +1 -1
  713. package/dist/components/Scheduler/scheduler-layout.js.map +1 -1
  714. package/dist/components/ScrollArea/ScrollArea.cjs.map +1 -1
  715. package/dist/components/ScrollArea/ScrollArea.js.map +1 -1
  716. package/dist/components/ScrollArea/ScrollArea.module.cjs.map +1 -1
  717. package/dist/components/ScrollArea/ScrollArea.module.js.map +1 -1
  718. package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
  719. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  720. package/dist/components/SearchBar/SearchBar.module.cjs.map +1 -1
  721. package/dist/components/SearchBar/SearchBar.module.js.map +1 -1
  722. package/dist/components/SectionHeader/SectionHeader.cjs.map +1 -1
  723. package/dist/components/SectionHeader/SectionHeader.js.map +1 -1
  724. package/dist/components/SectionHeader/SectionHeader.module.cjs.map +1 -1
  725. package/dist/components/SectionHeader/SectionHeader.module.js.map +1 -1
  726. package/dist/components/SegmentedControl/SegmentedControl.cjs.map +1 -1
  727. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  728. package/dist/components/SegmentedControl/SegmentedControl.module.cjs.map +1 -1
  729. package/dist/components/SegmentedControl/SegmentedControl.module.js.map +1 -1
  730. package/dist/components/Select/CaretIcon.cjs.map +1 -1
  731. package/dist/components/Select/CaretIcon.js.map +1 -1
  732. package/dist/components/Select/Select.cjs.map +1 -1
  733. package/dist/components/Select/Select.js.map +1 -1
  734. package/dist/components/Select/Select.module.cjs.map +1 -1
  735. package/dist/components/Select/Select.module.js.map +1 -1
  736. package/dist/components/Select/options.cjs.map +1 -1
  737. package/dist/components/Select/options.js.map +1 -1
  738. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  739. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  740. package/dist/components/Sidebar/Sidebar.js +13 -23
  741. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  742. package/dist/components/Sidebar/Sidebar.module.cjs.map +1 -1
  743. package/dist/components/Sidebar/Sidebar.module.js.map +1 -1
  744. package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
  745. package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
  746. package/dist/components/Sidebar/active-nav-key.cjs.map +1 -1
  747. package/dist/components/Sidebar/active-nav-key.js.map +1 -1
  748. package/dist/components/SignaturePad/SignaturePad.cjs +1 -1
  749. package/dist/components/SignaturePad/SignaturePad.cjs.map +1 -1
  750. package/dist/components/SignaturePad/SignaturePad.js +1 -5
  751. package/dist/components/SignaturePad/SignaturePad.js.map +1 -1
  752. package/dist/components/SignaturePad/SignaturePad.module.cjs.map +1 -1
  753. package/dist/components/SignaturePad/SignaturePad.module.js.map +1 -1
  754. package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
  755. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  756. package/dist/components/Skeleton/Skeleton.module.cjs.map +1 -1
  757. package/dist/components/Skeleton/Skeleton.module.js.map +1 -1
  758. package/dist/components/Slider/Slider.cjs.map +1 -1
  759. package/dist/components/Slider/Slider.js.map +1 -1
  760. package/dist/components/Slider/Slider.module.cjs.map +1 -1
  761. package/dist/components/Slider/Slider.module.js.map +1 -1
  762. package/dist/components/Spacer/Spacer.cjs.map +1 -1
  763. package/dist/components/Spacer/Spacer.js.map +1 -1
  764. package/dist/components/Spacer/Spacer.module.cjs.map +1 -1
  765. package/dist/components/Spacer/Spacer.module.js.map +1 -1
  766. package/dist/components/Sparkline/Sparkline.cjs.map +1 -1
  767. package/dist/components/Sparkline/Sparkline.js.map +1 -1
  768. package/dist/components/Sparkline/Sparkline.module.cjs.map +1 -1
  769. package/dist/components/Sparkline/Sparkline.module.js.map +1 -1
  770. package/dist/components/Sparkline/sparkline-geometry.cjs.map +1 -1
  771. package/dist/components/Sparkline/sparkline-geometry.js.map +1 -1
  772. package/dist/components/Spinner/Spinner.cjs.map +1 -1
  773. package/dist/components/Spinner/Spinner.js.map +1 -1
  774. package/dist/components/Spinner/Spinner.module.cjs.map +1 -1
  775. package/dist/components/Spinner/Spinner.module.js.map +1 -1
  776. package/dist/components/Stat/Stat.cjs.map +1 -1
  777. package/dist/components/Stat/Stat.js.map +1 -1
  778. package/dist/components/Stat/Stat.module.cjs.map +1 -1
  779. package/dist/components/Stat/Stat.module.js.map +1 -1
  780. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  781. package/dist/components/Stepper/Stepper.js.map +1 -1
  782. package/dist/components/Stepper/Stepper.module.cjs.map +1 -1
  783. package/dist/components/Stepper/Stepper.module.js.map +1 -1
  784. package/dist/components/StepperInput/StepperInput.cjs.map +1 -1
  785. package/dist/components/StepperInput/StepperInput.js.map +1 -1
  786. package/dist/components/StepperInput/StepperInput.module.cjs.map +1 -1
  787. package/dist/components/StepperInput/StepperInput.module.js.map +1 -1
  788. package/dist/components/Switch/Switch.cjs.map +1 -1
  789. package/dist/components/Switch/Switch.js.map +1 -1
  790. package/dist/components/Switch/Switch.module.cjs.map +1 -1
  791. package/dist/components/Switch/Switch.module.js.map +1 -1
  792. package/dist/components/SyncStatusBadge/SyncStatusBadge.cjs.map +1 -1
  793. package/dist/components/SyncStatusBadge/SyncStatusBadge.js.map +1 -1
  794. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.cjs.map +1 -1
  795. package/dist/components/SyncStatusBadge/SyncStatusBadge.module.js.map +1 -1
  796. package/dist/components/Table/Table.cjs.map +1 -1
  797. package/dist/components/Table/Table.js.map +1 -1
  798. package/dist/components/Table/Table.module.cjs.map +1 -1
  799. package/dist/components/Table/Table.module.js.map +1 -1
  800. package/dist/components/Tabs/Tabs.cjs.map +1 -1
  801. package/dist/components/Tabs/Tabs.js.map +1 -1
  802. package/dist/components/Tabs/Tabs.module.cjs.map +1 -1
  803. package/dist/components/Tabs/Tabs.module.js.map +1 -1
  804. package/dist/components/Tag/Tag.cjs.map +1 -1
  805. package/dist/components/Tag/Tag.js.map +1 -1
  806. package/dist/components/Tag/Tag.module.cjs.map +1 -1
  807. package/dist/components/Tag/Tag.module.js.map +1 -1
  808. package/dist/components/Textarea/Textarea.cjs.map +1 -1
  809. package/dist/components/Textarea/Textarea.js.map +1 -1
  810. package/dist/components/Textarea/Textarea.module.cjs.map +1 -1
  811. package/dist/components/Textarea/Textarea.module.js.map +1 -1
  812. package/dist/components/TimePicker/TimePicker.cjs.map +1 -1
  813. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  814. package/dist/components/TimePicker/TimePicker.module.cjs.map +1 -1
  815. package/dist/components/TimePicker/TimePicker.module.js.map +1 -1
  816. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  817. package/dist/components/Timeline/Timeline.js.map +1 -1
  818. package/dist/components/Timeline/Timeline.module.cjs.map +1 -1
  819. package/dist/components/Timeline/Timeline.module.js.map +1 -1
  820. package/dist/components/Toast/Toast.module.cjs.map +1 -1
  821. package/dist/components/Toast/Toast.module.js.map +1 -1
  822. package/dist/components/Toast/ToastProvider.cjs.map +1 -1
  823. package/dist/components/Toast/ToastProvider.js.map +1 -1
  824. package/dist/components/Toggle/Toggle.cjs.map +1 -1
  825. package/dist/components/Toggle/Toggle.js.map +1 -1
  826. package/dist/components/Toggle/Toggle.module.cjs.map +1 -1
  827. package/dist/components/Toggle/Toggle.module.js.map +1 -1
  828. package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
  829. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  830. package/dist/components/ToggleGroup/ToggleGroup.module.cjs.map +1 -1
  831. package/dist/components/ToggleGroup/ToggleGroup.module.js.map +1 -1
  832. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  833. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  834. package/dist/components/Tooltip/Tooltip.module.cjs.map +1 -1
  835. package/dist/components/Tooltip/Tooltip.module.js.map +1 -1
  836. package/dist/components/Tour/Tour.cjs +1 -1
  837. package/dist/components/Tour/Tour.cjs.map +1 -1
  838. package/dist/components/Tour/Tour.js +1 -5
  839. package/dist/components/Tour/Tour.js.map +1 -1
  840. package/dist/components/Tour/Tour.module.cjs.map +1 -1
  841. package/dist/components/Tour/Tour.module.js.map +1 -1
  842. package/dist/components/Tour/tour-position.cjs.map +1 -1
  843. package/dist/components/Tour/tour-position.js.map +1 -1
  844. package/dist/components/Transfer/Transfer.cjs.map +1 -1
  845. package/dist/components/Transfer/Transfer.js.map +1 -1
  846. package/dist/components/Transfer/Transfer.module.cjs.map +1 -1
  847. package/dist/components/Transfer/Transfer.module.js.map +1 -1
  848. package/dist/components/Transfer/transfer-state.cjs.map +1 -1
  849. package/dist/components/Transfer/transfer-state.js.map +1 -1
  850. package/dist/components/TreeView/TreeView.cjs.map +1 -1
  851. package/dist/components/TreeView/TreeView.js.map +1 -1
  852. package/dist/components/TreeView/TreeView.module.cjs.map +1 -1
  853. package/dist/components/TreeView/TreeView.module.js.map +1 -1
  854. package/dist/components/TruncateText/TruncateText.cjs.map +1 -1
  855. package/dist/components/TruncateText/TruncateText.js.map +1 -1
  856. package/dist/components/TruncateText/TruncateText.module.cjs.map +1 -1
  857. package/dist/components/TruncateText/TruncateText.module.js.map +1 -1
  858. package/dist/components/UpdatePrompt/UpdatePrompt.cjs.map +1 -1
  859. package/dist/components/UpdatePrompt/UpdatePrompt.js.map +1 -1
  860. package/dist/components/UpdatePrompt/UpdatePrompt.module.cjs.map +1 -1
  861. package/dist/components/UpdatePrompt/UpdatePrompt.module.js.map +1 -1
  862. package/dist/components/VideoPlayer/VideoPlayer.cjs +1 -1
  863. package/dist/components/VideoPlayer/VideoPlayer.cjs.map +1 -1
  864. package/dist/components/VideoPlayer/VideoPlayer.js +1 -7
  865. package/dist/components/VideoPlayer/VideoPlayer.js.map +1 -1
  866. package/dist/components/VideoPlayer/VideoPlayer.module.cjs.map +1 -1
  867. package/dist/components/VideoPlayer/VideoPlayer.module.js.map +1 -1
  868. package/dist/components/VideoPlayer/playback-rates.cjs.map +1 -1
  869. package/dist/components/VideoPlayer/playback-rates.js.map +1 -1
  870. package/dist/components/VirtualList/VirtualList.cjs.map +1 -1
  871. package/dist/components/VirtualList/VirtualList.js.map +1 -1
  872. package/dist/components/VirtualList/VirtualList.module.cjs.map +1 -1
  873. package/dist/components/VirtualList/VirtualList.module.js.map +1 -1
  874. package/dist/components/VirtualTable/VirtualTable.cjs.map +1 -1
  875. package/dist/components/VirtualTable/VirtualTable.js.map +1 -1
  876. package/dist/components/VirtualTable/VirtualTable.module.cjs.map +1 -1
  877. package/dist/components/VirtualTable/VirtualTable.module.js.map +1 -1
  878. package/dist/components/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
  879. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  880. package/dist/components/VisuallyHidden/VisuallyHidden.module.cjs.map +1 -1
  881. package/dist/components/VisuallyHidden/VisuallyHidden.module.js.map +1 -1
  882. package/dist/components/Wizard/Wizard.cjs +1 -1
  883. package/dist/components/Wizard/Wizard.cjs.map +1 -1
  884. package/dist/components/Wizard/Wizard.js +4 -11
  885. package/dist/components/Wizard/Wizard.js.map +1 -1
  886. package/dist/components/Wizard/Wizard.module.cjs.map +1 -1
  887. package/dist/components/Wizard/Wizard.module.js.map +1 -1
  888. package/dist/data/create-data-provider.cjs.map +1 -1
  889. package/dist/data/create-data-provider.js.map +1 -1
  890. package/dist/data/data-provider-context.cjs.map +1 -1
  891. package/dist/data/data-provider-context.js.map +1 -1
  892. package/dist/data/use-resource.cjs.map +1 -1
  893. package/dist/data/use-resource.js.map +1 -1
  894. package/dist/editor/RichTextEditor.cjs.map +1 -1
  895. package/dist/editor/RichTextEditor.js.map +1 -1
  896. package/dist/editor/RichTextEditor.module.cjs.map +1 -1
  897. package/dist/editor/RichTextEditor.module.js.map +1 -1
  898. package/dist/editor.js +1 -2
  899. package/dist/error-boundary/ErrorBoundary.cjs.map +1 -1
  900. package/dist/error-boundary/ErrorBoundary.js.map +1 -1
  901. package/dist/error-boundary/use-error-handler.cjs.map +1 -1
  902. package/dist/error-boundary/use-error-handler.js.map +1 -1
  903. package/dist/feature-flags/FeatureFlagsProvider.cjs.map +1 -1
  904. package/dist/feature-flags/FeatureFlagsProvider.js.map +1 -1
  905. package/dist/feature-flags/growthbook-adapter.cjs.map +1 -1
  906. package/dist/feature-flags/growthbook-adapter.js.map +1 -1
  907. package/dist/feature-flags/in-memory-adapter.cjs.map +1 -1
  908. package/dist/feature-flags/in-memory-adapter.js.map +1 -1
  909. package/dist/feature-flags/launchdarkly-adapter.cjs.map +1 -1
  910. package/dist/feature-flags/launchdarkly-adapter.js.map +1 -1
  911. package/dist/forms/FormField.cjs.map +1 -1
  912. package/dist/forms/FormField.js.map +1 -1
  913. package/dist/forms/br-validators.cjs.map +1 -1
  914. package/dist/forms/br-validators.js.map +1 -1
  915. package/dist/forms/masked-inputs.cjs.map +1 -1
  916. package/dist/forms/masked-inputs.js.map +1 -1
  917. package/dist/forms/use-viacep.cjs.map +1 -1
  918. package/dist/forms/use-viacep.js.map +1 -1
  919. package/dist/forms/use-zod-form.cjs.map +1 -1
  920. package/dist/forms/use-zod-form.js.map +1 -1
  921. package/dist/forms/validate-form.cjs.map +1 -1
  922. package/dist/forms/validate-form.js.map +1 -1
  923. package/dist/forms/zod-resolver.cjs.map +1 -1
  924. package/dist/forms/zod-resolver.js.map +1 -1
  925. package/dist/geo/TrajectoryMap.cjs.map +1 -1
  926. package/dist/geo/TrajectoryMap.js.map +1 -1
  927. package/dist/geo/TrajectoryMap.module.cjs.map +1 -1
  928. package/dist/geo/TrajectoryMap.module.js.map +1 -1
  929. package/dist/geo/bounds.cjs.map +1 -1
  930. package/dist/geo/bounds.js.map +1 -1
  931. package/dist/geo/create-position-tracker.cjs +1 -1
  932. package/dist/geo/create-position-tracker.cjs.map +1 -1
  933. package/dist/geo/create-position-tracker.js +1 -7
  934. package/dist/geo/create-position-tracker.js.map +1 -1
  935. package/dist/geo/distance.cjs.map +1 -1
  936. package/dist/geo/distance.js.map +1 -1
  937. package/dist/geo/estimate.cjs.map +1 -1
  938. package/dist/geo/estimate.js.map +1 -1
  939. package/dist/geo/leaflet-map.cjs.map +1 -1
  940. package/dist/geo/leaflet-map.js.map +1 -1
  941. package/dist/geo/projection.cjs.map +1 -1
  942. package/dist/geo/projection.js.map +1 -1
  943. package/dist/geo/routing.cjs.map +1 -1
  944. package/dist/geo/routing.js.map +1 -1
  945. package/dist/geo/types.cjs.map +1 -1
  946. package/dist/geo/types.js.map +1 -1
  947. package/dist/geo/use-position-tracker.cjs.map +1 -1
  948. package/dist/geo/use-position-tracker.js.map +1 -1
  949. package/dist/hooks/pwa-env.cjs.map +1 -1
  950. package/dist/hooks/pwa-env.js.map +1 -1
  951. package/dist/hooks/tab-sequence.cjs.map +1 -1
  952. package/dist/hooks/tab-sequence.js.map +1 -1
  953. package/dist/hooks/use-announce.cjs +1 -1
  954. package/dist/hooks/use-announce.cjs.map +1 -1
  955. package/dist/hooks/use-announce.js +2 -2
  956. package/dist/hooks/use-announce.js.map +1 -1
  957. package/dist/hooks/use-async.cjs.map +1 -1
  958. package/dist/hooks/use-async.js.map +1 -1
  959. package/dist/hooks/use-before-install-prompt.cjs.map +1 -1
  960. package/dist/hooks/use-before-install-prompt.js.map +1 -1
  961. package/dist/hooks/use-breakpoint.cjs.map +1 -1
  962. package/dist/hooks/use-breakpoint.js.map +1 -1
  963. package/dist/hooks/use-click-outside.cjs.map +1 -1
  964. package/dist/hooks/use-click-outside.js.map +1 -1
  965. package/dist/hooks/use-client-filter.cjs.map +1 -1
  966. package/dist/hooks/use-client-filter.js.map +1 -1
  967. package/dist/hooks/use-clipboard.cjs.map +1 -1
  968. package/dist/hooks/use-clipboard.js.map +1 -1
  969. package/dist/hooks/use-countdown.cjs.map +1 -1
  970. package/dist/hooks/use-countdown.js.map +1 -1
  971. package/dist/hooks/use-counter.cjs.map +1 -1
  972. package/dist/hooks/use-counter.js.map +1 -1
  973. package/dist/hooks/use-debounce.cjs.map +1 -1
  974. package/dist/hooks/use-debounce.js.map +1 -1
  975. package/dist/hooks/use-deep-memo.cjs.map +1 -1
  976. package/dist/hooks/use-deep-memo.js.map +1 -1
  977. package/dist/hooks/use-disclosure.cjs.map +1 -1
  978. package/dist/hooks/use-disclosure.js.map +1 -1
  979. package/dist/hooks/use-document-title.cjs.map +1 -1
  980. package/dist/hooks/use-document-title.js.map +1 -1
  981. package/dist/hooks/use-document-visibility.cjs.map +1 -1
  982. package/dist/hooks/use-document-visibility.js.map +1 -1
  983. package/dist/hooks/use-draft-filters.cjs.map +1 -1
  984. package/dist/hooks/use-draft-filters.js.map +1 -1
  985. package/dist/hooks/use-event-listener.cjs.map +1 -1
  986. package/dist/hooks/use-event-listener.js.map +1 -1
  987. package/dist/hooks/use-favicon.cjs.map +1 -1
  988. package/dist/hooks/use-favicon.js.map +1 -1
  989. package/dist/hooks/use-focus-trap.cjs.map +1 -1
  990. package/dist/hooks/use-focus-trap.js.map +1 -1
  991. package/dist/hooks/use-fullscreen-element.cjs.map +1 -1
  992. package/dist/hooks/use-fullscreen-element.js.map +1 -1
  993. package/dist/hooks/use-fullscreen.cjs +1 -1
  994. package/dist/hooks/use-fullscreen.cjs.map +1 -1
  995. package/dist/hooks/use-fullscreen.js +7 -23
  996. package/dist/hooks/use-fullscreen.js.map +1 -1
  997. package/dist/hooks/use-geolocation.cjs.map +1 -1
  998. package/dist/hooks/use-geolocation.js.map +1 -1
  999. package/dist/hooks/use-hover.cjs.map +1 -1
  1000. package/dist/hooks/use-hover.js.map +1 -1
  1001. package/dist/hooks/use-idle.cjs.map +1 -1
  1002. package/dist/hooks/use-idle.js.map +1 -1
  1003. package/dist/hooks/use-install-prompt.cjs +1 -1
  1004. package/dist/hooks/use-install-prompt.cjs.map +1 -1
  1005. package/dist/hooks/use-install-prompt.js +1 -1
  1006. package/dist/hooks/use-install-prompt.js.map +1 -1
  1007. package/dist/hooks/use-intersection-observer.cjs.map +1 -1
  1008. package/dist/hooks/use-intersection-observer.js.map +1 -1
  1009. package/dist/hooks/use-interval.cjs.map +1 -1
  1010. package/dist/hooks/use-interval.js.map +1 -1
  1011. package/dist/hooks/use-is-first-render.cjs.map +1 -1
  1012. package/dist/hooks/use-is-first-render.js.map +1 -1
  1013. package/dist/hooks/use-keyboard-shortcut.cjs.map +1 -1
  1014. package/dist/hooks/use-keyboard-shortcut.js.map +1 -1
  1015. package/dist/hooks/use-latest-ref.cjs.map +1 -1
  1016. package/dist/hooks/use-latest-ref.js.map +1 -1
  1017. package/dist/hooks/use-list-state.cjs.map +1 -1
  1018. package/dist/hooks/use-list-state.js.map +1 -1
  1019. package/dist/hooks/use-local-storage.cjs +1 -1
  1020. package/dist/hooks/use-local-storage.cjs.map +1 -1
  1021. package/dist/hooks/use-local-storage.js +2 -5
  1022. package/dist/hooks/use-local-storage.js.map +1 -1
  1023. package/dist/hooks/use-long-press-handlers.cjs.map +1 -1
  1024. package/dist/hooks/use-long-press-handlers.js.map +1 -1
  1025. package/dist/hooks/use-long-press.cjs.map +1 -1
  1026. package/dist/hooks/use-long-press.js.map +1 -1
  1027. package/dist/hooks/use-map.cjs.map +1 -1
  1028. package/dist/hooks/use-map.js.map +1 -1
  1029. package/dist/hooks/use-media-devices.cjs.map +1 -1
  1030. package/dist/hooks/use-media-devices.js.map +1 -1
  1031. package/dist/hooks/use-media-permission.cjs +1 -1
  1032. package/dist/hooks/use-media-permission.cjs.map +1 -1
  1033. package/dist/hooks/use-media-permission.js +2 -5
  1034. package/dist/hooks/use-media-permission.js.map +1 -1
  1035. package/dist/hooks/use-media-query.cjs.map +1 -1
  1036. package/dist/hooks/use-media-query.js.map +1 -1
  1037. package/dist/hooks/use-object-url.cjs.map +1 -1
  1038. package/dist/hooks/use-object-url.js.map +1 -1
  1039. package/dist/hooks/use-online.cjs.map +1 -1
  1040. package/dist/hooks/use-online.js.map +1 -1
  1041. package/dist/hooks/use-pagination.cjs.map +1 -1
  1042. package/dist/hooks/use-pagination.js.map +1 -1
  1043. package/dist/hooks/use-previous.cjs.map +1 -1
  1044. package/dist/hooks/use-previous.js.map +1 -1
  1045. package/dist/hooks/use-push-to-talk.cjs.map +1 -1
  1046. package/dist/hooks/use-push-to-talk.js.map +1 -1
  1047. package/dist/hooks/use-queue.cjs.map +1 -1
  1048. package/dist/hooks/use-queue.js.map +1 -1
  1049. package/dist/hooks/use-resize-observer.cjs.map +1 -1
  1050. package/dist/hooks/use-resize-observer.js.map +1 -1
  1051. package/dist/hooks/use-scroll-lock.cjs.map +1 -1
  1052. package/dist/hooks/use-scroll-lock.js.map +1 -1
  1053. package/dist/hooks/use-scroll-overflow.cjs.map +1 -1
  1054. package/dist/hooks/use-scroll-overflow.js.map +1 -1
  1055. package/dist/hooks/use-service-worker-update.cjs.map +1 -1
  1056. package/dist/hooks/use-service-worker-update.js.map +1 -1
  1057. package/dist/hooks/use-set.cjs.map +1 -1
  1058. package/dist/hooks/use-set.js.map +1 -1
  1059. package/dist/hooks/use-sortable.cjs.map +1 -1
  1060. package/dist/hooks/use-sortable.js.map +1 -1
  1061. package/dist/hooks/use-stable-callback.cjs.map +1 -1
  1062. package/dist/hooks/use-stable-callback.js.map +1 -1
  1063. package/dist/hooks/use-storage-estimate.cjs.map +1 -1
  1064. package/dist/hooks/use-storage-estimate.js.map +1 -1
  1065. package/dist/hooks/use-throttle.cjs.map +1 -1
  1066. package/dist/hooks/use-throttle.js.map +1 -1
  1067. package/dist/hooks/use-timeout.cjs.map +1 -1
  1068. package/dist/hooks/use-timeout.js.map +1 -1
  1069. package/dist/hooks/use-toggle.cjs.map +1 -1
  1070. package/dist/hooks/use-toggle.js.map +1 -1
  1071. package/dist/hooks/use-typewriter.cjs.map +1 -1
  1072. package/dist/hooks/use-typewriter.js.map +1 -1
  1073. package/dist/hooks/use-window-size.cjs.map +1 -1
  1074. package/dist/hooks/use-window-size.js.map +1 -1
  1075. package/dist/http/api-client.cjs +1 -1
  1076. package/dist/http/api-client.cjs.map +1 -1
  1077. package/dist/http/api-client.js +5 -1
  1078. package/dist/http/api-client.js.map +1 -1
  1079. package/dist/http/build-url.cjs +1 -1
  1080. package/dist/http/build-url.cjs.map +1 -1
  1081. package/dist/http/build-url.js +3 -1
  1082. package/dist/http/build-url.js.map +1 -1
  1083. package/dist/http/credential-scope.cjs.map +1 -1
  1084. package/dist/http/credential-scope.js.map +1 -1
  1085. package/dist/http/csrf.cjs.map +1 -1
  1086. package/dist/http/csrf.js.map +1 -1
  1087. package/dist/http/decode-response.cjs.map +1 -1
  1088. package/dist/http/decode-response.js.map +1 -1
  1089. package/dist/http/describe-api-error.cjs.map +1 -1
  1090. package/dist/http/describe-api-error.js.map +1 -1
  1091. package/dist/http/errors.cjs.map +1 -1
  1092. package/dist/http/errors.js.map +1 -1
  1093. package/dist/http/idempotency.cjs.map +1 -1
  1094. package/dist/http/idempotency.js.map +1 -1
  1095. package/dist/http/parse-response.cjs.map +1 -1
  1096. package/dist/http/parse-response.js.map +1 -1
  1097. package/dist/http/presigned-post.cjs +2 -0
  1098. package/dist/http/presigned-post.cjs.map +1 -0
  1099. package/dist/http/presigned-post.js +73 -0
  1100. package/dist/http/presigned-post.js.map +1 -0
  1101. package/dist/http/resumable-upload.cjs.map +1 -1
  1102. package/dist/http/resumable-upload.js.map +1 -1
  1103. package/dist/http/retry.cjs.map +1 -1
  1104. package/dist/http/retry.js.map +1 -1
  1105. package/dist/http/timeout.cjs.map +1 -1
  1106. package/dist/http/timeout.js.map +1 -1
  1107. package/dist/http/upload-with-progress.cjs +1 -1
  1108. package/dist/http/upload-with-progress.cjs.map +1 -1
  1109. package/dist/http/upload-with-progress.js +2 -7
  1110. package/dist/http/upload-with-progress.js.map +1 -1
  1111. package/dist/http/use-describe-api-error.cjs.map +1 -1
  1112. package/dist/http/use-describe-api-error.js.map +1 -1
  1113. package/dist/http/use-poll.cjs +1 -1
  1114. package/dist/http/use-poll.cjs.map +1 -1
  1115. package/dist/http/use-poll.js +2 -5
  1116. package/dist/http/use-poll.js.map +1 -1
  1117. package/dist/i18n/I18nProvider.cjs.map +1 -1
  1118. package/dist/i18n/I18nProvider.js.map +1 -1
  1119. package/dist/i18n/create-i18n.cjs.map +1 -1
  1120. package/dist/i18n/create-i18n.js.map +1 -1
  1121. package/dist/icons/Icon.cjs.map +1 -1
  1122. package/dist/icons/Icon.js.map +1 -1
  1123. package/dist/icons/IconPicker.cjs.map +1 -1
  1124. package/dist/icons/IconPicker.js.map +1 -1
  1125. package/dist/icons/IconPicker.module.cjs.map +1 -1
  1126. package/dist/icons/IconPicker.module.js.map +1 -1
  1127. package/dist/icons/IconProvider.cjs.map +1 -1
  1128. package/dist/icons/IconProvider.js.map +1 -1
  1129. package/dist/icons/alias.cjs.map +1 -1
  1130. package/dist/icons/alias.js.map +1 -1
  1131. package/dist/icons/generated/aliases.cjs.map +1 -1
  1132. package/dist/icons/generated/aliases.js.map +1 -1
  1133. package/dist/icons/generated/icon-names.cjs.map +1 -1
  1134. package/dist/icons/generated/icon-names.js.map +1 -1
  1135. package/dist/icons/generated/loaders.cjs.map +1 -1
  1136. package/dist/icons/generated/loaders.js.map +1 -1
  1137. package/dist/icons/generated/shard-00.cjs.map +1 -1
  1138. package/dist/icons/generated/shard-00.js.map +1 -1
  1139. package/dist/icons/generated/shard-01.cjs.map +1 -1
  1140. package/dist/icons/generated/shard-01.js.map +1 -1
  1141. package/dist/icons/generated/shard-02.cjs.map +1 -1
  1142. package/dist/icons/generated/shard-02.js.map +1 -1
  1143. package/dist/icons/generated/shard-03.cjs.map +1 -1
  1144. package/dist/icons/generated/shard-03.js.map +1 -1
  1145. package/dist/icons/generated/shard-04.cjs.map +1 -1
  1146. package/dist/icons/generated/shard-04.js.map +1 -1
  1147. package/dist/icons/generated/shard-05.cjs.map +1 -1
  1148. package/dist/icons/generated/shard-05.js.map +1 -1
  1149. package/dist/icons/generated/shard-06.cjs.map +1 -1
  1150. package/dist/icons/generated/shard-06.js.map +1 -1
  1151. package/dist/icons/generated/shard-07.cjs.map +1 -1
  1152. package/dist/icons/generated/shard-07.js.map +1 -1
  1153. package/dist/icons/generated/shard-08.cjs.map +1 -1
  1154. package/dist/icons/generated/shard-08.js.map +1 -1
  1155. package/dist/icons/generated/shard-09.cjs.map +1 -1
  1156. package/dist/icons/generated/shard-09.js.map +1 -1
  1157. package/dist/icons/generated/shard-10.cjs.map +1 -1
  1158. package/dist/icons/generated/shard-10.js.map +1 -1
  1159. package/dist/icons/generated/shard-11.cjs.map +1 -1
  1160. package/dist/icons/generated/shard-11.js.map +1 -1
  1161. package/dist/icons/generated/shard-12.cjs.map +1 -1
  1162. package/dist/icons/generated/shard-12.js.map +1 -1
  1163. package/dist/icons/generated/shard-13.cjs.map +1 -1
  1164. package/dist/icons/generated/shard-13.js.map +1 -1
  1165. package/dist/icons/generated/shard-14.cjs.map +1 -1
  1166. package/dist/icons/generated/shard-14.js.map +1 -1
  1167. package/dist/icons/generated/shard-15.cjs.map +1 -1
  1168. package/dist/icons/generated/shard-15.js.map +1 -1
  1169. package/dist/icons/generated/shard-16.cjs.map +1 -1
  1170. package/dist/icons/generated/shard-16.js.map +1 -1
  1171. package/dist/icons/generated/shard-17.cjs.map +1 -1
  1172. package/dist/icons/generated/shard-17.js.map +1 -1
  1173. package/dist/icons/generated/shard-18.cjs.map +1 -1
  1174. package/dist/icons/generated/shard-18.js.map +1 -1
  1175. package/dist/icons/generated/shard-19.cjs.map +1 -1
  1176. package/dist/icons/generated/shard-19.js.map +1 -1
  1177. package/dist/icons/generated/shard-20.cjs.map +1 -1
  1178. package/dist/icons/generated/shard-20.js.map +1 -1
  1179. package/dist/icons/generated/shard-21.cjs.map +1 -1
  1180. package/dist/icons/generated/shard-21.js.map +1 -1
  1181. package/dist/icons/generated/shard-22.cjs.map +1 -1
  1182. package/dist/icons/generated/shard-22.js.map +1 -1
  1183. package/dist/icons/generated/shard-23.cjs.map +1 -1
  1184. package/dist/icons/generated/shard-23.js.map +1 -1
  1185. package/dist/icons/generated/shard-24.cjs.map +1 -1
  1186. package/dist/icons/generated/shard-24.js.map +1 -1
  1187. package/dist/icons/generated/shard-25.cjs.map +1 -1
  1188. package/dist/icons/generated/shard-25.js.map +1 -1
  1189. package/dist/icons/generated/shard-26.cjs.map +1 -1
  1190. package/dist/icons/generated/shard-26.js.map +1 -1
  1191. package/dist/icons/generated/shard-27.cjs.map +1 -1
  1192. package/dist/icons/generated/shard-27.js.map +1 -1
  1193. package/dist/icons/generated/shard-28.cjs.map +1 -1
  1194. package/dist/icons/generated/shard-28.js.map +1 -1
  1195. package/dist/icons/generated/shard-29.cjs.map +1 -1
  1196. package/dist/icons/generated/shard-29.js.map +1 -1
  1197. package/dist/icons/generated/shard-30.cjs.map +1 -1
  1198. package/dist/icons/generated/shard-30.js.map +1 -1
  1199. package/dist/icons/generated/shard-31.cjs.map +1 -1
  1200. package/dist/icons/generated/shard-31.js.map +1 -1
  1201. package/dist/icons/generated/shard-32.cjs.map +1 -1
  1202. package/dist/icons/generated/shard-32.js.map +1 -1
  1203. package/dist/icons/generated/shard-33.cjs.map +1 -1
  1204. package/dist/icons/generated/shard-33.js.map +1 -1
  1205. package/dist/icons/generated/shard-34.cjs.map +1 -1
  1206. package/dist/icons/generated/shard-34.js.map +1 -1
  1207. package/dist/icons/generated/shard-35.cjs.map +1 -1
  1208. package/dist/icons/generated/shard-35.js.map +1 -1
  1209. package/dist/icons/generated/shard-36.cjs.map +1 -1
  1210. package/dist/icons/generated/shard-36.js.map +1 -1
  1211. package/dist/icons/generated/shard-37.cjs.map +1 -1
  1212. package/dist/icons/generated/shard-37.js.map +1 -1
  1213. package/dist/icons/generated/shard-38.cjs.map +1 -1
  1214. package/dist/icons/generated/shard-38.js.map +1 -1
  1215. package/dist/icons/generated/shard-39.cjs.map +1 -1
  1216. package/dist/icons/generated/shard-39.js.map +1 -1
  1217. package/dist/icons/generated/shard-40.cjs.map +1 -1
  1218. package/dist/icons/generated/shard-40.js.map +1 -1
  1219. package/dist/icons/generated/shard-41.cjs.map +1 -1
  1220. package/dist/icons/generated/shard-41.js.map +1 -1
  1221. package/dist/icons/generated/shard-42.cjs.map +1 -1
  1222. package/dist/icons/generated/shard-42.js.map +1 -1
  1223. package/dist/icons/generated/shard-43.cjs.map +1 -1
  1224. package/dist/icons/generated/shard-43.js.map +1 -1
  1225. package/dist/icons/generated/shard-44.cjs.map +1 -1
  1226. package/dist/icons/generated/shard-44.js.map +1 -1
  1227. package/dist/icons/generated/shard-45.cjs.map +1 -1
  1228. package/dist/icons/generated/shard-45.js.map +1 -1
  1229. package/dist/icons/icon-context.cjs.map +1 -1
  1230. package/dist/icons/icon-context.js.map +1 -1
  1231. package/dist/icons/is-icon-name.cjs.map +1 -1
  1232. package/dist/icons/is-icon-name.js.map +1 -1
  1233. package/dist/icons/material-symbols.cjs.map +1 -1
  1234. package/dist/icons/material-symbols.js.map +1 -1
  1235. package/dist/icons/normalize-icon-name.cjs.map +1 -1
  1236. package/dist/icons/normalize-icon-name.js.map +1 -1
  1237. package/dist/icons/shard-cache.cjs +1 -1
  1238. package/dist/icons/shard-cache.cjs.map +1 -1
  1239. package/dist/icons/shard-cache.js +2 -5
  1240. package/dist/icons/shard-cache.js.map +1 -1
  1241. package/dist/icons/use-icon.cjs.map +1 -1
  1242. package/dist/icons/use-icon.js.map +1 -1
  1243. package/dist/icons/validate-icon-name.cjs.map +1 -1
  1244. package/dist/icons/validate-icon-name.js.map +1 -1
  1245. package/dist/icons-virtual.cjs.map +1 -1
  1246. package/dist/icons-virtual.js.map +1 -1
  1247. package/dist/imaging/canvas.cjs.map +1 -1
  1248. package/dist/imaging/canvas.js.map +1 -1
  1249. package/dist/imaging/compress.cjs.map +1 -1
  1250. package/dist/imaging/compress.js.map +1 -1
  1251. package/dist/imaging/decode.cjs.map +1 -1
  1252. package/dist/imaging/decode.js.map +1 -1
  1253. package/dist/imaging/encode.cjs.map +1 -1
  1254. package/dist/imaging/encode.js.map +1 -1
  1255. package/dist/imaging/exceptions.cjs.map +1 -1
  1256. package/dist/imaging/exceptions.js.map +1 -1
  1257. package/dist/imaging/frame.cjs.map +1 -1
  1258. package/dist/imaging/frame.js.map +1 -1
  1259. package/dist/imaging/thumbnails.cjs.map +1 -1
  1260. package/dist/imaging/thumbnails.js.map +1 -1
  1261. package/dist/imaging/transform.cjs.map +1 -1
  1262. package/dist/imaging/transform.js.map +1 -1
  1263. package/dist/imaging/use-image-processing.cjs.map +1 -1
  1264. package/dist/imaging/use-image-processing.js.map +1 -1
  1265. package/dist/logger/logger.cjs.map +1 -1
  1266. package/dist/logger/logger.js.map +1 -1
  1267. package/dist/neural.cjs.map +1 -1
  1268. package/dist/neural.js.map +1 -1
  1269. package/dist/oauth/GoogleSignIn.cjs +1 -1
  1270. package/dist/oauth/GoogleSignIn.cjs.map +1 -1
  1271. package/dist/oauth/GoogleSignIn.js +6 -9
  1272. package/dist/oauth/GoogleSignIn.js.map +1 -1
  1273. package/dist/oauth/callback.cjs.map +1 -1
  1274. package/dist/oauth/callback.js.map +1 -1
  1275. package/dist/oauth/use-oauth-callback.cjs.map +1 -1
  1276. package/dist/oauth/use-oauth-callback.js.map +1 -1
  1277. package/dist/offline/conflict.cjs.map +1 -1
  1278. package/dist/offline/conflict.js.map +1 -1
  1279. package/dist/offline/create-offline-database.cjs.map +1 -1
  1280. package/dist/offline/create-offline-database.js.map +1 -1
  1281. package/dist/offline/create-offline-store.cjs +1 -1
  1282. package/dist/offline/create-offline-store.cjs.map +1 -1
  1283. package/dist/offline/create-offline-store.js +1 -5
  1284. package/dist/offline/create-offline-store.js.map +1 -1
  1285. package/dist/offline/create-offline-sync.cjs +1 -1
  1286. package/dist/offline/create-offline-sync.cjs.map +1 -1
  1287. package/dist/offline/create-offline-sync.js +9 -14
  1288. package/dist/offline/create-offline-sync.js.map +1 -1
  1289. package/dist/offline/use-offline-sync.cjs.map +1 -1
  1290. package/dist/offline/use-offline-sync.js.map +1 -1
  1291. package/dist/perf/cache-size.cjs.map +1 -1
  1292. package/dist/perf/cache-size.js.map +1 -1
  1293. package/dist/perf/device.cjs.map +1 -1
  1294. package/dist/perf/device.js.map +1 -1
  1295. package/dist/perf/format.cjs.map +1 -1
  1296. package/dist/perf/format.js.map +1 -1
  1297. package/dist/perf/profiler.cjs.map +1 -1
  1298. package/dist/perf/profiler.js.map +1 -1
  1299. package/dist/push/use-push-subscription.cjs.map +1 -1
  1300. package/dist/push/use-push-subscription.js.map +1 -1
  1301. package/dist/push/utils.cjs.map +1 -1
  1302. package/dist/push/utils.js.map +1 -1
  1303. package/dist/push/web-push-client.cjs.map +1 -1
  1304. package/dist/push/web-push-client.js.map +1 -1
  1305. package/dist/query/QueryProvider.cjs.map +1 -1
  1306. package/dist/query/QueryProvider.js.map +1 -1
  1307. package/dist/query/constants.cjs.map +1 -1
  1308. package/dist/query/constants.js.map +1 -1
  1309. package/dist/query/create-query-keys.cjs.map +1 -1
  1310. package/dist/query/create-query-keys.js.map +1 -1
  1311. package/dist/query/foreign-client-warning.cjs.map +1 -1
  1312. package/dist/query/foreign-client-warning.js.map +1 -1
  1313. package/dist/query/offline-persistence.cjs +1 -1
  1314. package/dist/query/offline-persistence.cjs.map +1 -1
  1315. package/dist/query/offline-persistence.js +2 -10
  1316. package/dist/query/offline-persistence.js.map +1 -1
  1317. package/dist/query/optimistic.cjs.map +1 -1
  1318. package/dist/query/optimistic.js.map +1 -1
  1319. package/dist/query/pagination.cjs.map +1 -1
  1320. package/dist/query/pagination.js.map +1 -1
  1321. package/dist/query/retry-policy.cjs.map +1 -1
  1322. package/dist/query/retry-policy.js.map +1 -1
  1323. package/dist/query/use-cursor-query.cjs.map +1 -1
  1324. package/dist/query/use-cursor-query.js.map +1 -1
  1325. package/dist/query/use-offline-mutation.cjs.map +1 -1
  1326. package/dist/query/use-offline-mutation.js.map +1 -1
  1327. package/dist/query/use-paginated-query.cjs.map +1 -1
  1328. package/dist/query/use-paginated-query.js.map +1 -1
  1329. package/dist/router/AppRouter.cjs.map +1 -1
  1330. package/dist/router/AppRouter.js.map +1 -1
  1331. package/dist/router/RouteGuard.cjs.map +1 -1
  1332. package/dist/router/RouteGuard.js.map +1 -1
  1333. package/dist/router/index.js +2 -2
  1334. package/dist/share/share-or-download.cjs.map +1 -1
  1335. package/dist/share/share-or-download.js.map +1 -1
  1336. package/dist/share/share.cjs.map +1 -1
  1337. package/dist/share/share.js.map +1 -1
  1338. package/dist/sse/create-event-stream.cjs +1 -1
  1339. package/dist/sse/create-event-stream.cjs.map +1 -1
  1340. package/dist/sse/create-event-stream.js +44 -30
  1341. package/dist/sse/create-event-stream.js.map +1 -1
  1342. package/dist/sse/ticket-event-stream.cjs +2 -0
  1343. package/dist/sse/ticket-event-stream.cjs.map +1 -0
  1344. package/dist/sse/ticket-event-stream.js +41 -0
  1345. package/dist/sse/ticket-event-stream.js.map +1 -0
  1346. package/dist/sse/use-event-stream.cjs +1 -1
  1347. package/dist/sse/use-event-stream.cjs.map +1 -1
  1348. package/dist/sse/use-event-stream.js +7 -4
  1349. package/dist/sse/use-event-stream.js.map +1 -1
  1350. package/dist/store/create-selectors.cjs.map +1 -1
  1351. package/dist/store/create-selectors.js.map +1 -1
  1352. package/dist/store/create-store.cjs.map +1 -1
  1353. package/dist/store/create-store.js.map +1 -1
  1354. package/dist/sw/background-sync.cjs.map +1 -1
  1355. package/dist/sw/background-sync.js.map +1 -1
  1356. package/dist/sw/cache-inspect.cjs.map +1 -1
  1357. package/dist/sw/cache-inspect.js.map +1 -1
  1358. package/dist/sw/cache.cjs +1 -1
  1359. package/dist/sw/cache.cjs.map +1 -1
  1360. package/dist/sw/cache.js +2 -6
  1361. package/dist/sw/cache.js.map +1 -1
  1362. package/dist/sw/create-push-handler.cjs.map +1 -1
  1363. package/dist/sw/create-push-handler.js.map +1 -1
  1364. package/dist/sw/credential-headers.cjs.map +1 -1
  1365. package/dist/sw/credential-headers.js.map +1 -1
  1366. package/dist/sw/periodic-sync.cjs.map +1 -1
  1367. package/dist/sw/periodic-sync.js.map +1 -1
  1368. package/dist/sw/register-service-worker.cjs.map +1 -1
  1369. package/dist/sw/register-service-worker.js.map +1 -1
  1370. package/dist/sw/session-data.cjs.map +1 -1
  1371. package/dist/sw/session-data.js.map +1 -1
  1372. package/dist/tabular/assets.cjs.map +1 -1
  1373. package/dist/tabular/assets.js.map +1 -1
  1374. package/dist/tabular/cache.cjs.map +1 -1
  1375. package/dist/tabular/cache.js.map +1 -1
  1376. package/dist/tabular/compact.cjs.map +1 -1
  1377. package/dist/tabular/compact.js.map +1 -1
  1378. package/dist/tabular/exceptions.cjs.map +1 -1
  1379. package/dist/tabular/exceptions.js.map +1 -1
  1380. package/dist/tabular/manifest.cjs.map +1 -1
  1381. package/dist/tabular/manifest.js.map +1 -1
  1382. package/dist/tabular/predictor.cjs.map +1 -1
  1383. package/dist/tabular/predictor.js.map +1 -1
  1384. package/dist/tabular/use-tabular-predictor.cjs.map +1 -1
  1385. package/dist/tabular/use-tabular-predictor.js.map +1 -1
  1386. package/dist/telemetry/TelemetryProvider.cjs.map +1 -1
  1387. package/dist/telemetry/TelemetryProvider.js.map +1 -1
  1388. package/dist/telemetry/app-error-adapter.cjs.map +1 -1
  1389. package/dist/telemetry/app-error-adapter.js.map +1 -1
  1390. package/dist/telemetry/app-error-queue.cjs.map +1 -1
  1391. package/dist/telemetry/app-error-queue.js.map +1 -1
  1392. package/dist/telemetry/app-error-reporter.cjs.map +1 -1
  1393. package/dist/telemetry/app-error-reporter.js.map +1 -1
  1394. package/dist/telemetry/app-error-schema.cjs.map +1 -1
  1395. package/dist/telemetry/app-error-schema.js.map +1 -1
  1396. package/dist/telemetry/app-error-transport.cjs.map +1 -1
  1397. package/dist/telemetry/app-error-transport.js.map +1 -1
  1398. package/dist/telemetry/console-adapter.cjs.map +1 -1
  1399. package/dist/telemetry/console-adapter.js.map +1 -1
  1400. package/dist/telemetry/describe-app-error.cjs.map +1 -1
  1401. package/dist/telemetry/describe-app-error.js.map +1 -1
  1402. package/dist/telemetry/posthog-adapter.cjs +1 -1
  1403. package/dist/telemetry/posthog-adapter.cjs.map +1 -1
  1404. package/dist/telemetry/posthog-adapter.js +1 -5
  1405. package/dist/telemetry/posthog-adapter.js.map +1 -1
  1406. package/dist/telemetry/sentry-adapter.cjs.map +1 -1
  1407. package/dist/telemetry/sentry-adapter.js.map +1 -1
  1408. package/dist/tempest-react-sdk.cjs +1 -1
  1409. package/dist/tempest-react-sdk.d.ts +440 -7
  1410. package/dist/tempest-react-sdk.js +122 -120
  1411. package/dist/testing/create-mock-handlers.cjs.map +1 -1
  1412. package/dist/testing/create-mock-handlers.js.map +1 -1
  1413. package/dist/testing.js +1 -2
  1414. package/dist/theme/ThemeProvider.cjs.map +1 -1
  1415. package/dist/theme/ThemeProvider.js.map +1 -1
  1416. package/dist/theme/apply-theme.cjs.map +1 -1
  1417. package/dist/theme/apply-theme.js.map +1 -1
  1418. package/dist/theme/color.cjs.map +1 -1
  1419. package/dist/theme/color.js.map +1 -1
  1420. package/dist/theme/create-theme.cjs.map +1 -1
  1421. package/dist/theme/create-theme.js.map +1 -1
  1422. package/dist/theme/data-viz-ramps.cjs.map +1 -1
  1423. package/dist/theme/data-viz-ramps.js.map +1 -1
  1424. package/dist/theme/initial-theme.cjs.map +1 -1
  1425. package/dist/theme/initial-theme.js.map +1 -1
  1426. package/dist/theme/inverse-render.cjs.map +1 -1
  1427. package/dist/theme/inverse-render.js.map +1 -1
  1428. package/dist/theme/inverse-restore.cjs.map +1 -1
  1429. package/dist/theme/inverse-restore.js.map +1 -1
  1430. package/dist/theme/inverse-surface.cjs.map +1 -1
  1431. package/dist/theme/inverse-surface.js.map +1 -1
  1432. package/dist/theme/status-tokens.cjs.map +1 -1
  1433. package/dist/theme/status-tokens.js.map +1 -1
  1434. package/dist/theme/theme-presets.cjs.map +1 -1
  1435. package/dist/theme/theme-presets.js.map +1 -1
  1436. package/dist/utils/absent.cjs.map +1 -1
  1437. package/dist/utils/absent.js.map +1 -1
  1438. package/dist/utils/arrays.cjs.map +1 -1
  1439. package/dist/utils/arrays.js.map +1 -1
  1440. package/dist/utils/base64.cjs.map +1 -1
  1441. package/dist/utils/base64.js.map +1 -1
  1442. package/dist/utils/cn.cjs.map +1 -1
  1443. package/dist/utils/cn.js.map +1 -1
  1444. package/dist/utils/compare-values.cjs.map +1 -1
  1445. package/dist/utils/compare-values.js.map +1 -1
  1446. package/dist/utils/compressed-storage.cjs.map +1 -1
  1447. package/dist/utils/compressed-storage.js.map +1 -1
  1448. package/dist/utils/csv.cjs.map +1 -1
  1449. package/dist/utils/csv.js.map +1 -1
  1450. package/dist/utils/dev-mode.cjs.map +1 -1
  1451. package/dist/utils/dev-mode.js.map +1 -1
  1452. package/dist/utils/duplicate-instance.cjs.map +1 -1
  1453. package/dist/utils/duplicate-instance.js.map +1 -1
  1454. package/dist/utils/format.cjs.map +1 -1
  1455. package/dist/utils/format.js.map +1 -1
  1456. package/dist/utils/functions.cjs +1 -1
  1457. package/dist/utils/functions.cjs.map +1 -1
  1458. package/dist/utils/functions.js +1 -1
  1459. package/dist/utils/functions.js.map +1 -1
  1460. package/dist/utils/guards.cjs.map +1 -1
  1461. package/dist/utils/guards.js.map +1 -1
  1462. package/dist/utils/ids.cjs.map +1 -1
  1463. package/dist/utils/ids.js.map +1 -1
  1464. package/dist/utils/intl-cache.cjs.map +1 -1
  1465. package/dist/utils/intl-cache.js.map +1 -1
  1466. package/dist/utils/json-frame.cjs.map +1 -1
  1467. package/dist/utils/json-frame.js.map +1 -1
  1468. package/dist/utils/numbers.cjs.map +1 -1
  1469. package/dist/utils/numbers.js.map +1 -1
  1470. package/dist/utils/objects.cjs.map +1 -1
  1471. package/dist/utils/objects.js.map +1 -1
  1472. package/dist/utils/owner-fingerprint.cjs.map +1 -1
  1473. package/dist/utils/owner-fingerprint.js.map +1 -1
  1474. package/dist/utils/promises.cjs.map +1 -1
  1475. package/dist/utils/promises.js.map +1 -1
  1476. package/dist/utils/relative-time.cjs.map +1 -1
  1477. package/dist/utils/relative-time.js.map +1 -1
  1478. package/dist/utils/safe-url.cjs.map +1 -1
  1479. package/dist/utils/safe-url.js.map +1 -1
  1480. package/dist/utils/schema-like.cjs.map +1 -1
  1481. package/dist/utils/schema-like.js.map +1 -1
  1482. package/dist/utils/storage.cjs +1 -1
  1483. package/dist/utils/storage.cjs.map +1 -1
  1484. package/dist/utils/storage.js +2 -2
  1485. package/dist/utils/storage.js.map +1 -1
  1486. package/dist/utils/strings.cjs.map +1 -1
  1487. package/dist/utils/strings.js.map +1 -1
  1488. package/dist/utils/xlsx.cjs.map +1 -1
  1489. package/dist/utils/xlsx.js.map +1 -1
  1490. package/dist/vision/core/canvas.cjs.map +1 -1
  1491. package/dist/vision/core/canvas.js.map +1 -1
  1492. package/dist/vision/core/dtypes.cjs.map +1 -1
  1493. package/dist/vision/core/dtypes.js.map +1 -1
  1494. package/dist/vision/core/exceptions.cjs.map +1 -1
  1495. package/dist/vision/core/exceptions.js.map +1 -1
  1496. package/dist/vision/core/graph.cjs.map +1 -1
  1497. package/dist/vision/core/graph.js.map +1 -1
  1498. package/dist/vision/core/metadata.cjs +1 -1
  1499. package/dist/vision/core/metadata.cjs.map +1 -1
  1500. package/dist/vision/core/metadata.js +9 -26
  1501. package/dist/vision/core/metadata.js.map +1 -1
  1502. package/dist/vision/core/providers.cjs.map +1 -1
  1503. package/dist/vision/core/providers.js.map +1 -1
  1504. package/dist/vision/core/session.cjs.map +1 -1
  1505. package/dist/vision/core/session.js.map +1 -1
  1506. package/dist/vision/core/timing.cjs.map +1 -1
  1507. package/dist/vision/core/timing.js.map +1 -1
  1508. package/dist/vision/fusion.cjs.map +1 -1
  1509. package/dist/vision/fusion.js.map +1 -1
  1510. package/dist/vision/index.cjs.map +1 -1
  1511. package/dist/vision/index.js.map +1 -1
  1512. package/dist/vision/io/image.cjs.map +1 -1
  1513. package/dist/vision/io/image.js.map +1 -1
  1514. package/dist/vision/labels.cjs.map +1 -1
  1515. package/dist/vision/labels.js.map +1 -1
  1516. package/dist/vision/luminance.cjs.map +1 -1
  1517. package/dist/vision/luminance.js.map +1 -1
  1518. package/dist/vision/normalization.cjs.map +1 -1
  1519. package/dist/vision/normalization.js.map +1 -1
  1520. package/dist/vision/postprocess/classification.cjs.map +1 -1
  1521. package/dist/vision/postprocess/classification.js.map +1 -1
  1522. package/dist/vision/postprocess/detection.cjs.map +1 -1
  1523. package/dist/vision/postprocess/detection.js.map +1 -1
  1524. package/dist/vision/postprocess/segmentation.cjs.map +1 -1
  1525. package/dist/vision/postprocess/segmentation.js.map +1 -1
  1526. package/dist/vision/preprocess/image.cjs.map +1 -1
  1527. package/dist/vision/preprocess/image.js.map +1 -1
  1528. package/dist/vision/preprocess/pipeline.cjs.map +1 -1
  1529. package/dist/vision/preprocess/pipeline.js.map +1 -1
  1530. package/dist/vision/results.cjs.map +1 -1
  1531. package/dist/vision/results.js.map +1 -1
  1532. package/dist/vision/tasks/base.cjs.map +1 -1
  1533. package/dist/vision/tasks/base.js.map +1 -1
  1534. package/dist/vision/tasks/classifier.cjs.map +1 -1
  1535. package/dist/vision/tasks/classifier.js.map +1 -1
  1536. package/dist/vision/tasks/detectClassify.cjs.map +1 -1
  1537. package/dist/vision/tasks/detectClassify.js.map +1 -1
  1538. package/dist/vision/tasks/detector.cjs.map +1 -1
  1539. package/dist/vision/tasks/detector.js.map +1 -1
  1540. package/dist/vision/tasks/segmenter.cjs.map +1 -1
  1541. package/dist/vision/tasks/segmenter.js.map +1 -1
  1542. package/dist/vision/types.cjs.map +1 -1
  1543. package/dist/vision/types.js.map +1 -1
  1544. package/dist/vision/use-camera-stream.cjs +1 -1
  1545. package/dist/vision/use-camera-stream.cjs.map +1 -1
  1546. package/dist/vision/use-camera-stream.js +3 -9
  1547. package/dist/vision/use-camera-stream.js.map +1 -1
  1548. package/dist/vision/use-live-luminance.cjs +1 -1
  1549. package/dist/vision/use-live-luminance.cjs.map +1 -1
  1550. package/dist/vision/use-live-luminance.js +1 -5
  1551. package/dist/vision/use-live-luminance.js.map +1 -1
  1552. package/dist/vite/base-url.cjs.map +1 -1
  1553. package/dist/vite/base-url.js.map +1 -1
  1554. package/dist/vite/create-vite-config.cjs.map +1 -1
  1555. package/dist/vite/create-vite-config.js.map +1 -1
  1556. package/dist/vite/narrow-tokens.cjs.map +1 -1
  1557. package/dist/vite/narrow-tokens.js.map +1 -1
  1558. package/dist/vite/tempest-csp.cjs +1 -1
  1559. package/dist/vite/tempest-csp.cjs.map +1 -1
  1560. package/dist/vite/tempest-csp.js +2 -10
  1561. package/dist/vite/tempest-csp.js.map +1 -1
  1562. package/dist/vite/tempest-icons.cjs.map +1 -1
  1563. package/dist/vite/tempest-icons.js.map +1 -1
  1564. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  1565. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  1566. package/dist/vite/tempest-pwa-dev-sw.js +9 -16
  1567. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  1568. package/dist/vite/tempest-pwa-icons.cjs.map +1 -1
  1569. package/dist/vite/tempest-pwa-icons.js.map +1 -1
  1570. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  1571. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  1572. package/dist/vite/tempest-styles.cjs.map +1 -1
  1573. package/dist/vite/tempest-styles.js.map +1 -1
  1574. package/dist/vite/tempest-vitest.cjs.map +1 -1
  1575. package/dist/vite/tempest-vitest.js.map +1 -1
  1576. package/dist/webrtc/link-stats.cjs.map +1 -1
  1577. package/dist/webrtc/link-stats.js.map +1 -1
  1578. package/dist/webrtc/mesh-quality.cjs.map +1 -1
  1579. package/dist/webrtc/mesh-quality.js.map +1 -1
  1580. package/dist/webrtc/opus-sdp.cjs.map +1 -1
  1581. package/dist/webrtc/opus-sdp.js.map +1 -1
  1582. package/dist/webrtc/peer-link.cjs +1 -1
  1583. package/dist/webrtc/peer-link.cjs.map +1 -1
  1584. package/dist/webrtc/peer-link.js +2 -5
  1585. package/dist/webrtc/peer-link.js.map +1 -1
  1586. package/dist/webrtc/peer-mesh.cjs +1 -1
  1587. package/dist/webrtc/peer-mesh.cjs.map +1 -1
  1588. package/dist/webrtc/peer-mesh.js +8 -24
  1589. package/dist/webrtc/peer-mesh.js.map +1 -1
  1590. package/dist/webrtc/sender-bitrate.cjs.map +1 -1
  1591. package/dist/webrtc/sender-bitrate.js.map +1 -1
  1592. package/dist/webrtc/use-link-stats.cjs.map +1 -1
  1593. package/dist/webrtc/use-link-stats.js.map +1 -1
  1594. package/dist/ws/create-web-socket.cjs +1 -1
  1595. package/dist/ws/create-web-socket.cjs.map +1 -1
  1596. package/dist/ws/create-web-socket.js +4 -22
  1597. package/dist/ws/create-web-socket.js.map +1 -1
  1598. package/dist/ws/resilience.cjs.map +1 -1
  1599. package/dist/ws/resilience.js.map +1 -1
  1600. package/dist/ws/use-web-socket.cjs.map +1 -1
  1601. package/dist/ws/use-web-socket.js.map +1 -1
  1602. package/package.json +9 -6
  1603. package/template/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"create-data-provider.cjs","names":[],"sources":["../../src/data/create-data-provider.ts"],"sourcesContent":["import type { ApiClient, RequestOptions } from \"@/http/types\";\nimport type { OffsetPage } from \"@/query/pagination\";\n\n/** Query-param values accepted by the API client for a list request. */\ntype ParamValue = string | number | boolean | undefined | null;\n\n/** Filters passed to {@link DataProvider.getList}, spread verbatim into the query string. */\nexport type DataFilters = Record<string, ParamValue>;\n\n/** Parameters for a paginated, sorted, filtered list request. */\nexport interface GetListParams {\n /** Offset pagination — 1-based `page` and `pageSize`. */\n pagination?: { page?: number; pageSize?: number };\n /** Single-field sort. `order` defaults to `\"asc\"`. */\n sort?: { field: string; order?: \"asc\" | \"desc\" };\n /** Arbitrary filter query params, spread onto the request. */\n filters?: DataFilters;\n}\n\n/**\n * Refine-style data provider over the Tempest FastAPI SDK CRUD/pagination\n * conventions. Implementations are stateless wrappers around an {@link ApiClient}.\n */\nexport interface DataProvider {\n /**\n * Fetch a paginated list of a resource.\n *\n * @param resource - The resource name (e.g. `\"users\"`).\n * @param params - Pagination, sort and filter parameters.\n * @returns The offset-paginated envelope.\n */\n getList<T>(resource: string, params?: GetListParams): Promise<OffsetPage<T>>;\n /**\n * Fetch a single record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The record.\n */\n getOne<T>(resource: string, id: string | number): Promise<T>;\n /**\n * Fetch many records by id (default: parallel {@link DataProvider.getOne}).\n *\n * @param resource - The resource name.\n * @param ids - The record ids.\n * @returns The records, in the same order as `ids`.\n */\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]>;\n /**\n * Create a record.\n *\n * @param resource - The resource name.\n * @param data - The creation payload.\n * @returns The created record.\n */\n create<T>(resource: string, data: unknown): Promise<T>;\n /**\n * Update a record (PATCH by default, PUT when configured).\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param data - The update payload.\n * @returns The updated record.\n */\n update<T>(resource: string, id: string | number, data: unknown): Promise<T>;\n /**\n * Delete a record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The delete response (often the deleted record).\n */\n deleteOne<T>(resource: string, id: string | number): Promise<T>;\n}\n\n/** Options to tailor {@link createDataProvider} to a backend's conventions. */\nexport interface DataProviderOptions {\n /** Query-param name for the page number. Default: `\"page\"`. */\n pageParam?: string;\n /** Query-param name for the page size. Default: `\"size\"`. */\n sizeParam?: string;\n /** Query-param name for the sort field. Default: `\"order_by\"`. */\n sortFieldParam?: string;\n /** Query-param name for the sort order. Default: `\"ascending\"`. */\n sortOrderParam?: string;\n /**\n * When `true` (default), emit the sort order as a boolean\n * (`order:\"asc\"` → `true`). When `false`, emit the literal `\"asc\"`/`\"desc\"`.\n */\n sortOrderAsBoolean?: boolean;\n /** HTTP method used by {@link DataProvider.update}. Default: `\"patch\"`. */\n updateMethod?: \"patch\" | \"put\";\n /**\n * Build the request path for a resource (and optional id).\n * Default: `id == null ? \"/\" + resource : \"/\" + resource + \"/\" + id`.\n *\n * Since 0.77.0 `id` arrives already passed through {@link encodeIdSegment}:\n * percent-encoded as one path segment, and never `\"\"`, `\".\"` or `\"..\"`. An\n * override therefore interpolates it as-is — encoding it again would turn\n * `%2F` into `%252F`.\n */\n buildPath?: (resource: string, id?: string | number) => string;\n}\n\nconst DOT_SEGMENTS: ReadonlySet<string> = new Set([\"\", \".\", \"..\"]);\n\n/**\n * Encode a record id as exactly one URL path segment.\n *\n * The data provider calls this on every id before building a path, because the\n * id is the one part of the URL that may come from outside the app — a search\n * param, a hash, a decoded route param, a value another user stored. Left raw,\n * `\"../../admin/users\"` walks the authenticated request out of the resource,\n * `\"7?role=admin\"` injects query params and `\"7#x\"` truncates the path, all\n * while the request still carries the bearer token (#438).\n *\n * `encodeURIComponent` neutralises `/`, `?`, `#` and `%`. It leaves `.` alone,\n * so `\"\"`, `\".\"` and `\"..\"` are rejected instead: the URL parser resolves them\n * as dot-segments whatever the encoding, and none of them names a record.\n * `null` and `undefined` — what an untyped caller or a not-yet-loaded route\n * param hands over — are rejected too, since `String()` would turn them into\n * the literal segments `\"null\"` and `\"undefined\"`.\n *\n * @param id - The record id, as handed to the provider.\n * @returns The percent-encoded segment, safe to interpolate between two `/`.\n * @throws {TypeError} When the id is `null`, `undefined`, `\"\"`, `\".\"` or `\"..\"`.\n *\n * @example\n * encodeIdSegment(7); // \"7\"\n * encodeIdSegment(\"a/b?x=1\"); // \"a%2Fb%3Fx%3D1\"\n * encodeIdSegment(\"..\"); // throws TypeError\n */\nexport function encodeIdSegment(id: string | number): string {\n if (id == null) {\n throw new TypeError(`Invalid record id ${String(id)}: a record id is required.`);\n }\n const raw = String(id);\n if (DOT_SEGMENTS.has(raw)) {\n throw new TypeError(\n `Invalid record id ${JSON.stringify(raw)}: it would resolve as a path dot-segment.`,\n );\n }\n return encodeURIComponent(raw);\n}\n\nconst defaultBuildPath = (resource: string, id?: string | number): string =>\n id == null ? `/${resource}` : `/${resource}/${id}`;\n\n/**\n * Create a {@link DataProvider} bound to an {@link ApiClient}.\n *\n * Maps Refine-style calls to the Tempest FastAPI SDK conventions: list →\n * `GET /{resource}?page=&size=&order_by=&ascending=&...filters`, one →\n * `GET /{resource}/{id}`, create → `POST`, update → `PATCH`/`PUT`,\n * delete → `DELETE`.\n *\n * Every id goes through {@link encodeIdSegment} before reaching `buildPath`, so\n * an id can never leave its own path segment — not with the default builder,\n * and not with an override that interpolates it.\n *\n * @param client - The HTTP client created by `createApiClient`.\n * @param options - Optional overrides for param names, sort encoding,\n * update method and path building.\n * @returns A stateless data provider.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * const page = await dataProvider.getList<User>(\"users\", {\n * pagination: { page: 1, pageSize: 20 },\n * sort: { field: \"created_at\", order: \"desc\" },\n * filters: { active: true },\n * });\n */\nexport function createDataProvider(\n client: ApiClient,\n options: DataProviderOptions = {},\n): DataProvider {\n const {\n pageParam = \"page\",\n sizeParam = \"size\",\n sortFieldParam = \"order_by\",\n sortOrderParam = \"ascending\",\n sortOrderAsBoolean = true,\n updateMethod = \"patch\",\n buildPath = defaultBuildPath,\n } = options;\n\n const provider: DataProvider = {\n getList<T>(resource: string, params: GetListParams = {}): Promise<OffsetPage<T>> {\n const { pagination, sort, filters } = params;\n const query: Record<string, ParamValue> = {};\n\n if (pagination?.page != null) query[pageParam] = pagination.page;\n if (pagination?.pageSize != null) query[sizeParam] = pagination.pageSize;\n\n if (sort?.field) {\n const order = sort.order ?? \"asc\";\n query[sortFieldParam] = sort.field;\n query[sortOrderParam] = sortOrderAsBoolean ? order === \"asc\" : order;\n }\n\n if (filters) {\n for (const [key, value] of Object.entries(filters)) {\n query[key] = value;\n }\n }\n\n const requestOptions: RequestOptions = { params: query };\n return client.get<OffsetPage<T>>(buildPath(resource), requestOptions);\n },\n\n async getOne<T>(resource: string, id: string | number): Promise<T> {\n return client.get<T>(buildPath(resource, encodeIdSegment(id)));\n },\n\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]> {\n return Promise.all(ids.map((id) => provider.getOne<T>(resource, id)));\n },\n\n create<T>(resource: string, data: unknown): Promise<T> {\n return client.post<T>(buildPath(resource), { body: data });\n },\n\n async update<T>(resource: string, id: string | number, data: unknown): Promise<T> {\n const path = buildPath(resource, encodeIdSegment(id));\n return updateMethod === \"put\"\n ? client.put<T>(path, { body: data })\n : client.patch<T>(path, { body: data });\n },\n\n async deleteOne<T>(resource: string, id: string | number): Promise<T> {\n return client.delete<T>(buildPath(resource, encodeIdSegment(id)));\n },\n };\n\n return provider;\n}\n"],"mappings":"AAwGA,IAAM,EAAoC,IAAI,IAAI,CAAC,GAAI,IAAK,IAAI,CAAC,EA4BjE,SAAgB,EAAgB,EAA6B,CACzD,GAAI,GAAM,KACN,MAAU,UAAU,qBAAqB,OAAO,CAAE,EAAE,2BAA2B,EAEnF,IAAM,EAAM,OAAO,CAAE,EACrB,GAAI,EAAa,IAAI,CAAG,EACpB,MAAU,UACN,qBAAqB,KAAK,UAAU,CAAG,EAAE,0CAC7C,EAEJ,OAAO,mBAAmB,CAAG,CACjC,CAEA,IAAM,GAAoB,EAAkB,IACxC,GAAM,KAAO,IAAI,IAAa,IAAI,EAAS,GAAG,IA2BlD,SAAgB,EACZ,EACA,EAA+B,CAAC,EACpB,CACZ,GAAM,CACF,YAAY,OACZ,YAAY,OACZ,iBAAiB,WACjB,iBAAiB,YACjB,qBAAqB,GACrB,eAAe,QACf,YAAY,GACZ,EAEE,EAAyB,CAC3B,QAAW,EAAkB,EAAwB,CAAC,EAA2B,CAC7E,GAAM,CAAE,aAAY,OAAM,WAAY,EAChC,EAAoC,CAAC,EAK3C,GAHI,GAAY,MAAQ,OAAM,EAAM,GAAa,EAAW,MACxD,GAAY,UAAY,OAAM,EAAM,GAAa,EAAW,UAE5D,GAAM,MAAO,CACb,IAAM,EAAQ,EAAK,OAAS,MAC5B,EAAM,GAAkB,EAAK,MAC7B,EAAM,GAAkB,EAAqB,IAAU,MAAQ,CACnE,CAEA,GAAI,EACA,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,CAAO,EAC7C,EAAM,GAAO,EAIrB,IAAM,EAAiC,CAAE,OAAQ,CAAM,EACvD,OAAO,EAAO,IAAmB,EAAU,CAAQ,EAAG,CAAc,CACxE,EAEA,MAAM,OAAU,EAAkB,EAAiC,CAC/D,OAAO,EAAO,IAAO,EAAU,EAAU,EAAgB,CAAE,CAAC,CAAC,CACjE,EAEA,QAAW,EAAkB,EAAwC,CACjE,OAAO,QAAQ,IAAI,EAAI,IAAK,GAAO,EAAS,OAAU,EAAU,CAAE,CAAC,CAAC,CACxE,EAEA,OAAU,EAAkB,EAA2B,CACnD,OAAO,EAAO,KAAQ,EAAU,CAAQ,EAAG,CAAE,KAAM,CAAK,CAAC,CAC7D,EAEA,MAAM,OAAU,EAAkB,EAAqB,EAA2B,CAC9E,IAAM,EAAO,EAAU,EAAU,EAAgB,CAAE,CAAC,EACpD,OAAO,IAAiB,MAClB,EAAO,IAAO,EAAM,CAAE,KAAM,CAAK,CAAC,EAClC,EAAO,MAAS,EAAM,CAAE,KAAM,CAAK,CAAC,CAC9C,EAEA,MAAM,UAAa,EAAkB,EAAiC,CAClE,OAAO,EAAO,OAAU,EAAU,EAAU,EAAgB,CAAE,CAAC,CAAC,CACpE,CACJ,EAEA,OAAO,CACX"}
1
+ {"version":3,"file":"create-data-provider.cjs","names":["DOT_SEGMENTS","encodeIdSegment","id","raw","defaultBuildPath","resource","createDataProvider","options","provider","params","query","pagination","pageParam","sizeParam","sort","order","sortFieldParam","sortOrderParam","sortOrderAsBoolean","filters","key","value","requestOptions","client","buildPath","ids","data","path","updateMethod"],"sources":["../../src/data/create-data-provider.ts"],"sourcesContent":["import type { ApiClient, RequestOptions } from \"@/http/types\";\nimport type { OffsetPage } from \"@/query/pagination\";\n\n/** Query-param values accepted by the API client for a list request. */\ntype ParamValue = string | number | boolean | undefined | null;\n\n/** Filters passed to {@link DataProvider.getList}, spread verbatim into the query string. */\nexport type DataFilters = Record<string, ParamValue>;\n\n/** Parameters for a paginated, sorted, filtered list request. */\nexport interface GetListParams {\n /** Offset pagination — 1-based `page` and `pageSize`. */\n pagination?: { page?: number; pageSize?: number };\n /** Single-field sort. `order` defaults to `\"asc\"`. */\n sort?: { field: string; order?: \"asc\" | \"desc\" };\n /** Arbitrary filter query params, spread onto the request. */\n filters?: DataFilters;\n}\n\n/**\n * Refine-style data provider over the Tempest FastAPI SDK CRUD/pagination\n * conventions. Implementations are stateless wrappers around an {@link ApiClient}.\n */\nexport interface DataProvider {\n /**\n * Fetch a paginated list of a resource.\n *\n * @param resource - The resource name (e.g. `\"users\"`).\n * @param params - Pagination, sort and filter parameters.\n * @returns The offset-paginated envelope.\n */\n getList<T>(resource: string, params?: GetListParams): Promise<OffsetPage<T>>;\n /**\n * Fetch a single record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The record.\n */\n getOne<T>(resource: string, id: string | number): Promise<T>;\n /**\n * Fetch many records by id (default: parallel {@link DataProvider.getOne}).\n *\n * @param resource - The resource name.\n * @param ids - The record ids.\n * @returns The records, in the same order as `ids`.\n */\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]>;\n /**\n * Create a record.\n *\n * @param resource - The resource name.\n * @param data - The creation payload.\n * @returns The created record.\n */\n create<T>(resource: string, data: unknown): Promise<T>;\n /**\n * Update a record (PATCH by default, PUT when configured).\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param data - The update payload.\n * @returns The updated record.\n */\n update<T>(resource: string, id: string | number, data: unknown): Promise<T>;\n /**\n * Delete a record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The delete response (often the deleted record).\n */\n deleteOne<T>(resource: string, id: string | number): Promise<T>;\n}\n\n/** Options to tailor {@link createDataProvider} to a backend's conventions. */\nexport interface DataProviderOptions {\n /** Query-param name for the page number. Default: `\"page\"`. */\n pageParam?: string;\n /** Query-param name for the page size. Default: `\"size\"`. */\n sizeParam?: string;\n /** Query-param name for the sort field. Default: `\"order_by\"`. */\n sortFieldParam?: string;\n /** Query-param name for the sort order. Default: `\"ascending\"`. */\n sortOrderParam?: string;\n /**\n * When `true` (default), emit the sort order as a boolean\n * (`order:\"asc\"` → `true`). When `false`, emit the literal `\"asc\"`/`\"desc\"`.\n */\n sortOrderAsBoolean?: boolean;\n /** HTTP method used by {@link DataProvider.update}. Default: `\"patch\"`. */\n updateMethod?: \"patch\" | \"put\";\n /**\n * Build the request path for a resource (and optional id).\n * Default: `id == null ? \"/\" + resource : \"/\" + resource + \"/\" + id`.\n *\n * Since 0.77.0 `id` arrives already passed through {@link encodeIdSegment}:\n * percent-encoded as one path segment, and never `\"\"`, `\".\"` or `\"..\"`. An\n * override therefore interpolates it as-is — encoding it again would turn\n * `%2F` into `%252F`.\n */\n buildPath?: (resource: string, id?: string | number) => string;\n}\n\nconst DOT_SEGMENTS: ReadonlySet<string> = new Set([\"\", \".\", \"..\"]);\n\n/**\n * Encode a record id as exactly one URL path segment.\n *\n * The data provider calls this on every id before building a path, because the\n * id is the one part of the URL that may come from outside the app — a search\n * param, a hash, a decoded route param, a value another user stored. Left raw,\n * `\"../../admin/users\"` walks the authenticated request out of the resource,\n * `\"7?role=admin\"` injects query params and `\"7#x\"` truncates the path, all\n * while the request still carries the bearer token (#438).\n *\n * `encodeURIComponent` neutralises `/`, `?`, `#` and `%`. It leaves `.` alone,\n * so `\"\"`, `\".\"` and `\"..\"` are rejected instead: the URL parser resolves them\n * as dot-segments whatever the encoding, and none of them names a record.\n * `null` and `undefined` — what an untyped caller or a not-yet-loaded route\n * param hands over — are rejected too, since `String()` would turn them into\n * the literal segments `\"null\"` and `\"undefined\"`.\n *\n * @param id - The record id, as handed to the provider.\n * @returns The percent-encoded segment, safe to interpolate between two `/`.\n * @throws {TypeError} When the id is `null`, `undefined`, `\"\"`, `\".\"` or `\"..\"`.\n *\n * @example\n * encodeIdSegment(7); // \"7\"\n * encodeIdSegment(\"a/b?x=1\"); // \"a%2Fb%3Fx%3D1\"\n * encodeIdSegment(\"..\"); // throws TypeError\n */\nexport function encodeIdSegment(id: string | number): string {\n if (id == null) {\n throw new TypeError(`Invalid record id ${String(id)}: a record id is required.`);\n }\n const raw = String(id);\n if (DOT_SEGMENTS.has(raw)) {\n throw new TypeError(\n `Invalid record id ${JSON.stringify(raw)}: it would resolve as a path dot-segment.`,\n );\n }\n return encodeURIComponent(raw);\n}\n\nconst defaultBuildPath = (resource: string, id?: string | number): string =>\n id == null ? `/${resource}` : `/${resource}/${id}`;\n\n/**\n * Create a {@link DataProvider} bound to an {@link ApiClient}.\n *\n * Maps Refine-style calls to the Tempest FastAPI SDK conventions: list →\n * `GET /{resource}?page=&size=&order_by=&ascending=&...filters`, one →\n * `GET /{resource}/{id}`, create → `POST`, update → `PATCH`/`PUT`,\n * delete → `DELETE`.\n *\n * Every id goes through {@link encodeIdSegment} before reaching `buildPath`, so\n * an id can never leave its own path segment — not with the default builder,\n * and not with an override that interpolates it.\n *\n * @param client - The HTTP client created by `createApiClient`.\n * @param options - Optional overrides for param names, sort encoding,\n * update method and path building.\n * @returns A stateless data provider.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * const page = await dataProvider.getList<User>(\"users\", {\n * pagination: { page: 1, pageSize: 20 },\n * sort: { field: \"created_at\", order: \"desc\" },\n * filters: { active: true },\n * });\n */\nexport function createDataProvider(\n client: ApiClient,\n options: DataProviderOptions = {},\n): DataProvider {\n const {\n pageParam = \"page\",\n sizeParam = \"size\",\n sortFieldParam = \"order_by\",\n sortOrderParam = \"ascending\",\n sortOrderAsBoolean = true,\n updateMethod = \"patch\",\n buildPath = defaultBuildPath,\n } = options;\n\n const provider: DataProvider = {\n getList<T>(resource: string, params: GetListParams = {}): Promise<OffsetPage<T>> {\n const { pagination, sort, filters } = params;\n const query: Record<string, ParamValue> = {};\n\n if (pagination?.page != null) query[pageParam] = pagination.page;\n if (pagination?.pageSize != null) query[sizeParam] = pagination.pageSize;\n\n if (sort?.field) {\n const order = sort.order ?? \"asc\";\n query[sortFieldParam] = sort.field;\n query[sortOrderParam] = sortOrderAsBoolean ? order === \"asc\" : order;\n }\n\n if (filters) {\n for (const [key, value] of Object.entries(filters)) {\n query[key] = value;\n }\n }\n\n const requestOptions: RequestOptions = { params: query };\n return client.get<OffsetPage<T>>(buildPath(resource), requestOptions);\n },\n\n async getOne<T>(resource: string, id: string | number): Promise<T> {\n return client.get<T>(buildPath(resource, encodeIdSegment(id)));\n },\n\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]> {\n return Promise.all(ids.map((id) => provider.getOne<T>(resource, id)));\n },\n\n create<T>(resource: string, data: unknown): Promise<T> {\n return client.post<T>(buildPath(resource), { body: data });\n },\n\n async update<T>(resource: string, id: string | number, data: unknown): Promise<T> {\n const path = buildPath(resource, encodeIdSegment(id));\n return updateMethod === \"put\"\n ? client.put<T>(path, { body: data })\n : client.patch<T>(path, { body: data });\n },\n\n async deleteOne<T>(resource: string, id: string | number): Promise<T> {\n return client.delete<T>(buildPath(resource, encodeIdSegment(id)));\n },\n };\n\n return provider;\n}\n"],"mappings":"AAwGA,IAAMA,EAAoC,IAAI,IAAI,CAAC,GAAI,IAAK,IAAI,CAAC,EA4BjE,SAAgBC,EAAgB,EAA6B,CACzD,GAAIC,GAAM,KACN,MAAU,UAAU,qBAAqB,OAAOA,CAAE,EAAE,2BAA2B,EAEnF,IAAMC,EAAM,OAAOD,CAAE,EACrB,GAAIF,EAAa,IAAIG,CAAG,EACpB,MAAU,UACN,qBAAqB,KAAK,UAAUA,CAAG,EAAE,0CAC7C,EAEJ,OAAO,mBAAmBA,CAAG,CACjC,CAEA,IAAMC,GAAoB,EAAkB,IACxCF,GAAM,KAAO,IAAIG,IAAa,IAAIA,EAAS,GAAGH,IA2BlD,SAAgBI,EACZ,EACA,EAA+B,CAAC,EACpB,CACZ,GAAM,CACF,YAAY,OACZ,YAAY,OACZ,iBAAiB,WACjB,iBAAiB,YACjB,qBAAqB,GACrB,eAAe,QACf,YAAYF,GACZG,EAEEC,EAAyB,CAC3B,QAAW,EAAkB,EAAwB,CAAC,EAA2B,CAC7E,GAAM,CAAE,aAAY,OAAM,WAAYC,EAChCC,EAAoC,CAAC,EAK3C,GAHIC,GAAY,MAAQ,OAAM,EAAMC,GAAaD,EAAW,MACxDA,GAAY,UAAY,OAAM,EAAME,GAAaF,EAAW,UAE5DG,GAAM,MAAO,CACb,IAAMC,EAAQD,EAAK,OAAS,MAC5B,EAAME,GAAkBF,EAAK,MAC7B,EAAMG,GAAkBC,EAAqBH,IAAU,MAAQA,CACnE,CAEA,GAAII,EACA,IAAK,GAAM,CAACC,EAAKC,KAAU,OAAO,QAAQF,CAAO,EAC7C,EAAMC,GAAOC,EAIrB,IAAMC,EAAiC,CAAE,OAAQZ,CAAM,EACvD,OAAOa,EAAO,IAAmBC,EAAUnB,CAAQ,EAAGiB,CAAc,CACxE,EAEA,MAAM,OAAU,EAAkB,EAAiC,CAC/D,OAAOC,EAAO,IAAOC,EAAUnB,EAAUJ,EAAgBC,CAAE,CAAC,CAAC,CACjE,EAEA,QAAW,EAAkB,EAAwC,CACjE,OAAO,QAAQ,IAAIuB,EAAI,IAAK,GAAOjB,EAAS,OAAUH,EAAUH,CAAE,CAAC,CAAC,CACxE,EAEA,OAAU,EAAkB,EAA2B,CACnD,OAAOqB,EAAO,KAAQC,EAAUnB,CAAQ,EAAG,CAAE,KAAMqB,CAAK,CAAC,CAC7D,EAEA,MAAM,OAAU,EAAkB,EAAqB,EAA2B,CAC9E,IAAMC,EAAOH,EAAUnB,EAAUJ,EAAgBC,CAAE,CAAC,EACpD,OAAO0B,IAAiB,MAClBL,EAAO,IAAOI,EAAM,CAAE,KAAMD,CAAK,CAAC,EAClCH,EAAO,MAASI,EAAM,CAAE,KAAMD,CAAK,CAAC,CAC9C,EAEA,MAAM,UAAa,EAAkB,EAAiC,CAClE,OAAOH,EAAO,OAAUC,EAAUnB,EAAUJ,EAAgBC,CAAE,CAAC,CAAC,CACpE,CACJ,EAEA,OAAOM,CACX,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-data-provider.js","names":[],"sources":["../../src/data/create-data-provider.ts"],"sourcesContent":["import type { ApiClient, RequestOptions } from \"@/http/types\";\nimport type { OffsetPage } from \"@/query/pagination\";\n\n/** Query-param values accepted by the API client for a list request. */\ntype ParamValue = string | number | boolean | undefined | null;\n\n/** Filters passed to {@link DataProvider.getList}, spread verbatim into the query string. */\nexport type DataFilters = Record<string, ParamValue>;\n\n/** Parameters for a paginated, sorted, filtered list request. */\nexport interface GetListParams {\n /** Offset pagination — 1-based `page` and `pageSize`. */\n pagination?: { page?: number; pageSize?: number };\n /** Single-field sort. `order` defaults to `\"asc\"`. */\n sort?: { field: string; order?: \"asc\" | \"desc\" };\n /** Arbitrary filter query params, spread onto the request. */\n filters?: DataFilters;\n}\n\n/**\n * Refine-style data provider over the Tempest FastAPI SDK CRUD/pagination\n * conventions. Implementations are stateless wrappers around an {@link ApiClient}.\n */\nexport interface DataProvider {\n /**\n * Fetch a paginated list of a resource.\n *\n * @param resource - The resource name (e.g. `\"users\"`).\n * @param params - Pagination, sort and filter parameters.\n * @returns The offset-paginated envelope.\n */\n getList<T>(resource: string, params?: GetListParams): Promise<OffsetPage<T>>;\n /**\n * Fetch a single record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The record.\n */\n getOne<T>(resource: string, id: string | number): Promise<T>;\n /**\n * Fetch many records by id (default: parallel {@link DataProvider.getOne}).\n *\n * @param resource - The resource name.\n * @param ids - The record ids.\n * @returns The records, in the same order as `ids`.\n */\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]>;\n /**\n * Create a record.\n *\n * @param resource - The resource name.\n * @param data - The creation payload.\n * @returns The created record.\n */\n create<T>(resource: string, data: unknown): Promise<T>;\n /**\n * Update a record (PATCH by default, PUT when configured).\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param data - The update payload.\n * @returns The updated record.\n */\n update<T>(resource: string, id: string | number, data: unknown): Promise<T>;\n /**\n * Delete a record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The delete response (often the deleted record).\n */\n deleteOne<T>(resource: string, id: string | number): Promise<T>;\n}\n\n/** Options to tailor {@link createDataProvider} to a backend's conventions. */\nexport interface DataProviderOptions {\n /** Query-param name for the page number. Default: `\"page\"`. */\n pageParam?: string;\n /** Query-param name for the page size. Default: `\"size\"`. */\n sizeParam?: string;\n /** Query-param name for the sort field. Default: `\"order_by\"`. */\n sortFieldParam?: string;\n /** Query-param name for the sort order. Default: `\"ascending\"`. */\n sortOrderParam?: string;\n /**\n * When `true` (default), emit the sort order as a boolean\n * (`order:\"asc\"` → `true`). When `false`, emit the literal `\"asc\"`/`\"desc\"`.\n */\n sortOrderAsBoolean?: boolean;\n /** HTTP method used by {@link DataProvider.update}. Default: `\"patch\"`. */\n updateMethod?: \"patch\" | \"put\";\n /**\n * Build the request path for a resource (and optional id).\n * Default: `id == null ? \"/\" + resource : \"/\" + resource + \"/\" + id`.\n *\n * Since 0.77.0 `id` arrives already passed through {@link encodeIdSegment}:\n * percent-encoded as one path segment, and never `\"\"`, `\".\"` or `\"..\"`. An\n * override therefore interpolates it as-is — encoding it again would turn\n * `%2F` into `%252F`.\n */\n buildPath?: (resource: string, id?: string | number) => string;\n}\n\nconst DOT_SEGMENTS: ReadonlySet<string> = new Set([\"\", \".\", \"..\"]);\n\n/**\n * Encode a record id as exactly one URL path segment.\n *\n * The data provider calls this on every id before building a path, because the\n * id is the one part of the URL that may come from outside the app — a search\n * param, a hash, a decoded route param, a value another user stored. Left raw,\n * `\"../../admin/users\"` walks the authenticated request out of the resource,\n * `\"7?role=admin\"` injects query params and `\"7#x\"` truncates the path, all\n * while the request still carries the bearer token (#438).\n *\n * `encodeURIComponent` neutralises `/`, `?`, `#` and `%`. It leaves `.` alone,\n * so `\"\"`, `\".\"` and `\"..\"` are rejected instead: the URL parser resolves them\n * as dot-segments whatever the encoding, and none of them names a record.\n * `null` and `undefined` — what an untyped caller or a not-yet-loaded route\n * param hands over — are rejected too, since `String()` would turn them into\n * the literal segments `\"null\"` and `\"undefined\"`.\n *\n * @param id - The record id, as handed to the provider.\n * @returns The percent-encoded segment, safe to interpolate between two `/`.\n * @throws {TypeError} When the id is `null`, `undefined`, `\"\"`, `\".\"` or `\"..\"`.\n *\n * @example\n * encodeIdSegment(7); // \"7\"\n * encodeIdSegment(\"a/b?x=1\"); // \"a%2Fb%3Fx%3D1\"\n * encodeIdSegment(\"..\"); // throws TypeError\n */\nexport function encodeIdSegment(id: string | number): string {\n if (id == null) {\n throw new TypeError(`Invalid record id ${String(id)}: a record id is required.`);\n }\n const raw = String(id);\n if (DOT_SEGMENTS.has(raw)) {\n throw new TypeError(\n `Invalid record id ${JSON.stringify(raw)}: it would resolve as a path dot-segment.`,\n );\n }\n return encodeURIComponent(raw);\n}\n\nconst defaultBuildPath = (resource: string, id?: string | number): string =>\n id == null ? `/${resource}` : `/${resource}/${id}`;\n\n/**\n * Create a {@link DataProvider} bound to an {@link ApiClient}.\n *\n * Maps Refine-style calls to the Tempest FastAPI SDK conventions: list →\n * `GET /{resource}?page=&size=&order_by=&ascending=&...filters`, one →\n * `GET /{resource}/{id}`, create → `POST`, update → `PATCH`/`PUT`,\n * delete → `DELETE`.\n *\n * Every id goes through {@link encodeIdSegment} before reaching `buildPath`, so\n * an id can never leave its own path segment — not with the default builder,\n * and not with an override that interpolates it.\n *\n * @param client - The HTTP client created by `createApiClient`.\n * @param options - Optional overrides for param names, sort encoding,\n * update method and path building.\n * @returns A stateless data provider.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * const page = await dataProvider.getList<User>(\"users\", {\n * pagination: { page: 1, pageSize: 20 },\n * sort: { field: \"created_at\", order: \"desc\" },\n * filters: { active: true },\n * });\n */\nexport function createDataProvider(\n client: ApiClient,\n options: DataProviderOptions = {},\n): DataProvider {\n const {\n pageParam = \"page\",\n sizeParam = \"size\",\n sortFieldParam = \"order_by\",\n sortOrderParam = \"ascending\",\n sortOrderAsBoolean = true,\n updateMethod = \"patch\",\n buildPath = defaultBuildPath,\n } = options;\n\n const provider: DataProvider = {\n getList<T>(resource: string, params: GetListParams = {}): Promise<OffsetPage<T>> {\n const { pagination, sort, filters } = params;\n const query: Record<string, ParamValue> = {};\n\n if (pagination?.page != null) query[pageParam] = pagination.page;\n if (pagination?.pageSize != null) query[sizeParam] = pagination.pageSize;\n\n if (sort?.field) {\n const order = sort.order ?? \"asc\";\n query[sortFieldParam] = sort.field;\n query[sortOrderParam] = sortOrderAsBoolean ? order === \"asc\" : order;\n }\n\n if (filters) {\n for (const [key, value] of Object.entries(filters)) {\n query[key] = value;\n }\n }\n\n const requestOptions: RequestOptions = { params: query };\n return client.get<OffsetPage<T>>(buildPath(resource), requestOptions);\n },\n\n async getOne<T>(resource: string, id: string | number): Promise<T> {\n return client.get<T>(buildPath(resource, encodeIdSegment(id)));\n },\n\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]> {\n return Promise.all(ids.map((id) => provider.getOne<T>(resource, id)));\n },\n\n create<T>(resource: string, data: unknown): Promise<T> {\n return client.post<T>(buildPath(resource), { body: data });\n },\n\n async update<T>(resource: string, id: string | number, data: unknown): Promise<T> {\n const path = buildPath(resource, encodeIdSegment(id));\n return updateMethod === \"put\"\n ? client.put<T>(path, { body: data })\n : client.patch<T>(path, { body: data });\n },\n\n async deleteOne<T>(resource: string, id: string | number): Promise<T> {\n return client.delete<T>(buildPath(resource, encodeIdSegment(id)));\n },\n };\n\n return provider;\n}\n"],"mappings":";AAwGA,IAAM,oBAAoC,IAAI,IAAI;CAAC;CAAI;CAAK;AAAI,CAAC;AA4BjE,SAAgB,EAAgB,GAA6B;CACzD,IAAI,KAAM,MACN,MAAU,UAAU,qBAAqB,OAAO,CAAE,EAAE,2BAA2B;CAEnF,IAAM,IAAM,OAAO,CAAE;CACrB,IAAI,EAAa,IAAI,CAAG,GACpB,MAAU,UACN,qBAAqB,KAAK,UAAU,CAAG,EAAE,0CAC7C;CAEJ,OAAO,mBAAmB,CAAG;AACjC;AAEA,IAAM,KAAoB,GAAkB,MACxC,KAAM,OAAO,IAAI,MAAa,IAAI,EAAS,GAAG;AA2BlD,SAAgB,EACZ,GACA,IAA+B,CAAC,GACpB;CACZ,IAAM,EACF,eAAY,QACZ,eAAY,QACZ,oBAAiB,YACjB,oBAAiB,aACjB,wBAAqB,IACrB,kBAAe,SACf,eAAY,MACZ,GAEE,IAAyB;EAC3B,QAAW,GAAkB,IAAwB,CAAC,GAA2B;GAC7E,IAAM,EAAE,eAAY,SAAM,eAAY,GAChC,IAAoC,CAAC;GAK3C,IAHI,GAAY,QAAQ,SAAM,EAAM,KAAa,EAAW,OACxD,GAAY,YAAY,SAAM,EAAM,KAAa,EAAW,WAE5D,GAAM,OAAO;IACb,IAAM,IAAQ,EAAK,SAAS;IAE5B,AADA,EAAM,KAAkB,EAAK,OAC7B,EAAM,KAAkB,IAAqB,MAAU,QAAQ;GACnE;GAEA,IAAI,GACA,KAAK,IAAM,CAAC,GAAK,MAAU,OAAO,QAAQ,CAAO,GAC7C,EAAM,KAAO;GAIrB,IAAM,IAAiC,EAAE,QAAQ,EAAM;GACvD,OAAO,EAAO,IAAmB,EAAU,CAAQ,GAAG,CAAc;EACxE;EAEA,MAAM,OAAU,GAAkB,GAAiC;GAC/D,OAAO,EAAO,IAAO,EAAU,GAAU,EAAgB,CAAE,CAAC,CAAC;EACjE;EAEA,QAAW,GAAkB,GAAwC;GACjE,OAAO,QAAQ,IAAI,EAAI,KAAK,MAAO,EAAS,OAAU,GAAU,CAAE,CAAC,CAAC;EACxE;EAEA,OAAU,GAAkB,GAA2B;GACnD,OAAO,EAAO,KAAQ,EAAU,CAAQ,GAAG,EAAE,MAAM,EAAK,CAAC;EAC7D;EAEA,MAAM,OAAU,GAAkB,GAAqB,GAA2B;GAC9E,IAAM,IAAO,EAAU,GAAU,EAAgB,CAAE,CAAC;GACpD,OAAO,MAAiB,QAClB,EAAO,IAAO,GAAM,EAAE,MAAM,EAAK,CAAC,IAClC,EAAO,MAAS,GAAM,EAAE,MAAM,EAAK,CAAC;EAC9C;EAEA,MAAM,UAAa,GAAkB,GAAiC;GAClE,OAAO,EAAO,OAAU,EAAU,GAAU,EAAgB,CAAE,CAAC,CAAC;EACpE;CACJ;CAEA,OAAO;AACX"}
1
+ {"version":3,"file":"create-data-provider.js","names":["DOT_SEGMENTS","encodeIdSegment","id","raw","defaultBuildPath","resource","createDataProvider","options","provider","params","query","pagination","pageParam","sizeParam","sort","order","sortFieldParam","sortOrderParam","sortOrderAsBoolean","filters","key","value","requestOptions","client","buildPath","ids","data","path","updateMethod"],"sources":["../../src/data/create-data-provider.ts"],"sourcesContent":["import type { ApiClient, RequestOptions } from \"@/http/types\";\nimport type { OffsetPage } from \"@/query/pagination\";\n\n/** Query-param values accepted by the API client for a list request. */\ntype ParamValue = string | number | boolean | undefined | null;\n\n/** Filters passed to {@link DataProvider.getList}, spread verbatim into the query string. */\nexport type DataFilters = Record<string, ParamValue>;\n\n/** Parameters for a paginated, sorted, filtered list request. */\nexport interface GetListParams {\n /** Offset pagination — 1-based `page` and `pageSize`. */\n pagination?: { page?: number; pageSize?: number };\n /** Single-field sort. `order` defaults to `\"asc\"`. */\n sort?: { field: string; order?: \"asc\" | \"desc\" };\n /** Arbitrary filter query params, spread onto the request. */\n filters?: DataFilters;\n}\n\n/**\n * Refine-style data provider over the Tempest FastAPI SDK CRUD/pagination\n * conventions. Implementations are stateless wrappers around an {@link ApiClient}.\n */\nexport interface DataProvider {\n /**\n * Fetch a paginated list of a resource.\n *\n * @param resource - The resource name (e.g. `\"users\"`).\n * @param params - Pagination, sort and filter parameters.\n * @returns The offset-paginated envelope.\n */\n getList<T>(resource: string, params?: GetListParams): Promise<OffsetPage<T>>;\n /**\n * Fetch a single record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The record.\n */\n getOne<T>(resource: string, id: string | number): Promise<T>;\n /**\n * Fetch many records by id (default: parallel {@link DataProvider.getOne}).\n *\n * @param resource - The resource name.\n * @param ids - The record ids.\n * @returns The records, in the same order as `ids`.\n */\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]>;\n /**\n * Create a record.\n *\n * @param resource - The resource name.\n * @param data - The creation payload.\n * @returns The created record.\n */\n create<T>(resource: string, data: unknown): Promise<T>;\n /**\n * Update a record (PATCH by default, PUT when configured).\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param data - The update payload.\n * @returns The updated record.\n */\n update<T>(resource: string, id: string | number, data: unknown): Promise<T>;\n /**\n * Delete a record by id.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns The delete response (often the deleted record).\n */\n deleteOne<T>(resource: string, id: string | number): Promise<T>;\n}\n\n/** Options to tailor {@link createDataProvider} to a backend's conventions. */\nexport interface DataProviderOptions {\n /** Query-param name for the page number. Default: `\"page\"`. */\n pageParam?: string;\n /** Query-param name for the page size. Default: `\"size\"`. */\n sizeParam?: string;\n /** Query-param name for the sort field. Default: `\"order_by\"`. */\n sortFieldParam?: string;\n /** Query-param name for the sort order. Default: `\"ascending\"`. */\n sortOrderParam?: string;\n /**\n * When `true` (default), emit the sort order as a boolean\n * (`order:\"asc\"` → `true`). When `false`, emit the literal `\"asc\"`/`\"desc\"`.\n */\n sortOrderAsBoolean?: boolean;\n /** HTTP method used by {@link DataProvider.update}. Default: `\"patch\"`. */\n updateMethod?: \"patch\" | \"put\";\n /**\n * Build the request path for a resource (and optional id).\n * Default: `id == null ? \"/\" + resource : \"/\" + resource + \"/\" + id`.\n *\n * Since 0.77.0 `id` arrives already passed through {@link encodeIdSegment}:\n * percent-encoded as one path segment, and never `\"\"`, `\".\"` or `\"..\"`. An\n * override therefore interpolates it as-is — encoding it again would turn\n * `%2F` into `%252F`.\n */\n buildPath?: (resource: string, id?: string | number) => string;\n}\n\nconst DOT_SEGMENTS: ReadonlySet<string> = new Set([\"\", \".\", \"..\"]);\n\n/**\n * Encode a record id as exactly one URL path segment.\n *\n * The data provider calls this on every id before building a path, because the\n * id is the one part of the URL that may come from outside the app — a search\n * param, a hash, a decoded route param, a value another user stored. Left raw,\n * `\"../../admin/users\"` walks the authenticated request out of the resource,\n * `\"7?role=admin\"` injects query params and `\"7#x\"` truncates the path, all\n * while the request still carries the bearer token (#438).\n *\n * `encodeURIComponent` neutralises `/`, `?`, `#` and `%`. It leaves `.` alone,\n * so `\"\"`, `\".\"` and `\"..\"` are rejected instead: the URL parser resolves them\n * as dot-segments whatever the encoding, and none of them names a record.\n * `null` and `undefined` — what an untyped caller or a not-yet-loaded route\n * param hands over — are rejected too, since `String()` would turn them into\n * the literal segments `\"null\"` and `\"undefined\"`.\n *\n * @param id - The record id, as handed to the provider.\n * @returns The percent-encoded segment, safe to interpolate between two `/`.\n * @throws {TypeError} When the id is `null`, `undefined`, `\"\"`, `\".\"` or `\"..\"`.\n *\n * @example\n * encodeIdSegment(7); // \"7\"\n * encodeIdSegment(\"a/b?x=1\"); // \"a%2Fb%3Fx%3D1\"\n * encodeIdSegment(\"..\"); // throws TypeError\n */\nexport function encodeIdSegment(id: string | number): string {\n if (id == null) {\n throw new TypeError(`Invalid record id ${String(id)}: a record id is required.`);\n }\n const raw = String(id);\n if (DOT_SEGMENTS.has(raw)) {\n throw new TypeError(\n `Invalid record id ${JSON.stringify(raw)}: it would resolve as a path dot-segment.`,\n );\n }\n return encodeURIComponent(raw);\n}\n\nconst defaultBuildPath = (resource: string, id?: string | number): string =>\n id == null ? `/${resource}` : `/${resource}/${id}`;\n\n/**\n * Create a {@link DataProvider} bound to an {@link ApiClient}.\n *\n * Maps Refine-style calls to the Tempest FastAPI SDK conventions: list →\n * `GET /{resource}?page=&size=&order_by=&ascending=&...filters`, one →\n * `GET /{resource}/{id}`, create → `POST`, update → `PATCH`/`PUT`,\n * delete → `DELETE`.\n *\n * Every id goes through {@link encodeIdSegment} before reaching `buildPath`, so\n * an id can never leave its own path segment — not with the default builder,\n * and not with an override that interpolates it.\n *\n * @param client - The HTTP client created by `createApiClient`.\n * @param options - Optional overrides for param names, sort encoding,\n * update method and path building.\n * @returns A stateless data provider.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * const page = await dataProvider.getList<User>(\"users\", {\n * pagination: { page: 1, pageSize: 20 },\n * sort: { field: \"created_at\", order: \"desc\" },\n * filters: { active: true },\n * });\n */\nexport function createDataProvider(\n client: ApiClient,\n options: DataProviderOptions = {},\n): DataProvider {\n const {\n pageParam = \"page\",\n sizeParam = \"size\",\n sortFieldParam = \"order_by\",\n sortOrderParam = \"ascending\",\n sortOrderAsBoolean = true,\n updateMethod = \"patch\",\n buildPath = defaultBuildPath,\n } = options;\n\n const provider: DataProvider = {\n getList<T>(resource: string, params: GetListParams = {}): Promise<OffsetPage<T>> {\n const { pagination, sort, filters } = params;\n const query: Record<string, ParamValue> = {};\n\n if (pagination?.page != null) query[pageParam] = pagination.page;\n if (pagination?.pageSize != null) query[sizeParam] = pagination.pageSize;\n\n if (sort?.field) {\n const order = sort.order ?? \"asc\";\n query[sortFieldParam] = sort.field;\n query[sortOrderParam] = sortOrderAsBoolean ? order === \"asc\" : order;\n }\n\n if (filters) {\n for (const [key, value] of Object.entries(filters)) {\n query[key] = value;\n }\n }\n\n const requestOptions: RequestOptions = { params: query };\n return client.get<OffsetPage<T>>(buildPath(resource), requestOptions);\n },\n\n async getOne<T>(resource: string, id: string | number): Promise<T> {\n return client.get<T>(buildPath(resource, encodeIdSegment(id)));\n },\n\n getMany<T>(resource: string, ids: (string | number)[]): Promise<T[]> {\n return Promise.all(ids.map((id) => provider.getOne<T>(resource, id)));\n },\n\n create<T>(resource: string, data: unknown): Promise<T> {\n return client.post<T>(buildPath(resource), { body: data });\n },\n\n async update<T>(resource: string, id: string | number, data: unknown): Promise<T> {\n const path = buildPath(resource, encodeIdSegment(id));\n return updateMethod === \"put\"\n ? client.put<T>(path, { body: data })\n : client.patch<T>(path, { body: data });\n },\n\n async deleteOne<T>(resource: string, id: string | number): Promise<T> {\n return client.delete<T>(buildPath(resource, encodeIdSegment(id)));\n },\n };\n\n return provider;\n}\n"],"mappings":";AAwGA,IAAMA,oBAAoC,IAAI,IAAI;CAAC;CAAI;CAAK;AAAI,CAAC;AA4BjE,SAAgBC,EAAgB,GAA6B;CACzD,IAAIC,KAAM,MACN,MAAU,UAAU,qBAAqB,OAAOA,CAAE,EAAE,2BAA2B;CAEnF,IAAMC,IAAM,OAAOD,CAAE;CACrB,IAAIF,EAAa,IAAIG,CAAG,GACpB,MAAU,UACN,qBAAqB,KAAK,UAAUA,CAAG,EAAE,0CAC7C;CAEJ,OAAO,mBAAmBA,CAAG;AACjC;AAEA,IAAMC,KAAoB,GAAkB,MACxCF,KAAM,OAAO,IAAIG,MAAa,IAAIA,EAAS,GAAGH;AA2BlD,SAAgBI,EACZ,GACA,IAA+B,CAAC,GACpB;CACZ,IAAM,EACF,eAAY,QACZ,eAAY,QACZ,oBAAiB,YACjB,oBAAiB,aACjB,wBAAqB,IACrB,kBAAe,SACf,eAAYF,MACZG,GAEEC,IAAyB;EAC3B,QAAW,GAAkB,IAAwB,CAAC,GAA2B;GAC7E,IAAM,EAAE,eAAY,SAAM,eAAYC,GAChCC,IAAoC,CAAC;GAK3C,IAHIC,GAAY,QAAQ,SAAM,EAAMC,KAAaD,EAAW,OACxDA,GAAY,YAAY,SAAM,EAAME,KAAaF,EAAW,WAE5DG,GAAM,OAAO;IACb,IAAMC,IAAQD,EAAK,SAAS;IAE5B,AADA,EAAME,KAAkBF,EAAK,OAC7B,EAAMG,KAAkBC,IAAqBH,MAAU,QAAQA;GACnE;GAEA,IAAII,GACA,KAAK,IAAM,CAACC,GAAKC,MAAU,OAAO,QAAQF,CAAO,GAC7C,EAAMC,KAAOC;GAIrB,IAAMC,IAAiC,EAAE,QAAQZ,EAAM;GACvD,OAAOa,EAAO,IAAmBC,EAAUnB,CAAQ,GAAGiB,CAAc;EACxE;EAEA,MAAM,OAAU,GAAkB,GAAiC;GAC/D,OAAOC,EAAO,IAAOC,EAAUnB,GAAUJ,EAAgBC,CAAE,CAAC,CAAC;EACjE;EAEA,QAAW,GAAkB,GAAwC;GACjE,OAAO,QAAQ,IAAIuB,EAAI,KAAK,MAAOjB,EAAS,OAAUH,GAAUH,CAAE,CAAC,CAAC;EACxE;EAEA,OAAU,GAAkB,GAA2B;GACnD,OAAOqB,EAAO,KAAQC,EAAUnB,CAAQ,GAAG,EAAE,MAAMqB,EAAK,CAAC;EAC7D;EAEA,MAAM,OAAU,GAAkB,GAAqB,GAA2B;GAC9E,IAAMC,IAAOH,EAAUnB,GAAUJ,EAAgBC,CAAE,CAAC;GACpD,OAAO0B,MAAiB,QAClBL,EAAO,IAAOI,GAAM,EAAE,MAAMD,EAAK,CAAC,IAClCH,EAAO,MAASI,GAAM,EAAE,MAAMD,EAAK,CAAC;EAC9C;EAEA,MAAM,UAAa,GAAkB,GAAiC;GAClE,OAAOH,EAAO,OAAUC,EAAUnB,GAAUJ,EAAgBC,CAAE,CAAC,CAAC;EACpE;CACJ;CAEA,OAAOM;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-provider-context.cjs","names":[],"sources":["../../src/data/data-provider-context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport type { DataProvider } from \"./create-data-provider\";\n\nconst DataProviderContext = createContext<DataProvider | null>(null);\n\n/** Props for {@link TempestDataProvider}. */\nexport interface TempestDataProviderProps {\n /** The data provider to expose to descendant resource hooks. */\n provider: DataProvider;\n /** The subtree that consumes the provider. */\n children: ReactNode;\n}\n\n/**\n * Inject a {@link DataProvider} into the React tree so the resource hooks\n * (`useList`, `useOne`, `useCreate`, …) can resolve it via {@link useDataProvider}.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * <TempestDataProvider provider={dataProvider}>\n * <App />\n * </TempestDataProvider>\n */\nexport function TempestDataProvider({ provider, children }: TempestDataProviderProps) {\n return <DataProviderContext.Provider value={provider}>{children}</DataProviderContext.Provider>;\n}\n\n/**\n * Read the {@link DataProvider} from context.\n *\n * @returns The data provider supplied to the nearest {@link TempestDataProvider}.\n * @throws {Error} When used outside a {@link TempestDataProvider}.\n */\nexport function useDataProvider(): DataProvider {\n const provider = useContext(DataProviderContext);\n if (!provider) {\n throw new Error(\"useDataProvider must be used within a <TempestDataProvider>\");\n }\n return provider;\n}\n"],"mappings":"sDAKA,IAAM,GAAA,EAAsB,EAAA,cAAA,CAAmC,IAAI,EAoBnE,SAAgB,EAAoB,CAAE,WAAU,YAAsC,CAClF,OAAO,EAAA,EAAA,IAAA,CAAC,EAAoB,SAArB,CAA8B,MAAO,EAAW,UAAuC,CAAA,CAClG,CAQA,SAAgB,GAAgC,CAC5C,IAAM,GAAA,EAAW,EAAA,WAAA,CAAW,CAAmB,EAC/C,GAAI,CAAC,EACD,MAAU,MAAM,6DAA6D,EAEjF,OAAO,CACX"}
1
+ {"version":3,"file":"data-provider-context.cjs","names":["createContext","useContext","react","react_jsx_runtime","DataProviderContext","TempestDataProvider","provider","useDataProvider"],"sources":["../../src/data/data-provider-context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport type { DataProvider } from \"./create-data-provider\";\n\nconst DataProviderContext = createContext<DataProvider | null>(null);\n\n/** Props for {@link TempestDataProvider}. */\nexport interface TempestDataProviderProps {\n /** The data provider to expose to descendant resource hooks. */\n provider: DataProvider;\n /** The subtree that consumes the provider. */\n children: ReactNode;\n}\n\n/**\n * Inject a {@link DataProvider} into the React tree so the resource hooks\n * (`useList`, `useOne`, `useCreate`, …) can resolve it via {@link useDataProvider}.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * <TempestDataProvider provider={dataProvider}>\n * <App />\n * </TempestDataProvider>\n */\nexport function TempestDataProvider({ provider, children }: TempestDataProviderProps) {\n return <DataProviderContext.Provider value={provider}>{children}</DataProviderContext.Provider>;\n}\n\n/**\n * Read the {@link DataProvider} from context.\n *\n * @returns The data provider supplied to the nearest {@link TempestDataProvider}.\n * @throws {Error} When used outside a {@link TempestDataProvider}.\n */\nexport function useDataProvider(): DataProvider {\n const provider = useContext(DataProviderContext);\n if (!provider) {\n throw new Error(\"useDataProvider must be used within a <TempestDataProvider>\");\n }\n return provider;\n}\n"],"mappings":"A,sDAKA,IAAMI,GAAA,EAAsBJ,EAAAA,cAAAA,CAAmC,IAAI,EAoBnE,SAAgBK,EAAoB,CAAE,WAAU,YAAsC,CAClF,OAAO,EAAAF,EAAA,IAAA,CAACC,EAAoB,SAArB,CAA8B,MAAOE,EAAW,UAAuC,CAAA,CAClG,CAQA,SAAgBC,GAAgC,CAC5C,IAAMD,GAAA,EAAWL,EAAAA,WAAAA,CAAWG,CAAmB,EAC/C,GAAI,CAACE,EACD,MAAU,MAAM,6DAA6D,EAEjF,OAAOA,CACX,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-provider-context.js","names":[],"sources":["../../src/data/data-provider-context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport type { DataProvider } from \"./create-data-provider\";\n\nconst DataProviderContext = createContext<DataProvider | null>(null);\n\n/** Props for {@link TempestDataProvider}. */\nexport interface TempestDataProviderProps {\n /** The data provider to expose to descendant resource hooks. */\n provider: DataProvider;\n /** The subtree that consumes the provider. */\n children: ReactNode;\n}\n\n/**\n * Inject a {@link DataProvider} into the React tree so the resource hooks\n * (`useList`, `useOne`, `useCreate`, …) can resolve it via {@link useDataProvider}.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * <TempestDataProvider provider={dataProvider}>\n * <App />\n * </TempestDataProvider>\n */\nexport function TempestDataProvider({ provider, children }: TempestDataProviderProps) {\n return <DataProviderContext.Provider value={provider}>{children}</DataProviderContext.Provider>;\n}\n\n/**\n * Read the {@link DataProvider} from context.\n *\n * @returns The data provider supplied to the nearest {@link TempestDataProvider}.\n * @throws {Error} When used outside a {@link TempestDataProvider}.\n */\nexport function useDataProvider(): DataProvider {\n const provider = useContext(DataProviderContext);\n if (!provider) {\n throw new Error(\"useDataProvider must be used within a <TempestDataProvider>\");\n }\n return provider;\n}\n"],"mappings":";;;AAKA,IAAM,IAAsB,EAAmC,IAAI;AAoBnE,SAAgB,EAAoB,EAAE,aAAU,eAAsC;CAClF,OAAO,kBAAC,EAAoB,UAArB;EAA8B,OAAO;EAAW;CAAuC,CAAA;AAClG;AAQA,SAAgB,IAAgC;CAC5C,IAAM,IAAW,EAAW,CAAmB;CAC/C,IAAI,CAAC,GACD,MAAU,MAAM,6DAA6D;CAEjF,OAAO;AACX"}
1
+ {"version":3,"file":"data-provider-context.js","names":["DataProviderContext","createContext","TempestDataProvider","provider","useDataProvider","useContext"],"sources":["../../src/data/data-provider-context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport type { DataProvider } from \"./create-data-provider\";\n\nconst DataProviderContext = createContext<DataProvider | null>(null);\n\n/** Props for {@link TempestDataProvider}. */\nexport interface TempestDataProviderProps {\n /** The data provider to expose to descendant resource hooks. */\n provider: DataProvider;\n /** The subtree that consumes the provider. */\n children: ReactNode;\n}\n\n/**\n * Inject a {@link DataProvider} into the React tree so the resource hooks\n * (`useList`, `useOne`, `useCreate`, …) can resolve it via {@link useDataProvider}.\n *\n * @example\n * const dataProvider = createDataProvider(apiClient);\n * <TempestDataProvider provider={dataProvider}>\n * <App />\n * </TempestDataProvider>\n */\nexport function TempestDataProvider({ provider, children }: TempestDataProviderProps) {\n return <DataProviderContext.Provider value={provider}>{children}</DataProviderContext.Provider>;\n}\n\n/**\n * Read the {@link DataProvider} from context.\n *\n * @returns The data provider supplied to the nearest {@link TempestDataProvider}.\n * @throws {Error} When used outside a {@link TempestDataProvider}.\n */\nexport function useDataProvider(): DataProvider {\n const provider = useContext(DataProviderContext);\n if (!provider) {\n throw new Error(\"useDataProvider must be used within a <TempestDataProvider>\");\n }\n return provider;\n}\n"],"mappings":";;;AAKA,IAAMA,IAAsBC,EAAmC,IAAI;AAoBnE,SAAgBC,EAAoB,EAAE,aAAU,eAAsC;CAClF,OAAO,kBAACF,EAAoB,UAArB;EAA8B,OAAOG;EAAW;CAAuC,CAAA;AAClG;AAQA,SAAgBC,IAAgC;CAC5C,IAAMD,IAAWE,EAAWL,CAAmB;CAC/C,IAAI,CAACG,GACD,MAAU,MAAM,6DAA6D;CAEjF,OAAOA;AACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-resource.cjs","names":[],"sources":["../../src/data/use-resource.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type {\n UseMutationOptions,\n UseMutationResult,\n UseQueryOptions,\n UseQueryResult,\n} from \"@tanstack/react-query\";\n\nimport type { OffsetPage } from \"@/query/pagination\";\n\nimport type { GetListParams } from \"./create-data-provider\";\nimport { useDataProvider } from \"./data-provider-context\";\n\n/** Extra TanStack Query options for {@link useList} (key + fn are provided). */\nexport type UseListOptions<T> = Omit<\n UseQueryOptions<OffsetPage<T>, Error, OffsetPage<T>>,\n \"queryKey\" | \"queryFn\"\n>;\n\n/** Extra TanStack Query options for {@link useOne} (key + fn + enabled are provided). */\nexport type UseOneOptions<T> = Omit<\n UseQueryOptions<T, Error, T>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> & { enabled?: boolean };\n\n/**\n * Build the cache key for a resource list query.\n *\n * @param resource - The resource name.\n * @param params - The list params (page/sort/filters).\n * @returns A stable TanStack Query key.\n */\nexport function listQueryKey(resource: string, params?: GetListParams): unknown[] {\n return [\"data\", resource, \"list\", params];\n}\n\n/**\n * Build the cache key for a single-record query.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns A stable TanStack Query key.\n */\nexport function oneQueryKey(resource: string, id: string | number | null | undefined): unknown[] {\n return [\"data\", resource, \"one\", id];\n}\n\n/**\n * Query a paginated list of a resource through the active {@link useDataProvider}.\n *\n * @param resource - The resource name.\n * @param params - Pagination, sort and filter parameters.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the offset page.\n */\nexport function useList<T>(\n resource: string,\n params?: GetListParams,\n options?: UseListOptions<T>,\n): UseQueryResult<OffsetPage<T>, Error> {\n const provider = useDataProvider();\n return useQuery<OffsetPage<T>, Error>({\n queryKey: listQueryKey(resource, params),\n queryFn: () => provider.getList<T>(resource, params),\n ...options,\n });\n}\n\n/**\n * Query a single record by id through the active {@link useDataProvider}.\n *\n * The query is disabled while `id` is `null`/`undefined`.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the record.\n */\nexport function useOne<T>(\n resource: string,\n id: string | number | null | undefined,\n options?: UseOneOptions<T>,\n): UseQueryResult<T, Error> {\n const provider = useDataProvider();\n const { enabled, ...rest } = options ?? {};\n return useQuery<T, Error>({\n queryKey: oneQueryKey(resource, id),\n queryFn: () => provider.getOne<T>(resource, id as string | number),\n enabled: id != null && (enabled ?? true),\n ...rest,\n });\n}\n\n/** Options for the create mutation (mutationFn + onSuccess are provided). */\nexport type UseCreateOptions<T> = Omit<UseMutationOptions<T, Error, unknown>, \"mutationFn\">;\n\n/**\n * Create a record and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(data)` creates the record.\n */\nexport function useCreate<T>(\n resource: string,\n options?: UseCreateOptions<T>,\n): UseMutationResult<T, Error, unknown> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, unknown>({\n mutationFn: (data: unknown) => provider.create<T>(resource, data),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Variables accepted by the update mutation. */\nexport interface UpdateVariables {\n /** The record id to update. */\n id: string | number;\n /** The update payload. */\n data: unknown;\n}\n\n/** Options for the update mutation (mutationFn + onSuccess are provided). */\nexport type UseUpdateOptions<T> = Omit<UseMutationOptions<T, Error, UpdateVariables>, \"mutationFn\">;\n\n/**\n * Update a record and invalidate both the list and the single-record caches.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate({ id, data })` updates the record.\n */\nexport function useUpdate<T>(\n resource: string,\n options?: UseUpdateOptions<T>,\n): UseMutationResult<T, Error, UpdateVariables> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, UpdateVariables>({\n mutationFn: ({ id, data }: UpdateVariables) => provider.update<T>(resource, id, data),\n onSuccess: (...args) => {\n const [, variables] = args;\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n void queryClient.invalidateQueries({ queryKey: oneQueryKey(resource, variables.id) });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Options for the delete mutation (mutationFn + onSuccess are provided). */\nexport type UseDeleteOptions<T> = Omit<UseMutationOptions<T, Error, string | number>, \"mutationFn\">;\n\n/**\n * Delete a record by id and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(id)` deletes the record.\n */\nexport function useDelete<T>(\n resource: string,\n options?: UseDeleteOptions<T>,\n): UseMutationResult<T, Error, string | number> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, string | number>({\n mutationFn: (id: string | number) => provider.deleteOne<T>(resource, id),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n"],"mappings":"sFAgCA,SAAgB,EAAa,EAAkB,EAAmC,CAC9E,MAAO,CAAC,OAAQ,EAAU,OAAQ,CAAM,CAC5C,CASA,SAAgB,EAAY,EAAkB,EAAmD,CAC7F,MAAO,CAAC,OAAQ,EAAU,MAAO,CAAE,CACvC,CAUA,SAAgB,EACZ,EACA,EACA,EACoC,CACpC,IAAM,EAAW,EAAA,gBAAgB,EACjC,OAAA,EAAO,EAAA,SAAA,CAA+B,CAClC,SAAU,EAAa,EAAU,CAAM,EACvC,YAAe,EAAS,QAAW,EAAU,CAAM,EACnD,GAAG,CACP,CAAC,CACL,CAYA,SAAgB,EACZ,EACA,EACA,EACwB,CACxB,IAAM,EAAW,EAAA,gBAAgB,EAC3B,CAAE,UAAS,GAAG,GAAS,GAAW,CAAC,EACzC,OAAA,EAAO,EAAA,SAAA,CAAmB,CACtB,SAAU,EAAY,EAAU,CAAE,EAClC,YAAe,EAAS,OAAU,EAAU,CAAqB,EACjE,QAAS,GAAM,OAAS,GAAW,IACnC,GAAG,CACP,CAAC,CACL,CAYA,SAAgB,EACZ,EACA,EACoC,CACpC,IAAM,EAAW,EAAA,gBAAgB,EAC3B,GAAA,EAAc,EAAA,eAAA,CAAe,EACnC,OAAA,EAAO,EAAA,YAAA,CAA+B,CAClC,WAAa,GAAkB,EAAS,OAAU,EAAU,CAAI,EAChE,WAAY,GAAG,IAAS,CACpB,EAAiB,kBAAkB,CAAE,SAAU,CAAC,OAAQ,EAAU,MAAM,CAAE,CAAC,EAC3E,GAAS,YAAY,GAAG,CAAI,CAChC,EACA,GAAG,CACP,CAAC,CACL,CAoBA,SAAgB,EACZ,EACA,EAC4C,CAC5C,IAAM,EAAW,EAAA,gBAAgB,EAC3B,GAAA,EAAc,EAAA,eAAA,CAAe,EACnC,OAAA,EAAO,EAAA,YAAA,CAAuC,CAC1C,YAAa,CAAE,KAAI,UAA4B,EAAS,OAAU,EAAU,EAAI,CAAI,EACpF,WAAY,GAAG,IAAS,CACpB,GAAM,EAAG,GAAa,EACtB,EAAiB,kBAAkB,CAAE,SAAU,CAAC,OAAQ,EAAU,MAAM,CAAE,CAAC,EAC3E,EAAiB,kBAAkB,CAAE,SAAU,EAAY,EAAU,EAAU,EAAE,CAAE,CAAC,EACpF,GAAS,YAAY,GAAG,CAAI,CAChC,EACA,GAAG,CACP,CAAC,CACL,CAYA,SAAgB,EACZ,EACA,EAC4C,CAC5C,IAAM,EAAW,EAAA,gBAAgB,EAC3B,GAAA,EAAc,EAAA,eAAA,CAAe,EACnC,OAAA,EAAO,EAAA,YAAA,CAAuC,CAC1C,WAAa,GAAwB,EAAS,UAAa,EAAU,CAAE,EACvE,WAAY,GAAG,IAAS,CACpB,EAAiB,kBAAkB,CAAE,SAAU,CAAC,OAAQ,EAAU,MAAM,CAAE,CAAC,EAC3E,GAAS,YAAY,GAAG,CAAI,CAChC,EACA,GAAG,CACP,CAAC,CACL"}
1
+ {"version":3,"file":"use-resource.cjs","names":["useDataProvider","useQuery","useQueryClient","useMutation","require_data_provider_context","_tanstack_react_query","listQueryKey","resource","params","oneQueryKey","id","useList","provider","options","useOne","rest","enabled","useCreate","queryClient","data","args","useUpdate","variables","useDelete"],"sources":["../../src/data/use-resource.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type {\n UseMutationOptions,\n UseMutationResult,\n UseQueryOptions,\n UseQueryResult,\n} from \"@tanstack/react-query\";\n\nimport type { OffsetPage } from \"@/query/pagination\";\n\nimport type { GetListParams } from \"./create-data-provider\";\nimport { useDataProvider } from \"./data-provider-context\";\n\n/** Extra TanStack Query options for {@link useList} (key + fn are provided). */\nexport type UseListOptions<T> = Omit<\n UseQueryOptions<OffsetPage<T>, Error, OffsetPage<T>>,\n \"queryKey\" | \"queryFn\"\n>;\n\n/** Extra TanStack Query options for {@link useOne} (key + fn + enabled are provided). */\nexport type UseOneOptions<T> = Omit<\n UseQueryOptions<T, Error, T>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> & { enabled?: boolean };\n\n/**\n * Build the cache key for a resource list query.\n *\n * @param resource - The resource name.\n * @param params - The list params (page/sort/filters).\n * @returns A stable TanStack Query key.\n */\nexport function listQueryKey(resource: string, params?: GetListParams): unknown[] {\n return [\"data\", resource, \"list\", params];\n}\n\n/**\n * Build the cache key for a single-record query.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns A stable TanStack Query key.\n */\nexport function oneQueryKey(resource: string, id: string | number | null | undefined): unknown[] {\n return [\"data\", resource, \"one\", id];\n}\n\n/**\n * Query a paginated list of a resource through the active {@link useDataProvider}.\n *\n * @param resource - The resource name.\n * @param params - Pagination, sort and filter parameters.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the offset page.\n */\nexport function useList<T>(\n resource: string,\n params?: GetListParams,\n options?: UseListOptions<T>,\n): UseQueryResult<OffsetPage<T>, Error> {\n const provider = useDataProvider();\n return useQuery<OffsetPage<T>, Error>({\n queryKey: listQueryKey(resource, params),\n queryFn: () => provider.getList<T>(resource, params),\n ...options,\n });\n}\n\n/**\n * Query a single record by id through the active {@link useDataProvider}.\n *\n * The query is disabled while `id` is `null`/`undefined`.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the record.\n */\nexport function useOne<T>(\n resource: string,\n id: string | number | null | undefined,\n options?: UseOneOptions<T>,\n): UseQueryResult<T, Error> {\n const provider = useDataProvider();\n const { enabled, ...rest } = options ?? {};\n return useQuery<T, Error>({\n queryKey: oneQueryKey(resource, id),\n queryFn: () => provider.getOne<T>(resource, id as string | number),\n enabled: id != null && (enabled ?? true),\n ...rest,\n });\n}\n\n/** Options for the create mutation (mutationFn + onSuccess are provided). */\nexport type UseCreateOptions<T> = Omit<UseMutationOptions<T, Error, unknown>, \"mutationFn\">;\n\n/**\n * Create a record and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(data)` creates the record.\n */\nexport function useCreate<T>(\n resource: string,\n options?: UseCreateOptions<T>,\n): UseMutationResult<T, Error, unknown> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, unknown>({\n mutationFn: (data: unknown) => provider.create<T>(resource, data),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Variables accepted by the update mutation. */\nexport interface UpdateVariables {\n /** The record id to update. */\n id: string | number;\n /** The update payload. */\n data: unknown;\n}\n\n/** Options for the update mutation (mutationFn + onSuccess are provided). */\nexport type UseUpdateOptions<T> = Omit<UseMutationOptions<T, Error, UpdateVariables>, \"mutationFn\">;\n\n/**\n * Update a record and invalidate both the list and the single-record caches.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate({ id, data })` updates the record.\n */\nexport function useUpdate<T>(\n resource: string,\n options?: UseUpdateOptions<T>,\n): UseMutationResult<T, Error, UpdateVariables> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, UpdateVariables>({\n mutationFn: ({ id, data }: UpdateVariables) => provider.update<T>(resource, id, data),\n onSuccess: (...args) => {\n const [, variables] = args;\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n void queryClient.invalidateQueries({ queryKey: oneQueryKey(resource, variables.id) });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Options for the delete mutation (mutationFn + onSuccess are provided). */\nexport type UseDeleteOptions<T> = Omit<UseMutationOptions<T, Error, string | number>, \"mutationFn\">;\n\n/**\n * Delete a record by id and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(id)` deletes the record.\n */\nexport function useDelete<T>(\n resource: string,\n options?: UseDeleteOptions<T>,\n): UseMutationResult<T, Error, string | number> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, string | number>({\n mutationFn: (id: string | number) => provider.deleteOne<T>(resource, id),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n"],"mappings":"A,sFAgCA,SAAgBM,EAAa,EAAkB,EAAmC,CAC9E,MAAO,CAAC,OAAQC,EAAU,OAAQC,CAAM,CAC5C,CASA,SAAgBC,EAAY,EAAkB,EAAmD,CAC7F,MAAO,CAAC,OAAQF,EAAU,MAAOG,CAAE,CACvC,CAUA,SAAgBC,EACZ,EACA,EACA,EACoC,CACpC,IAAMC,EAAWZ,EAAAA,gBAAgB,EACjC,OAAA,EAAOC,EAAAA,SAAAA,CAA+B,CAClC,SAAUK,EAAaC,EAAUC,CAAM,EACvC,YAAeI,EAAS,QAAWL,EAAUC,CAAM,EACnD,GAAGK,CACP,CAAC,CACL,CAYA,SAAgBC,EACZ,EACA,EACA,EACwB,CACxB,IAAMF,EAAWZ,EAAAA,gBAAgB,EAC3B,CAAE,UAAS,GAAGe,GAASF,GAAW,CAAC,EACzC,OAAA,EAAOZ,EAAAA,SAAAA,CAAmB,CACtB,SAAUQ,EAAYF,EAAUG,CAAE,EAClC,YAAeE,EAAS,OAAUL,EAAUG,CAAqB,EACjE,QAASA,GAAM,OAASM,GAAW,IACnC,GAAGD,CACP,CAAC,CACL,CAYA,SAAgBE,EACZ,EACA,EACoC,CACpC,IAAML,EAAWZ,EAAAA,gBAAgB,EAC3BkB,GAAA,EAAchB,EAAAA,eAAAA,CAAe,EACnC,OAAA,EAAOC,EAAAA,YAAAA,CAA+B,CAClC,WAAa,GAAkBS,EAAS,OAAUL,EAAUY,CAAI,EAChE,WAAY,GAAGC,IAAS,CACpBF,EAAiB,kBAAkB,CAAE,SAAU,CAAC,OAAQX,EAAU,MAAM,CAAE,CAAC,EAC3EM,GAAS,YAAY,GAAGO,CAAI,CAChC,EACA,GAAGP,CACP,CAAC,CACL,CAoBA,SAAgBQ,EACZ,EACA,EAC4C,CAC5C,IAAMT,EAAWZ,EAAAA,gBAAgB,EAC3BkB,GAAA,EAAchB,EAAAA,eAAAA,CAAe,EACnC,OAAA,EAAOC,EAAAA,YAAAA,CAAuC,CAC1C,YAAa,CAAE,KAAI,UAA4BS,EAAS,OAAUL,EAAUG,EAAIS,CAAI,EACpF,WAAY,GAAGC,IAAS,CACpB,GAAM,EAAGE,GAAaF,EACtBF,EAAiB,kBAAkB,CAAE,SAAU,CAAC,OAAQX,EAAU,MAAM,CAAE,CAAC,EAC3EW,EAAiB,kBAAkB,CAAE,SAAUT,EAAYF,EAAUe,EAAU,EAAE,CAAE,CAAC,EACpFT,GAAS,YAAY,GAAGO,CAAI,CAChC,EACA,GAAGP,CACP,CAAC,CACL,CAYA,SAAgBU,EACZ,EACA,EAC4C,CAC5C,IAAMX,EAAWZ,EAAAA,gBAAgB,EAC3BkB,GAAA,EAAchB,EAAAA,eAAAA,CAAe,EACnC,OAAA,EAAOC,EAAAA,YAAAA,CAAuC,CAC1C,WAAa,GAAwBS,EAAS,UAAaL,EAAUG,CAAE,EACvE,WAAY,GAAGU,IAAS,CACpBF,EAAiB,kBAAkB,CAAE,SAAU,CAAC,OAAQX,EAAU,MAAM,CAAE,CAAC,EAC3EM,GAAS,YAAY,GAAGO,CAAI,CAChC,EACA,GAAGP,CACP,CAAC,CACL,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-resource.js","names":[],"sources":["../../src/data/use-resource.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type {\n UseMutationOptions,\n UseMutationResult,\n UseQueryOptions,\n UseQueryResult,\n} from \"@tanstack/react-query\";\n\nimport type { OffsetPage } from \"@/query/pagination\";\n\nimport type { GetListParams } from \"./create-data-provider\";\nimport { useDataProvider } from \"./data-provider-context\";\n\n/** Extra TanStack Query options for {@link useList} (key + fn are provided). */\nexport type UseListOptions<T> = Omit<\n UseQueryOptions<OffsetPage<T>, Error, OffsetPage<T>>,\n \"queryKey\" | \"queryFn\"\n>;\n\n/** Extra TanStack Query options for {@link useOne} (key + fn + enabled are provided). */\nexport type UseOneOptions<T> = Omit<\n UseQueryOptions<T, Error, T>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> & { enabled?: boolean };\n\n/**\n * Build the cache key for a resource list query.\n *\n * @param resource - The resource name.\n * @param params - The list params (page/sort/filters).\n * @returns A stable TanStack Query key.\n */\nexport function listQueryKey(resource: string, params?: GetListParams): unknown[] {\n return [\"data\", resource, \"list\", params];\n}\n\n/**\n * Build the cache key for a single-record query.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns A stable TanStack Query key.\n */\nexport function oneQueryKey(resource: string, id: string | number | null | undefined): unknown[] {\n return [\"data\", resource, \"one\", id];\n}\n\n/**\n * Query a paginated list of a resource through the active {@link useDataProvider}.\n *\n * @param resource - The resource name.\n * @param params - Pagination, sort and filter parameters.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the offset page.\n */\nexport function useList<T>(\n resource: string,\n params?: GetListParams,\n options?: UseListOptions<T>,\n): UseQueryResult<OffsetPage<T>, Error> {\n const provider = useDataProvider();\n return useQuery<OffsetPage<T>, Error>({\n queryKey: listQueryKey(resource, params),\n queryFn: () => provider.getList<T>(resource, params),\n ...options,\n });\n}\n\n/**\n * Query a single record by id through the active {@link useDataProvider}.\n *\n * The query is disabled while `id` is `null`/`undefined`.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the record.\n */\nexport function useOne<T>(\n resource: string,\n id: string | number | null | undefined,\n options?: UseOneOptions<T>,\n): UseQueryResult<T, Error> {\n const provider = useDataProvider();\n const { enabled, ...rest } = options ?? {};\n return useQuery<T, Error>({\n queryKey: oneQueryKey(resource, id),\n queryFn: () => provider.getOne<T>(resource, id as string | number),\n enabled: id != null && (enabled ?? true),\n ...rest,\n });\n}\n\n/** Options for the create mutation (mutationFn + onSuccess are provided). */\nexport type UseCreateOptions<T> = Omit<UseMutationOptions<T, Error, unknown>, \"mutationFn\">;\n\n/**\n * Create a record and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(data)` creates the record.\n */\nexport function useCreate<T>(\n resource: string,\n options?: UseCreateOptions<T>,\n): UseMutationResult<T, Error, unknown> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, unknown>({\n mutationFn: (data: unknown) => provider.create<T>(resource, data),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Variables accepted by the update mutation. */\nexport interface UpdateVariables {\n /** The record id to update. */\n id: string | number;\n /** The update payload. */\n data: unknown;\n}\n\n/** Options for the update mutation (mutationFn + onSuccess are provided). */\nexport type UseUpdateOptions<T> = Omit<UseMutationOptions<T, Error, UpdateVariables>, \"mutationFn\">;\n\n/**\n * Update a record and invalidate both the list and the single-record caches.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate({ id, data })` updates the record.\n */\nexport function useUpdate<T>(\n resource: string,\n options?: UseUpdateOptions<T>,\n): UseMutationResult<T, Error, UpdateVariables> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, UpdateVariables>({\n mutationFn: ({ id, data }: UpdateVariables) => provider.update<T>(resource, id, data),\n onSuccess: (...args) => {\n const [, variables] = args;\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n void queryClient.invalidateQueries({ queryKey: oneQueryKey(resource, variables.id) });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Options for the delete mutation (mutationFn + onSuccess are provided). */\nexport type UseDeleteOptions<T> = Omit<UseMutationOptions<T, Error, string | number>, \"mutationFn\">;\n\n/**\n * Delete a record by id and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(id)` deletes the record.\n */\nexport function useDelete<T>(\n resource: string,\n options?: UseDeleteOptions<T>,\n): UseMutationResult<T, Error, string | number> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, string | number>({\n mutationFn: (id: string | number) => provider.deleteOne<T>(resource, id),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n"],"mappings":";;;AAgCA,SAAgB,EAAa,GAAkB,GAAmC;CAC9E,OAAO;EAAC;EAAQ;EAAU;EAAQ;CAAM;AAC5C;AASA,SAAgB,EAAY,GAAkB,GAAmD;CAC7F,OAAO;EAAC;EAAQ;EAAU;EAAO;CAAE;AACvC;AAUA,SAAgB,EACZ,GACA,GACA,GACoC;CACpC,IAAM,IAAW,EAAgB;CACjC,OAAO,EAA+B;EAClC,UAAU,EAAa,GAAU,CAAM;EACvC,eAAe,EAAS,QAAW,GAAU,CAAM;EACnD,GAAG;CACP,CAAC;AACL;AAYA,SAAgB,EACZ,GACA,GACA,GACwB;CACxB,IAAM,IAAW,EAAgB,GAC3B,EAAE,YAAS,GAAG,MAAS,KAAW,CAAC;CACzC,OAAO,EAAmB;EACtB,UAAU,EAAY,GAAU,CAAE;EAClC,eAAe,EAAS,OAAU,GAAU,CAAqB;EACjE,SAAS,KAAM,SAAS,KAAW;EACnC,GAAG;CACP,CAAC;AACL;AAYA,SAAgB,EACZ,GACA,GACoC;CACpC,IAAM,IAAW,EAAgB,GAC3B,IAAc,EAAe;CACnC,OAAO,EAA+B;EAClC,aAAa,MAAkB,EAAS,OAAU,GAAU,CAAI;EAChE,YAAY,GAAG,MAAS;GAEpB,AADA,EAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAQ;IAAU;GAAM,EAAE,CAAC,GAC3E,GAAS,YAAY,GAAG,CAAI;EAChC;EACA,GAAG;CACP,CAAC;AACL;AAoBA,SAAgB,EACZ,GACA,GAC4C;CAC5C,IAAM,IAAW,EAAgB,GAC3B,IAAc,EAAe;CACnC,OAAO,EAAuC;EAC1C,aAAa,EAAE,OAAI,cAA4B,EAAS,OAAU,GAAU,GAAI,CAAI;EACpF,YAAY,GAAG,MAAS;GACpB,IAAM,GAAG,KAAa;GAGtB,AAFA,EAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAQ;IAAU;GAAM,EAAE,CAAC,GAC3E,EAAiB,kBAAkB,EAAE,UAAU,EAAY,GAAU,EAAU,EAAE,EAAE,CAAC,GACpF,GAAS,YAAY,GAAG,CAAI;EAChC;EACA,GAAG;CACP,CAAC;AACL;AAYA,SAAgB,EACZ,GACA,GAC4C;CAC5C,IAAM,IAAW,EAAgB,GAC3B,IAAc,EAAe;CACnC,OAAO,EAAuC;EAC1C,aAAa,MAAwB,EAAS,UAAa,GAAU,CAAE;EACvE,YAAY,GAAG,MAAS;GAEpB,AADA,EAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAQ;IAAU;GAAM,EAAE,CAAC,GAC3E,GAAS,YAAY,GAAG,CAAI;EAChC;EACA,GAAG;CACP,CAAC;AACL"}
1
+ {"version":3,"file":"use-resource.js","names":["listQueryKey","resource","params","oneQueryKey","id","useList","provider","useDataProvider","useQuery","options","useOne","rest","enabled","useCreate","queryClient","useQueryClient","useMutation","data","args","useUpdate","variables","useDelete"],"sources":["../../src/data/use-resource.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type {\n UseMutationOptions,\n UseMutationResult,\n UseQueryOptions,\n UseQueryResult,\n} from \"@tanstack/react-query\";\n\nimport type { OffsetPage } from \"@/query/pagination\";\n\nimport type { GetListParams } from \"./create-data-provider\";\nimport { useDataProvider } from \"./data-provider-context\";\n\n/** Extra TanStack Query options for {@link useList} (key + fn are provided). */\nexport type UseListOptions<T> = Omit<\n UseQueryOptions<OffsetPage<T>, Error, OffsetPage<T>>,\n \"queryKey\" | \"queryFn\"\n>;\n\n/** Extra TanStack Query options for {@link useOne} (key + fn + enabled are provided). */\nexport type UseOneOptions<T> = Omit<\n UseQueryOptions<T, Error, T>,\n \"queryKey\" | \"queryFn\" | \"enabled\"\n> & { enabled?: boolean };\n\n/**\n * Build the cache key for a resource list query.\n *\n * @param resource - The resource name.\n * @param params - The list params (page/sort/filters).\n * @returns A stable TanStack Query key.\n */\nexport function listQueryKey(resource: string, params?: GetListParams): unknown[] {\n return [\"data\", resource, \"list\", params];\n}\n\n/**\n * Build the cache key for a single-record query.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @returns A stable TanStack Query key.\n */\nexport function oneQueryKey(resource: string, id: string | number | null | undefined): unknown[] {\n return [\"data\", resource, \"one\", id];\n}\n\n/**\n * Query a paginated list of a resource through the active {@link useDataProvider}.\n *\n * @param resource - The resource name.\n * @param params - Pagination, sort and filter parameters.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the offset page.\n */\nexport function useList<T>(\n resource: string,\n params?: GetListParams,\n options?: UseListOptions<T>,\n): UseQueryResult<OffsetPage<T>, Error> {\n const provider = useDataProvider();\n return useQuery<OffsetPage<T>, Error>({\n queryKey: listQueryKey(resource, params),\n queryFn: () => provider.getList<T>(resource, params),\n ...options,\n });\n}\n\n/**\n * Query a single record by id through the active {@link useDataProvider}.\n *\n * The query is disabled while `id` is `null`/`undefined`.\n *\n * @param resource - The resource name.\n * @param id - The record id.\n * @param options - Extra TanStack Query options.\n * @returns The TanStack Query result for the record.\n */\nexport function useOne<T>(\n resource: string,\n id: string | number | null | undefined,\n options?: UseOneOptions<T>,\n): UseQueryResult<T, Error> {\n const provider = useDataProvider();\n const { enabled, ...rest } = options ?? {};\n return useQuery<T, Error>({\n queryKey: oneQueryKey(resource, id),\n queryFn: () => provider.getOne<T>(resource, id as string | number),\n enabled: id != null && (enabled ?? true),\n ...rest,\n });\n}\n\n/** Options for the create mutation (mutationFn + onSuccess are provided). */\nexport type UseCreateOptions<T> = Omit<UseMutationOptions<T, Error, unknown>, \"mutationFn\">;\n\n/**\n * Create a record and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(data)` creates the record.\n */\nexport function useCreate<T>(\n resource: string,\n options?: UseCreateOptions<T>,\n): UseMutationResult<T, Error, unknown> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, unknown>({\n mutationFn: (data: unknown) => provider.create<T>(resource, data),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Variables accepted by the update mutation. */\nexport interface UpdateVariables {\n /** The record id to update. */\n id: string | number;\n /** The update payload. */\n data: unknown;\n}\n\n/** Options for the update mutation (mutationFn + onSuccess are provided). */\nexport type UseUpdateOptions<T> = Omit<UseMutationOptions<T, Error, UpdateVariables>, \"mutationFn\">;\n\n/**\n * Update a record and invalidate both the list and the single-record caches.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate({ id, data })` updates the record.\n */\nexport function useUpdate<T>(\n resource: string,\n options?: UseUpdateOptions<T>,\n): UseMutationResult<T, Error, UpdateVariables> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, UpdateVariables>({\n mutationFn: ({ id, data }: UpdateVariables) => provider.update<T>(resource, id, data),\n onSuccess: (...args) => {\n const [, variables] = args;\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n void queryClient.invalidateQueries({ queryKey: oneQueryKey(resource, variables.id) });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n\n/** Options for the delete mutation (mutationFn + onSuccess are provided). */\nexport type UseDeleteOptions<T> = Omit<UseMutationOptions<T, Error, string | number>, \"mutationFn\">;\n\n/**\n * Delete a record by id and invalidate the resource list cache on success.\n *\n * @param resource - The resource name.\n * @param options - Extra TanStack Mutation options.\n * @returns The mutation; `mutate(id)` deletes the record.\n */\nexport function useDelete<T>(\n resource: string,\n options?: UseDeleteOptions<T>,\n): UseMutationResult<T, Error, string | number> {\n const provider = useDataProvider();\n const queryClient = useQueryClient();\n return useMutation<T, Error, string | number>({\n mutationFn: (id: string | number) => provider.deleteOne<T>(resource, id),\n onSuccess: (...args) => {\n void queryClient.invalidateQueries({ queryKey: [\"data\", resource, \"list\"] });\n options?.onSuccess?.(...args);\n },\n ...options,\n });\n}\n"],"mappings":";;;AAgCA,SAAgBA,EAAa,GAAkB,GAAmC;CAC9E,OAAO;EAAC;EAAQC;EAAU;EAAQC;CAAM;AAC5C;AASA,SAAgBC,EAAY,GAAkB,GAAmD;CAC7F,OAAO;EAAC;EAAQF;EAAU;EAAOG;CAAE;AACvC;AAUA,SAAgBC,EACZ,GACA,GACA,GACoC;CACpC,IAAMC,IAAWC,EAAgB;CACjC,OAAOC,EAA+B;EAClC,UAAUR,EAAaC,GAAUC,CAAM;EACvC,eAAeI,EAAS,QAAWL,GAAUC,CAAM;EACnD,GAAGO;CACP,CAAC;AACL;AAYA,SAAgBC,EACZ,GACA,GACA,GACwB;CACxB,IAAMJ,IAAWC,EAAgB,GAC3B,EAAE,YAAS,GAAGI,MAASF,KAAW,CAAC;CACzC,OAAOD,EAAmB;EACtB,UAAUL,EAAYF,GAAUG,CAAE;EAClC,eAAeE,EAAS,OAAUL,GAAUG,CAAqB;EACjE,SAASA,KAAM,SAASQ,KAAW;EACnC,GAAGD;CACP,CAAC;AACL;AAYA,SAAgBE,EACZ,GACA,GACoC;CACpC,IAAMP,IAAWC,EAAgB,GAC3BO,IAAcC,EAAe;CACnC,OAAOC,EAA+B;EAClC,aAAa,MAAkBV,EAAS,OAAUL,GAAUgB,CAAI;EAChE,YAAY,GAAGC,MAAS;GAEpB,AADAJ,EAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAQb;IAAU;GAAM,EAAE,CAAC,GAC3EQ,GAAS,YAAY,GAAGS,CAAI;EAChC;EACA,GAAGT;CACP,CAAC;AACL;AAoBA,SAAgBU,EACZ,GACA,GAC4C;CAC5C,IAAMb,IAAWC,EAAgB,GAC3BO,IAAcC,EAAe;CACnC,OAAOC,EAAuC;EAC1C,aAAa,EAAE,OAAI,cAA4BV,EAAS,OAAUL,GAAUG,GAAIa,CAAI;EACpF,YAAY,GAAGC,MAAS;GACpB,IAAM,GAAGE,KAAaF;GAGtB,AAFAJ,EAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAQb;IAAU;GAAM,EAAE,CAAC,GAC3Ea,EAAiB,kBAAkB,EAAE,UAAUX,EAAYF,GAAUmB,EAAU,EAAE,EAAE,CAAC,GACpFX,GAAS,YAAY,GAAGS,CAAI;EAChC;EACA,GAAGT;CACP,CAAC;AACL;AAYA,SAAgBY,EACZ,GACA,GAC4C;CAC5C,IAAMf,IAAWC,EAAgB,GAC3BO,IAAcC,EAAe;CACnC,OAAOC,EAAuC;EAC1C,aAAa,MAAwBV,EAAS,UAAaL,GAAUG,CAAE;EACvE,YAAY,GAAGc,MAAS;GAEpB,AADAJ,EAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAQb;IAAU;GAAM,EAAE,CAAC,GAC3EQ,GAAS,YAAY,GAAGS,CAAI;EAChC;EACA,GAAGT;CACP,CAAC;AACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.cjs","names":[],"sources":["../../src/editor/RichTextEditor.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body builds the tiptap editor,\n * its toolbar state and the change plumbing: every toolbar button reads\n * `editor.isActive`, so the toolbar cannot be lifted out without passing the editor\n * instance back down.\n */\nimport { useEffect } from \"react\";\nimport { EditorContent, useEditor, useEditorState } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport {\n Bold,\n Code,\n Heading1,\n Heading2,\n Italic,\n List,\n ListOrdered,\n Quote,\n Redo2,\n Strikethrough,\n Undo2,\n} from \"lucide-react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./RichTextEditor.module.css\";\n\nexport interface RichTextEditorProps {\n /** Current editor content as an HTML string (controlled). */\n value: string;\n /** Called with the updated HTML whenever the document changes. */\n onChange: (html: string) => void;\n /** Placeholder text shown when the editor is empty. */\n placeholder?: string;\n /** Whether the content is editable. Defaults to `true`. */\n editable?: boolean;\n /** Whether to render the formatting toolbar. Defaults to `true`. */\n toolbar?: boolean;\n /** Extra class names applied to the wrapper element. */\n className?: string;\n}\n\n/**\n * RichTextEditor — a controlled WYSIWYG editor built on tiptap v3.\n *\n * Renders an optional formatting toolbar (bold, italic, strike, code, headings,\n * lists, blockquote, undo/redo) above a ProseMirror-backed editable area. The\n * document is controlled via the `value` (HTML) / `onChange` pair: external\n * changes to `value` are synced into the editor without re-emitting updates.\n *\n * The toolbar's pressed states and the undo/redo `disabled` flags come from\n * `useEditorState`, which subscribes to exactly those values. `useEditor` does\n * not re-render on transactions (the tiptap v3 default), so reading `isActive`\n * and `can()` directly in the render body left every button stale — toggling\n * bold with a collapsed cursor arms the mark without changing the document, so no\n * update event ever brought React back to recompute the state. Subscribing\n * re-renders only when one of the tracked values actually flips, which is also\n * cheaper than re-rendering on every keystroke.\n *\n * Two effects keep the instance aligned with the props: one pushes an external\n * `value` change into the document with `emitUpdate: false` (so syncing never\n * re-emits `onChange`), the other mirrors the `editable` flag.\n */\nexport function RichTextEditor({\n value,\n onChange,\n placeholder,\n editable = true,\n toolbar = true,\n className,\n}: RichTextEditorProps) {\n const editor = useEditor({\n extensions: [StarterKit],\n content: value,\n editable,\n onUpdate: ({ editor: instance }) => onChange(instance.getHTML()),\n });\n\n useEffect(() => {\n if (!editor) return;\n if (value !== editor.getHTML()) {\n editor.commands.setContent(value, { emitUpdate: false });\n }\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(editable);\n }, [editor, editable]);\n\n const toolbarState = useEditorState({\n editor,\n selector: ({ editor: instance }) => ({\n bold: instance.isActive(\"bold\"),\n italic: instance.isActive(\"italic\"),\n strike: instance.isActive(\"strike\"),\n code: instance.isActive(\"code\"),\n heading1: instance.isActive(\"heading\", { level: 1 }),\n heading2: instance.isActive(\"heading\", { level: 2 }),\n bulletList: instance.isActive(\"bulletList\"),\n orderedList: instance.isActive(\"orderedList\"),\n blockquote: instance.isActive(\"blockquote\"),\n canUndo: instance.can().chain().focus().undo().run(),\n canRedo: instance.can().chain().focus().redo().run(),\n }),\n });\n\n if (!editor || !toolbarState) return null;\n\n const canUndo = toolbarState.canUndo;\n const canRedo = toolbarState.canRedo;\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {toolbar && (\n <div className={styles.toolbar} role=\"toolbar\" aria-label=\"Formatação de texto\">\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bold && styles.active)}\n aria-label=\"Negrito\"\n aria-pressed={toolbarState.bold}\n onClick={() => editor.chain().focus().toggleBold().run()}\n >\n <Bold size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.italic && styles.active)}\n aria-label=\"Itálico\"\n aria-pressed={toolbarState.italic}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n >\n <Italic size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.strike && styles.active)}\n aria-label=\"Tachado\"\n aria-pressed={toolbarState.strike}\n onClick={() => editor.chain().focus().toggleStrike().run()}\n >\n <Strikethrough size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.code && styles.active)}\n aria-label=\"Código\"\n aria-pressed={toolbarState.code}\n onClick={() => editor.chain().focus().toggleCode().run()}\n >\n <Code size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading1 && styles.active)}\n aria-label=\"Título 1\"\n aria-pressed={toolbarState.heading1}\n onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}\n >\n <Heading1 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading2 && styles.active)}\n aria-label=\"Título 2\"\n aria-pressed={toolbarState.heading2}\n onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}\n >\n <Heading2 size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bulletList && styles.active)}\n aria-label=\"Lista com marcadores\"\n aria-pressed={toolbarState.bulletList}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n >\n <List size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.orderedList && styles.active)}\n aria-label=\"Lista numerada\"\n aria-pressed={toolbarState.orderedList}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n >\n <ListOrdered size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.blockquote && styles.active)}\n aria-label=\"Citação\"\n aria-pressed={toolbarState.blockquote}\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n >\n <Quote size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Desfazer\"\n disabled={!canUndo}\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo2 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Refazer\"\n disabled={!canRedo}\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo2 size={16} aria-hidden />\n </button>\n </div>\n )}\n <EditorContent\n editor={editor}\n className={styles.content}\n data-placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":"wRA6DA,SAAgB,EAAe,CAC3B,QACA,WACA,cACA,WAAW,GACX,UAAU,GACV,aACoB,CACpB,IAAM,GAAA,EAAS,EAAA,UAAA,CAAU,CACrB,WAAY,CAAC,EAAA,OAAU,EACvB,QAAS,EACT,WACA,UAAW,CAAE,OAAQ,KAAe,EAAS,EAAS,QAAQ,CAAC,CACnE,CAAC,GAED,EAAA,EAAA,UAAA,KAAgB,CACP,GACD,IAAU,EAAO,QAAQ,GACzB,EAAO,SAAS,WAAW,EAAO,CAAE,WAAY,EAAM,CAAC,CAE/D,EAAG,CAAC,EAAQ,CAAK,CAAC,GAElB,EAAA,EAAA,UAAA,KAAgB,CACP,GACL,EAAO,YAAY,CAAQ,CAC/B,EAAG,CAAC,EAAQ,CAAQ,CAAC,EAErB,IAAM,GAAA,EAAe,EAAA,eAAA,CAAe,CAChC,SACA,UAAW,CAAE,OAAQ,MAAgB,CACjC,KAAM,EAAS,SAAS,MAAM,EAC9B,OAAQ,EAAS,SAAS,QAAQ,EAClC,OAAQ,EAAS,SAAS,QAAQ,EAClC,KAAM,EAAS,SAAS,MAAM,EAC9B,SAAU,EAAS,SAAS,UAAW,CAAE,MAAO,CAAE,CAAC,EACnD,SAAU,EAAS,SAAS,UAAW,CAAE,MAAO,CAAE,CAAC,EACnD,WAAY,EAAS,SAAS,YAAY,EAC1C,YAAa,EAAS,SAAS,aAAa,EAC5C,WAAY,EAAS,SAAS,YAAY,EAC1C,QAAS,EAAS,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EACnD,QAAS,EAAS,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CACvD,EACJ,CAAC,EAED,GAAI,CAAC,GAAU,CAAC,EAAc,OAAO,KAErC,IAAM,EAAU,EAAa,QACvB,EAAU,EAAa,QAE7B,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,CAAS,EAA5C,SAAA,CACK,IACG,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,QAAO,QAAS,KAAK,UAAU,aAAW,sBAA1D,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,MAAQ,EAAA,QAAO,MAAM,EAC/D,aAAW,UACX,eAAc,EAAa,KAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAEvD,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,KAAD,CAAM,KAAM,GAAI,cAAA,EAAa,CAAA,CACzB,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,QAAU,EAAA,QAAO,MAAM,EACjE,aAAW,UACX,eAAc,EAAa,OAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAEzD,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,OAAD,CAAQ,KAAM,GAAI,cAAA,EAAa,CAAA,CAC3B,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,QAAU,EAAA,QAAO,MAAM,EACjE,aAAW,UACX,eAAc,EAAa,OAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAEzD,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,cAAD,CAAe,KAAM,GAAI,cAAA,EAAa,CAAA,CAClC,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,MAAQ,EAAA,QAAO,MAAM,EAC/D,aAAW,SACX,eAAc,EAAa,KAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAEvD,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,KAAD,CAAM,KAAM,GAAI,cAAA,EAAa,CAAA,CACzB,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAW,cAAA,EAAa,CAAA,GAChD,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,UAAY,EAAA,QAAO,MAAM,EACnE,aAAW,WACX,eAAc,EAAa,SAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAE,MAAO,CAAE,CAAC,CAAC,CAAC,IAAI,EAEtE,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,SAAD,CAAU,KAAM,GAAI,cAAA,EAAa,CAAA,CAC7B,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,UAAY,EAAA,QAAO,MAAM,EACnE,aAAW,WACX,eAAc,EAAa,SAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAE,MAAO,CAAE,CAAC,CAAC,CAAC,IAAI,EAEtE,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,SAAD,CAAU,KAAM,GAAI,cAAA,EAAa,CAAA,CAC7B,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAW,cAAA,EAAa,CAAA,GAChD,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,YAAc,EAAA,QAAO,MAAM,EACrE,aAAW,uBACX,eAAc,EAAa,WAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAE7D,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,KAAD,CAAM,KAAM,GAAI,cAAA,EAAa,CAAA,CACzB,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,aAAe,EAAA,QAAO,MAAM,EACtE,aAAW,iBACX,eAAc,EAAa,YAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAE9D,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,YAAD,CAAa,KAAM,GAAI,cAAA,EAAa,CAAA,CAChC,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,GAAG,EAAA,QAAO,OAAQ,EAAa,YAAc,EAAA,QAAO,MAAM,EACrE,aAAW,UACX,eAAc,EAAa,WAC3B,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAE7D,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,MAAD,CAAO,KAAM,GAAI,cAAA,EAAa,CAAA,CAC1B,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAW,cAAA,EAAa,CAAA,GAChD,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,QAAO,OAClB,aAAW,WACX,SAAU,CAAC,EACX,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAEjD,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,MAAD,CAAO,KAAM,GAAI,cAAA,EAAa,CAAA,CAC1B,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,UAAW,EAAA,QAAO,OAClB,aAAW,UACX,SAAU,CAAC,EACX,YAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAEjD,UAAA,EAAA,EAAA,IAAA,CAAC,EAAA,MAAD,CAAO,KAAM,GAAI,cAAA,EAAa,CAAA,CAC1B,CAAA,CACP,CAET,CAAA,GAAA,EAAA,EAAA,IAAA,CAAC,EAAA,cAAD,CACY,SACR,UAAW,EAAA,QAAO,QAClB,mBAAkB,CACrB,CAAA,CACA,GAEb"}
1
+ {"version":3,"file":"RichTextEditor.cjs","names":["useEditor","StarterKit","useEditorState","cn","styles","Bold","Italic","Strikethrough","Code","Heading1","Heading2","List","ListOrdered","Quote","Undo2","Redo2","EditorContent","require_runtime","require_cn","require_RichTextEditor_module","react","react_jsx_runtime","lucide_react","_tiptap_react","_tiptap_starter_kit","RichTextEditor","editor","value","instance","onChange","editable","toolbarState","canUndo","canRedo","className","toolbar","placeholder"],"sources":["../../src/editor/RichTextEditor.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body builds the tiptap editor,\n * its toolbar state and the change plumbing: every toolbar button reads\n * `editor.isActive`, so the toolbar cannot be lifted out without passing the editor\n * instance back down.\n */\nimport { useEffect } from \"react\";\nimport { EditorContent, useEditor, useEditorState } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport {\n Bold,\n Code,\n Heading1,\n Heading2,\n Italic,\n List,\n ListOrdered,\n Quote,\n Redo2,\n Strikethrough,\n Undo2,\n} from \"lucide-react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./RichTextEditor.module.css\";\n\nexport interface RichTextEditorProps {\n /** Current editor content as an HTML string (controlled). */\n value: string;\n /** Called with the updated HTML whenever the document changes. */\n onChange: (html: string) => void;\n /** Placeholder text shown when the editor is empty. */\n placeholder?: string;\n /** Whether the content is editable. Defaults to `true`. */\n editable?: boolean;\n /** Whether to render the formatting toolbar. Defaults to `true`. */\n toolbar?: boolean;\n /** Extra class names applied to the wrapper element. */\n className?: string;\n}\n\n/**\n * RichTextEditor — a controlled WYSIWYG editor built on tiptap v3.\n *\n * Renders an optional formatting toolbar (bold, italic, strike, code, headings,\n * lists, blockquote, undo/redo) above a ProseMirror-backed editable area. The\n * document is controlled via the `value` (HTML) / `onChange` pair: external\n * changes to `value` are synced into the editor without re-emitting updates.\n *\n * The toolbar's pressed states and the undo/redo `disabled` flags come from\n * `useEditorState`, which subscribes to exactly those values. `useEditor` does\n * not re-render on transactions (the tiptap v3 default), so reading `isActive`\n * and `can()` directly in the render body left every button stale — toggling\n * bold with a collapsed cursor arms the mark without changing the document, so no\n * update event ever brought React back to recompute the state. Subscribing\n * re-renders only when one of the tracked values actually flips, which is also\n * cheaper than re-rendering on every keystroke.\n *\n * Two effects keep the instance aligned with the props: one pushes an external\n * `value` change into the document with `emitUpdate: false` (so syncing never\n * re-emits `onChange`), the other mirrors the `editable` flag.\n */\nexport function RichTextEditor({\n value,\n onChange,\n placeholder,\n editable = true,\n toolbar = true,\n className,\n}: RichTextEditorProps) {\n const editor = useEditor({\n extensions: [StarterKit],\n content: value,\n editable,\n onUpdate: ({ editor: instance }) => onChange(instance.getHTML()),\n });\n\n useEffect(() => {\n if (!editor) return;\n if (value !== editor.getHTML()) {\n editor.commands.setContent(value, { emitUpdate: false });\n }\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(editable);\n }, [editor, editable]);\n\n const toolbarState = useEditorState({\n editor,\n selector: ({ editor: instance }) => ({\n bold: instance.isActive(\"bold\"),\n italic: instance.isActive(\"italic\"),\n strike: instance.isActive(\"strike\"),\n code: instance.isActive(\"code\"),\n heading1: instance.isActive(\"heading\", { level: 1 }),\n heading2: instance.isActive(\"heading\", { level: 2 }),\n bulletList: instance.isActive(\"bulletList\"),\n orderedList: instance.isActive(\"orderedList\"),\n blockquote: instance.isActive(\"blockquote\"),\n canUndo: instance.can().chain().focus().undo().run(),\n canRedo: instance.can().chain().focus().redo().run(),\n }),\n });\n\n if (!editor || !toolbarState) return null;\n\n const canUndo = toolbarState.canUndo;\n const canRedo = toolbarState.canRedo;\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {toolbar && (\n <div className={styles.toolbar} role=\"toolbar\" aria-label=\"Formatação de texto\">\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bold && styles.active)}\n aria-label=\"Negrito\"\n aria-pressed={toolbarState.bold}\n onClick={() => editor.chain().focus().toggleBold().run()}\n >\n <Bold size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.italic && styles.active)}\n aria-label=\"Itálico\"\n aria-pressed={toolbarState.italic}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n >\n <Italic size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.strike && styles.active)}\n aria-label=\"Tachado\"\n aria-pressed={toolbarState.strike}\n onClick={() => editor.chain().focus().toggleStrike().run()}\n >\n <Strikethrough size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.code && styles.active)}\n aria-label=\"Código\"\n aria-pressed={toolbarState.code}\n onClick={() => editor.chain().focus().toggleCode().run()}\n >\n <Code size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading1 && styles.active)}\n aria-label=\"Título 1\"\n aria-pressed={toolbarState.heading1}\n onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}\n >\n <Heading1 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading2 && styles.active)}\n aria-label=\"Título 2\"\n aria-pressed={toolbarState.heading2}\n onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}\n >\n <Heading2 size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bulletList && styles.active)}\n aria-label=\"Lista com marcadores\"\n aria-pressed={toolbarState.bulletList}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n >\n <List size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.orderedList && styles.active)}\n aria-label=\"Lista numerada\"\n aria-pressed={toolbarState.orderedList}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n >\n <ListOrdered size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.blockquote && styles.active)}\n aria-label=\"Citação\"\n aria-pressed={toolbarState.blockquote}\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n >\n <Quote size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Desfazer\"\n disabled={!canUndo}\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo2 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Refazer\"\n disabled={!canRedo}\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo2 size={16} aria-hidden />\n </button>\n </div>\n )}\n <EditorContent\n editor={editor}\n className={styles.content}\n data-placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.js","names":[],"sources":["../../src/editor/RichTextEditor.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body builds the tiptap editor,\n * its toolbar state and the change plumbing: every toolbar button reads\n * `editor.isActive`, so the toolbar cannot be lifted out without passing the editor\n * instance back down.\n */\nimport { useEffect } from \"react\";\nimport { EditorContent, useEditor, useEditorState } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport {\n Bold,\n Code,\n Heading1,\n Heading2,\n Italic,\n List,\n ListOrdered,\n Quote,\n Redo2,\n Strikethrough,\n Undo2,\n} from \"lucide-react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./RichTextEditor.module.css\";\n\nexport interface RichTextEditorProps {\n /** Current editor content as an HTML string (controlled). */\n value: string;\n /** Called with the updated HTML whenever the document changes. */\n onChange: (html: string) => void;\n /** Placeholder text shown when the editor is empty. */\n placeholder?: string;\n /** Whether the content is editable. Defaults to `true`. */\n editable?: boolean;\n /** Whether to render the formatting toolbar. Defaults to `true`. */\n toolbar?: boolean;\n /** Extra class names applied to the wrapper element. */\n className?: string;\n}\n\n/**\n * RichTextEditor — a controlled WYSIWYG editor built on tiptap v3.\n *\n * Renders an optional formatting toolbar (bold, italic, strike, code, headings,\n * lists, blockquote, undo/redo) above a ProseMirror-backed editable area. The\n * document is controlled via the `value` (HTML) / `onChange` pair: external\n * changes to `value` are synced into the editor without re-emitting updates.\n *\n * The toolbar's pressed states and the undo/redo `disabled` flags come from\n * `useEditorState`, which subscribes to exactly those values. `useEditor` does\n * not re-render on transactions (the tiptap v3 default), so reading `isActive`\n * and `can()` directly in the render body left every button stale — toggling\n * bold with a collapsed cursor arms the mark without changing the document, so no\n * update event ever brought React back to recompute the state. Subscribing\n * re-renders only when one of the tracked values actually flips, which is also\n * cheaper than re-rendering on every keystroke.\n *\n * Two effects keep the instance aligned with the props: one pushes an external\n * `value` change into the document with `emitUpdate: false` (so syncing never\n * re-emits `onChange`), the other mirrors the `editable` flag.\n */\nexport function RichTextEditor({\n value,\n onChange,\n placeholder,\n editable = true,\n toolbar = true,\n className,\n}: RichTextEditorProps) {\n const editor = useEditor({\n extensions: [StarterKit],\n content: value,\n editable,\n onUpdate: ({ editor: instance }) => onChange(instance.getHTML()),\n });\n\n useEffect(() => {\n if (!editor) return;\n if (value !== editor.getHTML()) {\n editor.commands.setContent(value, { emitUpdate: false });\n }\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(editable);\n }, [editor, editable]);\n\n const toolbarState = useEditorState({\n editor,\n selector: ({ editor: instance }) => ({\n bold: instance.isActive(\"bold\"),\n italic: instance.isActive(\"italic\"),\n strike: instance.isActive(\"strike\"),\n code: instance.isActive(\"code\"),\n heading1: instance.isActive(\"heading\", { level: 1 }),\n heading2: instance.isActive(\"heading\", { level: 2 }),\n bulletList: instance.isActive(\"bulletList\"),\n orderedList: instance.isActive(\"orderedList\"),\n blockquote: instance.isActive(\"blockquote\"),\n canUndo: instance.can().chain().focus().undo().run(),\n canRedo: instance.can().chain().focus().redo().run(),\n }),\n });\n\n if (!editor || !toolbarState) return null;\n\n const canUndo = toolbarState.canUndo;\n const canRedo = toolbarState.canRedo;\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {toolbar && (\n <div className={styles.toolbar} role=\"toolbar\" aria-label=\"Formatação de texto\">\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bold && styles.active)}\n aria-label=\"Negrito\"\n aria-pressed={toolbarState.bold}\n onClick={() => editor.chain().focus().toggleBold().run()}\n >\n <Bold size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.italic && styles.active)}\n aria-label=\"Itálico\"\n aria-pressed={toolbarState.italic}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n >\n <Italic size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.strike && styles.active)}\n aria-label=\"Tachado\"\n aria-pressed={toolbarState.strike}\n onClick={() => editor.chain().focus().toggleStrike().run()}\n >\n <Strikethrough size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.code && styles.active)}\n aria-label=\"Código\"\n aria-pressed={toolbarState.code}\n onClick={() => editor.chain().focus().toggleCode().run()}\n >\n <Code size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading1 && styles.active)}\n aria-label=\"Título 1\"\n aria-pressed={toolbarState.heading1}\n onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}\n >\n <Heading1 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading2 && styles.active)}\n aria-label=\"Título 2\"\n aria-pressed={toolbarState.heading2}\n onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}\n >\n <Heading2 size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bulletList && styles.active)}\n aria-label=\"Lista com marcadores\"\n aria-pressed={toolbarState.bulletList}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n >\n <List size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.orderedList && styles.active)}\n aria-label=\"Lista numerada\"\n aria-pressed={toolbarState.orderedList}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n >\n <ListOrdered size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.blockquote && styles.active)}\n aria-label=\"Citação\"\n aria-pressed={toolbarState.blockquote}\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n >\n <Quote size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Desfazer\"\n disabled={!canUndo}\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo2 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Refazer\"\n disabled={!canRedo}\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo2 size={16} aria-hidden />\n </button>\n </div>\n )}\n <EditorContent\n editor={editor}\n className={styles.content}\n data-placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RichTextEditor.js","names":["styles","RichTextEditor_module_default","StarterKit","RichTextEditor","editor","useEditor","value","instance","onChange","useEffect","editable","toolbarState","useEditorState","canUndo","canRedo","cn","className","toolbar","Bold","Italic","Strikethrough","Code","Heading1","Heading2","List","ListOrdered","Quote","Undo2","Redo2","EditorContent","placeholder"],"sources":["../../src/editor/RichTextEditor.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — the body builds the tiptap editor,\n * its toolbar state and the change plumbing: every toolbar button reads\n * `editor.isActive`, so the toolbar cannot be lifted out without passing the editor\n * instance back down.\n */\nimport { useEffect } from \"react\";\nimport { EditorContent, useEditor, useEditorState } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport {\n Bold,\n Code,\n Heading1,\n Heading2,\n Italic,\n List,\n ListOrdered,\n Quote,\n Redo2,\n Strikethrough,\n Undo2,\n} from \"lucide-react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./RichTextEditor.module.css\";\n\nexport interface RichTextEditorProps {\n /** Current editor content as an HTML string (controlled). */\n value: string;\n /** Called with the updated HTML whenever the document changes. */\n onChange: (html: string) => void;\n /** Placeholder text shown when the editor is empty. */\n placeholder?: string;\n /** Whether the content is editable. Defaults to `true`. */\n editable?: boolean;\n /** Whether to render the formatting toolbar. Defaults to `true`. */\n toolbar?: boolean;\n /** Extra class names applied to the wrapper element. */\n className?: string;\n}\n\n/**\n * RichTextEditor — a controlled WYSIWYG editor built on tiptap v3.\n *\n * Renders an optional formatting toolbar (bold, italic, strike, code, headings,\n * lists, blockquote, undo/redo) above a ProseMirror-backed editable area. The\n * document is controlled via the `value` (HTML) / `onChange` pair: external\n * changes to `value` are synced into the editor without re-emitting updates.\n *\n * The toolbar's pressed states and the undo/redo `disabled` flags come from\n * `useEditorState`, which subscribes to exactly those values. `useEditor` does\n * not re-render on transactions (the tiptap v3 default), so reading `isActive`\n * and `can()` directly in the render body left every button stale — toggling\n * bold with a collapsed cursor arms the mark without changing the document, so no\n * update event ever brought React back to recompute the state. Subscribing\n * re-renders only when one of the tracked values actually flips, which is also\n * cheaper than re-rendering on every keystroke.\n *\n * Two effects keep the instance aligned with the props: one pushes an external\n * `value` change into the document with `emitUpdate: false` (so syncing never\n * re-emits `onChange`), the other mirrors the `editable` flag.\n */\nexport function RichTextEditor({\n value,\n onChange,\n placeholder,\n editable = true,\n toolbar = true,\n className,\n}: RichTextEditorProps) {\n const editor = useEditor({\n extensions: [StarterKit],\n content: value,\n editable,\n onUpdate: ({ editor: instance }) => onChange(instance.getHTML()),\n });\n\n useEffect(() => {\n if (!editor) return;\n if (value !== editor.getHTML()) {\n editor.commands.setContent(value, { emitUpdate: false });\n }\n }, [editor, value]);\n\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(editable);\n }, [editor, editable]);\n\n const toolbarState = useEditorState({\n editor,\n selector: ({ editor: instance }) => ({\n bold: instance.isActive(\"bold\"),\n italic: instance.isActive(\"italic\"),\n strike: instance.isActive(\"strike\"),\n code: instance.isActive(\"code\"),\n heading1: instance.isActive(\"heading\", { level: 1 }),\n heading2: instance.isActive(\"heading\", { level: 2 }),\n bulletList: instance.isActive(\"bulletList\"),\n orderedList: instance.isActive(\"orderedList\"),\n blockquote: instance.isActive(\"blockquote\"),\n canUndo: instance.can().chain().focus().undo().run(),\n canRedo: instance.can().chain().focus().redo().run(),\n }),\n });\n\n if (!editor || !toolbarState) return null;\n\n const canUndo = toolbarState.canUndo;\n const canRedo = toolbarState.canRedo;\n\n return (\n <div className={cn(styles.wrapper, className)}>\n {toolbar && (\n <div className={styles.toolbar} role=\"toolbar\" aria-label=\"Formatação de texto\">\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bold && styles.active)}\n aria-label=\"Negrito\"\n aria-pressed={toolbarState.bold}\n onClick={() => editor.chain().focus().toggleBold().run()}\n >\n <Bold size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.italic && styles.active)}\n aria-label=\"Itálico\"\n aria-pressed={toolbarState.italic}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n >\n <Italic size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.strike && styles.active)}\n aria-label=\"Tachado\"\n aria-pressed={toolbarState.strike}\n onClick={() => editor.chain().focus().toggleStrike().run()}\n >\n <Strikethrough size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.code && styles.active)}\n aria-label=\"Código\"\n aria-pressed={toolbarState.code}\n onClick={() => editor.chain().focus().toggleCode().run()}\n >\n <Code size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading1 && styles.active)}\n aria-label=\"Título 1\"\n aria-pressed={toolbarState.heading1}\n onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}\n >\n <Heading1 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.heading2 && styles.active)}\n aria-label=\"Título 2\"\n aria-pressed={toolbarState.heading2}\n onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}\n >\n <Heading2 size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.bulletList && styles.active)}\n aria-label=\"Lista com marcadores\"\n aria-pressed={toolbarState.bulletList}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n >\n <List size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.orderedList && styles.active)}\n aria-label=\"Lista numerada\"\n aria-pressed={toolbarState.orderedList}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n >\n <ListOrdered size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={cn(styles.button, toolbarState.blockquote && styles.active)}\n aria-label=\"Citação\"\n aria-pressed={toolbarState.blockquote}\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n >\n <Quote size={16} aria-hidden />\n </button>\n <span className={styles.separator} aria-hidden />\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Desfazer\"\n disabled={!canUndo}\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo2 size={16} aria-hidden />\n </button>\n <button\n type=\"button\"\n className={styles.button}\n aria-label=\"Refazer\"\n disabled={!canRedo}\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo2 size={16} aria-hidden />\n </button>\n </div>\n )}\n <EditorContent\n editor={editor}\n className={styles.content}\n data-placeholder={placeholder}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.module.cjs","names":[],"sources":["../../src/editor/RichTextEditor.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: var(--tempest-font-sans);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n overflow: hidden;\n}\n\n.toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2);\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-sm);\n background-color: transparent;\n color: var(--tempest-text-muted);\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled) {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n }\n}\n\n.button:focus-visible {\n outline: none;\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.button:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.button.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-active);\n border-color: var(--tempest-primary-soft);\n}\n\n.separator {\n width: 1px;\n align-self: stretch;\n margin: 0 var(--tempest-space-1);\n background-color: var(--tempest-border);\n}\n\n.content {\n display: flex;\n flex-direction: column;\n}\n\n.content :global(.ProseMirror) {\n min-height: 160px;\n padding: var(--tempest-space-3);\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-normal);\n outline: none;\n}\n\n.content :global(.ProseMirror:focus) {\n box-shadow: inset 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.content :global(.ProseMirror p) {\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h1) {\n font-size: var(--tempest-text-2xl);\n font-weight: var(--tempest-weight-bold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h2) {\n font-size: var(--tempest-text-xl);\n font-weight: var(--tempest-weight-semibold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror ul),\n.content :global(.ProseMirror ol) {\n padding-left: var(--tempest-space-5);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror blockquote) {\n border-left: 3px solid var(--tempest-border);\n padding-left: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror code) {\n font-family: var(--tempest-font-mono);\n font-size: var(--tempest-text-sm);\n background-color: var(--tempest-surface);\n padding: 0 var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n}\n\n.content :global(.ProseMirror p.is-editor-empty:first-child::before) {\n content: attr(data-placeholder);\n color: var(--tempest-text-subtle);\n float: left;\n height: 0;\n pointer-events: none;\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"RichTextEditor.module.cjs","names":["wrapper","toolbar","button","active","separator","content","RichTextEditor_module_default"],"sources":["../../src/editor/RichTextEditor.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: var(--tempest-font-sans);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n overflow: hidden;\n}\n\n.toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2);\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-sm);\n background-color: transparent;\n color: var(--tempest-text-muted);\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled) {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n }\n}\n\n.button:focus-visible {\n outline: none;\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.button:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.button.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-active);\n border-color: var(--tempest-primary-soft);\n}\n\n.separator {\n width: 1px;\n align-self: stretch;\n margin: 0 var(--tempest-space-1);\n background-color: var(--tempest-border);\n}\n\n.content {\n display: flex;\n flex-direction: column;\n}\n\n.content :global(.ProseMirror) {\n min-height: 160px;\n padding: var(--tempest-space-3);\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-normal);\n outline: none;\n}\n\n.content :global(.ProseMirror:focus) {\n box-shadow: inset 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.content :global(.ProseMirror p) {\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h1) {\n font-size: var(--tempest-text-2xl);\n font-weight: var(--tempest-weight-bold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h2) {\n font-size: var(--tempest-text-xl);\n font-weight: var(--tempest-weight-semibold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror ul),\n.content :global(.ProseMirror ol) {\n padding-left: var(--tempest-space-5);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror blockquote) {\n border-left: 3px solid var(--tempest-border);\n padding-left: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror code) {\n font-family: var(--tempest-font-mono);\n font-size: var(--tempest-text-sm);\n background-color: var(--tempest-surface);\n padding: 0 var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n}\n\n.content :global(.ProseMirror p.is-editor-empty:first-child::before) {\n content: attr(data-placeholder);\n color: var(--tempest-text-subtle);\n float: left;\n height: 0;\n pointer-events: none;\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.module.js","names":[],"sources":["../../src/editor/RichTextEditor.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: var(--tempest-font-sans);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n overflow: hidden;\n}\n\n.toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2);\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-sm);\n background-color: transparent;\n color: var(--tempest-text-muted);\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled) {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n }\n}\n\n.button:focus-visible {\n outline: none;\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.button:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.button.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-active);\n border-color: var(--tempest-primary-soft);\n}\n\n.separator {\n width: 1px;\n align-self: stretch;\n margin: 0 var(--tempest-space-1);\n background-color: var(--tempest-border);\n}\n\n.content {\n display: flex;\n flex-direction: column;\n}\n\n.content :global(.ProseMirror) {\n min-height: 160px;\n padding: var(--tempest-space-3);\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-normal);\n outline: none;\n}\n\n.content :global(.ProseMirror:focus) {\n box-shadow: inset 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.content :global(.ProseMirror p) {\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h1) {\n font-size: var(--tempest-text-2xl);\n font-weight: var(--tempest-weight-bold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h2) {\n font-size: var(--tempest-text-xl);\n font-weight: var(--tempest-weight-semibold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror ul),\n.content :global(.ProseMirror ol) {\n padding-left: var(--tempest-space-5);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror blockquote) {\n border-left: 3px solid var(--tempest-border);\n padding-left: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror code) {\n font-family: var(--tempest-font-mono);\n font-size: var(--tempest-text-sm);\n background-color: var(--tempest-surface);\n padding: 0 var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n}\n\n.content :global(.ProseMirror p.is-editor-empty:first-child::before) {\n content: attr(data-placeholder);\n color: var(--tempest-text-subtle);\n float: left;\n height: 0;\n pointer-events: none;\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"RichTextEditor.module.js","names":["wrapper","toolbar","button","active","separator","content","RichTextEditor_module_default"],"sources":["../../src/editor/RichTextEditor.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: var(--tempest-font-sans);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n overflow: hidden;\n}\n\n.toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--tempest-space-1);\n padding: var(--tempest-space-2);\n border-bottom: 1px solid var(--tempest-border);\n background-color: var(--tempest-surface);\n}\n\n.button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: var(--tempest-radius-sm);\n background-color: transparent;\n color: var(--tempest-text-muted);\n cursor: pointer;\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .button:hover:not(:disabled) {\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n }\n}\n\n.button:focus-visible {\n outline: none;\n border-color: var(--tempest-primary);\n box-shadow: 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.button:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.button.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-active);\n border-color: var(--tempest-primary-soft);\n}\n\n.separator {\n width: 1px;\n align-self: stretch;\n margin: 0 var(--tempest-space-1);\n background-color: var(--tempest-border);\n}\n\n.content {\n display: flex;\n flex-direction: column;\n}\n\n.content :global(.ProseMirror) {\n min-height: 160px;\n padding: var(--tempest-space-3);\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-normal);\n outline: none;\n}\n\n.content :global(.ProseMirror:focus) {\n box-shadow: inset 0 0 0 var(--tempest-focus-ring-width) var(--tempest-focus-ring-color);\n}\n\n.content :global(.ProseMirror p) {\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h1) {\n font-size: var(--tempest-text-2xl);\n font-weight: var(--tempest-weight-bold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror h2) {\n font-size: var(--tempest-text-xl);\n font-weight: var(--tempest-weight-semibold);\n margin: var(--tempest-space-3) 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror ul),\n.content :global(.ProseMirror ol) {\n padding-left: var(--tempest-space-5);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror blockquote) {\n border-left: 3px solid var(--tempest-border);\n padding-left: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n margin: 0 0 var(--tempest-space-2);\n}\n\n.content :global(.ProseMirror code) {\n font-family: var(--tempest-font-mono);\n font-size: var(--tempest-text-sm);\n background-color: var(--tempest-surface);\n padding: 0 var(--tempest-space-1);\n border-radius: var(--tempest-radius-sm);\n}\n\n.content :global(.ProseMirror p.is-editor-empty:first-child::before) {\n content: attr(data-placeholder);\n color: var(--tempest-text-subtle);\n float: left;\n height: 0;\n pointer-events: none;\n}\n"],"mappings":";"}
package/dist/editor.js CHANGED
@@ -1,2 +1 @@
1
- import { RichTextEditor as e } from "./editor/RichTextEditor.js";
2
- export { e as RichTextEditor };
1
+ export { RichTextEditor } from "./editor/RichTextEditor.js";
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.cjs","names":[],"sources":["../../src/error-boundary/ErrorBoundary.tsx"],"sourcesContent":["import { Component } from \"react\";\nimport type { ErrorInfo, ReactNode } from \"react\";\n\nexport interface ErrorBoundaryRenderProps {\n error: Error;\n reset: () => void;\n}\n\nexport interface ErrorBoundaryProps {\n children: ReactNode;\n /**\n * Element shown when a descendant throws. Receives the captured error and\n * a `reset` callback that clears the boundary state.\n */\n fallback: ReactNode | ((props: ErrorBoundaryRenderProps) => ReactNode);\n /** Forwarded to your error tracker (Sentry, Datadog, console, etc.). */\n onError?: (error: Error, info: ErrorInfo) => void;\n /**\n * When any value in this array changes, the boundary automatically resets.\n * Useful for clearing the error after a navigation.\n */\n resetKeys?: readonly unknown[];\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nfunction keysChanged(a: readonly unknown[] = [], b: readonly unknown[] = []): boolean {\n if (a.length !== b.length) return true;\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) return true;\n }\n return false;\n}\n\n/**\n * Class-based React error boundary with a render-prop or static fallback.\n * Auto-resets when any value in `resetKeys` changes.\n *\n * @example\n * <ErrorBoundary\n * resetKeys={[location.pathname]}\n * onError={(err) => reportError(err)}\n * fallback={({ error, reset }) => (\n * <ErrorState description={error.message} onRetry={reset} />\n * )}\n * >\n * <App />\n * </ErrorBoundary>\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n override state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n override componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n override componentDidUpdate(previousProps: ErrorBoundaryProps): void {\n if (this.state.error && keysChanged(previousProps.resetKeys, this.props.resetKeys)) {\n this.reset();\n }\n }\n\n reset = (): void => {\n this.setState({ error: null });\n };\n\n override render(): ReactNode {\n const { error } = this.state;\n if (!error) return this.props.children;\n\n const { fallback } = this.props;\n if (typeof fallback === \"function\") {\n return fallback({ error, reset: this.reset });\n }\n return fallback;\n }\n}\n"],"mappings":"uBA4BA,SAAS,EAAY,EAAwB,CAAC,EAAG,EAAwB,CAAC,EAAY,CAClF,GAAI,EAAE,SAAW,EAAE,OAAQ,MAAO,GAClC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAE,OAAQ,IAC1B,GAAI,CAAC,OAAO,GAAG,EAAE,GAAI,EAAE,EAAE,EAAG,MAAO,GAEvC,MAAO,EACX,CAiBA,IAAa,EAAb,cAAmC,EAAA,SAAkD,CACjF,MAAqC,CAAE,MAAO,IAAK,EAEnD,OAAO,yBAAyB,EAAkC,CAC9D,MAAO,CAAE,OAAM,CACnB,CAEA,kBAA2B,EAAc,EAAuB,CAC5D,KAAK,MAAM,UAAU,EAAO,CAAI,CACpC,CAEA,mBAA4B,EAAyC,CAC7D,KAAK,MAAM,OAAS,EAAY,EAAc,UAAW,KAAK,MAAM,SAAS,GAC7E,KAAK,MAAM,CAEnB,CAEA,UAAoB,CAChB,KAAK,SAAS,CAAE,MAAO,IAAK,CAAC,CACjC,EAEA,QAA6B,CACzB,GAAM,CAAE,SAAU,KAAK,MACvB,GAAI,CAAC,EAAO,OAAO,KAAK,MAAM,SAE9B,GAAM,CAAE,YAAa,KAAK,MAI1B,OAHI,OAAO,GAAa,WACb,EAAS,CAAE,QAAO,MAAO,KAAK,KAAM,CAAC,EAEzC,CACX,CACJ"}
1
+ {"version":3,"file":"ErrorBoundary.cjs","names":["Component","react","keysChanged","a","b","i","ErrorBoundary","error","info","previousProps","fallback"],"sources":["../../src/error-boundary/ErrorBoundary.tsx"],"sourcesContent":["import { Component } from \"react\";\nimport type { ErrorInfo, ReactNode } from \"react\";\n\nexport interface ErrorBoundaryRenderProps {\n error: Error;\n reset: () => void;\n}\n\nexport interface ErrorBoundaryProps {\n children: ReactNode;\n /**\n * Element shown when a descendant throws. Receives the captured error and\n * a `reset` callback that clears the boundary state.\n */\n fallback: ReactNode | ((props: ErrorBoundaryRenderProps) => ReactNode);\n /** Forwarded to your error tracker (Sentry, Datadog, console, etc.). */\n onError?: (error: Error, info: ErrorInfo) => void;\n /**\n * When any value in this array changes, the boundary automatically resets.\n * Useful for clearing the error after a navigation.\n */\n resetKeys?: readonly unknown[];\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nfunction keysChanged(a: readonly unknown[] = [], b: readonly unknown[] = []): boolean {\n if (a.length !== b.length) return true;\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) return true;\n }\n return false;\n}\n\n/**\n * Class-based React error boundary with a render-prop or static fallback.\n * Auto-resets when any value in `resetKeys` changes.\n *\n * @example\n * <ErrorBoundary\n * resetKeys={[location.pathname]}\n * onError={(err) => reportError(err)}\n * fallback={({ error, reset }) => (\n * <ErrorState description={error.message} onRetry={reset} />\n * )}\n * >\n * <App />\n * </ErrorBoundary>\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n override state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n override componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n override componentDidUpdate(previousProps: ErrorBoundaryProps): void {\n if (this.state.error && keysChanged(previousProps.resetKeys, this.props.resetKeys)) {\n this.reset();\n }\n }\n\n reset = (): void => {\n this.setState({ error: null });\n };\n\n override render(): ReactNode {\n const { error } = this.state;\n if (!error) return this.props.children;\n\n const { fallback } = this.props;\n if (typeof fallback === \"function\") {\n return fallback({ error, reset: this.reset });\n }\n return fallback;\n }\n}\n"],"mappings":"A,uBA4BA,SAASE,EAAY,EAAwB,CAAC,EAAG,EAAwB,CAAC,EAAY,CAClF,GAAIC,EAAE,SAAWC,EAAE,OAAQ,MAAO,GAClC,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAE,OAAQ,IAC1B,GAAI,CAAC,OAAO,GAAGA,EAAEE,GAAID,EAAEC,EAAE,EAAG,MAAO,GAEvC,MAAO,EACX,CAiBA,IAAaC,EAAb,cAAmCN,EAAAA,SAAkD,CACjF,MAAqC,CAAE,MAAO,IAAK,EAEnD,OAAO,yBAAyB,EAAkC,CAC9D,MAAO,CAAE,OAAM,CACnB,CAEA,kBAA2B,EAAc,EAAuB,CAC5D,KAAK,MAAM,UAAUO,EAAOC,CAAI,CACpC,CAEA,mBAA4B,EAAyC,CAC7D,KAAK,MAAM,OAASN,EAAYO,EAAc,UAAW,KAAK,MAAM,SAAS,GAC7E,KAAK,MAAM,CAEnB,CAEA,UAAoB,CAChB,KAAK,SAAS,CAAE,MAAO,IAAK,CAAC,CACjC,EAEA,QAA6B,CACzB,GAAM,CAAE,SAAU,KAAK,MACvB,GAAI,CAACF,EAAO,OAAO,KAAK,MAAM,SAE9B,GAAM,CAAE,YAAa,KAAK,MAI1B,OAHI,OAAOG,GAAa,WACbA,EAAS,CAAE,QAAO,MAAO,KAAK,KAAM,CAAC,EAEzCA,CACX,CACJ,E"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.js","names":[],"sources":["../../src/error-boundary/ErrorBoundary.tsx"],"sourcesContent":["import { Component } from \"react\";\nimport type { ErrorInfo, ReactNode } from \"react\";\n\nexport interface ErrorBoundaryRenderProps {\n error: Error;\n reset: () => void;\n}\n\nexport interface ErrorBoundaryProps {\n children: ReactNode;\n /**\n * Element shown when a descendant throws. Receives the captured error and\n * a `reset` callback that clears the boundary state.\n */\n fallback: ReactNode | ((props: ErrorBoundaryRenderProps) => ReactNode);\n /** Forwarded to your error tracker (Sentry, Datadog, console, etc.). */\n onError?: (error: Error, info: ErrorInfo) => void;\n /**\n * When any value in this array changes, the boundary automatically resets.\n * Useful for clearing the error after a navigation.\n */\n resetKeys?: readonly unknown[];\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nfunction keysChanged(a: readonly unknown[] = [], b: readonly unknown[] = []): boolean {\n if (a.length !== b.length) return true;\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) return true;\n }\n return false;\n}\n\n/**\n * Class-based React error boundary with a render-prop or static fallback.\n * Auto-resets when any value in `resetKeys` changes.\n *\n * @example\n * <ErrorBoundary\n * resetKeys={[location.pathname]}\n * onError={(err) => reportError(err)}\n * fallback={({ error, reset }) => (\n * <ErrorState description={error.message} onRetry={reset} />\n * )}\n * >\n * <App />\n * </ErrorBoundary>\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n override state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n override componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n override componentDidUpdate(previousProps: ErrorBoundaryProps): void {\n if (this.state.error && keysChanged(previousProps.resetKeys, this.props.resetKeys)) {\n this.reset();\n }\n }\n\n reset = (): void => {\n this.setState({ error: null });\n };\n\n override render(): ReactNode {\n const { error } = this.state;\n if (!error) return this.props.children;\n\n const { fallback } = this.props;\n if (typeof fallback === \"function\") {\n return fallback({ error, reset: this.reset });\n }\n return fallback;\n }\n}\n"],"mappings":";;AA4BA,SAAS,EAAY,IAAwB,CAAC,GAAG,IAAwB,CAAC,GAAY;CAClF,IAAI,EAAE,WAAW,EAAE,QAAQ,OAAO;CAClC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAC1B,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO;CAEvC,OAAO;AACX;AAiBA,IAAa,IAAb,cAAmC,EAAkD;CACjF,QAAqC,EAAE,OAAO,KAAK;CAEnD,OAAO,yBAAyB,GAAkC;EAC9D,OAAO,EAAE,SAAM;CACnB;CAEA,kBAA2B,GAAc,GAAuB;EAC5D,KAAK,MAAM,UAAU,GAAO,CAAI;CACpC;CAEA,mBAA4B,GAAyC;EACjE,AAAI,KAAK,MAAM,SAAS,EAAY,EAAc,WAAW,KAAK,MAAM,SAAS,KAC7E,KAAK,MAAM;CAEnB;CAEA,cAAoB;EAChB,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;CACjC;CAEA,SAA6B;EACzB,IAAM,EAAE,aAAU,KAAK;EACvB,IAAI,CAAC,GAAO,OAAO,KAAK,MAAM;EAE9B,IAAM,EAAE,gBAAa,KAAK;EAI1B,OAHI,OAAO,KAAa,aACb,EAAS;GAAE;GAAO,OAAO,KAAK;EAAM,CAAC,IAEzC;CACX;AACJ"}
1
+ {"version":3,"file":"ErrorBoundary.js","names":["keysChanged","a","b","i","ErrorBoundary","Component","error","info","previousProps","fallback"],"sources":["../../src/error-boundary/ErrorBoundary.tsx"],"sourcesContent":["import { Component } from \"react\";\nimport type { ErrorInfo, ReactNode } from \"react\";\n\nexport interface ErrorBoundaryRenderProps {\n error: Error;\n reset: () => void;\n}\n\nexport interface ErrorBoundaryProps {\n children: ReactNode;\n /**\n * Element shown when a descendant throws. Receives the captured error and\n * a `reset` callback that clears the boundary state.\n */\n fallback: ReactNode | ((props: ErrorBoundaryRenderProps) => ReactNode);\n /** Forwarded to your error tracker (Sentry, Datadog, console, etc.). */\n onError?: (error: Error, info: ErrorInfo) => void;\n /**\n * When any value in this array changes, the boundary automatically resets.\n * Useful for clearing the error after a navigation.\n */\n resetKeys?: readonly unknown[];\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nfunction keysChanged(a: readonly unknown[] = [], b: readonly unknown[] = []): boolean {\n if (a.length !== b.length) return true;\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) return true;\n }\n return false;\n}\n\n/**\n * Class-based React error boundary with a render-prop or static fallback.\n * Auto-resets when any value in `resetKeys` changes.\n *\n * @example\n * <ErrorBoundary\n * resetKeys={[location.pathname]}\n * onError={(err) => reportError(err)}\n * fallback={({ error, reset }) => (\n * <ErrorState description={error.message} onRetry={reset} />\n * )}\n * >\n * <App />\n * </ErrorBoundary>\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n override state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n override componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n override componentDidUpdate(previousProps: ErrorBoundaryProps): void {\n if (this.state.error && keysChanged(previousProps.resetKeys, this.props.resetKeys)) {\n this.reset();\n }\n }\n\n reset = (): void => {\n this.setState({ error: null });\n };\n\n override render(): ReactNode {\n const { error } = this.state;\n if (!error) return this.props.children;\n\n const { fallback } = this.props;\n if (typeof fallback === \"function\") {\n return fallback({ error, reset: this.reset });\n }\n return fallback;\n }\n}\n"],"mappings":";;AA4BA,SAASA,EAAY,IAAwB,CAAC,GAAG,IAAwB,CAAC,GAAY;CAClF,IAAIC,EAAE,WAAWC,EAAE,QAAQ,OAAO;CAClC,KAAK,IAAIC,IAAI,GAAGA,IAAIF,EAAE,QAAQ,KAC1B,IAAI,CAAC,OAAO,GAAGA,EAAEE,IAAID,EAAEC,EAAE,GAAG,OAAO;CAEvC,OAAO;AACX;AAiBA,IAAaC,IAAb,cAAmCC,EAAkD;CACjF,QAAqC,EAAE,OAAO,KAAK;CAEnD,OAAO,yBAAyB,GAAkC;EAC9D,OAAO,EAAE,SAAM;CACnB;CAEA,kBAA2B,GAAc,GAAuB;EAC5D,KAAK,MAAM,UAAUC,GAAOC,CAAI;CACpC;CAEA,mBAA4B,GAAyC;EACjE,AAAI,KAAK,MAAM,SAASP,EAAYQ,EAAc,WAAW,KAAK,MAAM,SAAS,KAC7E,KAAK,MAAM;CAEnB;CAEA,cAAoB;EAChB,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;CACjC;CAEA,SAA6B;EACzB,IAAM,EAAE,aAAU,KAAK;EACvB,IAAI,CAACF,GAAO,OAAO,KAAK,MAAM;EAE9B,IAAM,EAAE,gBAAa,KAAK;EAI1B,OAHI,OAAOG,KAAa,aACbA,EAAS;GAAE;GAAO,OAAO,KAAK;EAAM,CAAC,IAEzCA;CACX;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-error-handler.cjs","names":[],"sources":["../../src/error-boundary/use-error-handler.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\n/**\n * Hook that propagates errors to the nearest {@link ErrorBoundary}.\n *\n * React error boundaries only catch errors thrown during render. Async errors\n * (failed mutations, websocket failures, etc.) need to be re-thrown in a\n * render pass — that is what `throwError` does.\n *\n * @example\n * const throwError = useErrorHandler();\n * useEffect(() => {\n * stream.on(\"error\", throwError);\n * }, []);\n */\nexport function useErrorHandler(): (error: unknown) => void {\n const [, setState] = useState<Error | null>(null);\n return useCallback((error: unknown) => {\n setState(() => {\n throw error instanceof Error ? error : new Error(String(error));\n });\n }, []);\n}\n"],"mappings":"uBAeA,SAAgB,GAA4C,CACxD,GAAM,EAAG,IAAA,EAAY,EAAA,SAAA,CAAuB,IAAI,EAChD,OAAA,EAAO,EAAA,YAAA,CAAa,GAAmB,CACnC,MAAe,CACX,MAAM,aAAiB,MAAQ,EAAY,MAAM,OAAO,CAAK,CAAC,CAClE,CAAC,CACL,EAAG,CAAC,CAAC,CACT"}
1
+ {"version":3,"file":"use-error-handler.cjs","names":["useState","useCallback","react","useErrorHandler","setState","error"],"sources":["../../src/error-boundary/use-error-handler.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\n/**\n * Hook that propagates errors to the nearest {@link ErrorBoundary}.\n *\n * React error boundaries only catch errors thrown during render. Async errors\n * (failed mutations, websocket failures, etc.) need to be re-thrown in a\n * render pass — that is what `throwError` does.\n *\n * @example\n * const throwError = useErrorHandler();\n * useEffect(() => {\n * stream.on(\"error\", throwError);\n * }, []);\n */\nexport function useErrorHandler(): (error: unknown) => void {\n const [, setState] = useState<Error | null>(null);\n return useCallback((error: unknown) => {\n setState(() => {\n throw error instanceof Error ? error : new Error(String(error));\n });\n }, []);\n}\n"],"mappings":"A,uBAeA,SAAgBG,GAA4C,CACxD,GAAM,EAAGC,IAAA,EAAYJ,EAAAA,SAAAA,CAAuB,IAAI,EAChD,OAAA,EAAOC,EAAAA,YAAAA,CAAa,GAAmB,CACnCG,MAAe,CACX,MAAMC,aAAiB,MAAQA,EAAY,MAAM,OAAOA,CAAK,CAAC,CAClE,CAAC,CACL,EAAG,CAAC,CAAC,CACT,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-error-handler.js","names":[],"sources":["../../src/error-boundary/use-error-handler.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\n/**\n * Hook that propagates errors to the nearest {@link ErrorBoundary}.\n *\n * React error boundaries only catch errors thrown during render. Async errors\n * (failed mutations, websocket failures, etc.) need to be re-thrown in a\n * render pass — that is what `throwError` does.\n *\n * @example\n * const throwError = useErrorHandler();\n * useEffect(() => {\n * stream.on(\"error\", throwError);\n * }, []);\n */\nexport function useErrorHandler(): (error: unknown) => void {\n const [, setState] = useState<Error | null>(null);\n return useCallback((error: unknown) => {\n setState(() => {\n throw error instanceof Error ? error : new Error(String(error));\n });\n }, []);\n}\n"],"mappings":";;AAeA,SAAgB,IAA4C;CACxD,IAAM,GAAG,KAAY,EAAuB,IAAI;CAChD,OAAO,GAAa,MAAmB;EACnC,QAAe;GACX,MAAM,aAAiB,QAAQ,IAAY,MAAM,OAAO,CAAK,CAAC;EAClE,CAAC;CACL,GAAG,CAAC,CAAC;AACT"}
1
+ {"version":3,"file":"use-error-handler.js","names":["useErrorHandler","setState","useState","useCallback","error"],"sources":["../../src/error-boundary/use-error-handler.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\n/**\n * Hook that propagates errors to the nearest {@link ErrorBoundary}.\n *\n * React error boundaries only catch errors thrown during render. Async errors\n * (failed mutations, websocket failures, etc.) need to be re-thrown in a\n * render pass — that is what `throwError` does.\n *\n * @example\n * const throwError = useErrorHandler();\n * useEffect(() => {\n * stream.on(\"error\", throwError);\n * }, []);\n */\nexport function useErrorHandler(): (error: unknown) => void {\n const [, setState] = useState<Error | null>(null);\n return useCallback((error: unknown) => {\n setState(() => {\n throw error instanceof Error ? error : new Error(String(error));\n });\n }, []);\n}\n"],"mappings":";;AAeA,SAAgBA,IAA4C;CACxD,IAAM,GAAGC,KAAYC,EAAuB,IAAI;CAChD,OAAOC,GAAa,MAAmB;EACnC,QAAe;GACX,MAAMC,aAAiB,QAAQA,IAAY,MAAM,OAAOA,CAAK,CAAC;EAClE,CAAC;CACL,GAAG,CAAC,CAAC;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureFlagsProvider.cjs","names":[],"sources":["../../src/feature-flags/FeatureFlagsProvider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { FeatureFlagsAdapter, FlagValue } from \"./types\";\n\nconst FeatureFlagsContext = createContext<FeatureFlagsAdapter | null>(null);\n\nexport interface FeatureFlagsProviderProps {\n adapter: FeatureFlagsAdapter;\n children: ReactNode;\n}\n\n/** Inject a feature flags adapter into the tree. */\nexport function FeatureFlagsProvider({ adapter, children }: FeatureFlagsProviderProps) {\n const value = useMemo(() => adapter, [adapter]);\n useEffect(() => undefined, [value]);\n return <FeatureFlagsContext.Provider value={value}>{children}</FeatureFlagsContext.Provider>;\n}\n\nfunction useAdapter(): FeatureFlagsAdapter {\n const ctx = useContext(FeatureFlagsContext);\n if (!ctx) throw new Error(\"useFeatureFlag requires <FeatureFlagsProvider>\");\n return ctx;\n}\n\n/**\n * Read a boolean flag and re-render when the adapter fires `onChange`.\n *\n * @example\n * const showNewFeed = useFeatureFlag(\"new-feed\", false);\n */\nexport function useFeatureFlag(key: string, defaultValue = false): boolean {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): boolean => adapter.isEnabled(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n\n/**\n * Read a typed flag value (string / number / boolean / null) and re-render\n * on change.\n */\nexport function useFlagValue<T extends FlagValue = FlagValue>(key: string, defaultValue?: T): T {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): T => adapter.get<T>(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n"],"mappings":"sDAIA,IAAM,GAAA,EAAsB,EAAA,cAAA,CAA0C,IAAI,EAQ1E,SAAgB,EAAqB,CAAE,UAAS,YAAuC,CACnF,IAAM,GAAA,EAAQ,EAAA,QAAA,KAAc,EAAS,CAAC,CAAO,CAAC,EAE9C,OADA,EAAA,EAAA,UAAA,KAAgB,IAAA,GAAW,CAAC,CAAK,CAAC,GAC3B,EAAA,EAAA,IAAA,CAAC,EAAoB,SAArB,CAAqC,QAAQ,UAAuC,CAAA,CAC/F,CAEA,SAAS,GAAkC,CACvC,IAAM,GAAA,EAAM,EAAA,WAAA,CAAW,CAAmB,EAC1C,GAAI,CAAC,EAAK,MAAU,MAAM,gDAAgD,EAC1E,OAAO,CACX,CAQA,SAAgB,EAAe,EAAa,EAAe,GAAgB,CACvE,IAAM,EAAU,EAAW,EACrB,EAAa,GACf,EAAQ,SAAW,EAAQ,SAAS,CAAQ,MAAU,IAAA,GACpD,MAAqB,EAAQ,UAAU,EAAK,CAAY,EAC9D,OAAA,EAAO,EAAA,qBAAA,CAAqB,EAAW,EAAK,CAAG,CACnD,CAMA,SAAgB,EAA8C,EAAa,EAAqB,CAC5F,IAAM,EAAU,EAAW,EACrB,EAAa,GACf,EAAQ,SAAW,EAAQ,SAAS,CAAQ,MAAU,IAAA,GACpD,MAAe,EAAQ,IAAO,EAAK,CAAY,EACrD,OAAA,EAAO,EAAA,qBAAA,CAAqB,EAAW,EAAK,CAAG,CACnD"}
1
+ {"version":3,"file":"FeatureFlagsProvider.cjs","names":["createContext","useMemo","useContext","useSyncExternalStore","react","react_jsx_runtime","FeatureFlagsContext","FeatureFlagsProvider","value","adapter","useAdapter","ctx","useFeatureFlag","subscribe","listener","get","key","defaultValue","useFlagValue"],"sources":["../../src/feature-flags/FeatureFlagsProvider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { FeatureFlagsAdapter, FlagValue } from \"./types\";\n\nconst FeatureFlagsContext = createContext<FeatureFlagsAdapter | null>(null);\n\nexport interface FeatureFlagsProviderProps {\n adapter: FeatureFlagsAdapter;\n children: ReactNode;\n}\n\n/** Inject a feature flags adapter into the tree. */\nexport function FeatureFlagsProvider({ adapter, children }: FeatureFlagsProviderProps) {\n const value = useMemo(() => adapter, [adapter]);\n useEffect(() => undefined, [value]);\n return <FeatureFlagsContext.Provider value={value}>{children}</FeatureFlagsContext.Provider>;\n}\n\nfunction useAdapter(): FeatureFlagsAdapter {\n const ctx = useContext(FeatureFlagsContext);\n if (!ctx) throw new Error(\"useFeatureFlag requires <FeatureFlagsProvider>\");\n return ctx;\n}\n\n/**\n * Read a boolean flag and re-render when the adapter fires `onChange`.\n *\n * @example\n * const showNewFeed = useFeatureFlag(\"new-feed\", false);\n */\nexport function useFeatureFlag(key: string, defaultValue = false): boolean {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): boolean => adapter.isEnabled(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n\n/**\n * Read a typed flag value (string / number / boolean / null) and re-render\n * on change.\n */\nexport function useFlagValue<T extends FlagValue = FlagValue>(key: string, defaultValue?: T): T {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): T => adapter.get<T>(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n"],"mappings":"A,sDAIA,IAAMM,GAAA,EAAsBN,EAAAA,cAAAA,CAA0C,IAAI,EAQ1E,SAAgBO,EAAqB,CAAE,UAAS,YAAuC,CACnF,IAAMC,GAAA,EAAQP,EAAAA,QAAAA,KAAcQ,EAAS,CAACA,CAAO,CAAC,EAE9C,OADA,EAAAL,EAAA,UAAA,KAAgB,IAAA,GAAW,CAACI,CAAK,CAAC,GAC3B,EAAAH,EAAA,IAAA,CAACC,EAAoB,SAArB,CAAqC,QAAQ,UAAuC,CAAA,CAC/F,CAEA,SAASI,GAAkC,CACvC,IAAMC,GAAA,EAAMT,EAAAA,WAAAA,CAAWI,CAAmB,EAC1C,GAAI,CAACK,EAAK,MAAU,MAAM,gDAAgD,EAC1E,OAAOA,CACX,CAQA,SAAgBC,EAAe,EAAa,EAAe,GAAgB,CACvE,IAAMH,EAAUC,EAAW,EACrBG,EAAa,GACfJ,EAAQ,SAAWA,EAAQ,SAASK,CAAQ,MAAU,IAAA,GACpDC,MAAqBN,EAAQ,UAAUO,EAAKC,CAAY,EAC9D,OAAA,EAAOd,EAAAA,qBAAAA,CAAqBU,EAAWE,EAAKA,CAAG,CACnD,CAMA,SAAgBG,EAA8C,EAAa,EAAqB,CAC5F,IAAMT,EAAUC,EAAW,EACrBG,EAAa,GACfJ,EAAQ,SAAWA,EAAQ,SAASK,CAAQ,MAAU,IAAA,GACpDC,MAAeN,EAAQ,IAAOO,EAAKC,CAAY,EACrD,OAAA,EAAOd,EAAAA,qBAAAA,CAAqBU,EAAWE,EAAKA,CAAG,CACnD,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureFlagsProvider.js","names":[],"sources":["../../src/feature-flags/FeatureFlagsProvider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { FeatureFlagsAdapter, FlagValue } from \"./types\";\n\nconst FeatureFlagsContext = createContext<FeatureFlagsAdapter | null>(null);\n\nexport interface FeatureFlagsProviderProps {\n adapter: FeatureFlagsAdapter;\n children: ReactNode;\n}\n\n/** Inject a feature flags adapter into the tree. */\nexport function FeatureFlagsProvider({ adapter, children }: FeatureFlagsProviderProps) {\n const value = useMemo(() => adapter, [adapter]);\n useEffect(() => undefined, [value]);\n return <FeatureFlagsContext.Provider value={value}>{children}</FeatureFlagsContext.Provider>;\n}\n\nfunction useAdapter(): FeatureFlagsAdapter {\n const ctx = useContext(FeatureFlagsContext);\n if (!ctx) throw new Error(\"useFeatureFlag requires <FeatureFlagsProvider>\");\n return ctx;\n}\n\n/**\n * Read a boolean flag and re-render when the adapter fires `onChange`.\n *\n * @example\n * const showNewFeed = useFeatureFlag(\"new-feed\", false);\n */\nexport function useFeatureFlag(key: string, defaultValue = false): boolean {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): boolean => adapter.isEnabled(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n\n/**\n * Read a typed flag value (string / number / boolean / null) and re-render\n * on change.\n */\nexport function useFlagValue<T extends FlagValue = FlagValue>(key: string, defaultValue?: T): T {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): T => adapter.get<T>(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n"],"mappings":";;;AAIA,IAAM,IAAsB,EAA0C,IAAI;AAQ1E,SAAgB,EAAqB,EAAE,YAAS,eAAuC;CACnF,IAAM,IAAQ,QAAc,GAAS,CAAC,CAAO,CAAC;CAE9C,OADA,QAAgB,KAAA,GAAW,CAAC,CAAK,CAAC,GAC3B,kBAAC,EAAoB,UAArB;EAAqC;EAAQ;CAAuC,CAAA;AAC/F;AAEA,SAAS,IAAkC;CACvC,IAAM,IAAM,EAAW,CAAmB;CAC1C,IAAI,CAAC,GAAK,MAAU,MAAM,gDAAgD;CAC1E,OAAO;AACX;AAQA,SAAgB,EAAe,GAAa,IAAe,IAAgB;CACvE,IAAM,IAAU,EAAW,GACrB,KAAa,MACf,EAAQ,WAAW,EAAQ,SAAS,CAAQ,UAAU,KAAA,GACpD,UAAqB,EAAQ,UAAU,GAAK,CAAY;CAC9D,OAAO,EAAqB,GAAW,GAAK,CAAG;AACnD;AAMA,SAAgB,EAA8C,GAAa,GAAqB;CAC5F,IAAM,IAAU,EAAW,GACrB,KAAa,MACf,EAAQ,WAAW,EAAQ,SAAS,CAAQ,UAAU,KAAA,GACpD,UAAe,EAAQ,IAAO,GAAK,CAAY;CACrD,OAAO,EAAqB,GAAW,GAAK,CAAG;AACnD"}
1
+ {"version":3,"file":"FeatureFlagsProvider.js","names":["FeatureFlagsContext","createContext","FeatureFlagsProvider","value","useMemo","adapter","useEffect","useAdapter","ctx","useContext","useFeatureFlag","subscribe","listener","get","key","defaultValue","useSyncExternalStore","useFlagValue"],"sources":["../../src/feature-flags/FeatureFlagsProvider.tsx"],"sourcesContent":["import { createContext, useContext, useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { FeatureFlagsAdapter, FlagValue } from \"./types\";\n\nconst FeatureFlagsContext = createContext<FeatureFlagsAdapter | null>(null);\n\nexport interface FeatureFlagsProviderProps {\n adapter: FeatureFlagsAdapter;\n children: ReactNode;\n}\n\n/** Inject a feature flags adapter into the tree. */\nexport function FeatureFlagsProvider({ adapter, children }: FeatureFlagsProviderProps) {\n const value = useMemo(() => adapter, [adapter]);\n useEffect(() => undefined, [value]);\n return <FeatureFlagsContext.Provider value={value}>{children}</FeatureFlagsContext.Provider>;\n}\n\nfunction useAdapter(): FeatureFlagsAdapter {\n const ctx = useContext(FeatureFlagsContext);\n if (!ctx) throw new Error(\"useFeatureFlag requires <FeatureFlagsProvider>\");\n return ctx;\n}\n\n/**\n * Read a boolean flag and re-render when the adapter fires `onChange`.\n *\n * @example\n * const showNewFeed = useFeatureFlag(\"new-feed\", false);\n */\nexport function useFeatureFlag(key: string, defaultValue = false): boolean {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): boolean => adapter.isEnabled(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n\n/**\n * Read a typed flag value (string / number / boolean / null) and re-render\n * on change.\n */\nexport function useFlagValue<T extends FlagValue = FlagValue>(key: string, defaultValue?: T): T {\n const adapter = useAdapter();\n const subscribe = (listener: () => void): (() => void) =>\n adapter.onChange ? adapter.onChange(listener) : () => undefined;\n const get = (): T => adapter.get<T>(key, defaultValue);\n return useSyncExternalStore(subscribe, get, get);\n}\n"],"mappings":";;;AAIA,IAAMA,IAAsBC,EAA0C,IAAI;AAQ1E,SAAgBC,EAAqB,EAAE,YAAS,eAAuC;CACnF,IAAMC,IAAQC,QAAcC,GAAS,CAACA,CAAO,CAAC;CAE9C,OADAC,QAAgB,KAAA,GAAW,CAACH,CAAK,CAAC,GAC3B,kBAACH,EAAoB,UAArB;EAAqC;EAAQ;CAAuC,CAAA;AAC/F;AAEA,SAASO,IAAkC;CACvC,IAAMC,IAAMC,EAAWT,CAAmB;CAC1C,IAAI,CAACQ,GAAK,MAAU,MAAM,gDAAgD;CAC1E,OAAOA;AACX;AAQA,SAAgBE,EAAe,GAAa,IAAe,IAAgB;CACvE,IAAML,IAAUE,EAAW,GACrBI,KAAa,MACfN,EAAQ,WAAWA,EAAQ,SAASO,CAAQ,UAAU,KAAA,GACpDC,UAAqBR,EAAQ,UAAUS,GAAKC,CAAY;CAC9D,OAAOC,EAAqBL,GAAWE,GAAKA,CAAG;AACnD;AAMA,SAAgBI,EAA8C,GAAa,GAAqB;CAC5F,IAAMZ,IAAUE,EAAW,GACrBI,KAAa,MACfN,EAAQ,WAAWA,EAAQ,SAASO,CAAQ,UAAU,KAAA,GACpDC,UAAeR,EAAQ,IAAOS,GAAKC,CAAY;CACrD,OAAOC,EAAqBL,GAAWE,GAAKA,CAAG;AACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"growthbook-adapter.cjs","names":[],"sources":["../../src/feature-flags/growthbook-adapter.ts"],"sourcesContent":["import type { FeatureFlagsAdapter, FlagValue } from \"./types\";\n\n/**\n * Minimal subset of [`@growthbook/growthbook`](https://docs.growthbook.io/lib/js)\n * used by the adapter. Pass a `GrowthBook` instance directly.\n */\nexport interface GrowthBookLike {\n isOn: (key: string) => boolean;\n getFeatureValue: <T>(key: string, defaultValue: T) => T;\n /** Registers a renderer fired whenever GrowthBook re-evaluates features. */\n setRenderer?: (renderer: () => void) => void;\n}\n\nexport interface CreateGrowthBookFeatureFlagsAdapterOptions {\n /** The GrowthBook instance. Required. */\n growthbook: GrowthBookLike;\n}\n\n/**\n * Build a [[FeatureFlagsAdapter]] backed by a GrowthBook instance. Apps\n * initialise GrowthBook themselves (so they can load features over the\n * network, set attributes, etc.) — the adapter just routes lookups.\n *\n * Mapping:\n * - `isEnabled(key, default)` → `growthbook.isOn(key)` (falls back to `default` if no value)\n * - `get(key, default)` → `growthbook.getFeatureValue(key, default)`\n * - `onChange(listener)` → `growthbook.setRenderer(listener)` (single-renderer SDK constraint)\n *\n * @example\n * import { GrowthBook } from \"@growthbook/growthbook\";\n * import { FeatureFlagsProvider, createGrowthBookFeatureFlagsAdapter } from \"tempest-react-sdk\";\n *\n * const gb = new GrowthBook({ apiHost: \"...\", clientKey: \"...\" });\n * await gb.loadFeatures();\n * const adapter = createGrowthBookFeatureFlagsAdapter({ growthbook: gb });\n *\n * <FeatureFlagsProvider adapter={adapter}><App /></FeatureFlagsProvider>;\n */\nexport function createGrowthBookFeatureFlagsAdapter(\n options: CreateGrowthBookFeatureFlagsAdapterOptions,\n): FeatureFlagsAdapter {\n const { growthbook } = options;\n const listeners = new Set<() => void>();\n let rendererInstalled = false;\n\n function ensureRenderer(): void {\n if (rendererInstalled || !growthbook.setRenderer) return;\n rendererInstalled = true;\n growthbook.setRenderer(() => {\n for (const listener of listeners) listener();\n });\n }\n\n return {\n isEnabled(key: string, defaultValue = false) {\n const value = growthbook.isOn(key);\n if (typeof value === \"boolean\") return value;\n return defaultValue;\n },\n get<T extends FlagValue = FlagValue>(key: string, defaultValue?: T): T {\n return growthbook.getFeatureValue(key, defaultValue as T);\n },\n onChange(listener) {\n ensureRenderer();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n"],"mappings":"AAsCA,SAAgB,EACZ,EACmB,CACnB,GAAM,CAAE,cAAe,EACjB,EAAY,IAAI,IAClB,EAAoB,GAExB,SAAS,GAAuB,CACxB,IAAsB,EAAW,cACrC,EAAoB,GACpB,EAAW,gBAAkB,CACzB,IAAK,IAAM,KAAY,EAAW,EAAS,CAC/C,CAAC,EACL,CAEA,MAAO,CACH,UAAU,EAAa,EAAe,GAAO,CACzC,IAAM,EAAQ,EAAW,KAAK,CAAG,EAEjC,OADI,OAAO,GAAU,UAAkB,EAChC,CACX,EACA,IAAqC,EAAa,EAAqB,CACnE,OAAO,EAAW,gBAAgB,EAAK,CAAiB,CAC5D,EACA,SAAS,EAAU,CAGf,OAFA,EAAe,EACf,EAAU,IAAI,CAAQ,MACT,CACT,EAAU,OAAO,CAAQ,CAC7B,CACJ,CACJ,CACJ"}
1
+ {"version":3,"file":"growthbook-adapter.cjs","names":["createGrowthBookFeatureFlagsAdapter","options","listeners","rendererInstalled","ensureRenderer","growthbook","listener","value","key","defaultValue"],"sources":["../../src/feature-flags/growthbook-adapter.ts"],"sourcesContent":["import type { FeatureFlagsAdapter, FlagValue } from \"./types\";\n\n/**\n * Minimal subset of [`@growthbook/growthbook`](https://docs.growthbook.io/lib/js)\n * used by the adapter. Pass a `GrowthBook` instance directly.\n */\nexport interface GrowthBookLike {\n isOn: (key: string) => boolean;\n getFeatureValue: <T>(key: string, defaultValue: T) => T;\n /** Registers a renderer fired whenever GrowthBook re-evaluates features. */\n setRenderer?: (renderer: () => void) => void;\n}\n\nexport interface CreateGrowthBookFeatureFlagsAdapterOptions {\n /** The GrowthBook instance. Required. */\n growthbook: GrowthBookLike;\n}\n\n/**\n * Build a [[FeatureFlagsAdapter]] backed by a GrowthBook instance. Apps\n * initialise GrowthBook themselves (so they can load features over the\n * network, set attributes, etc.) — the adapter just routes lookups.\n *\n * Mapping:\n * - `isEnabled(key, default)` → `growthbook.isOn(key)` (falls back to `default` if no value)\n * - `get(key, default)` → `growthbook.getFeatureValue(key, default)`\n * - `onChange(listener)` → `growthbook.setRenderer(listener)` (single-renderer SDK constraint)\n *\n * @example\n * import { GrowthBook } from \"@growthbook/growthbook\";\n * import { FeatureFlagsProvider, createGrowthBookFeatureFlagsAdapter } from \"tempest-react-sdk\";\n *\n * const gb = new GrowthBook({ apiHost: \"...\", clientKey: \"...\" });\n * await gb.loadFeatures();\n * const adapter = createGrowthBookFeatureFlagsAdapter({ growthbook: gb });\n *\n * <FeatureFlagsProvider adapter={adapter}><App /></FeatureFlagsProvider>;\n */\nexport function createGrowthBookFeatureFlagsAdapter(\n options: CreateGrowthBookFeatureFlagsAdapterOptions,\n): FeatureFlagsAdapter {\n const { growthbook } = options;\n const listeners = new Set<() => void>();\n let rendererInstalled = false;\n\n function ensureRenderer(): void {\n if (rendererInstalled || !growthbook.setRenderer) return;\n rendererInstalled = true;\n growthbook.setRenderer(() => {\n for (const listener of listeners) listener();\n });\n }\n\n return {\n isEnabled(key: string, defaultValue = false) {\n const value = growthbook.isOn(key);\n if (typeof value === \"boolean\") return value;\n return defaultValue;\n },\n get<T extends FlagValue = FlagValue>(key: string, defaultValue?: T): T {\n return growthbook.getFeatureValue(key, defaultValue as T);\n },\n onChange(listener) {\n ensureRenderer();\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n"],"mappings":"AAsCA,SAAgBA,EACZ,EACmB,CACnB,GAAM,CAAE,cAAeC,EACjBC,EAAY,IAAI,IAClBC,EAAoB,GAExB,SAASC,GAAuB,CACxB,IAAsBC,EAAW,cACrC,EAAoB,GACpBA,EAAW,gBAAkB,CACzB,IAAK,IAAMC,KAAYJ,EAAWI,EAAS,CAC/C,CAAC,EACL,CAEA,MAAO,CACH,UAAU,EAAa,EAAe,GAAO,CACzC,IAAMC,EAAQF,EAAW,KAAKG,CAAG,EAEjC,OADI,OAAOD,GAAU,UAAkBA,EAChCE,CACX,EACA,IAAqC,EAAa,EAAqB,CACnE,OAAOJ,EAAW,gBAAgBG,EAAKC,CAAiB,CAC5D,EACA,SAAS,EAAU,CAGf,OAFAL,EAAe,EACfF,EAAU,IAAII,CAAQ,MACT,CACTJ,EAAU,OAAOI,CAAQ,CAC7B,CACJ,CACJ,CACJ,C"}