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":"tokenize.js","names":[],"sources":["../../../src/components/CodeBlock/tokenize.ts"],"sourcesContent":["/** What a token is painted as. */\nexport type TokenKind =\n | \"plain\"\n | \"comment\"\n | \"string\"\n | \"number\"\n | \"keyword\"\n | \"literal\"\n | \"function\"\n | \"punctuation\"\n | \"tag\"\n | \"attribute\"\n | \"property\";\n\nexport interface Token {\n kind: TokenKind;\n value: string;\n}\n\n/** Languages the tokenizer knows. Anything else renders as plain text. */\nexport type CodeLanguage =\n | \"typescript\"\n | \"javascript\"\n | \"tsx\"\n | \"jsx\"\n | \"json\"\n | \"css\"\n | \"html\"\n | \"bash\"\n | \"python\"\n | \"sql\"\n | \"plain\";\n\n/** Aliases people actually type, mapped onto the grammars above. */\nconst ALIASES: Record<string, CodeLanguage> = {\n ts: \"typescript\",\n typescript: \"typescript\",\n js: \"javascript\",\n javascript: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n tsx: \"tsx\",\n jsx: \"jsx\",\n json: \"json\",\n jsonc: \"json\",\n css: \"css\",\n scss: \"css\",\n html: \"html\",\n xml: \"html\",\n svg: \"html\",\n sh: \"bash\",\n bash: \"bash\",\n shell: \"bash\",\n zsh: \"bash\",\n console: \"bash\",\n py: \"python\",\n python: \"python\",\n sql: \"sql\",\n};\n\n/**\n * Normalise a language name onto a known grammar.\n *\n * @param language - Whatever the caller passed, e.g. `\"ts\"` or `\"Shell\"`.\n * @returns The grammar to use; `\"plain\"` when there is no match.\n */\nexport function resolveLanguage(language: string | undefined): CodeLanguage {\n if (!language) return \"plain\";\n return ALIASES[language.toLowerCase()] ?? \"plain\";\n}\n\n/** One grammar rule: a sticky pattern and the kind it produces. */\ninterface Rule {\n kind: TokenKind;\n pattern: RegExp;\n}\n\nconst JS_KEYWORDS =\n \"as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|keyof|let|new|of|private|protected|public|readonly|return|satisfies|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield\";\n\nconst JS_LITERALS = \"true|false|null|undefined|NaN|Infinity\";\n\n/**\n * Rules per grammar, tried in order at each position.\n *\n * Order carries meaning: comments and strings come first so a keyword inside a\n * string stays a string. Every pattern is sticky (`y`) and anchored by\n * `lastIndex`, so a rule can only match where the scanner currently stands.\n *\n * Every string and comment pattern makes its closing delimiter **optional** —\n * `\"...\"?`, `/*...*?` / `<!--...--?` — so an unterminated opener is consumed as a\n * single token instead of failing and being rescanned from the next opener.\n * Without that, a `\"` followed by many escaped quotes was re-read to the end of\n * the input from each opening quote, quadratic in the input (#477).\n *\n * A well-formed string that closes on a later line stays one token where the\n * language allows the newline: bash, SQL, HTML and the JavaScript template\n * literal carry a raw `\\n`, and every grammar lets an escape cross the line feed\n * (`\\\\[\\s\\S]`), so `\"a\\` + LF + `b\"` is one string. A quote string that cannot\n * hold a raw newline — the JavaScript and JSON `\"`/`'`, CSS, the Python\n * `\"`/`'` — still ends at the line when it is unterminated, which is the only\n * case the optional close cuts at the line. A JSX attribute value is the\n * exception in the JavaScript family: `=\"…\"` has its own rule, ahead of the\n * plain JS strings, so it may hold a raw line feed — `<input placeholder=\"a` +\n * LF + `b\">` is one string where the plain JS rule would have ended it at the\n * line. The rule matches at the `=` and looks behind for it, so `=` keeps its\n * paint; `(?<==\\s)` covers the spaced `= \"…\"` form too.\n *\n * Each grammar also ends with a `plain` rule that consumes a run of identifier\n * characters in one step. The rules that need a lookahead — the JavaScript\n * `function`, the HTML `attribute`, the CSS `property` and `function`, the\n * Python `function` — match a whole run and then fail if the character after it\n * is not the expected one; with only `at++` to fall back on, the scanner retried\n * that run from every character in it. A code fence holding a long run of word\n * characters and no punctuation (a base64 blob, a minified token) took 6 s at\n * 80 KB and 25 s at 160 KB; the fallback consumes the run once, so the scan\n * stays linear (#477 sweep).\n *\n * The `plain` rule matches an identifier run while the scanner's fallback\n * collects whatever no rule matched, so one plain stretch arrives in pieces;\n * `tokenize` fuses adjacent `plain` tokens back into one, which is the array\n * shape — and the one span per run — that predates the fallback (#477).\n *\n * The JavaScript fallback does **not** start at `$` — it takes a `$` run and an\n * identifier run separately — so a leading `$type`, `$default` and `$this` keep\n * the `$` plain and the name a keyword. Inside an identifier the `$` is an\n * ordinary character, so `foo$this`, `a$true` and `x$1` are one `plain` token\n * instead of painting `this`, `true` and `1` out of them; the `'` string rule\n * carries the same boundary in a lookbehind, so an apostrophe in prose\n * (`Don't`) does not open a string that runs to the end of the input.\n *\n * The same boundary closes the JavaScript keyword, literal and number rules:\n * they end at `(?![\\w$])` rather than `\\b`, because `\\b` holds before a `$`, so\n * `if$foo` would paint `if` and leave the scanner standing on the `$` in the\n * middle of the identifier. The `function` rule only starts where no identifier\n * character precedes it (`(?<![\\w$])`). Without that lookbehind a rule that\n * stopped inside a run — the leading-`$` split above stops at every `$1` of\n * `$1$1$1…` — handed the rest of the run to `function`, which read it to the end\n * and failed for want of a `(`, once per `$`: 80 KB of `$1` took 2.8 s and\n * 120 KB of `if$` 4.2 s (#498). With both boundaries every rule that can start\n * inside a run fails at once or consumes a bounded piece of it, so each run is\n * read a constant number of times and `if$foo(`, `this$x(` and `true$y(` paint\n * as the one called identifier they are.\n *\n * The CSS `property` and `function` rules match a whole word where it stands —\n * `font-size` and `translate3d` paint as one token rather than splitting the\n * tail — and a `#rgb`/`#rrggbb` colour paints as a number. A word before a\n * colon only counts as a property when the colon starts a value boundary\n * (whitespace, `;`, `}`): after a `.`/`#`/`(`/`,`/`>`/`+`/`~`/`:` it is a\n * selector, and when the colon is followed by an identifier character it could\n * be a pseudo-class (`li:hover`) or a declaration with no space (`color:red`) —\n * neither can be told apart without a parser, so both stay `plain`, which is\n * what `origin/main` painted (`#477`).\n */\nconst GRAMMARS: Record<CodeLanguage, Rule[]> = {\n typescript: jsRules(false),\n javascript: jsRules(false),\n tsx: jsRules(true),\n jsx: jsRules(true),\n json: [\n { kind: \"property\", pattern: /\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"(?=\\s*:)/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?/y },\n { kind: \"number\", pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/y },\n { kind: \"literal\", pattern: /\\b(?:true|false|null)\\b/y },\n { kind: \"punctuation\", pattern: /[{}[\\],:]/y },\n ],\n css: [\n { kind: \"comment\", pattern: /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?|'(?:[^'\\\\\\n]|\\\\[\\s\\S])*'?/y },\n { kind: \"keyword\", pattern: /@[a-zA-Z-]+/y },\n { kind: \"property\", pattern: /(?<![.#[\\](),>+~:])[\\w-]+(?=\\s*:(?![\\w/:]))/y },\n { kind: \"function\", pattern: /[\\w-]+(?=\\()/y },\n { kind: \"number\", pattern: /#[0-9a-fA-F]{3,8}\\b/y },\n { kind: \"number\", pattern: /(?<![\\w-])-?\\d+(?:\\.\\d+)?(?:px|rem|em|%|s|ms|vh|vw|fr|deg)?/y },\n { kind: \"punctuation\", pattern: /[{}();:,>+~]/y },\n { kind: \"plain\", pattern: /[\\w-]+/y },\n ],\n html: [\n { kind: \"comment\", pattern: /<!--[\\s\\S]*?(?:-->|$)/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"?|'(?:[^'\\\\]|\\\\[\\s\\S])*'?/y },\n { kind: \"tag\", pattern: /<\\/?[a-zA-Z][\\w:-]*/y },\n { kind: \"attribute\", pattern: /[a-zA-Z][\\w:-]*(?==)/y },\n { kind: \"punctuation\", pattern: /\\/?>|=/y },\n { kind: \"plain\", pattern: /[a-zA-Z][\\w:-]*/y },\n ],\n bash: [\n { kind: \"comment\", pattern: /#[^\\n]*/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"?|'[^']*'?/y },\n {\n kind: \"keyword\",\n pattern:\n /\\b(?:if|then|else|elif|fi|for|while|do|done|case|esac|function|return|export|local|source|set|cd|echo)\\b/y,\n },\n { kind: \"property\", pattern: /\\$\\{?[A-Za-z_][\\w]*\\}?/y },\n { kind: \"attribute\", pattern: /(?<=\\s)--?[a-zA-Z][\\w-]*/y },\n { kind: \"punctuation\", pattern: /[|&;()<>]/y },\n ],\n python: [\n { kind: \"comment\", pattern: /#[^\\n]*/y },\n {\n kind: \"string\",\n pattern:\n /\"\"\"[\\s\\S]*?(?:\"\"\"|$)|'''[\\s\\S]*?(?:'''|$)|\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?|'(?:[^'\\\\\\n]|\\\\[\\s\\S])*'?/y,\n },\n {\n kind: \"keyword\",\n pattern:\n /\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|raise|return|try|while|with|yield)\\b/y,\n },\n { kind: \"literal\", pattern: /\\b(?:True|False|None|self)\\b/y },\n { kind: \"number\", pattern: /\\b\\d+(?:\\.\\d+)?\\b/y },\n { kind: \"function\", pattern: /[A-Za-z_]\\w*(?=\\()/y },\n { kind: \"punctuation\", pattern: /[{}[\\]().,:;=+\\-*/<>!]/y },\n { kind: \"plain\", pattern: /[A-Za-z_]\\w*/y },\n ],\n sql: [\n { kind: \"comment\", pattern: /--[^\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y },\n { kind: \"string\", pattern: /'(?:[^']|'')*'?/y },\n {\n kind: \"keyword\",\n // Case-insensitive: SQL is written both ways and both should paint.\n pattern:\n /\\b(?:select|from|where|insert|into|values|update|set|delete|create|table|alter|drop|index|join|inner|left|right|outer|on|group|by|order|having|limit|offset|as|and|or|not|in|is|null|distinct|union|all|with|returning|primary|key|foreign|references|default)\\b/iy,\n },\n { kind: \"number\", pattern: /\\b\\d+(?:\\.\\d+)?\\b/y },\n { kind: \"punctuation\", pattern: /[(),;*=<>]/y },\n ],\n plain: [],\n};\n\n/** The shared JavaScript-family rules, with JSX tags added for tsx/jsx. */\nfunction jsRules(withJsx: boolean): Rule[] {\n const rules: Rule[] = [\n { kind: \"comment\", pattern: /\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y },\n {\n kind: \"string\",\n pattern:\n /`(?:[^`\\\\]|\\\\[\\s\\S])*`?|\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?|(?<![\\w$])'(?:[^'\\\\\\n]|\\\\[\\s\\S])*'?/y,\n },\n { kind: \"keyword\", pattern: new RegExp(`\\\\b(?:${JS_KEYWORDS})(?![\\\\w$])`, \"y\") },\n { kind: \"literal\", pattern: new RegExp(`\\\\b(?:${JS_LITERALS})(?![\\\\w$])`, \"y\") },\n {\n kind: \"number\",\n pattern: /\\b(?:0[xX][\\da-fA-F_]+|\\d[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+-]?\\d+)?)(?![\\w$])/y,\n },\n { kind: \"function\", pattern: /(?<![\\w$])[A-Za-z_$][\\w$]*(?=\\s*\\()/y },\n { kind: \"punctuation\", pattern: /[{}[\\]().,;:?!=<>+\\-*/%&|^~]/y },\n { kind: \"plain\", pattern: /(?:[A-Za-z_][\\w$]*|\\$+)/y },\n ];\n if (withJsx) {\n rules.splice(\n 1,\n 0,\n { kind: \"string\", pattern: /(?:(?<==)|(?<==\\s))\"[^\"]*\"?/y },\n { kind: \"string\", pattern: /(?:(?<==)|(?<==\\s))'[^']*'?/y },\n );\n rules.splice(4, 0, { kind: \"tag\", pattern: /<\\/?[A-Za-z][\\w.]*|\\/>/y });\n }\n return rules;\n}\n\n/**\n * Split source into coloured tokens.\n *\n * This is a **scanner, not a parser**: it recognises comments, strings, numbers,\n * keywords and punctuation by pattern, and knows nothing about scope, types or\n * grammar. That is a deliberate ceiling. A real parser per language is a\n * dependency the size of the rest of the SDK, and the payoff — being right about\n * the corner cases in a documentation snippet — is small. Where it is unsure it\n * emits `plain`, which renders as ordinary text rather than as something wrong.\n *\n * Unknown languages produce a single `plain` token, so an unhighlighted block is\n * a normal outcome and never an error.\n *\n * The scan is linear in the source: an unterminated string or comment becomes a\n * single token that runs to its close, or to the end of the input — or, for a\n * quote that cannot hold a newline and never closes, to the end of the line — so\n * the openers inside it are never rescanned (#477).\n *\n * @param code - The source.\n * @param language - Grammar name or alias.\n * @returns Tokens covering the input exactly, in order.\n *\n * @example\n * tokenize(\"const x = 1;\", \"ts\");\n * // [{kind: \"keyword\", value: \"const\"}, {kind: \"plain\", value: \" \"}, …]\n */\nexport function tokenize(code: string, language: string | undefined): Token[] {\n const rules = GRAMMARS[resolveLanguage(language)];\n if (rules.length === 0) return code === \"\" ? [] : [{ kind: \"plain\", value: code }];\n\n const tokens: Token[] = [];\n let plainFrom = 0;\n let at = 0;\n\n /**\n * Append a token, fusing it with the previous one when both are `plain`.\n *\n * The `plain` rule matches an identifier run while the scanner's fallback\n * collects the characters no rule matched, so one plain stretch of source\n * arrives in pieces. Fusing them keeps the array shape `origin/main`\n * produced, where a plain run was a single token and each got one span in\n * the DOM rather than one per identifier (#477).\n */\n const push = (token: Token) => {\n const last = tokens[tokens.length - 1];\n if (last && last.kind === \"plain\" && token.kind === \"plain\") {\n last.value += token.value;\n } else {\n tokens.push(token);\n }\n };\n\n const flushPlain = (until: number) => {\n if (until > plainFrom) push({ kind: \"plain\", value: code.slice(plainFrom, until) });\n };\n\n while (at < code.length) {\n let matched: Token | null = null;\n for (const rule of rules) {\n rule.pattern.lastIndex = at;\n const found = rule.pattern.exec(code);\n if (found && found[0].length > 0) {\n matched = { kind: rule.kind, value: found[0] };\n break;\n }\n }\n if (matched) {\n flushPlain(at);\n push(matched);\n at += matched.value.length;\n plainFrom = at;\n } else {\n at++;\n }\n }\n flushPlain(code.length);\n return tokens;\n}\n\n/**\n * The same tokens, split at newlines so each line can be rendered on its own.\n *\n * Line numbers and highlighted lines both need a per-line structure, and a token\n * is free to span a line break — a block comment usually does. Splitting here\n * keeps that out of the component.\n *\n * @param code - The source.\n * @param language - Grammar name or alias.\n * @returns One token array per line. Always at least one line.\n */\nexport function tokenizeLines(code: string, language: string | undefined): Token[][] {\n const lines: Token[][] = [[]];\n for (const token of tokenize(code, language)) {\n const pieces = token.value.split(\"\\n\");\n pieces.forEach((piece, index) => {\n if (index > 0) lines.push([]);\n if (piece !== \"\") lines[lines.length - 1].push({ kind: token.kind, value: piece });\n });\n }\n return lines;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tokenize.js","names":["ALIASES","resolveLanguage","language","JS_KEYWORDS","JS_LITERALS","GRAMMARS","jsRules","rules","withJsx","tokenize","code","tokens","plainFrom","at","push","last","token","flushPlain","until","matched","rule","found","tokenizeLines","lines","index","piece"],"sources":["../../../src/components/CodeBlock/tokenize.ts"],"sourcesContent":["/** What a token is painted as. */\nexport type TokenKind =\n | \"plain\"\n | \"comment\"\n | \"string\"\n | \"number\"\n | \"keyword\"\n | \"literal\"\n | \"function\"\n | \"punctuation\"\n | \"tag\"\n | \"attribute\"\n | \"property\";\n\nexport interface Token {\n kind: TokenKind;\n value: string;\n}\n\n/** Languages the tokenizer knows. Anything else renders as plain text. */\nexport type CodeLanguage =\n | \"typescript\"\n | \"javascript\"\n | \"tsx\"\n | \"jsx\"\n | \"json\"\n | \"css\"\n | \"html\"\n | \"bash\"\n | \"python\"\n | \"sql\"\n | \"plain\";\n\n/** Aliases people actually type, mapped onto the grammars above. */\nconst ALIASES: Record<string, CodeLanguage> = {\n ts: \"typescript\",\n typescript: \"typescript\",\n js: \"javascript\",\n javascript: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n tsx: \"tsx\",\n jsx: \"jsx\",\n json: \"json\",\n jsonc: \"json\",\n css: \"css\",\n scss: \"css\",\n html: \"html\",\n xml: \"html\",\n svg: \"html\",\n sh: \"bash\",\n bash: \"bash\",\n shell: \"bash\",\n zsh: \"bash\",\n console: \"bash\",\n py: \"python\",\n python: \"python\",\n sql: \"sql\",\n};\n\n/**\n * Normalise a language name onto a known grammar.\n *\n * @param language - Whatever the caller passed, e.g. `\"ts\"` or `\"Shell\"`.\n * @returns The grammar to use; `\"plain\"` when there is no match.\n */\nexport function resolveLanguage(language: string | undefined): CodeLanguage {\n if (!language) return \"plain\";\n return ALIASES[language.toLowerCase()] ?? \"plain\";\n}\n\n/** One grammar rule: a sticky pattern and the kind it produces. */\ninterface Rule {\n kind: TokenKind;\n pattern: RegExp;\n}\n\nconst JS_KEYWORDS =\n \"as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|keyof|let|new|of|private|protected|public|readonly|return|satisfies|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield\";\n\nconst JS_LITERALS = \"true|false|null|undefined|NaN|Infinity\";\n\n/**\n * Rules per grammar, tried in order at each position.\n *\n * Order carries meaning: comments and strings come first so a keyword inside a\n * string stays a string. Every pattern is sticky (`y`) and anchored by\n * `lastIndex`, so a rule can only match where the scanner currently stands.\n *\n * Every string and comment pattern makes its closing delimiter **optional** —\n * `\"...\"?`, `/*...*?` / `<!--...--?` — so an unterminated opener is consumed as a\n * single token instead of failing and being rescanned from the next opener.\n * Without that, a `\"` followed by many escaped quotes was re-read to the end of\n * the input from each opening quote, quadratic in the input (#477).\n *\n * A well-formed string that closes on a later line stays one token where the\n * language allows the newline: bash, SQL, HTML and the JavaScript template\n * literal carry a raw `\\n`, and every grammar lets an escape cross the line feed\n * (`\\\\[\\s\\S]`), so `\"a\\` + LF + `b\"` is one string. A quote string that cannot\n * hold a raw newline — the JavaScript and JSON `\"`/`'`, CSS, the Python\n * `\"`/`'` — still ends at the line when it is unterminated, which is the only\n * case the optional close cuts at the line. A JSX attribute value is the\n * exception in the JavaScript family: `=\"…\"` has its own rule, ahead of the\n * plain JS strings, so it may hold a raw line feed — `<input placeholder=\"a` +\n * LF + `b\">` is one string where the plain JS rule would have ended it at the\n * line. The rule matches at the `=` and looks behind for it, so `=` keeps its\n * paint; `(?<==\\s)` covers the spaced `= \"…\"` form too.\n *\n * Each grammar also ends with a `plain` rule that consumes a run of identifier\n * characters in one step. The rules that need a lookahead — the JavaScript\n * `function`, the HTML `attribute`, the CSS `property` and `function`, the\n * Python `function` — match a whole run and then fail if the character after it\n * is not the expected one; with only `at++` to fall back on, the scanner retried\n * that run from every character in it. A code fence holding a long run of word\n * characters and no punctuation (a base64 blob, a minified token) took 6 s at\n * 80 KB and 25 s at 160 KB; the fallback consumes the run once, so the scan\n * stays linear (#477 sweep).\n *\n * The `plain` rule matches an identifier run while the scanner's fallback\n * collects whatever no rule matched, so one plain stretch arrives in pieces;\n * `tokenize` fuses adjacent `plain` tokens back into one, which is the array\n * shape — and the one span per run — that predates the fallback (#477).\n *\n * The JavaScript fallback does **not** start at `$` — it takes a `$` run and an\n * identifier run separately — so a leading `$type`, `$default` and `$this` keep\n * the `$` plain and the name a keyword. Inside an identifier the `$` is an\n * ordinary character, so `foo$this`, `a$true` and `x$1` are one `plain` token\n * instead of painting `this`, `true` and `1` out of them; the `'` string rule\n * carries the same boundary in a lookbehind, so an apostrophe in prose\n * (`Don't`) does not open a string that runs to the end of the input.\n *\n * The same boundary closes the JavaScript keyword, literal and number rules:\n * they end at `(?![\\w$])` rather than `\\b`, because `\\b` holds before a `$`, so\n * `if$foo` would paint `if` and leave the scanner standing on the `$` in the\n * middle of the identifier. The `function` rule only starts where no identifier\n * character precedes it (`(?<![\\w$])`). Without that lookbehind a rule that\n * stopped inside a run — the leading-`$` split above stops at every `$1` of\n * `$1$1$1…` — handed the rest of the run to `function`, which read it to the end\n * and failed for want of a `(`, once per `$`: 80 KB of `$1` took 2.8 s and\n * 120 KB of `if$` 4.2 s (#498). With both boundaries every rule that can start\n * inside a run fails at once or consumes a bounded piece of it, so each run is\n * read a constant number of times and `if$foo(`, `this$x(` and `true$y(` paint\n * as the one called identifier they are.\n *\n * The CSS `property` and `function` rules match a whole word where it stands —\n * `font-size` and `translate3d` paint as one token rather than splitting the\n * tail — and a `#rgb`/`#rrggbb` colour paints as a number. A word before a\n * colon only counts as a property when the colon starts a value boundary\n * (whitespace, `;`, `}`): after a `.`/`#`/`(`/`,`/`>`/`+`/`~`/`:` it is a\n * selector, and when the colon is followed by an identifier character it could\n * be a pseudo-class (`li:hover`) or a declaration with no space (`color:red`) —\n * neither can be told apart without a parser, so both stay `plain`, which is\n * what `origin/main` painted (`#477`).\n */\nconst GRAMMARS: Record<CodeLanguage, Rule[]> = {\n typescript: jsRules(false),\n javascript: jsRules(false),\n tsx: jsRules(true),\n jsx: jsRules(true),\n json: [\n { kind: \"property\", pattern: /\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"(?=\\s*:)/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?/y },\n { kind: \"number\", pattern: /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/y },\n { kind: \"literal\", pattern: /\\b(?:true|false|null)\\b/y },\n { kind: \"punctuation\", pattern: /[{}[\\],:]/y },\n ],\n css: [\n { kind: \"comment\", pattern: /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?|'(?:[^'\\\\\\n]|\\\\[\\s\\S])*'?/y },\n { kind: \"keyword\", pattern: /@[a-zA-Z-]+/y },\n { kind: \"property\", pattern: /(?<![.#[\\](),>+~:])[\\w-]+(?=\\s*:(?![\\w/:]))/y },\n { kind: \"function\", pattern: /[\\w-]+(?=\\()/y },\n { kind: \"number\", pattern: /#[0-9a-fA-F]{3,8}\\b/y },\n { kind: \"number\", pattern: /(?<![\\w-])-?\\d+(?:\\.\\d+)?(?:px|rem|em|%|s|ms|vh|vw|fr|deg)?/y },\n { kind: \"punctuation\", pattern: /[{}();:,>+~]/y },\n { kind: \"plain\", pattern: /[\\w-]+/y },\n ],\n html: [\n { kind: \"comment\", pattern: /<!--[\\s\\S]*?(?:-->|$)/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"?|'(?:[^'\\\\]|\\\\[\\s\\S])*'?/y },\n { kind: \"tag\", pattern: /<\\/?[a-zA-Z][\\w:-]*/y },\n { kind: \"attribute\", pattern: /[a-zA-Z][\\w:-]*(?==)/y },\n { kind: \"punctuation\", pattern: /\\/?>|=/y },\n { kind: \"plain\", pattern: /[a-zA-Z][\\w:-]*/y },\n ],\n bash: [\n { kind: \"comment\", pattern: /#[^\\n]*/y },\n { kind: \"string\", pattern: /\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"?|'[^']*'?/y },\n {\n kind: \"keyword\",\n pattern:\n /\\b(?:if|then|else|elif|fi|for|while|do|done|case|esac|function|return|export|local|source|set|cd|echo)\\b/y,\n },\n { kind: \"property\", pattern: /\\$\\{?[A-Za-z_][\\w]*\\}?/y },\n { kind: \"attribute\", pattern: /(?<=\\s)--?[a-zA-Z][\\w-]*/y },\n { kind: \"punctuation\", pattern: /[|&;()<>]/y },\n ],\n python: [\n { kind: \"comment\", pattern: /#[^\\n]*/y },\n {\n kind: \"string\",\n pattern:\n /\"\"\"[\\s\\S]*?(?:\"\"\"|$)|'''[\\s\\S]*?(?:'''|$)|\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?|'(?:[^'\\\\\\n]|\\\\[\\s\\S])*'?/y,\n },\n {\n kind: \"keyword\",\n pattern:\n /\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|raise|return|try|while|with|yield)\\b/y,\n },\n { kind: \"literal\", pattern: /\\b(?:True|False|None|self)\\b/y },\n { kind: \"number\", pattern: /\\b\\d+(?:\\.\\d+)?\\b/y },\n { kind: \"function\", pattern: /[A-Za-z_]\\w*(?=\\()/y },\n { kind: \"punctuation\", pattern: /[{}[\\]().,:;=+\\-*/<>!]/y },\n { kind: \"plain\", pattern: /[A-Za-z_]\\w*/y },\n ],\n sql: [\n { kind: \"comment\", pattern: /--[^\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y },\n { kind: \"string\", pattern: /'(?:[^']|'')*'?/y },\n {\n kind: \"keyword\",\n // Case-insensitive: SQL is written both ways and both should paint.\n pattern:\n /\\b(?:select|from|where|insert|into|values|update|set|delete|create|table|alter|drop|index|join|inner|left|right|outer|on|group|by|order|having|limit|offset|as|and|or|not|in|is|null|distinct|union|all|with|returning|primary|key|foreign|references|default)\\b/iy,\n },\n { kind: \"number\", pattern: /\\b\\d+(?:\\.\\d+)?\\b/y },\n { kind: \"punctuation\", pattern: /[(),;*=<>]/y },\n ],\n plain: [],\n};\n\n/** The shared JavaScript-family rules, with JSX tags added for tsx/jsx. */\nfunction jsRules(withJsx: boolean): Rule[] {\n const rules: Rule[] = [\n { kind: \"comment\", pattern: /\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y },\n {\n kind: \"string\",\n pattern:\n /`(?:[^`\\\\]|\\\\[\\s\\S])*`?|\"(?:[^\"\\\\\\n]|\\\\[\\s\\S])*\"?|(?<![\\w$])'(?:[^'\\\\\\n]|\\\\[\\s\\S])*'?/y,\n },\n { kind: \"keyword\", pattern: new RegExp(`\\\\b(?:${JS_KEYWORDS})(?![\\\\w$])`, \"y\") },\n { kind: \"literal\", pattern: new RegExp(`\\\\b(?:${JS_LITERALS})(?![\\\\w$])`, \"y\") },\n {\n kind: \"number\",\n pattern: /\\b(?:0[xX][\\da-fA-F_]+|\\d[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+-]?\\d+)?)(?![\\w$])/y,\n },\n { kind: \"function\", pattern: /(?<![\\w$])[A-Za-z_$][\\w$]*(?=\\s*\\()/y },\n { kind: \"punctuation\", pattern: /[{}[\\]().,;:?!=<>+\\-*/%&|^~]/y },\n { kind: \"plain\", pattern: /(?:[A-Za-z_][\\w$]*|\\$+)/y },\n ];\n if (withJsx) {\n rules.splice(\n 1,\n 0,\n { kind: \"string\", pattern: /(?:(?<==)|(?<==\\s))\"[^\"]*\"?/y },\n { kind: \"string\", pattern: /(?:(?<==)|(?<==\\s))'[^']*'?/y },\n );\n rules.splice(4, 0, { kind: \"tag\", pattern: /<\\/?[A-Za-z][\\w.]*|\\/>/y });\n }\n return rules;\n}\n\n/**\n * Split source into coloured tokens.\n *\n * This is a **scanner, not a parser**: it recognises comments, strings, numbers,\n * keywords and punctuation by pattern, and knows nothing about scope, types or\n * grammar. That is a deliberate ceiling. A real parser per language is a\n * dependency the size of the rest of the SDK, and the payoff — being right about\n * the corner cases in a documentation snippet — is small. Where it is unsure it\n * emits `plain`, which renders as ordinary text rather than as something wrong.\n *\n * Unknown languages produce a single `plain` token, so an unhighlighted block is\n * a normal outcome and never an error.\n *\n * The scan is linear in the source: an unterminated string or comment becomes a\n * single token that runs to its close, or to the end of the input — or, for a\n * quote that cannot hold a newline and never closes, to the end of the line — so\n * the openers inside it are never rescanned (#477).\n *\n * @param code - The source.\n * @param language - Grammar name or alias.\n * @returns Tokens covering the input exactly, in order.\n *\n * @example\n * tokenize(\"const x = 1;\", \"ts\");\n * // [{kind: \"keyword\", value: \"const\"}, {kind: \"plain\", value: \" \"}, …]\n */\nexport function tokenize(code: string, language: string | undefined): Token[] {\n const rules = GRAMMARS[resolveLanguage(language)];\n if (rules.length === 0) return code === \"\" ? [] : [{ kind: \"plain\", value: code }];\n\n const tokens: Token[] = [];\n let plainFrom = 0;\n let at = 0;\n\n /**\n * Append a token, fusing it with the previous one when both are `plain`.\n *\n * The `plain` rule matches an identifier run while the scanner's fallback\n * collects the characters no rule matched, so one plain stretch of source\n * arrives in pieces. Fusing them keeps the array shape `origin/main`\n * produced, where a plain run was a single token and each got one span in\n * the DOM rather than one per identifier (#477).\n */\n const push = (token: Token) => {\n const last = tokens[tokens.length - 1];\n if (last && last.kind === \"plain\" && token.kind === \"plain\") {\n last.value += token.value;\n } else {\n tokens.push(token);\n }\n };\n\n const flushPlain = (until: number) => {\n if (until > plainFrom) push({ kind: \"plain\", value: code.slice(plainFrom, until) });\n };\n\n while (at < code.length) {\n let matched: Token | null = null;\n for (const rule of rules) {\n rule.pattern.lastIndex = at;\n const found = rule.pattern.exec(code);\n if (found && found[0].length > 0) {\n matched = { kind: rule.kind, value: found[0] };\n break;\n }\n }\n if (matched) {\n flushPlain(at);\n push(matched);\n at += matched.value.length;\n plainFrom = at;\n } else {\n at++;\n }\n }\n flushPlain(code.length);\n return tokens;\n}\n\n/**\n * The same tokens, split at newlines so each line can be rendered on its own.\n *\n * Line numbers and highlighted lines both need a per-line structure, and a token\n * is free to span a line break — a block comment usually does. Splitting here\n * keeps that out of the component.\n *\n * @param code - The source.\n * @param language - Grammar name or alias.\n * @returns One token array per line. Always at least one line.\n */\nexport function tokenizeLines(code: string, language: string | undefined): Token[][] {\n const lines: Token[][] = [[]];\n for (const token of tokenize(code, language)) {\n const pieces = token.value.split(\"\\n\");\n pieces.forEach((piece, index) => {\n if (index > 0) lines.push([]);\n if (piece !== \"\") lines[lines.length - 1].push({ kind: token.kind, value: piece });\n });\n }\n return lines;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.cjs","names":[],"sources":["../../../src/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import { useCallback, useId, useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Collapsible.module.css\";\n\nexport interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {\n /** Controlled open state. When provided the component is controlled. */\n open?: boolean;\n /** Initial open state for the uncontrolled variant. Default `false`. */\n defaultOpen?: boolean;\n /** Fired with the next open state whenever the trigger is activated. */\n onOpenChange?: (open: boolean) => void;\n /** Content rendered inside the trigger button. */\n trigger: ReactNode;\n /** Collapsible content, hidden while closed. */\n children: ReactNode;\n}\n\n/**\n * A single expand/collapse region — a lighter alternative to `Accordion` for\n * one toggleable block. The trigger is a `<button aria-expanded aria-controls>`\n * wired to a content region sharing the same id; the region is `hidden` while\n * closed. Works controlled (`open` + `onOpenChange`) or uncontrolled\n * (`defaultOpen`).\n *\n * @param props - {@link CollapsibleProps}.\n * @returns The collapsible container.\n */\nexport function Collapsible({\n open,\n defaultOpen = false,\n onOpenChange,\n trigger,\n className,\n children,\n ...props\n}: CollapsibleProps) {\n const reactId = useId();\n const contentId = `${reactId}-content`;\n const triggerId = `${reactId}-trigger`;\n\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const handleToggle = useCallback((): void => {\n const next = !isOpen;\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }, [isOpen, isControlled, onOpenChange]);\n\n return (\n <div className={cn(styles.collapsible, className)} {...props}>\n <button\n type=\"button\"\n id={triggerId}\n className={styles.trigger}\n aria-expanded={isOpen}\n aria-controls={contentId}\n onClick={handleToggle}\n >\n {trigger}\n </button>\n <div\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className={styles.content}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":"kIA4BA,SAAgB,EAAY,CACxB,OACA,cAAc,GACd,eACA,UACA,YACA,WACA,GAAG,GACc,CACjB,IAAM,GAAA,EAAU,EAAA,MAAA,CAAM,EAChB,EAAY,GAAG,EAAQ,UACvB,EAAY,GAAG,EAAQ,UAEvB,EAAe,IAAS,IAAA,GACxB,CAAC,EAAc,IAAA,EAAmB,EAAA,SAAA,CAAkB,CAAW,EAC/D,EAAS,EAAe,EAAO,EAE/B,GAAA,EAAe,EAAA,YAAA,KAAwB,CACzC,IAAM,EAAO,CAAC,EACT,GAAc,EAAgB,CAAI,EACvC,IAAe,CAAI,CACvB,EAAG,CAAC,EAAQ,EAAc,CAAY,CAAC,EAEvC,OACI,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW,EAAA,GAAG,EAAA,QAAO,YAAa,CAAS,EAAG,GAAI,EAAvD,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,GAAI,EACJ,UAAW,EAAA,QAAO,QAClB,gBAAe,EACf,gBAAe,EACf,QAAS,EAER,SAAA,CACG,CAAA,GACR,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,GAAI,EACJ,KAAK,SACL,kBAAiB,EACjB,OAAQ,CAAC,EACT,UAAW,EAAA,QAAO,QAEjB,UACA,CAAA,CACJ,GAEb"}
1
+ {"version":3,"file":"Collapsible.cjs","names":["useId","useState","useCallback","cn","styles","require_cn","require_Collapsible_module","react","react_jsx_runtime","Collapsible","props","reactId","contentId","triggerId","isControlled","open","internalOpen","setInternalOpen","defaultOpen","isOpen","handleToggle","next","onOpenChange","className","trigger"],"sources":["../../../src/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import { useCallback, useId, useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Collapsible.module.css\";\n\nexport interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {\n /** Controlled open state. When provided the component is controlled. */\n open?: boolean;\n /** Initial open state for the uncontrolled variant. Default `false`. */\n defaultOpen?: boolean;\n /** Fired with the next open state whenever the trigger is activated. */\n onOpenChange?: (open: boolean) => void;\n /** Content rendered inside the trigger button. */\n trigger: ReactNode;\n /** Collapsible content, hidden while closed. */\n children: ReactNode;\n}\n\n/**\n * A single expand/collapse region — a lighter alternative to `Accordion` for\n * one toggleable block. The trigger is a `<button aria-expanded aria-controls>`\n * wired to a content region sharing the same id; the region is `hidden` while\n * closed. Works controlled (`open` + `onOpenChange`) or uncontrolled\n * (`defaultOpen`).\n *\n * @param props - {@link CollapsibleProps}.\n * @returns The collapsible container.\n */\nexport function Collapsible({\n open,\n defaultOpen = false,\n onOpenChange,\n trigger,\n className,\n children,\n ...props\n}: CollapsibleProps) {\n const reactId = useId();\n const contentId = `${reactId}-content`;\n const triggerId = `${reactId}-trigger`;\n\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const handleToggle = useCallback((): void => {\n const next = !isOpen;\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }, [isOpen, isControlled, onOpenChange]);\n\n return (\n <div className={cn(styles.collapsible, className)} {...props}>\n <button\n type=\"button\"\n id={triggerId}\n className={styles.trigger}\n aria-expanded={isOpen}\n aria-controls={contentId}\n onClick={handleToggle}\n >\n {trigger}\n </button>\n <div\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className={styles.content}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":"A,kIA4BA,SAAgBS,EAAY,CACxB,OACA,cAAc,GACd,eACA,UACA,YACA,WACA,GAAGC,GACc,CACjB,IAAMC,GAAA,EAAUX,EAAAA,MAAAA,CAAM,EAChBY,EAAY,GAAGD,EAAQ,UACvBE,EAAY,GAAGF,EAAQ,UAEvBG,EAAeC,IAAS,IAAA,GACxB,CAACC,EAAcC,IAAA,EAAmBhB,EAAAA,SAAAA,CAAkBiB,CAAW,EAC/DC,EAASL,EAAeC,EAAOC,EAE/BI,GAAA,EAAelB,EAAAA,YAAAA,KAAwB,CACzC,IAAMmB,EAAO,CAACF,EACTL,GAAcG,EAAgBI,CAAI,EACvCC,IAAeD,CAAI,CACvB,EAAG,CAACF,EAAQL,EAAcQ,CAAY,CAAC,EAEvC,OACI,EAAAd,EAAA,KAAA,CAAC,MAAD,CAAK,UAAWL,EAAAA,GAAGC,EAAAA,QAAO,YAAamB,CAAS,EAAG,GAAIb,EAAvD,SAAA,EACI,EAAAF,EAAA,IAAA,CAAC,SAAD,CACI,KAAK,SACL,GAAIK,EACJ,UAAWT,EAAAA,QAAO,QAClB,gBAAee,EACf,gBAAeP,EACf,QAASQ,EAER,SAAAI,CACG,CAAA,GACR,EAAAhB,EAAA,IAAA,CAAC,MAAD,CACI,GAAII,EACJ,KAAK,SACL,kBAAiBC,EACjB,OAAQ,CAACM,EACT,UAAWf,EAAAA,QAAO,QAEjB,UACA,CAAA,CACJ,C,EAEb,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.js","names":[],"sources":["../../../src/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import { useCallback, useId, useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Collapsible.module.css\";\n\nexport interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {\n /** Controlled open state. When provided the component is controlled. */\n open?: boolean;\n /** Initial open state for the uncontrolled variant. Default `false`. */\n defaultOpen?: boolean;\n /** Fired with the next open state whenever the trigger is activated. */\n onOpenChange?: (open: boolean) => void;\n /** Content rendered inside the trigger button. */\n trigger: ReactNode;\n /** Collapsible content, hidden while closed. */\n children: ReactNode;\n}\n\n/**\n * A single expand/collapse region — a lighter alternative to `Accordion` for\n * one toggleable block. The trigger is a `<button aria-expanded aria-controls>`\n * wired to a content region sharing the same id; the region is `hidden` while\n * closed. Works controlled (`open` + `onOpenChange`) or uncontrolled\n * (`defaultOpen`).\n *\n * @param props - {@link CollapsibleProps}.\n * @returns The collapsible container.\n */\nexport function Collapsible({\n open,\n defaultOpen = false,\n onOpenChange,\n trigger,\n className,\n children,\n ...props\n}: CollapsibleProps) {\n const reactId = useId();\n const contentId = `${reactId}-content`;\n const triggerId = `${reactId}-trigger`;\n\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const handleToggle = useCallback((): void => {\n const next = !isOpen;\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }, [isOpen, isControlled, onOpenChange]);\n\n return (\n <div className={cn(styles.collapsible, className)} {...props}>\n <button\n type=\"button\"\n id={triggerId}\n className={styles.trigger}\n aria-expanded={isOpen}\n aria-controls={contentId}\n onClick={handleToggle}\n >\n {trigger}\n </button>\n <div\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className={styles.content}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AA4BA,SAAgB,EAAY,EACxB,SACA,iBAAc,IACd,iBACA,YACA,cACA,aACA,GAAG,KACc;CACjB,IAAM,IAAU,EAAM,GAChB,IAAY,GAAG,EAAQ,WACvB,IAAY,GAAG,EAAQ,WAEvB,IAAe,MAAS,KAAA,GACxB,CAAC,GAAc,KAAmB,EAAkB,CAAW,GAC/D,IAAS,IAAe,IAAO,GAE/B,IAAe,QAAwB;EACzC,IAAM,IAAO,CAAC;EAEd,AADK,KAAc,EAAgB,CAAI,GACvC,IAAe,CAAI;CACvB,GAAG;EAAC;EAAQ;EAAc;CAAY,CAAC;CAEvC,OACI,kBAAC,OAAD;EAAK,WAAW,EAAG,EAAO,aAAa,CAAS;EAAG,GAAI;EAAvD,UAAA,CACI,kBAAC,UAAD;GACI,MAAK;GACL,IAAI;GACJ,WAAW,EAAO;GAClB,iBAAe;GACf,iBAAe;GACf,SAAS;GAER,UAAA;EACG,CAAA,GACR,kBAAC,OAAD;GACI,IAAI;GACJ,MAAK;GACL,mBAAiB;GACjB,QAAQ,CAAC;GACT,WAAW,EAAO;GAEjB;EACA,CAAA,CACJ;;AAEb"}
1
+ {"version":3,"file":"Collapsible.js","names":["styles","Collapsible_module_default","Collapsible","props","reactId","useId","contentId","triggerId","isControlled","open","internalOpen","setInternalOpen","useState","defaultOpen","isOpen","handleToggle","useCallback","next","onOpenChange","cn","className","trigger"],"sources":["../../../src/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import { useCallback, useId, useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Collapsible.module.css\";\n\nexport interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {\n /** Controlled open state. When provided the component is controlled. */\n open?: boolean;\n /** Initial open state for the uncontrolled variant. Default `false`. */\n defaultOpen?: boolean;\n /** Fired with the next open state whenever the trigger is activated. */\n onOpenChange?: (open: boolean) => void;\n /** Content rendered inside the trigger button. */\n trigger: ReactNode;\n /** Collapsible content, hidden while closed. */\n children: ReactNode;\n}\n\n/**\n * A single expand/collapse region — a lighter alternative to `Accordion` for\n * one toggleable block. The trigger is a `<button aria-expanded aria-controls>`\n * wired to a content region sharing the same id; the region is `hidden` while\n * closed. Works controlled (`open` + `onOpenChange`) or uncontrolled\n * (`defaultOpen`).\n *\n * @param props - {@link CollapsibleProps}.\n * @returns The collapsible container.\n */\nexport function Collapsible({\n open,\n defaultOpen = false,\n onOpenChange,\n trigger,\n className,\n children,\n ...props\n}: CollapsibleProps) {\n const reactId = useId();\n const contentId = `${reactId}-content`;\n const triggerId = `${reactId}-trigger`;\n\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const handleToggle = useCallback((): void => {\n const next = !isOpen;\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }, [isOpen, isControlled, onOpenChange]);\n\n return (\n <div className={cn(styles.collapsible, className)} {...props}>\n <button\n type=\"button\"\n id={triggerId}\n className={styles.trigger}\n aria-expanded={isOpen}\n aria-controls={contentId}\n onClick={handleToggle}\n >\n {trigger}\n </button>\n <div\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className={styles.content}\n >\n {children}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AA4BA,SAAgBE,EAAY,EACxB,SACA,iBAAc,IACd,iBACA,YACA,cACA,aACA,GAAGC,KACc;CACjB,IAAMC,IAAUC,EAAM,GAChBC,IAAY,GAAGF,EAAQ,WACvBG,IAAY,GAAGH,EAAQ,WAEvBI,IAAeC,MAAS,KAAA,GACxB,CAACC,GAAcC,KAAmBC,EAAkBC,CAAW,GAC/DC,IAASN,IAAeC,IAAOC,GAE/BK,IAAeC,QAAwB;EACzC,IAAMC,IAAO,CAACH;EAEd,AADKN,KAAcG,EAAgBM,CAAI,GACvCC,IAAeD,CAAI;CACvB,GAAG;EAACH;EAAQN;EAAcU;CAAY,CAAC;CAEvC,OACI,kBAAC,OAAD;EAAK,WAAWC,EAAGnB,EAAO,aAAaoB,CAAS;EAAG,GAAIjB;EAAvD,UAAA,CACI,kBAAC,UAAD;GACI,MAAK;GACL,IAAII;GACJ,WAAWP,EAAO;GAClB,iBAAec;GACf,iBAAeR;GACf,SAASS;GAER,UAAAM;EACG,CAAA,GACR,kBAAC,OAAD;GACI,IAAIf;GACJ,MAAK;GACL,mBAAiBC;GACjB,QAAQ,CAACO;GACT,WAAWd,EAAO;GAEjB;EACA,CAAA,CACJ;;AAEb"}
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.module.cjs","names":[],"sources":["../../../src/components/Collapsible/Collapsible.module.css"],"sourcesContent":[".collapsible {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n text-align: left;\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n cursor: pointer;\n border-radius: var(--tempest-radius-md);\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .trigger:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.trigger:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: 2px;\n}\n\n.content {\n padding: var(--tempest-space-2) var(--tempest-space-3) var(--tempest-space-3);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-normal);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Collapsible.module.cjs","names":["collapsible","trigger","content","Collapsible_module_default"],"sources":["../../../src/components/Collapsible/Collapsible.module.css"],"sourcesContent":[".collapsible {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n text-align: left;\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n cursor: pointer;\n border-radius: var(--tempest-radius-md);\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .trigger:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.trigger:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: 2px;\n}\n\n.content {\n padding: var(--tempest-space-2) var(--tempest-space-3) var(--tempest-space-3);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-normal);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.module.js","names":[],"sources":["../../../src/components/Collapsible/Collapsible.module.css"],"sourcesContent":[".collapsible {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n text-align: left;\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n cursor: pointer;\n border-radius: var(--tempest-radius-md);\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .trigger:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.trigger:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: 2px;\n}\n\n.content {\n padding: var(--tempest-space-2) var(--tempest-space-3) var(--tempest-space-3);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-normal);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Collapsible.module.js","names":["collapsible","trigger","content","Collapsible_module_default"],"sources":["../../../src/components/Collapsible/Collapsible.module.css"],"sourcesContent":[".collapsible {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--tempest-space-2);\n padding: var(--tempest-space-2) var(--tempest-space-3);\n background: none;\n border: none;\n text-align: left;\n color: var(--tempest-text);\n font-family: var(--tempest-font-sans);\n font-size: var(--tempest-text-base);\n font-weight: var(--tempest-weight-semibold);\n line-height: var(--tempest-leading-snug);\n cursor: pointer;\n border-radius: var(--tempest-radius-md);\n transition: var(--tempest-transition-color);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .trigger:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.trigger:focus-visible {\n outline: var(--tempest-focus-ring-width) solid var(--tempest-focus-ring-color);\n outline-offset: 2px;\n}\n\n.content {\n padding: var(--tempest-space-2) var(--tempest-space-3) var(--tempest-space-3);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-normal);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.cjs","names":[],"sources":["../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract (label, placeholder, helperText, error, disabled,\n * className) and the combobox-specific knobs: filter, emptyMessage, portal. The body\n * is the listbox — open state, active descendant, type-ahead and the ARIA wiring —\n * and those cannot be separated without passing the same active index back and\n * forth.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { CaretIcon } from \"@/components/Select/CaretIcon\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Combobox.module.css\";\nimport { useListboxDismiss } from \"./use-listbox-dismiss\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value: string;\n onChange: (value: string) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Custom filter — return true to keep the option. Default is case-insensitive substring match on label. */\n filter?: (option: ComboboxOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field or the list changes size.\n */\n portal?: boolean;\n className?: string;\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/**\n * Combobox — text input with a filterable dropdown of options.\n *\n * Selecting an option fires `onChange(value)`. Typing filters the list.\n * Keyboard: ArrowUp/ArrowDown to navigate — the active option is announced\n * through `aria-activedescendant`, focus stays on the input — Enter to select,\n * Esc to close, and Tab/Shift+Tab leave the field closing the list.\n */\nexport function Combobox({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: ComboboxProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedLabel = useMemo(\n () => options.find((o) => o.value === value)?.label ?? \"\",\n [options, value],\n );\n\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const closeAndReset = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n setActiveIndex(0);\n }, []);\n\n const handleSelect = useCallback(\n (option: ComboboxOption): void => {\n if (option.disabled) return;\n onChange(option.value);\n closeAndReset();\n },\n [onChange, closeAndReset],\n );\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: closeAndReset,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) handleSelect(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n closeAndReset();\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={option.value === value}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n option.value === value && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => handleSelect(option)}\n >\n {option.label}\n </li>\n ))\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div ref={setFieldNode} className={styles.field}>\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={placeholder}\n disabled={disabled}\n value={open ? query : selectedLabel}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n <span className={styles.caret} aria-hidden>\n <CaretIcon />\n </span>\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.cjs","names":["useId","useRef","useState","useAnchorPosition","useMemo","useCallback","useListboxDismiss","cn","styles","CaretIcon","Portal","require_cn","require_Portal","require_anchor_position","require_CaretIcon","require_Combobox_module","require_use_listbox_dismiss","react","react_jsx_runtime","LIST_OFFSET","defaultFilter","query","option","Combobox","id","rootRef","inputRef","open","setOpen","setQuery","activeIndex","setActiveIndex","fieldNode","setFieldNode","listNode","setListNode","floatingStyle","portal","selectedLabel","options","o","value","filtered","filter","closeAndReset","handleSelect","onChange","optionId","index","activeOption","handleKeyDown","event","current","list","onListMouseDown","emptyMessage","error","className","label","onInputBlur","helperText"],"sources":["../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract (label, placeholder, helperText, error, disabled,\n * className) and the combobox-specific knobs: filter, emptyMessage, portal. The body\n * is the listbox — open state, active descendant, type-ahead and the ARIA wiring —\n * and those cannot be separated without passing the same active index back and\n * forth.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { CaretIcon } from \"@/components/Select/CaretIcon\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Combobox.module.css\";\nimport { useListboxDismiss } from \"./use-listbox-dismiss\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value: string;\n onChange: (value: string) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Custom filter — return true to keep the option. Default is case-insensitive substring match on label. */\n filter?: (option: ComboboxOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field or the list changes size.\n */\n portal?: boolean;\n className?: string;\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/**\n * Combobox — text input with a filterable dropdown of options.\n *\n * Selecting an option fires `onChange(value)`. Typing filters the list.\n * Keyboard: ArrowUp/ArrowDown to navigate — the active option is announced\n * through `aria-activedescendant`, focus stays on the input — Enter to select,\n * Esc to close, and Tab/Shift+Tab leave the field closing the list.\n */\nexport function Combobox({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: ComboboxProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedLabel = useMemo(\n () => options.find((o) => o.value === value)?.label ?? \"\",\n [options, value],\n );\n\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const closeAndReset = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n setActiveIndex(0);\n }, []);\n\n const handleSelect = useCallback(\n (option: ComboboxOption): void => {\n if (option.disabled) return;\n onChange(option.value);\n closeAndReset();\n },\n [onChange, closeAndReset],\n );\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: closeAndReset,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) handleSelect(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n closeAndReset();\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={option.value === value}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n option.value === value && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => handleSelect(option)}\n >\n {option.label}\n </li>\n ))\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div ref={setFieldNode} className={styles.field}>\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={placeholder}\n disabled={disabled}\n value={open ? query : selectedLabel}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n <span className={styles.caret} aria-hidden>\n <CaretIcon />\n </span>\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","names":[],"sources":["../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract (label, placeholder, helperText, error, disabled,\n * className) and the combobox-specific knobs: filter, emptyMessage, portal. The body\n * is the listbox — open state, active descendant, type-ahead and the ARIA wiring —\n * and those cannot be separated without passing the same active index back and\n * forth.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { CaretIcon } from \"@/components/Select/CaretIcon\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Combobox.module.css\";\nimport { useListboxDismiss } from \"./use-listbox-dismiss\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value: string;\n onChange: (value: string) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Custom filter — return true to keep the option. Default is case-insensitive substring match on label. */\n filter?: (option: ComboboxOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field or the list changes size.\n */\n portal?: boolean;\n className?: string;\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/**\n * Combobox — text input with a filterable dropdown of options.\n *\n * Selecting an option fires `onChange(value)`. Typing filters the list.\n * Keyboard: ArrowUp/ArrowDown to navigate — the active option is announced\n * through `aria-activedescendant`, focus stays on the input — Enter to select,\n * Esc to close, and Tab/Shift+Tab leave the field closing the list.\n */\nexport function Combobox({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: ComboboxProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedLabel = useMemo(\n () => options.find((o) => o.value === value)?.label ?? \"\",\n [options, value],\n );\n\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const closeAndReset = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n setActiveIndex(0);\n }, []);\n\n const handleSelect = useCallback(\n (option: ComboboxOption): void => {\n if (option.disabled) return;\n onChange(option.value);\n closeAndReset();\n },\n [onChange, closeAndReset],\n );\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: closeAndReset,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) handleSelect(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n closeAndReset();\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={option.value === value}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n option.value === value && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => handleSelect(option)}\n >\n {option.label}\n </li>\n ))\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div ref={setFieldNode} className={styles.field}>\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={placeholder}\n disabled={disabled}\n value={open ? query : selectedLabel}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n <span className={styles.caret} aria-hidden>\n <CaretIcon />\n </span>\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.js","names":["styles","Combobox_module_default","LIST_OFFSET","defaultFilter","query","option","Combobox","id","useId","rootRef","useRef","inputRef","open","setOpen","useState","setQuery","activeIndex","setActiveIndex","fieldNode","setFieldNode","listNode","setListNode","floatingStyle","useAnchorPosition","portal","selectedLabel","useMemo","options","o","value","filtered","filter","closeAndReset","useCallback","handleSelect","onChange","useListboxDismiss","optionId","index","activeOption","handleKeyDown","event","current","list","cn","onListMouseDown","emptyMessage","error","className","label","onInputBlur","CaretIcon","Portal","helperText"],"sources":["../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, props-count, function-lines — options/value/onChange\n * plus the shared field contract (label, placeholder, helperText, error, disabled,\n * className) and the combobox-specific knobs: filter, emptyMessage, portal. The body\n * is the listbox — open state, active descendant, type-ahead and the ARIA wiring —\n * and those cannot be separated without passing the same active index back and\n * forth.\n */\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport { Portal } from \"@/components/Portal\";\nimport { useAnchorPosition } from \"@/components/Portal/anchor-position\";\nimport { CaretIcon } from \"@/components/Select/CaretIcon\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Combobox.module.css\";\nimport { useListboxDismiss } from \"./use-listbox-dismiss\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n options: ComboboxOption[];\n value: string;\n onChange: (value: string) => void;\n label?: string;\n placeholder?: string;\n helperText?: string;\n error?: string;\n disabled?: boolean;\n /** Custom filter — return true to keep the option. Default is case-insensitive substring match on label. */\n filter?: (option: ComboboxOption, query: string) => boolean;\n /** Message shown when no option matches. */\n emptyMessage?: string;\n /**\n * Render the list in a portal, positioned under the field. Default `true`.\n *\n * In flow, an ancestor with `overflow` other than `visible` clips the list —\n * in the last row of a `DataTable` none of it was visible (measured in Chrome\n * at 1440 px). In a portal it escapes the clip, takes the field's width,\n * flips above the field when there is no room below, and follows it on\n * scroll, resize and when the field or the list changes size.\n */\n portal?: boolean;\n className?: string;\n}\n\n/** Gap between field and list, in px — the in-flow CSS uses the same 4 px. */\nconst LIST_OFFSET = 4;\n\nfunction defaultFilter(option: ComboboxOption, query: string): boolean {\n if (!query) return true;\n return option.label.toLowerCase().includes(query.toLowerCase());\n}\n\n/**\n * Combobox — text input with a filterable dropdown of options.\n *\n * Selecting an option fires `onChange(value)`. Typing filters the list.\n * Keyboard: ArrowUp/ArrowDown to navigate — the active option is announced\n * through `aria-activedescendant`, focus stays on the input — Enter to select,\n * Esc to close, and Tab/Shift+Tab leave the field closing the list.\n */\nexport function Combobox({\n options,\n value,\n onChange,\n label,\n placeholder = \"Selecione\",\n helperText,\n error,\n disabled,\n filter = defaultFilter,\n emptyMessage = \"Nenhuma opção encontrada\",\n portal = true,\n className,\n}: ComboboxProps) {\n const id = useId();\n const rootRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const [fieldNode, setFieldNode] = useState<HTMLDivElement | null>(null);\n const [listNode, setListNode] = useState<HTMLUListElement | null>(null);\n const floatingStyle = useAnchorPosition({\n anchor: fieldNode,\n floating: listNode,\n side: \"bottom\",\n align: \"start\",\n offset: LIST_OFFSET,\n enabled: portal && open,\n matchWidth: true,\n });\n\n const selectedLabel = useMemo(\n () => options.find((o) => o.value === value)?.label ?? \"\",\n [options, value],\n );\n\n const filtered = useMemo(\n () => options.filter((o) => filter(o, query)),\n [options, filter, query],\n );\n\n const closeAndReset = useCallback((): void => {\n setOpen(false);\n setQuery(\"\");\n setActiveIndex(0);\n }, []);\n\n const handleSelect = useCallback(\n (option: ComboboxOption): void => {\n if (option.disabled) return;\n onChange(option.value);\n closeAndReset();\n },\n [onChange, closeAndReset],\n );\n\n const { onInputBlur, onListMouseDown } = useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss: closeAndReset,\n });\n const optionId = (index: number): string => `${id}-option-${index}`;\n const activeOption = open ? filtered[activeIndex] : undefined;\n\n /**\n * Keyboard model of the input.\n *\n * `Escape` calls `preventDefault()` only while the list is open: that marks the\n * key as consumed, so an enclosing `Modal` or `Drawer` stays open and the next\n * `Escape` reaches it. With the list closed the key is left alone and dismisses\n * the enclosing layer, as the user expects.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex((current) => Math.min(filtered.length - 1, current + 1));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setActiveIndex((current) => Math.max(0, current - 1));\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n const option = filtered[activeIndex];\n if (option) handleSelect(option);\n } else if (event.key === \"Escape\") {\n if (open) event.preventDefault();\n closeAndReset();\n }\n };\n\n const list = (\n <ul\n ref={setListNode}\n id={`${id}-listbox`}\n role=\"listbox\"\n className={cn(styles.menu, portal && styles.portalled)}\n style={floatingStyle}\n onMouseDown={onListMouseDown}\n >\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n filtered.map((option, index) => (\n <li\n key={option.value}\n id={optionId(index)}\n role=\"option\"\n aria-selected={option.value === value}\n className={cn(\n styles.option,\n index === activeIndex && styles.active,\n option.value === value && styles.selected,\n )}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={() => handleSelect(option)}\n >\n {option.label}\n </li>\n ))\n )}\n </ul>\n );\n\n return (\n <div ref={rootRef} className={cn(styles.wrapper, error && styles.error, className)}>\n {label && (\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n )}\n <div ref={setFieldNode} className={styles.field}>\n <input\n id={id}\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${id}-listbox`}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOption ? optionId(activeIndex) : undefined}\n className={styles.input}\n placeholder={placeholder}\n disabled={disabled}\n value={open ? query : selectedLabel}\n onFocus={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setOpen(true);\n setActiveIndex(0);\n }}\n onKeyDown={handleKeyDown}\n onBlur={onInputBlur}\n />\n <span className={styles.caret} aria-hidden>\n <CaretIcon />\n </span>\n </div>\n {open && (portal ? <Portal>{list}</Portal> : list)}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helper}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.module.cjs","names":[],"sources":["../../../src/components/Combobox/Combobox.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n --_tempest-caret-offset: var(--tempest-control-caret-offset, 12px);\n --_tempest-caret-size: var(--tempest-control-caret-size, 14px);\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.input {\n width: 100%;\n height: var(--tempest-control-height-md);\n padding: 0 calc(var(--_tempest-caret-offset) + var(--_tempest-caret-size) + 6px) 0\n var(--tempest-control-padding-md);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n box-shadow: var(--tempest-shadow-xs);\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.input:focus {\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.input:disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.caret {\n position: absolute;\n right: var(--_tempest-caret-offset);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--_tempest-caret-size);\n height: var(--_tempest-caret-size);\n pointer-events: none;\n color: var(--tempest-text-muted);\n}\n\n.field > .caret > svg {\n display: block;\n flex: none;\n width: 100%;\n height: 100%;\n margin: 0;\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .input {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Combobox.module.cjs","names":["wrapper","label","field","input","caret","menu","option","active","selected","empty","helper","errorText","error","portalled","Combobox_module_default"],"sources":["../../../src/components/Combobox/Combobox.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n --_tempest-caret-offset: var(--tempest-control-caret-offset, 12px);\n --_tempest-caret-size: var(--tempest-control-caret-size, 14px);\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.input {\n width: 100%;\n height: var(--tempest-control-height-md);\n padding: 0 calc(var(--_tempest-caret-offset) + var(--_tempest-caret-size) + 6px) 0\n var(--tempest-control-padding-md);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n box-shadow: var(--tempest-shadow-xs);\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.input:focus {\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.input:disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.caret {\n position: absolute;\n right: var(--_tempest-caret-offset);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--_tempest-caret-size);\n height: var(--_tempest-caret-size);\n pointer-events: none;\n color: var(--tempest-text-muted);\n}\n\n.field > .caret > svg {\n display: block;\n flex: none;\n width: 100%;\n height: 100%;\n margin: 0;\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .input {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.module.js","names":[],"sources":["../../../src/components/Combobox/Combobox.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n --_tempest-caret-offset: var(--tempest-control-caret-offset, 12px);\n --_tempest-caret-size: var(--tempest-control-caret-size, 14px);\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.input {\n width: 100%;\n height: var(--tempest-control-height-md);\n padding: 0 calc(var(--_tempest-caret-offset) + var(--_tempest-caret-size) + 6px) 0\n var(--tempest-control-padding-md);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n box-shadow: var(--tempest-shadow-xs);\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.input:focus {\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.input:disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.caret {\n position: absolute;\n right: var(--_tempest-caret-offset);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--_tempest-caret-size);\n height: var(--_tempest-caret-size);\n pointer-events: none;\n color: var(--tempest-text-muted);\n}\n\n.field > .caret > svg {\n display: block;\n flex: none;\n width: 100%;\n height: 100%;\n margin: 0;\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .input {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
1
+ {"version":3,"file":"Combobox.module.js","names":["wrapper","label","field","input","caret","menu","option","active","selected","empty","helper","errorText","error","portalled","Combobox_module_default"],"sources":["../../../src/components/Combobox/Combobox.module.css"],"sourcesContent":[".wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--tempest-space-1);\n width: 100%;\n font-family: var(--tempest-font-sans);\n position: relative;\n}\n\n.label {\n font-size: var(--tempest-text-sm);\n font-weight: var(--tempest-weight-semibold);\n color: var(--tempest-text);\n line-height: var(--tempest-leading-snug);\n}\n\n.field {\n --_tempest-caret-offset: var(--tempest-control-caret-offset, 12px);\n --_tempest-caret-size: var(--tempest-control-caret-size, 14px);\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.input {\n width: 100%;\n height: var(--tempest-control-height-md);\n padding: 0 calc(var(--_tempest-caret-offset) + var(--_tempest-caret-size) + 6px) 0\n var(--tempest-control-padding-md);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-control-radius);\n background-color: var(--tempest-bg);\n color: var(--tempest-text);\n font-family: inherit;\n font-size: var(--tempest-control-font-md);\n box-shadow: var(--tempest-shadow-xs);\n transition: var(--tempest-transition-color), var(--tempest-transition-shadow);\n}\n\n.input::placeholder {\n color: var(--tempest-text-subtle);\n}\n\n.input:focus {\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.input:disabled {\n background-color: var(--tempest-surface);\n cursor: not-allowed;\n}\n\n.caret {\n position: absolute;\n right: var(--_tempest-caret-offset);\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--_tempest-caret-size);\n height: var(--_tempest-caret-size);\n pointer-events: none;\n color: var(--tempest-text-muted);\n}\n\n.field > .caret > svg {\n display: block;\n flex: none;\n width: 100%;\n height: 100%;\n margin: 0;\n}\n\n.menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: var(--tempest-z-dropdown);\n background-color: var(--tempest-bg);\n border: 1px solid var(--tempest-border);\n border-radius: var(--tempest-radius-lg);\n box-shadow: var(--tempest-shadow-lg);\n max-height: 280px;\n overflow-y: auto;\n padding: var(--tempest-space-1);\n list-style: none;\n margin: 0;\n}\n\n.option {\n display: flex;\n align-items: center;\n padding: var(--tempest-space-2) var(--tempest-space-3);\n border-radius: var(--tempest-radius-sm);\n cursor: pointer;\n color: var(--tempest-text);\n font-size: var(--tempest-text-base);\n line-height: var(--tempest-leading-snug);\n}\n\n@media (hover: hover) and (pointer: fine) {\n .option:hover {\n background-color: var(--tempest-surface);\n }\n}\n\n.option.active {\n background-color: var(--tempest-primary-soft);\n color: var(--tempest-primary-on-soft);\n}\n\n.option.selected {\n font-weight: var(--tempest-weight-semibold);\n}\n\n.empty {\n padding: var(--tempest-space-3);\n color: var(--tempest-text-muted);\n font-size: var(--tempest-text-sm);\n text-align: center;\n}\n\n.helper {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-text-muted);\n}\n\n.errorText {\n font-size: var(--tempest-text-xs);\n color: var(--tempest-danger);\n}\n\n.wrapper.error .input {\n border-color: var(--tempest-danger);\n}\n\n.portalled {\n font-family: var(--tempest-font-sans);\n right: auto;\n z-index: var(--tempest-z-popover);\n}\n"],"mappings":";"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-listbox-dismiss.cjs","names":[],"sources":["../../../src/components/Combobox/use-listbox-dismiss.ts"],"sourcesContent":["import { useCallback, useEffect, type FocusEvent, type MouseEvent, type RefObject } from \"react\";\n\n/** Inputs of {@link useListboxDismiss}. */\nexport interface ListboxDismissOptions {\n /** Whether the list is open; nothing is listened to while it is closed. */\n open: boolean;\n /** The component's wrapper — a press inside it is not a press outside. */\n rootRef: RefObject<HTMLElement | null>;\n /** The list node, checked on its own because in a portal it lives outside `rootRef`. */\n listNode: HTMLElement | null;\n /** Closes the list. Keep it stable (`useCallback`), it is an effect dependency. */\n onDismiss: () => void;\n}\n\n/** Handlers {@link useListboxDismiss} hands back to wire on the input and the list. */\nexport interface ListboxDismissHandlers {\n /** `onBlur` of the combobox input. */\n onInputBlur: (event: FocusEvent<HTMLInputElement>) => void;\n /** `onMouseDown` of the list element. */\n onListMouseDown: (event: MouseEvent<HTMLElement>) => void;\n}\n\n/**\n * Keeps focus on the input when a press lands anywhere on the list — an option,\n * the empty message, the padding or the scrollbar.\n *\n * @param event - The `mousedown` on the list.\n */\nfunction keepInputFocus(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n\n/**\n * Closes the list of an input-driven listbox (`Combobox`, `MultiSelect`) when the\n * user leaves it, by pointer or by keyboard.\n *\n * Pointer: a press outside both the wrapper and the list closes it. The list is\n * checked on its own because in a portal it is not inside the wrapper.\n *\n * Keyboard: the list closes when focus moves from the input to an element outside\n * the list. Before this (#430, measured in Chromium headless on `main`), `Tab` and\n * `Shift+Tab` took focus to the neighbouring control and left the list open on top\n * of it — `aria-expanded=\"true\"` on a field that no longer had focus — until a\n * press outside or `Escape` on the input, which no longer received keys. A blur\n * whose `relatedTarget` is `null` (focus went to a non-focusable spot or out of\n * the page) is left to the pointer rule, so a press on the label or the helper\n * text keeps behaving as a press inside.\n *\n * A press on the list calls `preventDefault()`, so it never blurs the input: the\n * option's handler runs with focus still on the field, and a press on the empty\n * message or the scrollbar no longer drops focus to `<body>`.\n *\n * @param options - See {@link ListboxDismissOptions}.\n * @returns The input `onBlur` and the list `onMouseDown` handlers.\n */\nexport function useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss,\n}: ListboxDismissOptions): ListboxDismissHandlers {\n useEffect(() => {\n if (!open) return;\n const onDown = (event: globalThis.MouseEvent): void => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || listNode?.contains(target)) return;\n onDismiss();\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, rootRef, listNode, onDismiss]);\n\n const onInputBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>): void => {\n const next = event.relatedTarget;\n if (!open || !(next instanceof Node) || listNode?.contains(next)) return;\n onDismiss();\n },\n [open, listNode, onDismiss],\n );\n\n return { onInputBlur, onListMouseDown: keepInputFocus };\n}\n"],"mappings":"uBA4BA,SAAS,EAAe,EAAsC,CAC1D,EAAM,eAAe,CACzB,CAyBA,SAAgB,EAAkB,CAC9B,OACA,UACA,WACA,aAC8C,CAqB9C,OApBA,EAAA,EAAA,UAAA,KAAgB,CACZ,GAAI,CAAC,EAAM,OACX,IAAM,EAAU,GAAuC,CACnD,IAAM,EAAS,EAAM,OACjB,EAAQ,SAAS,SAAS,CAAM,GAAK,GAAU,SAAS,CAAM,GAClE,EAAU,CACd,EAEA,OADA,OAAO,iBAAiB,YAAa,CAAM,MAC9B,OAAO,oBAAoB,YAAa,CAAM,CAC/D,EAAG,CAAC,EAAM,EAAS,EAAU,CAAS,CAAC,EAWhC,CAAE,aAAA,EATW,EAAA,YAAA,CACf,GAA8C,CAC3C,IAAM,EAAO,EAAM,cACd,GAAU,aAAgB,MAAS,IAAU,SAAS,CAAI,GAC/D,EAAU,CACd,EACA,CAAC,EAAM,EAAU,CAAS,CAGrB,EAAa,gBAAiB,CAAe,CAC1D"}
1
+ {"version":3,"file":"use-listbox-dismiss.cjs","names":["useCallback","react","keepInputFocus","event","useListboxDismiss","open","onDown","target","rootRef","listNode","onDismiss","next"],"sources":["../../../src/components/Combobox/use-listbox-dismiss.ts"],"sourcesContent":["import { useCallback, useEffect, type FocusEvent, type MouseEvent, type RefObject } from \"react\";\n\n/** Inputs of {@link useListboxDismiss}. */\nexport interface ListboxDismissOptions {\n /** Whether the list is open; nothing is listened to while it is closed. */\n open: boolean;\n /** The component's wrapper — a press inside it is not a press outside. */\n rootRef: RefObject<HTMLElement | null>;\n /** The list node, checked on its own because in a portal it lives outside `rootRef`. */\n listNode: HTMLElement | null;\n /** Closes the list. Keep it stable (`useCallback`), it is an effect dependency. */\n onDismiss: () => void;\n}\n\n/** Handlers {@link useListboxDismiss} hands back to wire on the input and the list. */\nexport interface ListboxDismissHandlers {\n /** `onBlur` of the combobox input. */\n onInputBlur: (event: FocusEvent<HTMLInputElement>) => void;\n /** `onMouseDown` of the list element. */\n onListMouseDown: (event: MouseEvent<HTMLElement>) => void;\n}\n\n/**\n * Keeps focus on the input when a press lands anywhere on the list — an option,\n * the empty message, the padding or the scrollbar.\n *\n * @param event - The `mousedown` on the list.\n */\nfunction keepInputFocus(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n\n/**\n * Closes the list of an input-driven listbox (`Combobox`, `MultiSelect`) when the\n * user leaves it, by pointer or by keyboard.\n *\n * Pointer: a press outside both the wrapper and the list closes it. The list is\n * checked on its own because in a portal it is not inside the wrapper.\n *\n * Keyboard: the list closes when focus moves from the input to an element outside\n * the list. Before this (#430, measured in Chromium headless on `main`), `Tab` and\n * `Shift+Tab` took focus to the neighbouring control and left the list open on top\n * of it — `aria-expanded=\"true\"` on a field that no longer had focus — until a\n * press outside or `Escape` on the input, which no longer received keys. A blur\n * whose `relatedTarget` is `null` (focus went to a non-focusable spot or out of\n * the page) is left to the pointer rule, so a press on the label or the helper\n * text keeps behaving as a press inside.\n *\n * A press on the list calls `preventDefault()`, so it never blurs the input: the\n * option's handler runs with focus still on the field, and a press on the empty\n * message or the scrollbar no longer drops focus to `<body>`.\n *\n * @param options - See {@link ListboxDismissOptions}.\n * @returns The input `onBlur` and the list `onMouseDown` handlers.\n */\nexport function useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss,\n}: ListboxDismissOptions): ListboxDismissHandlers {\n useEffect(() => {\n if (!open) return;\n const onDown = (event: globalThis.MouseEvent): void => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || listNode?.contains(target)) return;\n onDismiss();\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, rootRef, listNode, onDismiss]);\n\n const onInputBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>): void => {\n const next = event.relatedTarget;\n if (!open || !(next instanceof Node) || listNode?.contains(next)) return;\n onDismiss();\n },\n [open, listNode, onDismiss],\n );\n\n return { onInputBlur, onListMouseDown: keepInputFocus };\n}\n"],"mappings":"A,uBA4BA,SAASE,EAAe,EAAsC,CAC1DC,EAAM,eAAe,CACzB,CAyBA,SAAgBC,EAAkB,CAC9B,OACA,UACA,WACA,aAC8C,CAqB9C,OApBA,EAAAH,EAAA,UAAA,KAAgB,CACZ,GAAI,CAACI,EAAM,OACX,IAAMC,EAAU,GAAuC,CACnD,IAAMC,EAASJ,EAAM,OACjBK,EAAQ,SAAS,SAASD,CAAM,GAAKE,GAAU,SAASF,CAAM,GAClEG,EAAU,CACd,EAEA,OADA,OAAO,iBAAiB,YAAaJ,CAAM,MAC9B,OAAO,oBAAoB,YAAaA,CAAM,CAC/D,EAAG,CAACD,EAAMG,EAASC,EAAUC,CAAS,CAAC,EAWhC,CAAE,aAAA,EATWV,EAAAA,YAAAA,CACf,GAA8C,CAC3C,IAAMW,EAAOR,EAAM,cACdE,GAAUM,aAAgB,MAAS,IAAU,SAASA,CAAI,GAC/DD,EAAU,CACd,EACA,CAACL,EAAMI,EAAUC,CAAS,CAGrB,EAAa,gBAAiBR,CAAe,CAC1D,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-listbox-dismiss.js","names":[],"sources":["../../../src/components/Combobox/use-listbox-dismiss.ts"],"sourcesContent":["import { useCallback, useEffect, type FocusEvent, type MouseEvent, type RefObject } from \"react\";\n\n/** Inputs of {@link useListboxDismiss}. */\nexport interface ListboxDismissOptions {\n /** Whether the list is open; nothing is listened to while it is closed. */\n open: boolean;\n /** The component's wrapper — a press inside it is not a press outside. */\n rootRef: RefObject<HTMLElement | null>;\n /** The list node, checked on its own because in a portal it lives outside `rootRef`. */\n listNode: HTMLElement | null;\n /** Closes the list. Keep it stable (`useCallback`), it is an effect dependency. */\n onDismiss: () => void;\n}\n\n/** Handlers {@link useListboxDismiss} hands back to wire on the input and the list. */\nexport interface ListboxDismissHandlers {\n /** `onBlur` of the combobox input. */\n onInputBlur: (event: FocusEvent<HTMLInputElement>) => void;\n /** `onMouseDown` of the list element. */\n onListMouseDown: (event: MouseEvent<HTMLElement>) => void;\n}\n\n/**\n * Keeps focus on the input when a press lands anywhere on the list — an option,\n * the empty message, the padding or the scrollbar.\n *\n * @param event - The `mousedown` on the list.\n */\nfunction keepInputFocus(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n\n/**\n * Closes the list of an input-driven listbox (`Combobox`, `MultiSelect`) when the\n * user leaves it, by pointer or by keyboard.\n *\n * Pointer: a press outside both the wrapper and the list closes it. The list is\n * checked on its own because in a portal it is not inside the wrapper.\n *\n * Keyboard: the list closes when focus moves from the input to an element outside\n * the list. Before this (#430, measured in Chromium headless on `main`), `Tab` and\n * `Shift+Tab` took focus to the neighbouring control and left the list open on top\n * of it — `aria-expanded=\"true\"` on a field that no longer had focus — until a\n * press outside or `Escape` on the input, which no longer received keys. A blur\n * whose `relatedTarget` is `null` (focus went to a non-focusable spot or out of\n * the page) is left to the pointer rule, so a press on the label or the helper\n * text keeps behaving as a press inside.\n *\n * A press on the list calls `preventDefault()`, so it never blurs the input: the\n * option's handler runs with focus still on the field, and a press on the empty\n * message or the scrollbar no longer drops focus to `<body>`.\n *\n * @param options - See {@link ListboxDismissOptions}.\n * @returns The input `onBlur` and the list `onMouseDown` handlers.\n */\nexport function useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss,\n}: ListboxDismissOptions): ListboxDismissHandlers {\n useEffect(() => {\n if (!open) return;\n const onDown = (event: globalThis.MouseEvent): void => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || listNode?.contains(target)) return;\n onDismiss();\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, rootRef, listNode, onDismiss]);\n\n const onInputBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>): void => {\n const next = event.relatedTarget;\n if (!open || !(next instanceof Node) || listNode?.contains(next)) return;\n onDismiss();\n },\n [open, listNode, onDismiss],\n );\n\n return { onInputBlur, onListMouseDown: keepInputFocus };\n}\n"],"mappings":";;AA4BA,SAAS,EAAe,GAAsC;CAC1D,EAAM,eAAe;AACzB;AAyBA,SAAgB,EAAkB,EAC9B,SACA,YACA,aACA,gBAC8C;CAqB9C,OApBA,QAAgB;EACZ,IAAI,CAAC,GAAM;EACX,IAAM,KAAU,MAAuC;GACnD,IAAM,IAAS,EAAM;GACjB,EAAQ,SAAS,SAAS,CAAM,KAAK,GAAU,SAAS,CAAM,KAClE,EAAU;EACd;EAEA,OADA,OAAO,iBAAiB,aAAa,CAAM,SAC9B,OAAO,oBAAoB,aAAa,CAAM;CAC/D,GAAG;EAAC;EAAM;EAAS;EAAU;CAAS,CAAC,GAWhC;EAAE,aATW,GACf,MAA8C;GAC3C,IAAM,IAAO,EAAM;GACf,AAAC,KAAU,aAAgB,QAAS,IAAU,SAAS,CAAI,KAC/D,EAAU;EACd,GACA;GAAC;GAAM;GAAU;EAAS,CAGrB;EAAa,iBAAiB;CAAe;AAC1D"}
1
+ {"version":3,"file":"use-listbox-dismiss.js","names":["keepInputFocus","useListboxDismiss","useEffect","open","onDown","target","event","rootRef","listNode","onDismiss","useCallback","next"],"sources":["../../../src/components/Combobox/use-listbox-dismiss.ts"],"sourcesContent":["import { useCallback, useEffect, type FocusEvent, type MouseEvent, type RefObject } from \"react\";\n\n/** Inputs of {@link useListboxDismiss}. */\nexport interface ListboxDismissOptions {\n /** Whether the list is open; nothing is listened to while it is closed. */\n open: boolean;\n /** The component's wrapper — a press inside it is not a press outside. */\n rootRef: RefObject<HTMLElement | null>;\n /** The list node, checked on its own because in a portal it lives outside `rootRef`. */\n listNode: HTMLElement | null;\n /** Closes the list. Keep it stable (`useCallback`), it is an effect dependency. */\n onDismiss: () => void;\n}\n\n/** Handlers {@link useListboxDismiss} hands back to wire on the input and the list. */\nexport interface ListboxDismissHandlers {\n /** `onBlur` of the combobox input. */\n onInputBlur: (event: FocusEvent<HTMLInputElement>) => void;\n /** `onMouseDown` of the list element. */\n onListMouseDown: (event: MouseEvent<HTMLElement>) => void;\n}\n\n/**\n * Keeps focus on the input when a press lands anywhere on the list — an option,\n * the empty message, the padding or the scrollbar.\n *\n * @param event - The `mousedown` on the list.\n */\nfunction keepInputFocus(event: MouseEvent<HTMLElement>): void {\n event.preventDefault();\n}\n\n/**\n * Closes the list of an input-driven listbox (`Combobox`, `MultiSelect`) when the\n * user leaves it, by pointer or by keyboard.\n *\n * Pointer: a press outside both the wrapper and the list closes it. The list is\n * checked on its own because in a portal it is not inside the wrapper.\n *\n * Keyboard: the list closes when focus moves from the input to an element outside\n * the list. Before this (#430, measured in Chromium headless on `main`), `Tab` and\n * `Shift+Tab` took focus to the neighbouring control and left the list open on top\n * of it — `aria-expanded=\"true\"` on a field that no longer had focus — until a\n * press outside or `Escape` on the input, which no longer received keys. A blur\n * whose `relatedTarget` is `null` (focus went to a non-focusable spot or out of\n * the page) is left to the pointer rule, so a press on the label or the helper\n * text keeps behaving as a press inside.\n *\n * A press on the list calls `preventDefault()`, so it never blurs the input: the\n * option's handler runs with focus still on the field, and a press on the empty\n * message or the scrollbar no longer drops focus to `<body>`.\n *\n * @param options - See {@link ListboxDismissOptions}.\n * @returns The input `onBlur` and the list `onMouseDown` handlers.\n */\nexport function useListboxDismiss({\n open,\n rootRef,\n listNode,\n onDismiss,\n}: ListboxDismissOptions): ListboxDismissHandlers {\n useEffect(() => {\n if (!open) return;\n const onDown = (event: globalThis.MouseEvent): void => {\n const target = event.target as Node;\n if (rootRef.current?.contains(target) || listNode?.contains(target)) return;\n onDismiss();\n };\n window.addEventListener(\"mousedown\", onDown);\n return () => window.removeEventListener(\"mousedown\", onDown);\n }, [open, rootRef, listNode, onDismiss]);\n\n const onInputBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>): void => {\n const next = event.relatedTarget;\n if (!open || !(next instanceof Node) || listNode?.contains(next)) return;\n onDismiss();\n },\n [open, listNode, onDismiss],\n );\n\n return { onInputBlur, onListMouseDown: keepInputFocus };\n}\n"],"mappings":";;AA4BA,SAASA,EAAe,GAAsC;CAC1D,EAAM,eAAe;AACzB;AAyBA,SAAgBC,EAAkB,EAC9B,SACA,YACA,aACA,gBAC8C;CAqB9C,OApBAC,QAAgB;EACZ,IAAI,CAACC,GAAM;EACX,IAAMC,KAAU,MAAuC;GACnD,IAAMC,IAASC,EAAM;GACrB,AAAIC,EAAQ,SAAS,SAASF,CAAM,KAAKG,GAAU,SAASH,CAAM,KAClEI,EAAU;EACd;EAEA,OADA,OAAO,iBAAiB,aAAaL,CAAM,SAC9B,OAAO,oBAAoB,aAAaA,CAAM;CAC/D,GAAG;EAACD;EAAMI;EAASC;EAAUC;CAAS,CAAC,GAWhC;EAAE,aATWC,GACf,MAA8C;GAC3C,IAAMC,IAAOL,EAAM;GACnB,AAAKH,KAAUQ,aAAgB,QAAS,IAAU,SAASA,CAAI,KAC/DF,EAAU;EACd,GACA;GAACN;GAAMK;GAAUC;EAAS,CAGrB;EAAa,iBAAiBT;CAAe;AAC1D"}
@@ -1,2 +1,2 @@
1
- const e=require("../../utils/cn.cjs"),t=require("../../hooks/use-focus-trap.cjs"),n=require("../Portal/portal-host.cjs"),r=require("./Command.module.cjs");let i=require("react"),a=require("react/jsx-runtime"),o=require("react-dom");function s(e,t){return t===``||e.label.toLowerCase().includes(t)?!0:(e.keywords??[]).some(e=>e.toLowerCase().includes(t))}function c(e){let t=[],n=new Map;for(let r of e){let e=n.get(r.group);e===void 0?(n.set(r.group,t.length),t.push({name:r.group,items:[r]})):t[e].items.push(r)}return t}function l({open:l,onOpenChange:d,items:f,placeholder:p=`Type a command…`,emptyMessage:m=`No results`,className:h}){let g=(0,i.useRef)(null),[_,v]=(0,i.useState)(``),[y,b]=(0,i.useState)(0),x=`tempest-command-list`;t.useFocusTrap(g,l);let S=(0,i.useMemo)(()=>{let e=_.trim().toLowerCase();return c(f.filter(t=>s(t,e))).flatMap(e=>e.items)},[f,_]),C=(0,i.useMemo)(()=>c(S),[S]);(0,i.useEffect)(()=>{l&&(v(``),b(0))},[l]),(0,i.useEffect)(()=>{b(e=>S.length===0?0:Math.min(e,S.length-1))},[S.length]);let w=n.usePortalHost();if(!l||!w)return null;function T(e){e.onSelect(),d(!1)}function E(e){if(e.key===`Escape`){e.preventDefault(),d(!1);return}if(e.key===`ArrowDown`){if(e.preventDefault(),S.length===0)return;b(e=>(e+1)%S.length);return}if(e.key===`ArrowUp`){if(e.preventDefault(),S.length===0)return;b(e=>(e-1+S.length)%S.length);return}if(e.key===`Enter`){e.preventDefault();let t=S[y];t&&T(t)}}let D=-1;return(0,o.createPortal)((0,a.jsx)(`div`,{className:r.default.overlay,role:`presentation`,onClick:()=>d(!1),children:(0,a.jsxs)(`div`,{ref:g,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:e.cn(r.default.dialog,h),onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)(`div`,{className:r.default.inputRow,children:[(0,a.jsx)(u,{}),(0,a.jsx)(`input`,{type:`text`,role:`combobox`,"aria-expanded":`true`,"aria-controls":x,"aria-autocomplete":`list`,autoFocus:!0,className:r.default.input,placeholder:p,value:_,onChange:e=>v(e.target.value),onKeyDown:E})]}),(0,a.jsx)(`ul`,{id:x,role:`listbox`,className:r.default.list,children:S.length===0?(0,a.jsx)(`li`,{className:r.default.empty,children:m}):C.map(t=>(0,a.jsxs)(`li`,{className:r.default.group,children:[t.name&&(0,a.jsx)(`div`,{className:r.default.groupHeading,children:t.name}),(0,a.jsx)(`ul`,{role:`presentation`,className:r.default.groupList,children:t.items.map(t=>{D+=1;let n=D===y,i=D;return(0,a.jsxs)(`li`,{role:`option`,"aria-selected":n,className:e.cn(r.default.option,n&&r.default.active),onMouseMove:()=>b(i),onClick:()=>T(t),children:[t.icon&&(0,a.jsx)(`span`,{className:r.default.icon,children:t.icon}),(0,a.jsx)(`span`,{className:r.default.label,children:t.label})]},t.id)})})]},t.name??`__ungrouped__`))})]})}),w)}function u(){return(0,a.jsxs)(`svg`,{className:r.default.searchIcon,width:`18`,height:`18`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,children:[(0,a.jsx)(`circle`,{cx:`11`,cy:`11`,r:`7`,stroke:`currentColor`,strokeWidth:`2`}),(0,a.jsx)(`path`,{d:`M20 20l-3.5-3.5`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`})]})}exports.Command=l;
1
+ const e=require("../../utils/cn.cjs"),t=require("../../hooks/use-focus-trap.cjs"),n=require("../Portal/portal-host.cjs"),r=require("./Command.module.cjs");let i=require("react"),a=require("react/jsx-runtime"),o=require("react-dom");function s(e,t){return t===``||e.label.toLowerCase().includes(t)?!0:(e.keywords??[]).some(e=>e.toLowerCase().includes(t))}function c(e){let t=[],n=new Map;for(let r of e){let e=n.get(r.group);e===void 0?(n.set(r.group,t.length),t.push({name:r.group,items:[r]})):t[e].items.push(r)}return t}function l({open:l,onOpenChange:d,items:f,placeholder:p=`Type a command…`,emptyMessage:m=`No results`,className:h}){let g=(0,i.useRef)(null),[_,v]=(0,i.useState)(``),[y,b]=(0,i.useState)(0),x=`tempest-command-list`;t.useFocusTrap(g,l);let S=(0,i.useMemo)(()=>{let e=_.trim().toLowerCase();return c(f.filter(t=>s(t,e))).flatMap(e=>e.items)},[f,_]),C=(0,i.useMemo)(()=>c(S),[S]);(0,i.useEffect)(()=>{l&&(v(``),b(0))},[l]),(0,i.useEffect)(()=>{b(e=>S.length===0?0:Math.min(e,S.length-1))},[S.length]);let w=n.usePortalHost();if(!l||!w)return null;function T(e){e.onSelect(),d(!1)}function E(e){if(e.key===`Escape`)e.preventDefault(),d(!1);else if(e.key===`ArrowDown`){if(e.preventDefault(),S.length===0)return;b(e=>(e+1)%S.length)}else if(e.key===`ArrowUp`){if(e.preventDefault(),S.length===0)return;b(e=>(e-1+S.length)%S.length)}else if(e.key===`Enter`){e.preventDefault();let t=S[y];t&&T(t)}}let D=-1;return(0,o.createPortal)((0,a.jsx)(`div`,{className:r.default.overlay,role:`presentation`,onClick:()=>d(!1),children:(0,a.jsxs)(`div`,{ref:g,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:e.cn(r.default.dialog,h),onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)(`div`,{className:r.default.inputRow,children:[(0,a.jsx)(u,{}),(0,a.jsx)(`input`,{type:`text`,role:`combobox`,"aria-expanded":`true`,"aria-controls":x,"aria-autocomplete":`list`,autoFocus:!0,className:r.default.input,placeholder:p,value:_,onChange:e=>v(e.target.value),onKeyDown:E})]}),(0,a.jsx)(`ul`,{id:x,role:`listbox`,className:r.default.list,children:S.length===0?(0,a.jsx)(`li`,{className:r.default.empty,children:m}):C.map(t=>(0,a.jsxs)(`li`,{className:r.default.group,children:[t.name&&(0,a.jsx)(`div`,{className:r.default.groupHeading,children:t.name}),(0,a.jsx)(`ul`,{role:`presentation`,className:r.default.groupList,children:t.items.map(t=>{D+=1;let n=D===y,i=D;return(0,a.jsxs)(`li`,{role:`option`,"aria-selected":n,className:e.cn(r.default.option,n&&r.default.active),onMouseMove:()=>b(i),onClick:()=>T(t),children:[t.icon&&(0,a.jsx)(`span`,{className:r.default.icon,children:t.icon}),(0,a.jsx)(`span`,{className:r.default.label,children:t.label})]},t.id)})})]},t.name??`__ungrouped__`))})]})}),w)}function u(){return(0,a.jsxs)(`svg`,{className:r.default.searchIcon,width:`18`,height:`18`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,children:[(0,a.jsx)(`circle`,{cx:`11`,cy:`11`,r:`7`,stroke:`currentColor`,strokeWidth:`2`}),(0,a.jsx)(`path`,{d:`M20 20l-3.5-3.5`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`})]})}exports.Command=l;
2
2
  //# sourceMappingURL=Command.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Command.cjs","names":[],"sources":["../../../src/components/Command/Command.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — a command palette is a filtered\n * listbox with its own keyboard contract: the body holds the query, the flattened\n * result list, the active index and the Escape/Enter handling, all of which read\n * each other on every keystroke.\n */\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/utils/cn\";\nimport { useFocusTrap } from \"@/hooks/use-focus-trap\";\nimport styles from \"./Command.module.css\";\nimport { usePortalHost } from \"../Portal/portal-host\";\n\nexport interface CommandItem {\n /** Stable unique identifier for the item. */\n id: string;\n /** Human-readable label shown in the list and matched against the query. */\n label: string;\n /** Optional group heading; items sharing a group are rendered together. */\n group?: string;\n /** Extra terms matched against the query in addition to `label`. */\n keywords?: string[];\n /** Invoked when the item is chosen (click or Enter on the active row). */\n onSelect: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n}\n\nexport interface CommandProps {\n /** Whether the palette is visible. */\n open: boolean;\n /** Called with the next open state (Escape, selection, backdrop click). */\n onOpenChange: (open: boolean) => void;\n /** Candidate items to filter and display. */\n items: CommandItem[];\n /** Placeholder for the search input. */\n placeholder?: string;\n /** Rendered when no item matches the current query. */\n emptyMessage?: ReactNode;\n /** Forwarded to the dialog element. */\n className?: string;\n}\n\ninterface CommandGroup {\n name: string | undefined;\n items: CommandItem[];\n}\n\n/**\n * Case-insensitively test whether `item` matches `query` by substring against\n * its label and any keywords. An empty query matches everything.\n *\n * @param item - The candidate command item.\n * @param query - The lowercased search query.\n * @returns `true` when the item should be shown.\n */\nfunction matchesQuery(item: CommandItem, query: string): boolean {\n if (query === \"\") return true;\n if (item.label.toLowerCase().includes(query)) return true;\n return (item.keywords ?? []).some((keyword) => keyword.toLowerCase().includes(query));\n}\n\n/**\n * Partition a flat item list into ordered groups, preserving first-seen order\n * for both groups and the items within them.\n *\n * @param items - The (already filtered) items to group.\n * @returns An ordered list of groups.\n */\nfunction groupItems(items: CommandItem[]): CommandGroup[] {\n const groups: CommandGroup[] = [];\n const indexByName = new Map<string | undefined, number>();\n for (const item of items) {\n const existing = indexByName.get(item.group);\n if (existing === undefined) {\n indexByName.set(item.group, groups.length);\n groups.push({ name: item.group, items: [item] });\n } else {\n groups[existing]!.items.push(item);\n }\n }\n return groups;\n}\n\n/**\n * A ⌘K-style command palette: an overlay dialog with a search input that\n * substring-filters items by label and keywords, groups results, and supports\n * full keyboard navigation (Arrow up/down, Enter, Escape). Traps focus while\n * open.\n */\nexport function Command({\n open,\n onOpenChange,\n items,\n placeholder = \"Type a command…\",\n emptyMessage = \"No results\",\n className,\n}: CommandProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const [query, setQuery] = useState<string>(\"\");\n const [activeIndex, setActiveIndex] = useState<number>(0);\n const listId = \"tempest-command-list\";\n\n useFocusTrap(dialogRef, open);\n\n const filtered = useMemo<CommandItem[]>(() => {\n const normalized = query.trim().toLowerCase();\n const visible = items.filter((item) => matchesQuery(item, normalized));\n return groupItems(visible).flatMap((group) => group.items);\n }, [items, query]);\n\n const groups = useMemo<CommandGroup[]>(() => groupItems(filtered), [filtered]);\n\n // Reset transient state whenever the palette opens.\n useEffect(() => {\n if (open) {\n setQuery(\"\");\n setActiveIndex(0);\n }\n }, [open]);\n\n // Keep the active index within bounds as the filtered list shrinks/grows.\n useEffect(() => {\n setActiveIndex((index) => {\n if (filtered.length === 0) return 0;\n return Math.min(index, filtered.length - 1);\n });\n }, [filtered.length]);\n\n const portalHost = usePortalHost();\n\n if (!open || !portalHost) return null;\n\n function selectItem(item: CommandItem): void {\n item.onSelect();\n onOpenChange(false);\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onOpenChange(false);\n return;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (filtered.length === 0) return;\n setActiveIndex((index) => (index + 1) % filtered.length);\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (filtered.length === 0) return;\n setActiveIndex((index) => (index - 1 + filtered.length) % filtered.length);\n return;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n const item = filtered[activeIndex];\n if (item) selectItem(item);\n }\n }\n\n let renderIndex = -1;\n\n return createPortal(\n <div className={styles.overlay} role=\"presentation\" onClick={() => onOpenChange(false)}>\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n className={cn(styles.dialog, className)}\n onClick={(event) => event.stopPropagation()}\n >\n <div className={styles.inputRow}>\n <SearchIcon />\n <input\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n autoFocus\n className={styles.input}\n placeholder={placeholder}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={handleKeyDown}\n />\n </div>\n <ul id={listId} role=\"listbox\" className={styles.list}>\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n groups.map((group) => (\n <li key={group.name ?? \"__ungrouped__\"} className={styles.group}>\n {group.name && (\n <div className={styles.groupHeading}>{group.name}</div>\n )}\n <ul role=\"presentation\" className={styles.groupList}>\n {group.items.map((item) => {\n renderIndex += 1;\n const isActive = renderIndex === activeIndex;\n const index = renderIndex;\n return (\n <li\n key={item.id}\n role=\"option\"\n aria-selected={isActive}\n className={cn(\n styles.option,\n isActive && styles.active,\n )}\n onMouseMove={() => setActiveIndex(index)}\n onClick={() => selectItem(item)}\n >\n {item.icon && (\n <span className={styles.icon}>{item.icon}</span>\n )}\n <span className={styles.label}>{item.label}</span>\n </li>\n );\n })}\n </ul>\n </li>\n ))\n )}\n </ul>\n </div>\n </div>,\n portalHost,\n );\n}\n\nfunction SearchIcon() {\n return (\n <svg\n className={styles.searchIcon}\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M20 20l-3.5-3.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Command.cjs","names":["useRef","useState","useMemo","usePortalHost","createPortal","styles","cn","require_cn","require_use_focus_trap","require_portal_host","require_Command_module","react","react_jsx_runtime","react_dom","matchesQuery","query","item","keyword","groupItems","groups","indexByName","items","existing","Command","dialogRef","setQuery","activeIndex","setActiveIndex","listId","open","filtered","normalized","group","index","portalHost","selectItem","onOpenChange","handleKeyDown","event","renderIndex","className","SearchIcon","emptyMessage","isActive"],"sources":["../../../src/components/Command/Command.tsx"],"sourcesContent":["/**\n * @tempest-limits file-lines, function-lines — a command palette is a filtered\n * listbox with its own keyboard contract: the body holds the query, the flattened\n * result list, the active index and the Escape/Enter handling, all of which read\n * each other on every keystroke.\n */\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/utils/cn\";\nimport { useFocusTrap } from \"@/hooks/use-focus-trap\";\nimport styles from \"./Command.module.css\";\nimport { usePortalHost } from \"../Portal/portal-host\";\n\nexport interface CommandItem {\n /** Stable unique identifier for the item. */\n id: string;\n /** Human-readable label shown in the list and matched against the query. */\n label: string;\n /** Optional group heading; items sharing a group are rendered together. */\n group?: string;\n /** Extra terms matched against the query in addition to `label`. */\n keywords?: string[];\n /** Invoked when the item is chosen (click or Enter on the active row). */\n onSelect: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n}\n\nexport interface CommandProps {\n /** Whether the palette is visible. */\n open: boolean;\n /** Called with the next open state (Escape, selection, backdrop click). */\n onOpenChange: (open: boolean) => void;\n /** Candidate items to filter and display. */\n items: CommandItem[];\n /** Placeholder for the search input. */\n placeholder?: string;\n /** Rendered when no item matches the current query. */\n emptyMessage?: ReactNode;\n /** Forwarded to the dialog element. */\n className?: string;\n}\n\ninterface CommandGroup {\n name: string | undefined;\n items: CommandItem[];\n}\n\n/**\n * Case-insensitively test whether `item` matches `query` by substring against\n * its label and any keywords. An empty query matches everything.\n *\n * @param item - The candidate command item.\n * @param query - The lowercased search query.\n * @returns `true` when the item should be shown.\n */\nfunction matchesQuery(item: CommandItem, query: string): boolean {\n if (query === \"\") return true;\n if (item.label.toLowerCase().includes(query)) return true;\n return (item.keywords ?? []).some((keyword) => keyword.toLowerCase().includes(query));\n}\n\n/**\n * Partition a flat item list into ordered groups, preserving first-seen order\n * for both groups and the items within them.\n *\n * @param items - The (already filtered) items to group.\n * @returns An ordered list of groups.\n */\nfunction groupItems(items: CommandItem[]): CommandGroup[] {\n const groups: CommandGroup[] = [];\n const indexByName = new Map<string | undefined, number>();\n for (const item of items) {\n const existing = indexByName.get(item.group);\n if (existing === undefined) {\n indexByName.set(item.group, groups.length);\n groups.push({ name: item.group, items: [item] });\n } else {\n groups[existing]!.items.push(item);\n }\n }\n return groups;\n}\n\n/**\n * A ⌘K-style command palette: an overlay dialog with a search input that\n * substring-filters items by label and keywords, groups results, and supports\n * full keyboard navigation (Arrow up/down, Enter, Escape). Traps focus while\n * open.\n */\nexport function Command({\n open,\n onOpenChange,\n items,\n placeholder = \"Type a command…\",\n emptyMessage = \"No results\",\n className,\n}: CommandProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const [query, setQuery] = useState<string>(\"\");\n const [activeIndex, setActiveIndex] = useState<number>(0);\n const listId = \"tempest-command-list\";\n\n useFocusTrap(dialogRef, open);\n\n const filtered = useMemo<CommandItem[]>(() => {\n const normalized = query.trim().toLowerCase();\n const visible = items.filter((item) => matchesQuery(item, normalized));\n return groupItems(visible).flatMap((group) => group.items);\n }, [items, query]);\n\n const groups = useMemo<CommandGroup[]>(() => groupItems(filtered), [filtered]);\n\n // Reset transient state whenever the palette opens.\n useEffect(() => {\n if (open) {\n setQuery(\"\");\n setActiveIndex(0);\n }\n }, [open]);\n\n // Keep the active index within bounds as the filtered list shrinks/grows.\n useEffect(() => {\n setActiveIndex((index) => {\n if (filtered.length === 0) return 0;\n return Math.min(index, filtered.length - 1);\n });\n }, [filtered.length]);\n\n const portalHost = usePortalHost();\n\n if (!open || !portalHost) return null;\n\n function selectItem(item: CommandItem): void {\n item.onSelect();\n onOpenChange(false);\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onOpenChange(false);\n return;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (filtered.length === 0) return;\n setActiveIndex((index) => (index + 1) % filtered.length);\n return;\n }\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (filtered.length === 0) return;\n setActiveIndex((index) => (index - 1 + filtered.length) % filtered.length);\n return;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n const item = filtered[activeIndex];\n if (item) selectItem(item);\n }\n }\n\n let renderIndex = -1;\n\n return createPortal(\n <div className={styles.overlay} role=\"presentation\" onClick={() => onOpenChange(false)}>\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n className={cn(styles.dialog, className)}\n onClick={(event) => event.stopPropagation()}\n >\n <div className={styles.inputRow}>\n <SearchIcon />\n <input\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n autoFocus\n className={styles.input}\n placeholder={placeholder}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={handleKeyDown}\n />\n </div>\n <ul id={listId} role=\"listbox\" className={styles.list}>\n {filtered.length === 0 ? (\n <li className={styles.empty}>{emptyMessage}</li>\n ) : (\n groups.map((group) => (\n <li key={group.name ?? \"__ungrouped__\"} className={styles.group}>\n {group.name && (\n <div className={styles.groupHeading}>{group.name}</div>\n )}\n <ul role=\"presentation\" className={styles.groupList}>\n {group.items.map((item) => {\n renderIndex += 1;\n const isActive = renderIndex === activeIndex;\n const index = renderIndex;\n return (\n <li\n key={item.id}\n role=\"option\"\n aria-selected={isActive}\n className={cn(\n styles.option,\n isActive && styles.active,\n )}\n onMouseMove={() => setActiveIndex(index)}\n onClick={() => selectItem(item)}\n >\n {item.icon && (\n <span className={styles.icon}>{item.icon}</span>\n )}\n <span className={styles.label}>{item.label}</span>\n </li>\n );\n })}\n </ul>\n </li>\n ))\n )}\n </ul>\n </div>\n </div>,\n portalHost,\n );\n}\n\nfunction SearchIcon() {\n return (\n <svg\n className={styles.searchIcon}\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M20 20l-3.5-3.5\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n"],"mappings":"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"}
@@ -38,21 +38,14 @@ function p({ open: p, onOpenChange: h, items: g, placeholder: _ = "Type a comman
38
38
  e.onSelect(), h(!1);
39
39
  }
40
40
  function A(e) {
41
- if (e.key === "Escape") {
42
- e.preventDefault(), h(!1);
43
- return;
44
- }
45
- if (e.key === "ArrowDown") {
41
+ if (e.key === "Escape") e.preventDefault(), h(!1);
42
+ else if (e.key === "ArrowDown") {
46
43
  if (e.preventDefault(), E.length === 0) return;
47
44
  w((e) => (e + 1) % E.length);
48
- return;
49
- }
50
- if (e.key === "ArrowUp") {
45
+ } else if (e.key === "ArrowUp") {
51
46
  if (e.preventDefault(), E.length === 0) return;
52
47
  w((e) => (e - 1 + E.length) % E.length);
53
- return;
54
- }
55
- if (e.key === "Enter") {
48
+ } else if (e.key === "Enter") {
56
49
  e.preventDefault();
57
50
  let t = E[C];
58
51
  t && k(t);