stream-chat-react 14.12.0 → 15.0.0-rc.1

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 (1428) hide show
  1. package/dist/cjs/ListItemLayout.60c3b287.js +2181 -0
  2. package/dist/cjs/ListItemLayout.60c3b287.js.map +1 -0
  3. package/dist/cjs/{ReactPlayerWrapper.7cc7b0d8.js → ReactPlayerWrapper.f04b1d06.js} +3 -3
  4. package/dist/cjs/{ReactPlayerWrapper.7cc7b0d8.js.map → ReactPlayerWrapper.f04b1d06.js.map} +1 -1
  5. package/dist/cjs/SlotLayout.de45be2d.js +1672 -0
  6. package/dist/cjs/SlotLayout.de45be2d.js.map +1 -0
  7. package/dist/cjs/Thread.373af587.js +7479 -0
  8. package/dist/cjs/Thread.373af587.js.map +1 -0
  9. package/dist/cjs/channel-detail.js +409 -389
  10. package/dist/cjs/channel-detail.js.map +1 -1
  11. package/dist/cjs/emojis.js +18 -16
  12. package/dist/cjs/emojis.js.map +1 -1
  13. package/dist/cjs/index.js +14467 -20208
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/slot-geometry.js +145 -0
  16. package/dist/cjs/slot-geometry.js.map +1 -0
  17. package/dist/cjs/slot-layout.js +37 -0
  18. package/dist/cjs/useChannel.1004ed4c.js +18 -0
  19. package/dist/cjs/useChannel.1004ed4c.js.map +1 -0
  20. package/dist/cjs/useComponentContextIcons.d16834d9.js +1729 -0
  21. package/dist/cjs/useComponentContextIcons.d16834d9.js.map +1 -0
  22. package/dist/cjs/useIsCooldownActive.1f778bc1.js +110 -0
  23. package/dist/cjs/useIsCooldownActive.1f778bc1.js.map +1 -0
  24. package/dist/css/channel-detail.css.map +1 -1
  25. package/dist/css/index.css +208 -103
  26. package/dist/css/index.css.map +1 -1
  27. package/dist/es/a11y/accessibleLabel.mjs +6 -2
  28. package/dist/es/a11y/accessibleLabel.mjs.map +1 -1
  29. package/dist/es/components/AIStateIndicator/AIStateIndicator.mjs +6 -5
  30. package/dist/es/components/AIStateIndicator/AIStateIndicator.mjs.map +1 -1
  31. package/dist/es/components/AIStateIndicator/hooks/useAIState.mjs +9 -33
  32. package/dist/es/components/AIStateIndicator/hooks/useAIState.mjs.map +1 -1
  33. package/dist/es/components/Accessibility/NotificationAnnouncer.mjs +2 -3
  34. package/dist/es/components/Accessibility/NotificationAnnouncer.mjs.map +1 -1
  35. package/dist/es/components/Accessibility/hooks/useIncomingMessageAnnouncements.mjs +10 -5
  36. package/dist/es/components/Accessibility/hooks/useIncomingMessageAnnouncements.mjs.map +1 -1
  37. package/dist/es/components/Accessibility/hooks/useInteractionAnnouncements.mjs +38 -28
  38. package/dist/es/components/Accessibility/hooks/useInteractionAnnouncements.mjs.map +1 -1
  39. package/dist/es/components/Accessibility/useAriaLiveAnnouncer.mjs +5 -8
  40. package/dist/es/components/Accessibility/useAriaLiveAnnouncer.mjs.map +1 -1
  41. package/dist/es/components/Attachment/Attachment.mjs +21 -6
  42. package/dist/es/components/Attachment/Attachment.mjs.map +1 -1
  43. package/dist/es/components/Attachment/AttachmentActions.mjs +10 -9
  44. package/dist/es/components/Attachment/AttachmentActions.mjs.map +1 -1
  45. package/dist/es/components/Attachment/AttachmentContainer.mjs +21 -17
  46. package/dist/es/components/Attachment/AttachmentContainer.mjs.map +1 -1
  47. package/dist/es/components/Attachment/Audio.mjs +15 -10
  48. package/dist/es/components/Attachment/Audio.mjs.map +1 -1
  49. package/dist/es/components/Attachment/FileAttachment.mjs +4 -5
  50. package/dist/es/components/Attachment/FileAttachment.mjs.map +1 -1
  51. package/dist/es/components/Attachment/Geolocation.mjs +29 -17
  52. package/dist/es/components/Attachment/Geolocation.mjs.map +1 -1
  53. package/dist/es/components/Attachment/Giphy.mjs +4 -4
  54. package/dist/es/components/Attachment/Giphy.mjs.map +1 -1
  55. package/dist/es/components/Attachment/LinkPreview/Card.mjs +4 -4
  56. package/dist/es/components/Attachment/LinkPreview/Card.mjs.map +1 -1
  57. package/dist/es/components/Attachment/LinkPreview/UnableToRenderCard.mjs +2 -2
  58. package/dist/es/components/Attachment/LinkPreview/UnableToRenderCard.mjs.map +1 -1
  59. package/dist/es/components/Attachment/ModalGallery.mjs +20 -8
  60. package/dist/es/components/Attachment/ModalGallery.mjs.map +1 -1
  61. package/dist/es/components/Attachment/UnsupportedAttachment.mjs +3 -3
  62. package/dist/es/components/Attachment/UnsupportedAttachment.mjs.map +1 -1
  63. package/dist/es/components/Attachment/VideoAttachment.mjs +10 -10
  64. package/dist/es/components/Attachment/VideoAttachment.mjs.map +1 -1
  65. package/dist/es/components/Attachment/VisibilityDisclaimer.mjs +2 -2
  66. package/dist/es/components/Attachment/VisibilityDisclaimer.mjs.map +1 -1
  67. package/dist/es/components/Attachment/VoiceRecording.mjs +17 -12
  68. package/dist/es/components/Attachment/VoiceRecording.mjs.map +1 -1
  69. package/dist/es/components/Attachment/components/AttachmentUploadProgressIndicator.mjs +1 -1
  70. package/dist/es/components/Attachment/components/DownloadButton.mjs +3 -3
  71. package/dist/es/components/Attachment/components/DownloadButton.mjs.map +1 -1
  72. package/dist/es/components/Attachment/hooks/useAttachmentUploadState.mjs +4 -30
  73. package/dist/es/components/Attachment/hooks/useAttachmentUploadState.mjs.map +1 -1
  74. package/dist/es/components/Attachment/utils.mjs.map +1 -1
  75. package/dist/es/components/AudioPlayback/AudioPlaybackArbiter.mjs +57 -0
  76. package/dist/es/components/AudioPlayback/AudioPlaybackArbiter.mjs.map +1 -0
  77. package/dist/es/components/AudioPlayback/AudioPlayer.mjs +329 -314
  78. package/dist/es/components/AudioPlayback/AudioPlayer.mjs.map +1 -1
  79. package/dist/es/components/AudioPlayback/AudioPlayerPool.mjs +54 -90
  80. package/dist/es/components/AudioPlayback/AudioPlayerPool.mjs.map +1 -1
  81. package/dist/es/components/AudioPlayback/WithAudioPlayback.mjs +20 -6
  82. package/dist/es/components/AudioPlayback/WithAudioPlayback.mjs.map +1 -1
  83. package/dist/es/components/AudioPlayback/components/ProgressBar.mjs +2 -2
  84. package/dist/es/components/AudioPlayback/components/ProgressBar.mjs.map +1 -1
  85. package/dist/es/components/AudioPlayback/components/WaveProgressBar.mjs +2 -2
  86. package/dist/es/components/AudioPlayback/components/WaveProgressBar.mjs.map +1 -1
  87. package/dist/es/components/AudioPlayback/components/progressBarA11y.mjs +2 -2
  88. package/dist/es/components/AudioPlayback/components/progressBarA11y.mjs.map +1 -1
  89. package/dist/es/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.mjs +4 -4
  90. package/dist/es/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.mjs.map +1 -1
  91. package/dist/es/components/Avatar/Avatar.mjs.map +1 -1
  92. package/dist/es/components/Avatar/AvatarStack.mjs +1 -1
  93. package/dist/es/components/Avatar/AvatarStack.mjs.map +1 -1
  94. package/dist/es/components/Badge/Badge.mjs.map +1 -1
  95. package/dist/es/components/Badge/MediaBadge.mjs +2 -1
  96. package/dist/es/components/Badge/MediaBadge.mjs.map +1 -1
  97. package/dist/es/components/BaseImage/ImagePlaceholder.mjs +3 -3
  98. package/dist/es/components/BaseImage/ImagePlaceholder.mjs.map +1 -1
  99. package/dist/es/components/Button/PlayButton.mjs +3 -3
  100. package/dist/es/components/Button/PlayButton.mjs.map +1 -1
  101. package/dist/es/components/Button/WorkspaceNavigationButtons.mjs +94 -0
  102. package/dist/es/components/Button/WorkspaceNavigationButtons.mjs.map +1 -0
  103. package/dist/es/components/Channel/Channel.mjs +34 -720
  104. package/dist/es/components/Channel/Channel.mjs.map +1 -1
  105. package/dist/es/components/Channel/hooks/useChannelCapabilities.mjs +21 -0
  106. package/dist/es/components/Channel/hooks/useChannelCapabilities.mjs.map +1 -0
  107. package/dist/es/components/Channel/hooks/useChannelContainerClasses.mjs +1 -1
  108. package/dist/es/components/Channel/hooks/useChannelContainerClasses.mjs.map +1 -1
  109. package/dist/es/components/ChannelHeader/ChannelHeader.mjs +17 -16
  110. package/dist/es/components/ChannelHeader/ChannelHeader.mjs.map +1 -1
  111. package/dist/es/components/ChannelHeader/hooks/useChannelHasMembersOnline.mjs +16 -41
  112. package/dist/es/components/ChannelHeader/hooks/useChannelHasMembersOnline.mjs.map +1 -1
  113. package/dist/es/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.mjs +19 -21
  114. package/dist/es/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.mjs.map +1 -1
  115. package/dist/es/components/ChannelList/ChannelList.mjs +60 -131
  116. package/dist/es/components/ChannelList/ChannelList.mjs.map +1 -1
  117. package/dist/es/components/ChannelList/ChannelListHeader.mjs +4 -4
  118. package/dist/es/components/ChannelList/ChannelListHeader.mjs.map +1 -1
  119. package/dist/es/components/ChannelList/ChannelLists.mjs +31 -0
  120. package/dist/es/components/ChannelList/ChannelLists.mjs.map +1 -0
  121. package/dist/es/components/ChannelList/ChannelNavigation.mjs +36 -0
  122. package/dist/es/components/ChannelList/ChannelNavigation.mjs.map +1 -0
  123. package/dist/es/components/ChannelList/hooks/useChannelMembersState.mjs.map +1 -1
  124. package/dist/es/components/ChannelList/hooks/useChannelMembershipState.mjs.map +1 -1
  125. package/dist/es/components/ChannelList/hooks/useChannelPaginatorState.mjs +21 -0
  126. package/dist/es/components/ChannelList/hooks/useChannelPaginatorState.mjs.map +1 -0
  127. package/dist/es/components/ChannelList/hooks/useSelectedChannelState.mjs.map +1 -1
  128. package/dist/es/components/ChannelListItem/ChannelListItem.mjs +23 -74
  129. package/dist/es/components/ChannelListItem/ChannelListItem.mjs.map +1 -1
  130. package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.defaults.mjs +34 -34
  131. package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.defaults.mjs.map +1 -1
  132. package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.mjs +2 -2
  133. package/dist/es/components/ChannelListItem/ChannelListItemActionButtons.mjs.map +1 -1
  134. package/dist/es/components/ChannelListItem/ChannelListItemTimestamp.mjs +7 -6
  135. package/dist/es/components/ChannelListItem/ChannelListItemTimestamp.mjs.map +1 -1
  136. package/dist/es/components/ChannelListItem/ChannelListItemUI.mjs +15 -13
  137. package/dist/es/components/ChannelListItem/ChannelListItemUI.mjs.map +1 -1
  138. package/dist/es/components/ChannelListItem/hooks/useChannelDisplayName.mjs +7 -7
  139. package/dist/es/components/ChannelListItem/hooks/useChannelDisplayName.mjs.map +1 -1
  140. package/dist/es/components/ChannelListItem/hooks/useIsChannelMuted.mjs +8 -26
  141. package/dist/es/components/ChannelListItem/hooks/useIsChannelMuted.mjs.map +1 -1
  142. package/dist/es/components/ChannelListItem/hooks/useIsUserMuted.mjs +1 -1
  143. package/dist/es/components/ChannelListItem/hooks/useIsUserMuted.mjs.map +1 -1
  144. package/dist/es/components/ChannelListItem/hooks/useMessageDeliveryStatus.mjs +18 -50
  145. package/dist/es/components/ChannelListItem/hooks/useMessageDeliveryStatus.mjs.map +1 -1
  146. package/dist/es/components/ChannelListItem/utils.a11y.mjs +35 -21
  147. package/dist/es/components/ChannelListItem/utils.a11y.mjs.map +1 -1
  148. package/dist/es/components/ChannelListItem/utils.mjs +31 -30
  149. package/dist/es/components/ChannelListItem/utils.mjs.map +1 -1
  150. package/dist/es/components/Chat/Chat.mjs +17 -16
  151. package/dist/es/components/Chat/Chat.mjs.map +1 -1
  152. package/dist/es/components/Chat/hooks/useChat.mjs +7 -49
  153. package/dist/es/components/Chat/hooks/useChat.mjs.map +1 -1
  154. package/dist/es/components/Chat/hooks/useCreateChatClient.mjs +1 -1
  155. package/dist/es/components/Chat/hooks/useCreateChatClient.mjs.map +1 -1
  156. package/dist/es/components/Chat/hooks/useCreateChatContext.mjs +3 -11
  157. package/dist/es/components/Chat/hooks/useCreateChatContext.mjs.map +1 -1
  158. package/dist/es/components/Chat/hooks/useNetworkConnectionState.mjs +46 -0
  159. package/dist/es/components/Chat/hooks/useNetworkConnectionState.mjs.map +1 -0
  160. package/dist/es/components/Chat/hooks/useReportLostConnectionSystemNotification.mjs +112 -24
  161. package/dist/es/components/Chat/hooks/useReportLostConnectionSystemNotification.mjs.map +1 -1
  162. package/dist/es/components/Chat/hooks/useSplitActionSet.mjs +1 -1
  163. package/dist/es/components/Chat/hooks/useSplitActionSet.mjs.map +1 -1
  164. package/dist/es/components/Chat/hooks/useWSConnectionState.mjs +31 -0
  165. package/dist/es/components/Chat/hooks/useWSConnectionState.mjs.map +1 -0
  166. package/dist/es/components/DateSeparator/DateSeparator.mjs +2 -2
  167. package/dist/es/components/DateSeparator/DateSeparator.mjs.map +1 -1
  168. package/dist/es/components/Dialog/components/Alert.mjs +1 -1
  169. package/dist/es/components/Dialog/components/Callout.mjs +2 -2
  170. package/dist/es/components/Dialog/components/Callout.mjs.map +1 -1
  171. package/dist/es/components/Dialog/components/ContextMenu.mjs +9 -8
  172. package/dist/es/components/Dialog/components/ContextMenu.mjs.map +1 -1
  173. package/dist/es/components/Dialog/components/Prompt.mjs +5 -5
  174. package/dist/es/components/Dialog/components/Prompt.mjs.map +1 -1
  175. package/dist/es/components/Dialog/components/Viewer.mjs +5 -5
  176. package/dist/es/components/Dialog/components/Viewer.mjs.map +1 -1
  177. package/dist/es/components/Dialog/hooks/usePopoverPosition.mjs +9 -1
  178. package/dist/es/components/Dialog/hooks/usePopoverPosition.mjs.map +1 -1
  179. package/dist/es/components/Dialog/service/DialogManager.mjs +22 -19
  180. package/dist/es/components/Dialog/service/DialogManager.mjs.map +1 -1
  181. package/dist/es/components/EmptyStateIndicator/EmptyStateIndicator.mjs +6 -5
  182. package/dist/es/components/EmptyStateIndicator/EmptyStateIndicator.mjs.map +1 -1
  183. package/dist/es/components/Form/Dropdown.mjs +6 -3
  184. package/dist/es/components/Form/Dropdown.mjs.map +1 -1
  185. package/dist/es/components/Form/NumericInput.mjs +6 -5
  186. package/dist/es/components/Form/NumericInput.mjs.map +1 -1
  187. package/dist/es/components/Form/SwitchField.mjs +2 -2
  188. package/dist/es/components/Form/SwitchField.mjs.map +1 -1
  189. package/dist/es/components/Form/TextInput.mjs +1 -1
  190. package/dist/es/components/Gallery/GalleryContext.mjs +2 -8
  191. package/dist/es/components/Gallery/GalleryContext.mjs.map +1 -1
  192. package/dist/es/components/Gallery/GalleryHeader.mjs +39 -12
  193. package/dist/es/components/Gallery/GalleryHeader.mjs.map +1 -1
  194. package/dist/es/components/Gallery/GalleryUI.mjs +4 -4
  195. package/dist/es/components/Gallery/GalleryUI.mjs.map +1 -1
  196. package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollPaginator.mjs +16 -14
  197. package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollPaginator.mjs.map +1 -1
  198. package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.mjs +43 -0
  199. package/dist/es/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.mjs.map +1 -0
  200. package/dist/es/components/InfiniteScrollPaginator/hooks/useCursorPaginator.mjs +1 -1
  201. package/dist/es/components/InfiniteScrollPaginator/hooks/useCursorPaginator.mjs.map +1 -1
  202. package/dist/es/components/LoadMore/LoadMoreButton.mjs +3 -3
  203. package/dist/es/components/LoadMore/LoadMoreButton.mjs.map +1 -1
  204. package/dist/es/components/Loading/AttachmentUploadedSizeIndicator.mjs +2 -11
  205. package/dist/es/components/Loading/AttachmentUploadedSizeIndicator.mjs.map +1 -1
  206. package/dist/es/components/Loading/LoadingErrorIndicator.mjs +2 -2
  207. package/dist/es/components/Loading/LoadingErrorIndicator.mjs.map +1 -1
  208. package/dist/es/components/Loading/LoadingIndicator.mjs.map +1 -1
  209. package/dist/es/components/Loading/UploadProgressIndicator.mjs.map +1 -1
  210. package/dist/es/components/Loading/progress-indicators.mjs +2 -2
  211. package/dist/es/components/Loading/progress-indicators.mjs.map +1 -1
  212. package/dist/es/components/Location/ShareLocationDialog.mjs +13 -13
  213. package/dist/es/components/Location/ShareLocationDialog.mjs.map +1 -1
  214. package/dist/es/components/Location/hooks/useLiveLocationSharingManager.mjs +1 -0
  215. package/dist/es/components/Location/hooks/useLiveLocationSharingManager.mjs.map +1 -1
  216. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorder.mjs +4 -4
  217. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorder.mjs.map +1 -1
  218. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.mjs +7 -7
  219. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.mjs.map +1 -1
  220. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.mjs +4 -4
  221. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.mjs.map +1 -1
  222. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.mjs +2 -2
  223. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.mjs.map +1 -1
  224. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.mjs +1 -1
  225. package/dist/es/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.mjs.map +1 -1
  226. package/dist/es/components/MediaRecorder/RecordingPermissionDeniedNotification.mjs +4 -4
  227. package/dist/es/components/MediaRecorder/RecordingPermissionDeniedNotification.mjs.map +1 -1
  228. package/dist/es/components/MediaRecorder/classes/AmplitudeRecorder.mjs +32 -26
  229. package/dist/es/components/MediaRecorder/classes/AmplitudeRecorder.mjs.map +1 -1
  230. package/dist/es/components/MediaRecorder/classes/BrowserPermission.mjs +5 -4
  231. package/dist/es/components/MediaRecorder/classes/BrowserPermission.mjs.map +1 -1
  232. package/dist/es/components/MediaRecorder/classes/MediaRecorderController.mjs +195 -181
  233. package/dist/es/components/MediaRecorder/classes/MediaRecorderController.mjs.map +1 -1
  234. package/dist/es/components/MediaRecorder/hooks/useMediaRecorder.mjs +7 -11
  235. package/dist/es/components/MediaRecorder/hooks/useMediaRecorder.mjs.map +1 -1
  236. package/dist/es/components/MediaRecorder/observable/BehaviorSubject.mjs +1 -0
  237. package/dist/es/components/MediaRecorder/observable/BehaviorSubject.mjs.map +1 -1
  238. package/dist/es/components/MediaRecorder/observable/Observable.mjs +2 -1
  239. package/dist/es/components/MediaRecorder/observable/Observable.mjs.map +1 -1
  240. package/dist/es/components/MediaRecorder/observable/Subject.mjs +3 -2
  241. package/dist/es/components/MediaRecorder/observable/Subject.mjs.map +1 -1
  242. package/dist/es/components/MediaRecorder/observable/Subscription.mjs +2 -1
  243. package/dist/es/components/MediaRecorder/observable/Subscription.mjs.map +1 -1
  244. package/dist/es/components/Message/Message.mjs +13 -54
  245. package/dist/es/components/Message/Message.mjs.map +1 -1
  246. package/dist/es/components/Message/MessageAlsoSentInChannelIndicator.mjs +10 -54
  247. package/dist/es/components/Message/MessageAlsoSentInChannelIndicator.mjs.map +1 -1
  248. package/dist/es/components/Message/MessageBlocked.mjs +2 -2
  249. package/dist/es/components/Message/MessageBlocked.mjs.map +1 -1
  250. package/dist/es/components/Message/MessageDeletedBubble.mjs +2 -2
  251. package/dist/es/components/Message/MessageDeletedBubble.mjs.map +1 -1
  252. package/dist/es/components/Message/MessageEditedIndicator.mjs +8 -7
  253. package/dist/es/components/Message/MessageEditedIndicator.mjs.map +1 -1
  254. package/dist/es/components/Message/MessageRepliesCountButton.mjs +43 -9
  255. package/dist/es/components/Message/MessageRepliesCountButton.mjs.map +1 -1
  256. package/dist/es/components/Message/MessageStatus.mjs +13 -11
  257. package/dist/es/components/Message/MessageStatus.mjs.map +1 -1
  258. package/dist/es/components/Message/MessageText.mjs +4 -4
  259. package/dist/es/components/Message/MessageText.mjs.map +1 -1
  260. package/dist/es/components/Message/MessageTimestamp.mjs +4 -3
  261. package/dist/es/components/Message/MessageTimestamp.mjs.map +1 -1
  262. package/dist/es/components/Message/MessageTranslationIndicator.mjs +7 -7
  263. package/dist/es/components/Message/MessageTranslationIndicator.mjs.map +1 -1
  264. package/dist/es/components/Message/MessageUI.mjs +22 -21
  265. package/dist/es/components/Message/MessageUI.mjs.map +1 -1
  266. package/dist/es/components/Message/PinIndicator.mjs +3 -3
  267. package/dist/es/components/Message/PinIndicator.mjs.map +1 -1
  268. package/dist/es/components/Message/QuotedMessage.mjs +4 -4
  269. package/dist/es/components/Message/QuotedMessage.mjs.map +1 -1
  270. package/dist/es/components/Message/ReminderNotification.mjs +13 -12
  271. package/dist/es/components/Message/ReminderNotification.mjs.map +1 -1
  272. package/dist/es/components/Message/StreamedMessageText.mjs +5 -4
  273. package/dist/es/components/Message/StreamedMessageText.mjs.map +1 -1
  274. package/dist/es/components/Message/Timestamp.mjs +5 -5
  275. package/dist/es/components/Message/Timestamp.mjs.map +1 -1
  276. package/dist/es/components/Message/hooks/useActionHandler.mjs +8 -7
  277. package/dist/es/components/Message/hooks/useActionHandler.mjs.map +1 -1
  278. package/dist/es/components/Message/hooks/useDeleteHandler.mjs +30 -11
  279. package/dist/es/components/Message/hooks/useDeleteHandler.mjs.map +1 -1
  280. package/dist/es/components/Message/hooks/useFlagHandler.mjs +3 -3
  281. package/dist/es/components/Message/hooks/useFlagHandler.mjs.map +1 -1
  282. package/dist/es/components/Message/hooks/useMarkUnreadHandler.mjs +8 -3
  283. package/dist/es/components/Message/hooks/useMarkUnreadHandler.mjs.map +1 -1
  284. package/dist/es/components/Message/hooks/useMentionsHandler.mjs +2 -4
  285. package/dist/es/components/Message/hooks/useMentionsHandler.mjs.map +1 -1
  286. package/dist/es/components/Message/hooks/useMessageAlsoSentInChannelNavigation.mjs +72 -0
  287. package/dist/es/components/Message/hooks/useMessageAlsoSentInChannelNavigation.mjs.map +1 -0
  288. package/dist/es/components/Message/hooks/useMessageReminder.mjs +1 -1
  289. package/dist/es/components/Message/hooks/useMuteHandler.mjs +26 -9
  290. package/dist/es/components/Message/hooks/useMuteHandler.mjs.map +1 -1
  291. package/dist/es/components/Message/hooks/useOpenThreadHandler.mjs +13 -5
  292. package/dist/es/components/Message/hooks/useOpenThreadHandler.mjs.map +1 -1
  293. package/dist/es/components/Message/hooks/usePinHandler.mjs +26 -21
  294. package/dist/es/components/Message/hooks/usePinHandler.mjs.map +1 -1
  295. package/dist/es/components/Message/hooks/useReactionHandler.mjs +25 -17
  296. package/dist/es/components/Message/hooks/useReactionHandler.mjs.map +1 -1
  297. package/dist/es/components/Message/hooks/useReactionsFetcher.mjs +6 -3
  298. package/dist/es/components/Message/hooks/useReactionsFetcher.mjs.map +1 -1
  299. package/dist/es/components/Message/hooks/useRetryHandler.mjs +9 -7
  300. package/dist/es/components/Message/hooks/useRetryHandler.mjs.map +1 -1
  301. package/dist/es/components/Message/hooks/useUserRole.mjs +16 -12
  302. package/dist/es/components/Message/hooks/useUserRole.mjs.map +1 -1
  303. package/dist/es/components/Message/renderText/renderText.mjs +1 -1
  304. package/dist/es/components/Message/utils.mjs +19 -56
  305. package/dist/es/components/Message/utils.mjs.map +1 -1
  306. package/dist/es/components/MessageActions/DeleteMessageAlert.mjs +5 -5
  307. package/dist/es/components/MessageActions/DeleteMessageAlert.mjs.map +1 -1
  308. package/dist/es/components/MessageActions/DownloadSubmenu.mjs +4 -4
  309. package/dist/es/components/MessageActions/DownloadSubmenu.mjs.map +1 -1
  310. package/dist/es/components/MessageActions/MessageActions.defaults.mjs +72 -73
  311. package/dist/es/components/MessageActions/MessageActions.defaults.mjs.map +1 -1
  312. package/dist/es/components/MessageActions/MessageActions.mjs +3 -3
  313. package/dist/es/components/MessageActions/MessageActions.mjs.map +1 -1
  314. package/dist/es/components/MessageActions/RemindMeSubmenu.mjs +7 -7
  315. package/dist/es/components/MessageActions/RemindMeSubmenu.mjs.map +1 -1
  316. package/dist/es/components/MessageActions/hooks/useBaseMessageActionSetFilter.mjs +7 -4
  317. package/dist/es/components/MessageActions/hooks/useBaseMessageActionSetFilter.mjs.map +1 -1
  318. package/dist/es/components/MessageBounce/MessageBounceModal.mjs +1 -1
  319. package/dist/es/components/MessageBounce/MessageBouncePrompt.mjs +8 -8
  320. package/dist/es/components/MessageBounce/MessageBouncePrompt.mjs.map +1 -1
  321. package/dist/es/components/MessageComposer/AttachmentPreviewList/AttachmentPreviewList.mjs +2 -2
  322. package/dist/es/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.mjs +14 -14
  323. package/dist/es/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.mjs.map +1 -1
  324. package/dist/es/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.mjs +9 -9
  325. package/dist/es/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.mjs.map +1 -1
  326. package/dist/es/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.mjs +6 -6
  327. package/dist/es/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.mjs.map +1 -1
  328. package/dist/es/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.mjs +3 -4
  329. package/dist/es/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.mjs.map +1 -1
  330. package/dist/es/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.mjs +2 -2
  331. package/dist/es/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.mjs.map +1 -1
  332. package/dist/es/components/MessageComposer/AttachmentPreviewList/VoiceRecordingPreviewSlot.mjs +2 -2
  333. package/dist/es/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.mjs +2 -2
  334. package/dist/es/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.mjs.map +1 -1
  335. package/dist/es/components/MessageComposer/AttachmentSelector/AttachmentSelector.mjs +33 -30
  336. package/dist/es/components/MessageComposer/AttachmentSelector/AttachmentSelector.mjs.map +1 -1
  337. package/dist/es/components/MessageComposer/AttachmentSelector/CommandsMenu.mjs +26 -31
  338. package/dist/es/components/MessageComposer/AttachmentSelector/CommandsMenu.mjs.map +1 -1
  339. package/dist/es/components/MessageComposer/CommandChip.mjs +3 -3
  340. package/dist/es/components/MessageComposer/CommandChip.mjs.map +1 -1
  341. package/dist/es/components/MessageComposer/EditedMessagePreview.mjs +1 -1
  342. package/dist/es/components/MessageComposer/EditedMessagePreview.mjs.map +1 -1
  343. package/dist/es/components/MessageComposer/LinkPreviewList.mjs +3 -3
  344. package/dist/es/components/MessageComposer/MessageComposer.mjs +12 -17
  345. package/dist/es/components/MessageComposer/MessageComposer.mjs.map +1 -1
  346. package/dist/es/components/MessageComposer/MessageComposerActions.mjs +17 -13
  347. package/dist/es/components/MessageComposer/MessageComposerActions.mjs.map +1 -1
  348. package/dist/es/components/MessageComposer/MessageComposerUI.mjs +8 -8
  349. package/dist/es/components/MessageComposer/MessageComposerUI.mjs.map +1 -1
  350. package/dist/es/components/MessageComposer/QuotedMessagePreview.mjs +40 -40
  351. package/dist/es/components/MessageComposer/QuotedMessagePreview.mjs.map +1 -1
  352. package/dist/es/components/MessageComposer/RemoveAttachmentPreviewButton.mjs +2 -2
  353. package/dist/es/components/MessageComposer/RemoveAttachmentPreviewButton.mjs.map +1 -1
  354. package/dist/es/components/MessageComposer/SendButton.mjs +2 -2
  355. package/dist/es/components/MessageComposer/SendButton.mjs.map +1 -1
  356. package/dist/es/components/MessageComposer/SendToChannelCheckbox.mjs +2 -2
  357. package/dist/es/components/MessageComposer/SendToChannelCheckbox.mjs.map +1 -1
  358. package/dist/es/components/MessageComposer/StopAIGenerationButton.mjs +1 -1
  359. package/dist/es/components/MessageComposer/StopAIGenerationButton.mjs.map +1 -1
  360. package/dist/es/components/MessageComposer/WithDragAndDropUpload.mjs +9 -13
  361. package/dist/es/components/MessageComposer/WithDragAndDropUpload.mjs.map +1 -1
  362. package/dist/es/components/MessageComposer/hooks/useAttachmentManagerState.mjs +15 -2
  363. package/dist/es/components/MessageComposer/hooks/useAttachmentManagerState.mjs.map +1 -1
  364. package/dist/es/components/MessageComposer/hooks/useCooldownRemaining.mjs +2 -3
  365. package/dist/es/components/MessageComposer/hooks/useCooldownRemaining.mjs.map +1 -1
  366. package/dist/es/components/MessageComposer/hooks/useCreateMessageComposerContext.mjs +1 -3
  367. package/dist/es/components/MessageComposer/hooks/useCreateMessageComposerContext.mjs.map +1 -1
  368. package/dist/es/components/MessageComposer/hooks/useIsCooldownActive.mjs +2 -3
  369. package/dist/es/components/MessageComposer/hooks/useIsCooldownActive.mjs.map +1 -1
  370. package/dist/es/components/MessageComposer/hooks/useMessageComposerBindings.mjs +0 -4
  371. package/dist/es/components/MessageComposer/hooks/useMessageComposerBindings.mjs.map +1 -1
  372. package/dist/es/components/MessageComposer/hooks/useMessageComposerCommands.mjs +4 -4
  373. package/dist/es/components/MessageComposer/hooks/useMessageComposerCommands.mjs.map +1 -1
  374. package/dist/es/components/MessageComposer/hooks/useMessageComposerController.mjs +8 -34
  375. package/dist/es/components/MessageComposer/hooks/useMessageComposerController.mjs.map +1 -1
  376. package/dist/es/components/MessageComposer/hooks/useMessageComposerHasSendableData.mjs.map +1 -1
  377. package/dist/es/components/MessageComposer/hooks/useMessageComposerSubmitFn.mjs +16 -0
  378. package/dist/es/components/MessageComposer/hooks/useMessageComposerSubmitFn.mjs.map +1 -0
  379. package/dist/es/components/MessageComposer/hooks/usePasteHandler.mjs +1 -1
  380. package/dist/es/components/MessageComposer/hooks/utils.mjs.map +1 -1
  381. package/dist/es/components/MessageComposer/icons.mjs +2 -2
  382. package/dist/es/components/MessageComposer/icons.mjs.map +1 -1
  383. package/dist/es/components/MessageComposer/preEditSnapshot.mjs +1 -7
  384. package/dist/es/components/MessageComposer/preEditSnapshot.mjs.map +1 -1
  385. package/dist/es/components/MessageList/FloatingDateSeparator.mjs +7 -7
  386. package/dist/es/components/MessageList/FloatingDateSeparator.mjs.map +1 -1
  387. package/dist/es/components/MessageList/MessageList.mjs +168 -213
  388. package/dist/es/components/MessageList/MessageList.mjs.map +1 -1
  389. package/dist/es/components/MessageList/NewMessageNotification.mjs +5 -1
  390. package/dist/es/components/MessageList/NewMessageNotification.mjs.map +1 -1
  391. package/dist/es/components/MessageList/ScrollToLatestMessageButton.mjs +27 -22
  392. package/dist/es/components/MessageList/ScrollToLatestMessageButton.mjs.map +1 -1
  393. package/dist/es/components/MessageList/UnreadMessagesNotification.mjs +25 -9
  394. package/dist/es/components/MessageList/UnreadMessagesNotification.mjs.map +1 -1
  395. package/dist/es/components/MessageList/UnreadMessagesSeparator.mjs +18 -7
  396. package/dist/es/components/MessageList/UnreadMessagesSeparator.mjs.map +1 -1
  397. package/dist/es/components/MessageList/VirtualizedMessageList.mjs +186 -167
  398. package/dist/es/components/MessageList/VirtualizedMessageList.mjs.map +1 -1
  399. package/dist/es/components/MessageList/VirtualizedMessageListComponents.mjs +12 -12
  400. package/dist/es/components/MessageList/VirtualizedMessageListComponents.mjs.map +1 -1
  401. package/dist/es/components/MessageList/hooks/MessageList/useEnrichedMessages.mjs +6 -7
  402. package/dist/es/components/MessageList/hooks/MessageList/useEnrichedMessages.mjs.map +1 -1
  403. package/dist/es/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.mjs +6 -10
  404. package/dist/es/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.mjs.map +1 -1
  405. package/dist/es/components/MessageList/hooks/MessageList/useMessageListElements.mjs +18 -10
  406. package/dist/es/components/MessageList/hooks/MessageList/useMessageListElements.mjs.map +1 -1
  407. package/dist/es/components/MessageList/hooks/MessageList/useMessageListScrollManager.mjs +6 -4
  408. package/dist/es/components/MessageList/hooks/MessageList/useMessageListScrollManager.mjs.map +1 -1
  409. package/dist/es/components/MessageList/hooks/MessageList/useScrollLocationLogic.mjs +27 -202
  410. package/dist/es/components/MessageList/hooks/MessageList/useScrollLocationLogic.mjs.map +1 -1
  411. package/dist/es/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.mjs +10 -5
  412. package/dist/es/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.mjs.map +1 -1
  413. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.mjs +6 -5
  414. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.mjs.map +1 -1
  415. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.mjs +4 -4
  416. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.mjs.map +1 -1
  417. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.mjs +5 -1
  418. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.mjs.map +1 -1
  419. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.mjs +14 -9
  420. package/dist/es/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.mjs.map +1 -1
  421. package/dist/es/components/MessageList/hooks/useCanPaginateReplies.mjs +47 -0
  422. package/dist/es/components/MessageList/hooks/useCanPaginateReplies.mjs.map +1 -0
  423. package/dist/es/components/MessageList/hooks/useLastDeliveredData.mjs +6 -38
  424. package/dist/es/components/MessageList/hooks/useLastDeliveredData.mjs.map +1 -1
  425. package/dist/es/components/MessageList/hooks/useLastReadData.mjs +6 -23
  426. package/dist/es/components/MessageList/hooks/useLastReadData.mjs.map +1 -1
  427. package/dist/es/components/MessageList/hooks/useMarkRead.mjs +78 -48
  428. package/dist/es/components/MessageList/hooks/useMarkRead.mjs.map +1 -1
  429. package/dist/es/components/MessageList/hooks/useReceiptsByMessageId.mjs +71 -0
  430. package/dist/es/components/MessageList/hooks/useReceiptsByMessageId.mjs.map +1 -0
  431. package/dist/es/components/MessageList/hooks/useThreadHead.mjs +26 -0
  432. package/dist/es/components/MessageList/hooks/useThreadHead.mjs.map +1 -0
  433. package/dist/es/components/MessageList/messageSourceKey.mjs +37 -0
  434. package/dist/es/components/MessageList/messageSourceKey.mjs.map +1 -0
  435. package/dist/es/components/MessageList/renderMessages.mjs +11 -11
  436. package/dist/es/components/MessageList/renderMessages.mjs.map +1 -1
  437. package/dist/es/components/MessageList/utils.mjs +40 -33
  438. package/dist/es/components/MessageList/utils.mjs.map +1 -1
  439. package/dist/es/components/Modal/GlobalModal.mjs +2 -2
  440. package/dist/es/components/Notifications/Notification.mjs +10 -9
  441. package/dist/es/components/Notifications/Notification.mjs.map +1 -1
  442. package/dist/es/components/Notifications/NotificationList.mjs +5 -19
  443. package/dist/es/components/Notifications/NotificationList.mjs.map +1 -1
  444. package/dist/es/components/Notifications/hooks/useNotificationApi.mjs +69 -62
  445. package/dist/es/components/Notifications/hooks/useNotificationApi.mjs.map +1 -1
  446. package/dist/es/components/Notifications/hooks/useNotificationTarget.mjs +8 -12
  447. package/dist/es/components/Notifications/hooks/useNotificationTarget.mjs.map +1 -1
  448. package/dist/es/components/Notifications/hooks/useNotifications.mjs +1 -1
  449. package/dist/es/components/Notifications/hooks/useSystemNotifications.mjs +1 -1
  450. package/dist/es/components/Notifications/notificationTarget.mjs +17 -2
  451. package/dist/es/components/Notifications/notificationTarget.mjs.map +1 -1
  452. package/dist/es/components/Poll/Poll.mjs +1 -1
  453. package/dist/es/components/Poll/PollActions/AddCommentPrompt.mjs +8 -8
  454. package/dist/es/components/Poll/PollActions/AddCommentPrompt.mjs.map +1 -1
  455. package/dist/es/components/Poll/PollActions/EndPollAlert.mjs +9 -9
  456. package/dist/es/components/Poll/PollActions/EndPollAlert.mjs.map +1 -1
  457. package/dist/es/components/Poll/PollActions/PollActions.mjs +20 -14
  458. package/dist/es/components/Poll/PollActions/PollActions.mjs.map +1 -1
  459. package/dist/es/components/Poll/PollActions/PollAnswerList.mjs +8 -8
  460. package/dist/es/components/Poll/PollActions/PollAnswerList.mjs.map +1 -1
  461. package/dist/es/components/Poll/PollActions/PollOptionsFullList.mjs +4 -4
  462. package/dist/es/components/Poll/PollActions/PollOptionsFullList.mjs.map +1 -1
  463. package/dist/es/components/Poll/PollActions/PollQuestion.mjs +1 -1
  464. package/dist/es/components/Poll/PollActions/PollQuestion.mjs.map +1 -1
  465. package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotes.mjs +7 -5
  466. package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotes.mjs.map +1 -1
  467. package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.mjs +8 -4
  468. package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.mjs.map +1 -1
  469. package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesList.mjs +1 -1
  470. package/dist/es/components/Poll/PollActions/PollResults/PollOptionWithVotesList.mjs.map +1 -1
  471. package/dist/es/components/Poll/PollActions/PollResults/PollResults.mjs +11 -7
  472. package/dist/es/components/Poll/PollActions/PollResults/PollResults.mjs.map +1 -1
  473. package/dist/es/components/Poll/PollActions/SuggestPollOptionPrompt.mjs +15 -12
  474. package/dist/es/components/Poll/PollActions/SuggestPollOptionPrompt.mjs.map +1 -1
  475. package/dist/es/components/Poll/PollContent.mjs +2 -2
  476. package/dist/es/components/Poll/PollCreationDialog/MultipleAnswersField.mjs +13 -11
  477. package/dist/es/components/Poll/PollCreationDialog/MultipleAnswersField.mjs.map +1 -1
  478. package/dist/es/components/Poll/PollCreationDialog/NameField.mjs +6 -5
  479. package/dist/es/components/Poll/PollCreationDialog/NameField.mjs.map +1 -1
  480. package/dist/es/components/Poll/PollCreationDialog/OptionFieldSet.mjs +14 -13
  481. package/dist/es/components/Poll/PollCreationDialog/OptionFieldSet.mjs.map +1 -1
  482. package/dist/es/components/Poll/PollCreationDialog/PollCreationDialog.mjs +11 -12
  483. package/dist/es/components/Poll/PollCreationDialog/PollCreationDialog.mjs.map +1 -1
  484. package/dist/es/components/Poll/PollCreationDialog/PollCreationDialogControls.mjs +11 -20
  485. package/dist/es/components/Poll/PollCreationDialog/PollCreationDialogControls.mjs.map +1 -1
  486. package/dist/es/components/Poll/PollCreationDialog/PollOptionReorderHandle.mjs +5 -5
  487. package/dist/es/components/Poll/PollCreationDialog/PollOptionReorderHandle.mjs.map +1 -1
  488. package/dist/es/components/Poll/PollHeader.mjs +10 -6
  489. package/dist/es/components/Poll/PollHeader.mjs.map +1 -1
  490. package/dist/es/components/Poll/PollOptionList.mjs +8 -4
  491. package/dist/es/components/Poll/PollOptionList.mjs.map +1 -1
  492. package/dist/es/components/Poll/PollOptionSelector.mjs +13 -7
  493. package/dist/es/components/Poll/PollOptionSelector.mjs.map +1 -1
  494. package/dist/es/components/Poll/PollVote.mjs +6 -5
  495. package/dist/es/components/Poll/PollVote.mjs.map +1 -1
  496. package/dist/es/components/Poll/hooks/useManagePollVotesRealtime.mjs.map +1 -1
  497. package/dist/es/components/Poll/hooks/usePollAnswerPagination.mjs +5 -5
  498. package/dist/es/components/Poll/hooks/usePollAnswerPagination.mjs.map +1 -1
  499. package/dist/es/components/Poll/hooks/usePollOptionVotesPagination.mjs +6 -5
  500. package/dist/es/components/Poll/hooks/usePollOptionVotesPagination.mjs.map +1 -1
  501. package/dist/es/components/ReactFileUtilities/UploadButton.mjs +5 -5
  502. package/dist/es/components/ReactFileUtilities/UploadButton.mjs.map +1 -1
  503. package/dist/es/components/Reactions/MessageReactions.mjs +7 -7
  504. package/dist/es/components/Reactions/MessageReactions.mjs.map +1 -1
  505. package/dist/es/components/Reactions/MessageReactionsDetail.mjs +19 -12
  506. package/dist/es/components/Reactions/MessageReactionsDetail.mjs.map +1 -1
  507. package/dist/es/components/Reactions/ReactionSelector.mjs +15 -21
  508. package/dist/es/components/Reactions/ReactionSelector.mjs.map +1 -1
  509. package/dist/es/components/Reactions/ReactionSelectorWithButton.mjs +4 -4
  510. package/dist/es/components/Reactions/ReactionSelectorWithButton.mjs.map +1 -1
  511. package/dist/es/components/Reactions/hooks/useFetchReactions.mjs +3 -3
  512. package/dist/es/components/Reactions/hooks/useFetchReactions.mjs.map +1 -1
  513. package/dist/es/components/Reactions/hooks/useProcessReactions.mjs +5 -4
  514. package/dist/es/components/Reactions/hooks/useProcessReactions.mjs.map +1 -1
  515. package/dist/es/components/Search/Search.mjs +1 -1
  516. package/dist/es/components/Search/SearchBar/SearchBar.mjs +8 -7
  517. package/dist/es/components/Search/SearchBar/SearchBar.mjs.map +1 -1
  518. package/dist/es/components/Search/SearchContext.mjs +2 -3
  519. package/dist/es/components/Search/SearchContext.mjs.map +1 -1
  520. package/dist/es/components/Search/SearchResults/SearchResultItem.mjs +56 -39
  521. package/dist/es/components/Search/SearchResults/SearchResultItem.mjs.map +1 -1
  522. package/dist/es/components/Search/SearchResults/SearchResults.mjs +4 -4
  523. package/dist/es/components/Search/SearchResults/SearchResults.mjs.map +1 -1
  524. package/dist/es/components/Search/SearchResults/SearchResultsHeader.mjs +6 -5
  525. package/dist/es/components/Search/SearchResults/SearchResultsHeader.mjs.map +1 -1
  526. package/dist/es/components/Search/SearchResults/SearchResultsPresearch.mjs +1 -1
  527. package/dist/es/components/Search/SearchResults/SearchResultsPresearch.mjs.map +1 -1
  528. package/dist/es/components/Search/SearchResults/SearchSourceResultList.mjs +1 -1
  529. package/dist/es/components/Search/SearchResults/SearchSourceResultListFooter.mjs +2 -2
  530. package/dist/es/components/Search/SearchResults/SearchSourceResultListFooter.mjs.map +1 -1
  531. package/dist/es/components/Search/SearchResults/SearchSourceResults.mjs +1 -1
  532. package/dist/es/components/Search/SearchResults/SearchSourceResultsEmpty.mjs +1 -1
  533. package/dist/es/components/Search/SearchResults/SearchSourceResultsEmpty.mjs.map +1 -1
  534. package/dist/es/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.mjs +1 -1
  535. package/dist/es/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.mjs.map +1 -1
  536. package/dist/es/components/Search/SearchSourceResultsContext.mjs +2 -3
  537. package/dist/es/components/Search/SearchSourceResultsContext.mjs.map +1 -1
  538. package/dist/es/components/SummarizedMessagePreview/SummarizedMessagePreview.mjs +1 -1
  539. package/dist/es/components/SummarizedMessagePreview/SummarizedMessagePreview.mjs.map +1 -1
  540. package/dist/es/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.mjs +44 -19
  541. package/dist/es/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.mjs.map +1 -1
  542. package/dist/es/components/TextareaComposer/SuggestionList/CommandItem.mjs +1 -1
  543. package/dist/es/components/TextareaComposer/SuggestionList/CommandItem.mjs.map +1 -1
  544. package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.mjs +2 -2
  545. package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.mjs.map +1 -1
  546. package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/RoleItem.mjs +2 -2
  547. package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/RoleItem.mjs.map +1 -1
  548. package/dist/es/components/TextareaComposer/SuggestionList/MentionItem/UserGroupItem.mjs.map +1 -1
  549. package/dist/es/components/TextareaComposer/SuggestionList/SuggestionList.mjs +11 -11
  550. package/dist/es/components/TextareaComposer/SuggestionList/SuggestionList.mjs.map +1 -1
  551. package/dist/es/components/TextareaComposer/SuggestionList/SuggestionListItem.mjs +1 -1
  552. package/dist/es/components/TextareaComposer/TextareaComposer.mjs +13 -11
  553. package/dist/es/components/TextareaComposer/TextareaComposer.mjs.map +1 -1
  554. package/dist/es/components/TextareaComposer/hooks/useTextareaPlaceholder.mjs +12 -11
  555. package/dist/es/components/TextareaComposer/hooks/useTextareaPlaceholder.mjs.map +1 -1
  556. package/dist/es/components/Thread/Thread.mjs +89 -92
  557. package/dist/es/components/Thread/Thread.mjs.map +1 -1
  558. package/dist/es/components/Thread/ThreadHead.mjs +5 -4
  559. package/dist/es/components/Thread/ThreadHead.mjs.map +1 -1
  560. package/dist/es/components/Thread/ThreadHeader.mjs +31 -41
  561. package/dist/es/components/Thread/ThreadHeader.mjs.map +1 -1
  562. package/dist/es/components/Thread/ThreadStart.mjs +11 -10
  563. package/dist/es/components/Thread/ThreadStart.mjs.map +1 -1
  564. package/dist/es/components/Threads/ThreadContext.mjs +1 -5
  565. package/dist/es/components/Threads/ThreadContext.mjs.map +1 -1
  566. package/dist/es/components/Threads/ThreadList/ThreadList.mjs +19 -27
  567. package/dist/es/components/Threads/ThreadList/ThreadList.mjs.map +1 -1
  568. package/dist/es/components/Threads/ThreadList/ThreadListEmptyPlaceholder.mjs +3 -3
  569. package/dist/es/components/Threads/ThreadList/ThreadListEmptyPlaceholder.mjs.map +1 -1
  570. package/dist/es/components/Threads/ThreadList/ThreadListHeader.mjs +4 -4
  571. package/dist/es/components/Threads/ThreadList/ThreadListHeader.mjs.map +1 -1
  572. package/dist/es/components/Threads/ThreadList/ThreadListItemUI.mjs +30 -30
  573. package/dist/es/components/Threads/ThreadList/ThreadListItemUI.mjs.map +1 -1
  574. package/dist/es/components/Threads/ThreadList/ThreadListLoadingIndicator.mjs +1 -1
  575. package/dist/es/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.mjs +7 -3
  576. package/dist/es/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.mjs.map +1 -1
  577. package/dist/es/components/Threads/ThreadList/useThreadHighlighting.mjs +47 -0
  578. package/dist/es/components/Threads/ThreadList/useThreadHighlighting.mjs.map +1 -0
  579. package/dist/es/components/Threads/ThreadList/utils.a11y.mjs +13 -8
  580. package/dist/es/components/Threads/ThreadList/utils.a11y.mjs.map +1 -1
  581. package/dist/es/components/Threads/hooks/useCloseThread.mjs +30 -0
  582. package/dist/es/components/Threads/hooks/useCloseThread.mjs.map +1 -0
  583. package/dist/es/components/TypingIndicator/TypingIndicator.mjs +23 -17
  584. package/dist/es/components/TypingIndicator/TypingIndicator.mjs.map +1 -1
  585. package/dist/es/components/TypingIndicator/TypingIndicatorHeader.mjs +15 -11
  586. package/dist/es/components/TypingIndicator/TypingIndicatorHeader.mjs.map +1 -1
  587. package/dist/es/components/TypingIndicator/hooks/useDebouncedTypingActive.mjs.map +1 -1
  588. package/dist/es/components/TypingIndicator/utils/getTypingStatusMessage.mjs +7 -3
  589. package/dist/es/components/TypingIndicator/utils/getTypingStatusMessage.mjs.map +1 -1
  590. package/dist/es/components/VideoPlayer/VideoThumbnail.mjs +2 -2
  591. package/dist/es/components/VideoPlayer/VideoThumbnail.mjs.map +1 -1
  592. package/dist/es/context/AttachmentContext.mjs +16 -0
  593. package/dist/es/context/AttachmentContext.mjs.map +1 -0
  594. package/dist/es/context/ChannelInstanceContext.mjs +17 -0
  595. package/dist/es/context/ChannelInstanceContext.mjs.map +1 -0
  596. package/dist/es/context/ChannelListContext.mjs +3 -6
  597. package/dist/es/context/ChannelListContext.mjs.map +1 -1
  598. package/dist/es/context/ChatContext.mjs +2 -8
  599. package/dist/es/context/ChatContext.mjs.map +1 -1
  600. package/dist/es/context/ComponentContext.mjs +1 -1
  601. package/dist/es/context/ComponentContext.mjs.map +1 -1
  602. package/dist/es/context/DialogManagerContext.mjs +2 -2
  603. package/dist/es/context/DialogManagerContext.mjs.map +1 -1
  604. package/dist/es/context/MessageBounceContext.mjs +12 -14
  605. package/dist/es/context/MessageBounceContext.mjs.map +1 -1
  606. package/dist/es/context/MessageComposerContext.mjs +8 -6
  607. package/dist/es/context/MessageComposerContext.mjs.map +1 -1
  608. package/dist/es/context/MessageComposerControllerContext.mjs +19 -0
  609. package/dist/es/context/MessageComposerControllerContext.mjs.map +1 -0
  610. package/dist/es/context/MessageContext.mjs +2 -5
  611. package/dist/es/context/MessageContext.mjs.map +1 -1
  612. package/dist/es/context/MessageListContext.mjs +2 -8
  613. package/dist/es/context/MessageListContext.mjs.map +1 -1
  614. package/dist/es/context/MessageTranslationViewContext.mjs +3 -6
  615. package/dist/es/context/MessageTranslationViewContext.mjs.map +1 -1
  616. package/dist/es/context/ModalContext.mjs +6 -8
  617. package/dist/es/context/ModalContext.mjs.map +1 -1
  618. package/dist/es/context/PollContext.mjs +2 -3
  619. package/dist/es/context/PollContext.mjs.map +1 -1
  620. package/dist/es/context/TranslationContext.mjs +8 -21
  621. package/dist/es/context/TranslationContext.mjs.map +1 -1
  622. package/dist/es/context/VirtualizedMessageListContext.mjs +2 -1
  623. package/dist/es/context/VirtualizedMessageListContext.mjs.map +1 -1
  624. package/dist/es/context/WithComponents.mjs +3 -3
  625. package/dist/es/context/WithComponents.mjs.map +1 -1
  626. package/dist/es/context/WorkspaceNavigationContext.mjs +45 -0
  627. package/dist/es/context/WorkspaceNavigationContext.mjs.map +1 -0
  628. package/dist/es/context/requireContext.mjs +17 -0
  629. package/dist/es/context/requireContext.mjs.map +1 -0
  630. package/dist/es/context/useChannel.mjs +14 -0
  631. package/dist/es/context/useChannel.mjs.map +1 -0
  632. package/dist/es/context/useComponentContextIcons.mjs +8 -13
  633. package/dist/es/context/useComponentContextIcons.mjs.map +1 -1
  634. package/dist/es/hooks/useIsDmChannel.mjs +30 -0
  635. package/dist/es/hooks/useIsDmChannel.mjs.map +1 -0
  636. package/dist/es/hooks/useMessagePaginator.mjs +14 -0
  637. package/dist/es/hooks/useMessagePaginator.mjs.map +1 -0
  638. package/dist/es/i18n/Streami18n.mjs +38 -521
  639. package/dist/es/i18n/Streami18n.mjs.map +1 -1
  640. package/dist/es/i18n/TranslationBuilder/index.mjs +3 -0
  641. package/dist/es/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.mjs +22 -24
  642. package/dist/es/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.mjs.map +1 -1
  643. package/dist/es/i18n/TranslationBuilder/notifications/translators.mjs +20 -31
  644. package/dist/es/i18n/TranslationBuilder/notifications/translators.mjs.map +1 -1
  645. package/dist/es/i18n/TranslationBuilder/notifications/translatorsByNotificationType.mjs +42 -15
  646. package/dist/es/i18n/TranslationBuilder/notifications/translatorsByNotificationType.mjs.map +1 -1
  647. package/dist/es/i18n/runtimeDefaults.mjs +41 -0
  648. package/dist/es/i18n/runtimeDefaults.mjs.map +1 -0
  649. package/dist/es/i18n/useStreami18n.mjs +41 -0
  650. package/dist/es/i18n/useStreami18n.mjs.map +1 -0
  651. package/dist/es/i18n/utils.mjs +7 -125
  652. package/dist/es/i18n/utils.mjs.map +1 -1
  653. package/dist/es/index.mjs +175 -180
  654. package/dist/es/plugins/ChannelDetail/AvatarWithChannelDetail.mjs +4 -4
  655. package/dist/es/plugins/ChannelDetail/AvatarWithChannelDetail.mjs.map +1 -1
  656. package/dist/es/plugins/ChannelDetail/ChannelDetail.mjs +1 -1
  657. package/dist/es/plugins/ChannelDetail/ChannelDetail.mjs.map +1 -1
  658. package/dist/es/plugins/ChannelDetail/ChannelDetailEmptyList.mjs.map +1 -1
  659. package/dist/es/plugins/ChannelDetail/ChannelDetailSearchInput.mjs +3 -3
  660. package/dist/es/plugins/ChannelDetail/ChannelDetailSearchInput.mjs.map +1 -1
  661. package/dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.mjs +4 -5
  662. package/dist/es/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.mjs.map +1 -1
  663. package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.mjs +4 -4
  664. package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.mjs.map +1 -1
  665. package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.mjs +9 -8
  666. package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.mjs.map +1 -1
  667. package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.mjs +7 -6
  668. package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.mjs.map +1 -1
  669. package/dist/es/plugins/ChannelDetail/Views/ChannelFilesView/useChannelFilesSearch.mjs +1 -1
  670. package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.defaults.mjs +44 -44
  671. package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.defaults.mjs.map +1 -1
  672. package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.mjs +25 -25
  673. package/dist/es/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.mjs.map +1 -1
  674. package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.mjs +4 -4
  675. package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.mjs.map +1 -1
  676. package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.mjs +13 -13
  677. package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.mjs.map +1 -1
  678. package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.mjs +8 -3
  679. package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.mjs.map +1 -1
  680. package/dist/es/plugins/ChannelDetail/Views/ChannelMediaView/useChannelMediaSearch.mjs +1 -1
  681. package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.defaults.mjs +44 -41
  682. package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.defaults.mjs.map +1 -1
  683. package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.mjs +6 -5
  684. package/dist/es/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.mjs.map +1 -1
  685. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.mjs +19 -11
  686. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.mjs.map +1 -1
  687. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.mjs +12 -11
  688. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.mjs.map +1 -1
  689. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.defaults.mjs +8 -8
  690. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.defaults.mjs.map +1 -1
  691. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.mjs +8 -4
  692. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.mjs.map +1 -1
  693. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.mjs +1 -1
  694. package/dist/es/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.mjs.map +1 -1
  695. package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.mjs +3 -3
  696. package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.mjs.map +1 -1
  697. package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.mjs +24 -21
  698. package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.mjs.map +1 -1
  699. package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.mjs +9 -17
  700. package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.mjs.map +1 -1
  701. package/dist/es/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesSearch.mjs +1 -1
  702. package/dist/es/plugins/Emojis/EmojiPicker.mjs +9 -8
  703. package/dist/es/plugins/Emojis/EmojiPicker.mjs.map +1 -1
  704. package/dist/es/plugins/Emojis/middleware/textComposerEmojiMiddleware.mjs +2 -1
  705. package/dist/es/plugins/Emojis/middleware/textComposerEmojiMiddleware.mjs.map +1 -1
  706. package/dist/es/plugins/SlotGeometry/SlotGeometry.mjs +141 -0
  707. package/dist/es/plugins/SlotGeometry/SlotGeometry.mjs.map +1 -0
  708. package/dist/es/plugins/SlotLayout/ChannelSlot.mjs +30 -0
  709. package/dist/es/plugins/SlotLayout/ChannelSlot.mjs.map +1 -0
  710. package/dist/es/{components/ChatView → plugins/SlotLayout}/ChatView.a11y.utility.mjs +1 -1
  711. package/dist/es/plugins/SlotLayout/ChatView.a11y.utility.mjs.map +1 -0
  712. package/dist/es/plugins/SlotLayout/ChatView.mjs +277 -0
  713. package/dist/es/plugins/SlotLayout/ChatView.mjs.map +1 -0
  714. package/dist/es/plugins/SlotLayout/ChatViewNavigationContext.mjs +239 -0
  715. package/dist/es/plugins/SlotLayout/ChatViewNavigationContext.mjs.map +1 -0
  716. package/dist/es/plugins/SlotLayout/ThreadListSlot.mjs +42 -0
  717. package/dist/es/plugins/SlotLayout/ThreadListSlot.mjs.map +1 -0
  718. package/dist/es/plugins/SlotLayout/ThreadSlot.mjs +34 -0
  719. package/dist/es/plugins/SlotLayout/ThreadSlot.mjs.map +1 -0
  720. package/dist/es/plugins/SlotLayout/hooks/useLayoutViewState.mjs +26 -0
  721. package/dist/es/plugins/SlotLayout/hooks/useLayoutViewState.mjs.map +1 -0
  722. package/dist/es/plugins/SlotLayout/hooks/useSlotEntity.mjs +167 -0
  723. package/dist/es/plugins/SlotLayout/hooks/useSlotEntity.mjs.map +1 -0
  724. package/dist/es/plugins/SlotLayout/layout/Slot.mjs +46 -0
  725. package/dist/es/plugins/SlotLayout/layout/Slot.mjs.map +1 -0
  726. package/dist/es/plugins/SlotLayout/layout/WorkspaceLayout.mjs +23 -0
  727. package/dist/es/plugins/SlotLayout/layout/WorkspaceLayout.mjs.map +1 -0
  728. package/dist/es/plugins/SlotLayout/layoutController/LayoutController.mjs +376 -0
  729. package/dist/es/plugins/SlotLayout/layoutController/LayoutController.mjs.map +1 -0
  730. package/dist/es/plugins/SlotLayout/layoutController/serialization.mjs +80 -0
  731. package/dist/es/plugins/SlotLayout/layoutController/serialization.mjs.map +1 -0
  732. package/dist/es/plugins/SlotLayout/slotBinding.mjs +15 -0
  733. package/dist/es/plugins/SlotLayout/slotBinding.mjs.map +1 -0
  734. package/dist/es/plugins/SlotLayout/slotRegistry.mjs +64 -0
  735. package/dist/es/plugins/SlotLayout/slotRegistry.mjs.map +1 -0
  736. package/dist/es/plugins/SlotLayout/workspaceNavigationAdapter.mjs +130 -0
  737. package/dist/es/plugins/SlotLayout/workspaceNavigationAdapter.mjs.map +1 -0
  738. package/dist/es/slot-geometry.mjs +2 -0
  739. package/dist/es/slot-layout.mjs +14 -0
  740. package/dist/es/store/hooks/useStateStore.mjs.map +1 -1
  741. package/dist/es/utils/getChannel.mjs +5 -2
  742. package/dist/es/utils/getChannel.mjs.map +1 -1
  743. package/dist/es/utils/useStableCallback.mjs +1 -1
  744. package/dist/es/utils/useStableCallback.mjs.map +1 -1
  745. package/dist/types/a11y/accessibleLabel.d.ts.map +1 -1
  746. package/dist/types/components/AIStateIndicator/AIStateIndicator.d.ts.map +1 -1
  747. package/dist/types/components/AIStateIndicator/hooks/useAIState.d.ts +3 -8
  748. package/dist/types/components/AIStateIndicator/hooks/useAIState.d.ts.map +1 -1
  749. package/dist/types/components/Accessibility/NotificationAnnouncer.d.ts +1 -2
  750. package/dist/types/components/Accessibility/NotificationAnnouncer.d.ts.map +1 -1
  751. package/dist/types/components/Accessibility/hooks/useIncomingMessageAnnouncements.d.ts.map +1 -1
  752. package/dist/types/components/Accessibility/hooks/useInteractionAnnouncements.d.ts.map +1 -1
  753. package/dist/types/components/Accessibility/useAriaLiveAnnouncer.d.ts +4 -0
  754. package/dist/types/components/Accessibility/useAriaLiveAnnouncer.d.ts.map +1 -1
  755. package/dist/types/components/Attachment/Attachment.d.ts +13 -2
  756. package/dist/types/components/Attachment/Attachment.d.ts.map +1 -1
  757. package/dist/types/components/Attachment/AttachmentActions.d.ts.map +1 -1
  758. package/dist/types/components/Attachment/AttachmentContainer.d.ts +2 -2
  759. package/dist/types/components/Attachment/AttachmentContainer.d.ts.map +1 -1
  760. package/dist/types/components/Attachment/Audio.d.ts.map +1 -1
  761. package/dist/types/components/Attachment/FileAttachment.d.ts.map +1 -1
  762. package/dist/types/components/Attachment/Geolocation.d.ts +3 -3
  763. package/dist/types/components/Attachment/Geolocation.d.ts.map +1 -1
  764. package/dist/types/components/Attachment/Giphy.d.ts.map +1 -1
  765. package/dist/types/components/Attachment/LinkPreview/Card.d.ts.map +1 -1
  766. package/dist/types/components/Attachment/LinkPreview/CardAudio.d.ts +1 -1
  767. package/dist/types/components/Attachment/LinkPreview/CardAudio.d.ts.map +1 -1
  768. package/dist/types/components/Attachment/ModalGallery.d.ts.map +1 -1
  769. package/dist/types/components/Attachment/UnsupportedAttachment.d.ts.map +1 -1
  770. package/dist/types/components/Attachment/VideoAttachment.d.ts.map +1 -1
  771. package/dist/types/components/Attachment/VisibilityDisclaimer.d.ts.map +1 -1
  772. package/dist/types/components/Attachment/VoiceRecording.d.ts.map +1 -1
  773. package/dist/types/components/Attachment/components/DownloadButton.d.ts.map +1 -1
  774. package/dist/types/components/Attachment/components/index.d.ts +1 -1
  775. package/dist/types/components/Attachment/components/index.d.ts.map +1 -1
  776. package/dist/types/components/Attachment/hooks/useAttachmentUploadState.d.ts +0 -28
  777. package/dist/types/components/Attachment/hooks/useAttachmentUploadState.d.ts.map +1 -1
  778. package/dist/types/components/Attachment/index.d.ts +1 -1
  779. package/dist/types/components/Attachment/index.d.ts.map +1 -1
  780. package/dist/types/components/Attachment/utils.d.ts +2 -2
  781. package/dist/types/components/Attachment/utils.d.ts.map +1 -1
  782. package/dist/types/components/AudioPlayback/AudioPlaybackArbiter.d.ts +37 -0
  783. package/dist/types/components/AudioPlayback/AudioPlaybackArbiter.d.ts.map +1 -0
  784. package/dist/types/components/AudioPlayback/AudioPlayer.d.ts +1 -1
  785. package/dist/types/components/AudioPlayback/AudioPlayer.d.ts.map +1 -1
  786. package/dist/types/components/AudioPlayback/AudioPlayerPool.d.ts +19 -31
  787. package/dist/types/components/AudioPlayback/AudioPlayerPool.d.ts.map +1 -1
  788. package/dist/types/components/AudioPlayback/WithAudioPlayback.d.ts +17 -2
  789. package/dist/types/components/AudioPlayback/WithAudioPlayback.d.ts.map +1 -1
  790. package/dist/types/components/AudioPlayback/components/ProgressBar.d.ts.map +1 -1
  791. package/dist/types/components/AudioPlayback/components/WaveProgressBar.d.ts.map +1 -1
  792. package/dist/types/components/AudioPlayback/components/progressBarA11y.d.ts +2 -2
  793. package/dist/types/components/AudioPlayback/components/progressBarA11y.d.ts.map +1 -1
  794. package/dist/types/components/AudioPlayback/index.d.ts.map +1 -1
  795. package/dist/types/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.d.ts +2 -2
  796. package/dist/types/components/AudioPlayback/plugins/AudioPlayerNotificationsPlugin.d.ts.map +1 -1
  797. package/dist/types/components/Avatar/Avatar.d.ts +1 -5
  798. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
  799. package/dist/types/components/Badge/Badge.d.ts.map +1 -1
  800. package/dist/types/components/Badge/MediaBadge.d.ts.map +1 -1
  801. package/dist/types/components/BaseImage/ImagePlaceholder.d.ts.map +1 -1
  802. package/dist/types/components/Button/PlayButton.d.ts.map +1 -1
  803. package/dist/types/components/Button/WorkspaceNavigationButtons.d.ts +11 -0
  804. package/dist/types/components/Button/WorkspaceNavigationButtons.d.ts.map +1 -0
  805. package/dist/types/components/Button/index.d.ts +1 -0
  806. package/dist/types/components/Button/index.d.ts.map +1 -1
  807. package/dist/types/components/Channel/Channel.d.ts +9 -57
  808. package/dist/types/components/Channel/Channel.d.ts.map +1 -1
  809. package/dist/types/components/Channel/hooks/useChannelCapabilities.d.ts +4 -0
  810. package/dist/types/components/Channel/hooks/useChannelCapabilities.d.ts.map +1 -0
  811. package/dist/types/components/Channel/index.d.ts +1 -2
  812. package/dist/types/components/Channel/index.d.ts.map +1 -1
  813. package/dist/types/components/ChannelHeader/ChannelHeader.d.ts +12 -0
  814. package/dist/types/components/ChannelHeader/ChannelHeader.d.ts.map +1 -1
  815. package/dist/types/components/ChannelHeader/hooks/useChannelHasMembersOnline.d.ts +8 -0
  816. package/dist/types/components/ChannelHeader/hooks/useChannelHasMembersOnline.d.ts.map +1 -1
  817. package/dist/types/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.d.ts +7 -8
  818. package/dist/types/components/ChannelHeader/hooks/useChannelHeaderOnlineStatus.d.ts.map +1 -1
  819. package/dist/types/components/ChannelList/ChannelList.d.ts +11 -78
  820. package/dist/types/components/ChannelList/ChannelList.d.ts.map +1 -1
  821. package/dist/types/components/ChannelList/ChannelListHeader.d.ts.map +1 -1
  822. package/dist/types/components/ChannelList/ChannelLists.d.ts +10 -0
  823. package/dist/types/components/ChannelList/ChannelLists.d.ts.map +1 -0
  824. package/dist/types/components/ChannelList/ChannelNavigation.d.ts +9 -0
  825. package/dist/types/components/ChannelList/ChannelNavigation.d.ts.map +1 -0
  826. package/dist/types/components/ChannelList/hooks/index.d.ts +1 -2
  827. package/dist/types/components/ChannelList/hooks/index.d.ts.map +1 -1
  828. package/dist/types/components/ChannelList/hooks/useChannelMembersState.d.ts.map +1 -1
  829. package/dist/types/components/ChannelList/hooks/useChannelMembershipState.d.ts.map +1 -1
  830. package/dist/types/components/ChannelList/hooks/useChannelPaginatorState.d.ts +18 -0
  831. package/dist/types/components/ChannelList/hooks/useChannelPaginatorState.d.ts.map +1 -0
  832. package/dist/types/components/ChannelList/hooks/useSelectedChannelState.d.ts +3 -3
  833. package/dist/types/components/ChannelList/hooks/useSelectedChannelState.d.ts.map +1 -1
  834. package/dist/types/components/ChannelList/index.d.ts +3 -2
  835. package/dist/types/components/ChannelList/index.d.ts.map +1 -1
  836. package/dist/types/components/ChannelListItem/ChannelListItem.d.ts +9 -18
  837. package/dist/types/components/ChannelListItem/ChannelListItem.d.ts.map +1 -1
  838. package/dist/types/components/ChannelListItem/ChannelListItemActionButtons.defaults.d.ts.map +1 -1
  839. package/dist/types/components/ChannelListItem/ChannelListItemTimestamp.d.ts +3 -3
  840. package/dist/types/components/ChannelListItem/ChannelListItemTimestamp.d.ts.map +1 -1
  841. package/dist/types/components/ChannelListItem/ChannelListItemUI.d.ts.map +1 -1
  842. package/dist/types/components/ChannelListItem/hooks/useChannelDisplayName.d.ts +1 -1
  843. package/dist/types/components/ChannelListItem/hooks/useChannelDisplayName.d.ts.map +1 -1
  844. package/dist/types/components/ChannelListItem/hooks/useIsChannelMuted.d.ts +8 -5
  845. package/dist/types/components/ChannelListItem/hooks/useIsChannelMuted.d.ts.map +1 -1
  846. package/dist/types/components/ChannelListItem/hooks/useMessageDeliveryStatus.d.ts.map +1 -1
  847. package/dist/types/components/ChannelListItem/utils.a11y.d.ts +14 -5
  848. package/dist/types/components/ChannelListItem/utils.a11y.d.ts.map +1 -1
  849. package/dist/types/components/ChannelListItem/utils.d.ts +1 -1
  850. package/dist/types/components/ChannelListItem/utils.d.ts.map +1 -1
  851. package/dist/types/components/Chat/Chat.d.ts +1 -4
  852. package/dist/types/components/Chat/Chat.d.ts.map +1 -1
  853. package/dist/types/components/Chat/hooks/useChat.d.ts +4 -16
  854. package/dist/types/components/Chat/hooks/useChat.d.ts.map +1 -1
  855. package/dist/types/components/Chat/hooks/useCreateChatClient.d.ts +2 -2
  856. package/dist/types/components/Chat/hooks/useCreateChatClient.d.ts.map +1 -1
  857. package/dist/types/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  858. package/dist/types/components/Chat/hooks/useNetworkConnectionState.d.ts +34 -0
  859. package/dist/types/components/Chat/hooks/useNetworkConnectionState.d.ts.map +1 -0
  860. package/dist/types/components/Chat/hooks/useReportLostConnectionSystemNotification.d.ts +26 -2
  861. package/dist/types/components/Chat/hooks/useReportLostConnectionSystemNotification.d.ts.map +1 -1
  862. package/dist/types/components/Chat/hooks/useWSConnectionState.d.ts +22 -0
  863. package/dist/types/components/Chat/hooks/useWSConnectionState.d.ts.map +1 -0
  864. package/dist/types/components/Chat/index.d.ts +2 -0
  865. package/dist/types/components/Chat/index.d.ts.map +1 -1
  866. package/dist/types/components/Dialog/components/ContextMenu.d.ts +0 -4
  867. package/dist/types/components/Dialog/components/ContextMenu.d.ts.map +1 -1
  868. package/dist/types/components/Dialog/hooks/usePopoverPosition.d.ts +2 -2
  869. package/dist/types/components/Dialog/hooks/usePopoverPosition.d.ts.map +1 -1
  870. package/dist/types/components/Dialog/service/DialogManager.d.ts +1 -1
  871. package/dist/types/components/Dialog/service/DialogManager.d.ts.map +1 -1
  872. package/dist/types/components/EmptyStateIndicator/EmptyStateIndicator.d.ts.map +1 -1
  873. package/dist/types/components/Form/Dropdown.d.ts +4 -1
  874. package/dist/types/components/Form/Dropdown.d.ts.map +1 -1
  875. package/dist/types/components/Form/NumericInput.d.ts.map +1 -1
  876. package/dist/types/components/Gallery/GalleryContext.d.ts +5 -0
  877. package/dist/types/components/Gallery/GalleryContext.d.ts.map +1 -1
  878. package/dist/types/components/Gallery/GalleryHeader.d.ts.map +1 -1
  879. package/dist/types/components/Gallery/GalleryUI.d.ts.map +1 -1
  880. package/dist/types/components/Icons/index.d.ts +1 -1
  881. package/dist/types/components/Icons/index.d.ts.map +1 -1
  882. package/dist/types/components/Icons/slots.d.ts +18 -7
  883. package/dist/types/components/Icons/slots.d.ts.map +1 -1
  884. package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts +8 -2
  885. package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts.map +1 -1
  886. package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.d.ts +43 -0
  887. package/dist/types/components/InfiniteScrollPaginator/InfiniteScrollWithComponents.d.ts.map +1 -0
  888. package/dist/types/components/InfiniteScrollPaginator/hooks/useCursorPaginator.d.ts +1 -1
  889. package/dist/types/components/InfiniteScrollPaginator/hooks/useCursorPaginator.d.ts.map +1 -1
  890. package/dist/types/components/LoadMore/LoadMoreButton.d.ts.map +1 -1
  891. package/dist/types/components/Loading/AttachmentUploadedSizeIndicator.d.ts +3 -0
  892. package/dist/types/components/Loading/AttachmentUploadedSizeIndicator.d.ts.map +1 -1
  893. package/dist/types/components/Loading/LoadingErrorIndicator.d.ts.map +1 -1
  894. package/dist/types/components/Loading/LoadingIndicator.d.ts +2 -3
  895. package/dist/types/components/Loading/LoadingIndicator.d.ts.map +1 -1
  896. package/dist/types/components/Loading/UploadProgressIndicator.d.ts +2 -2
  897. package/dist/types/components/Loading/index.d.ts +1 -1
  898. package/dist/types/components/Loading/index.d.ts.map +1 -1
  899. package/dist/types/components/Loading/progress-indicators.d.ts.map +1 -1
  900. package/dist/types/components/Location/ShareLocationDialog.d.ts.map +1 -1
  901. package/dist/types/components/Location/hooks/useLiveLocationSharingManager.d.ts.map +1 -1
  902. package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecorderRecordingControls.d.ts.map +1 -1
  903. package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingButtonWithNotification.d.ts.map +1 -1
  904. package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingPlayback.d.ts.map +1 -1
  905. package/dist/types/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.d.ts.map +1 -1
  906. package/dist/types/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts.map +1 -1
  907. package/dist/types/components/MediaRecorder/classes/MediaRecorderController.d.ts.map +1 -1
  908. package/dist/types/components/MediaRecorder/hooks/useMediaRecorder.d.ts +2 -2
  909. package/dist/types/components/MediaRecorder/hooks/useMediaRecorder.d.ts.map +1 -1
  910. package/dist/types/components/Message/Message.d.ts.map +1 -1
  911. package/dist/types/components/Message/MessageAlsoSentInChannelIndicator.d.ts +11 -1
  912. package/dist/types/components/Message/MessageAlsoSentInChannelIndicator.d.ts.map +1 -1
  913. package/dist/types/components/Message/MessageDeletedBubble.d.ts.map +1 -1
  914. package/dist/types/components/Message/MessageEditedIndicator.d.ts.map +1 -1
  915. package/dist/types/components/Message/MessageRepliesCountButton.d.ts.map +1 -1
  916. package/dist/types/components/Message/MessageStatus.d.ts.map +1 -1
  917. package/dist/types/components/Message/MessageText.d.ts.map +1 -1
  918. package/dist/types/components/Message/MessageTimestamp.d.ts.map +1 -1
  919. package/dist/types/components/Message/MessageTranslationIndicator.d.ts.map +1 -1
  920. package/dist/types/components/Message/MessageUI.d.ts.map +1 -1
  921. package/dist/types/components/Message/ReminderNotification.d.ts.map +1 -1
  922. package/dist/types/components/Message/StreamedMessageText.d.ts.map +1 -1
  923. package/dist/types/components/Message/Timestamp.d.ts.map +1 -1
  924. package/dist/types/components/Message/hooks/index.d.ts +1 -0
  925. package/dist/types/components/Message/hooks/index.d.ts.map +1 -1
  926. package/dist/types/components/Message/hooks/useActionHandler.d.ts +1 -1
  927. package/dist/types/components/Message/hooks/useActionHandler.d.ts.map +1 -1
  928. package/dist/types/components/Message/hooks/useDeleteHandler.d.ts +6 -2
  929. package/dist/types/components/Message/hooks/useDeleteHandler.d.ts.map +1 -1
  930. package/dist/types/components/Message/hooks/useMarkUnreadHandler.d.ts +6 -1
  931. package/dist/types/components/Message/hooks/useMarkUnreadHandler.d.ts.map +1 -1
  932. package/dist/types/components/Message/hooks/useMentionsHandler.d.ts.map +1 -1
  933. package/dist/types/components/Message/hooks/useMessageAlsoSentInChannelNavigation.d.ts +22 -0
  934. package/dist/types/components/Message/hooks/useMessageAlsoSentInChannelNavigation.d.ts.map +1 -0
  935. package/dist/types/components/Message/hooks/useMuteHandler.d.ts +7 -2
  936. package/dist/types/components/Message/hooks/useMuteHandler.d.ts.map +1 -1
  937. package/dist/types/components/Message/hooks/useOpenThreadHandler.d.ts +1 -0
  938. package/dist/types/components/Message/hooks/useOpenThreadHandler.d.ts.map +1 -1
  939. package/dist/types/components/Message/hooks/usePinHandler.d.ts +23 -2
  940. package/dist/types/components/Message/hooks/usePinHandler.d.ts.map +1 -1
  941. package/dist/types/components/Message/hooks/useReactionHandler.d.ts +1 -1
  942. package/dist/types/components/Message/hooks/useReactionHandler.d.ts.map +1 -1
  943. package/dist/types/components/Message/hooks/useReactionsFetcher.d.ts +2 -2
  944. package/dist/types/components/Message/hooks/useReactionsFetcher.d.ts.map +1 -1
  945. package/dist/types/components/Message/hooks/useRetryHandler.d.ts +3 -2
  946. package/dist/types/components/Message/hooks/useRetryHandler.d.ts.map +1 -1
  947. package/dist/types/components/Message/hooks/useUserRole.d.ts +1 -0
  948. package/dist/types/components/Message/hooks/useUserRole.d.ts.map +1 -1
  949. package/dist/types/components/Message/types.d.ts +11 -20
  950. package/dist/types/components/Message/types.d.ts.map +1 -1
  951. package/dist/types/components/Message/utils.d.ts +7 -38
  952. package/dist/types/components/Message/utils.d.ts.map +1 -1
  953. package/dist/types/components/MessageActions/DeleteMessageAlert.d.ts.map +1 -1
  954. package/dist/types/components/MessageActions/DownloadSubmenu.d.ts.map +1 -1
  955. package/dist/types/components/MessageActions/MessageActions.d.ts +6 -2
  956. package/dist/types/components/MessageActions/MessageActions.d.ts.map +1 -1
  957. package/dist/types/components/MessageActions/MessageActions.defaults.d.ts.map +1 -1
  958. package/dist/types/components/MessageActions/RemindMeSubmenu.d.ts.map +1 -1
  959. package/dist/types/components/MessageActions/hooks/useBaseMessageActionSetFilter.d.ts.map +1 -1
  960. package/dist/types/components/MessageBounce/MessageBouncePrompt.d.ts.map +1 -1
  961. package/dist/types/components/MessageComposer/AttachmentPreviewList/AudioAttachmentPreview.d.ts.map +1 -1
  962. package/dist/types/components/MessageComposer/AttachmentPreviewList/FileAttachmentPreview.d.ts.map +1 -1
  963. package/dist/types/components/MessageComposer/AttachmentPreviewList/GeolocationPreview.d.ts.map +1 -1
  964. package/dist/types/components/MessageComposer/AttachmentPreviewList/MediaAttachmentPreview.d.ts.map +1 -1
  965. package/dist/types/components/MessageComposer/AttachmentPreviewList/UnsupportedAttachmentPreview.d.ts.map +1 -1
  966. package/dist/types/components/MessageComposer/AttachmentPreviewList/index.d.ts +1 -1
  967. package/dist/types/components/MessageComposer/AttachmentPreviewList/index.d.ts.map +1 -1
  968. package/dist/types/components/MessageComposer/AttachmentPreviewList/utils/AttachmentPreviewRoot.d.ts.map +1 -1
  969. package/dist/types/components/MessageComposer/AttachmentSelector/AttachmentSelector.d.ts.map +1 -1
  970. package/dist/types/components/MessageComposer/AttachmentSelector/CommandsMenu.d.ts +5 -5
  971. package/dist/types/components/MessageComposer/AttachmentSelector/CommandsMenu.d.ts.map +1 -1
  972. package/dist/types/components/MessageComposer/CommandChip.d.ts.map +1 -1
  973. package/dist/types/components/MessageComposer/EditMessageForm.d.ts +1 -0
  974. package/dist/types/components/MessageComposer/EditMessageForm.d.ts.map +1 -0
  975. package/dist/types/components/MessageComposer/MessageComposer.d.ts +1 -17
  976. package/dist/types/components/MessageComposer/MessageComposer.d.ts.map +1 -1
  977. package/dist/types/components/MessageComposer/MessageComposerActions.d.ts.map +1 -1
  978. package/dist/types/components/MessageComposer/MessageComposerUI.d.ts.map +1 -1
  979. package/dist/types/components/MessageComposer/QuotedMessagePreview.d.ts +3 -3
  980. package/dist/types/components/MessageComposer/QuotedMessagePreview.d.ts.map +1 -1
  981. package/dist/types/components/MessageComposer/RemoveAttachmentPreviewButton.d.ts.map +1 -1
  982. package/dist/types/components/MessageComposer/SendButton.d.ts.map +1 -1
  983. package/dist/types/components/MessageComposer/SendToChannelCheckbox.d.ts.map +1 -1
  984. package/dist/types/components/MessageComposer/StopAIGenerationButton.d.ts.map +1 -1
  985. package/dist/types/components/MessageComposer/WithDragAndDropUpload.d.ts +2 -5
  986. package/dist/types/components/MessageComposer/WithDragAndDropUpload.d.ts.map +1 -1
  987. package/dist/types/components/MessageComposer/hooks/index.d.ts +1 -0
  988. package/dist/types/components/MessageComposer/hooks/index.d.ts.map +1 -1
  989. package/dist/types/components/MessageComposer/hooks/useAttachmentManagerState.d.ts +5 -1
  990. package/dist/types/components/MessageComposer/hooks/useAttachmentManagerState.d.ts.map +1 -1
  991. package/dist/types/components/MessageComposer/hooks/useAttachmentsForPreview.d.ts +1 -2
  992. package/dist/types/components/MessageComposer/hooks/useAttachmentsForPreview.d.ts.map +1 -1
  993. package/dist/types/components/MessageComposer/hooks/useCreateMessageComposerContext.d.ts.map +1 -1
  994. package/dist/types/components/MessageComposer/hooks/useMessageComposerBindings.d.ts +0 -1
  995. package/dist/types/components/MessageComposer/hooks/useMessageComposerBindings.d.ts.map +1 -1
  996. package/dist/types/components/MessageComposer/hooks/useMessageComposerCommands.d.ts +2 -2
  997. package/dist/types/components/MessageComposer/hooks/useMessageComposerCommands.d.ts.map +1 -1
  998. package/dist/types/components/MessageComposer/hooks/useMessageComposerController.d.ts +1 -1
  999. package/dist/types/components/MessageComposer/hooks/useMessageComposerController.d.ts.map +1 -1
  1000. package/dist/types/components/MessageComposer/hooks/useMessageComposerHasSendableData.d.ts.map +1 -1
  1001. package/dist/types/components/MessageComposer/hooks/useMessageComposerSubmitFn.d.ts +7 -0
  1002. package/dist/types/components/MessageComposer/hooks/useMessageComposerSubmitFn.d.ts.map +1 -0
  1003. package/dist/types/components/MessageComposer/index.d.ts +2 -1
  1004. package/dist/types/components/MessageComposer/index.d.ts.map +1 -1
  1005. package/dist/types/components/MessageList/FloatingDateSeparator.d.ts +1 -1
  1006. package/dist/types/components/MessageList/FloatingDateSeparator.d.ts.map +1 -1
  1007. package/dist/types/components/MessageList/MessageList.d.ts +24 -25
  1008. package/dist/types/components/MessageList/MessageList.d.ts.map +1 -1
  1009. package/dist/types/components/MessageList/NewMessageNotification.d.ts.map +1 -1
  1010. package/dist/types/components/MessageList/ScrollToLatestMessageButton.d.ts +0 -1
  1011. package/dist/types/components/MessageList/ScrollToLatestMessageButton.d.ts.map +1 -1
  1012. package/dist/types/components/MessageList/UnreadMessagesNotification.d.ts +1 -4
  1013. package/dist/types/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -1
  1014. package/dist/types/components/MessageList/UnreadMessagesSeparator.d.ts.map +1 -1
  1015. package/dist/types/components/MessageList/VirtualizedMessageList.d.ts +23 -42
  1016. package/dist/types/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  1017. package/dist/types/components/MessageList/VirtualizedMessageListComponents.d.ts.map +1 -1
  1018. package/dist/types/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts +3 -3
  1019. package/dist/types/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts.map +1 -1
  1020. package/dist/types/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.d.ts +2 -2
  1021. package/dist/types/components/MessageList/hooks/MessageList/useFloatingDateSeparatorMessageList.d.ts.map +1 -1
  1022. package/dist/types/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +1 -3
  1023. package/dist/types/components/MessageList/hooks/MessageList/useMessageListElements.d.ts.map +1 -1
  1024. package/dist/types/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts +1 -0
  1025. package/dist/types/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts.map +1 -1
  1026. package/dist/types/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts +6 -25
  1027. package/dist/types/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts.map +1 -1
  1028. package/dist/types/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts +1 -1
  1029. package/dist/types/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.d.ts.map +1 -1
  1030. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.d.ts +2 -2
  1031. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useFloatingDateSeparator.d.ts.map +1 -1
  1032. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts +1 -1
  1033. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts.map +1 -1
  1034. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +1 -5
  1035. package/dist/types/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts.map +1 -1
  1036. package/dist/types/components/MessageList/hooks/useCanPaginateReplies.d.ts +32 -0
  1037. package/dist/types/components/MessageList/hooks/useCanPaginateReplies.d.ts.map +1 -0
  1038. package/dist/types/components/MessageList/hooks/useLastDeliveredData.d.ts +1 -0
  1039. package/dist/types/components/MessageList/hooks/useLastDeliveredData.d.ts.map +1 -1
  1040. package/dist/types/components/MessageList/hooks/useLastReadData.d.ts +1 -0
  1041. package/dist/types/components/MessageList/hooks/useLastReadData.d.ts.map +1 -1
  1042. package/dist/types/components/MessageList/hooks/useMarkRead.d.ts +5 -9
  1043. package/dist/types/components/MessageList/hooks/useMarkRead.d.ts.map +1 -1
  1044. package/dist/types/components/MessageList/hooks/useReceiptsByMessageId.d.ts +12 -0
  1045. package/dist/types/components/MessageList/hooks/useReceiptsByMessageId.d.ts.map +1 -0
  1046. package/dist/types/components/MessageList/hooks/useThreadHead.d.ts +9 -0
  1047. package/dist/types/components/MessageList/hooks/useThreadHead.d.ts.map +1 -0
  1048. package/dist/types/components/MessageList/messageSourceKey.d.ts +14 -0
  1049. package/dist/types/components/MessageList/messageSourceKey.d.ts.map +1 -0
  1050. package/dist/types/components/MessageList/renderMessages.d.ts +11 -9
  1051. package/dist/types/components/MessageList/renderMessages.d.ts.map +1 -1
  1052. package/dist/types/components/MessageList/utils.d.ts +22 -13
  1053. package/dist/types/components/MessageList/utils.d.ts.map +1 -1
  1054. package/dist/types/components/Modal/CloseButtonOnModalOverlay.d.ts.map +1 -1
  1055. package/dist/types/components/Notifications/Notification.d.ts.map +1 -1
  1056. package/dist/types/components/Notifications/NotificationList.d.ts.map +1 -1
  1057. package/dist/types/components/Notifications/hooks/useNotificationApi.d.ts +3 -0
  1058. package/dist/types/components/Notifications/hooks/useNotificationApi.d.ts.map +1 -1
  1059. package/dist/types/components/Notifications/hooks/useNotificationTarget.d.ts.map +1 -1
  1060. package/dist/types/components/Notifications/notificationTarget.d.ts.map +1 -1
  1061. package/dist/types/components/Poll/PollActions/AddCommentPrompt.d.ts.map +1 -1
  1062. package/dist/types/components/Poll/PollActions/EndPollAlert.d.ts.map +1 -1
  1063. package/dist/types/components/Poll/PollActions/PollActions.d.ts.map +1 -1
  1064. package/dist/types/components/Poll/PollActions/PollAnswerList.d.ts.map +1 -1
  1065. package/dist/types/components/Poll/PollActions/PollOptionsFullList.d.ts.map +1 -1
  1066. package/dist/types/components/Poll/PollActions/PollQuestion.d.ts.map +1 -1
  1067. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotes.d.ts +2 -2
  1068. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotes.d.ts.map +1 -1
  1069. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts +2 -2
  1070. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts.map +1 -1
  1071. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesList.d.ts +2 -2
  1072. package/dist/types/components/Poll/PollActions/PollResults/PollOptionWithVotesList.d.ts.map +1 -1
  1073. package/dist/types/components/Poll/PollActions/PollResults/PollResults.d.ts.map +1 -1
  1074. package/dist/types/components/Poll/PollActions/SuggestPollOptionPrompt.d.ts.map +1 -1
  1075. package/dist/types/components/Poll/PollCreationDialog/MultipleAnswersField.d.ts.map +1 -1
  1076. package/dist/types/components/Poll/PollCreationDialog/NameField.d.ts.map +1 -1
  1077. package/dist/types/components/Poll/PollCreationDialog/OptionFieldSet.d.ts.map +1 -1
  1078. package/dist/types/components/Poll/PollCreationDialog/PollCreationDialog.d.ts.map +1 -1
  1079. package/dist/types/components/Poll/PollCreationDialog/PollCreationDialogControls.d.ts.map +1 -1
  1080. package/dist/types/components/Poll/PollCreationDialog/PollOptionReorderHandle.d.ts.map +1 -1
  1081. package/dist/types/components/Poll/PollHeader.d.ts.map +1 -1
  1082. package/dist/types/components/Poll/PollOptionList.d.ts.map +1 -1
  1083. package/dist/types/components/Poll/PollOptionSelector.d.ts +2 -2
  1084. package/dist/types/components/Poll/PollOptionSelector.d.ts.map +1 -1
  1085. package/dist/types/components/Poll/PollVote.d.ts +1 -1
  1086. package/dist/types/components/Poll/PollVote.d.ts.map +1 -1
  1087. package/dist/types/components/Poll/hooks/useManagePollVotesRealtime.d.ts +2 -2
  1088. package/dist/types/components/Poll/hooks/useManagePollVotesRealtime.d.ts.map +1 -1
  1089. package/dist/types/components/Poll/hooks/usePollAnswerPagination.d.ts +2 -2
  1090. package/dist/types/components/Poll/hooks/usePollAnswerPagination.d.ts.map +1 -1
  1091. package/dist/types/components/Poll/hooks/usePollOptionVotesPagination.d.ts +2 -2
  1092. package/dist/types/components/Poll/hooks/usePollOptionVotesPagination.d.ts.map +1 -1
  1093. package/dist/types/components/Reactions/MessageReactions.d.ts.map +1 -1
  1094. package/dist/types/components/Reactions/MessageReactionsDetail.d.ts +2 -2
  1095. package/dist/types/components/Reactions/MessageReactionsDetail.d.ts.map +1 -1
  1096. package/dist/types/components/Reactions/ReactionSelector.d.ts.map +1 -1
  1097. package/dist/types/components/Reactions/ReactionSelectorWithButton.d.ts +0 -5
  1098. package/dist/types/components/Reactions/ReactionSelectorWithButton.d.ts.map +1 -1
  1099. package/dist/types/components/Reactions/hooks/useFetchReactions.d.ts +2 -2
  1100. package/dist/types/components/Reactions/hooks/useFetchReactions.d.ts.map +1 -1
  1101. package/dist/types/components/Reactions/hooks/useProcessReactions.d.ts +1 -3
  1102. package/dist/types/components/Reactions/hooks/useProcessReactions.d.ts.map +1 -1
  1103. package/dist/types/components/Search/SearchBar/SearchBar.d.ts.map +1 -1
  1104. package/dist/types/components/Search/SearchContext.d.ts.map +1 -1
  1105. package/dist/types/components/Search/SearchResults/SearchResultItem.d.ts +20 -6
  1106. package/dist/types/components/Search/SearchResults/SearchResultItem.d.ts.map +1 -1
  1107. package/dist/types/components/Search/SearchResults/SearchResultsHeader.d.ts.map +1 -1
  1108. package/dist/types/components/Search/SearchResults/SearchSourceResultsEmpty.d.ts.map +1 -1
  1109. package/dist/types/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.d.ts.map +1 -1
  1110. package/dist/types/components/Search/SearchSourceResultsContext.d.ts.map +1 -1
  1111. package/dist/types/components/Search/hooks/index.d.ts +0 -1
  1112. package/dist/types/components/Search/hooks/index.d.ts.map +1 -1
  1113. package/dist/types/components/SummarizedMessagePreview/SummarizedMessagePreview.d.ts +6 -0
  1114. package/dist/types/components/SummarizedMessagePreview/SummarizedMessagePreview.d.ts.map +1 -1
  1115. package/dist/types/components/SummarizedMessagePreview/hooks/useLatestMessagePreview.d.ts.map +1 -1
  1116. package/dist/types/components/TextareaComposer/SuggestionList/CommandItem.d.ts +2 -2
  1117. package/dist/types/components/TextareaComposer/SuggestionList/CommandItem.d.ts.map +1 -1
  1118. package/dist/types/components/TextareaComposer/SuggestionList/MentionItem/BroadcastMentionItem.d.ts.map +1 -1
  1119. package/dist/types/components/TextareaComposer/SuggestionList/MentionItem/RoleItem.d.ts.map +1 -1
  1120. package/dist/types/components/TextareaComposer/SuggestionList/MentionItem/UserGroupItem.d.ts.map +1 -1
  1121. package/dist/types/components/TextareaComposer/SuggestionList/SuggestionList.d.ts.map +1 -1
  1122. package/dist/types/components/TextareaComposer/TextareaComposer.d.ts.map +1 -1
  1123. package/dist/types/components/TextareaComposer/hooks/useTextareaPlaceholder.d.ts.map +1 -1
  1124. package/dist/types/components/Thread/Thread.d.ts +31 -27
  1125. package/dist/types/components/Thread/Thread.d.ts.map +1 -1
  1126. package/dist/types/components/Thread/ThreadHead.d.ts.map +1 -1
  1127. package/dist/types/components/Thread/ThreadHeader.d.ts +13 -6
  1128. package/dist/types/components/Thread/ThreadHeader.d.ts.map +1 -1
  1129. package/dist/types/components/Thread/ThreadStart.d.ts.map +1 -1
  1130. package/dist/types/components/Thread/index.d.ts +0 -1
  1131. package/dist/types/components/Thread/index.d.ts.map +1 -1
  1132. package/dist/types/components/Threads/ThreadContext.d.ts.map +1 -1
  1133. package/dist/types/components/Threads/ThreadList/ThreadList.d.ts.map +1 -1
  1134. package/dist/types/components/Threads/ThreadList/ThreadListEmptyPlaceholder.d.ts.map +1 -1
  1135. package/dist/types/components/Threads/ThreadList/ThreadListHeader.d.ts.map +1 -1
  1136. package/dist/types/components/Threads/ThreadList/ThreadListItemUI.d.ts.map +1 -1
  1137. package/dist/types/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.d.ts.map +1 -1
  1138. package/dist/types/components/Threads/ThreadList/useThreadHighlighting.d.ts +15 -0
  1139. package/dist/types/components/Threads/ThreadList/useThreadHighlighting.d.ts.map +1 -0
  1140. package/dist/types/components/Threads/ThreadList/utils.a11y.d.ts.map +1 -1
  1141. package/dist/types/components/Threads/hooks/useCloseThread.d.ts +9 -0
  1142. package/dist/types/components/Threads/hooks/useCloseThread.d.ts.map +1 -0
  1143. package/dist/types/components/Threads/index.d.ts +1 -0
  1144. package/dist/types/components/Threads/index.d.ts.map +1 -1
  1145. package/dist/types/components/TypingIndicator/TypingIndicator.d.ts +4 -5
  1146. package/dist/types/components/TypingIndicator/TypingIndicator.d.ts.map +1 -1
  1147. package/dist/types/components/TypingIndicator/TypingIndicatorHeader.d.ts +1 -1
  1148. package/dist/types/components/TypingIndicator/TypingIndicatorHeader.d.ts.map +1 -1
  1149. package/dist/types/components/TypingIndicator/hooks/useDebouncedTypingActive.d.ts +2 -2
  1150. package/dist/types/components/TypingIndicator/hooks/useDebouncedTypingActive.d.ts.map +1 -1
  1151. package/dist/types/components/TypingIndicator/utils/getTypingStatusMessage.d.ts +2 -3
  1152. package/dist/types/components/TypingIndicator/utils/getTypingStatusMessage.d.ts.map +1 -1
  1153. package/dist/types/components/VideoPlayer/VideoThumbnail.d.ts.map +1 -1
  1154. package/dist/types/components/index.d.ts +0 -2
  1155. package/dist/types/components/index.d.ts.map +1 -1
  1156. package/dist/types/context/AttachmentContext.d.ts +19 -0
  1157. package/dist/types/context/AttachmentContext.d.ts.map +1 -0
  1158. package/dist/types/context/ChannelInstanceContext.d.ts +16 -0
  1159. package/dist/types/context/ChannelInstanceContext.d.ts.map +1 -0
  1160. package/dist/types/context/ChannelListContext.d.ts +9 -18
  1161. package/dist/types/context/ChannelListContext.d.ts.map +1 -1
  1162. package/dist/types/context/ChatContext.d.ts +10 -23
  1163. package/dist/types/context/ChatContext.d.ts.map +1 -1
  1164. package/dist/types/context/ComponentContext.d.ts +30 -23
  1165. package/dist/types/context/ComponentContext.d.ts.map +1 -1
  1166. package/dist/types/context/DialogManagerContext.d.ts.map +1 -1
  1167. package/dist/types/context/MessageBounceContext.d.ts +1 -1
  1168. package/dist/types/context/MessageBounceContext.d.ts.map +1 -1
  1169. package/dist/types/context/MessageComposerContext.d.ts +7 -2
  1170. package/dist/types/context/MessageComposerContext.d.ts.map +1 -1
  1171. package/dist/types/context/MessageComposerControllerContext.d.ts +13 -0
  1172. package/dist/types/context/MessageComposerControllerContext.d.ts.map +1 -0
  1173. package/dist/types/context/MessageContext.d.ts +8 -21
  1174. package/dist/types/context/MessageContext.d.ts.map +1 -1
  1175. package/dist/types/context/MessageListContext.d.ts +2 -2
  1176. package/dist/types/context/MessageListContext.d.ts.map +1 -1
  1177. package/dist/types/context/MessageTranslationViewContext.d.ts.map +1 -1
  1178. package/dist/types/context/ModalContext.d.ts +4 -0
  1179. package/dist/types/context/ModalContext.d.ts.map +1 -1
  1180. package/dist/types/context/PollContext.d.ts.map +1 -1
  1181. package/dist/types/context/TranslationContext.d.ts +21 -11
  1182. package/dist/types/context/TranslationContext.d.ts.map +1 -1
  1183. package/dist/types/context/VirtualizedMessageListContext.d.ts.map +1 -1
  1184. package/dist/types/context/WithComponents.d.ts.map +1 -1
  1185. package/dist/types/context/WorkspaceNavigationContext.d.ts +128 -0
  1186. package/dist/types/context/WorkspaceNavigationContext.d.ts.map +1 -0
  1187. package/dist/types/context/index.d.ts +6 -4
  1188. package/dist/types/context/index.d.ts.map +1 -1
  1189. package/dist/types/context/requireContext.d.ts +10 -0
  1190. package/dist/types/context/requireContext.d.ts.map +1 -0
  1191. package/dist/types/context/useChannel.d.ts +3 -0
  1192. package/dist/types/context/useChannel.d.ts.map +1 -0
  1193. package/dist/types/context/useComponentContextIcons.d.ts +4 -6
  1194. package/dist/types/context/useComponentContextIcons.d.ts.map +1 -1
  1195. package/dist/types/hooks/index.d.ts +3 -0
  1196. package/dist/types/hooks/index.d.ts.map +1 -0
  1197. package/dist/types/hooks/useIsDmChannel.d.ts +13 -0
  1198. package/dist/types/hooks/useIsDmChannel.d.ts.map +1 -0
  1199. package/dist/types/hooks/useMessagePaginator.d.ts +6 -0
  1200. package/dist/types/hooks/useMessagePaginator.d.ts.map +1 -0
  1201. package/dist/types/i18n/Streami18n.d.ts +48 -848
  1202. package/dist/types/i18n/Streami18n.d.ts.map +1 -1
  1203. package/dist/types/i18n/TranslationBuilder/index.d.ts +6 -1
  1204. package/dist/types/i18n/TranslationBuilder/index.d.ts.map +1 -1
  1205. package/dist/types/i18n/TranslationBuilder/notifications/NotificationTranslationTopic.d.ts.map +1 -1
  1206. package/dist/types/i18n/TranslationBuilder/notifications/translators.d.ts.map +1 -1
  1207. package/dist/types/i18n/TranslationBuilder/notifications/translatorsByNotificationType.d.ts +3 -1
  1208. package/dist/types/i18n/TranslationBuilder/notifications/translatorsByNotificationType.d.ts.map +1 -1
  1209. package/dist/types/i18n/index.d.ts +2 -2
  1210. package/dist/types/i18n/index.d.ts.map +1 -1
  1211. package/dist/types/i18n/keys.d.ts +583 -0
  1212. package/dist/types/i18n/keys.d.ts.map +1 -0
  1213. package/dist/types/i18n/runtimeDefaults.d.ts +37 -0
  1214. package/dist/types/i18n/runtimeDefaults.d.ts.map +1 -0
  1215. package/dist/types/i18n/types.d.ts +34 -104
  1216. package/dist/types/i18n/types.d.ts.map +1 -1
  1217. package/dist/types/i18n/useStreami18n.d.ts +19 -0
  1218. package/dist/types/i18n/useStreami18n.d.ts.map +1 -0
  1219. package/dist/types/i18n/utils.d.ts +18 -14
  1220. package/dist/types/i18n/utils.d.ts.map +1 -1
  1221. package/dist/types/plugins/ChannelDetail/AvatarWithChannelDetail.d.ts.map +1 -1
  1222. package/dist/types/plugins/ChannelDetail/ChannelDetail.d.ts.map +1 -1
  1223. package/dist/types/plugins/ChannelDetail/ChannelDetailEmptyList.d.ts.map +1 -1
  1224. package/dist/types/plugins/ChannelDetail/ChannelDetailSearchInput.d.ts.map +1 -1
  1225. package/dist/types/plugins/ChannelDetail/SectionNavigator/SectionNavigatorHeader.d.ts.map +1 -1
  1226. package/dist/types/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesEmptyList.d.ts.map +1 -1
  1227. package/dist/types/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.d.ts.map +1 -1
  1228. package/dist/types/plugins/ChannelDetail/Views/ChannelFilesView/ChannelFilesView.utils.d.ts.map +1 -1
  1229. package/dist/types/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementActions.defaults.d.ts.map +1 -1
  1230. package/dist/types/plugins/ChannelDetail/Views/ChannelManagementView/ChannelManagementView.d.ts.map +1 -1
  1231. package/dist/types/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaEmptyList.d.ts.map +1 -1
  1232. package/dist/types/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.d.ts.map +1 -1
  1233. package/dist/types/plugins/ChannelDetail/Views/ChannelMediaView/ChannelMediaView.utils.d.ts.map +1 -1
  1234. package/dist/types/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberActions.defaults.d.ts.map +1 -1
  1235. package/dist/types/plugins/ChannelDetail/Views/ChannelMemberDetailView/ChannelMemberDetail.d.ts.map +1 -1
  1236. package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersAddView.d.ts.map +1 -1
  1237. package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersBrowseView.d.ts.map +1 -1
  1238. package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersHeaderActions.defaults.d.ts.map +1 -1
  1239. package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.d.ts.map +1 -1
  1240. package/dist/types/plugins/ChannelDetail/Views/ChannelMembersView/ChannelMembersView.utils.d.ts.map +1 -1
  1241. package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesEmptyList.d.ts.map +1 -1
  1242. package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/PinnedMessagesView.d.ts.map +1 -1
  1243. package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.d.ts +5 -1
  1244. package/dist/types/plugins/ChannelDetail/Views/PinnedMessagesView/usePinnedMessagesCount.d.ts.map +1 -1
  1245. package/dist/types/plugins/Emojis/EmojiPicker.d.ts +0 -4
  1246. package/dist/types/plugins/Emojis/EmojiPicker.d.ts.map +1 -1
  1247. package/dist/types/plugins/SlotGeometry/SlotGeometry.d.ts +72 -0
  1248. package/dist/types/plugins/SlotGeometry/SlotGeometry.d.ts.map +1 -0
  1249. package/dist/types/plugins/SlotGeometry/index.d.ts +3 -0
  1250. package/dist/types/plugins/SlotGeometry/index.d.ts.map +1 -0
  1251. package/dist/types/plugins/SlotLayout/ChannelSlot.d.ts +24 -0
  1252. package/dist/types/plugins/SlotLayout/ChannelSlot.d.ts.map +1 -0
  1253. package/dist/types/plugins/SlotLayout/ChatView.a11y.utility.d.ts.map +1 -0
  1254. package/dist/types/plugins/SlotLayout/ChatView.d.ts +113 -0
  1255. package/dist/types/plugins/SlotLayout/ChatView.d.ts.map +1 -0
  1256. package/dist/types/plugins/SlotLayout/ChatViewNavigationContext.d.ts +111 -0
  1257. package/dist/types/plugins/SlotLayout/ChatViewNavigationContext.d.ts.map +1 -0
  1258. package/dist/types/plugins/SlotLayout/ThreadListSlot.d.ts +8 -0
  1259. package/dist/types/plugins/SlotLayout/ThreadListSlot.d.ts.map +1 -0
  1260. package/dist/types/plugins/SlotLayout/ThreadSlot.d.ts +10 -0
  1261. package/dist/types/plugins/SlotLayout/ThreadSlot.d.ts.map +1 -0
  1262. package/dist/types/plugins/SlotLayout/hooks/index.d.ts +3 -0
  1263. package/dist/types/plugins/SlotLayout/hooks/index.d.ts.map +1 -0
  1264. package/dist/types/plugins/SlotLayout/hooks/useLayoutViewState.d.ts +5 -0
  1265. package/dist/types/plugins/SlotLayout/hooks/useLayoutViewState.d.ts.map +1 -0
  1266. package/dist/types/plugins/SlotLayout/hooks/useSlotEntity.d.ts +162 -0
  1267. package/dist/types/plugins/SlotLayout/hooks/useSlotEntity.d.ts.map +1 -0
  1268. package/dist/types/plugins/SlotLayout/index.d.ts +12 -0
  1269. package/dist/types/plugins/SlotLayout/index.d.ts.map +1 -0
  1270. package/dist/types/plugins/SlotLayout/layout/Slot.d.ts +8 -0
  1271. package/dist/types/plugins/SlotLayout/layout/Slot.d.ts.map +1 -0
  1272. package/dist/types/plugins/SlotLayout/layout/WorkspaceLayout.d.ts +11 -0
  1273. package/dist/types/plugins/SlotLayout/layout/WorkspaceLayout.d.ts.map +1 -0
  1274. package/dist/types/plugins/SlotLayout/layoutController/LayoutController.d.ts +25 -0
  1275. package/dist/types/plugins/SlotLayout/layoutController/LayoutController.d.ts.map +1 -0
  1276. package/dist/types/plugins/SlotLayout/layoutController/layoutControllerTypes.d.ts +121 -0
  1277. package/dist/types/plugins/SlotLayout/layoutController/layoutControllerTypes.d.ts.map +1 -0
  1278. package/dist/types/plugins/SlotLayout/layoutController/serialization.d.ts +6 -0
  1279. package/dist/types/plugins/SlotLayout/layoutController/serialization.d.ts.map +1 -0
  1280. package/dist/types/plugins/SlotLayout/slotBinding.d.ts +85 -0
  1281. package/dist/types/plugins/SlotLayout/slotBinding.d.ts.map +1 -0
  1282. package/dist/types/plugins/SlotLayout/slotRegistry.d.ts +60 -0
  1283. package/dist/types/plugins/SlotLayout/slotRegistry.d.ts.map +1 -0
  1284. package/dist/types/plugins/SlotLayout/workspaceNavigationAdapter.d.ts +26 -0
  1285. package/dist/types/plugins/SlotLayout/workspaceNavigationAdapter.d.ts.map +1 -0
  1286. package/dist/types/store/hooks/useStateStore.d.ts +1 -1
  1287. package/dist/types/store/hooks/useStateStore.d.ts.map +1 -1
  1288. package/dist/types/types/index.d.ts +0 -1
  1289. package/dist/types/types/index.d.ts.map +1 -1
  1290. package/dist/types/types/types.d.ts +0 -10
  1291. package/dist/types/types/types.d.ts.map +1 -1
  1292. package/dist/types/utils/getChannel.d.ts +2 -2
  1293. package/dist/types/utils/getChannel.d.ts.map +1 -1
  1294. package/dist/types/utils/useStableCallback.d.ts +1 -1
  1295. package/package.json +34 -16
  1296. package/dist/cjs/NotificationList.4ce251ea.js +0 -9552
  1297. package/dist/cjs/NotificationList.4ce251ea.js.map +0 -1
  1298. package/dist/cjs/useChannelHeaderOnlineStatus.64c443f5.js +0 -961
  1299. package/dist/cjs/useChannelHeaderOnlineStatus.64c443f5.js.map +0 -1
  1300. package/dist/cjs/useInertWhenHidden.1a2a6a2b.js +0 -6573
  1301. package/dist/cjs/useInertWhenHidden.1a2a6a2b.js.map +0 -1
  1302. package/dist/es/components/Channel/channelState.mjs +0 -195
  1303. package/dist/es/components/Channel/channelState.mjs.map +0 -1
  1304. package/dist/es/components/Channel/hooks/useCreateChannelStateContext.mjs +0 -86
  1305. package/dist/es/components/Channel/hooks/useCreateChannelStateContext.mjs.map +0 -1
  1306. package/dist/es/components/Channel/hooks/useCreateTypingContext.mjs +0 -10
  1307. package/dist/es/components/Channel/hooks/useCreateTypingContext.mjs.map +0 -1
  1308. package/dist/es/components/Channel/hooks/useEditMessageHandler.mjs +0 -13
  1309. package/dist/es/components/Channel/hooks/useEditMessageHandler.mjs.map +0 -1
  1310. package/dist/es/components/Channel/hooks/useIsMounted.mjs +0 -16
  1311. package/dist/es/components/Channel/hooks/useIsMounted.mjs.map +0 -1
  1312. package/dist/es/components/Channel/hooks/useMentionsHandlers.mjs +0 -18
  1313. package/dist/es/components/Channel/hooks/useMentionsHandlers.mjs.map +0 -1
  1314. package/dist/es/components/Channel/utils.mjs +0 -156
  1315. package/dist/es/components/Channel/utils.mjs.map +0 -1
  1316. package/dist/es/components/ChannelList/ChannelListUI.mjs +0 -35
  1317. package/dist/es/components/ChannelList/ChannelListUI.mjs.map +0 -1
  1318. package/dist/es/components/ChannelList/hooks/useChannelListShape.mjs +0 -310
  1319. package/dist/es/components/ChannelList/hooks/useChannelListShape.mjs.map +0 -1
  1320. package/dist/es/components/ChannelList/hooks/useConnectionRecoveredListener.mjs +0 -19
  1321. package/dist/es/components/ChannelList/hooks/useConnectionRecoveredListener.mjs.map +0 -1
  1322. package/dist/es/components/ChannelList/hooks/usePaginatedChannels.mjs +0 -110
  1323. package/dist/es/components/ChannelList/hooks/usePaginatedChannels.mjs.map +0 -1
  1324. package/dist/es/components/ChannelList/utils.mjs +0 -86
  1325. package/dist/es/components/ChannelList/utils.mjs.map +0 -1
  1326. package/dist/es/components/Chat/hooks/useChannelsQueryState.mjs +0 -16
  1327. package/dist/es/components/Chat/hooks/useChannelsQueryState.mjs.map +0 -1
  1328. package/dist/es/components/ChatView/ChatView.a11y.utility.mjs.map +0 -1
  1329. package/dist/es/components/ChatView/ChatView.mjs +0 -224
  1330. package/dist/es/components/ChatView/ChatView.mjs.map +0 -1
  1331. package/dist/es/components/MessageComposer/hooks/useSubmitHandler.mjs +0 -98
  1332. package/dist/es/components/MessageComposer/hooks/useSubmitHandler.mjs.map +0 -1
  1333. package/dist/es/components/MessageList/hooks/useReducedMotionPreference.mjs +0 -23
  1334. package/dist/es/components/MessageList/hooks/useReducedMotionPreference.mjs.map +0 -1
  1335. package/dist/es/components/Search/hooks/useSearchFocusedMessage.mjs +0 -13
  1336. package/dist/es/components/Search/hooks/useSearchFocusedMessage.mjs.map +0 -1
  1337. package/dist/es/components/Thread/LegacyThreadContext.mjs +0 -8
  1338. package/dist/es/components/Thread/LegacyThreadContext.mjs.map +0 -1
  1339. package/dist/es/components/UtilityComponents/NullComponent.mjs +0 -6
  1340. package/dist/es/components/UtilityComponents/NullComponent.mjs.map +0 -1
  1341. package/dist/es/components/Window/Window.mjs +0 -21
  1342. package/dist/es/components/Window/Window.mjs.map +0 -1
  1343. package/dist/es/context/ChannelActionContext.mjs +0 -20
  1344. package/dist/es/context/ChannelActionContext.mjs.map +0 -1
  1345. package/dist/es/context/ChannelStateContext.mjs +0 -24
  1346. package/dist/es/context/ChannelStateContext.mjs.map +0 -1
  1347. package/dist/es/context/TypingContext.mjs +0 -20
  1348. package/dist/es/context/TypingContext.mjs.map +0 -1
  1349. package/dist/es/i18n/TranslationBuilder/TranslationBuilder.mjs +0 -86
  1350. package/dist/es/i18n/TranslationBuilder/TranslationBuilder.mjs.map +0 -1
  1351. package/dist/es/i18n/de.mjs +0 -782
  1352. package/dist/es/i18n/de.mjs.map +0 -1
  1353. package/dist/es/i18n/en.mjs +0 -779
  1354. package/dist/es/i18n/en.mjs.map +0 -1
  1355. package/dist/es/i18n/es.mjs +0 -821
  1356. package/dist/es/i18n/es.mjs.map +0 -1
  1357. package/dist/es/i18n/fr.mjs +0 -822
  1358. package/dist/es/i18n/fr.mjs.map +0 -1
  1359. package/dist/es/i18n/hi.mjs +0 -786
  1360. package/dist/es/i18n/hi.mjs.map +0 -1
  1361. package/dist/es/i18n/it.mjs +0 -821
  1362. package/dist/es/i18n/it.mjs.map +0 -1
  1363. package/dist/es/i18n/ja.mjs +0 -760
  1364. package/dist/es/i18n/ja.mjs.map +0 -1
  1365. package/dist/es/i18n/ko.mjs +0 -760
  1366. package/dist/es/i18n/ko.mjs.map +0 -1
  1367. package/dist/es/i18n/nl.mjs +0 -786
  1368. package/dist/es/i18n/nl.mjs.map +0 -1
  1369. package/dist/es/i18n/pt.mjs +0 -819
  1370. package/dist/es/i18n/pt.mjs.map +0 -1
  1371. package/dist/es/i18n/ru.mjs +0 -868
  1372. package/dist/es/i18n/ru.mjs.map +0 -1
  1373. package/dist/es/i18n/tr.mjs +0 -781
  1374. package/dist/es/i18n/tr.mjs.map +0 -1
  1375. package/dist/es/utils/getChannelConfig.mjs +0 -11
  1376. package/dist/es/utils/getChannelConfig.mjs.map +0 -1
  1377. package/dist/types/components/Channel/channelState.d.ts +0 -90
  1378. package/dist/types/components/Channel/channelState.d.ts.map +0 -1
  1379. package/dist/types/components/Channel/hooks/useCreateChannelStateContext.d.ts +0 -6
  1380. package/dist/types/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +0 -1
  1381. package/dist/types/components/Channel/hooks/useCreateTypingContext.d.ts +0 -3
  1382. package/dist/types/components/Channel/hooks/useCreateTypingContext.d.ts.map +0 -1
  1383. package/dist/types/components/Channel/hooks/useEditMessageHandler.d.ts +0 -5
  1384. package/dist/types/components/Channel/hooks/useEditMessageHandler.d.ts.map +0 -1
  1385. package/dist/types/components/Channel/hooks/useMentionsHandlers.d.ts +0 -10
  1386. package/dist/types/components/Channel/hooks/useMentionsHandlers.d.ts.map +0 -1
  1387. package/dist/types/components/Channel/utils.d.ts +0 -55
  1388. package/dist/types/components/Channel/utils.d.ts.map +0 -1
  1389. package/dist/types/components/ChannelList/ChannelListUI.d.ts +0 -18
  1390. package/dist/types/components/ChannelList/ChannelListUI.d.ts.map +0 -1
  1391. package/dist/types/components/ChannelList/hooks/useChannelListShape.d.ts +0 -61
  1392. package/dist/types/components/ChannelList/hooks/useChannelListShape.d.ts.map +0 -1
  1393. package/dist/types/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts +0 -2
  1394. package/dist/types/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts.map +0 -1
  1395. package/dist/types/components/ChannelList/hooks/usePaginatedChannels.d.ts +0 -29
  1396. package/dist/types/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +0 -1
  1397. package/dist/types/components/ChannelList/utils.d.ts +0 -46
  1398. package/dist/types/components/ChannelList/utils.d.ts.map +0 -1
  1399. package/dist/types/components/Chat/hooks/useChannelsQueryState.d.ts +0 -12
  1400. package/dist/types/components/Chat/hooks/useChannelsQueryState.d.ts.map +0 -1
  1401. package/dist/types/components/ChatView/ChatView.a11y.utility.d.ts.map +0 -1
  1402. package/dist/types/components/ChatView/ChatView.d.ts +0 -59
  1403. package/dist/types/components/ChatView/ChatView.d.ts.map +0 -1
  1404. package/dist/types/components/ChatView/index.d.ts +0 -2
  1405. package/dist/types/components/ChatView/index.d.ts.map +0 -1
  1406. package/dist/types/components/MessageComposer/hooks/useSubmitHandler.d.ts +0 -5
  1407. package/dist/types/components/MessageComposer/hooks/useSubmitHandler.d.ts.map +0 -1
  1408. package/dist/types/components/Search/hooks/useSearchFocusedMessage.d.ts +0 -2
  1409. package/dist/types/components/Search/hooks/useSearchFocusedMessage.d.ts.map +0 -1
  1410. package/dist/types/components/Thread/LegacyThreadContext.d.ts +0 -9
  1411. package/dist/types/components/Thread/LegacyThreadContext.d.ts.map +0 -1
  1412. package/dist/types/components/Window/Window.d.ts +0 -13
  1413. package/dist/types/components/Window/Window.d.ts.map +0 -1
  1414. package/dist/types/components/Window/index.d.ts +0 -2
  1415. package/dist/types/components/Window/index.d.ts.map +0 -1
  1416. package/dist/types/context/ChannelActionContext.d.ts +0 -46
  1417. package/dist/types/context/ChannelActionContext.d.ts.map +0 -1
  1418. package/dist/types/context/ChannelStateContext.d.ts +0 -51
  1419. package/dist/types/context/ChannelStateContext.d.ts.map +0 -1
  1420. package/dist/types/context/TypingContext.d.ts +0 -12
  1421. package/dist/types/context/TypingContext.d.ts.map +0 -1
  1422. package/dist/types/i18n/TranslationBuilder/TranslationBuilder.d.ts +0 -36
  1423. package/dist/types/i18n/TranslationBuilder/TranslationBuilder.d.ts.map +0 -1
  1424. package/dist/types/i18n/translations.d.ts +0 -14
  1425. package/dist/types/i18n/translations.d.ts.map +0 -1
  1426. package/dist/types/utils/getChannelConfig.d.ts +0 -8
  1427. package/dist/types/utils/getChannelConfig.d.ts.map +0 -1
  1428. /package/dist/types/{components/ChatView → plugins/SlotLayout}/ChatView.a11y.utility.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenu.mjs","names":[],"sources":["../../../../../src/components/Dialog/components/ContextMenu.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport React, {\n type ComponentProps,\n type ComponentPropsWithoutRef,\n type ComponentType,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { type AvatarProps, Avatar as DefaultAvatar } from '../../Avatar';\nimport type { PopperLikePlacement } from '../hooks';\nimport { useDialogIsOpen, useDialogOnNearestManager } from '../hooks';\nimport type { DialogAnchorProps } from '../service/DialogAnchor';\nimport { DialogAnchor, useDialogAnchor } from '../service/DialogAnchor';\nimport {\n useComponentContext,\n useComponentContextIcons,\n useTranslationContext,\n} from '../../../context';\nimport { createRovingFocusKeyDownHandler } from '../../../a11y/a11yUtils';\nimport { VisuallyHidden } from '../../VisuallyHidden';\nimport { useStableId } from '../../UtilityComponents/useStableId';\n\n/**\n * ContextMenu module\n *\n * What this file provides\n * - Primitives for contextual action UIs:\n * `ContextMenu`, `ContextMenuContent`, `ContextMenuButton`, `ContextMenuHeader`,\n * `ContextMenuBody`, `ContextMenuBackButton`, and user/emoji button variants.\n * - A small runtime context (`useContextMenuContext`) used by menu items to:\n * - close the current menu (`closeMenu`)\n * - open a submenu (`openSubmenu`)\n * - return to parent level (`returnToParentMenu`)\n *\n * Rendering modes\n * - Anchored mode (most common): pass `id` and `referenceElement`.\n * The component renders inside `DialogAnchor` and uses dialog manager state.\n * - Inline mode: omit anchor props and render as a plain contextual list.\n * - Outside click dismissal can be overridden per menu via `closeOnClickOutside`;\n * otherwise manager default is used.\n *\n * Submenu model\n * - Submenus are represented as a stack of menu levels.\n * - Each level can define `Header`, `Submenu`, `items`, `ItemsWrapper`,\n * and `menuClassName`.\n * - Opening submenu pushes a level to the stack; going back pops one level.\n * - When anchored menu closes, stack resets to root to avoid stale submenu state\n * on next open.\n *\n * Animation model\n * - Root menu open/close is handled by `DialogAnchor` transition timing.\n * - `ContextMenu` defaults `closeTransitionMs` to `130` so close animations can be visible.\n * - `DialogAnchor` marks rendered content with `data-str-chat-dialog-state`:\n * - `open` while visible\n * - `closing` during delayed unmount window (`closeTransitionMs`)\n * - Context-menu closing keyframes in `ContextMenu.scss` target\n * `[data-str-chat-dialog-state='closing']` + placement selectors.\n * - Level-to-level transitions are directional:\n * - forward: parent -> submenu\n * - backward: submenu -> parent\n * - Direction is tracked in `ContextMenu` and passed to `ContextMenuContent`.\n * - `ContextMenuContent` bumps an internal key for `ContextMenuBody` so React\n * remounts the body and CSS enter animation reliably restarts on each level change.\n * - Initial/root menu render does not apply submenu forward/backward classes;\n * directional animation classes are used only for submenu transitions.\n * - `enableAnimations` can disable content animations through data attributes/CSS.\n * - `submenuTransitionDurationMs` controls how long directional transition state is kept.\n *\n * Submenu popover behavior (`ContextMenuButton` with `Submenu`)\n * - Submenu can be rendered by passing `Submenu` (and optional placement/container props).\n * - Default submenu roll axis is `x` (override with `submenuRollAxis`).\n * - Hover/focus management uses a \"keep open\" ref flag plus lazy close timeout to avoid\n * accidental submenu dismissal when moving pointer/focus between parent and submenu.\n *\n * Customization via `ComponentContext`\n * - `ComponentContext.ContextMenu` replaces the whole menu component at SDK call sites.\n * - `ComponentContext.ContextMenuContent` replaces content-level behavior while preserving\n * default anchoring/dialog integration from `ContextMenu`.\n * - Built-in call sites (message actions, channel list action buttons, attachment selector,\n * suggestion list) resolve `ContextMenu` from `ComponentContext` with fallback to default.\n */\nexport type BaseContextMenuButtonProps = {\n details?: ReactNode;\n hasSubMenu?: boolean;\n label?: ReactNode;\n Icon?: ComponentType<ComponentProps<'svg'>>;\n /**\n * @deprecated Use the `icons.IconChevronRight` slot on `ComponentContext` (via `<WithComponents overrides={{ icons: { IconChevronRight: ... } }}>`) instead.\n * Passing this prop still wins over the context slot for backwards compatibility.\n */\n SubmenuIcon?: ComponentType<ComponentProps<'svg'>>;\n variant?: 'destructive';\n} & ComponentProps<'button'>;\n\nexport const BaseContextMenuButton = ({\n children,\n className,\n details,\n hasSubMenu,\n Icon,\n label,\n role = 'menuitem',\n SubmenuIcon,\n variant,\n ...props\n}: BaseContextMenuButtonProps) => {\n const { IconChevronRight } = useComponentContextIcons();\n const ResolvedSubmenuIcon = SubmenuIcon ?? IconChevronRight;\n return (\n <button\n {...props}\n className={clsx(\n 'str-chat__context-menu__button',\n {\n 'str-chat__context-menu__button--with-submenu': hasSubMenu,\n [`str-chat__context-menu__button--${variant}`]: typeof variant === 'string',\n },\n className,\n )}\n role={role}\n type='button'\n >\n {Icon && <Icon className='str-chat__context-menu__button__icon' />}\n {label ? (\n <>\n <div className='str-chat__context-menu__button__label'>{label}</div>\n <div className='str-chat__context-menu__button__details'>{details}</div>\n </>\n ) : (\n <div className='str-chat__context-menu__button__label'>{children}</div>\n )}\n {!!hasSubMenu && (\n <ResolvedSubmenuIcon className='str-chat__context-menu__button__submenu-icon' />\n )}\n </button>\n );\n};\n\nexport type UserContextMenuButtonProps = Pick<AvatarProps, 'imageUrl' | 'userName'> &\n ComponentProps<'button'>;\n\nexport const UserContextMenuButton = ({\n children,\n className,\n imageUrl,\n role = 'menuitem',\n userName,\n ...props\n}: UserContextMenuButtonProps) => {\n const { Avatar = DefaultAvatar } = useComponentContext();\n return (\n <button\n {...props}\n className={clsx(\n 'str-chat__context-menu__button str-chat__user-context-menu__button',\n className,\n )}\n role={role}\n type='button'\n >\n {/* The avatar is decorative here: the button already carries the user's name as its\n label, so exposing the avatar (its fallback initials, title, and role=\"button\")\n to assistive tech only adds noise to the option's accessible name. */}\n <Avatar aria-hidden imageUrl={imageUrl} size='sm' userName={userName} />\n <div className='str-chat__context-menu__button__label'>{children ?? userName}</div>\n </button>\n );\n};\n\nexport type EmojiContextMenuButtonProps = { emoji: string } & Pick<\n BaseContextMenuButtonProps,\n 'label'\n> &\n ComponentProps<'button'>;\n\nexport const EmojiContextMenuButton = ({\n children,\n className,\n emoji,\n label,\n role = 'menuitem',\n ...props\n}: EmojiContextMenuButtonProps) => (\n <button\n {...props}\n className={clsx(\n 'str-chat__context-menu__button str-chat__emoji-context-menu__button',\n className,\n )}\n role={role}\n type='button'\n >\n <span className='str-chat__context-menu__button__emoji str-chat__emoji-item--entity'>\n {emoji}\n </span>\n <div className='str-chat__context-menu__button__label'>{children ?? label}</div>\n </button>\n);\n\ntype ButtonWithSubmenuProps = {\n Submenu: ComponentType;\n submenuContainerProps?: ComponentProps<'div'>;\n submenuPlacement?: PopperLikePlacement;\n submenuRollAxis?: 'x' | 'y';\n};\n\nconst ContextMenuButtonWithSubmenu = ({\n children,\n className,\n Submenu,\n submenuContainerProps,\n submenuPlacement = 'right-start',\n submenuRollAxis = 'x',\n ...buttonProps\n}: BaseContextMenuButtonProps & ButtonWithSubmenuProps) => {\n const { className: submenuClassName, ...submenuContainerRestProps } =\n submenuContainerProps ?? {};\n const { registerDialogSubmenu, unregisterDialogSubmenu } = useContextMenuContext();\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const [dialogContainer, setDialogContainer] = useState<HTMLDivElement | null>(null);\n const keepSubmenuOpenFlag = useRef(false);\n const dialogCloseTimeout = useRef<NodeJS.Timeout | null>(null);\n const dialogId = useMemo(() => `submenu-${Math.random().toString(36).slice(2)}`, []);\n const { dialog, dialogManager } = useDialogOnNearestManager({ id: dialogId });\n const dialogIsOpen = useDialogIsOpen(dialogId, dialogManager?.id);\n\n useEffect(() => {\n if (!dialogIsOpen) return;\n registerDialogSubmenu();\n return () => unregisterDialogSubmenu();\n }, [dialogIsOpen, registerDialogSubmenu, unregisterDialogSubmenu]);\n const {\n placement: chosenPlacement,\n setPopperElement,\n styles,\n } = useDialogAnchor<HTMLDivElement>({\n offset: 8,\n open: dialogIsOpen,\n placement: submenuPlacement,\n referenceElement: buttonRef.current,\n });\n\n const closeDialogLazily = useCallback(() => {\n if (dialogCloseTimeout.current) clearTimeout(dialogCloseTimeout.current);\n dialogCloseTimeout.current = setTimeout(() => {\n if (keepSubmenuOpenFlag.current) return;\n dialog.close();\n }, 100);\n }, [dialog]);\n\n const keepSubmenuOpen = useCallback(() => {\n keepSubmenuOpenFlag.current = true;\n }, []);\n\n const allowToCloseSubmenu = useCallback(() => {\n keepSubmenuOpenFlag.current = false;\n }, []);\n\n const closeSubmenu = useCallback(() => {\n allowToCloseSubmenu();\n closeDialogLazily();\n }, [allowToCloseSubmenu, closeDialogLazily]);\n\n const handleClose = useCallback(\n (event: Event) => {\n const parentButton = buttonRef.current;\n if (!dialogIsOpen || !parentButton) return;\n event.stopPropagation();\n closeDialogLazily();\n parentButton.focus();\n },\n [closeDialogLazily, dialogIsOpen, buttonRef],\n );\n\n const handleFocusParentButton = () => {\n if (dialogIsOpen) return;\n dialog.open();\n keepSubmenuOpen();\n };\n\n useEffect(() => {\n const parentButton = buttonRef.current;\n if (!dialogIsOpen || !parentButton) return;\n const hideOnEscape = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n handleClose(event);\n closeSubmenu();\n };\n\n document.addEventListener('keyup', hideOnEscape, { capture: true });\n\n return () => {\n document.removeEventListener('keyup', hideOnEscape, { capture: true });\n };\n }, [dialogIsOpen, handleClose, closeSubmenu]);\n\n return (\n <>\n <BaseContextMenuButton\n aria-expanded={dialogIsOpen}\n aria-haspopup='menu'\n className={clsx(className, 'str_chat__button-with-submenu', {\n 'str_chat__button-with-submenu--submenu-open': dialogIsOpen,\n })}\n hasSubMenu\n onBlur={closeSubmenu}\n onClick={(event) => {\n event.stopPropagation();\n dialog.toggle();\n }}\n onFocus={handleFocusParentButton}\n onMouseEnter={handleFocusParentButton}\n onMouseLeave={closeSubmenu}\n {...buttonProps}\n ref={buttonRef}\n >\n {children}\n </BaseContextMenuButton>\n {dialogIsOpen && (\n <div\n className={clsx('str-chat__context-menu__submenu-container', submenuClassName)}\n data-str-chat-placement={chosenPlacement}\n data-str-chat-roll-axis={submenuRollAxis}\n onBlur={(event) => {\n const isBlurredDescendant =\n event.relatedTarget instanceof Node &&\n dialogContainer?.contains(event.relatedTarget);\n if (isBlurredDescendant) return;\n closeSubmenu();\n }}\n onFocus={keepSubmenuOpen}\n onMouseEnter={keepSubmenuOpen}\n onMouseLeave={closeSubmenu}\n ref={(element) => {\n setPopperElement(element);\n setDialogContainer(element);\n }}\n style={styles}\n tabIndex={-1}\n {...submenuContainerRestProps}\n >\n <Submenu />\n </div>\n )}\n </>\n );\n};\n\ntype ContextMenuButtonProps = BaseContextMenuButtonProps &\n Partial<ButtonWithSubmenuProps>;\n\nexport const ContextMenuButton = (props: ContextMenuButtonProps) => {\n const {\n Submenu,\n submenuContainerProps,\n submenuPlacement,\n submenuRollAxis,\n ...buttonProps\n } = props;\n if (Submenu) {\n return (\n <ContextMenuButtonWithSubmenu\n {...buttonProps}\n Submenu={Submenu}\n submenuContainerProps={submenuContainerProps}\n submenuPlacement={submenuPlacement}\n submenuRollAxis={submenuRollAxis}\n />\n );\n }\n\n return <BaseContextMenuButton {...buttonProps} />;\n};\n\nexport const ContextMenuBackButton = ({\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n children,\n className,\n role = 'menuitem',\n ...props\n}: ComponentProps<'button'>) => {\n const { t } = useTranslationContext();\n const generatedBackNavigationLabelId = useStableId();\n const generatedVisibleLabelId = useStableId();\n const resolvedAriaLabel = ariaLabel ?? t('aria/Back to parent menu button');\n const resolvedAriaLabelledBy =\n ariaLabelledBy ?? `${generatedVisibleLabelId} ${generatedBackNavigationLabelId}`;\n\n return (\n <button\n {...props}\n aria-labelledby={resolvedAriaLabelledBy}\n className={clsx('str-chat__context-menu__back-button', className)}\n role={role}\n type='button'\n >\n {!ariaLabelledBy && (\n <VisuallyHidden id={generatedBackNavigationLabelId}>\n {resolvedAriaLabel}\n </VisuallyHidden>\n )}\n <span\n className='str-chat__context-menu__back-button__content'\n id={generatedVisibleLabelId}\n >\n {children}\n </span>\n </button>\n );\n};\n\nexport const ContextMenuHeader = ({\n children,\n className,\n ...props\n}: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__context-menu__header', className)}>\n {children}\n </div>\n);\n\nexport const ContextMenuBody = ({\n children,\n className,\n ...props\n}: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__context-menu__body', className)}>\n {children}\n </div>\n);\n\nexport const ContextMenuRoot = React.forwardRef<HTMLDivElement, ComponentProps<'div'>>(\n function ContextMenuRoot({ className, role = 'menu', ...props }, ref) {\n return (\n <div\n {...props}\n className={clsx('str-chat__context-menu', className)}\n ref={ref}\n role={role}\n />\n );\n },\n);\n\nexport type ContextMenuHeaderComponent = ComponentType;\nexport type ContextMenuSubmenu = ComponentType;\n\nexport type ContextMenuOpenSubmenuParams = Omit<\n ContextMenuLevel,\n 'focusRestoreRequest' | 'items'\n> & {\n focusReturnTarget?: HTMLElement | null;\n};\n\nexport type ContextMenuItemProps = ComponentProps<'button'>;\n\nexport type ContextMenuItemComponent = ComponentType<ContextMenuItemProps>;\n\nexport const DEFAULT_CONTEXT_MENU_KEYBOARD_NAVIGATION_ITEM_SELECTOR = [\n '[role=\"menuitem\"]:not(:disabled)',\n '[role=\"menuitemradio\"]:not(:disabled)',\n '[role=\"menuitemcheckbox\"]:not(:disabled)',\n].join(',');\n\nconst isVisibleContextMenuKeyboardNavigationItem = (item: HTMLElement) => {\n // Fast path: offsetParent is null for display:none elements (and their descendants).\n // offsetHeight covers position:fixed elements which have no offsetParent.\n if (item.offsetParent !== null || item.offsetHeight > 0) return true;\n\n // In environments without layout (e.g. jsdom), offsetParent/offsetHeight are always 0/null.\n // Fall back to checking inline style and the `hidden` attribute.\n if (item.hidden) return false;\n const display = item.style.display;\n if (display === 'none') return false;\n\n // If no layout info and no explicit hiding signal, assume visible.\n return true;\n};\n\ntype ContextMenuFocusRestoreRequest = {\n /** Positional fallback used when the target element is no longer in the DOM. */\n index: number;\n target: HTMLElement | null;\n};\n\nconst getVisibleContextMenuKeyboardNavigationItems = (\n contextMenuRoot: Element | null,\n itemSelector: string = DEFAULT_CONTEXT_MENU_KEYBOARD_NAVIGATION_ITEM_SELECTOR,\n) =>\n Array.from(contextMenuRoot?.querySelectorAll<HTMLElement>(itemSelector) ?? []).filter(\n isVisibleContextMenuKeyboardNavigationItem,\n );\n\nconst createContextMenuFocusRestoreRequest = ({\n contextMenuRoot,\n focusReturnTarget,\n}: {\n contextMenuRoot: Element | null;\n focusReturnTarget?: HTMLElement | null;\n}): ContextMenuFocusRestoreRequest => {\n const target =\n focusReturnTarget ??\n (document.activeElement instanceof HTMLElement ? document.activeElement : null);\n\n if (!target) return { index: -1, target: null };\n\n const index = getVisibleContextMenuKeyboardNavigationItems(contextMenuRoot).findIndex(\n (menuItem) => menuItem === target,\n );\n\n return { index, target };\n};\n\nconst resolveContextMenuFocusRestoreTarget = ({\n contextMenuRoot,\n request,\n}: {\n contextMenuRoot: Element | null;\n request: ContextMenuFocusRestoreRequest | null;\n}) => {\n if (!request) return null;\n\n // Prefer the original element if it's still in the DOM.\n if (request.target?.isConnected) return request.target;\n\n // Fall back to positional index when the element has been unmounted.\n if (request.index >= 0) {\n return (\n getVisibleContextMenuKeyboardNavigationItems(contextMenuRoot)[request.index] ?? null\n );\n }\n\n return null;\n};\n\nconst CONTEXT_MENU_HEADER_SELECTOR = '.str-chat__context-menu__header';\n\n/**\n * Where focus should land when a submenu OPENS (forward navigation):\n * - `'first-item'` (default): the first focusable item that is NOT in the header — i.e. the first\n * real menu option, skipping a back-button header — falling back to the very first item when the\n * body has none.\n * - `'first'`: the first focusable item overall (the back-button header when present).\n * - `'none'`: do not move focus on open.\n */\nexport type ContextMenuSubmenuInitialFocus = 'first' | 'first-item' | 'none';\n\nconst resolveSubmenuInitialFocusTarget = ({\n contextMenuRoot,\n initialFocus,\n itemSelector,\n}: {\n contextMenuRoot: Element | null;\n initialFocus: ContextMenuSubmenuInitialFocus;\n itemSelector?: string;\n}): HTMLElement | null => {\n if (initialFocus === 'none') return null;\n\n const items = getVisibleContextMenuKeyboardNavigationItems(\n contextMenuRoot,\n itemSelector,\n );\n if (initialFocus === 'first') return items[0] ?? null;\n\n // 'first-item': skip the header (e.g. the back button) and land on the first content item;\n // fall back to the first item overall if the body has no focusable item.\n return (\n items.find((item) => !item.closest(CONTEXT_MENU_HEADER_SELECTOR)) ?? items[0] ?? null\n );\n};\n\nexport type ContextMenuKeyboardNavigation = {\n /**\n * CSS selector used to collect focusable menu items.\n * Defaults to `[role=\"menuitem\"]:not(:disabled)`.\n */\n itemSelector?: string;\n};\n\ntype ContextMenuContextValue = {\n anchorReferenceElement?: HTMLElement | null;\n closeMenu: () => void;\n openSubmenu: (params: ContextMenuOpenSubmenuParams) => void;\n registerDialogSubmenu: () => void;\n returnToParentMenu: () => void;\n unregisterDialogSubmenu: () => void;\n};\n\nconst ContextMenuContext = React.createContext<ContextMenuContextValue | undefined>(\n undefined,\n);\n\nexport const useContextMenuContext = () =>\n useContext(ContextMenuContext) as ContextMenuContextValue;\n\ntype ContextMenuLevel = {\n focusRestoreRequest?: ContextMenuFocusRestoreRequest;\n /**\n * Where focus lands when this level is opened as a submenu (forward navigation). Defaults to\n * `'first-item'`. Ignored for the root level (its initial focus is the dialog's `autoFocus`).\n */\n initialFocus?: ContextMenuSubmenuInitialFocus;\n items?: ContextMenuItemComponent[];\n Submenu?: ContextMenuSubmenu;\n Header?: ContextMenuHeaderComponent;\n ItemsWrapper?: ComponentType;\n menuClassName?: string;\n};\n\ntype ContextMenuBaseProps = ComponentPropsWithoutRef<'div'> & {\n backButtonAriaLabel?: string;\n backLabel?: ReactNode;\n enableAnimations?: boolean;\n Header?: ContextMenuHeaderComponent;\n /**\n * Customizes roving-focus keyboard navigation for menu items.\n * ArrowUp/ArrowDown/Home/End move focus across items matched by\n * `keyboardNavigation.itemSelector` (defaults to `[role=\"menuitem\"]:not(:disabled)`).\n * Navigation is always enabled; use this prop only to override the item selector.\n */\n keyboardNavigation?: ContextMenuKeyboardNavigation;\n onClose?: () => void;\n onMenuLevelChange?: (level: number) => void;\n /** Duration (ms) to keep submenu transition direction active for forward/backward animations. */\n submenuTransitionDurationMs?: number;\n} & ContextMenuLevel;\n\n/** When provided, ContextMenu renders inside DialogAnchor and wires menu level for submenu alignment. */\ntype ContextMenuAnchorProps = Partial<\n Pick<\n DialogAnchorProps,\n | 'id'\n | 'dialogManagerId'\n | 'placement'\n | 'referenceElement'\n | 'tabIndex'\n | 'trapFocus'\n | 'allowFlip'\n | 'closeOnClickOutside'\n | 'focus'\n | 'closeTransitionMs'\n | 'offset'\n >\n>;\n\nexport type ContextMenuProps = ContextMenuBaseProps & ContextMenuAnchorProps;\n\nexport type ContextMenuContentProps = ContextMenuBaseProps & {\n anchorReferenceElement?: HTMLElement | null;\n transitionDirection?: 'forward' | 'backward';\n};\n\n/**\n * Internal/default content renderer for {@link ContextMenu}.\n *\n * Override this through `ComponentContext.ContextMenuContent` when you need to\n * customize submenu/back navigation behavior while keeping the same anchor/focus\n * handling from `ContextMenu`.\n */\nexport function ContextMenuContent({\n anchorReferenceElement,\n backButtonAriaLabel,\n backLabel,\n children,\n className,\n enableAnimations = true,\n Header,\n items,\n ItemsWrapper,\n keyboardNavigation,\n menuClassName,\n onClose,\n onMenuLevelChange,\n transitionDirection,\n ...props\n}: ContextMenuContentProps) {\n const { t } = useTranslationContext();\n const { IconChevronLeft } = useComponentContextIcons();\n const resolvedBackLabel = backLabel ?? t('Back');\n const {\n ['aria-describedby']: rootAriaDescribedBy,\n ['aria-label']: rootAriaLabel,\n ['aria-labelledby']: rootAriaLabelledBy,\n ...contextMenuRootProps\n } = props;\n const rootLevel = useMemo<ContextMenuLevel>(\n () => ({\n Header,\n items,\n ItemsWrapper,\n menuClassName,\n }),\n [Header, items, ItemsWrapper, menuClassName],\n );\n const [menuStack, setMenuStack] = useState<ContextMenuLevel[]>(() => [rootLevel]);\n const [menuBodyAnimationKey, setMenuBodyAnimationKey] = useState(0);\n const contextMenuRootRef = useRef<HTMLDivElement | null>(null);\n const focusRestoreRequestRef = useRef<ContextMenuFocusRestoreRequest | null>(null);\n // Where to place focus when the NEXT level opens (forward navigation). Symmetric to\n // `focusRestoreRequestRef`, which handles returning to the parent (backward).\n const pendingForwardFocusRef = useRef<ContextMenuSubmenuInitialFocus | null>(null);\n const activeMenu = menuStack[menuStack.length - 1];\n\n const keyboardNavigationItemSelector =\n keyboardNavigation?.itemSelector ??\n DEFAULT_CONTEXT_MENU_KEYBOARD_NAVIGATION_ITEM_SELECTOR;\n\n const ActiveMenuItemsWrapper = activeMenu.ItemsWrapper ?? React.Fragment;\n\n const closeMenu = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n const openSubmenu = useCallback(\n ({\n focusReturnTarget,\n Header,\n initialFocus = 'first-item',\n ItemsWrapper: SubmenuItemsWrapper,\n menuClassName,\n Submenu,\n }: ContextMenuOpenSubmenuParams) => {\n // Record where focus should land in the opening submenu, so the level-change effect can move\n // it there once the new level has rendered (mirrors the backward focus restore). Clear any\n // backward request so the forward intent is what applies for this transition.\n pendingForwardFocusRef.current = initialFocus;\n focusRestoreRequestRef.current = null;\n const nextLevel: ContextMenuLevel = {\n focusRestoreRequest: createContextMenuFocusRestoreRequest({\n contextMenuRoot: contextMenuRootRef.current,\n focusReturnTarget,\n }),\n Header,\n initialFocus,\n ItemsWrapper: SubmenuItemsWrapper ?? ItemsWrapper,\n menuClassName,\n Submenu,\n };\n setMenuStack((current) => [...current, nextLevel]);\n },\n [ItemsWrapper],\n );\n\n const returnToParentMenu = useCallback(() => {\n setMenuStack((current) => {\n if (current.length <= 1) return current;\n focusRestoreRequestRef.current =\n current[current.length - 1]?.focusRestoreRequest ?? null;\n // Clear any forward intent so the backward restore is what applies for this transition.\n pendingForwardFocusRef.current = null;\n return current.slice(0, -1);\n });\n }, []);\n\n useEffect(() => {\n setMenuStack((current) => {\n if (current.length === 1 && current[0] === rootLevel) return current;\n return [rootLevel];\n });\n }, [rootLevel]);\n\n useEffect(() => {\n onMenuLevelChange?.(menuStack.length);\n }, [menuStack.length, onMenuLevelChange]);\n\n // Move focus on menu-level changes. Runs in a LAYOUT effect (before paint) and re-runs when the\n // body remounts (`menuBodyAnimationKey`) — the body is remounted a step after the level changes\n // to restart the enter animation, which removes the just-focused node. Re-applying focus in the\n // same commit that mounts the new body keeps focus in the menu with no `<body>` flicker (a naive\n // post-paint / single-rAF focus lands one frame before that remount and gets dropped). The\n // request refs are NOT consumed here (so this re-run can re-apply); each transition\n // (`openSubmenu`/`returnToParentMenu`) sets one ref and clears the other.\n useLayoutEffect(() => {\n const focusRestoreRequest = focusRestoreRequestRef.current;\n const pendingForwardFocus = pendingForwardFocusRef.current;\n if (!focusRestoreRequest && !pendingForwardFocus) return;\n\n const contextMenuRoot = contextMenuRootRef.current;\n // Backward (return to parent) restores the remembered element; it takes precedence.\n const target = focusRestoreRequest\n ? resolveContextMenuFocusRestoreTarget({\n contextMenuRoot,\n request: focusRestoreRequest,\n })\n : // Forward (submenu opened): move focus INTO the new level per its `initialFocus`, so it is\n // not lost to <body> when the parent item that had focus unmounts.\n resolveSubmenuInitialFocusTarget({\n contextMenuRoot,\n initialFocus: pendingForwardFocus as ContextMenuSubmenuInitialFocus,\n itemSelector: keyboardNavigationItemSelector,\n });\n\n target?.focus();\n }, [keyboardNavigationItemSelector, menuBodyAnimationKey, menuStack.length]);\n\n useEffect(() => {\n if (!transitionDirection) return;\n setMenuBodyAnimationKey((value) => value + 1);\n }, [transitionDirection, menuStack.length]);\n\n const dialogSubmenuOpenCountRef = useRef(0);\n\n const registerDialogSubmenu = useCallback(() => {\n dialogSubmenuOpenCountRef.current += 1;\n }, []);\n\n const unregisterDialogSubmenu = useCallback(() => {\n dialogSubmenuOpenCountRef.current = Math.max(\n 0,\n dialogSubmenuOpenCountRef.current - 1,\n );\n }, []);\n\n const rovingFocusKeyDownHandler = useMemo(\n () =>\n createRovingFocusKeyDownHandler<HTMLElement>({\n getItems: (event) =>\n getVisibleContextMenuKeyboardNavigationItems(\n event.currentTarget,\n keyboardNavigationItemSelector,\n ),\n }),\n [keyboardNavigationItemSelector],\n );\n\n const escapeConsumedRef = useRef(false);\n\n const keyboardNavigationHandler = useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Escape') {\n if (dialogSubmenuOpenCountRef.current > 0) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (menuStack.length > 1) {\n escapeConsumedRef.current = true;\n returnToParentMenu();\n } else {\n closeMenu();\n }\n return;\n }\n\n rovingFocusKeyDownHandler(event);\n },\n [closeMenu, menuStack.length, returnToParentMenu, rovingFocusKeyDownHandler],\n );\n\n const suppressEscapeKeyUp = useCallback((event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Escape' && escapeConsumedRef.current) {\n escapeConsumedRef.current = false;\n event.stopPropagation();\n }\n }, []);\n const isSubmenuLevel = menuStack.length > 1;\n\n return (\n <ContextMenuContext.Provider\n value={{\n anchorReferenceElement,\n closeMenu,\n openSubmenu,\n registerDialogSubmenu,\n returnToParentMenu,\n unregisterDialogSubmenu,\n }}\n >\n <ContextMenuRoot\n aria-describedby={isSubmenuLevel ? undefined : rootAriaDescribedBy}\n aria-label={isSubmenuLevel ? t('aria/Submenu') : rootAriaLabel}\n aria-labelledby={isSubmenuLevel ? undefined : rootAriaLabelledBy}\n className={clsx(className, activeMenu.menuClassName)}\n data-str-chat-enable-animations={enableAnimations}\n onKeyDownCapture={keyboardNavigationHandler}\n onKeyUpCapture={suppressEscapeKeyUp}\n ref={contextMenuRootRef}\n {...contextMenuRootProps}\n >\n {activeMenu.Header ? (\n <activeMenu.Header />\n ) : menuStack.length > 1 ? (\n <ContextMenuHeader>\n <ContextMenuBackButton\n aria-label={backButtonAriaLabel}\n onClick={returnToParentMenu}\n >\n <IconChevronLeft />\n <span>{resolvedBackLabel}</span>\n </ContextMenuBackButton>\n </ContextMenuHeader>\n ) : null}\n <ContextMenuBody\n className={clsx({\n 'str-chat__context-menu__body--submenu-backward':\n transitionDirection === 'backward',\n 'str-chat__context-menu__body--submenu-forward':\n transitionDirection === 'forward',\n })}\n key={`context-menu-body-${menuStack.length}-${menuBodyAnimationKey}`}\n >\n {activeMenu.Submenu ? (\n <activeMenu.Submenu />\n ) : (\n <ActiveMenuItemsWrapper>\n {typeof children !== 'undefined'\n ? children\n : activeMenu.items?.map((Item, index) => (\n <Item key={`context-menu-item-${index}`} />\n ))}\n </ActiveMenuItemsWrapper>\n )}\n </ContextMenuBody>\n </ContextMenuRoot>\n </ContextMenuContext.Provider>\n );\n}\n\n/**\n * Contextual actions menu that can be used in two modes:\n *\n * - Anchored dialog mode: pass `id` + `referenceElement` (submenu-aware positioning).\n * - Inline mode: omit `id` and render a plain contextual list.\n *\n * Customization via `ComponentContext`:\n *\n * - `ContextMenu`: replace the whole menu container/behavior.\n * - `ContextMenuContent`: keep default container behavior but customize menu content\n * rendering (items, submenu transitions, back navigation UI).\n * - To customize outside-click dismissal via `ComponentContext`, provide a custom\n * `ContextMenu` that sets `closeOnClickOutside`:\n *\n * ```tsx\n * const CustomContextMenu = (props: ContextMenuProps) => (\n * <ContextMenu {...props} closeOnClickOutside={false} />\n * );\n *\n * <ComponentProvider value={{ ContextMenu: CustomContextMenu }}>\n * <Chat client={client}>{children}</Chat>\n * </ComponentProvider>\n * ```\n *\n * Example:\n * ```tsx\n * <ComponentProvider\n * value={{\n * ContextMenu: MyContextMenu,\n * ContextMenuContent: MyContextMenuContent,\n * }}\n * >\n * <Chat client={client}>{children}</Chat>\n * </ComponentProvider>\n * ```\n */\nexport const ContextMenu = (props: ContextMenuProps) => {\n const { ContextMenuContent: ContextMenuContentComponent = ContextMenuContent } =\n useComponentContext();\n const {\n allowFlip,\n closeOnClickOutside,\n closeTransitionMs = 130,\n dialogManagerId,\n focus,\n id,\n offset = 8,\n onMenuLevelChange: onMenuLevelChangeProp,\n placement,\n referenceElement,\n submenuTransitionDurationMs,\n tabIndex,\n trapFocus,\n ...menuProps\n } = props;\n const resolvedSubmenuTransitionDurationMs = submenuTransitionDurationMs ?? 460;\n\n const isAnchored = id != null;\n\n const [menuLevel, setMenuLevel] = useState(1);\n const [transitionDirection, setTransitionDirection] = useState<\n 'forward' | 'backward' | undefined\n >(undefined);\n const [contentResetToken, setContentResetToken] = useState(0);\n const transitionTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const previousMenuLevelRef = useRef(1);\n const open = useDialogIsOpen(id ?? '', dialogManagerId);\n const previousOpenRef = useRef(open);\n\n useEffect(() => {\n if (!isAnchored) return;\n\n if (previousOpenRef.current && !open) {\n setMenuLevel(1);\n setTransitionDirection(undefined);\n setContentResetToken((value) => value + 1);\n previousMenuLevelRef.current = 1;\n if (transitionTimeoutRef.current) {\n clearTimeout(transitionTimeoutRef.current);\n transitionTimeoutRef.current = null;\n }\n }\n previousOpenRef.current = open;\n }, [isAnchored, open]);\n\n useEffect(\n () => () => {\n if (transitionTimeoutRef.current) {\n clearTimeout(transitionTimeoutRef.current);\n }\n },\n [],\n );\n\n const handleMenuLevelChange = useCallback(\n (level: number) => {\n if (isAnchored) {\n const previousLevel = previousMenuLevelRef.current;\n if (level !== previousLevel) {\n setTransitionDirection(level > previousLevel ? 'forward' : 'backward');\n if (transitionTimeoutRef.current) clearTimeout(transitionTimeoutRef.current);\n transitionTimeoutRef.current = setTimeout(() => {\n setTransitionDirection(undefined);\n transitionTimeoutRef.current = null;\n }, resolvedSubmenuTransitionDurationMs);\n }\n previousMenuLevelRef.current = level;\n setMenuLevel(level);\n return;\n }\n onMenuLevelChangeProp?.(level);\n },\n [isAnchored, onMenuLevelChangeProp, resolvedSubmenuTransitionDurationMs],\n );\n\n const content = (\n <ContextMenuContentComponent\n anchorReferenceElement={isAnchored ? referenceElement : undefined}\n {...menuProps}\n key={`context-menu-content-${contentResetToken}`}\n onMenuLevelChange={handleMenuLevelChange}\n transitionDirection={transitionDirection}\n />\n );\n\n if (isAnchored) {\n const {\n ['aria-describedby']: ariaDescribedBy,\n ['aria-label']: ariaLabel,\n ['aria-labelledby']: ariaLabelledBy,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n backButtonAriaLabel: _bbal,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n backLabel: _b,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n enableAnimations: _ea,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Header: _h,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n items: _i,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ItemsWrapper: _w,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n keyboardNavigation: _kn,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n menuClassName: _m,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClose: _c,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n role: _r,\n ...anchorDivProps\n } = menuProps;\n const isSubmenuLevel = menuLevel > 1;\n return (\n <DialogAnchor\n allowFlip={allowFlip}\n aria-describedby={isSubmenuLevel ? undefined : ariaDescribedBy}\n aria-label={isSubmenuLevel ? undefined : ariaLabel}\n aria-labelledby={isSubmenuLevel ? undefined : ariaLabelledBy}\n closeOnClickOutside={closeOnClickOutside}\n closeTransitionMs={closeTransitionMs}\n dialogManagerId={dialogManagerId}\n focus={focus}\n id={id}\n offset={offset}\n placement={placement}\n referenceElement={referenceElement}\n tabIndex={tabIndex}\n trapFocus={trapFocus}\n updateKey={menuLevel}\n {...anchorDivProps}\n >\n {content}\n </DialogAnchor>\n );\n }\n\n return content;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"ContextMenu.mjs","names":[],"sources":["../../../../../src/components/Dialog/components/ContextMenu.tsx"],"sourcesContent":["import clsx from 'clsx';\nimport React, {\n type ComponentProps,\n type ComponentPropsWithoutRef,\n type ComponentType,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { type AvatarProps, Avatar as DefaultAvatar } from '../../Avatar';\nimport type { PopperLikePlacement } from '../hooks';\nimport { useDialogIsOpen, useDialogOnNearestManager } from '../hooks';\nimport type { DialogAnchorProps } from '../service/DialogAnchor';\nimport { DialogAnchor, useDialogAnchor } from '../service/DialogAnchor';\nimport {\n useComponentContext,\n useComponentContextIcons,\n useTranslationContext,\n} from '../../../context';\nimport { createRovingFocusKeyDownHandler } from '../../../a11y/a11yUtils';\nimport { VisuallyHidden } from '../../VisuallyHidden';\nimport { useStableId } from '../../UtilityComponents/useStableId';\nimport { requireContext } from '../../../context/requireContext';\n\n/**\n * ContextMenu module\n *\n * What this file provides\n * - Primitives for contextual action UIs:\n * `ContextMenu`, `ContextMenuContent`, `ContextMenuButton`, `ContextMenuHeader`,\n * `ContextMenuBody`, `ContextMenuBackButton`, and user/emoji button variants.\n * - A small runtime context (`useContextMenuContext`) used by menu items to:\n * - close the current menu (`closeMenu`)\n * - open a submenu (`openSubmenu`)\n * - return to parent level (`returnToParentMenu`)\n *\n * Rendering modes\n * - Anchored mode (most common): pass `id` and `referenceElement`.\n * The component renders inside `DialogAnchor` and uses dialog manager state.\n * - Inline mode: omit anchor props and render as a plain contextual list.\n * - Outside click dismissal can be overridden per menu via `closeOnClickOutside`;\n * otherwise manager default is used.\n *\n * Submenu model\n * - Submenus are represented as a stack of menu levels.\n * - Each level can define `Header`, `Submenu`, `items`, `ItemsWrapper`,\n * and `menuClassName`.\n * - Opening submenu pushes a level to the stack; going back pops one level.\n * - When anchored menu closes, stack resets to root to avoid stale submenu state\n * on next open.\n *\n * Animation model\n * - Root menu open/close is handled by `DialogAnchor` transition timing.\n * - `ContextMenu` defaults `closeTransitionMs` to `130` so close animations can be visible.\n * - `DialogAnchor` marks rendered content with `data-str-chat-dialog-state`:\n * - `open` while visible\n * - `closing` during delayed unmount window (`closeTransitionMs`)\n * - Context-menu closing keyframes in `ContextMenu.scss` target\n * `[data-str-chat-dialog-state='closing']` + placement selectors.\n * - Level-to-level transitions are directional:\n * - forward: parent -> submenu\n * - backward: submenu -> parent\n * - Direction is tracked in `ContextMenu` and passed to `ContextMenuContent`.\n * - `ContextMenuContent` bumps an internal key for `ContextMenuBody` so React\n * remounts the body and CSS enter animation reliably restarts on each level change.\n * - Initial/root menu render does not apply submenu forward/backward classes;\n * directional animation classes are used only for submenu transitions.\n * - `enableAnimations` can disable content animations through data attributes/CSS.\n * - `submenuTransitionDurationMs` controls how long directional transition state is kept.\n *\n * Submenu popover behavior (`ContextMenuButton` with `Submenu`)\n * - Submenu can be rendered by passing `Submenu` (and optional placement/container props).\n * - Default submenu roll axis is `x` (override with `submenuRollAxis`).\n * - Hover/focus management uses a \"keep open\" ref flag plus lazy close timeout to avoid\n * accidental submenu dismissal when moving pointer/focus between parent and submenu.\n *\n * Customization via `ComponentContext`\n * - `ComponentContext.ContextMenu` replaces the whole menu component at SDK call sites.\n * - `ComponentContext.ContextMenuContent` replaces content-level behavior while preserving\n * default anchoring/dialog integration from `ContextMenu`.\n * - Built-in call sites (message actions, channel list action buttons, attachment selector,\n * suggestion list) resolve `ContextMenu` from `ComponentContext` with fallback to default.\n */\nexport type BaseContextMenuButtonProps = {\n details?: ReactNode;\n hasSubMenu?: boolean;\n label?: ReactNode;\n Icon?: ComponentType<ComponentProps<'svg'>>;\n SubmenuIcon?: ComponentType<ComponentProps<'svg'>>;\n variant?: 'destructive';\n} & ComponentProps<'button'>;\n\nexport const BaseContextMenuButton = ({\n children,\n className,\n details,\n hasSubMenu,\n Icon,\n label,\n role = 'menuitem',\n SubmenuIcon,\n variant,\n ...props\n}: BaseContextMenuButtonProps) => {\n const { IconChevronRight } = useComponentContextIcons();\n const ResolvedSubmenuIcon = SubmenuIcon ?? IconChevronRight;\n\n return (\n <button\n {...props}\n className={clsx(\n 'str-chat__context-menu__button',\n {\n 'str-chat__context-menu__button--with-submenu': hasSubMenu,\n [`str-chat__context-menu__button--${variant}`]: typeof variant === 'string',\n },\n className,\n )}\n role={role}\n type='button'\n >\n {Icon && <Icon className='str-chat__context-menu__button__icon' />}\n {label ? (\n <>\n <div className='str-chat__context-menu__button__label'>{label}</div>\n <div className='str-chat__context-menu__button__details'>{details}</div>\n </>\n ) : (\n <div className='str-chat__context-menu__button__label'>{children}</div>\n )}\n {!!hasSubMenu && (\n <ResolvedSubmenuIcon className='str-chat__context-menu__button__submenu-icon' />\n )}\n </button>\n );\n};\n\nexport type UserContextMenuButtonProps = Pick<AvatarProps, 'imageUrl' | 'userName'> &\n ComponentProps<'button'>;\n\nexport const UserContextMenuButton = ({\n children,\n className,\n imageUrl,\n role = 'menuitem',\n userName,\n ...props\n}: UserContextMenuButtonProps) => {\n const { Avatar = DefaultAvatar } = useComponentContext();\n return (\n <button\n {...props}\n className={clsx(\n 'str-chat__context-menu__button str-chat__user-context-menu__button',\n className,\n )}\n role={role}\n type='button'\n >\n {/* The avatar is decorative here: the button already carries the user's name as its\n label, so exposing the avatar (its fallback initials, title, and role=\"button\")\n to assistive tech only adds noise to the option's accessible name. */}\n <Avatar aria-hidden imageUrl={imageUrl} size='sm' userName={userName} />\n <div className='str-chat__context-menu__button__label'>{children ?? userName}</div>\n </button>\n );\n};\n\nexport type EmojiContextMenuButtonProps = { emoji: string } & Pick<\n BaseContextMenuButtonProps,\n 'label'\n> &\n ComponentProps<'button'>;\n\nexport const EmojiContextMenuButton = ({\n children,\n className,\n emoji,\n label,\n role = 'menuitem',\n ...props\n}: EmojiContextMenuButtonProps) => (\n <button\n {...props}\n className={clsx(\n 'str-chat__context-menu__button str-chat__emoji-context-menu__button',\n className,\n )}\n role={role}\n type='button'\n >\n <span className='str-chat__context-menu__button__emoji str-chat__emoji-item--entity'>\n {emoji}\n </span>\n <div className='str-chat__context-menu__button__label'>{children ?? label}</div>\n </button>\n);\n\ntype ButtonWithSubmenuProps = {\n Submenu: ComponentType;\n submenuContainerProps?: ComponentProps<'div'>;\n submenuPlacement?: PopperLikePlacement;\n submenuRollAxis?: 'x' | 'y';\n};\n\nconst ContextMenuButtonWithSubmenu = ({\n children,\n className,\n Submenu,\n submenuContainerProps,\n submenuPlacement = 'right-start',\n submenuRollAxis = 'x',\n ...buttonProps\n}: BaseContextMenuButtonProps & ButtonWithSubmenuProps) => {\n const { className: submenuClassName, ...submenuContainerRestProps } =\n submenuContainerProps ?? {};\n const { registerDialogSubmenu, unregisterDialogSubmenu } = useContextMenuContext();\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const [dialogContainer, setDialogContainer] = useState<HTMLDivElement | null>(null);\n const keepSubmenuOpenFlag = useRef(false);\n const dialogCloseTimeout = useRef<NodeJS.Timeout | null>(null);\n const dialogId = useMemo(() => `submenu-${Math.random().toString(36).slice(2)}`, []);\n const { dialog, dialogManager } = useDialogOnNearestManager({ id: dialogId });\n const dialogIsOpen = useDialogIsOpen(dialogId, dialogManager?.id);\n\n useEffect(() => {\n if (!dialogIsOpen) return;\n registerDialogSubmenu();\n return () => unregisterDialogSubmenu();\n }, [dialogIsOpen, registerDialogSubmenu, unregisterDialogSubmenu]);\n const {\n placement: chosenPlacement,\n setPopperElement,\n styles,\n } = useDialogAnchor<HTMLDivElement>({\n offset: 8,\n open: dialogIsOpen,\n placement: submenuPlacement,\n referenceElement: buttonRef.current,\n });\n\n const closeDialogLazily = useCallback(() => {\n if (dialogCloseTimeout.current) clearTimeout(dialogCloseTimeout.current);\n dialogCloseTimeout.current = setTimeout(() => {\n if (keepSubmenuOpenFlag.current) return;\n dialog.close();\n }, 100);\n }, [dialog]);\n\n const keepSubmenuOpen = useCallback(() => {\n keepSubmenuOpenFlag.current = true;\n }, []);\n\n const allowToCloseSubmenu = useCallback(() => {\n keepSubmenuOpenFlag.current = false;\n }, []);\n\n const closeSubmenu = useCallback(() => {\n allowToCloseSubmenu();\n closeDialogLazily();\n }, [allowToCloseSubmenu, closeDialogLazily]);\n\n const handleClose = useCallback(\n (event: Event) => {\n const parentButton = buttonRef.current;\n if (!dialogIsOpen || !parentButton) return;\n event.stopPropagation();\n closeDialogLazily();\n parentButton.focus();\n },\n [closeDialogLazily, dialogIsOpen, buttonRef],\n );\n\n const handleFocusParentButton = () => {\n if (dialogIsOpen) return;\n dialog.open();\n keepSubmenuOpen();\n };\n\n useEffect(() => {\n const parentButton = buttonRef.current;\n if (!dialogIsOpen || !parentButton) return;\n const hideOnEscape = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n handleClose(event);\n closeSubmenu();\n };\n\n document.addEventListener('keyup', hideOnEscape, { capture: true });\n\n return () => {\n document.removeEventListener('keyup', hideOnEscape, { capture: true });\n };\n }, [dialogIsOpen, handleClose, closeSubmenu]);\n\n return (\n <>\n <BaseContextMenuButton\n aria-expanded={dialogIsOpen}\n aria-haspopup='menu'\n className={clsx(className, 'str_chat__button-with-submenu', {\n 'str_chat__button-with-submenu--submenu-open': dialogIsOpen,\n })}\n hasSubMenu\n onBlur={closeSubmenu}\n onClick={(event) => {\n event.stopPropagation();\n dialog.toggle();\n }}\n onFocus={handleFocusParentButton}\n onMouseEnter={handleFocusParentButton}\n onMouseLeave={closeSubmenu}\n {...buttonProps}\n ref={buttonRef}\n >\n {children}\n </BaseContextMenuButton>\n {dialogIsOpen && (\n <div\n className={clsx('str-chat__context-menu__submenu-container', submenuClassName)}\n data-str-chat-placement={chosenPlacement}\n data-str-chat-roll-axis={submenuRollAxis}\n onBlur={(event) => {\n const isBlurredDescendant =\n event.relatedTarget instanceof Node &&\n dialogContainer?.contains(event.relatedTarget);\n if (isBlurredDescendant) return;\n closeSubmenu();\n }}\n onFocus={keepSubmenuOpen}\n onMouseEnter={keepSubmenuOpen}\n onMouseLeave={closeSubmenu}\n ref={(element) => {\n setPopperElement(element);\n setDialogContainer(element);\n }}\n style={styles}\n tabIndex={-1}\n {...submenuContainerRestProps}\n >\n <Submenu />\n </div>\n )}\n </>\n );\n};\n\ntype ContextMenuButtonProps = BaseContextMenuButtonProps &\n Partial<ButtonWithSubmenuProps>;\n\nexport const ContextMenuButton = (props: ContextMenuButtonProps) => {\n const {\n Submenu,\n submenuContainerProps,\n submenuPlacement,\n submenuRollAxis,\n ...buttonProps\n } = props;\n if (Submenu) {\n return (\n <ContextMenuButtonWithSubmenu\n {...buttonProps}\n Submenu={Submenu}\n submenuContainerProps={submenuContainerProps}\n submenuPlacement={submenuPlacement}\n submenuRollAxis={submenuRollAxis}\n />\n );\n }\n\n return <BaseContextMenuButton {...buttonProps} />;\n};\n\nexport const ContextMenuBackButton = ({\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n children,\n className,\n role = 'menuitem',\n ...props\n}: ComponentProps<'button'>) => {\n const { t } = useTranslationContext();\n const generatedBackNavigationLabelId = useStableId();\n const generatedVisibleLabelId = useStableId();\n const resolvedAriaLabel =\n ariaLabel ??\n t('dialog.contextMenu.backParentMenuButton.ariaLabel', 'Back to parent menu button');\n const resolvedAriaLabelledBy =\n ariaLabelledBy ?? `${generatedVisibleLabelId} ${generatedBackNavigationLabelId}`;\n\n return (\n <button\n {...props}\n aria-labelledby={resolvedAriaLabelledBy}\n className={clsx('str-chat__context-menu__back-button', className)}\n role={role}\n type='button'\n >\n {!ariaLabelledBy && (\n <VisuallyHidden id={generatedBackNavigationLabelId}>\n {resolvedAriaLabel}\n </VisuallyHidden>\n )}\n <span\n className='str-chat__context-menu__back-button__content'\n id={generatedVisibleLabelId}\n >\n {children}\n </span>\n </button>\n );\n};\n\nexport const ContextMenuHeader = ({\n children,\n className,\n ...props\n}: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__context-menu__header', className)}>\n {children}\n </div>\n);\n\nexport const ContextMenuBody = ({\n children,\n className,\n ...props\n}: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__context-menu__body', className)}>\n {children}\n </div>\n);\n\nexport const ContextMenuRoot = React.forwardRef<HTMLDivElement, ComponentProps<'div'>>(\n function ContextMenuRoot({ className, role = 'menu', ...props }, ref) {\n return (\n <div\n {...props}\n className={clsx('str-chat__context-menu', className)}\n ref={ref}\n role={role}\n />\n );\n },\n);\n\nexport type ContextMenuHeaderComponent = ComponentType;\nexport type ContextMenuSubmenu = ComponentType;\n\nexport type ContextMenuOpenSubmenuParams = Omit<\n ContextMenuLevel,\n 'focusRestoreRequest' | 'items'\n> & {\n focusReturnTarget?: HTMLElement | null;\n};\n\nexport type ContextMenuItemProps = ComponentProps<'button'>;\n\nexport type ContextMenuItemComponent = ComponentType<ContextMenuItemProps>;\n\nexport const DEFAULT_CONTEXT_MENU_KEYBOARD_NAVIGATION_ITEM_SELECTOR = [\n '[role=\"menuitem\"]:not(:disabled)',\n '[role=\"menuitemradio\"]:not(:disabled)',\n '[role=\"menuitemcheckbox\"]:not(:disabled)',\n].join(',');\n\nconst isVisibleContextMenuKeyboardNavigationItem = (item: HTMLElement) => {\n // Fast path: offsetParent is null for display:none elements (and their descendants).\n // offsetHeight covers position:fixed elements which have no offsetParent.\n if (item.offsetParent !== null || item.offsetHeight > 0) return true;\n\n // In environments without layout (e.g. jsdom), offsetParent/offsetHeight are always 0/null.\n // Fall back to checking inline style and the `hidden` attribute.\n if (item.hidden) return false;\n const display = item.style.display;\n if (display === 'none') return false;\n\n // If no layout info and no explicit hiding signal, assume visible.\n return true;\n};\n\ntype ContextMenuFocusRestoreRequest = {\n /** Positional fallback used when the target element is no longer in the DOM. */\n index: number;\n target: HTMLElement | null;\n};\n\nconst getVisibleContextMenuKeyboardNavigationItems = (\n contextMenuRoot: Element | null,\n itemSelector: string = DEFAULT_CONTEXT_MENU_KEYBOARD_NAVIGATION_ITEM_SELECTOR,\n) =>\n Array.from(contextMenuRoot?.querySelectorAll<HTMLElement>(itemSelector) ?? []).filter(\n isVisibleContextMenuKeyboardNavigationItem,\n );\n\nconst createContextMenuFocusRestoreRequest = ({\n contextMenuRoot,\n focusReturnTarget,\n}: {\n contextMenuRoot: Element | null;\n focusReturnTarget?: HTMLElement | null;\n}): ContextMenuFocusRestoreRequest => {\n const target =\n focusReturnTarget ??\n (document.activeElement instanceof HTMLElement ? document.activeElement : null);\n\n if (!target) return { index: -1, target: null };\n\n const index = getVisibleContextMenuKeyboardNavigationItems(contextMenuRoot).findIndex(\n (menuItem) => menuItem === target,\n );\n\n return { index, target };\n};\n\nconst resolveContextMenuFocusRestoreTarget = ({\n contextMenuRoot,\n request,\n}: {\n contextMenuRoot: Element | null;\n request: ContextMenuFocusRestoreRequest | null;\n}) => {\n if (!request) return null;\n\n // Prefer the original element if it's still in the DOM.\n if (request.target?.isConnected) return request.target;\n\n // Fall back to positional index when the element has been unmounted.\n if (request.index >= 0) {\n return (\n getVisibleContextMenuKeyboardNavigationItems(contextMenuRoot)[request.index] ?? null\n );\n }\n\n return null;\n};\n\nconst CONTEXT_MENU_HEADER_SELECTOR = '.str-chat__context-menu__header';\n\n/**\n * Where focus should land when a submenu OPENS (forward navigation):\n * - `'first-item'` (default): the first focusable item that is NOT in the header — i.e. the first\n * real menu option, skipping a back-button header — falling back to the very first item when the\n * body has none.\n * - `'first'`: the first focusable item overall (the back-button header when present).\n * - `'none'`: do not move focus on open.\n */\nexport type ContextMenuSubmenuInitialFocus = 'first' | 'first-item' | 'none';\n\nconst resolveSubmenuInitialFocusTarget = ({\n contextMenuRoot,\n initialFocus,\n itemSelector,\n}: {\n contextMenuRoot: Element | null;\n initialFocus: ContextMenuSubmenuInitialFocus;\n itemSelector?: string;\n}): HTMLElement | null => {\n if (initialFocus === 'none') return null;\n\n const items = getVisibleContextMenuKeyboardNavigationItems(\n contextMenuRoot,\n itemSelector,\n );\n if (initialFocus === 'first') return items[0] ?? null;\n\n // 'first-item': skip the header (e.g. the back button) and land on the first content item;\n // fall back to the first item overall if the body has no focusable item.\n return (\n items.find((item) => !item.closest(CONTEXT_MENU_HEADER_SELECTOR)) ?? items[0] ?? null\n );\n};\n\nexport type ContextMenuKeyboardNavigation = {\n /**\n * CSS selector used to collect focusable menu items.\n * Defaults to `[role=\"menuitem\"]:not(:disabled)`.\n */\n itemSelector?: string;\n};\n\ntype ContextMenuContextValue = {\n anchorReferenceElement?: HTMLElement | null;\n closeMenu: () => void;\n openSubmenu: (params: ContextMenuOpenSubmenuParams) => void;\n registerDialogSubmenu: () => void;\n returnToParentMenu: () => void;\n unregisterDialogSubmenu: () => void;\n};\n\nconst ContextMenuContext = React.createContext<ContextMenuContextValue | undefined>(\n undefined,\n);\n\nexport const useContextMenuContext = () =>\n requireContext(useContext(ContextMenuContext), 'useContextMenuContext', 'ContextMenu');\n\ntype ContextMenuLevel = {\n focusRestoreRequest?: ContextMenuFocusRestoreRequest;\n /**\n * Where focus lands when this level is opened as a submenu (forward navigation). Defaults to\n * `'first-item'`. Ignored for the root level (its initial focus is the dialog's `autoFocus`).\n */\n initialFocus?: ContextMenuSubmenuInitialFocus;\n items?: ContextMenuItemComponent[];\n Submenu?: ContextMenuSubmenu;\n Header?: ContextMenuHeaderComponent;\n ItemsWrapper?: ComponentType;\n menuClassName?: string;\n};\n\ntype ContextMenuBaseProps = ComponentPropsWithoutRef<'div'> & {\n backButtonAriaLabel?: string;\n backLabel?: ReactNode;\n enableAnimations?: boolean;\n Header?: ContextMenuHeaderComponent;\n /**\n * Customizes roving-focus keyboard navigation for menu items.\n * ArrowUp/ArrowDown/Home/End move focus across items matched by\n * `keyboardNavigation.itemSelector` (defaults to `[role=\"menuitem\"]:not(:disabled)`).\n * Navigation is always enabled; use this prop only to override the item selector.\n */\n keyboardNavigation?: ContextMenuKeyboardNavigation;\n onClose?: () => void;\n onMenuLevelChange?: (level: number) => void;\n /** Duration (ms) to keep submenu transition direction active for forward/backward animations. */\n submenuTransitionDurationMs?: number;\n} & ContextMenuLevel;\n\n/** When provided, ContextMenu renders inside DialogAnchor and wires menu level for submenu alignment. */\ntype ContextMenuAnchorProps = Partial<\n Pick<\n DialogAnchorProps,\n | 'id'\n | 'dialogManagerId'\n | 'placement'\n | 'referenceElement'\n | 'tabIndex'\n | 'trapFocus'\n | 'allowFlip'\n | 'closeOnClickOutside'\n | 'focus'\n | 'closeTransitionMs'\n | 'offset'\n >\n>;\n\nexport type ContextMenuProps = ContextMenuBaseProps & ContextMenuAnchorProps;\n\nexport type ContextMenuContentProps = ContextMenuBaseProps & {\n anchorReferenceElement?: HTMLElement | null;\n transitionDirection?: 'forward' | 'backward';\n};\n\n/**\n * Internal/default content renderer for {@link ContextMenu}.\n *\n * Override this through `ComponentContext.ContextMenuContent` when you need to\n * customize submenu/back navigation behavior while keeping the same anchor/focus\n * handling from `ContextMenu`.\n */\nexport function ContextMenuContent({\n anchorReferenceElement,\n backButtonAriaLabel,\n backLabel,\n children,\n className,\n enableAnimations = true,\n Header,\n items,\n ItemsWrapper,\n keyboardNavigation,\n menuClassName,\n onClose,\n onMenuLevelChange,\n transitionDirection,\n ...props\n}: ContextMenuContentProps) {\n const { t } = useTranslationContext();\n const { IconChevronLeft } = useComponentContextIcons();\n const resolvedBackLabel = backLabel ?? t('common.back.label', 'Back');\n const {\n ['aria-describedby']: rootAriaDescribedBy,\n ['aria-label']: rootAriaLabel,\n ['aria-labelledby']: rootAriaLabelledBy,\n ...contextMenuRootProps\n } = props;\n const rootLevel = useMemo<ContextMenuLevel>(\n () => ({\n Header,\n items,\n ItemsWrapper,\n menuClassName,\n }),\n [Header, items, ItemsWrapper, menuClassName],\n );\n const [menuStack, setMenuStack] = useState<ContextMenuLevel[]>(() => [rootLevel]);\n const [menuBodyAnimationKey, setMenuBodyAnimationKey] = useState(0);\n const contextMenuRootRef = useRef<HTMLDivElement | null>(null);\n const focusRestoreRequestRef = useRef<ContextMenuFocusRestoreRequest | null>(null);\n // Where to place focus when the NEXT level opens (forward navigation). Symmetric to\n // `focusRestoreRequestRef`, which handles returning to the parent (backward).\n const pendingForwardFocusRef = useRef<ContextMenuSubmenuInitialFocus | null>(null);\n const activeMenu = menuStack[menuStack.length - 1];\n\n const keyboardNavigationItemSelector =\n keyboardNavigation?.itemSelector ??\n DEFAULT_CONTEXT_MENU_KEYBOARD_NAVIGATION_ITEM_SELECTOR;\n\n const ActiveMenuItemsWrapper = activeMenu.ItemsWrapper ?? React.Fragment;\n\n const closeMenu = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n const openSubmenu = useCallback(\n ({\n focusReturnTarget,\n Header,\n initialFocus = 'first-item',\n ItemsWrapper: SubmenuItemsWrapper,\n menuClassName,\n Submenu,\n }: ContextMenuOpenSubmenuParams) => {\n // Record where focus should land in the opening submenu, so the level-change effect can move\n // it there once the new level has rendered (mirrors the backward focus restore). Clear any\n // backward request so the forward intent is what applies for this transition.\n pendingForwardFocusRef.current = initialFocus;\n focusRestoreRequestRef.current = null;\n const nextLevel: ContextMenuLevel = {\n focusRestoreRequest: createContextMenuFocusRestoreRequest({\n contextMenuRoot: contextMenuRootRef.current,\n focusReturnTarget,\n }),\n Header,\n initialFocus,\n ItemsWrapper: SubmenuItemsWrapper ?? ItemsWrapper,\n menuClassName,\n Submenu,\n };\n setMenuStack((current) => [...current, nextLevel]);\n },\n [ItemsWrapper],\n );\n\n const returnToParentMenu = useCallback(() => {\n setMenuStack((current) => {\n if (current.length <= 1) return current;\n focusRestoreRequestRef.current =\n current[current.length - 1]?.focusRestoreRequest ?? null;\n // Clear any forward intent so the backward restore is what applies for this transition.\n pendingForwardFocusRef.current = null;\n return current.slice(0, -1);\n });\n }, []);\n\n useEffect(() => {\n setMenuStack((current) => {\n if (current.length === 1 && current[0] === rootLevel) return current;\n return [rootLevel];\n });\n }, [rootLevel]);\n\n useEffect(() => {\n onMenuLevelChange?.(menuStack.length);\n }, [menuStack.length, onMenuLevelChange]);\n\n // Move focus on menu-level changes. Runs in a LAYOUT effect (before paint) and re-runs when the\n // body remounts (`menuBodyAnimationKey`) — the body is remounted a step after the level changes\n // to restart the enter animation, which removes the just-focused node. Re-applying focus in the\n // same commit that mounts the new body keeps focus in the menu with no `<body>` flicker (a naive\n // post-paint / single-rAF focus lands one frame before that remount and gets dropped). The\n // request refs are NOT consumed here (so this re-run can re-apply); each transition\n // (`openSubmenu`/`returnToParentMenu`) sets one ref and clears the other.\n useLayoutEffect(() => {\n const focusRestoreRequest = focusRestoreRequestRef.current;\n const pendingForwardFocus = pendingForwardFocusRef.current;\n if (!focusRestoreRequest && !pendingForwardFocus) return;\n\n const contextMenuRoot = contextMenuRootRef.current;\n // Backward (return to parent) restores the remembered element; it takes precedence.\n const target = focusRestoreRequest\n ? resolveContextMenuFocusRestoreTarget({\n contextMenuRoot,\n request: focusRestoreRequest,\n })\n : // Forward (submenu opened): move focus INTO the new level per its `initialFocus`, so it is\n // not lost to <body> when the parent item that had focus unmounts.\n resolveSubmenuInitialFocusTarget({\n contextMenuRoot,\n initialFocus: pendingForwardFocus as ContextMenuSubmenuInitialFocus,\n itemSelector: keyboardNavigationItemSelector,\n });\n\n target?.focus();\n }, [keyboardNavigationItemSelector, menuBodyAnimationKey, menuStack.length]);\n\n useEffect(() => {\n if (!transitionDirection) return;\n setMenuBodyAnimationKey((value) => value + 1);\n }, [transitionDirection, menuStack.length]);\n\n const dialogSubmenuOpenCountRef = useRef(0);\n\n const registerDialogSubmenu = useCallback(() => {\n dialogSubmenuOpenCountRef.current += 1;\n }, []);\n\n const unregisterDialogSubmenu = useCallback(() => {\n dialogSubmenuOpenCountRef.current = Math.max(\n 0,\n dialogSubmenuOpenCountRef.current - 1,\n );\n }, []);\n\n const rovingFocusKeyDownHandler = useMemo(\n () =>\n createRovingFocusKeyDownHandler<HTMLElement>({\n getItems: (event) =>\n getVisibleContextMenuKeyboardNavigationItems(\n event.currentTarget,\n keyboardNavigationItemSelector,\n ),\n }),\n [keyboardNavigationItemSelector],\n );\n\n const escapeConsumedRef = useRef(false);\n\n const keyboardNavigationHandler = useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Escape') {\n if (dialogSubmenuOpenCountRef.current > 0) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (menuStack.length > 1) {\n escapeConsumedRef.current = true;\n returnToParentMenu();\n } else {\n closeMenu();\n }\n return;\n }\n\n rovingFocusKeyDownHandler(event);\n },\n [closeMenu, menuStack.length, returnToParentMenu, rovingFocusKeyDownHandler],\n );\n\n const suppressEscapeKeyUp = useCallback((event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Escape' && escapeConsumedRef.current) {\n escapeConsumedRef.current = false;\n event.stopPropagation();\n }\n }, []);\n const isSubmenuLevel = menuStack.length > 1;\n\n return (\n <ContextMenuContext.Provider\n value={{\n anchorReferenceElement,\n closeMenu,\n openSubmenu,\n registerDialogSubmenu,\n returnToParentMenu,\n unregisterDialogSubmenu,\n }}\n >\n <ContextMenuRoot\n aria-describedby={isSubmenuLevel ? undefined : rootAriaDescribedBy}\n aria-label={\n isSubmenuLevel\n ? t('dialog.contextMenu.submenu.ariaLabel', 'Submenu')\n : rootAriaLabel\n }\n aria-labelledby={isSubmenuLevel ? undefined : rootAriaLabelledBy}\n className={clsx(className, activeMenu.menuClassName)}\n data-str-chat-enable-animations={enableAnimations}\n onKeyDownCapture={keyboardNavigationHandler}\n onKeyUpCapture={suppressEscapeKeyUp}\n ref={contextMenuRootRef}\n {...contextMenuRootProps}\n >\n {activeMenu.Header ? (\n <activeMenu.Header />\n ) : menuStack.length > 1 ? (\n <ContextMenuHeader>\n <ContextMenuBackButton\n aria-label={backButtonAriaLabel}\n onClick={returnToParentMenu}\n >\n <IconChevronLeft />\n <span>{resolvedBackLabel}</span>\n </ContextMenuBackButton>\n </ContextMenuHeader>\n ) : null}\n <ContextMenuBody\n className={clsx({\n 'str-chat__context-menu__body--submenu-backward':\n transitionDirection === 'backward',\n 'str-chat__context-menu__body--submenu-forward':\n transitionDirection === 'forward',\n })}\n key={`context-menu-body-${menuStack.length}-${menuBodyAnimationKey}`}\n >\n {activeMenu.Submenu ? (\n <activeMenu.Submenu />\n ) : (\n <ActiveMenuItemsWrapper>\n {typeof children !== 'undefined'\n ? children\n : activeMenu.items?.map((Item, index) => (\n <Item key={`context-menu-item-${index}`} />\n ))}\n </ActiveMenuItemsWrapper>\n )}\n </ContextMenuBody>\n </ContextMenuRoot>\n </ContextMenuContext.Provider>\n );\n}\n\n/**\n * Contextual actions menu that can be used in two modes:\n *\n * - Anchored dialog mode: pass `id` + `referenceElement` (submenu-aware positioning).\n * - Inline mode: omit `id` and render a plain contextual list.\n *\n * Customization via `ComponentContext`:\n *\n * - `ContextMenu`: replace the whole menu container/behavior.\n * - `ContextMenuContent`: keep default container behavior but customize menu content\n * rendering (items, submenu transitions, back navigation UI).\n * - To customize outside-click dismissal via `ComponentContext`, provide a custom\n * `ContextMenu` that sets `closeOnClickOutside`:\n *\n * ```tsx\n * const CustomContextMenu = (props: ContextMenuProps) => (\n * <ContextMenu {...props} closeOnClickOutside={false} />\n * );\n *\n * <ComponentProvider value={{ ContextMenu: CustomContextMenu }}>\n * <Chat client={client}>{children}</Chat>\n * </ComponentProvider>\n * ```\n *\n * Example:\n * ```tsx\n * <ComponentProvider\n * value={{\n * ContextMenu: MyContextMenu,\n * ContextMenuContent: MyContextMenuContent,\n * }}\n * >\n * <Chat client={client}>{children}</Chat>\n * </ComponentProvider>\n * ```\n */\nexport const ContextMenu = (props: ContextMenuProps) => {\n const { ContextMenuContent: ContextMenuContentComponent = ContextMenuContent } =\n useComponentContext();\n const {\n allowFlip,\n closeOnClickOutside,\n closeTransitionMs = 130,\n dialogManagerId,\n focus,\n id,\n offset = 8,\n onMenuLevelChange: onMenuLevelChangeProp,\n placement,\n referenceElement,\n submenuTransitionDurationMs,\n tabIndex,\n trapFocus,\n ...menuProps\n } = props;\n const resolvedSubmenuTransitionDurationMs = submenuTransitionDurationMs ?? 460;\n\n const isAnchored = id != null;\n\n const [menuLevel, setMenuLevel] = useState(1);\n const [transitionDirection, setTransitionDirection] = useState<\n 'forward' | 'backward' | undefined\n >(undefined);\n const [contentResetToken, setContentResetToken] = useState(0);\n const transitionTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const previousMenuLevelRef = useRef(1);\n const open = useDialogIsOpen(id ?? '', dialogManagerId);\n const previousOpenRef = useRef(open);\n\n useEffect(() => {\n if (!isAnchored) return;\n\n if (previousOpenRef.current && !open) {\n setMenuLevel(1);\n setTransitionDirection(undefined);\n setContentResetToken((value) => value + 1);\n previousMenuLevelRef.current = 1;\n if (transitionTimeoutRef.current) {\n clearTimeout(transitionTimeoutRef.current);\n transitionTimeoutRef.current = null;\n }\n }\n previousOpenRef.current = open;\n }, [isAnchored, open]);\n\n useEffect(\n () => () => {\n if (transitionTimeoutRef.current) {\n clearTimeout(transitionTimeoutRef.current);\n }\n },\n [],\n );\n\n const handleMenuLevelChange = useCallback(\n (level: number) => {\n if (isAnchored) {\n const previousLevel = previousMenuLevelRef.current;\n if (level !== previousLevel) {\n setTransitionDirection(level > previousLevel ? 'forward' : 'backward');\n if (transitionTimeoutRef.current) clearTimeout(transitionTimeoutRef.current);\n transitionTimeoutRef.current = setTimeout(() => {\n setTransitionDirection(undefined);\n transitionTimeoutRef.current = null;\n }, resolvedSubmenuTransitionDurationMs);\n }\n previousMenuLevelRef.current = level;\n setMenuLevel(level);\n return;\n }\n onMenuLevelChangeProp?.(level);\n },\n [isAnchored, onMenuLevelChangeProp, resolvedSubmenuTransitionDurationMs],\n );\n\n const content = (\n <ContextMenuContentComponent\n anchorReferenceElement={isAnchored ? referenceElement : undefined}\n {...menuProps}\n key={`context-menu-content-${contentResetToken}`}\n onMenuLevelChange={handleMenuLevelChange}\n transitionDirection={transitionDirection}\n />\n );\n\n if (isAnchored) {\n const {\n ['aria-describedby']: ariaDescribedBy,\n ['aria-label']: ariaLabel,\n ['aria-labelledby']: ariaLabelledBy,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n backButtonAriaLabel: _bbal,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n backLabel: _b,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n enableAnimations: _ea,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Header: _h,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n items: _i,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ItemsWrapper: _w,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n keyboardNavigation: _kn,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n menuClassName: _m,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClose: _c,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n role: _r,\n ...anchorDivProps\n } = menuProps;\n const isSubmenuLevel = menuLevel > 1;\n return (\n <DialogAnchor\n allowFlip={allowFlip}\n aria-describedby={isSubmenuLevel ? undefined : ariaDescribedBy}\n aria-label={isSubmenuLevel ? undefined : ariaLabel}\n aria-labelledby={isSubmenuLevel ? undefined : ariaLabelledBy}\n closeOnClickOutside={closeOnClickOutside}\n closeTransitionMs={closeTransitionMs}\n dialogManagerId={dialogManagerId}\n focus={focus}\n id={id}\n offset={offset}\n placement={placement}\n referenceElement={referenceElement}\n tabIndex={tabIndex}\n trapFocus={trapFocus}\n updateKey={menuLevel}\n {...anchorDivProps}\n >\n {content}\n </DialogAnchor>\n );\n }\n\n return content;\n};\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { useComponentContextIcons } from "../../../context/useComponentContextIcons.mjs";
2
- import { useModalContext } from "../../../context/ModalContext.mjs";
3
1
  import { useTranslationContext } from "../../../context/TranslationContext.mjs";
4
2
  import { Button } from "../../Button/Button.mjs";
5
3
  import { useAriaIdentifiers } from "../../../a11y/hooks/useAriaIdentifiers.mjs";
4
+ import { useModalContext } from "../../../context/ModalContext.mjs";
5
+ import { useComponentContextIcons } from "../../../context/useComponentContextIcons.mjs";
6
6
  import "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  import clsx from "clsx";
@@ -13,9 +13,9 @@ var PromptRoot = ({ children, className, ...props }) => /* @__PURE__ */ jsx("div
13
13
  children
14
14
  });
15
15
  var PromptHeader = ({ className, close, description, descriptionId, goBack, LeadingContent, title, titleId, TrailingContent }) => {
16
+ const { IconArrowLeft, IconXmark } = useComponentContextIcons();
16
17
  const { t } = useTranslationContext();
17
18
  const { dialogId } = useModalContext();
18
- const { IconArrowLeft, IconXmark } = useComponentContextIcons();
19
19
  const { descriptionId: derivedDescriptionId, titleId: derivedTitleId } = useAriaIdentifiers(dialogId);
20
20
  const resolvedTitleId = titleId ?? derivedTitleId;
21
21
  const resolvedDescriptionId = descriptionId ?? derivedDescriptionId;
@@ -35,7 +35,7 @@ var PromptHeader = ({ className, close, description, descriptionId, goBack, Lead
35
35
  children: [
36
36
  goBack && /* @__PURE__ */ jsx(Button, {
37
37
  appearance: "ghost",
38
- "aria-label": t("Go back"),
38
+ "aria-label": t("dialog.prompt.goBack.ariaLabel", "Go back"),
39
39
  circular: true,
40
40
  className: "str-chat__prompt__header__go-back-button",
41
41
  onClick: goBack,
@@ -59,7 +59,7 @@ var PromptHeader = ({ className, close, description, descriptionId, goBack, Lead
59
59
  className: "str-chat__prompt__header__trailing-content",
60
60
  children: [TrailingContent && /* @__PURE__ */ jsx(TrailingContent, {}), close && /* @__PURE__ */ jsx(Button, {
61
61
  appearance: "ghost",
62
- "aria-label": t("Close"),
62
+ "aria-label": t("common.close.ariaLabel", "Close"),
63
63
  circular: true,
64
64
  className: "str-chat__prompt__header__close-button",
65
65
  onClick: close,
@@ -1 +1 @@
1
- {"version":3,"file":"Prompt.mjs","names":[],"sources":["../../../../../src/components/Dialog/components/Prompt.tsx"],"sourcesContent":["import React, { type ComponentProps, type PropsWithChildren } from 'react';\nimport clsx from 'clsx';\nimport { Button, type ButtonProps } from '../../Button';\nimport {\n useComponentContextIcons,\n useModalContext,\n useTranslationContext,\n} from '../../../context';\nimport { useAriaIdentifiers } from '../../../a11y/hooks/useAriaIdentifiers';\n\nconst PromptRoot = ({ children, className, ...props }: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__prompt', className)}>\n {children}\n </div>\n);\n\nexport type PromptHeaderProps = {\n title: React.ReactNode;\n className?: string;\n close?: () => void;\n description?: string;\n descriptionId?: string;\n goBack?: () => void;\n LeadingContent?: React.ComponentType;\n titleId?: string;\n TrailingContent?: React.ComponentType;\n};\n\nconst PromptHeader = ({\n className,\n close,\n description,\n descriptionId,\n goBack,\n LeadingContent,\n title,\n titleId,\n TrailingContent,\n}: PromptHeaderProps) => {\n const { t } = useTranslationContext();\n const { dialogId } = useModalContext();\n const { IconArrowLeft, IconXmark } = useComponentContextIcons();\n const { descriptionId: derivedDescriptionId, titleId: derivedTitleId } =\n useAriaIdentifiers(dialogId);\n const resolvedTitleId = titleId ?? derivedTitleId;\n const resolvedDescriptionId = descriptionId ?? derivedDescriptionId;\n const hasDescription = description != null && description !== '';\n\n return (\n <div\n className={clsx('str-chat__prompt__header', className, {\n 'str-chat__prompt__header--withDescription': hasDescription,\n 'str-chat__prompt__header--withGoBack': goBack,\n })}\n >\n {LeadingContent && (\n <div className='str-chat__prompt__header__leading-content'>\n <LeadingContent />\n </div>\n )}\n <div className={clsx('str-chat__prompt__header__title-group')}>\n {goBack && (\n <Button\n appearance='ghost'\n aria-label={t('Go back')}\n circular\n className='str-chat__prompt__header__go-back-button'\n onClick={goBack}\n size='md'\n variant='secondary'\n >\n <IconArrowLeft />\n </Button>\n )}\n <h2 className='str-chat__prompt__header__title' id={resolvedTitleId}>\n {title}\n </h2>\n {hasDescription && (\n <p className='str-chat__prompt__header__description' id={resolvedDescriptionId}>\n {description}\n </p>\n )}\n </div>\n {(close || TrailingContent) && (\n <div className='str-chat__prompt__header__trailing-content'>\n {TrailingContent && <TrailingContent />}\n {close && (\n <Button\n appearance='ghost'\n // Concise \"Close\": the dialog itself is named by its title (aria-labelledby) and\n // described by its description (aria-describedby on the dialog surface), so the close\n // button carries neither — repeating them here is redundant noise on focus.\n aria-label={t('Close')}\n circular\n className='str-chat__prompt__header__close-button'\n onClick={close}\n size='md'\n variant='secondary'\n >\n <IconXmark />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport type PromptBodyProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst PromptBody = ({ children, className }: PromptBodyProps) => (\n <div className={clsx('str-chat__prompt__body', className)}>{children}</div>\n);\n\nexport type PromptFooterProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst PromptFooter = ({ children, className }: PromptFooterProps) => (\n <div className={clsx('str-chat__prompt__footer', className)}>{children}</div>\n);\n\ntype PromptFooterControlsProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst PromptFooterControls = ({ children, className }: PromptFooterControlsProps) => (\n <div className={clsx('str-chat__prompt__footer__controls', className)}>{children}</div>\n);\n\nconst PromptFooterControlsButtonSecondary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='ghost'\n className={clsx('str-chat__prompt__footer__controls-button', className)}\n size='md'\n variant='secondary'\n {...props}\n />\n);\n\nconst PromptFooterControlsButtonPrimary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='solid'\n className={clsx('str-chat__prompt__footer__controls-button', className)}\n size='md'\n variant='primary'\n {...props}\n />\n);\n\nexport const Prompt = {\n Body: PromptBody,\n Footer: PromptFooter,\n FooterControls: PromptFooterControls,\n FooterControlsButtonPrimary: PromptFooterControlsButtonPrimary,\n FooterControlsButtonSecondary: PromptFooterControlsButtonSecondary,\n Header: PromptHeader,\n Root: PromptRoot,\n};\n"],"mappings":";;;;;;;;;AAUA,IAAM,cAAc,EAAE,UAAU,WAAW,GAAG,YAC5C,oBAAC,OAAD;CAAK,GAAI;CAAO,WAAW,KAAK,oBAAoB,SAAS;CAC1D;AACE,CAAA;AAeP,IAAM,gBAAgB,EACpB,WACA,OACA,aACA,eACA,QACA,gBACA,OACA,SACA,sBACuB;CACvB,MAAM,EAAE,MAAM,sBAAsB;CACpC,MAAM,EAAE,aAAa,gBAAgB;CACrC,MAAM,EAAE,eAAe,cAAc,yBAAyB;CAC9D,MAAM,EAAE,eAAe,sBAAsB,SAAS,mBACpD,mBAAmB,QAAQ;CAC7B,MAAM,kBAAkB,WAAW;CACnC,MAAM,wBAAwB,iBAAiB;CAC/C,MAAM,iBAAiB,eAAe,QAAQ,gBAAgB;CAE9D,OACE,qBAAC,OAAD;EACE,WAAW,KAAK,4BAA4B,WAAW;GACrD,6CAA6C;GAC7C,wCAAwC;EAC1C,CAAC;YAJH;GAMG,kBACC,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,gBAAD,CAAiB,CAAA;GACd,CAAA;GAEP,qBAAC,OAAD;IAAK,WAAW,KAAK,uCAAuC;cAA5D;KACG,UACC,oBAAC,QAAD;MACE,YAAW;MACX,cAAY,EAAE,SAAS;MACvB,UAAA;MACA,WAAU;MACV,SAAS;MACT,MAAK;MACL,SAAQ;gBAER,oBAAC,eAAD,CAAgB,CAAA;KACV,CAAA;KAEV,oBAAC,MAAD;MAAI,WAAU;MAAkC,IAAI;gBACjD;KACC,CAAA;KACH,kBACC,oBAAC,KAAD;MAAG,WAAU;MAAwC,IAAI;gBACtD;KACA,CAAA;IAEF;;IACH,SAAS,oBACT,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,mBAAmB,oBAAC,iBAAD,CAAkB,CAAA,GACrC,SACC,oBAAC,QAAD;KACE,YAAW;KAIX,cAAY,EAAE,OAAO;KACrB,UAAA;KACA,WAAU;KACV,SAAS;KACT,MAAK;KACL,SAAQ;eAER,oBAAC,WAAD,CAAY,CAAA;IACN,CAAA,CAEP;;EAEJ;;AAET;AAMA,IAAM,cAAc,EAAE,UAAU,gBAC9B,oBAAC,OAAD;CAAK,WAAW,KAAK,0BAA0B,SAAS;CAAI;AAAc,CAAA;AAO5E,IAAM,gBAAgB,EAAE,UAAU,gBAChC,oBAAC,OAAD;CAAK,WAAW,KAAK,4BAA4B,SAAS;CAAI;AAAc,CAAA;AAO9E,IAAM,wBAAwB,EAAE,UAAU,gBACxC,oBAAC,OAAD;CAAK,WAAW,KAAK,sCAAsC,SAAS;CAAI;AAAc,CAAA;AAGxF,IAAM,uCAAuC,EAAE,WAAW,GAAG,YAC3D,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAM,qCAAqC,EAAE,WAAW,GAAG,YACzD,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAa,SAAS;CACpB,MAAM;CACN,QAAQ;CACR,gBAAgB;CAChB,6BAA6B;CAC7B,+BAA+B;CAC/B,QAAQ;CACR,MAAM;AACR"}
1
+ {"version":3,"file":"Prompt.mjs","names":[],"sources":["../../../../../src/components/Dialog/components/Prompt.tsx"],"sourcesContent":["import React, { type ComponentProps, type PropsWithChildren } from 'react';\nimport clsx from 'clsx';\nimport { Button, type ButtonProps } from '../../Button';\nimport {\n useComponentContextIcons,\n useModalContext,\n useTranslationContext,\n} from '../../../context';\nimport { useAriaIdentifiers } from '../../../a11y/hooks/useAriaIdentifiers';\n\nconst PromptRoot = ({ children, className, ...props }: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__prompt', className)}>\n {children}\n </div>\n);\n\nexport type PromptHeaderProps = {\n title: React.ReactNode;\n className?: string;\n close?: () => void;\n description?: string;\n descriptionId?: string;\n goBack?: () => void;\n LeadingContent?: React.ComponentType;\n titleId?: string;\n TrailingContent?: React.ComponentType;\n};\n\nconst PromptHeader = ({\n className,\n close,\n description,\n descriptionId,\n goBack,\n LeadingContent,\n title,\n titleId,\n TrailingContent,\n}: PromptHeaderProps) => {\n const { IconArrowLeft, IconXmark } = useComponentContextIcons();\n const { t } = useTranslationContext();\n const { dialogId } = useModalContext();\n const { descriptionId: derivedDescriptionId, titleId: derivedTitleId } =\n useAriaIdentifiers(dialogId);\n const resolvedTitleId = titleId ?? derivedTitleId;\n const resolvedDescriptionId = descriptionId ?? derivedDescriptionId;\n const hasDescription = description != null && description !== '';\n\n return (\n <div\n className={clsx('str-chat__prompt__header', className, {\n 'str-chat__prompt__header--withDescription': hasDescription,\n 'str-chat__prompt__header--withGoBack': goBack,\n })}\n >\n {LeadingContent && (\n <div className='str-chat__prompt__header__leading-content'>\n <LeadingContent />\n </div>\n )}\n <div className={clsx('str-chat__prompt__header__title-group')}>\n {goBack && (\n <Button\n appearance='ghost'\n aria-label={t('dialog.prompt.goBack.ariaLabel', 'Go back')}\n circular\n className='str-chat__prompt__header__go-back-button'\n onClick={goBack}\n size='md'\n variant='secondary'\n >\n <IconArrowLeft />\n </Button>\n )}\n <h2 className='str-chat__prompt__header__title' id={resolvedTitleId}>\n {title}\n </h2>\n {hasDescription && (\n <p className='str-chat__prompt__header__description' id={resolvedDescriptionId}>\n {description}\n </p>\n )}\n </div>\n {(close || TrailingContent) && (\n <div className='str-chat__prompt__header__trailing-content'>\n {TrailingContent && <TrailingContent />}\n {close && (\n <Button\n appearance='ghost'\n // Concise \"Close\": the dialog itself is named by its title (aria-labelledby) and\n // described by its description (aria-describedby on the dialog surface), so the close\n // button carries neither — repeating them here is redundant noise on focus.\n aria-label={t('common.close.ariaLabel', 'Close')}\n circular\n className='str-chat__prompt__header__close-button'\n onClick={close}\n size='md'\n variant='secondary'\n >\n <IconXmark />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport type PromptBodyProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst PromptBody = ({ children, className }: PromptBodyProps) => (\n <div className={clsx('str-chat__prompt__body', className)}>{children}</div>\n);\n\nexport type PromptFooterProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst PromptFooter = ({ children, className }: PromptFooterProps) => (\n <div className={clsx('str-chat__prompt__footer', className)}>{children}</div>\n);\n\ntype PromptFooterControlsProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst PromptFooterControls = ({ children, className }: PromptFooterControlsProps) => (\n <div className={clsx('str-chat__prompt__footer__controls', className)}>{children}</div>\n);\n\nconst PromptFooterControlsButtonSecondary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='ghost'\n className={clsx('str-chat__prompt__footer__controls-button', className)}\n size='md'\n variant='secondary'\n {...props}\n />\n);\n\nconst PromptFooterControlsButtonPrimary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='solid'\n className={clsx('str-chat__prompt__footer__controls-button', className)}\n size='md'\n variant='primary'\n {...props}\n />\n);\n\nexport const Prompt = {\n Body: PromptBody,\n Footer: PromptFooter,\n FooterControls: PromptFooterControls,\n FooterControlsButtonPrimary: PromptFooterControlsButtonPrimary,\n FooterControlsButtonSecondary: PromptFooterControlsButtonSecondary,\n Header: PromptHeader,\n Root: PromptRoot,\n};\n"],"mappings":";;;;;;;;;AAUA,IAAM,cAAc,EAAE,UAAU,WAAW,GAAG,YAC5C,oBAAC,OAAD;CAAK,GAAI;CAAO,WAAW,KAAK,oBAAoB,SAAS;CAC1D;AACE,CAAA;AAeP,IAAM,gBAAgB,EACpB,WACA,OACA,aACA,eACA,QACA,gBACA,OACA,SACA,sBACuB;CACvB,MAAM,EAAE,eAAe,cAAc,yBAAyB;CAC9D,MAAM,EAAE,MAAM,sBAAsB;CACpC,MAAM,EAAE,aAAa,gBAAgB;CACrC,MAAM,EAAE,eAAe,sBAAsB,SAAS,mBACpD,mBAAmB,QAAQ;CAC7B,MAAM,kBAAkB,WAAW;CACnC,MAAM,wBAAwB,iBAAiB;CAC/C,MAAM,iBAAiB,eAAe,QAAQ,gBAAgB;CAE9D,OACE,qBAAC,OAAD;EACE,WAAW,KAAK,4BAA4B,WAAW;GACrD,6CAA6C;GAC7C,wCAAwC;EAC1C,CAAC;YAJH;GAMG,kBACC,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,gBAAD,CAAiB,CAAA;GACd,CAAA;GAEP,qBAAC,OAAD;IAAK,WAAW,KAAK,uCAAuC;cAA5D;KACG,UACC,oBAAC,QAAD;MACE,YAAW;MACX,cAAY,EAAE,kCAAkC,SAAS;MACzD,UAAA;MACA,WAAU;MACV,SAAS;MACT,MAAK;MACL,SAAQ;gBAER,oBAAC,eAAD,CAAgB,CAAA;KACV,CAAA;KAEV,oBAAC,MAAD;MAAI,WAAU;MAAkC,IAAI;gBACjD;KACC,CAAA;KACH,kBACC,oBAAC,KAAD;MAAG,WAAU;MAAwC,IAAI;gBACtD;KACA,CAAA;IAEF;;IACH,SAAS,oBACT,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,mBAAmB,oBAAC,iBAAD,CAAkB,CAAA,GACrC,SACC,oBAAC,QAAD;KACE,YAAW;KAIX,cAAY,EAAE,0BAA0B,OAAO;KAC/C,UAAA;KACA,WAAU;KACV,SAAS;KACT,MAAK;KACL,SAAQ;eAER,oBAAC,WAAD,CAAY,CAAA;IACN,CAAA,CAEP;;EAEJ;;AAET;AAMA,IAAM,cAAc,EAAE,UAAU,gBAC9B,oBAAC,OAAD;CAAK,WAAW,KAAK,0BAA0B,SAAS;CAAI;AAAc,CAAA;AAO5E,IAAM,gBAAgB,EAAE,UAAU,gBAChC,oBAAC,OAAD;CAAK,WAAW,KAAK,4BAA4B,SAAS;CAAI;AAAc,CAAA;AAO9E,IAAM,wBAAwB,EAAE,UAAU,gBACxC,oBAAC,OAAD;CAAK,WAAW,KAAK,sCAAsC,SAAS;CAAI;AAAc,CAAA;AAGxF,IAAM,uCAAuC,EAAE,WAAW,GAAG,YAC3D,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAM,qCAAqC,EAAE,WAAW,GAAG,YACzD,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAa,SAAS;CACpB,MAAM;CACN,QAAQ;CACR,gBAAgB;CAChB,6BAA6B;CAC7B,+BAA+B;CAC/B,QAAQ;CACR,MAAM;AACR"}
@@ -1,8 +1,8 @@
1
- import { useComponentContextIcons } from "../../../context/useComponentContextIcons.mjs";
2
- import { useModalContext } from "../../../context/ModalContext.mjs";
3
1
  import { useTranslationContext } from "../../../context/TranslationContext.mjs";
4
2
  import { Button } from "../../Button/Button.mjs";
5
3
  import { useAriaIdentifiers } from "../../../a11y/hooks/useAriaIdentifiers.mjs";
4
+ import { useModalContext } from "../../../context/ModalContext.mjs";
5
+ import { useComponentContextIcons } from "../../../context/useComponentContextIcons.mjs";
6
6
  import "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  import clsx from "clsx";
@@ -13,9 +13,9 @@ var ViewerRoot = ({ children, className, ...props }) => /* @__PURE__ */ jsx("div
13
13
  children
14
14
  });
15
15
  var ViewerHeader = ({ className, close, description, descriptionId, goBack, title, titleId }) => {
16
+ const { IconArrowLeft, IconXmark } = useComponentContextIcons();
16
17
  const { t } = useTranslationContext();
17
18
  const { dialogId } = useModalContext();
18
- const { IconArrowLeft, IconXmark } = useComponentContextIcons();
19
19
  const { descriptionId: derivedDescriptionId, titleId: derivedTitleId } = useAriaIdentifiers(dialogId);
20
20
  const resolvedTitleId = titleId ?? derivedTitleId;
21
21
  const resolvedDescriptionId = descriptionId ?? derivedDescriptionId;
@@ -25,7 +25,7 @@ var ViewerHeader = ({ className, close, description, descriptionId, goBack, titl
25
25
  goBack && /* @__PURE__ */ jsx(Button, {
26
26
  appearance: "ghost",
27
27
  "aria-describedby": description != null && description !== "" ? resolvedDescriptionId : void 0,
28
- "aria-label": t("Back"),
28
+ "aria-label": t("common.back.label", "Back"),
29
29
  circular: true,
30
30
  className: "str-chat__viewer__header__go-back-button",
31
31
  onClick: goBack,
@@ -48,7 +48,7 @@ var ViewerHeader = ({ className, close, description, descriptionId, goBack, titl
48
48
  close && /* @__PURE__ */ jsx(Button, {
49
49
  appearance: "ghost",
50
50
  "aria-describedby": description != null && description !== "" ? resolvedDescriptionId : void 0,
51
- "aria-label": t("Close dialog"),
51
+ "aria-label": t("dialog.viewer.closeDialog.ariaLabel", "Close dialog"),
52
52
  circular: true,
53
53
  className: "str-chat__viewer__header__close-button",
54
54
  onClick: close,
@@ -1 +1 @@
1
- {"version":3,"file":"Viewer.mjs","names":[],"sources":["../../../../../src/components/Dialog/components/Viewer.tsx"],"sourcesContent":["import React, { type ComponentProps, type PropsWithChildren } from 'react';\nimport clsx from 'clsx';\nimport { Button, type ButtonProps } from '../../Button';\nimport {\n useComponentContextIcons,\n useModalContext,\n useTranslationContext,\n} from '../../../context';\nimport { useAriaIdentifiers } from '../../../a11y/hooks/useAriaIdentifiers';\n\nconst ViewerRoot = ({ children, className, ...props }: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__viewer', className)}>\n {children}\n </div>\n);\n\nexport type ViewerHeaderProps = {\n title: string;\n description?: string;\n className?: string;\n close?: () => void;\n goBack?: () => void;\n descriptionId?: string;\n titleId?: string;\n};\n\nconst ViewerHeader = ({\n className,\n close,\n description,\n descriptionId,\n goBack,\n title,\n titleId,\n}: ViewerHeaderProps) => {\n const { t } = useTranslationContext();\n const { dialogId } = useModalContext();\n const { IconArrowLeft, IconXmark } = useComponentContextIcons();\n const { descriptionId: derivedDescriptionId, titleId: derivedTitleId } =\n useAriaIdentifiers(dialogId);\n const resolvedTitleId = titleId ?? derivedTitleId;\n const resolvedDescriptionId = descriptionId ?? derivedDescriptionId;\n\n return (\n <div className={clsx('str-chat__viewer__header', className)}>\n {goBack && (\n <Button\n appearance='ghost'\n aria-describedby={\n description != null && description !== '' ? resolvedDescriptionId : undefined\n }\n aria-label={t('Back')}\n circular\n className='str-chat__viewer__header__go-back-button'\n onClick={goBack}\n size='sm'\n variant='secondary'\n >\n <IconArrowLeft />\n </Button>\n )}\n <div className='str-chat__viewer__header__title-group'>\n <h2 className='str-chat__viewer__header__title' id={resolvedTitleId}>\n {title}\n </h2>\n {description != null && description !== '' && (\n <p className='str-chat__viewer__header__description' id={resolvedDescriptionId}>\n {description}\n </p>\n )}\n </div>\n {close && (\n <Button\n appearance='ghost'\n aria-describedby={\n description != null && description !== '' ? resolvedDescriptionId : undefined\n }\n aria-label={t('Close dialog')}\n circular\n className='str-chat__viewer__header__close-button'\n onClick={close}\n size='sm'\n variant='secondary'\n >\n <IconXmark />\n </Button>\n )}\n </div>\n );\n};\n\nexport type ViewerBodyProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst ViewerBody = ({ children, className }: ViewerBodyProps) => (\n <div className={clsx('str-chat__viewer__body', className)}>{children}</div>\n);\n\nexport type ViewerFooterProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst ViewerFooter = ({ children, className }: ViewerFooterProps) => (\n <div className={clsx('str-chat__viewer__footer', className)}>{children}</div>\n);\n\ntype ViewerFooterControlsProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst ViewerFooterControls = ({ children, className }: ViewerFooterControlsProps) => (\n <div className={clsx('str-chat__viewer__footer__controls', className)}>{children}</div>\n);\n\nconst ViewerFooterControlsButtonSecondary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='ghost'\n className={clsx('str-chat__viewer__footer__controls-button', className)}\n size='md'\n variant='secondary'\n {...props}\n />\n);\n\nconst ViewerFooterControlsButtonPrimary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='solid'\n className={clsx('str-chat__viewer__footer__controls-button', className)}\n size='md'\n variant='primary'\n {...props}\n />\n);\n\nexport const Viewer = {\n Body: ViewerBody,\n Footer: ViewerFooter,\n FooterControls: ViewerFooterControls,\n FooterControlsButtonPrimary: ViewerFooterControlsButtonPrimary,\n FooterControlsButtonSecondary: ViewerFooterControlsButtonSecondary,\n Header: ViewerHeader,\n Root: ViewerRoot,\n};\n"],"mappings":";;;;;;;;;AAUA,IAAM,cAAc,EAAE,UAAU,WAAW,GAAG,YAC5C,oBAAC,OAAD;CAAK,GAAI;CAAO,WAAW,KAAK,oBAAoB,SAAS;CAC1D;AACE,CAAA;AAaP,IAAM,gBAAgB,EACpB,WACA,OACA,aACA,eACA,QACA,OACA,cACuB;CACvB,MAAM,EAAE,MAAM,sBAAsB;CACpC,MAAM,EAAE,aAAa,gBAAgB;CACrC,MAAM,EAAE,eAAe,cAAc,yBAAyB;CAC9D,MAAM,EAAE,eAAe,sBAAsB,SAAS,mBACpD,mBAAmB,QAAQ;CAC7B,MAAM,kBAAkB,WAAW;CACnC,MAAM,wBAAwB,iBAAiB;CAE/C,OACE,qBAAC,OAAD;EAAK,WAAW,KAAK,4BAA4B,SAAS;YAA1D;GACG,UACC,oBAAC,QAAD;IACE,YAAW;IACX,oBACE,eAAe,QAAQ,gBAAgB,KAAK,wBAAwB,KAAA;IAEtE,cAAY,EAAE,MAAM;IACpB,UAAA;IACA,WAAU;IACV,SAAS;IACT,MAAK;IACL,SAAQ;cAER,oBAAC,eAAD,CAAgB,CAAA;GACV,CAAA;GAEV,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,MAAD;KAAI,WAAU;KAAkC,IAAI;eACjD;IACC,CAAA,GACH,eAAe,QAAQ,gBAAgB,MACtC,oBAAC,KAAD;KAAG,WAAU;KAAwC,IAAI;eACtD;IACA,CAAA,CAEF;;GACJ,SACC,oBAAC,QAAD;IACE,YAAW;IACX,oBACE,eAAe,QAAQ,gBAAgB,KAAK,wBAAwB,KAAA;IAEtE,cAAY,EAAE,cAAc;IAC5B,UAAA;IACA,WAAU;IACV,SAAS;IACT,MAAK;IACL,SAAQ;cAER,oBAAC,WAAD,CAAY,CAAA;GACN,CAAA;EAEP;;AAET;AAMA,IAAM,cAAc,EAAE,UAAU,gBAC9B,oBAAC,OAAD;CAAK,WAAW,KAAK,0BAA0B,SAAS;CAAI;AAAc,CAAA;AAO5E,IAAM,gBAAgB,EAAE,UAAU,gBAChC,oBAAC,OAAD;CAAK,WAAW,KAAK,4BAA4B,SAAS;CAAI;AAAc,CAAA;AAO9E,IAAM,wBAAwB,EAAE,UAAU,gBACxC,oBAAC,OAAD;CAAK,WAAW,KAAK,sCAAsC,SAAS;CAAI;AAAc,CAAA;AAGxF,IAAM,uCAAuC,EAAE,WAAW,GAAG,YAC3D,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAM,qCAAqC,EAAE,WAAW,GAAG,YACzD,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAa,SAAS;CACpB,MAAM;CACN,QAAQ;CACR,gBAAgB;CAChB,6BAA6B;CAC7B,+BAA+B;CAC/B,QAAQ;CACR,MAAM;AACR"}
1
+ {"version":3,"file":"Viewer.mjs","names":[],"sources":["../../../../../src/components/Dialog/components/Viewer.tsx"],"sourcesContent":["import React, { type ComponentProps, type PropsWithChildren } from 'react';\nimport clsx from 'clsx';\nimport { Button, type ButtonProps } from '../../Button';\nimport {\n useComponentContextIcons,\n useModalContext,\n useTranslationContext,\n} from '../../../context';\nimport { useAriaIdentifiers } from '../../../a11y/hooks/useAriaIdentifiers';\n\nconst ViewerRoot = ({ children, className, ...props }: ComponentProps<'div'>) => (\n <div {...props} className={clsx('str-chat__viewer', className)}>\n {children}\n </div>\n);\n\nexport type ViewerHeaderProps = {\n title: string;\n description?: string;\n className?: string;\n close?: () => void;\n goBack?: () => void;\n descriptionId?: string;\n titleId?: string;\n};\n\nconst ViewerHeader = ({\n className,\n close,\n description,\n descriptionId,\n goBack,\n title,\n titleId,\n}: ViewerHeaderProps) => {\n const { IconArrowLeft, IconXmark } = useComponentContextIcons();\n const { t } = useTranslationContext();\n const { dialogId } = useModalContext();\n const { descriptionId: derivedDescriptionId, titleId: derivedTitleId } =\n useAriaIdentifiers(dialogId);\n const resolvedTitleId = titleId ?? derivedTitleId;\n const resolvedDescriptionId = descriptionId ?? derivedDescriptionId;\n\n return (\n <div className={clsx('str-chat__viewer__header', className)}>\n {goBack && (\n <Button\n appearance='ghost'\n aria-describedby={\n description != null && description !== '' ? resolvedDescriptionId : undefined\n }\n aria-label={t('common.back.label', 'Back')}\n circular\n className='str-chat__viewer__header__go-back-button'\n onClick={goBack}\n size='sm'\n variant='secondary'\n >\n <IconArrowLeft />\n </Button>\n )}\n <div className='str-chat__viewer__header__title-group'>\n <h2 className='str-chat__viewer__header__title' id={resolvedTitleId}>\n {title}\n </h2>\n {description != null && description !== '' && (\n <p className='str-chat__viewer__header__description' id={resolvedDescriptionId}>\n {description}\n </p>\n )}\n </div>\n {close && (\n <Button\n appearance='ghost'\n aria-describedby={\n description != null && description !== '' ? resolvedDescriptionId : undefined\n }\n aria-label={t('dialog.viewer.closeDialog.ariaLabel', 'Close dialog')}\n circular\n className='str-chat__viewer__header__close-button'\n onClick={close}\n size='sm'\n variant='secondary'\n >\n <IconXmark />\n </Button>\n )}\n </div>\n );\n};\n\nexport type ViewerBodyProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst ViewerBody = ({ children, className }: ViewerBodyProps) => (\n <div className={clsx('str-chat__viewer__body', className)}>{children}</div>\n);\n\nexport type ViewerFooterProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst ViewerFooter = ({ children, className }: ViewerFooterProps) => (\n <div className={clsx('str-chat__viewer__footer', className)}>{children}</div>\n);\n\ntype ViewerFooterControlsProps = PropsWithChildren<{\n className?: string;\n}>;\n\nconst ViewerFooterControls = ({ children, className }: ViewerFooterControlsProps) => (\n <div className={clsx('str-chat__viewer__footer__controls', className)}>{children}</div>\n);\n\nconst ViewerFooterControlsButtonSecondary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='ghost'\n className={clsx('str-chat__viewer__footer__controls-button', className)}\n size='md'\n variant='secondary'\n {...props}\n />\n);\n\nconst ViewerFooterControlsButtonPrimary = ({ className, ...props }: ButtonProps) => (\n <Button\n appearance='solid'\n className={clsx('str-chat__viewer__footer__controls-button', className)}\n size='md'\n variant='primary'\n {...props}\n />\n);\n\nexport const Viewer = {\n Body: ViewerBody,\n Footer: ViewerFooter,\n FooterControls: ViewerFooterControls,\n FooterControlsButtonPrimary: ViewerFooterControlsButtonPrimary,\n FooterControlsButtonSecondary: ViewerFooterControlsButtonSecondary,\n Header: ViewerHeader,\n Root: ViewerRoot,\n};\n"],"mappings":";;;;;;;;;AAUA,IAAM,cAAc,EAAE,UAAU,WAAW,GAAG,YAC5C,oBAAC,OAAD;CAAK,GAAI;CAAO,WAAW,KAAK,oBAAoB,SAAS;CAC1D;AACE,CAAA;AAaP,IAAM,gBAAgB,EACpB,WACA,OACA,aACA,eACA,QACA,OACA,cACuB;CACvB,MAAM,EAAE,eAAe,cAAc,yBAAyB;CAC9D,MAAM,EAAE,MAAM,sBAAsB;CACpC,MAAM,EAAE,aAAa,gBAAgB;CACrC,MAAM,EAAE,eAAe,sBAAsB,SAAS,mBACpD,mBAAmB,QAAQ;CAC7B,MAAM,kBAAkB,WAAW;CACnC,MAAM,wBAAwB,iBAAiB;CAE/C,OACE,qBAAC,OAAD;EAAK,WAAW,KAAK,4BAA4B,SAAS;YAA1D;GACG,UACC,oBAAC,QAAD;IACE,YAAW;IACX,oBACE,eAAe,QAAQ,gBAAgB,KAAK,wBAAwB,KAAA;IAEtE,cAAY,EAAE,qBAAqB,MAAM;IACzC,UAAA;IACA,WAAU;IACV,SAAS;IACT,MAAK;IACL,SAAQ;cAER,oBAAC,eAAD,CAAgB,CAAA;GACV,CAAA;GAEV,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,MAAD;KAAI,WAAU;KAAkC,IAAI;eACjD;IACC,CAAA,GACH,eAAe,QAAQ,gBAAgB,MACtC,oBAAC,KAAD;KAAG,WAAU;KAAwC,IAAI;eACtD;IACA,CAAA,CAEF;;GACJ,SACC,oBAAC,QAAD;IACE,YAAW;IACX,oBACE,eAAe,QAAQ,gBAAgB,KAAK,wBAAwB,KAAA;IAEtE,cAAY,EAAE,uCAAuC,cAAc;IACnE,UAAA;IACA,WAAU;IACV,SAAS;IACT,MAAK;IACL,SAAQ;cAER,oBAAC,WAAD,CAAY,CAAA;GACN,CAAA;EAEP;;AAET;AAMA,IAAM,cAAc,EAAE,UAAU,gBAC9B,oBAAC,OAAD;CAAK,WAAW,KAAK,0BAA0B,SAAS;CAAI;AAAc,CAAA;AAO5E,IAAM,gBAAgB,EAAE,UAAU,gBAChC,oBAAC,OAAD;CAAK,WAAW,KAAK,4BAA4B,SAAS;CAAI;AAAc,CAAA;AAO9E,IAAM,wBAAwB,EAAE,UAAU,gBACxC,oBAAC,OAAD;CAAK,WAAW,KAAK,sCAAsC,SAAS;CAAI;AAAc,CAAA;AAGxF,IAAM,uCAAuC,EAAE,WAAW,GAAG,YAC3D,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAM,qCAAqC,EAAE,WAAW,GAAG,YACzD,oBAAC,QAAD;CACE,YAAW;CACX,WAAW,KAAK,6CAA6C,SAAS;CACtE,MAAK;CACL,SAAQ;CACR,GAAI;AACL,CAAA;AAGH,IAAa,SAAS;CACpB,MAAM;CACN,QAAQ;CACR,gBAAgB;CAChB,6BAA6B;CAC7B,+BAA+B;CAC/B,QAAQ;CACR,MAAM;AACR"}
@@ -30,7 +30,15 @@ function usePopoverPosition({ allowFlip = true, allowShift = true, autoUpdateOpt
30
30
  ...offsetMiddleware ? [offsetMiddleware] : [],
31
31
  ...autoMw ? [autoMw] : allowFlip && !isSidePlacement ? [flip()] : [],
32
32
  ...allowShift ? [shift(mergedShiftOptions)] : [],
33
- ...fitAvailableSpace ? [size({ apply: () => {} })] : []
33
+ ...fitAvailableSpace ? [size({
34
+ apply({ availableHeight, availableWidth, elements }) {
35
+ Object.assign(elements.floating.style, {
36
+ maxHeight: `${Math.max(0, availableHeight)}px`,
37
+ maxWidth: `${Math.max(0, availableWidth)}px`
38
+ });
39
+ },
40
+ padding: 8
41
+ })] : []
34
42
  ],
35
43
  placement: String(placement).startsWith("auto") ? "bottom" : placement,
36
44
  strategy: "fixed",
@@ -1 +1 @@
1
- {"version":3,"file":"usePopoverPosition.mjs","names":[],"sources":["../../../../../src/components/Dialog/hooks/usePopoverPosition.ts"],"sourcesContent":["import {\n autoPlacement,\n type AutoPlacementOptions,\n autoUpdate,\n flip as flipMw,\n offset as offsetMw,\n type Placement,\n shift as shiftMw,\n size as sizeMw,\n useFloating,\n} from '@floating-ui/react';\n\nconst hasResizeObserver = typeof window !== 'undefined' && 'ResizeObserver' in window;\n\nexport type PopperLikePlacement = Placement | 'auto' | 'auto-start' | 'auto-end';\n\nfunction autoMiddlewareFor(p: PopperLikePlacement) {\n if (!String(p).startsWith('auto')) return null;\n const alignment: AutoPlacementOptions['alignment'] =\n p === 'auto-start' ? 'start' : p === 'auto-end' ? 'end' : undefined;\n return autoPlacement({ alignment });\n}\n\nexport type OffsetOpt =\n | number\n | { mainAxis?: number; crossAxis?: number; alignmentAxis?: number }\n | [crossAxis: number, mainAxis: number]; // keep your tuple compat\n\nfunction toOffsetMw(opt?: OffsetOpt) {\n if (opt == null) return null;\n if (Array.isArray(opt)) {\n const [crossAxis, mainAxis] = opt;\n return offsetMw({ crossAxis, mainAxis });\n }\n if (typeof opt === 'number') return offsetMw(opt);\n return offsetMw(opt);\n}\n\nexport type UsePopoverParams = {\n placement?: PopperLikePlacement;\n /** Add flip() when placement is not 'auto*' */\n allowFlip?: boolean;\n /** Keep in viewport; default true to match common popper setups */\n allowShift?: boolean;\n /** Extra options for Floating UI shift() middleware (merged with default padding: 8) */\n shiftOptions?: Parameters<typeof shiftMw>[0];\n /** The floating UI is fitted to the available space (by constraining its max size) instead of letting it overflow; default false */\n fitAvailableSpace?: boolean;\n /** Offset (number, object, or [crossAxis, mainAxis] tuple) */\n offset?: OffsetOpt;\n /**\n * Freeze behavior like Popper's eventListeners: { scroll:false, resize:false }.\n * If true → no autoUpdate (you can call `update()` manually).\n */\n freeze?: boolean;\n /**\n * Fine-grained control of autoUpdate triggers (only if freeze=false).\n * Defaults match Popper's \"disabled\" example when all set to false.\n */\n autoUpdateOptions?: Partial<Parameters<typeof autoUpdate>[3]>;\n};\n\nexport function usePopoverPosition({\n allowFlip = true,\n allowShift = true,\n autoUpdateOptions,\n fitAvailableSpace = false,\n freeze = false,\n offset,\n placement = 'bottom-start',\n shiftOptions,\n}: UsePopoverParams) {\n const autoMw = autoMiddlewareFor(placement);\n const offsetMiddleware = toOffsetMw(offset);\n const isSidePlacement = placement.startsWith('left') || placement.startsWith('right');\n const mergedShiftOptions = shiftOptions\n ? { padding: 8, ...shiftOptions }\n : { padding: 8 };\n\n const middleware = [\n // offset first (mirrors common Popper setups)\n ...(offsetMiddleware ? [offsetMiddleware] : []),\n\n // choose between autoPlacement (Popper's \"auto*\") OR flip()\n // only allow flip when not explicitly 'left*' or 'right*'\n ...(autoMw ? [autoMw] : allowFlip && !isSidePlacement ? [flipMw()] : []),\n\n // viewport collision adjustments\n ...(allowShift ? [shiftMw(mergedShiftOptions)] : []),\n\n // optional size constraining\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n ...(fitAvailableSpace ? [sizeMw({ apply: () => {} })] : []),\n ];\n\n // if placement is 'auto*', seed with any static placement; autoPlacement will pick the final one\n const seedPlacement: Placement = String(placement).startsWith('auto')\n ? 'bottom'\n : (placement as Placement);\n\n return useFloating({\n middleware,\n placement: seedPlacement,\n strategy: 'fixed',\n whileElementsMounted: freeze\n ? undefined\n : (reference, floating, update) =>\n autoUpdate(reference, floating, update, {\n ancestorResize: true,\n ancestorScroll: true,\n animationFrame: false,\n elementResize: hasResizeObserver,\n ...autoUpdateOptions,\n }),\n });\n}\n"],"mappings":";;AAYA,IAAM,oBAAoB,OAAO,WAAW,eAAe,oBAAoB;AAI/E,SAAS,kBAAkB,GAAwB;CACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,MAAM,GAAG,OAAO;CAG1C,OAAO,cAAc,EAAE,WADrB,MAAM,eAAe,UAAU,MAAM,aAAa,QAAQ,KAAA,EAC3B,CAAC;AACpC;AAOA,SAAS,WAAW,KAAiB;CACnC,IAAI,OAAO,MAAM,OAAO;CACxB,IAAI,MAAM,QAAQ,GAAG,GAAG;EACtB,MAAM,CAAC,WAAW,YAAY;EAC9B,OAAO,OAAS;GAAE;GAAW;EAAS,CAAC;CACzC;CACA,IAAI,OAAO,QAAQ,UAAU,OAAO,OAAS,GAAG;CAChD,OAAO,OAAS,GAAG;AACrB;AA0BA,SAAgB,mBAAmB,EACjC,YAAY,MACZ,aAAa,MACb,mBACA,oBAAoB,OACpB,SAAS,OACT,QACA,YAAY,gBACZ,gBACmB;CACnB,MAAM,SAAS,kBAAkB,SAAS;CAC1C,MAAM,mBAAmB,WAAW,MAAM;CAC1C,MAAM,kBAAkB,UAAU,WAAW,MAAM,KAAK,UAAU,WAAW,OAAO;CACpF,MAAM,qBAAqB,eACvB;EAAE,SAAS;EAAG,GAAG;CAAa,IAC9B,EAAE,SAAS,EAAE;CAuBjB,OAAO,YAAY;EACjB,YAAA;GApBA,GAAI,mBAAmB,CAAC,gBAAgB,IAAI,CAAC;GAI7C,GAAI,SAAS,CAAC,MAAM,IAAI,aAAa,CAAC,kBAAkB,CAAC,KAAO,CAAC,IAAI,CAAC;GAGtE,GAAI,aAAa,CAAC,MAAQ,kBAAkB,CAAC,IAAI,CAAC;GAIlD,GAAI,oBAAoB,CAAC,KAAO,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;EASzD;EACA,WAN+B,OAAO,SAAS,CAAC,CAAC,WAAW,MAAM,IAChE,WACC;EAKH,UAAU;EACV,sBAAsB,SAClB,KAAA,KACC,WAAW,UAAU,WACpB,WAAW,WAAW,UAAU,QAAQ;GACtC,gBAAgB;GAChB,gBAAgB;GAChB,gBAAgB;GAChB,eAAe;GACf,GAAG;EACL,CAAC;CACT,CAAC;AACH"}
1
+ {"version":3,"file":"usePopoverPosition.mjs","names":[],"sources":["../../../../../src/components/Dialog/hooks/usePopoverPosition.ts"],"sourcesContent":["import {\n autoPlacement,\n type AutoPlacementOptions,\n autoUpdate,\n flip as flipMw,\n offset as offsetMw,\n type Placement,\n shift as shiftMw,\n size as sizeMw,\n useFloating,\n} from '@floating-ui/react';\n\nconst hasResizeObserver = typeof window !== 'undefined' && 'ResizeObserver' in window;\n\nexport type PopperLikePlacement = Placement | 'auto' | 'auto-start' | 'auto-end';\n\nfunction autoMiddlewareFor(p: PopperLikePlacement) {\n if (!String(p).startsWith('auto')) return null;\n const alignment: AutoPlacementOptions['alignment'] =\n p === 'auto-start' ? 'start' : p === 'auto-end' ? 'end' : undefined;\n return autoPlacement({ alignment });\n}\n\nexport type OffsetOpt =\n | number\n | { mainAxis?: number; crossAxis?: number; alignmentAxis?: number }\n | [crossAxis: number, mainAxis: number]; // keep your tuple compat\n\nfunction toOffsetMw(opt?: OffsetOpt) {\n if (opt == null) return null;\n if (Array.isArray(opt)) {\n const [crossAxis, mainAxis] = opt;\n return offsetMw({ crossAxis, mainAxis });\n }\n if (typeof opt === 'number') return offsetMw(opt);\n return offsetMw(opt);\n}\n\nexport type UsePopoverParams = {\n placement?: PopperLikePlacement;\n /** Add flip() when placement is not 'auto*' */\n allowFlip?: boolean;\n /** Keep in viewport; default true to match common popper setups */\n allowShift?: boolean;\n /** Extra options for Floating UI shift() middleware (merged with default padding: 8) */\n shiftOptions?: Parameters<typeof shiftMw>[0];\n /** The floating UI is fitted to the available space (by constraining its max size) instead of letting it overflow; default false */\n fitAvailableSpace?: boolean;\n /** Offset (number, object, or [crossAxis, mainAxis] tuple) */\n offset?: OffsetOpt;\n /**\n * Freeze behavior like Popper's eventListeners: { scroll:false, resize:false }.\n * If true → no autoUpdate (you can call `update()` manually).\n */\n freeze?: boolean;\n /**\n * Fine-grained control of autoUpdate triggers (only if freeze=false).\n * Defaults match Popper's \"disabled\" example when all set to false.\n */\n autoUpdateOptions?: Partial<Parameters<typeof autoUpdate>[3]>;\n};\n\nexport function usePopoverPosition({\n allowFlip = true,\n allowShift = true,\n autoUpdateOptions,\n fitAvailableSpace = false,\n freeze = false,\n offset,\n placement = 'bottom-start',\n shiftOptions,\n}: UsePopoverParams) {\n const autoMw = autoMiddlewareFor(placement);\n const offsetMiddleware = toOffsetMw(offset);\n const isSidePlacement = placement.startsWith('left') || placement.startsWith('right');\n const mergedShiftOptions = shiftOptions\n ? { padding: 8, ...shiftOptions }\n : { padding: 8 };\n\n const middleware = [\n // offset first (mirrors common Popper setups)\n ...(offsetMiddleware ? [offsetMiddleware] : []),\n\n // choose between autoPlacement (Popper's \"auto*\") OR flip()\n // only allow flip when not explicitly 'left*' or 'right*'\n ...(autoMw ? [autoMw] : allowFlip && !isSidePlacement ? [flipMw()] : []),\n\n // viewport collision adjustments\n ...(allowShift ? [shiftMw(mergedShiftOptions)] : []),\n\n // optional size constraining: cap the floating element to the space left in the viewport\n // (after flip/shift) so a tall popover scrolls inside the viewport instead of overflowing it.\n ...(fitAvailableSpace\n ? [\n sizeMw({\n apply({ availableHeight, availableWidth, elements }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${Math.max(0, availableHeight)}px`,\n maxWidth: `${Math.max(0, availableWidth)}px`,\n });\n },\n padding: 8,\n }),\n ]\n : []),\n ];\n\n // if placement is 'auto*', seed with any static placement; autoPlacement will pick the final one\n const seedPlacement: Placement = String(placement).startsWith('auto')\n ? 'bottom'\n : (placement as Placement);\n\n return useFloating({\n middleware,\n placement: seedPlacement,\n strategy: 'fixed',\n whileElementsMounted: freeze\n ? undefined\n : (reference, floating, update) =>\n autoUpdate(reference, floating, update, {\n ancestorResize: true,\n ancestorScroll: true,\n animationFrame: false,\n elementResize: hasResizeObserver,\n ...autoUpdateOptions,\n }),\n });\n}\n"],"mappings":";;AAYA,IAAM,oBAAoB,OAAO,WAAW,eAAe,oBAAoB;AAI/E,SAAS,kBAAkB,GAAwB;CACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,MAAM,GAAG,OAAO;CAG1C,OAAO,cAAc,EAAE,WADrB,MAAM,eAAe,UAAU,MAAM,aAAa,QAAQ,KAAA,EAC3B,CAAC;AACpC;AAOA,SAAS,WAAW,KAAiB;CACnC,IAAI,OAAO,MAAM,OAAO;CACxB,IAAI,MAAM,QAAQ,GAAG,GAAG;EACtB,MAAM,CAAC,WAAW,YAAY;EAC9B,OAAO,OAAS;GAAE;GAAW;EAAS,CAAC;CACzC;CACA,IAAI,OAAO,QAAQ,UAAU,OAAO,OAAS,GAAG;CAChD,OAAO,OAAS,GAAG;AACrB;AA0BA,SAAgB,mBAAmB,EACjC,YAAY,MACZ,aAAa,MACb,mBACA,oBAAoB,OACpB,SAAS,OACT,QACA,YAAY,gBACZ,gBACmB;CACnB,MAAM,SAAS,kBAAkB,SAAS;CAC1C,MAAM,mBAAmB,WAAW,MAAM;CAC1C,MAAM,kBAAkB,UAAU,WAAW,MAAM,KAAK,UAAU,WAAW,OAAO;CACpF,MAAM,qBAAqB,eACvB;EAAE,SAAS;EAAG,GAAG;CAAa,IAC9B,EAAE,SAAS,EAAE;CAmCjB,OAAO,YAAY;EACjB,YAAA;GAhCA,GAAI,mBAAmB,CAAC,gBAAgB,IAAI,CAAC;GAI7C,GAAI,SAAS,CAAC,MAAM,IAAI,aAAa,CAAC,kBAAkB,CAAC,KAAO,CAAC,IAAI,CAAC;GAGtE,GAAI,aAAa,CAAC,MAAQ,kBAAkB,CAAC,IAAI,CAAC;GAIlD,GAAI,oBACA,CACE,KAAO;IACL,MAAM,EAAE,iBAAiB,gBAAgB,YAAY;KACnD,OAAO,OAAO,SAAS,SAAS,OAAO;MACrC,WAAW,GAAG,KAAK,IAAI,GAAG,eAAe,EAAE;MAC3C,UAAU,GAAG,KAAK,IAAI,GAAG,cAAc,EAAE;KAC3C,CAAC;IACH;IACA,SAAS;GACX,CAAC,CACH,IACA,CAAC;EASL;EACA,WAN+B,OAAO,SAAS,CAAC,CAAC,WAAW,MAAM,IAChE,WACC;EAKH,UAAU;EACV,sBAAsB,SAClB,KAAA,KACC,WAAW,UAAU,WACpB,WAAW,WAAW,UAAU,QAAQ;GACtC,gBAAgB;GAChB,gBAAgB;GAChB,gBAAgB;GAChB,eAAe;GACf,GAAG;EACL,CAAC;CACT,CAAC;AACH"}
@@ -1,4 +1,4 @@
1
- import { StateStore } from "stream-chat";
1
+ import { StateStore } from "@stream-io/state-store";
2
2
  import { nanoid } from "nanoid";
3
3
  //#region src/components/Dialog/service/DialogManager.ts
4
4
  /**
@@ -12,25 +12,14 @@ import { nanoid } from "nanoid";
12
12
  * - `dialog.remove()` - removes the dialog object reference from the state (primarily for cleanup purposes)
13
13
  */
14
14
  var DialogManager = class {
15
+ /** Manager-level outside click policy used by DialogPortal dismiss handlers. */
16
+ closeOnClickOutside;
17
+ id;
18
+ state = new StateStore({
19
+ dialogsById: {},
20
+ openedDialogIds: []
21
+ });
15
22
  constructor({ closeOnClickOutside = true, id } = {}) {
16
- this.state = new StateStore({
17
- dialogsById: {},
18
- openedDialogIds: []
19
- });
20
- this.remove = (id) => {
21
- const dialog = this.get(id);
22
- if (!dialog) return;
23
- if (dialog.removalTimeout) clearTimeout(dialog.removalTimeout);
24
- this.state.next((current) => {
25
- const newDialogs = { ...current.dialogsById };
26
- delete newDialogs[id];
27
- return {
28
- ...current,
29
- dialogsById: newDialogs,
30
- openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id)
31
- };
32
- });
33
- };
34
23
  this.closeOnClickOutside = closeOnClickOutside;
35
24
  this.id = id ?? nanoid();
36
25
  }
@@ -124,6 +113,20 @@ var DialogManager = class {
124
113
  if (this.state.getLatestValue().dialogsById[params.id]?.isOpen) this.close(params.id);
125
114
  else this.open(params, closeAll);
126
115
  }
116
+ remove = (id) => {
117
+ const dialog = this.get(id);
118
+ if (!dialog) return;
119
+ if (dialog.removalTimeout) clearTimeout(dialog.removalTimeout);
120
+ this.state.next((current) => {
121
+ const newDialogs = { ...current.dialogsById };
122
+ delete newDialogs[id];
123
+ return {
124
+ ...current,
125
+ dialogsById: newDialogs,
126
+ openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id)
127
+ };
128
+ });
129
+ };
127
130
  /**
128
131
  * Marks the dialog state as unused. If the dialog id is referenced again quickly,
129
132
  * the state will not be removed. Otherwise, the state will be removed after
@@ -1 +1 @@
1
- {"version":3,"file":"DialogManager.mjs","names":[],"sources":["../../../../../src/components/Dialog/service/DialogManager.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { StateStore } from 'stream-chat';\n\nexport type GetDialogParams = {\n id: DialogId;\n};\nexport type GetOrCreateDialogParams = GetDialogParams & {\n /**\n * Optional per-dialog override.\n * If undefined, manager-level `closeOnClickOutside` is used.\n */\n closeOnClickOutside?: boolean;\n};\n\ntype DialogId = string;\n\nexport type Dialog = {\n close: () => void;\n closeOnClickOutside?: boolean;\n id: DialogId;\n isOpen: boolean | undefined;\n open: (zIndex?: number) => void;\n removalTimeout: NodeJS.Timeout | undefined;\n remove: () => void;\n toggle: (closeAll?: boolean) => void;\n};\n\nexport type DialogManagerOptions = {\n /** Enables closing all dialogs in this manager when clicking overlay/outside area. */\n closeOnClickOutside?: boolean;\n id?: string;\n};\n\ntype Dialogs = Record<DialogId, Dialog>;\n\nexport type DialogManagerState = {\n dialogsById: Dialogs;\n openedDialogIds: DialogId[];\n};\n\n/**\n * Keeps a map of Dialog objects.\n * Dialog can be controlled via `Dialog` object retrieved using `useDialog()` hook.\n * The hook returns an object with the following API:\n *\n * - `dialog.open()` - opens the dialog\n * - `dialog.close()` - closes the dialog\n * - `dialog.toggle()` - toggles the dialog open state. Accepts boolean argument closeAll. If enabled closes any other dialog that would be open.\n * - `dialog.remove()` - removes the dialog object reference from the state (primarily for cleanup purposes)\n */\nexport class DialogManager {\n /** Manager-level outside click policy used by DialogPortal dismiss handlers. */\n closeOnClickOutside: boolean;\n id: string;\n state = new StateStore<DialogManagerState>({\n dialogsById: {},\n openedDialogIds: [],\n });\n\n constructor({ closeOnClickOutside = true, id }: DialogManagerOptions = {}) {\n this.closeOnClickOutside = closeOnClickOutside;\n this.id = id ?? nanoid();\n }\n\n get openDialogCount() {\n return this.state.getLatestValue().openedDialogIds.length;\n }\n\n get(id: DialogId): Dialog | undefined {\n return this.state.getLatestValue().dialogsById[id];\n }\n\n getOrCreate({ closeOnClickOutside, id }: GetOrCreateDialogParams) {\n let dialog = this.get(id);\n if (!dialog) {\n dialog = {\n close: () => {\n this.close(id);\n },\n closeOnClickOutside,\n id,\n isOpen: false,\n open: () => {\n this.open({ id });\n },\n removalTimeout: undefined,\n remove: () => {\n this.remove(id);\n },\n toggle: (closeAll = false) => {\n this.toggle({ id }, closeAll);\n },\n };\n this.state.next((current) => ({\n ...current,\n dialogsById: { ...current.dialogsById, [id]: dialog as Dialog },\n }));\n }\n\n const shouldUpdateDialogSettings =\n dialog.closeOnClickOutside !== closeOnClickOutside || !!dialog.removalTimeout;\n\n if (shouldUpdateDialogSettings) {\n if (dialog.removalTimeout) clearTimeout(dialog.removalTimeout);\n this.state.next((current) => ({\n ...current,\n dialogsById: {\n ...current.dialogsById,\n [id]: {\n ...current.dialogsById[id],\n closeOnClickOutside,\n removalTimeout: undefined,\n },\n },\n openedDialogIds: current.dialogsById[id]?.isOpen\n ? [...current.openedDialogIds.filter((dialogId) => dialogId !== id), id]\n : current.openedDialogIds,\n }));\n }\n\n return dialog;\n }\n\n open(params: GetOrCreateDialogParams, closeRest?: boolean) {\n const dialog = this.getOrCreate(params);\n if (dialog.isOpen) return;\n if (closeRest) {\n this.closeAll();\n }\n this.state.next((current) => ({\n ...current,\n dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: true } },\n openedDialogIds: [\n ...current.openedDialogIds.filter((dialogId) => dialogId !== dialog.id),\n dialog.id,\n ],\n }));\n }\n\n close(id: DialogId) {\n const dialog = this.state.getLatestValue().dialogsById[id];\n if (!dialog?.isOpen) return;\n this.state.next((current) => ({\n ...current,\n dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: false } },\n openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id),\n }));\n }\n\n closeAll() {\n Object.values(this.state.getLatestValue().dialogsById).forEach((dialog) =>\n dialog.close(),\n );\n }\n\n toggle(params: GetOrCreateDialogParams, closeAll = false) {\n if (this.state.getLatestValue().dialogsById[params.id]?.isOpen) {\n this.close(params.id);\n } else {\n this.open(params, closeAll);\n }\n }\n\n remove = (id: DialogId) => {\n const dialog = this.get(id);\n if (!dialog) return;\n\n if (dialog.removalTimeout) {\n clearTimeout(dialog.removalTimeout);\n }\n\n this.state.next((current) => {\n const newDialogs = { ...current.dialogsById };\n delete newDialogs[id];\n return {\n ...current,\n dialogsById: newDialogs,\n openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id),\n };\n });\n };\n\n /**\n * Marks the dialog state as unused. If the dialog id is referenced again quickly,\n * the state will not be removed. Otherwise, the state will be removed after\n * a short timeout.\n */\n markForRemoval(id: DialogId) {\n const dialog = this.get(id);\n\n if (!dialog) {\n return;\n }\n\n this.state.next((current) => ({\n ...current,\n dialogsById: {\n ...current.dialogsById,\n [id]: {\n ...dialog,\n removalTimeout: setTimeout(() => {\n this.remove(id);\n }, 16),\n },\n },\n openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id),\n }));\n }\n\n cancelPendingRemoval(id: DialogId) {\n const dialog = this.get(id);\n\n if (!dialog?.removalTimeout) {\n return;\n }\n\n clearTimeout(dialog.removalTimeout);\n\n this.state.next((current) => ({\n ...current,\n dialogsById: {\n ...current.dialogsById,\n [id]: {\n ...current.dialogsById[id],\n removalTimeout: undefined,\n },\n },\n openedDialogIds: current.dialogsById[id]?.isOpen\n ? [...current.openedDialogIds.filter((dialogId) => dialogId !== id), id]\n : current.openedDialogIds,\n }));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DialogManager.mjs","names":[],"sources":["../../../../../src/components/Dialog/service/DialogManager.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { StateStore } from '@stream-io/state-store';\n\nexport type GetDialogParams = {\n id: DialogId;\n};\nexport type GetOrCreateDialogParams = GetDialogParams & {\n /**\n * Optional per-dialog override.\n * If undefined, manager-level `closeOnClickOutside` is used.\n */\n closeOnClickOutside?: boolean;\n};\n\ntype DialogId = string;\n\nexport type Dialog = {\n close: () => void;\n closeOnClickOutside?: boolean;\n id: DialogId;\n isOpen: boolean | undefined;\n open: (zIndex?: number) => void;\n removalTimeout: NodeJS.Timeout | undefined;\n remove: () => void;\n toggle: (closeAll?: boolean) => void;\n};\n\nexport type DialogManagerOptions = {\n /** Enables closing all dialogs in this manager when clicking overlay/outside area. */\n closeOnClickOutside?: boolean;\n id?: string;\n};\n\ntype Dialogs = Record<DialogId, Dialog>;\n\nexport type DialogManagerState = {\n dialogsById: Dialogs;\n openedDialogIds: DialogId[];\n};\n\n/**\n * Keeps a map of Dialog objects.\n * Dialog can be controlled via `Dialog` object retrieved using `useDialog()` hook.\n * The hook returns an object with the following API:\n *\n * - `dialog.open()` - opens the dialog\n * - `dialog.close()` - closes the dialog\n * - `dialog.toggle()` - toggles the dialog open state. Accepts boolean argument closeAll. If enabled closes any other dialog that would be open.\n * - `dialog.remove()` - removes the dialog object reference from the state (primarily for cleanup purposes)\n */\nexport class DialogManager {\n /** Manager-level outside click policy used by DialogPortal dismiss handlers. */\n closeOnClickOutside: boolean;\n id: string;\n state = new StateStore<DialogManagerState>({\n dialogsById: {},\n openedDialogIds: [],\n });\n\n constructor({ closeOnClickOutside = true, id }: DialogManagerOptions = {}) {\n this.closeOnClickOutside = closeOnClickOutside;\n this.id = id ?? nanoid();\n }\n\n get openDialogCount() {\n return this.state.getLatestValue().openedDialogIds.length;\n }\n\n get(id: DialogId): Dialog | undefined {\n return this.state.getLatestValue().dialogsById[id];\n }\n\n getOrCreate({ closeOnClickOutside, id }: GetOrCreateDialogParams) {\n let dialog = this.get(id);\n if (!dialog) {\n dialog = {\n close: () => {\n this.close(id);\n },\n closeOnClickOutside,\n id,\n isOpen: false,\n open: () => {\n this.open({ id });\n },\n removalTimeout: undefined,\n remove: () => {\n this.remove(id);\n },\n toggle: (closeAll = false) => {\n this.toggle({ id }, closeAll);\n },\n };\n this.state.next((current) => ({\n ...current,\n dialogsById: { ...current.dialogsById, [id]: dialog as Dialog },\n }));\n }\n\n const shouldUpdateDialogSettings =\n dialog.closeOnClickOutside !== closeOnClickOutside || !!dialog.removalTimeout;\n\n if (shouldUpdateDialogSettings) {\n if (dialog.removalTimeout) clearTimeout(dialog.removalTimeout);\n this.state.next((current) => ({\n ...current,\n dialogsById: {\n ...current.dialogsById,\n [id]: {\n ...current.dialogsById[id],\n closeOnClickOutside,\n removalTimeout: undefined,\n },\n },\n openedDialogIds: current.dialogsById[id]?.isOpen\n ? [...current.openedDialogIds.filter((dialogId) => dialogId !== id), id]\n : current.openedDialogIds,\n }));\n }\n\n return dialog;\n }\n\n open(params: GetOrCreateDialogParams, closeRest?: boolean) {\n const dialog = this.getOrCreate(params);\n if (dialog.isOpen) return;\n if (closeRest) {\n this.closeAll();\n }\n this.state.next((current) => ({\n ...current,\n dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: true } },\n openedDialogIds: [\n ...current.openedDialogIds.filter((dialogId) => dialogId !== dialog.id),\n dialog.id,\n ],\n }));\n }\n\n close(id: DialogId) {\n const dialog = this.state.getLatestValue().dialogsById[id];\n if (!dialog?.isOpen) return;\n this.state.next((current) => ({\n ...current,\n dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: false } },\n openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id),\n }));\n }\n\n closeAll() {\n Object.values(this.state.getLatestValue().dialogsById).forEach((dialog) =>\n dialog.close(),\n );\n }\n\n toggle(params: GetOrCreateDialogParams, closeAll = false) {\n if (this.state.getLatestValue().dialogsById[params.id]?.isOpen) {\n this.close(params.id);\n } else {\n this.open(params, closeAll);\n }\n }\n\n remove = (id: DialogId) => {\n const dialog = this.get(id);\n if (!dialog) return;\n\n if (dialog.removalTimeout) {\n clearTimeout(dialog.removalTimeout);\n }\n\n this.state.next((current) => {\n const newDialogs = { ...current.dialogsById };\n delete newDialogs[id];\n return {\n ...current,\n dialogsById: newDialogs,\n openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id),\n };\n });\n };\n\n /**\n * Marks the dialog state as unused. If the dialog id is referenced again quickly,\n * the state will not be removed. Otherwise, the state will be removed after\n * a short timeout.\n */\n markForRemoval(id: DialogId) {\n const dialog = this.get(id);\n\n if (!dialog) {\n return;\n }\n\n this.state.next((current) => ({\n ...current,\n dialogsById: {\n ...current.dialogsById,\n [id]: {\n ...dialog,\n removalTimeout: setTimeout(() => {\n this.remove(id);\n }, 16),\n },\n },\n openedDialogIds: current.openedDialogIds.filter((dialogId) => dialogId !== id),\n }));\n }\n\n cancelPendingRemoval(id: DialogId) {\n const dialog = this.get(id);\n\n if (!dialog?.removalTimeout) {\n return;\n }\n\n clearTimeout(dialog.removalTimeout);\n\n this.state.next((current) => ({\n ...current,\n dialogsById: {\n ...current.dialogsById,\n [id]: {\n ...current.dialogsById[id],\n removalTimeout: undefined,\n },\n },\n openedDialogIds: current.dialogsById[id]?.isOpen\n ? [...current.openedDialogIds.filter((dialogId) => dialogId !== id), id]\n : current.openedDialogIds,\n }));\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAkDA,IAAa,gBAAb,MAA2B;;CAEzB;CACA;CACA,QAAQ,IAAI,WAA+B;EACzC,aAAa,CAAC;EACd,iBAAiB,CAAC;CACpB,CAAC;CAED,YAAY,EAAE,sBAAsB,MAAM,OAA6B,CAAC,GAAG;EACzE,KAAK,sBAAsB;EAC3B,KAAK,KAAK,MAAM,OAAO;CACzB;CAEA,IAAI,kBAAkB;EACpB,OAAO,KAAK,MAAM,eAAe,CAAC,CAAC,gBAAgB;CACrD;CAEA,IAAI,IAAkC;EACpC,OAAO,KAAK,MAAM,eAAe,CAAC,CAAC,YAAY;CACjD;CAEA,YAAY,EAAE,qBAAqB,MAA+B;EAChE,IAAI,SAAS,KAAK,IAAI,EAAE;EACxB,IAAI,CAAC,QAAQ;GACX,SAAS;IACP,aAAa;KACX,KAAK,MAAM,EAAE;IACf;IACA;IACA;IACA,QAAQ;IACR,YAAY;KACV,KAAK,KAAK,EAAE,GAAG,CAAC;IAClB;IACA,gBAAgB,KAAA;IAChB,cAAc;KACZ,KAAK,OAAO,EAAE;IAChB;IACA,SAAS,WAAW,UAAU;KAC5B,KAAK,OAAO,EAAE,GAAG,GAAG,QAAQ;IAC9B;GACF;GACA,KAAK,MAAM,MAAM,aAAa;IAC5B,GAAG;IACH,aAAa;KAAE,GAAG,QAAQ;MAAc,KAAK;IAAiB;GAChE,EAAE;EACJ;EAKA,IAFE,OAAO,wBAAwB,uBAAuB,CAAC,CAAC,OAAO,gBAEjC;GAC9B,IAAI,OAAO,gBAAgB,aAAa,OAAO,cAAc;GAC7D,KAAK,MAAM,MAAM,aAAa;IAC5B,GAAG;IACH,aAAa;KACX,GAAG,QAAQ;MACV,KAAK;MACJ,GAAG,QAAQ,YAAY;MACvB;MACA,gBAAgB,KAAA;KAClB;IACF;IACA,iBAAiB,QAAQ,YAAY,GAAG,EAAE,SACtC,CAAC,GAAG,QAAQ,gBAAgB,QAAQ,aAAa,aAAa,EAAE,GAAG,EAAE,IACrE,QAAQ;GACd,EAAE;EACJ;EAEA,OAAO;CACT;CAEA,KAAK,QAAiC,WAAqB;EACzD,MAAM,SAAS,KAAK,YAAY,MAAM;EACtC,IAAI,OAAO,QAAQ;EACnB,IAAI,WACF,KAAK,SAAS;EAEhB,KAAK,MAAM,MAAM,aAAa;GAC5B,GAAG;GACH,aAAa;IAAE,GAAG,QAAQ;KAAc,OAAO,KAAK;KAAE,GAAG;KAAQ,QAAQ;IAAK;GAAE;GAChF,iBAAiB,CACf,GAAG,QAAQ,gBAAgB,QAAQ,aAAa,aAAa,OAAO,EAAE,GACtE,OAAO,EACT;EACF,EAAE;CACJ;CAEA,MAAM,IAAc;EAClB,MAAM,SAAS,KAAK,MAAM,eAAe,CAAC,CAAC,YAAY;EACvD,IAAI,CAAC,QAAQ,QAAQ;EACrB,KAAK,MAAM,MAAM,aAAa;GAC5B,GAAG;GACH,aAAa;IAAE,GAAG,QAAQ;KAAc,OAAO,KAAK;KAAE,GAAG;KAAQ,QAAQ;IAAM;GAAE;GACjF,iBAAiB,QAAQ,gBAAgB,QAAQ,aAAa,aAAa,EAAE;EAC/E,EAAE;CACJ;CAEA,WAAW;EACT,OAAO,OAAO,KAAK,MAAM,eAAe,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,WAC9D,OAAO,MAAM,CACf;CACF;CAEA,OAAO,QAAiC,WAAW,OAAO;EACxD,IAAI,KAAK,MAAM,eAAe,CAAC,CAAC,YAAY,OAAO,GAAG,EAAE,QACtD,KAAK,MAAM,OAAO,EAAE;OAEpB,KAAK,KAAK,QAAQ,QAAQ;CAE9B;CAEA,UAAU,OAAiB;EACzB,MAAM,SAAS,KAAK,IAAI,EAAE;EAC1B,IAAI,CAAC,QAAQ;EAEb,IAAI,OAAO,gBACT,aAAa,OAAO,cAAc;EAGpC,KAAK,MAAM,MAAM,YAAY;GAC3B,MAAM,aAAa,EAAE,GAAG,QAAQ,YAAY;GAC5C,OAAO,WAAW;GAClB,OAAO;IACL,GAAG;IACH,aAAa;IACb,iBAAiB,QAAQ,gBAAgB,QAAQ,aAAa,aAAa,EAAE;GAC/E;EACF,CAAC;CACH;;;;;;CAOA,eAAe,IAAc;EAC3B,MAAM,SAAS,KAAK,IAAI,EAAE;EAE1B,IAAI,CAAC,QACH;EAGF,KAAK,MAAM,MAAM,aAAa;GAC5B,GAAG;GACH,aAAa;IACX,GAAG,QAAQ;KACV,KAAK;KACJ,GAAG;KACH,gBAAgB,iBAAiB;MAC/B,KAAK,OAAO,EAAE;KAChB,GAAG,EAAE;IACP;GACF;GACA,iBAAiB,QAAQ,gBAAgB,QAAQ,aAAa,aAAa,EAAE;EAC/E,EAAE;CACJ;CAEA,qBAAqB,IAAc;EACjC,MAAM,SAAS,KAAK,IAAI,EAAE;EAE1B,IAAI,CAAC,QAAQ,gBACX;EAGF,aAAa,OAAO,cAAc;EAElC,KAAK,MAAM,MAAM,aAAa;GAC5B,GAAG;GACH,aAAa;IACX,GAAG,QAAQ;KACV,KAAK;KACJ,GAAG,QAAQ,YAAY;KACvB,gBAAgB,KAAA;IAClB;GACF;GACA,iBAAiB,QAAQ,YAAY,GAAG,EAAE,SACtC,CAAC,GAAG,QAAQ,gBAAgB,QAAQ,aAAa,aAAa,EAAE,GAAG,EAAE,IACrE,QAAQ;EACd,EAAE;CACJ;AACF"}
@@ -1,15 +1,16 @@
1
- import { useComponentContextIcons } from "../../context/useComponentContextIcons.mjs";
1
+ import { asDynamicKey } from "../../i18n/utils.mjs";
2
2
  import { useTranslationContext } from "../../context/TranslationContext.mjs";
3
+ import { useComponentContextIcons } from "../../context/useComponentContextIcons.mjs";
3
4
  import React from "react";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  //#region src/components/EmptyStateIndicator/EmptyStateIndicator.tsx
6
7
  var UnMemoizedEmptyStateIndicator = (props) => {
7
8
  const { listType, messageText } = props;
8
- const { t } = useTranslationContext("EmptyStateIndicator");
9
+ const { t } = useTranslationContext();
9
10
  const { IconMessageBubble, IconMessageBubbles } = useComponentContextIcons();
10
11
  if (listType === "thread") return null;
11
12
  if (listType === "channel") {
12
- const text = t("No conversations yet");
13
+ const text = t("emptyState.indicator.noConversationsYet.label", "No conversations yet");
13
14
  return /* @__PURE__ */ jsxs("div", {
14
15
  className: "str-chat__channel-list-empty",
15
16
  children: [/* @__PURE__ */ jsx(IconMessageBubbles, {}), /* @__PURE__ */ jsx("p", {
@@ -19,7 +20,7 @@ var UnMemoizedEmptyStateIndicator = (props) => {
19
20
  });
20
21
  }
21
22
  if (listType === "message") {
22
- const text = t(messageText || "Send a message to start the conversation");
23
+ const text = messageText ? t(asDynamicKey(messageText)) : t("emptyState.indicator.startConversation.label", "Send a message to start the conversation");
23
24
  return /* @__PURE__ */ jsxs("div", {
24
25
  className: "str-chat__empty-channel",
25
26
  children: [/* @__PURE__ */ jsx(IconMessageBubble, {}), /* @__PURE__ */ jsx("p", {
@@ -29,7 +30,7 @@ var UnMemoizedEmptyStateIndicator = (props) => {
29
30
  })]
30
31
  });
31
32
  }
32
- return /* @__PURE__ */ jsx("p", { children: t("No items exist") });
33
+ return /* @__PURE__ */ jsx("p", { children: t("emptyState.indicator.noItemsExist.text", "No items exist") });
33
34
  };
34
35
  var EmptyStateIndicator = React.memo(UnMemoizedEmptyStateIndicator);
35
36
  //#endregion