@ethora/chat-component 26.7.5 → 26.7.7

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 (174) hide show
  1. package/README.md +72 -16
  2. package/dist/ChatProfileModal-DehQM4Bo.js +2135 -0
  3. package/dist/FilePreviewModal-BcZLtVAy.js +743 -0
  4. package/dist/ManageDataModal-DWabKhSC.js +178 -0
  5. package/dist/MarkdownBody-CSY3YKDh.js +16874 -0
  6. package/dist/SideDrawer-DewJ-iPn.js +270 -0
  7. package/dist/UserProfileModal-BHZ0TULc.js +574 -0
  8. package/dist/UserSettingsModal-BxwVWNKo.js +50 -0
  9. package/dist/{VideoCallOverlay-C4M2I9oV.js → VideoCallOverlay-D5SuimGP.js} +9 -10
  10. package/dist/VisibilityModal-Bd67b4EM.js +132 -0
  11. package/dist/assets/icons.d.ts +30 -0
  12. package/dist/components/ContextMenu/ContextMenuComponents.d.ts +1 -3
  13. package/dist/components/EmojiPicker/LazyEmojiPicker.d.ts +3 -0
  14. package/dist/components/ExampleComponents/CustomMessage.d.ts +3 -3
  15. package/dist/components/Files/FilesList.d.ts +12 -0
  16. package/dist/components/Files/FilesPanel.d.ts +3 -0
  17. package/dist/components/Files/fileCategory.d.ts +13 -0
  18. package/dist/components/InputComponents/AttachmentPreview.d.ts +17 -0
  19. package/dist/components/InputComponents/MentionDropdown.d.ts +13 -0
  20. package/dist/components/InputComponents/MentionPickerModal.d.ts +19 -0
  21. package/dist/components/MainComponents/AttachmentList.d.ts +7 -0
  22. package/dist/components/MainComponents/ChatErrorBoundary.d.ts +53 -0
  23. package/dist/components/MainComponents/ChatErrorScreen.d.ts +24 -0
  24. package/dist/components/MainComponents/ChatRoomOpeningPreview.d.ts +24 -0
  25. package/dist/components/MainComponents/ChatWrapper.d.ts +1 -0
  26. package/dist/components/MainComponents/ChooseChatMessage.d.ts +11 -1
  27. package/dist/components/MainComponents/HeaderLogo.d.ts +18 -0
  28. package/dist/components/MainComponents/MediaMessage.d.ts +5 -0
  29. package/dist/components/MainComponents/MessageContainer.d.ts +2 -2
  30. package/dist/components/MainComponents/ReduxWrapper.d.ts +1 -2
  31. package/dist/components/MainComponents/SystemMessage.d.ts +1 -2
  32. package/dist/components/MenuRoom/MenuRoom.d.ts +1 -0
  33. package/dist/components/MessageBubble/CustomDivider.d.ts +3 -3
  34. package/dist/components/MessageBubble/Message.d.ts +2 -2
  35. package/dist/components/MessageBubble/MessageTranslate.d.ts +28 -10
  36. package/dist/components/MessageBubble/QuickReplies.d.ts +6 -5
  37. package/dist/components/Modals/ChatProfileModal/ChatProfileMemberRow.d.ts +18 -0
  38. package/dist/components/Modals/FilePreviewModal/FilePreviewModal.d.ts +17 -0
  39. package/dist/components/Modals/FilePreviewModal/ImageLightbox.d.ts +35 -0
  40. package/dist/components/Modals/FilePreviewModal/PdfView.d.ts +14 -3
  41. package/dist/components/Modals/Modal/Modal.d.ts +10 -0
  42. package/dist/components/Modals/Modal/ModalContent.d.ts +21 -0
  43. package/dist/components/Modals/ModalBox/ModalBox.d.ts +9 -0
  44. package/dist/components/Modals/ModalReportChat/ModalReportChat.d.ts +6 -1
  45. package/dist/components/Modals/ModalWrapper/ModalWrapper.d.ts +8 -0
  46. package/dist/components/Modals/NewChatModal/styledNewChatComponents.d.ts +12 -0
  47. package/dist/components/Modals/SettingsModals/SharedStyledComponents.d.ts +12 -0
  48. package/dist/components/Modals/SettingsModals/Visibility/StyledComponents.d.ts +1 -1
  49. package/dist/components/Modals/SideDrawer/DrawerProfileParts.d.ts +42 -0
  50. package/dist/components/Modals/SideDrawer/SideDrawer.d.ts +64 -0
  51. package/dist/components/Modals/SidePanel/SidePanel.d.ts +31 -0
  52. package/dist/components/Modals/UserProfileModal/EditUserModal.d.ts +5 -1
  53. package/dist/components/Modals/modalComponents.d.ts +6 -0
  54. package/dist/components/Modals/motionVariants.d.ts +37 -0
  55. package/dist/components/Modals/styledModalComponents.d.ts +13 -3
  56. package/dist/components/RoomComponents/ChatRoomItem.d.ts +0 -1
  57. package/dist/components/RoomComponents/OnlineUsersPopover.d.ts +0 -1
  58. package/dist/components/UsersList/StyledComponents.d.ts +5 -1
  59. package/dist/components/UsersList/UsersList.d.ts +23 -0
  60. package/dist/components/styled/Button.d.ts +11 -1
  61. package/dist/components/styled/ChatWrapperBox.d.ts +3 -1
  62. package/dist/components/styled/PdfMessage.d.ts +13 -0
  63. package/dist/components/styled/RoomListComponents/index.d.ts +22 -1
  64. package/dist/components/styled/SendInput.d.ts +19 -5
  65. package/dist/components/styled/StyledComponents.d.ts +1 -1
  66. package/dist/components/styled/StyledInputComponents/MediaComponents.d.ts +18 -0
  67. package/dist/components/styled/StyledInputComponents/StyledInputComponents.d.ts +21 -0
  68. package/dist/components/styled/TreadLabel.d.ts +2 -2
  69. package/dist/components/styled/UnsupportedType.d.ts +1 -1
  70. package/dist/context/ModalTransitionContext.d.ts +2 -0
  71. package/dist/examples/quiz/QuizDemo.d.ts +3 -0
  72. package/dist/examples/quiz/quizScript.d.ts +38 -0
  73. package/dist/examples/quiz/useDemoSession.d.ts +42 -0
  74. package/dist/examples/quiz/useQuizFlow.d.ts +47 -0
  75. package/dist/firebase-config.d.ts +2 -4
  76. package/dist/handleCopyClick-BoZWTBLC.js +108 -0
  77. package/dist/helpers/MarkdownBody.d.ts +7 -0
  78. package/dist/helpers/attachments.d.ts +33 -0
  79. package/dist/helpers/botMarkup.d.ts +30 -0
  80. package/dist/helpers/buildChatShareLink.d.ts +20 -0
  81. package/dist/helpers/cacheScope.d.ts +15 -1
  82. package/dist/helpers/constants/MODAL_TYPES.d.ts +13 -7
  83. package/dist/helpers/createRoomFromApi.d.ts +1 -1
  84. package/dist/helpers/ethoraLogger.d.ts +8 -0
  85. package/dist/helpers/fileKind.d.ts +17 -0
  86. package/dist/helpers/formatNumberWithCommas.d.ts +1 -1
  87. package/dist/helpers/hiddenRooms.d.ts +1 -1
  88. package/dist/helpers/historyPreloadScheduler.d.ts +1 -0
  89. package/dist/helpers/lazyEmoji.d.ts +3 -0
  90. package/dist/helpers/localStorageUser.d.ts +1 -1
  91. package/dist/helpers/markdownSanitizeSchema.d.ts +3 -0
  92. package/dist/helpers/mentions.d.ts +63 -0
  93. package/dist/helpers/parseMessageBody.d.ts +12 -2
  94. package/dist/helpers/pdf/loadPdfjs.d.ts +64 -0
  95. package/dist/helpers/remarkLineBreaks.d.ts +42 -0
  96. package/dist/helpers/resolveMessageTranslation.d.ts +34 -0
  97. package/dist/helpers/roomImageGallery.d.ts +53 -0
  98. package/dist/helpers/secureFileUrl.d.ts +8 -0
  99. package/dist/helpers/sendFailureWatchdog.d.ts +62 -0
  100. package/dist/helpers/transformTranslatations.d.ts +1 -2
  101. package/dist/hooks/pushSubscriptionSweep.d.ts +41 -0
  102. package/dist/hooks/useChatOpenPhase.d.ts +21 -0
  103. package/dist/hooks/useChatWrapperInit.d.ts +1 -0
  104. package/dist/hooks/useDelayedAction.d.ts +22 -0
  105. package/dist/hooks/useExclusiveRightPane.d.ts +25 -0
  106. package/dist/hooks/useExitTransition.d.ts +24 -0
  107. package/dist/hooks/useFilesEndpointSupport.d.ts +9 -0
  108. package/dist/hooks/useGetNewArchRoom.d.ts +3 -1
  109. package/dist/hooks/useInView.d.ts +17 -0
  110. package/dist/hooks/useMentionComposer.d.ts +45 -0
  111. package/dist/hooks/useMessageHeapState.d.ts +1 -1
  112. package/dist/hooks/useMessageTranslation.d.ts +4 -3
  113. package/dist/hooks/useModalDismiss.d.ts +27 -0
  114. package/dist/hooks/useMyFiles.d.ts +16 -0
  115. package/dist/hooks/usePdfThumbnail.d.ts +22 -0
  116. package/dist/hooks/useQRCodeChatHandler.d.ts +29 -1
  117. package/dist/hooks/useRoomMute.d.ts +19 -0
  118. package/dist/hooks/useRoomState.d.ts +1 -1
  119. package/dist/hooks/useSendMessage.d.ts +4 -3
  120. package/dist/hooks/useTypography.d.ts +1 -1
  121. package/dist/hooks/useUnreadMessagesCounter.d.ts +11 -2
  122. package/dist/index.esm-B-3fyDHY.js +28 -0
  123. package/dist/index.esm-CRM4VCRa.js +943 -0
  124. package/dist/index.esm-msbp26WN.js +3352 -0
  125. package/dist/index.esm2017-CL0mvq6y.js +1578 -0
  126. package/dist/main-C2FKeV6y.js +32375 -0
  127. package/dist/main.css +1 -1
  128. package/dist/main.d.ts +14 -0
  129. package/dist/main.js +18 -18
  130. package/dist/module-DGXkb0R_.js +2960 -0
  131. package/dist/native-CDi4YD_s.js +13 -0
  132. package/dist/networking/api-requests/files.api.d.ts +19 -0
  133. package/dist/networking/api-requests/rooms.api.d.ts +10 -2
  134. package/dist/networking/api-requests/translate.api.d.ts +15 -0
  135. package/dist/networking/api-requests/user.api.d.ts +2 -0
  136. package/dist/networking/sharedRequest.d.ts +4 -0
  137. package/dist/networking/xmpp/allRoomPresences.xmpp.d.ts +3 -1
  138. package/dist/networking/xmpp/createTimeoutPromise.xmpp.d.ts +14 -0
  139. package/dist/networking/xmpp/sendTextMessage.xmpp.d.ts +2 -1
  140. package/dist/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts +2 -1
  141. package/dist/networking/xmppClient.d.ts +12 -3
  142. package/dist/pdf-B5b7qHu6.js +17130 -0
  143. package/dist/pdf.worker.min-COYn-gId.js +24385 -0
  144. package/dist/roomStore/index.d.ts +20 -0
  145. package/dist/roomStore/persistEncryption.d.ts +51 -0
  146. package/dist/roomStore/roomsSlice.d.ts +49 -6
  147. package/dist/styles/classNames.d.ts +35 -0
  148. package/dist/styles/motion.d.ts +71 -0
  149. package/dist/styles/tokens.d.ts +27 -0
  150. package/dist/testIds.d.ts +1 -1
  151. package/dist/types/models/attachment.model.d.ts +33 -0
  152. package/dist/types/models/config.model.d.ts +160 -19
  153. package/dist/types/models/file.model.d.ts +20 -0
  154. package/dist/types/models/message.model.d.ts +15 -6
  155. package/dist/types/models/room.model.d.ts +40 -2
  156. package/dist/types/types.d.ts +3 -1
  157. package/dist/utils/resendMessage.d.ts +22 -1
  158. package/dist/utils/translateModePolicy.d.ts +1 -0
  159. package/dist/wavesurfer.esm-D_a19qBW.js +952 -0
  160. package/package.json +22 -2
  161. package/dist/VideoCallOverlay-C4M2I9oV.js.map +0 -1
  162. package/dist/components/MainComponents/VirtualList.d.ts +0 -10
  163. package/dist/components/Modals/SettingsModals/BlockedUsers/BlockedUsersModal.d.ts +0 -6
  164. package/dist/components/Modals/SettingsModals/DocumentShares/DocumentSharesModal.d.ts +0 -6
  165. package/dist/components/Modals/SettingsModals/ManageDataModal/StyledComponents.d.ts +0 -0
  166. package/dist/components/Modals/SettingsModals/ProfileShares/ProfileShares.d.ts +0 -6
  167. package/dist/components/Modals/SettingsModals/Referrals/Referrals.d.ts +0 -6
  168. package/dist/hooks/useMessageQueue.d.ts +0 -4
  169. package/dist/main-DeiuFYsl.js +0 -55812
  170. package/dist/main-DeiuFYsl.js.map +0 -1
  171. package/dist/main.js.map +0 -1
  172. package/dist/networking/xmpp/getHistory.xmpp.d.ts +0 -3
  173. package/dist/networking/xmpp/listenerManager.d.ts +0 -17
  174. package/dist/utils/xmppMemoryMonitor.d.ts +0 -16
@@ -1,6 +1,7 @@
1
1
  import { IUser } from './user.model';
2
2
  import { TranslationObject } from '../types';
3
3
  import { Iso639_1Codes } from './language.model';
4
+ import { IAttachment } from './attachment.model';
4
5
  export interface IMessage {
5
6
  id: string;
6
7
  user: IUser;
@@ -17,6 +18,7 @@ export interface IMessage {
17
18
  mimetype?: string;
18
19
  location?: string;
19
20
  pending?: boolean;
21
+ failed?: boolean;
20
22
  timestamp?: number;
21
23
  showInChannel?: string;
22
24
  activeMessage?: boolean;
@@ -31,9 +33,17 @@ export interface IMessage {
31
33
  langSource?: Iso639_1Codes;
32
34
  originalName?: string;
33
35
  size?: string;
36
+ /**
37
+ * Every file carried by this message, oldest wire format included:
38
+ * `attachments[0]` mirrors the flat `location`/`mimetype`/`originalName`
39
+ * fields above. Undefined on messages that predate multi-attach, so read
40
+ * it through `getMessageAttachments()` rather than directly.
41
+ */
42
+ attachments?: IAttachment[];
34
43
  xmppId?: string;
35
44
  xmppFrom?: string;
36
45
  quickReplies?: unknown;
46
+ mentions?: IMentionSpan[];
37
47
  callLog?: {
38
48
  callId: string;
39
49
  direction: 'outgoing' | 'incoming';
@@ -48,12 +58,11 @@ export interface ReactionMessage {
48
58
  }
49
59
  export interface IReply extends IMessage {
50
60
  }
51
- export interface MessageBubble {
52
- backgroundMessageUser?: string;
53
- backgroundMessage?: string;
54
- colorUser?: string;
55
- color?: string;
56
- borderRadius?: number;
61
+ export interface IMentionSpan {
62
+ jid: string;
63
+ name: string;
64
+ offset: number;
65
+ length: number;
57
66
  }
58
67
  export interface MessageProps {
59
68
  message: IMessage;
@@ -38,6 +38,14 @@ export interface IRoom {
38
38
  __v?: number | string;
39
39
  _id?: string;
40
40
  id?: string;
41
+ /**
42
+ * Written from two places: reactionsMiddleware keeps it current for a
43
+ * room that already has loaded messages, and createRoomFromApi seeds it
44
+ * from the API's `lastMessage` (see ApiRoomLastMessage) for a room that
45
+ * doesn't yet. ChatRoomItem only reads this while `messages` is empty -
46
+ * once real history loads, `messages` is what renders the preview, so a
47
+ * seed left sitting here afterward is inert rather than stale-looking.
48
+ */
41
49
  lastMessage?: LastMessage;
42
50
  lastMessageTimestamp?: number;
43
51
  lastRoomMessage?: RoomLastMessage;
@@ -54,8 +62,35 @@ export interface IRoom {
54
62
  firstMessageTimestamp?: number;
55
63
  };
56
64
  historyComplete?: boolean;
57
- historyPreloadState?: 'idle' | 'loading' | 'done' | 'error';
65
+ historyPreloadState?: 'idle' | 'loading' | 'partial' | 'done' | 'error';
58
66
  unreadCapped?: boolean;
67
+ /**
68
+ * The caller's own mute preference for this room, as reported by the
69
+ * backend (`GET /v1/chats/my` / `/v1/chats/my/{chatName}`). Only a real
70
+ * backend that supports mute ever sends this field - prod doesn't yet, so
71
+ * this stays `undefined` (not `false`) there. Treat `undefined` as "not
72
+ * muted" for behaviour, but as "unsupported" for whether to show a mute
73
+ * toggle at all (see useRoomMute's `isSupported`).
74
+ */
75
+ muted?: boolean;
76
+ }
77
+ /**
78
+ * The flattened `lastMessage` object `GET /v1/chats/my` embeds per room
79
+ * (QA verified 2026-09-16: all 16 rooms returned it). Prod's `chats/my`
80
+ * has previously lacked fields other endpoints send (see IRoom.muted) -
81
+ * treat every field here as optional and never assume it is present.
82
+ */
83
+ export interface ApiRoomLastMessage {
84
+ body?: string;
85
+ truncated?: boolean;
86
+ from?: string;
87
+ fromUserId?: string;
88
+ messageId?: string;
89
+ stanzaId?: string;
90
+ createdAt?: string;
91
+ isOwn?: boolean;
92
+ senderFirstName?: string;
93
+ senderLastName?: string;
59
94
  }
60
95
  export interface ApiRoom {
61
96
  name: string;
@@ -71,6 +106,10 @@ export interface ApiRoom {
71
106
  createdAt?: string;
72
107
  updatedAt?: string;
73
108
  __v?: string;
109
+ /** See IRoom.muted - only present when the backend supports per-chat mute. */
110
+ muted?: boolean;
111
+ /** See ApiRoomLastMessage - only present when the backend supports it. */
112
+ lastMessage?: ApiRoomLastMessage;
74
113
  }
75
114
  export interface PostRoom {
76
115
  title: string;
@@ -95,7 +134,6 @@ export interface DeleteRoomMember {
95
134
  }
96
135
  export interface IRoomCompressed extends Pick<IRoom, 'jid'> {
97
136
  }
98
- export type PartialRoomWithMandatoryKeys = Partial<IRoom> & Pick<IRoom, 'jid' | 'title'>;
99
137
  export interface ConfigRoom {
100
138
  jid: string;
101
139
  pinned: boolean;
@@ -7,5 +7,7 @@ export * from './models/action.model';
7
7
  export * from './models/modal.model';
8
8
  export * from './models/language.model';
9
9
  export * from './models/media.model';
10
+ export * from './models/attachment.model';
11
+ export * from './models/file.model';
10
12
  export { MODAL_TYPES } from '../helpers/constants/MODAL_TYPES';
11
- export type { TranslationObject } from '../helpers/transformTranslatations';
13
+ export type { TranslationObject, Translation, } from '../helpers/transformTranslatations';
@@ -1,8 +1,29 @@
1
1
  import { IMessage } from '../types/types';
2
2
  type ResendOptions = {
3
3
  respectTranslateConfig?: boolean;
4
+ /**
5
+ * Re-send under the ORIGINAL message id instead of minting a new one.
6
+ *
7
+ * This is what the "not delivered - retry" control in the message bubble
8
+ * uses, and it is the only duplicate-safe way to retry:
9
+ *
10
+ * - the id is the client id carried on the stanza, so if the first
11
+ * attempt WAS accepted after all, its late echo reconciles onto the
12
+ * same message entry instead of appearing as a second bubble;
13
+ * - the original message is left in place (no local delete, and no
14
+ * `deleteMessageStanza` broadcast to the room), so a recipient who
15
+ * already received the first attempt does not see it retracted and
16
+ * then re-sent;
17
+ * - xmppClient's send queue de-duplicates by id, so a retry issued while
18
+ * the first attempt is still queued (the offline case) is absorbed
19
+ * rather than putting a second copy on the wire.
20
+ *
21
+ * Default `false` keeps the pre-existing "resend as a brand new message"
22
+ * behaviour for hosts already calling this utility directly.
23
+ */
24
+ preserveMessageId?: boolean;
4
25
  };
5
- export declare function resendMessage(message: Pick<IMessage, 'body' | 'roomJid'> & {
26
+ export declare function resendMessage(message: Pick<IMessage, 'body' | 'roomJid' | 'mentions'> & {
6
27
  originalMessageId: string;
7
28
  isReply?: boolean;
8
29
  showInChannel?: string;
@@ -17,3 +17,4 @@ export declare const canReaderChooseTranslateMode: (translates?: IConfig["transl
17
17
  * fallback for a reader who never has.
18
18
  */
19
19
  export declare const resolveTranslateMode: (translates?: IConfig["translates"], readerMode?: TranslateMode) => TranslateMode;
20
+ export declare const shouldTagOutgoingTranslateSource: (translatesEnabled: boolean | undefined, translateSendEnabled: boolean | undefined) => boolean;