@jfrader/ui 0.5.0 → 0.6.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 (314) hide show
  1. package/README.md +18 -1
  2. package/dist/accordion-D6myONB9.js +206 -0
  3. package/dist/accordion.js +1 -1
  4. package/dist/activity-rings-Uszvwqdl.js +528 -0
  5. package/dist/activity-rings.js +2 -0
  6. package/dist/{alert-DS_einpy.js → alert-Bhj-qSMs.js} +15 -14
  7. package/dist/alert.js +1 -1
  8. package/dist/{announcement-bar-B58xempt.js → announcement-bar-B5J33QUh.js} +132 -131
  9. package/dist/announcement-bar.js +1 -1
  10. package/dist/avatar-B6idYC59.js +146 -0
  11. package/dist/{avatar-group-DOQQuV51.js → avatar-group-DvP8mAE-.js} +10 -9
  12. package/dist/avatar-group.js +1 -1
  13. package/dist/avatar.js +1 -1
  14. package/dist/badge-CfhTcA-Z.js +120 -0
  15. package/dist/badge.js +1 -1
  16. package/dist/billing-toggle-CgC7yxxo.js +349 -0
  17. package/dist/billing-toggle.js +2 -0
  18. package/dist/{bottom-sheet-DPJBFkie.js → bottom-sheet-BFQKO0Wo.js} +287 -268
  19. package/dist/bottom-sheet.js +1 -1
  20. package/dist/{breadcrumbs-Cfw_hgt2.js → breadcrumbs-CG3akw-b.js} +28 -20
  21. package/dist/breadcrumbs.js +1 -1
  22. package/dist/{button-C92uYFJW.js → button-C6OV0C7J.js} +21 -20
  23. package/dist/button-group-B9wP2ddS.js +611 -0
  24. package/dist/button-group.js +2 -0
  25. package/dist/button.js +1 -1
  26. package/dist/calendar-Bg6D2sul.js +377 -0
  27. package/dist/calendar.js +1 -1
  28. package/dist/calendar.utils-azmB4Ej7.js +79 -0
  29. package/dist/card-C008OQCp.js +164 -0
  30. package/dist/card.js +1 -1
  31. package/dist/carousel-lTH4Foke.js +475 -0
  32. package/dist/carousel.js +1 -1
  33. package/dist/chat-thread-DVa17BRC.js +864 -0
  34. package/dist/chat-thread.js +2 -0
  35. package/dist/{checkbox-cFquiSdy.js → checkbox-CClE61GV.js} +23 -21
  36. package/dist/checkbox.js +1 -1
  37. package/dist/{chip-group-DTQd_M-G.js → chip-group-BZUX9KPF.js} +19 -17
  38. package/dist/chip-group.js +1 -1
  39. package/dist/{choice-control-5kJkLXgv.js → choice-control-BsWOZPc9.js} +1 -1
  40. package/dist/{code-block-ahnRi-g8.js → code-block-CYP89_6h.js} +99 -97
  41. package/dist/code-block.js +1 -1
  42. package/dist/{combobox-Bhzvu9ma.js → combobox-D2Oc-co7.js} +131 -125
  43. package/dist/combobox.js +1 -1
  44. package/dist/command-palette-BrT1n9bb.js +394 -0
  45. package/dist/command-palette.js +1 -1
  46. package/dist/comment-thread-BnUHxviq.js +772 -0
  47. package/dist/comment-thread.js +2 -0
  48. package/dist/{container-BOaSptJa.js → container-BxtwJSSD.js} +3 -2
  49. package/dist/container.js +1 -1
  50. package/dist/context-menu-I4i0LRpm.js +371 -0
  51. package/dist/context-menu.js +2 -0
  52. package/dist/{copy-button-ByiA6D3R.js → copy-button-C0p_qrgf.js} +4 -4
  53. package/dist/copy-button.js +1 -1
  54. package/dist/{countdown-Dp_TD1VP.js → countdown-EcpV6rXy.js} +18 -17
  55. package/dist/countdown.js +1 -1
  56. package/dist/css-BYJhdGh-.js +2 -0
  57. package/dist/{date-picker-5zKSSuFF.js → date-picker-D-bn-iHs.js} +15 -14
  58. package/dist/date-picker.js +1 -1
  59. package/dist/date-range-picker-rXcZsI1Y.js +589 -0
  60. package/dist/date-range-picker.js +1 -1
  61. package/dist/dialog-CR1xdkrC.js +222 -0
  62. package/dist/dialog.js +1 -1
  63. package/dist/{divider-DYoJf0I_.js → divider-zOJzkcHh.js} +23 -21
  64. package/dist/divider.js +1 -1
  65. package/dist/drawer-CceaEhCr.js +590 -0
  66. package/dist/drawer.js +1 -1
  67. package/dist/{empty-state-CDgrjPPf.js → empty-state-DO0ApylK.js} +2 -1
  68. package/dist/empty-state.js +1 -1
  69. package/dist/{expandable-card-C-qJcZ14.js → expandable-card-W97vjix9.js} +59 -51
  70. package/dist/expandable-card.js +1 -1
  71. package/dist/expanding-search-Bb2_YfNx.js +239 -0
  72. package/dist/expanding-search.js +2 -0
  73. package/dist/{field-anatomy-COVdNpf5.js → field-anatomy-BDIP42MI.js} +2 -1
  74. package/dist/file-dropzone-Bi5ikRIz.js +458 -0
  75. package/dist/file-dropzone.js +1 -1
  76. package/dist/{filter-toolbar-D5KEKTSe.js → filter-toolbar-QRnC4S_H.js} +36 -33
  77. package/dist/filter-toolbar.js +1 -1
  78. package/dist/{flex-Dh-_J5-U.js → flex-CS7eMRcK.js} +2 -2
  79. package/dist/flex.js +1 -1
  80. package/dist/{hold-to-confirm-DjB2EVjM.js → hold-to-confirm-CVBA0wNT.js} +18 -17
  81. package/dist/hold-to-confirm.js +1 -1
  82. package/dist/{hover-card-B-nrCIy2.js → hover-card-DN1EAlQA.js} +26 -25
  83. package/dist/hover-card.js +1 -1
  84. package/dist/{icon-wrapper-stN8sD7R.js → icon-wrapper-C-zMD0uL.js} +1 -1
  85. package/dist/{image-compare-ciuhPtQZ.js → image-compare-Ln2UUqTU.js} +20 -19
  86. package/dist/image-compare.js +1 -1
  87. package/dist/index.js +98 -78
  88. package/dist/{inline-edit-C0eeml65.js → inline-edit-D-pR2RPC.js} +22 -21
  89. package/dist/inline-edit.js +1 -1
  90. package/dist/{input-control-DmMuAuPS.js → input-control-B6HVBgwl.js} +1 -1
  91. package/dist/{json-viewer-BcySQfjZ.js → json-viewer-Dro3WrjS.js} +34 -29
  92. package/dist/json-viewer.js +1 -1
  93. package/dist/{kbd-C3ACoMoE.js → kbd-BI_9qzYr.js} +2 -1
  94. package/dist/kbd.js +1 -1
  95. package/dist/keycap-keyboard-Cdx-OAS1.js +311 -0
  96. package/dist/keycap-keyboard.js +2 -0
  97. package/dist/{layout-style-Cbd1Vilw.js → layout-style-BE0gSqrH.js} +1 -1
  98. package/dist/lightbox-gallery-D0YaSTut.js +777 -0
  99. package/dist/lightbox-gallery.js +2 -0
  100. package/dist/link-unfurl-CReyIjyy.js +695 -0
  101. package/dist/link-unfurl.js +2 -0
  102. package/dist/{listbox-style-WX-RASp1.js → listbox-style-DNOxAulu.js} +1 -1
  103. package/dist/{loading-ring-B8-30Dl1.js → loading-ring-D0lGrK8z.js} +1 -1
  104. package/dist/locale-switcher-CZF7XNYG.js +295 -0
  105. package/dist/locale-switcher.js +2 -0
  106. package/dist/mention-input-BjjAbJCf.js +600 -0
  107. package/dist/mention-input.js +1 -1
  108. package/dist/menu-CVzpsyXn.js +312 -0
  109. package/dist/menu.js +1 -1
  110. package/dist/{metric-card-Bh9K4fZs.js → metric-card-BnFssTXj.js} +12 -11
  111. package/dist/metric-card.js +1 -1
  112. package/dist/{multi-select-Pce_IYnz.js → multi-select-B3puEVo0.js} +78 -69
  113. package/dist/multi-select.js +1 -1
  114. package/dist/{navigation-sP5fiuQS.js → navigation-C_JD43gA.js} +56 -49
  115. package/dist/navigation.js +1 -1
  116. package/dist/next.js +65 -0
  117. package/dist/now-playing-DjVm1Phm.js +439 -0
  118. package/dist/now-playing.js +2 -0
  119. package/dist/{overlay-layer-SeUyyEPD.js → overlay-layer-qEbpEtb8.js} +16 -2
  120. package/dist/overlay-motion-Cr77ihn2.js +90 -0
  121. package/dist/{overlay-portal-C4JZFq2M.js → overlay-portal-C9igMHnC.js} +1 -1
  122. package/dist/{pagination-DmXZ8E85.js → pagination-Dkh4bJQh.js} +31 -29
  123. package/dist/pagination.js +1 -1
  124. package/dist/{password-field-03pWRkuY.js → password-field-Da58GP1g.js} +4 -4
  125. package/dist/password-field.js +1 -1
  126. package/dist/photo-grid-Dtl17D74.js +830 -0
  127. package/dist/photo-grid.js +2 -0
  128. package/dist/pill-Dd7pog19.js +59 -0
  129. package/dist/pill.js +1 -1
  130. package/dist/popover-CUMOcMtj.js +126 -0
  131. package/dist/popover.js +1 -1
  132. package/dist/presence-spring-4zwtUDQN.js +12 -0
  133. package/dist/{progress-CbOWBUdA.js → progress-Bcuz3Ob4.js} +12 -11
  134. package/dist/progress.js +1 -1
  135. package/dist/{radio-cards-D2QZENI_.js → radio-cards-FkAhESb5.js} +65 -63
  136. package/dist/radio-cards.js +1 -1
  137. package/dist/{radio-group-E6mMRgo7.js → radio-group-DItMf2YM.js} +32 -28
  138. package/dist/radio-group.js +1 -1
  139. package/dist/{resizable-panels-BhjUVXZZ.js → resizable-panels-61h9hA3B.js} +16 -14
  140. package/dist/resizable-panels.js +1 -1
  141. package/dist/{scroll-area-CcZyiSOQ.js → scroll-area-B8KkCPOM.js} +16 -15
  142. package/dist/scroll-area.js +1 -1
  143. package/dist/{search-field-IxF0IJXm.js → search-field-CbsajaZb.js} +94 -93
  144. package/dist/search-field.js +1 -1
  145. package/dist/{segmented-control-yO1K1nbi.js → segmented-control-DCh-4ca-.js} +28 -26
  146. package/dist/segmented-control.js +1 -1
  147. package/dist/{select-n_H52W1Z.js → select-SrcQqZjo.js} +29 -27
  148. package/dist/select.js +1 -1
  149. package/dist/sheet-stack-DYX1SGSB.js +820 -0
  150. package/dist/sheet-stack.js +2 -0
  151. package/dist/shortcut-recorder-VgTQdjjn.js +688 -0
  152. package/dist/shortcut-recorder.js +2 -0
  153. package/dist/signature-pad-khL2yhQI.js +646 -0
  154. package/dist/signature-pad.js +1 -1
  155. package/dist/{skeleton-XQQDkCHd.js → skeleton-LJsQsveI.js} +9 -8
  156. package/dist/skeleton.js +1 -1
  157. package/dist/slider-DjAnGmlC.js +535 -0
  158. package/dist/slider.js +1 -1
  159. package/dist/{sortable-data-table-tirqlLY2.js → sortable-data-table-Bpitup_d.js} +29 -28
  160. package/dist/sortable-data-table.js +1 -1
  161. package/dist/{spinner-DtxvDPdM.js → spinner-CvzajSg9.js} +11 -10
  162. package/dist/spinner.js +1 -1
  163. package/dist/{split-button-Cb3EHs64.js → split-button-Bu41f2AY.js} +88 -93
  164. package/dist/split-button.js +1 -1
  165. package/dist/{stack-DC3IbtWk.js → stack-Bac4sJeI.js} +2 -2
  166. package/dist/stack.js +1 -1
  167. package/dist/{stepper-CruHbXxX.js → stepper-C8Ncavbr.js} +22 -21
  168. package/dist/stepper.js +1 -1
  169. package/dist/stretch-refresh-OrnTEj7P.js +349 -0
  170. package/dist/stretch-refresh.js +2 -0
  171. package/dist/{surface-DZ4d-2aL.js → surface-C69kwSuk.js} +13 -3
  172. package/dist/{swipe-actions-DiZC57-3.js → swipe-actions-1H5UOZKE.js} +29 -26
  173. package/dist/swipe-actions.js +1 -1
  174. package/dist/switch-79-hkQqg.js +146 -0
  175. package/dist/switch.js +1 -1
  176. package/dist/sx-BJXJ2xJK.js +23 -0
  177. package/dist/tabs-Bb5-noYE.js +211 -0
  178. package/dist/tabs.js +1 -1
  179. package/dist/{tag-input-DSRCyrX2.js → tag-input-BQaueKEb.js} +5 -5
  180. package/dist/tag-input.js +1 -1
  181. package/dist/{text-field-C8TWG-tY.js → text-field-D0VP7b4P.js} +18 -16
  182. package/dist/text-field.js +1 -1
  183. package/dist/{textarea-BrW0XcG_.js → textarea-D1YwEPmn.js} +21 -19
  184. package/dist/textarea.js +1 -1
  185. package/dist/theme-provider-BvcY-iJu.js +20 -0
  186. package/dist/theme-root-BrYVcTzt.js +163 -0
  187. package/dist/theme-root.js +1 -1
  188. package/dist/theme-scope-DGWy4H0C.js +62 -0
  189. package/dist/theme-switch-CP42mVDb.js +167 -0
  190. package/dist/theme-switch.js +2 -0
  191. package/dist/thread-parts-DfZNz70v.js +683 -0
  192. package/dist/{time-picker-Db8D49cP.js → time-picker-Tnd-JBLC.js} +39 -32
  193. package/dist/time-picker.js +1 -1
  194. package/dist/{timeline-k3nURuCP.js → timeline-DaldDMX7.js} +28 -21
  195. package/dist/timeline.js +1 -1
  196. package/dist/{toast-BHxI32ZA.js → toast-CSAbl5yK.js} +107 -87
  197. package/dist/{toast-stack-DqrAzdg5.js → toast-stack-BCR4Cu7V.js} +25 -10
  198. package/dist/toast-stack.js +1 -1
  199. package/dist/toast.js +1 -1
  200. package/dist/{toggle-group-fcjzpifI.js → toggle-group-C7ye1v4s.js} +24 -23
  201. package/dist/toggle-group.js +1 -1
  202. package/dist/tooltip-IajLwdUb.js +129 -0
  203. package/dist/tooltip.js +1 -1
  204. package/dist/{tree-view-C2liIxqy.js → tree-view-CoW4oJIZ.js} +18 -13
  205. package/dist/tree-view.js +1 -1
  206. package/dist/{trigger-style-B1KVC8O1.js → trigger-style-CtOrdPk4.js} +1 -1
  207. package/dist/types/components/activity-rings/activity-rings.d.ts +115 -0
  208. package/dist/types/components/activity-rings/index.d.ts +2 -0
  209. package/dist/types/components/billing-toggle/billing-toggle.d.ts +57 -0
  210. package/dist/types/components/billing-toggle/index.d.ts +2 -0
  211. package/dist/types/components/button-group/button-group.d.ts +72 -0
  212. package/dist/types/components/button-group/index.d.ts +2 -0
  213. package/dist/types/components/card/card.d.ts +4 -1
  214. package/dist/types/components/chat-thread/chat-thread.d.ts +130 -0
  215. package/dist/types/components/chat-thread/index.d.ts +2 -0
  216. package/dist/types/components/checkbox/checkbox.d.ts +1 -1
  217. package/dist/types/components/command-palette/command-palette.d.ts +1 -1
  218. package/dist/types/components/comment-thread/comment-thread.d.ts +118 -0
  219. package/dist/types/components/comment-thread/index.d.ts +1 -0
  220. package/dist/types/components/context-menu/context-menu.d.ts +55 -0
  221. package/dist/types/components/context-menu/index.d.ts +2 -0
  222. package/dist/types/components/date-range-picker/date-range-picker.d.ts +1 -1
  223. package/dist/types/components/drawer/drawer.d.ts +7 -1
  224. package/dist/types/components/expanding-search/expanding-search.d.ts +22 -0
  225. package/dist/types/components/expanding-search/index.d.ts +1 -0
  226. package/dist/types/components/keycap-keyboard/index.d.ts +2 -0
  227. package/dist/types/components/keycap-keyboard/keycap-keyboard.d.ts +32 -0
  228. package/dist/types/components/lightbox-gallery/index.d.ts +2 -0
  229. package/dist/types/components/lightbox-gallery/lightbox-gallery.d.ts +74 -0
  230. package/dist/types/components/link-unfurl/index.d.ts +2 -0
  231. package/dist/types/components/link-unfurl/link-unfurl.d.ts +94 -0
  232. package/dist/types/components/locale-switcher/index.d.ts +2 -0
  233. package/dist/types/components/locale-switcher/locale-switcher.d.ts +58 -0
  234. package/dist/types/components/menu/menu.d.ts +74 -7
  235. package/dist/types/components/next/emotion-registry.d.ts +16 -0
  236. package/dist/types/components/next/index.d.ts +2 -0
  237. package/dist/types/components/next/registry.d.ts +21 -0
  238. package/dist/types/components/now-playing/index.d.ts +1 -0
  239. package/dist/types/components/now-playing/now-playing.d.ts +88 -0
  240. package/dist/types/components/pagination/pagination.d.ts +1 -1
  241. package/dist/types/components/photo-grid/index.d.ts +2 -0
  242. package/dist/types/components/photo-grid/photo-grid.d.ts +82 -0
  243. package/dist/types/components/radio-cards/radio-cards.d.ts +1 -1
  244. package/dist/types/components/radio-group/radio-group.d.ts +1 -1
  245. package/dist/types/components/sheet-stack/index.d.ts +2 -0
  246. package/dist/types/components/sheet-stack/sheet-stack.d.ts +78 -0
  247. package/dist/types/components/shortcut-recorder/index.d.ts +2 -0
  248. package/dist/types/components/shortcut-recorder/shortcut-recorder.d.ts +117 -0
  249. package/dist/types/components/slider/slider-style.d.ts +14 -0
  250. package/dist/types/components/slider/slider.d.ts +2 -10
  251. package/dist/types/components/slider/use-slider-interaction.d.ts +79 -0
  252. package/dist/types/components/split-button/split-button.d.ts +2 -2
  253. package/dist/types/components/stretch-refresh/index.d.ts +1 -0
  254. package/dist/types/components/stretch-refresh/stretch-refresh.d.ts +49 -0
  255. package/dist/types/components/tabs/tabs.d.ts +1 -1
  256. package/dist/types/components/text-field/text-field.d.ts +1 -1
  257. package/dist/types/components/textarea/textarea.d.ts +1 -1
  258. package/dist/types/components/theme-root/index.d.ts +1 -0
  259. package/dist/types/components/theme-root/theme-root.d.ts +9 -1
  260. package/dist/types/components/theme-switch/index.d.ts +1 -0
  261. package/dist/types/components/theme-switch/theme-switch.d.ts +33 -0
  262. package/dist/types/components/thread/thread-core.d.ts +96 -0
  263. package/dist/types/components/thread/thread-parts.d.ts +119 -0
  264. package/dist/types/components/tooltip/tooltip.d.ts +9 -2
  265. package/dist/types/components/usage-meter/usage-meter.d.ts +2 -12
  266. package/dist/types/components/usage-meter/usage-model.d.ts +30 -0
  267. package/dist/types/components/user-menu/index.d.ts +2 -0
  268. package/dist/types/components/user-menu/user-menu.d.ts +119 -0
  269. package/dist/types/index.d.ts +18 -0
  270. package/dist/types/overlay/exit-motion.d.ts +24 -0
  271. package/dist/types/overlay/overlay-layer.d.ts +20 -0
  272. package/dist/types/overlay/presence-spring.d.ts +12 -0
  273. package/dist/types/overlay/use-native-dialog.d.ts +10 -1
  274. package/dist/types/overlay/use-overlay-floating.d.ts +9 -2
  275. package/dist/types/styling/create-theme.d.ts +24 -0
  276. package/dist/types/styling/css.d.ts +1 -1
  277. package/dist/types/styling/overlay-motion.d.ts +95 -0
  278. package/dist/types/styling/surface.d.ts +7 -0
  279. package/dist/types/styling/theme-scope.d.ts +29 -3
  280. package/dist/types/styling/theme.d.ts +5 -0
  281. package/dist/{usage-meter-qyQ3rYVv.js → usage-meter-CYvlB6l3.js} +165 -175
  282. package/dist/usage-meter.js +1 -1
  283. package/dist/usage-model-C0fS47w4.js +32 -0
  284. package/dist/use-native-dialog-FB0p7lkg.js +93 -0
  285. package/dist/{use-overlay-floating-DvJifLpF.js → use-overlay-floating-Bx2jBKAA.js} +8 -6
  286. package/dist/use-scroll-lock-40gXwwAy.js +23 -0
  287. package/dist/user-menu-DzELTg1x.js +757 -0
  288. package/dist/user-menu.js +2 -0
  289. package/dist/{visually-hidden-BJdvqqvn.js → visually-hidden-DgVO3NaB.js} +1 -1
  290. package/package.json +88 -2
  291. package/dist/accordion-xCI_u0BV.js +0 -198
  292. package/dist/avatar-BahDVO9t.js +0 -132
  293. package/dist/badge-B_sLygxU.js +0 -108
  294. package/dist/calendar-B3Svu0X2.js +0 -447
  295. package/dist/card-D-aI2QHx.js +0 -158
  296. package/dist/carousel-IvPqN-oM.js +0 -472
  297. package/dist/command-palette-BQ5LleGb.js +0 -384
  298. package/dist/date-range-picker-B5uFWsm-.js +0 -562
  299. package/dist/dialog-ciiv9H2b.js +0 -218
  300. package/dist/drawer-DsASTiP-.js +0 -553
  301. package/dist/file-dropzone-pR4v7owg.js +0 -457
  302. package/dist/mention-input-BcQKX2EJ.js +0 -599
  303. package/dist/menu-xwOOUtWP.js +0 -275
  304. package/dist/pill-DO2gHzMb.js +0 -56
  305. package/dist/popover-QHcEvf9c.js +0 -119
  306. package/dist/signature-pad-q2SAsrdD.js +0 -640
  307. package/dist/slider-t0B5cecO.js +0 -477
  308. package/dist/switch-qwv8jQnR.js +0 -142
  309. package/dist/sx-Dx9JUKp5.js +0 -23
  310. package/dist/tabs-CAVJndX1.js +0 -203
  311. package/dist/theme-root-BbTBuLMQ.js +0 -46
  312. package/dist/theme-scope-t7nAKc2c.js +0 -27
  313. package/dist/tooltip-CkeiW9C1.js +0 -113
  314. package/dist/use-native-dialog-DWpIUVO1.js +0 -84
@@ -0,0 +1,864 @@
1
+ 'use client';
2
+ import { a as e, i as t } from "./css-BYJhdGh-.js";
3
+ import { n } from "./focus-ring-BK5W5_NY.js";
4
+ import { n as r, r as i } from "./media-8yrN85VT.js";
5
+ import { t as a } from "./sx-BJXJ2xJK.js";
6
+ import { t as o } from "./use-controlled-state-DpeVQZNR.js";
7
+ import { t as s } from "./visually-hidden-DgVO3NaB.js";
8
+ import { t as c } from "./button-C6OV0C7J.js";
9
+ import { t as ee } from "./part-id-D0zksy32.js";
10
+ import { t as te } from "./card-C008OQCp.js";
11
+ import { c as l, d as ne, g as re, h as u, i as ie, m as ae, n as d, p as oe, r as se, t as f } from "./thread-parts-DfZNz70v.js";
12
+ import { useEffect as ce, useId as le, useLayoutEffect as p, useMemo as m, useRef as h, useState as g } from "react";
13
+ import { vars as _ } from "@jfrader/tokens/vars";
14
+ import { Fragment as v, jsx as y, jsxs as b } from "@emotion/react/jsx-runtime";
15
+ import { useMergeRefs as ue } from "@floating-ui/react";
16
+ //#region src/components/chat-thread/chat-thread.tsx
17
+ var x = "chat-thread", de = [], fe = {
18
+ text: "",
19
+ files: []
20
+ }, S = [], pe = [
21
+ "👍",
22
+ "❤️",
23
+ "🎉",
24
+ "👀",
25
+ "🚀",
26
+ "✅"
27
+ ], me = 3e5, he = 48, C = 4, ge = 10, w = () => crypto.randomUUID();
28
+ function _e(e) {
29
+ let t = (t, n, r) => l(e, t, n, r);
30
+ return {
31
+ conversation: "Conversation",
32
+ transcript: "Conversation transcript",
33
+ composer: "Message",
34
+ placeholder: "Write a message",
35
+ send: "Send",
36
+ attach: "Attach files",
37
+ attachments: "Attachments",
38
+ sending: "Sending",
39
+ sent: "Sent",
40
+ delivered: "Delivered",
41
+ read: "Read",
42
+ failed: "Failed",
43
+ retry: "Retry",
44
+ jumpToLatest: "Jump to latest",
45
+ unknownAuthor: "Unknown author",
46
+ empty: "No messages yet",
47
+ invalidTime: "Unknown time",
48
+ sendFailed: "Message could not be sent",
49
+ addReaction: "Add reaction",
50
+ closeReactions: "Close reactions",
51
+ reactions: "Reactions",
52
+ removeFile: (e) => `Remove ${e}`,
53
+ readBy: (e) => `Read by ${e}`,
54
+ typing: (e) => `Typing: ${e}`,
55
+ newMessages: (e) => t(e, "new message", "new messages"),
56
+ showAttachments: (e) => `Show ${t(e, "more attachment", "more attachments")}`,
57
+ reactWith: (e) => `React with ${e}`,
58
+ reactionCount: (e, n, r) => `${e} ${t(n, "reaction", "reactions")}${r ? ", including you" : ""}`,
59
+ fileRejected: (e, t) => ({
60
+ type: `${t}: file type not accepted`,
61
+ size: `${t}: file too large`,
62
+ count: `${t}: too many files`
63
+ })[e]
64
+ };
65
+ }
66
+ var T = t({
67
+ display: "flex",
68
+ flexDirection: "column",
69
+ minBlockSize: 0,
70
+ minInlineSize: 0,
71
+ blockSize: "100%",
72
+ gap: _.space[3],
73
+ containerType: "inline-size",
74
+ fontFamily: _.font.sans,
75
+ fontSize: _.textSize.sm,
76
+ lineHeight: _.lineHeight.base,
77
+ color: _.color.text
78
+ }), E = t({
79
+ display: "flex",
80
+ flexDirection: "column",
81
+ flex: "1 1 auto",
82
+ minBlockSize: 0,
83
+ gap: _.space[2]
84
+ }), D = t({
85
+ overflowY: "auto",
86
+ overflowAnchor: "none",
87
+ minBlockSize: 0,
88
+ flex: "1 1 auto",
89
+ padding: _.space[3],
90
+ "&:focus-visible": n
91
+ }), ve = t({
92
+ display: "flex",
93
+ flexDirection: "column",
94
+ gap: _.space[4],
95
+ listStyle: "none",
96
+ margin: 0,
97
+ padding: 0
98
+ }), O = t({ gap: _.space[2] }), k = e({
99
+ from: { opacity: 0 },
100
+ to: { opacity: 1 }
101
+ }), ye = t({
102
+ animationName: k,
103
+ animationDuration: _.motion.duration.base,
104
+ animationTimingFunction: _.motion.easeStandard,
105
+ [i]: { animation: "none" }
106
+ }), be = t({
107
+ minInlineSize: 0,
108
+ inlineSize: "100%",
109
+ display: "grid",
110
+ "&[data-grouped=\"true\"]": { marginBlockStart: `calc(-1 * ${_.space[2]})` }
111
+ }), A = t({
112
+ inlineSize: "min(78%, 34rem)",
113
+ minInlineSize: 0,
114
+ "@container (max-width: 28rem)": { inlineSize: "84%" }
115
+ }), j = t({ justifySelf: "end" }), M = t({
116
+ padding: _.space[3],
117
+ minInlineSize: 0,
118
+ whiteSpace: "pre-wrap",
119
+ overflowWrap: "anywhere",
120
+ backgroundColor: _.color.surfaceRaised
121
+ }), xe = t({
122
+ backgroundColor: _.color.accentSoft,
123
+ color: _.color.text
124
+ }), Se = t({
125
+ marginBlock: _.space[3],
126
+ fontSize: _.textSize.xs,
127
+ fontWeight: _.fontWeight.medium,
128
+ textAlign: "center",
129
+ color: _.color.textMuted
130
+ }), Ce = t({
131
+ display: "flex",
132
+ flexWrap: "wrap",
133
+ alignItems: "center",
134
+ gap: _.space[2]
135
+ }), we = t({
136
+ fontSize: _.textSize.xs,
137
+ color: _.color.textMuted,
138
+ overflowWrap: "anywhere"
139
+ }), Te = t({
140
+ color: _.color.dangerText,
141
+ margin: 0,
142
+ overflowWrap: "anywhere"
143
+ }), Ee = t({
144
+ display: "grid",
145
+ gap: _.space[2],
146
+ minInlineSize: 0,
147
+ flexShrink: 0
148
+ }), De = t({
149
+ display: "flex",
150
+ flexWrap: "wrap",
151
+ gap: _.space[2],
152
+ margin: 0,
153
+ padding: _.space[2],
154
+ listStyle: "none",
155
+ maxBlockSize: "12rem",
156
+ overflow: "auto"
157
+ }), N = t({
158
+ display: "flex",
159
+ alignItems: "center",
160
+ flexWrap: "wrap",
161
+ gap: _.space[2],
162
+ padding: _.space[2],
163
+ border: `1px solid ${_.color.borderControl}`,
164
+ borderRadius: _.radius.sm,
165
+ minInlineSize: 0,
166
+ overflowWrap: "anywhere",
167
+ [r]: { borderColor: "CanvasText" }
168
+ }), Oe = t({
169
+ display: "block",
170
+ maxInlineSize: "100%",
171
+ blockSize: "auto",
172
+ aspectRatio: "4 / 3",
173
+ objectFit: "contain",
174
+ borderRadius: _.radius.sm
175
+ }), P = t({
176
+ inlineSize: _.space[12],
177
+ blockSize: _.space[12],
178
+ objectFit: "cover"
179
+ }), F = t({
180
+ display: "grid",
181
+ gap: _.space[2],
182
+ listStyle: "none",
183
+ padding: 0,
184
+ margin: 0
185
+ }), ke = t({
186
+ color: _.color.accentText,
187
+ overflowWrap: "anywhere",
188
+ "&:focus-visible": n
189
+ }), I = t({
190
+ maxBlockSize: `calc(6lh + 2 * ${_.space[2]})`,
191
+ overflowY: "auto"
192
+ }), Ae = t({
193
+ color: _.color.textMuted,
194
+ transitionProperty: "opacity",
195
+ transitionDuration: _.motion.duration.base,
196
+ [i]: { transitionDuration: "0s" }
197
+ }), je = t({ alignSelf: "center" });
198
+ function L(e) {
199
+ if (e && !/[\u0000-\u0020\u007f\\]/u.test(e)) try {
200
+ return [
201
+ "http:",
202
+ "https:",
203
+ "blob:"
204
+ ].includes(new URL(e, "https://attachments.invalid/").protocol) ? e : void 0;
205
+ } catch {
206
+ return;
207
+ }
208
+ }
209
+ function R(e, t) {
210
+ let n = e >= 1e6 ? {
211
+ size: 1e6,
212
+ unit: "megabyte"
213
+ } : e >= 1e3 ? {
214
+ size: 1e3,
215
+ unit: "kilobyte"
216
+ } : {
217
+ size: 1,
218
+ unit: "byte"
219
+ };
220
+ return new Intl.NumberFormat(t, {
221
+ style: "unit",
222
+ unit: n.unit,
223
+ maximumFractionDigits: 1
224
+ }).format(e / n.size);
225
+ }
226
+ function Me(e, t) {
227
+ return !t?.trim() || t.split(",").some((t) => {
228
+ let n = t.trim().toLowerCase();
229
+ return n.startsWith(".") ? e.name.toLowerCase().endsWith(n) : n.endsWith("/*") ? e.type.toLowerCase().startsWith(n.slice(0, -1)) : e.type.toLowerCase() === n;
230
+ });
231
+ }
232
+ function Ne(e) {
233
+ let t = h(/* @__PURE__ */ new Map()), [n, r] = g(/* @__PURE__ */ new Map());
234
+ return p(() => {
235
+ let n = new Set(e.filter((e) => e.type.startsWith("image/")));
236
+ for (let [e, r] of t.current) n.has(e) || (URL.revokeObjectURL(r), t.current.delete(e));
237
+ for (let e of n) t.current.has(e) || t.current.set(e, URL.createObjectURL(e));
238
+ r(new Map(t.current));
239
+ }, [e]), ce(() => () => {
240
+ for (let e of t.current.values()) URL.revokeObjectURL(e);
241
+ t.current.clear();
242
+ }, []), n;
243
+ }
244
+ function Pe({ ref: e, value: t, defaultValue: n = fe, onValueChange: r, onSend: i, acknowledged: ee, onDraftInteraction: te, allowAttachments: l = !0, accept: re, maxFiles: u = ge, maxFileSize: ae = Infinity, disabled: d = !1, placeholder: oe, label: se, locale: _, size: v = "md", labels: de, slotProps: S, className: pe, sx: me, ...he }) {
245
+ let { formatters: C } = m(() => ne("ChatThread.Composer", _, "UTC"), [_]), w = {
246
+ ..._e(C),
247
+ ...de
248
+ }, [T = fe, E] = o(t, n, r), [D, ve] = g(!1), [O, k] = g(null), [be, A] = g(""), j = h(!1), M = h(!0), xe = h(null), Se = ue([e, xe]), we = h(null), Oe = ue([we, S?.fileInput?.ref]), F = le(), ke = le(), Ae = Ne(T.files);
249
+ ce(() => (M.current = !0, () => {
250
+ M.current = !1;
251
+ }), []), p(() => {
252
+ O && ee === O && (k(null), E({
253
+ text: "",
254
+ files: []
255
+ }));
256
+ }, [
257
+ ee,
258
+ O,
259
+ E
260
+ ]);
261
+ let je = (e) => {
262
+ d || j.current || (te?.(), k(null), A(""), E(e));
263
+ }, L = (e) => {
264
+ if (d || j.current || !l) return;
265
+ let t = [...T.files], n = [], r = Number.isFinite(u) ? Math.max(0, Math.floor(u)) : ge;
266
+ for (let i of e) {
267
+ let e = Me(i, re) ? i.size > Math.max(0, ae) ? "size" : t.length >= r ? "count" : null : "type";
268
+ e ? n.push(w.fileRejected(e, i.name)) : t.push(i);
269
+ }
270
+ t.length !== T.files.length && je({
271
+ ...T,
272
+ files: t
273
+ }), A(C.facts.format(n));
274
+ }, Pe = async () => {
275
+ if (d || j.current || O || !T.text.trim() && T.files.length === 0) return;
276
+ let e = {
277
+ text: T.text.trim(),
278
+ files: [...T.files]
279
+ };
280
+ j.current = !0, ve(!0), A("");
281
+ try {
282
+ let t = await i(e);
283
+ if (!M.current) return;
284
+ t === !1 ? k(e) : E({
285
+ text: "",
286
+ files: []
287
+ });
288
+ } catch {
289
+ M.current && A(w.sendFailed);
290
+ } finally {
291
+ j.current = !1, M.current && ve(!1);
292
+ }
293
+ }, Fe = (e) => {
294
+ let t = xe.current, n = t?.ownerDocument.activeElement;
295
+ je({
296
+ ...T,
297
+ files: T.files.filter((t, n) => e !== n)
298
+ }), queueMicrotask(() => {
299
+ n && !n.isConnected && (t?.querySelector("[data-action=\"remove-file\"]") ?? t?.querySelector("textarea"))?.focus();
300
+ });
301
+ }, z = S?.textarea, B = S?.fileInput, V = S?.form;
302
+ return /* @__PURE__ */ y(a, {
303
+ className: pe,
304
+ styles: [Ee, ie[v]],
305
+ sx: me,
306
+ children: (e) => /* @__PURE__ */ b("div", {
307
+ ...he,
308
+ ref: Se,
309
+ className: e,
310
+ "data-ui": `${x}-composer`,
311
+ children: [
312
+ T.files.length > 0 ? /* @__PURE__ */ y("ul", {
313
+ role: "list",
314
+ "aria-label": w.attachments,
315
+ "data-ui": `${x}-tray`,
316
+ className: S?.tray?.className,
317
+ css: [
318
+ De,
319
+ ye,
320
+ S?.tray?.css
321
+ ],
322
+ children: T.files.map((e, t) => /* @__PURE__ */ b("li", {
323
+ className: S?.file?.className,
324
+ css: [N, S?.file?.css],
325
+ children: [
326
+ Ae.get(e) ? /* @__PURE__ */ y("img", {
327
+ src: Ae.get(e),
328
+ alt: "",
329
+ css: P
330
+ }) : null,
331
+ /* @__PURE__ */ b("span", { children: [
332
+ e.name,
333
+ " · ",
334
+ R(e.size, _)
335
+ ] }),
336
+ /* @__PURE__ */ y(c, {
337
+ size: "sm",
338
+ variant: "ghost",
339
+ ...S?.removeButton,
340
+ "aria-label": w.removeFile(e.name),
341
+ disabled: d || D || S?.removeButton?.disabled,
342
+ "data-action": "remove-file",
343
+ onClick: (e) => {
344
+ S?.removeButton?.onClick?.(e), e.defaultPrevented || Fe(t);
345
+ },
346
+ children: "×"
347
+ })
348
+ ]
349
+ }, t))
350
+ }) : null,
351
+ /* @__PURE__ */ b("form", {
352
+ ...V,
353
+ "data-ui": `${x}-form`,
354
+ onSubmit: (e) => {
355
+ V?.onSubmit?.(e), e.defaultPrevented || (e.preventDefault(), Pe());
356
+ },
357
+ onDragOver: (e) => {
358
+ V?.onDragOver?.(e), !e.defaultPrevented && l && !d && !D && e.dataTransfer.types.includes("Files") && e.preventDefault();
359
+ },
360
+ onDrop: (e) => {
361
+ V?.onDrop?.(e), !e.defaultPrevented && e.dataTransfer.files.length && (e.preventDefault(), L(Array.from(e.dataTransfer.files)));
362
+ },
363
+ children: [/* @__PURE__ */ y(f, {
364
+ ui: x,
365
+ kind: "root",
366
+ draft: T.text,
367
+ onDraftChange: (e) => je({
368
+ ...T,
369
+ text: e
370
+ }),
371
+ onSubmit: () => {
372
+ Pe();
373
+ },
374
+ submitOnEnter: !0,
375
+ allowEmpty: T.files.length > 0,
376
+ lockWhilePending: D,
377
+ cancelable: !1,
378
+ cancelOnEscape: !1,
379
+ label: se ?? w.composer,
380
+ placeholder: oe ?? w.placeholder,
381
+ submitLabel: w.send,
382
+ cancelLabel: "",
383
+ mentionsLabel: "",
384
+ people: [],
385
+ locale: _,
386
+ disabled: d,
387
+ pending: D || O !== null,
388
+ size: v,
389
+ submitProps: S?.sendButton,
390
+ textareaProps: {
391
+ ...z,
392
+ "aria-describedby": [z?.["aria-describedby"], be ? ke : void 0].filter(Boolean).join(" ") || void 0,
393
+ slotProps: {
394
+ ...z?.slotProps,
395
+ control: {
396
+ ...z?.slotProps?.control,
397
+ css: [I, z?.slotProps?.control?.css]
398
+ }
399
+ },
400
+ onPaste: (e) => {
401
+ z?.onPaste?.(e), !e.defaultPrevented && e.clipboardData.files.length && L(Array.from(e.clipboardData.files));
402
+ }
403
+ }
404
+ }), l ? /* @__PURE__ */ b("div", {
405
+ css: Ce,
406
+ children: [/* @__PURE__ */ y("input", {
407
+ ...B,
408
+ ref: Oe,
409
+ id: B?.id ?? F,
410
+ type: "file",
411
+ multiple: !0,
412
+ accept: re,
413
+ disabled: d || D,
414
+ "aria-label": B?.["aria-label"] ?? w.attach,
415
+ css: s,
416
+ onChange: (e) => {
417
+ B?.onChange?.(e), e.defaultPrevented || L(Array.from(e.currentTarget.files ?? [])), e.currentTarget.value = "";
418
+ }
419
+ }), /* @__PURE__ */ y(c, {
420
+ variant: "outline",
421
+ size: "sm",
422
+ ...S?.attachButton,
423
+ "aria-controls": B?.id ?? F,
424
+ disabled: d || D || S?.attachButton?.disabled,
425
+ onClick: (e) => {
426
+ S?.attachButton?.onClick?.(e), e.defaultPrevented || we.current?.click();
427
+ },
428
+ children: w.attach
429
+ })]
430
+ }) : null]
431
+ }),
432
+ /* @__PURE__ */ y("p", {
433
+ id: ke,
434
+ role: "status",
435
+ "aria-atomic": "true",
436
+ "data-ui": `${x}-error`,
437
+ className: S?.error?.className,
438
+ css: [Te, S?.error?.css],
439
+ children: be
440
+ })
441
+ ]
442
+ })
443
+ });
444
+ }
445
+ function Fe(e) {
446
+ return /* @__PURE__ */ y(Pe, { ...e });
447
+ }
448
+ Fe.displayName = "ChatThread.Composer";
449
+ function z({ attachments: e, labels: t, locale: n, part: r }) {
450
+ let [i, a] = g(!1), o = i ? e : e.slice(0, C);
451
+ return /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y("ul", {
452
+ role: "list",
453
+ "aria-label": t.attachments,
454
+ "data-ui": `${x}-attachments`,
455
+ className: r?.className,
456
+ css: [F, r?.css],
457
+ children: o.map((e) => {
458
+ let t = L(e.url), r = /* @__PURE__ */ b(v, { children: [e.kind === "image" && t ? /* @__PURE__ */ y("img", {
459
+ src: t,
460
+ alt: e.alt ?? e.name,
461
+ width: e.width,
462
+ height: e.height,
463
+ style: e.width && e.height ? { aspectRatio: `${e.width} / ${e.height}` } : void 0,
464
+ css: Oe
465
+ }) : null, /* @__PURE__ */ b("span", { children: [e.name, e.size === void 0 ? "" : ` · ${R(e.size, n)}`] })] });
466
+ return /* @__PURE__ */ y("li", {
467
+ css: N,
468
+ children: t ? /* @__PURE__ */ y("a", {
469
+ href: t,
470
+ download: e.name,
471
+ css: ke,
472
+ children: r
473
+ }) : r
474
+ }, e.id);
475
+ })
476
+ }), !i && e.length > C ? /* @__PURE__ */ y(c, {
477
+ size: "sm",
478
+ variant: "outline",
479
+ onClick: () => a(!0),
480
+ children: t.showAttachments(e.length - C)
481
+ }) : null] });
482
+ }
483
+ function B(e, t) {
484
+ return u(e, (e) => e.emoji).map(({ emoji: e, mine: n }) => ({
485
+ emoji: e,
486
+ users: n ? [t] : []
487
+ }));
488
+ }
489
+ function V({ ref: e, participants: t, currentUserId: n, value: r, defaultValue: i = de, onValueChange: l, now: f, locale: _, timeZone: v = "UTC", typing: fe = S, readBy: C, onSend: ge, onReact: k, onRetry: Ee, reactions: De = pe, groupWindow: N = me, composer: Oe = !0, disabled: P = !1, composerProps: F, getNewId: ke = w, size: I = "md", labels: L, slotProps: R, className: Me, sx: Ne, ...Fe }) {
490
+ let V = le(), Ie = h(null), Le = ue([Ie, e]), H = h(null), Re = h(null), { formatters: U } = m(() => ne("ChatThread", _, v), [_, v]), W = {
491
+ ..._e(U),
492
+ ...L
493
+ }, ze = m(() => new Intl.DateTimeFormat(U.full.resolvedOptions().locale, {
494
+ timeZone: U.full.resolvedOptions().timeZone,
495
+ dateStyle: "full"
496
+ }), [U]), Be = m(() => new Intl.DateTimeFormat("en-US-u-ca-iso8601-nu-latn", {
497
+ timeZone: U.full.resolvedOptions().timeZone,
498
+ year: "numeric",
499
+ month: "2-digit",
500
+ day: "2-digit"
501
+ }), [U]), Ve = h(null), [G = de, He] = o(r, i, (e) => l?.([...e], Ve.current)), K = h(G);
502
+ K.current = G;
503
+ let q = new Map(u(t, (e) => e.id).map((e) => [e.id, e])), Ue = u(G, (e) => e.id), [We, Ge] = g(null), [Ke, qe] = g(0), [Je, Ye] = g(!1), [Xe, Ze] = g(!1), [Qe, $e] = g(null), [et, tt] = g(null), [nt, rt] = g(""), J = h(/* @__PURE__ */ new Map()), Y = h(/* @__PURE__ */ new Set()), X = h(G.map((e) => e.id)), it = m(() => {
504
+ let e = new Set(X.current);
505
+ return new Set(G.filter((t) => !e.has(t.id)).map((e) => e.id));
506
+ }, [G]), at = X.current.length > 0 && G[0]?.id !== X.current[0] && G.some((e) => e.id === X.current[0]), Z = h({
507
+ height: 0,
508
+ top: 0,
509
+ first: G[0]?.id
510
+ }), ot = h(null), Q = h(!0), st = h(!1), ct = h(!1), $ = h(null), lt = h(/* @__PURE__ */ new Set()), ut = h(!1), dt = h(!0);
511
+ p(() => {
512
+ !Je && ct.current && (ct.current = !1, (Ie.current?.querySelector("textarea:not(:disabled)") ?? H.current)?.focus());
513
+ }, [Je]);
514
+ let ft = (e) => {
515
+ let t = J.current.get(e);
516
+ if (t) {
517
+ for (let e of t) URL.revokeObjectURL(e);
518
+ J.current.delete(e);
519
+ }
520
+ }, pt = () => {
521
+ let e = H.current;
522
+ if (!e) return;
523
+ let t = e.getBoundingClientRect().top, n = Array.from(e.querySelectorAll("[data-message-id]")).find((e) => e.getBoundingClientRect().bottom > t);
524
+ ot.current = n ? {
525
+ id: n.dataset.messageId,
526
+ offset: n.getBoundingClientRect().top - t
527
+ } : null;
528
+ }, mt = () => {
529
+ let e = H.current, t = ot.current;
530
+ if (!e || !t) return !1;
531
+ let n = e.querySelector(`[data-message-id="${CSS.escape(t.id)}"]`);
532
+ return n ? (e.scrollTop += n.getBoundingClientRect().top - e.getBoundingClientRect().top - t.offset, !0) : !1;
533
+ };
534
+ ce(() => (dt.current = !0, () => {
535
+ dt.current = !1;
536
+ for (let e of J.current.values()) for (let t of e) URL.revokeObjectURL(t);
537
+ J.current.clear();
538
+ }), []), p(() => {
539
+ let e = new Set(G.flatMap((e) => e.attachments?.map((e) => e.url) ?? []));
540
+ for (let [t, n] of J.current) {
541
+ if (Y.current.has(t) && !G.some((e) => e.id === t)) continue;
542
+ Y.current.delete(t);
543
+ let r = [];
544
+ for (let t of n) e.has(t) ? r.push(t) : URL.revokeObjectURL(t);
545
+ r.length ? J.current.set(t, r) : J.current.delete(t);
546
+ }
547
+ }, [G]), p(() => {
548
+ let e = H.current;
549
+ if (!e) return;
550
+ let t = X.current, n = new Set(t), r = G.filter((e) => !n.has(e.id)), i = at;
551
+ i && Ze(!1);
552
+ let a = $.current !== null && G.some((e) => e.id === $.current);
553
+ Q.current || a ? (e.scrollTop = e.scrollHeight, Q.current = !0, a && ($.current = null), Ye(!1), qe(0)) : !mt() && i && (e.scrollTop = Z.current.top + e.scrollHeight - Z.current.height), !Q.current && !i && r.length && qe((e) => e + r.filter((e) => !lt.current.has(e.id)).length), Z.current = {
554
+ top: e.scrollTop,
555
+ height: e.scrollHeight,
556
+ first: G[0]?.id
557
+ }, pt(), X.current = G.map((e) => e.id);
558
+ let o = requestAnimationFrame(() => Ze(!0));
559
+ return () => cancelAnimationFrame(o);
560
+ }, [G]), ce(() => {
561
+ let e = H.current, t = Re.current;
562
+ if (!e || !t) return;
563
+ let n = new ResizeObserver(() => {
564
+ Q.current ? e.scrollTop = e.scrollHeight : mt() || (e.scrollTop = Z.current.top), Z.current = {
565
+ ...Z.current,
566
+ top: e.scrollTop,
567
+ height: e.scrollHeight
568
+ }, pt();
569
+ });
570
+ return n.observe(t), n.observe(e), () => n.disconnect();
571
+ }, []);
572
+ let ht = (e, t) => {
573
+ Ve.current = t, He(e);
574
+ }, gt = async (e) => {
575
+ if (P || !re(f)) throw Error(W.sendFailed);
576
+ let t = ke();
577
+ if (K.current.some((e) => e.id === t)) throw Error(W.sendFailed);
578
+ _t();
579
+ let i = [];
580
+ J.current.set(t, i);
581
+ let a;
582
+ try {
583
+ a = e.files.map((e, n) => {
584
+ let r = URL.createObjectURL(e);
585
+ return i.push(r), {
586
+ id: `${t}:${n}`,
587
+ name: e.name,
588
+ kind: e.type.startsWith("image/") ? "image" : "file",
589
+ url: r,
590
+ size: e.size,
591
+ alt: e.name
592
+ };
593
+ });
594
+ } catch (e) {
595
+ throw ft(t), e;
596
+ }
597
+ Y.current.add(t);
598
+ let o = {
599
+ id: t,
600
+ authorId: n,
601
+ text: e.text,
602
+ createdAt: f,
603
+ attachments: a,
604
+ status: "sent"
605
+ };
606
+ lt.current.add(t);
607
+ try {
608
+ return r !== void 0 && ($.current = t, ht([...K.current, o], {
609
+ type: "send",
610
+ message: o,
611
+ draft: e
612
+ })), await ge?.(e), dt.current ? (r === void 0 && ($.current = t, ht([...K.current, o], {
613
+ type: "send",
614
+ message: o,
615
+ draft: e
616
+ })), $e({
617
+ id: t,
618
+ draft: e
619
+ }), r === void 0 || K.current.some((e) => e.id === t)) : !1;
620
+ } catch (e) {
621
+ throw Y.current.delete(t), K.current.some((e) => e.id === t) || ft(t), e;
622
+ }
623
+ }, _t = () => {
624
+ for (let e of Y.current) K.current.some((t) => t.id === e) || ft(e);
625
+ Y.current.clear(), $e(null);
626
+ }, vt = (e, t) => {
627
+ if (P) return;
628
+ let r = e.reactions ?? [], i = B(r, n), a = ae(i, t, n), o = r.find((e) => e.emoji === t), s = Math.max(0, (o?.count ?? 0) + (a.added ? 1 : -1)), c = {
629
+ emoji: t,
630
+ count: s,
631
+ mine: a.added
632
+ }, ee = o ? r.flatMap((e) => e.emoji === t ? s > 0 ? [c] : [] : [e]) : [...r, c];
633
+ ht(G.map((t) => t.id === e.id ? {
634
+ ...t,
635
+ reactions: ee
636
+ } : t), {
637
+ type: "react",
638
+ id: e.id,
639
+ emoji: t,
640
+ added: a.added
641
+ }), k?.(e.id, t);
642
+ }, yt = async (e) => {
643
+ if (!(P || ut.current)) {
644
+ ut.current = !0, tt(e), rt("");
645
+ try {
646
+ await Ee?.(e);
647
+ } catch {
648
+ dt.current && rt(W.sendFailed);
649
+ } finally {
650
+ ut.current = !1, dt.current && tt(null);
651
+ }
652
+ }
653
+ }, bt = () => {
654
+ let e = H.current;
655
+ if (!e) return;
656
+ let t = e.ownerDocument.defaultView?.matchMedia("(prefers-reduced-motion: reduce)").matches;
657
+ Q.current = !0, st.current = !0, ct.current = !0, e.scrollTo({
658
+ top: e.scrollHeight,
659
+ behavior: t ? "instant" : "smooth"
660
+ }), qe(0), Ye(!1);
661
+ }, xt = u(fe, (e) => e).filter((e) => e !== n && q.has(e)).map((e) => q.get(e).name), St = xt.length ? W.typing(U.people.format(xt)) : "", Ct = Qe && G.some((e) => e.id === Qe.id) ? Qe.draft : null;
662
+ return /* @__PURE__ */ y(a, {
663
+ className: Me,
664
+ styles: [T, ie[I]],
665
+ sx: Ne,
666
+ children: (e) => /* @__PURE__ */ b("div", {
667
+ ...Fe,
668
+ ref: Le,
669
+ className: e,
670
+ "data-ui": x,
671
+ "data-size": I,
672
+ children: [
673
+ /* @__PURE__ */ b("div", {
674
+ "data-ui": `${x}-viewport`,
675
+ className: R?.viewport?.className,
676
+ css: [E, R?.viewport?.css],
677
+ children: [/* @__PURE__ */ y("div", {
678
+ ref: H,
679
+ tabIndex: 0,
680
+ role: "group",
681
+ "aria-label": W.transcript,
682
+ "data-ui": `${x}-scroller`,
683
+ className: R?.scroller?.className,
684
+ css: [D, R?.scroller?.css],
685
+ onScroll: (e) => {
686
+ let t = e.currentTarget, n = t.scrollHeight - t.clientHeight - t.scrollTop <= he;
687
+ n && (st.current = !1), Q.current = n || st.current, Z.current = {
688
+ ...Z.current,
689
+ top: t.scrollTop,
690
+ height: t.scrollHeight
691
+ }, pt(), Ye(!Q.current), Q.current && qe(0);
692
+ },
693
+ onWheel: () => {
694
+ st.current = !1;
695
+ },
696
+ children: /* @__PURE__ */ b("div", {
697
+ role: "log",
698
+ "aria-label": W.conversation,
699
+ "aria-live": Xe && !at ? "polite" : "off",
700
+ "aria-relevant": "additions",
701
+ "aria-atomic": "false",
702
+ "data-ui": `${x}-log`,
703
+ className: R?.log?.className,
704
+ css: R?.log?.css,
705
+ children: [Ue.length === 0 ? /* @__PURE__ */ y("p", { children: W.empty }) : null, /* @__PURE__ */ y("ol", {
706
+ ref: Re,
707
+ role: "list",
708
+ "data-ui": `${x}-list`,
709
+ className: R?.list?.className,
710
+ css: [
711
+ ve,
712
+ I === "sm" && O,
713
+ R?.list?.css
714
+ ],
715
+ children: Ue.map((e, t) => {
716
+ let r = oe(e.createdAt), i = Ue[t - 1], a = i ? oe(i.createdAt) : null, o = r !== null && a !== null && Be.format(r) === Be.format(a), s = o && i?.authorId === e.authorId && r - a >= 0 && r - a <= (Number.isFinite(N) && N >= 0 ? N : me), l = e.authorId === n, ne = Object.entries(C ?? {}).filter(([t, r]) => t !== n && q.has(t) && r === e.id).map(([e]) => q.get(e).name);
717
+ return /* @__PURE__ */ b("li", {
718
+ "data-ui": `${x}-message`,
719
+ "data-message-id": e.id,
720
+ "data-own": l,
721
+ "data-grouped": s,
722
+ className: R?.message?.className,
723
+ css: [
724
+ be,
725
+ it.has(e.id) && e.status !== "failed" && ye,
726
+ R?.message?.css
727
+ ],
728
+ children: [o ? null : /* @__PURE__ */ y("h3", {
729
+ "data-ui": `${x}-day`,
730
+ css: Se,
731
+ children: r === null ? W.invalidTime : ze.format(r)
732
+ }), /* @__PURE__ */ b(d, {
733
+ ui: x,
734
+ author: q.get(e.authorId) ?? {
735
+ id: e.authorId,
736
+ name: W.unknownAuthor
737
+ },
738
+ epoch: r,
739
+ now: re(f) ? f : null,
740
+ formatters: U,
741
+ invalidTimeLabel: W.invalidTime,
742
+ size: I,
743
+ baseId: V,
744
+ messageId: e.id,
745
+ slots: {
746
+ article: { css: [A, l && j] },
747
+ time: R?.time
748
+ },
749
+ children: [
750
+ /* @__PURE__ */ b(te, {
751
+ "data-part": "chat-thread-bubble",
752
+ className: R?.bubble?.className,
753
+ css: [
754
+ M,
755
+ l && xe,
756
+ R?.bubble?.css
757
+ ],
758
+ children: [e.text !== void 0 && e.text !== "" ? /* @__PURE__ */ y("span", {
759
+ "data-ui": `${x}-text`,
760
+ children: e.text
761
+ }) : null, e.attachments?.length ? /* @__PURE__ */ y(z, {
762
+ attachments: e.attachments,
763
+ labels: W,
764
+ locale: _,
765
+ part: R?.attachments
766
+ }) : null]
767
+ }),
768
+ /* @__PURE__ */ y(se, {
769
+ ui: x,
770
+ reactions: B(e.reactions ?? [], n),
771
+ counts: new Map(e.reactions?.map((e) => [e.emoji, Math.max(0, e.count)])),
772
+ offered: u(De, (e) => e),
773
+ currentUserId: n,
774
+ formatters: U,
775
+ labels: W,
776
+ readOnly: !1,
777
+ disabled: P,
778
+ pickerOpen: We === e.id,
779
+ onPickerOpenChange: (t) => Ge(t ? e.id : null),
780
+ onToggle: (t) => vt(e, t),
781
+ pickerId: ee(V, "picker", e.id),
782
+ part: R?.reaction,
783
+ overlay: !0
784
+ }),
785
+ /* @__PURE__ */ b("div", {
786
+ className: R?.receipt?.className,
787
+ "data-ui": `${x}-receipt`,
788
+ css: [
789
+ we,
790
+ Ce,
791
+ R?.receipt?.css
792
+ ],
793
+ children: [
794
+ e.status ? /* @__PURE__ */ y("span", {
795
+ "data-state": e.status,
796
+ css: [e.status !== "failed" && ye, e.status === "failed" && Te],
797
+ children: W[e.status]
798
+ }, e.status) : null,
799
+ ne.length ? /* @__PURE__ */ y("span", { children: W.readBy(U.people.format(ne)) }) : null,
800
+ e.status === "failed" && Ee ? /* @__PURE__ */ y(c, {
801
+ size: "sm",
802
+ variant: "outline",
803
+ disabled: P,
804
+ loading: et === e.id,
805
+ onClick: () => {
806
+ yt(e.id);
807
+ },
808
+ children: W.retry
809
+ }) : null
810
+ ]
811
+ })
812
+ ]
813
+ })]
814
+ }, e.id);
815
+ })
816
+ })]
817
+ })
818
+ }), Je ? /* @__PURE__ */ y(c, {
819
+ variant: "outline",
820
+ size: "sm",
821
+ ...R?.jumpButton,
822
+ css: je,
823
+ onClick: (e) => {
824
+ R?.jumpButton?.onClick?.(e), e.defaultPrevented || bt();
825
+ },
826
+ children: Ke ? W.newMessages(Ke) : W.jumpToLatest
827
+ }) : null]
828
+ }),
829
+ /* @__PURE__ */ y("div", {
830
+ "aria-hidden": "true",
831
+ css: Ae,
832
+ children: St
833
+ }),
834
+ /* @__PURE__ */ y("div", {
835
+ role: "status",
836
+ "aria-atomic": "true",
837
+ css: s,
838
+ children: St
839
+ }),
840
+ Oe ? /* @__PURE__ */ y(Pe, {
841
+ locale: _,
842
+ size: I,
843
+ labels: W,
844
+ ...F,
845
+ disabled: P || F?.disabled,
846
+ onSend: gt,
847
+ acknowledged: Ct,
848
+ onDraftInteraction: _t
849
+ }) : null,
850
+ nt ? /* @__PURE__ */ y("p", {
851
+ role: "status",
852
+ "aria-atomic": "true",
853
+ "data-ui": `${x}-retry-error`,
854
+ css: Te,
855
+ children: nt
856
+ }) : null
857
+ ]
858
+ })
859
+ });
860
+ }
861
+ V.displayName = "ChatThread";
862
+ var Ie = Object.assign(V, { Composer: Fe });
863
+ //#endregion
864
+ export { Ie as t };