stream-chat-react 11.14.0 → 11.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/{Window-64e7e4c0.js → Window-847d5d88.js} +13829 -299
  2. package/dist/browser.full-bundle.js +48811 -35270
  3. package/dist/browser.full-bundle.js.map +1 -1
  4. package/dist/browser.full-bundle.min.js +4 -4
  5. package/dist/browser.full-bundle.min.js.map +1 -1
  6. package/dist/components/Attachment/Audio.d.ts.map +1 -1
  7. package/dist/components/Attachment/Audio.js +7 -4
  8. package/dist/components/Attachment/Card.d.ts +1 -1
  9. package/dist/components/Attachment/Card.d.ts.map +1 -1
  10. package/dist/components/Attachment/Card.js +4 -2
  11. package/dist/components/Attachment/VoiceRecording.d.ts.map +1 -1
  12. package/dist/components/Attachment/VoiceRecording.js +6 -4
  13. package/dist/components/Attachment/audioSampling.d.ts +10 -0
  14. package/dist/components/Attachment/audioSampling.d.ts.map +1 -0
  15. package/dist/components/Attachment/audioSampling.js +83 -0
  16. package/dist/components/Attachment/components/WaveProgressBar.d.ts +3 -10
  17. package/dist/components/Attachment/components/WaveProgressBar.d.ts.map +1 -1
  18. package/dist/components/Attachment/components/WaveProgressBar.js +23 -90
  19. package/dist/components/Attachment/hooks/useAudioController.d.ts +11 -3
  20. package/dist/components/Attachment/hooks/useAudioController.d.ts.map +1 -1
  21. package/dist/components/Attachment/hooks/useAudioController.js +89 -26
  22. package/dist/components/Attachment/index.d.ts +1 -0
  23. package/dist/components/Attachment/index.d.ts.map +1 -1
  24. package/dist/components/Attachment/index.js +1 -0
  25. package/dist/components/Attachment/utils.d.ts +5 -3
  26. package/dist/components/Attachment/utils.d.ts.map +1 -1
  27. package/dist/components/Attachment/utils.js +1 -0
  28. package/dist/components/Channel/Channel.d.ts +5 -1
  29. package/dist/components/Channel/Channel.d.ts.map +1 -1
  30. package/dist/components/Channel/Channel.js +2 -0
  31. package/dist/components/ChannelSearch/SearchResults.d.ts +2 -2
  32. package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
  33. package/dist/components/ChannelSearch/SearchResults.js +1 -1
  34. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +1 -1
  35. package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
  36. package/dist/components/ChannelSearch/hooks/useChannelSearch.js +1 -1
  37. package/dist/components/Emojis/EmojiPicker.d.ts +2 -2
  38. package/dist/components/Emojis/index.cjs.js +2 -2
  39. package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.d.ts +3 -0
  40. package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.d.ts.map +1 -0
  41. package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.js +24 -0
  42. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.d.ts +4 -0
  43. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.d.ts.map +1 -0
  44. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.js +5 -0
  45. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.d.ts +3 -0
  46. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.d.ts.map +1 -0
  47. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.js +47 -0
  48. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.d.ts +8 -0
  49. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.d.ts.map +1 -0
  50. package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.js +21 -0
  51. package/dist/components/MediaRecorder/AudioRecorder/RecordingTimer.d.ts +6 -0
  52. package/dist/components/MediaRecorder/AudioRecorder/RecordingTimer.d.ts.map +1 -0
  53. package/dist/components/MediaRecorder/AudioRecorder/RecordingTimer.js +9 -0
  54. package/dist/components/MediaRecorder/AudioRecorder/index.d.ts +4 -0
  55. package/dist/components/MediaRecorder/AudioRecorder/index.d.ts.map +1 -0
  56. package/dist/components/MediaRecorder/AudioRecorder/index.js +3 -0
  57. package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts +8 -0
  58. package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts.map +1 -0
  59. package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.js +21 -0
  60. package/dist/components/MediaRecorder/classes/AmplitudeRecorder.d.ts +55 -0
  61. package/dist/components/MediaRecorder/classes/AmplitudeRecorder.d.ts.map +1 -0
  62. package/dist/components/MediaRecorder/classes/AmplitudeRecorder.js +93 -0
  63. package/dist/components/MediaRecorder/classes/BrowserPermission.d.ts +23 -0
  64. package/dist/components/MediaRecorder/classes/BrowserPermission.d.ts.map +1 -0
  65. package/dist/components/MediaRecorder/classes/BrowserPermission.js +98 -0
  66. package/dist/components/MediaRecorder/classes/MediaRecorderController.d.ts +83 -0
  67. package/dist/components/MediaRecorder/classes/MediaRecorderController.d.ts.map +1 -0
  68. package/dist/components/MediaRecorder/classes/MediaRecorderController.js +313 -0
  69. package/dist/components/MediaRecorder/classes/index.d.ts +4 -0
  70. package/dist/components/MediaRecorder/classes/index.d.ts.map +1 -0
  71. package/dist/components/MediaRecorder/classes/index.js +2 -0
  72. package/dist/components/MediaRecorder/hooks/index.d.ts +2 -0
  73. package/dist/components/MediaRecorder/hooks/index.d.ts.map +1 -0
  74. package/dist/components/MediaRecorder/hooks/index.js +1 -0
  75. package/dist/components/MediaRecorder/hooks/useMediaRecorder.d.ts +20 -0
  76. package/dist/components/MediaRecorder/hooks/useMediaRecorder.d.ts.map +1 -0
  77. package/dist/components/MediaRecorder/hooks/useMediaRecorder.js +73 -0
  78. package/dist/components/MediaRecorder/index.d.ts +6 -0
  79. package/dist/components/MediaRecorder/index.d.ts.map +1 -0
  80. package/dist/components/MediaRecorder/index.js +5 -0
  81. package/dist/components/MediaRecorder/observable/BehaviorSubject.d.ts +11 -0
  82. package/dist/components/MediaRecorder/observable/BehaviorSubject.d.ts.map +1 -0
  83. package/dist/components/MediaRecorder/observable/BehaviorSubject.js +34 -0
  84. package/dist/components/MediaRecorder/observable/Observable.d.ts +18 -0
  85. package/dist/components/MediaRecorder/observable/Observable.d.ts.map +1 -0
  86. package/dist/components/MediaRecorder/observable/Observable.js +29 -0
  87. package/dist/components/MediaRecorder/observable/Observer.d.ts +10 -0
  88. package/dist/components/MediaRecorder/observable/Observer.d.ts.map +1 -0
  89. package/dist/components/MediaRecorder/observable/Observer.js +3 -0
  90. package/dist/components/MediaRecorder/observable/Subject.d.ts +16 -0
  91. package/dist/components/MediaRecorder/observable/Subject.d.ts.map +1 -0
  92. package/dist/components/MediaRecorder/observable/Subject.js +70 -0
  93. package/dist/components/MediaRecorder/observable/Subscription.d.ts +11 -0
  94. package/dist/components/MediaRecorder/observable/Subscription.d.ts.map +1 -0
  95. package/dist/components/MediaRecorder/observable/Subscription.js +13 -0
  96. package/dist/components/MediaRecorder/observable/index.d.ts +6 -0
  97. package/dist/components/MediaRecorder/observable/index.d.ts.map +1 -0
  98. package/dist/components/MediaRecorder/observable/index.js +5 -0
  99. package/dist/components/MediaRecorder/transcode/audioProcessing.d.ts +16 -0
  100. package/dist/components/MediaRecorder/transcode/audioProcessing.d.ts.map +1 -0
  101. package/dist/components/MediaRecorder/transcode/audioProcessing.js +51 -0
  102. package/dist/components/MediaRecorder/transcode/index.d.ts +8 -0
  103. package/dist/components/MediaRecorder/transcode/index.d.ts.map +1 -0
  104. package/dist/components/MediaRecorder/transcode/index.js +18 -0
  105. package/dist/components/MediaRecorder/transcode/mp3.d.ts +2 -0
  106. package/dist/components/MediaRecorder/transcode/mp3.d.ts.map +1 -0
  107. package/dist/components/MediaRecorder/transcode/mp3.js +53 -0
  108. package/dist/components/MediaRecorder/transcode/wav.d.ts +8 -0
  109. package/dist/components/MediaRecorder/transcode/wav.d.ts.map +1 -0
  110. package/dist/components/MediaRecorder/transcode/wav.js +117 -0
  111. package/dist/components/MessageInput/AttachmentPreviewList.d.ts +2 -1
  112. package/dist/components/MessageInput/AttachmentPreviewList.d.ts.map +1 -1
  113. package/dist/components/MessageInput/AttachmentPreviewList.js +66 -20
  114. package/dist/components/MessageInput/CooldownTimer.d.ts.map +1 -1
  115. package/dist/components/MessageInput/CooldownTimer.js +4 -17
  116. package/dist/components/MessageInput/MessageInput.d.ts +10 -0
  117. package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
  118. package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
  119. package/dist/components/MessageInput/MessageInputFlat.js +31 -9
  120. package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
  121. package/dist/components/MessageInput/MessageInputSmall.js +3 -2
  122. package/dist/components/MessageInput/SendButton.d.ts +8 -0
  123. package/dist/components/MessageInput/SendButton.d.ts.map +1 -0
  124. package/dist/components/MessageInput/SendButton.js +9 -0
  125. package/dist/components/MessageInput/hooks/useAttachments.d.ts +5 -2
  126. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  127. package/dist/components/MessageInput/hooks/useAttachments.js +87 -3
  128. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  129. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +12 -2
  130. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +22 -7
  131. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  132. package/dist/components/MessageInput/hooks/useMessageInputState.js +31 -5
  133. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +2 -2
  134. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
  135. package/dist/components/MessageInput/hooks/useSubmitHandler.js +15 -6
  136. package/dist/components/MessageInput/hooks/useTimeElapsed.d.ts +10 -0
  137. package/dist/components/MessageInput/hooks/useTimeElapsed.d.ts.map +1 -0
  138. package/dist/components/MessageInput/hooks/useTimeElapsed.js +30 -0
  139. package/dist/components/MessageInput/hooks/useTimer.d.ts +4 -0
  140. package/dist/components/MessageInput/hooks/useTimer.d.ts.map +1 -0
  141. package/dist/components/MessageInput/hooks/useTimer.js +20 -0
  142. package/dist/components/MessageInput/icons.d.ts +5 -6
  143. package/dist/components/MessageInput/icons.d.ts.map +1 -1
  144. package/dist/components/MessageInput/icons.js +13 -10
  145. package/dist/components/MessageInput/index.d.ts +1 -0
  146. package/dist/components/MessageInput/index.d.ts.map +1 -1
  147. package/dist/components/MessageInput/index.js +1 -0
  148. package/dist/components/MessageInput/types.d.ts +36 -1
  149. package/dist/components/MessageInput/types.d.ts.map +1 -1
  150. package/dist/components/ReactFileUtilities/types.d.ts +1 -0
  151. package/dist/components/ReactFileUtilities/types.d.ts.map +1 -1
  152. package/dist/components/ReactFileUtilities/utils.d.ts +9 -1
  153. package/dist/components/ReactFileUtilities/utils.d.ts.map +1 -1
  154. package/dist/components/ReactFileUtilities/utils.js +25 -0
  155. package/dist/components/Reactions/utils/utils.d.ts +2 -1
  156. package/dist/components/Reactions/utils/utils.d.ts.map +1 -1
  157. package/dist/components/index.d.ts +1 -0
  158. package/dist/components/index.d.ts.map +1 -1
  159. package/dist/components/index.js +1 -0
  160. package/dist/context/ComponentContext.d.ts +7 -4
  161. package/dist/context/ComponentContext.d.ts.map +1 -1
  162. package/dist/context/MessageInputContext.d.ts +4 -1
  163. package/dist/context/MessageInputContext.d.ts.map +1 -1
  164. package/dist/i18n/Streami18n.d.ts +13 -0
  165. package/dist/i18n/Streami18n.d.ts.map +1 -1
  166. package/dist/i18n/de.json +13 -0
  167. package/dist/i18n/en.json +13 -0
  168. package/dist/i18n/es.json +13 -0
  169. package/dist/i18n/fr.json +13 -0
  170. package/dist/i18n/hi.json +13 -0
  171. package/dist/i18n/it.json +13 -0
  172. package/dist/i18n/ja.json +13 -0
  173. package/dist/i18n/ko.json +13 -0
  174. package/dist/i18n/nl.json +13 -0
  175. package/dist/i18n/pt.json +13 -0
  176. package/dist/i18n/ru.json +13 -0
  177. package/dist/i18n/tr.json +13 -0
  178. package/dist/index.cjs.js +22 -3
  179. package/dist/utils/mergeDeep.d.ts +4 -0
  180. package/dist/utils/mergeDeep.d.ts.map +1 -0
  181. package/dist/utils/mergeDeep.js +5 -0
  182. package/dist/version.d.ts +1 -1
  183. package/dist/version.js +1 -1
  184. package/package.json +5 -1
  185. package/dist/components/MessageInput/hooks/useFileState.d.ts +0 -7
  186. package/dist/components/MessageInput/hooks/useFileState.d.ts.map +0 -1
  187. package/dist/components/MessageInput/hooks/useFileState.js +0 -8
@@ -1,17 +1,66 @@
1
1
  import clsx from 'clsx';
2
2
  import React, { useCallback, useState } from 'react';
3
+ import { CloseIcon, DownloadIcon, LoadingIndicatorIcon, RetryIcon } from './icons';
4
+ import { isAudioAttachment, isMediaAttachment, isVoiceRecordingAttachment, PlayButton, } from '../Attachment';
3
5
  import { BaseImage as DefaultBaseImage } from '../Gallery';
6
+ import { useAudioController } from '../Attachment/hooks/useAudioController';
7
+ import { RecordingTimer } from '../MediaRecorder';
4
8
  import { FileIcon } from '../ReactFileUtilities';
5
9
  import { useComponentContext, useMessageInputContext } from '../../context';
6
- import { useFileState } from './hooks/useFileState';
7
- import { CloseIcon, DownloadIcon, LoadingIndicatorIcon, RetryIcon } from './icons';
8
10
  export var AttachmentPreviewList = function () {
9
- var _a = useMessageInputContext('AttachmentPreviewList'), fileOrder = _a.fileOrder, imageOrder = _a.imageOrder;
11
+ var _a = useMessageInputContext('AttachmentPreviewList'), attachments = _a.attachments, fileOrder = _a.fileOrder, imageOrder = _a.imageOrder, removeAttachment = _a.removeAttachment, uploadAttachment = _a.uploadAttachment;
10
12
  return (React.createElement("div", { className: 'str-chat__attachment-preview-list' },
11
13
  React.createElement("div", { className: 'str-chat__attachment-list-scroll-container', "data-testid": 'attachment-list-scroll-container' },
14
+ attachments.map(function (attachment) {
15
+ var _a, _b;
16
+ if (isVoiceRecordingAttachment(attachment)) {
17
+ return (React.createElement(VoiceRecordingPreview, { attachment: attachment, handleRetry: uploadAttachment, key: ((_a = attachment.$internal) === null || _a === void 0 ? void 0 : _a.id) || attachment.asset_url, mimeType: attachment.mime_type, removeAttachment: removeAttachment }));
18
+ }
19
+ else if (isAudioAttachment(attachment) || isMediaAttachment(attachment)) {
20
+ // unnecessary to pass handleRetry as video and audio if among attachments is already uploaded
21
+ // - user looking at the edit message input
22
+ return (React.createElement(FilePreview, { attachment: attachment, handleRetry: uploadAttachment, key: ((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.id) || attachment.asset_url, removeAttachment: removeAttachment }));
23
+ }
24
+ return null;
25
+ }),
12
26
  imageOrder.map(function (id) { return (React.createElement(ImagePreviewItem, { id: id, key: id })); }),
13
27
  fileOrder.map(function (id) { return (React.createElement(FilePreviewItem, { id: id, key: id })); }))));
14
28
  };
29
+ var VoiceRecordingPreview = function (_a) {
30
+ var _b, _c, _d;
31
+ var attachment = _a.attachment, handleRetry = _a.handleRetry, mimeType = _a.mimeType, removeAttachment = _a.removeAttachment;
32
+ var _e = useAudioController({ mimeType: mimeType }), audioRef = _e.audioRef, isPlaying = _e.isPlaying, secondsElapsed = _e.secondsElapsed, togglePlay = _e.togglePlay;
33
+ return (React.createElement("div", { className: 'str-chat__attachment-preview-voice-recording', "data-testid": 'attachment-preview-voice-recording' },
34
+ React.createElement("audio", { ref: audioRef },
35
+ React.createElement("source", { "data-testid": 'audio-source', src: attachment.asset_url, type: attachment.mime_type })),
36
+ React.createElement(PlayButton, { isPlaying: isPlaying, onClick: togglePlay }),
37
+ React.createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: ((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.uploadState) === 'uploading', onClick: function () { var _a; return ((_a = attachment.$internal) === null || _a === void 0 ? void 0 : _a.id) && removeAttachment(attachment.$internal.id); } },
38
+ React.createElement(CloseIcon, null)),
39
+ ((_c = attachment.$internal) === null || _c === void 0 ? void 0 : _c.uploadState) === 'failed' && !!handleRetry && (React.createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-file', "data-testid": 'file-preview-item-retry-button', onClick: function () { return handleRetry(attachment); } },
40
+ React.createElement(RetryIcon, null))),
41
+ React.createElement("div", { className: 'str-chat__attachment-preview-metadata' },
42
+ React.createElement("div", { className: 'str-chat__attachment-preview-file-name', title: attachment.title }, attachment.title),
43
+ typeof attachment.duration !== 'undefined' && (React.createElement(RecordingTimer, { durationSeconds: secondsElapsed || attachment.duration })),
44
+ ((_d = attachment.$internal) === null || _d === void 0 ? void 0 : _d.uploadState) === 'uploading' && React.createElement(LoadingIndicatorIcon, { size: 17 })),
45
+ React.createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
46
+ React.createElement(FileIcon, { filename: attachment.title, mimeType: attachment.mime_type, version: '2' }))));
47
+ };
48
+ var FilePreview = function (_a) {
49
+ var _b, _c, _d, _e;
50
+ var attachment = _a.attachment, handleRetry = _a.handleRetry, removeAttachment = _a.removeAttachment;
51
+ return (React.createElement("div", { className: 'str-chat__attachment-preview-file', "data-testid": 'attachment-preview-file' },
52
+ React.createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
53
+ React.createElement(FileIcon, { filename: attachment.title, mimeType: attachment.mime_type, version: '2' })),
54
+ React.createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: ((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.uploadState) === 'uploading', onClick: function () { var _a, _b; return ((_a = attachment.$internal) === null || _a === void 0 ? void 0 : _a.id) && removeAttachment((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.id); } },
55
+ React.createElement(CloseIcon, null)),
56
+ ((_c = attachment.$internal) === null || _c === void 0 ? void 0 : _c.uploadState) === 'failed' && !!handleRetry && (React.createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-file', "data-testid": 'file-preview-item-retry-button', onClick: function () { return handleRetry(attachment); } },
57
+ React.createElement(RetryIcon, null))),
58
+ React.createElement("div", { className: 'str-chat__attachment-preview-file-end' },
59
+ React.createElement("div", { className: 'str-chat__attachment-preview-file-name', title: attachment.title }, attachment.title),
60
+ ((_d = attachment.$internal) === null || _d === void 0 ? void 0 : _d.uploadState) === 'finished' && (React.createElement("a", { className: 'str-chat__attachment-preview-file-download', download: true, href: attachment.asset_url, rel: 'noreferrer', target: '_blank' },
61
+ React.createElement(DownloadIcon, null))),
62
+ ((_e = attachment.$internal) === null || _e === void 0 ? void 0 : _e.uploadState) === 'uploading' && React.createElement(LoadingIndicatorIcon, { size: 17 }))));
63
+ };
15
64
  export var ImagePreviewItem = function (_a) {
16
65
  var _b;
17
66
  var id = _a.id;
@@ -42,25 +91,22 @@ export var ImagePreviewItem = function (_a) {
42
91
  var FilePreviewItem = function (_a) {
43
92
  var id = _a.id;
44
93
  var _b = useMessageInputContext('FilePreviewItem'), fileUploads = _b.fileUploads, removeFile = _b.removeFile, uploadFile = _b.uploadFile;
45
- var handleRemove = useCallback(function (e) {
46
- e.stopPropagation();
94
+ var handleRemove = useCallback(function (id) {
47
95
  removeFile(id);
48
- }, [removeFile, id]);
49
- var handleRetry = useCallback(function () { return uploadFile(id); }, [uploadFile, id]);
96
+ }, [removeFile]);
97
+ var handleRetry = useCallback(function (attachment) { return attachment.$internal && uploadFile(attachment.$internal.id); }, [uploadFile]);
50
98
  var file = fileUploads[id];
51
- var state = useFileState(file);
52
99
  if (!file)
53
100
  return null;
54
- return (React.createElement("div", { className: 'str-chat__attachment-preview-file', "data-testid": 'attachment-preview-file' },
55
- React.createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
56
- React.createElement(FileIcon, { filename: file.file.name, mimeType: file.file.type, version: '2' })),
57
- React.createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: state.uploading, onClick: handleRemove },
58
- React.createElement(CloseIcon, null)),
59
- state.failed && (React.createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-file', "data-testid": 'file-preview-item-retry-button', onClick: handleRetry },
60
- React.createElement(RetryIcon, null))),
61
- React.createElement("div", { className: 'str-chat__attachment-preview-file-end' },
62
- React.createElement("div", { className: 'str-chat__attachment-preview-file-name' }, file.file.name),
63
- state.finished && (React.createElement("a", { className: 'str-chat__attachment-preview-file-download', download: true, href: file.url, rel: 'noreferrer', target: '_blank' },
64
- React.createElement(DownloadIcon, null))),
65
- state.uploading && React.createElement(LoadingIndicatorIcon, { size: 17 }))));
101
+ var attachment = {
102
+ $internal: {
103
+ file: file.file,
104
+ id: id,
105
+ uploadState: file.state,
106
+ },
107
+ asset_url: file.url,
108
+ mime_type: file.file.type,
109
+ title: file.file.name,
110
+ };
111
+ return (React.createElement(FilePreview, { attachment: attachment, handleRetry: handleRetry, removeAttachment: handleRemove }));
66
112
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CooldownTimer.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/CooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAChF,CAAC;AACF,eAAO,MAAM,aAAa,yBAA0B,kBAAkB,sBAwBrE,CAAC"}
1
+ {"version":3,"file":"CooldownTimer.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/CooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAChF,CAAC;AACF,eAAO,MAAM,aAAa,yBAA0B,kBAAkB,sBAQrE,CAAC"}
@@ -1,20 +1,7 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React from 'react';
2
+ import { useTimer } from './hooks/useTimer';
2
3
  export var CooldownTimer = function (_a) {
3
4
  var cooldownInterval = _a.cooldownInterval;
4
- var _b = useState(), seconds = _b[0], setSeconds = _b[1];
5
- useEffect(function () {
6
- var countdownTimeout;
7
- if (typeof seconds === 'number' && seconds > 0) {
8
- countdownTimeout = setTimeout(function () {
9
- setSeconds(seconds - 1);
10
- }, 1000);
11
- }
12
- return function () {
13
- clearTimeout(countdownTimeout);
14
- };
15
- }, [seconds]);
16
- useEffect(function () {
17
- setSeconds(cooldownInterval !== null && cooldownInterval !== void 0 ? cooldownInterval : 0);
18
- }, [cooldownInterval]);
19
- return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds));
5
+ var secondsLeft = useTimer({ startFrom: cooldownInterval });
6
+ return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, secondsLeft));
20
7
  };
@@ -7,6 +7,7 @@ import type { MessageToSend } from '../../context/ChannelActionContext';
7
7
  import type { CustomTrigger, DefaultStreamChatGenerics, SendMessageOptions, UnknownType } from '../../types/types';
8
8
  import type { URLEnrichmentConfig } from './hooks/useLinkPreviews';
9
9
  import type { FileUpload, ImageUpload } from './types';
10
+ import type { CustomAudioRecordingConfig } from '../MediaRecorder';
10
11
  export type EmojiSearchIndexResult = {
11
12
  id: string;
12
13
  name: string;
@@ -22,6 +23,15 @@ export interface EmojiSearchIndex<T extends UnknownType = UnknownType> {
22
23
  export type MessageInputProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger> = {
23
24
  /** Additional props to be passed to the underlying `AutoCompleteTextarea` component, [available props](https://www.npmjs.com/package/react-textarea-autosize) */
24
25
  additionalTextareaProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;
26
+ /**
27
+ * When enabled, recorded messages won’t be sent immediately.
28
+ * Instead, they will “stack up” with other attachments in the message composer allowing the user to send multiple attachments as part of the same message.
29
+ */
30
+ asyncMessagesMultiSendEnabled?: boolean;
31
+ /** Allows to configure the audio recording parameters for voice messages. */
32
+ audioRecordingConfig?: CustomAudioRecordingConfig;
33
+ /** Controls whether the users will be provided with the UI to record voice messages. */
34
+ audioRecordingEnabled?: boolean;
25
35
  /** Function to clear the editing state while editing a message */
26
36
  clearEditingState?: () => void;
27
37
  /** If true, disables the text input */
@@ -1 +1 @@
1
- {"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAOjD,OAAO,EAAE,aAAa,EAA0B,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAuB,MAAM,gCAAgC,CAAC;AAG5F,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EACV,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvD,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACnE,MAAM,EAAE,CACN,KAAK,EAAE,MAAM,KACV,WAAW,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;CAChG;AAED,MAAM,MAAM,iBAAiB,CAC3B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,CAAC,SAAS,aAAa,GAAG,aAAa,IACrC;IACF,iKAAiK;IACjK,uBAAuB,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAC5E,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gGAAgG;IAChG,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,CACpB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EACxB,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,KACjC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,CACrB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,KACjC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,iNAAiN;IACjN,gBAAgB,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAC7D,gFAAgF;IAChF,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,KACvD,IAAI,CAAC;IACV,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iKAAiK;IACjK,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gPAAgP;IAChP,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yIAAyI;IACzI,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,aAAa,CAAC,CAAC;IAC1E,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC5C,4GAA4G;IAC5G,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,qBAAqB,CAAC,EAAE,CACtB,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,UAAU,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EACxD,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uKAAuK;IACvK;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjD,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AA4DF;;GAEG;AACH,eAAO,MAAM,YAAY,mMAAsE,CAAC"}
1
+ {"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAOjD,OAAO,EAAE,aAAa,EAA0B,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAuB,MAAM,gCAAgC,CAAC;AAG5F,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EACV,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACnE,MAAM,EAAE,CACN,KAAK,EAAE,MAAM,KACV,WAAW,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;CAChG;AAED,MAAM,MAAM,iBAAiB,CAC3B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,EAChF,CAAC,SAAS,aAAa,GAAG,aAAa,IACrC;IACF,iKAAiK;IACjK,uBAAuB,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAC5E;;;OAGG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;IAClD,wFAAwF;IACxF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gGAAgG;IAChG,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,CACpB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EACxB,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,KACjC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,CACrB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,KACjC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,iNAAiN;IACjN,gBAAgB,CAAC,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAC7D,gFAAgF;IAChF,YAAY,CAAC,EAAE,CACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,KACvD,IAAI,CAAC;IACV,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iKAAiK;IACjK,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gPAAgP;IAChP,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yIAAyI;IACzI,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,aAAa,CAAC,CAAC;IAC1E,iEAAiE;IACjE,OAAO,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC5C,4GAA4G;IAC5G,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,qBAAqB,CAAC,EAAE,CACtB,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC1C,UAAU,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EACxD,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC3C,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uKAAuK;IACvK;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IACjD,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AA4DF;;GAEG;AACH,eAAO,MAAM,YAAY,mMAAsE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MessageInputFlat.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputFlat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AA8BlD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,eAAO,MAAM,gBAAgB,2GA+B5B,CAAC"}
1
+ {"version":3,"file":"MessageInputFlat.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputFlat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAsCzE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,eAAO,MAAM,gBAAgB,2GA+B5B,CAAC"}
@@ -1,23 +1,26 @@
1
1
  import { __assign } from "tslib";
2
- import React, { useEffect, useMemo } from 'react';
2
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
3
3
  import { FileUploadButton, ImageDropzone, UploadButton } from '../ReactFileUtilities';
4
4
  import clsx from 'clsx';
5
5
  import { useDropzone } from 'react-dropzone';
6
6
  import { nanoid } from 'nanoid';
7
- import { FileUploadIconFlat as DefaultFileUploadIcon, SendButton as DefaultSendButton, UploadIcon as DefaultUploadIcon, } from './icons';
7
+ import { FileUploadIconFlat as DefaultFileUploadIcon, UploadIcon as DefaultUploadIcon, } from './icons';
8
+ import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
9
+ import { SendButton as DefaultSendButton } from './SendButton';
10
+ import { AudioRecorder as DefaultAudioRecorder, RecordingPermissionDeniedNotification as DefaultRecordingPermissionDeniedNotification, StartRecordingAudioButton as DefaultStartRecordingAudioButton, RecordingPermission, } from '../MediaRecorder';
8
11
  import { QuotedMessagePreview as DefaultQuotedMessagePreview, QuotedMessagePreviewHeader, } from './QuotedMessagePreview';
9
12
  import { AttachmentPreviewList as DefaultAttachmentPreviewList } from './AttachmentPreviewList';
10
13
  import { LinkPreviewList as DefaultLinkPreviewList } from './LinkPreviewList';
11
14
  import { UploadsPreview } from './UploadsPreview';
12
15
  import { ChatAutoComplete } from '../ChatAutoComplete/ChatAutoComplete';
13
16
  import { Tooltip } from '../Tooltip/Tooltip';
17
+ import { RecordingAttachmentType } from '../MediaRecorder/classes';
14
18
  import { useChatContext } from '../../context/ChatContext';
15
19
  import { useChannelActionContext } from '../../context/ChannelActionContext';
16
20
  import { useChannelStateContext } from '../../context/ChannelStateContext';
17
21
  import { useTranslationContext } from '../../context/TranslationContext';
18
22
  import { useMessageInputContext } from '../../context/MessageInputContext';
19
23
  import { useComponentContext } from '../../context/ComponentContext';
20
- import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
21
24
  export var MessageInputFlat = function () {
22
25
  var quotedMessage = useChannelStateContext('MessageInputFlat').quotedMessage;
23
26
  var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
@@ -74,8 +77,12 @@ var MessageInputV1 = function () {
74
77
  var MessageInputV2 = function () {
75
78
  var _a = useChannelStateContext('MessageInputV2'), _b = _a.acceptedFiles, acceptedFiles = _b === void 0 ? [] : _b, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
76
79
  var t = useTranslationContext('MessageInputV2').t;
77
- var _c = useMessageInputContext('MessageInputV2'), cooldownRemaining = _c.cooldownRemaining, findAndEnqueueURLsToEnrich = _c.findAndEnqueueURLsToEnrich, handleSubmit = _c.handleSubmit, hideSendButton = _c.hideSendButton, isUploadEnabled = _c.isUploadEnabled, linkPreviews = _c.linkPreviews, maxFilesLeft = _c.maxFilesLeft, message = _c.message, numberOfUploads = _c.numberOfUploads, setCooldownRemaining = _c.setCooldownRemaining, text = _c.text, uploadNewFiles = _c.uploadNewFiles;
78
- var _d = useComponentContext('MessageInputV2'), _e = _d.AttachmentPreviewList, AttachmentPreviewList = _e === void 0 ? DefaultAttachmentPreviewList : _e, _f = _d.CooldownTimer, CooldownTimer = _f === void 0 ? DefaultCooldownTimer : _f, _g = _d.FileUploadIcon, FileUploadIcon = _g === void 0 ? DefaultUploadIcon : _g, _h = _d.LinkPreviewList, LinkPreviewList = _h === void 0 ? DefaultLinkPreviewList : _h, _j = _d.QuotedMessagePreview, QuotedMessagePreview = _j === void 0 ? DefaultQuotedMessagePreview : _j, _k = _d.SendButton, SendButton = _k === void 0 ? DefaultSendButton : _k, EmojiPicker = _d.EmojiPicker;
80
+ var _c = useMessageInputContext('MessageInputV2'), asyncMessagesMultiSendEnabled = _c.asyncMessagesMultiSendEnabled, attachments = _c.attachments, cooldownRemaining = _c.cooldownRemaining, findAndEnqueueURLsToEnrich = _c.findAndEnqueueURLsToEnrich, handleSubmit = _c.handleSubmit, hideSendButton = _c.hideSendButton, isUploadEnabled = _c.isUploadEnabled, linkPreviews = _c.linkPreviews, maxFilesLeft = _c.maxFilesLeft, message = _c.message, numberOfUploads = _c.numberOfUploads, recordingController = _c.recordingController, setCooldownRemaining = _c.setCooldownRemaining, text = _c.text, uploadNewFiles = _c.uploadNewFiles;
81
+ var _d = useComponentContext('MessageInputV2'), _e = _d.AudioRecorder, AudioRecorder = _e === void 0 ? DefaultAudioRecorder : _e, _f = _d.AttachmentPreviewList, AttachmentPreviewList = _f === void 0 ? DefaultAttachmentPreviewList : _f, _g = _d.CooldownTimer, CooldownTimer = _g === void 0 ? DefaultCooldownTimer : _g, _h = _d.FileUploadIcon, FileUploadIcon = _h === void 0 ? DefaultUploadIcon : _h, _j = _d.LinkPreviewList, LinkPreviewList = _j === void 0 ? DefaultLinkPreviewList : _j, _k = _d.QuotedMessagePreview, QuotedMessagePreview = _k === void 0 ? DefaultQuotedMessagePreview : _k, _l = _d.RecordingPermissionDeniedNotification, RecordingPermissionDeniedNotification = _l === void 0 ? DefaultRecordingPermissionDeniedNotification : _l, _m = _d.SendButton, SendButton = _m === void 0 ? DefaultSendButton : _m, _o = _d.StartRecordingAudioButton, StartRecordingAudioButton = _o === void 0 ? DefaultStartRecordingAudioButton : _o, EmojiPicker = _d.EmojiPicker;
82
+ var _p = useState(false), showRecordingPermissionDeniedNotification = _p[0], setShowRecordingPermissionDeniedNotification = _p[1];
83
+ var closePermissionDeniedNotification = useCallback(function () {
84
+ setShowRecordingPermissionDeniedNotification(false);
85
+ }, []);
79
86
  var id = useMemo(function () { return nanoid(); }, []);
80
87
  var accept = useMemo(function () {
81
88
  return acceptedFiles.reduce(function (mediaTypeMap, mediaType) {
@@ -84,18 +91,25 @@ var MessageInputV2 = function () {
84
91
  return mediaTypeMap;
85
92
  }, {});
86
93
  }, [acceptedFiles]);
87
- var _l = useDropzone({
94
+ var _q = useDropzone({
88
95
  accept: accept,
89
96
  disabled: !isUploadEnabled || maxFilesLeft === 0,
90
97
  multiple: multipleUploads,
91
98
  noClick: true,
92
99
  onDrop: uploadNewFiles,
93
- }), getRootProps = _l.getRootProps, isDragActive = _l.isDragActive, isDragReject = _l.isDragReject;
100
+ }), getRootProps = _q.getRootProps, isDragActive = _q.isDragActive, isDragReject = _q.isDragReject;
101
+ if (recordingController.recordingState)
102
+ return React.createElement(AudioRecorder, null);
94
103
  // TODO: "!message" condition is a temporary fix for shared
95
104
  // state when editing a message (fix shared state issue)
96
105
  var displayQuotedMessage = !message && quotedMessage && !quotedMessage.parent_id;
106
+ var recordingEnabled = !!(recordingController.recorder && navigator.mediaDevices); // account for requirement on iOS as per this bug report: https://bugs.webkit.org/show_bug.cgi?id=252303
107
+ var isRecording = !!recordingController.recordingState;
97
108
  return (React.createElement(React.Fragment, null,
98
109
  React.createElement("div", __assign({}, getRootProps({ className: 'str-chat__message-input' })),
110
+ recordingEnabled &&
111
+ recordingController.permissionState === 'denied' &&
112
+ showRecordingPermissionDeniedNotification && (React.createElement(RecordingPermissionDeniedNotification, { onClose: closePermissionDeniedNotification, permissionName: RecordingPermission.MIC })),
99
113
  findAndEnqueueURLsToEnrich && (React.createElement(LinkPreviewList, { linkPreviews: Array.from(linkPreviews.values()) })),
100
114
  isDragActive && (React.createElement("div", { className: clsx('str-chat__dropzone-container', {
101
115
  'str-chat__dropzone-container--not-accepted': isDragReject,
@@ -110,9 +124,17 @@ var MessageInputV2 = function () {
110
124
  React.createElement(FileUploadIcon, null))),
111
125
  React.createElement("div", { className: 'str-chat__message-textarea-container' },
112
126
  displayQuotedMessage && React.createElement(QuotedMessagePreview, { quotedMessage: quotedMessage }),
113
- isUploadEnabled && !!numberOfUploads && React.createElement(AttachmentPreviewList, null),
127
+ isUploadEnabled && !!(numberOfUploads || attachments.length) && (React.createElement(AttachmentPreviewList, null)),
114
128
  React.createElement("div", { className: 'str-chat__message-textarea-with-emoji-picker' },
115
129
  React.createElement(ChatAutoComplete, null),
116
130
  EmojiPicker && React.createElement(EmojiPicker, null))),
117
- !hideSendButton && (React.createElement(React.Fragment, null, cooldownRemaining ? (React.createElement(CooldownTimer, { cooldownInterval: cooldownRemaining, setCooldownRemaining: setCooldownRemaining })) : (React.createElement(SendButton, { disabled: !numberOfUploads && !text.length, sendMessage: handleSubmit }))))))));
131
+ !hideSendButton && (React.createElement(React.Fragment, null, cooldownRemaining ? (React.createElement(CooldownTimer, { cooldownInterval: cooldownRemaining, setCooldownRemaining: setCooldownRemaining })) : (React.createElement(React.Fragment, null,
132
+ React.createElement(SendButton, { disabled: !numberOfUploads && !text.length && !attachments.length, sendMessage: handleSubmit }),
133
+ recordingEnabled && (React.createElement(StartRecordingAudioButton, { disabled: isRecording ||
134
+ (!asyncMessagesMultiSendEnabled &&
135
+ attachments.some(function (a) { return a.type === RecordingAttachmentType.VOICE_RECORDING; })), onClick: function () {
136
+ var _a;
137
+ (_a = recordingController.recorder) === null || _a === void 0 ? void 0 : _a.start();
138
+ setShowRecordingPermissionDeniedNotification(true);
139
+ } }))))))))));
118
140
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MessageInputSmall.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputSmall.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAuBzC,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGlF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,oJAmH7B,CAAC"}
1
+ {"version":3,"file":"MessageInputSmall.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputSmall.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAqBzC,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAElF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,oJAmH7B,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import React, { useEffect } from 'react';
2
2
  import { FileUploadButton, ImageDropzone } from '../ReactFileUtilities';
3
- import { FileUploadIconFlat as DefaultFileUploadIcon, SendButton as DefaultSendButton, EmojiIconSmall, } from './icons';
3
+ import { FileUploadIconFlat as DefaultFileUploadIcon, EmojiIconSmall } from './icons';
4
4
  import { UploadsPreview } from './UploadsPreview';
5
+ import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
6
+ import { SendButton as DefaultSendButton } from './SendButton';
5
7
  import { ChatAutoComplete } from '../ChatAutoComplete/ChatAutoComplete';
6
8
  import { Tooltip } from '../Tooltip/Tooltip';
7
9
  import { useChatContext } from '../../context/ChatContext';
@@ -11,7 +13,6 @@ import { useTranslationContext } from '../../context/TranslationContext';
11
13
  import { useMessageInputContext } from '../../context/MessageInputContext';
12
14
  import { useComponentContext } from '../../context/ComponentContext';
13
15
  import { QuotedMessagePreview as DefaultQuotedMessagePreview } from './QuotedMessagePreview';
14
- import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
15
16
  /**
16
17
  * @deprecated This component has beend deprecated in favor of [`MessageInputFlat`](./MessageInputFlat.tsx) from which
17
18
  * `MessageInputSmall` "inherited" most of the code with only slight modification to classNames
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { Message } from 'stream-chat';
3
+ import type { DefaultStreamChatGenerics } from '../../types/types';
4
+ export type SendButtonProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
5
+ sendMessage: (event: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>>) => void;
6
+ } & React.ComponentProps<'button'>;
7
+ export declare const SendButton: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ sendMessage, ...rest }: SendButtonProps<StreamChatGenerics>) => React.JSX.Element;
8
+ //# sourceMappingURL=SendButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SendButton.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/SendButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,eAAe,CACzB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,WAAW,EAAE,CACX,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KACrD,IAAI,CAAC;CACX,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACnC,eAAO,MAAM,UAAU,wKAoBtB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { __assign, __rest } from "tslib";
2
+ import React from 'react';
3
+ import { useChatContext } from '../../context';
4
+ import { SendIconV1, SendIconV2 } from './icons';
5
+ export var SendButton = function (_a) {
6
+ var sendMessage = _a.sendMessage, rest = __rest(_a, ["sendMessage"]);
7
+ var themeVersion = useChatContext('SendButton').themeVersion;
8
+ return (React.createElement("button", __assign({ "aria-label": 'Send', className: 'str-chat__send-button', "data-testid": 'send-button', onClick: sendMessage, type: 'button' }, rest), themeVersion === '2' ? React.createElement(SendIconV2, null) : React.createElement(SendIconV1, null)));
9
+ };
@@ -1,12 +1,15 @@
1
- import type { FileLike } from '../../ReactFileUtilities';
2
- import type { MessageInputProps } from '../MessageInput';
3
1
  import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
2
+ import type { MessageInputProps } from '../MessageInput';
3
+ import type { LocalAttachment } from '../types';
4
+ import type { FileLike } from '../../ReactFileUtilities';
4
5
  import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
5
6
  export declare const useAttachments: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: import("react").Dispatch<MessageInputReducerAction<StreamChatGenerics>>, textareaRef: React.MutableRefObject<HTMLTextAreaElement | undefined>) => {
6
7
  maxFilesLeft: number;
7
8
  numberOfUploads: number;
9
+ removeAttachment: (id: string) => void;
8
10
  removeFile: (id: string) => void;
9
11
  removeImage: (id: string) => void;
12
+ uploadAttachment: (att: LocalAttachment<StreamChatGenerics>) => Promise<LocalAttachment<StreamChatGenerics>>;
10
13
  uploadFile: (id: string) => void;
11
14
  uploadImage: (id: string) => Promise<void>;
12
15
  uploadNewFiles: (files: FileList | File[] | FileLike[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useAttachments.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useAttachments.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAIrF,eAAO,MAAM,cAAc,6TAOZ,MAAM,gBAAgB,CAAC,mBAAmB,GAAG,SAAS,CAAC;;;;;;;4BA+B1D,QAAQ,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE;CAqCzC,CAAC"}
1
+ {"version":3,"file":"useAttachments.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useAttachments.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAIrF,eAAO,MAAM,cAAc,6TAOZ,MAAM,gBAAgB,CAAC,mBAAmB,GAAG,SAAS,CAAC;;;2BA6DtC,MAAM;;;;;;4BA5B1B,QAAQ,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE;CAuIzC,CAAC"}
@@ -1,13 +1,18 @@
1
+ import { __assign, __awaiter, __generator, __rest } from "tslib";
1
2
  import { useCallback } from 'react';
2
3
  import { nanoid } from 'nanoid';
3
4
  import { useImageUploads } from './useImageUploads';
4
5
  import { useFileUploads } from './useFileUploads';
5
- import { useChannelStateContext } from '../../../context/ChannelStateContext';
6
+ import { checkUploadPermissions } from './utils';
7
+ import { useChannelActionContext, useChannelStateContext, useChatContext, useTranslationContext, } from '../../../context';
6
8
  var apiMaxNumberOfFiles = 10;
7
9
  export var useAttachments = function (props, state, dispatch, textareaRef) {
8
- var noFiles = props.noFiles;
10
+ var doFileUploadRequest = props.doFileUploadRequest, errorHandler = props.errorHandler, noFiles = props.noFiles;
9
11
  var fileUploads = state.fileUploads, imageUploads = state.imageUploads;
10
- var _a = useChannelStateContext('useAttachments'), maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
12
+ var getAppSettings = useChatContext('useAttachments').getAppSettings;
13
+ var t = useTranslationContext('useAttachments').t;
14
+ var addNotification = useChannelActionContext('useAttachments').addNotification;
15
+ var _a = useChannelStateContext('useAttachments'), channel = _a.channel, maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
11
16
  var _b = useFileUploads(props, state, dispatch), removeFile = _b.removeFile, uploadFile = _b.uploadFile;
12
17
  var _c = useImageUploads(props, state, dispatch), removeImage = _c.removeImage, uploadImage = _c.uploadImage;
13
18
  // Number of files that the user can still add. Should never be more than the amount allowed by the API.
@@ -50,11 +55,90 @@ export var useAttachments = function (props, state, dispatch, textareaRef) {
50
55
  },
51
56
  // eslint-disable-next-line react-hooks/exhaustive-deps
52
57
  [maxFilesLeft, noFiles]);
58
+ var removeAttachment = function (id) {
59
+ dispatch({ id: id, type: 'removeAttachment' });
60
+ };
61
+ var uploadAttachment = useCallback(function (att) { return __awaiter(void 0, void 0, void 0, function () {
62
+ var $internal, attachment, id, file, canUpload, notificationText, response, uploadedAttachment, error_1, finalError, failedAttachment;
63
+ var _a;
64
+ return __generator(this, function (_b) {
65
+ switch (_b.label) {
66
+ case 0:
67
+ $internal = att.$internal, attachment = __rest(att, ["$internal"]);
68
+ if (!($internal === null || $internal === void 0 ? void 0 : $internal.file))
69
+ return [2 /*return*/, att];
70
+ id = (_a = $internal === null || $internal === void 0 ? void 0 : $internal.id) !== null && _a !== void 0 ? _a : nanoid();
71
+ file = $internal.file;
72
+ return [4 /*yield*/, checkUploadPermissions({
73
+ addNotification: addNotification,
74
+ file: file,
75
+ getAppSettings: getAppSettings,
76
+ t: t,
77
+ uploadType: 'file',
78
+ })];
79
+ case 1:
80
+ canUpload = _b.sent();
81
+ if (!canUpload) {
82
+ notificationText = t('Missing permissions to upload the attachment');
83
+ console.error(new Error(notificationText));
84
+ addNotification(notificationText, 'error');
85
+ return [2 /*return*/, att];
86
+ }
87
+ dispatch({
88
+ attachment: __assign(__assign({}, attachment), { $internal: __assign(__assign({}, $internal), { id: id, uploadState: 'uploading' }) }),
89
+ type: 'upsertAttachment',
90
+ });
91
+ _b.label = 2;
92
+ case 2:
93
+ _b.trys.push([2, 7, , 8]);
94
+ response = void 0;
95
+ if (!doFileUploadRequest) return [3 /*break*/, 4];
96
+ return [4 /*yield*/, doFileUploadRequest(file, channel)];
97
+ case 3:
98
+ response = _b.sent();
99
+ return [3 /*break*/, 6];
100
+ case 4: return [4 /*yield*/, channel.sendFile(file)];
101
+ case 5:
102
+ response = _b.sent();
103
+ _b.label = 6;
104
+ case 6:
105
+ uploadedAttachment = __assign(__assign({}, attachment), { $internal: __assign(__assign({}, $internal), { uploadState: 'finished' }), asset_url: response.file });
106
+ dispatch({
107
+ attachment: uploadedAttachment,
108
+ type: 'upsertAttachment',
109
+ });
110
+ return [2 /*return*/, uploadedAttachment];
111
+ case 7:
112
+ error_1 = _b.sent();
113
+ finalError = { message: t('Error uploading attachment'), name: 'Error' };
114
+ if (typeof error_1.message === 'string') {
115
+ finalError = error_1;
116
+ }
117
+ else if (typeof error_1 === 'object') {
118
+ finalError = Object.assign(finalError, error_1);
119
+ }
120
+ console.error(finalError);
121
+ addNotification(finalError.message, 'error');
122
+ failedAttachment = __assign(__assign({}, attachment), { $internal: __assign(__assign({}, $internal), { uploadState: 'failed' }) });
123
+ dispatch({
124
+ attachment: failedAttachment,
125
+ type: 'upsertAttachment',
126
+ });
127
+ if (errorHandler) {
128
+ errorHandler(finalError, 'upload-attachment', file);
129
+ }
130
+ return [2 /*return*/, failedAttachment];
131
+ case 8: return [2 /*return*/];
132
+ }
133
+ });
134
+ }); }, [addNotification, channel, doFileUploadRequest, dispatch, errorHandler, getAppSettings, t]);
53
135
  return {
54
136
  maxFilesLeft: maxFilesLeft,
55
137
  numberOfUploads: numberOfUploads,
138
+ removeAttachment: removeAttachment,
56
139
  removeFile: removeFile,
57
140
  removeImage: removeImage,
141
+ uploadAttachment: uploadAttachment,
58
142
  uploadFile: uploadFile,
59
143
  uploadImage: uploadImage,
60
144
  uploadNewFiles: uploadNewFiles,
@@ -1 +1 @@
1
- {"version":3,"file":"useCreateMessageInputContext.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCreateMessageInputContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAErF,eAAO,MAAM,4BAA4B,wOAoKxC,CAAC"}
1
+ {"version":3,"file":"useCreateMessageInputContext.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCreateMessageInputContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAErF,eAAO,MAAM,4BAA4B,wOAmLxC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { useMemo } from 'react';
2
2
  export var useCreateMessageInputContext = function (value) {
3
- var additionalTextareaProps = value.additionalTextareaProps, attachments = value.attachments, autocompleteTriggers = value.autocompleteTriggers, cancelURLEnrichment = value.cancelURLEnrichment, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeMentionsList = value.closeMentionsList, cooldownInterval = value.cooldownInterval, cooldownRemaining = value.cooldownRemaining, disabled = value.disabled, disableMentions = value.disableMentions, dismissLinkPreview = value.dismissLinkPreview, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiSearchIndex = value.emojiSearchIndex, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, findAndEnqueueURLsToEnrich = value.findAndEnqueueURLsToEnrich, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleSubmit = value.handleSubmit, hideSendButton = value.hideSendButton, imageOrder = value.imageOrder, imageUploads = value.imageUploads, insertText = value.insertText, isUploadEnabled = value.isUploadEnabled, linkPreviews = value.linkPreviews, maxFilesLeft = value.maxFilesLeft, maxRows = value.maxRows, mentionAllAppUsers = value.mentionAllAppUsers, mentioned_users = value.mentioned_users, mentionQueryParams = value.mentionQueryParams, message = value.message, noFiles = value.noFiles, numberOfUploads = value.numberOfUploads, onPaste = value.onPaste, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openMentionsList = value.openMentionsList, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, removeFile = value.removeFile, removeImage = value.removeImage, setCooldownRemaining = value.setCooldownRemaining, setText = value.setText, shouldSubmit = value.shouldSubmit, showCommandsList = value.showCommandsList, showMentionsList = value.showMentionsList, text = value.text, textareaRef = value.textareaRef, uploadFile = value.uploadFile, uploadImage = value.uploadImage, uploadNewFiles = value.uploadNewFiles, useMentionsTransliteration = value.useMentionsTransliteration;
3
+ var additionalTextareaProps = value.additionalTextareaProps, asyncMessagesMultiSendEnabled = value.asyncMessagesMultiSendEnabled, attachments = value.attachments, audioRecordingEnabled = value.audioRecordingEnabled, autocompleteTriggers = value.autocompleteTriggers, cancelURLEnrichment = value.cancelURLEnrichment, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeMentionsList = value.closeMentionsList, cooldownInterval = value.cooldownInterval, cooldownRemaining = value.cooldownRemaining, disabled = value.disabled, disableMentions = value.disableMentions, dismissLinkPreview = value.dismissLinkPreview, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiSearchIndex = value.emojiSearchIndex, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, findAndEnqueueURLsToEnrich = value.findAndEnqueueURLsToEnrich, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleSubmit = value.handleSubmit, hideSendButton = value.hideSendButton, imageOrder = value.imageOrder, imageUploads = value.imageUploads, insertText = value.insertText, isUploadEnabled = value.isUploadEnabled, linkPreviews = value.linkPreviews, maxFilesLeft = value.maxFilesLeft, maxRows = value.maxRows, mentionAllAppUsers = value.mentionAllAppUsers, mentioned_users = value.mentioned_users, mentionQueryParams = value.mentionQueryParams, message = value.message, noFiles = value.noFiles, numberOfUploads = value.numberOfUploads, onPaste = value.onPaste, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openMentionsList = value.openMentionsList, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, recordingController = value.recordingController, removeAttachment = value.removeAttachment, removeFile = value.removeFile, removeImage = value.removeImage, setCooldownRemaining = value.setCooldownRemaining, setText = value.setText, shouldSubmit = value.shouldSubmit, showCommandsList = value.showCommandsList, showMentionsList = value.showMentionsList, text = value.text, textareaRef = value.textareaRef, uploadAttachment = value.uploadAttachment, uploadFile = value.uploadFile, uploadImage = value.uploadImage, uploadNewFiles = value.uploadNewFiles, useMentionsTransliteration = value.useMentionsTransliteration;
4
4
  var editing = message === null || message === void 0 ? void 0 : message.editing;
5
5
  var fileUploadsValue = Object.entries(fileUploads)
6
6
  // eslint-disable-next-line
@@ -21,7 +21,9 @@ export var useCreateMessageInputContext = function (value) {
21
21
  var parentId = parent === null || parent === void 0 ? void 0 : parent.id;
22
22
  var messageInputContext = useMemo(function () { return ({
23
23
  additionalTextareaProps: additionalTextareaProps,
24
+ asyncMessagesMultiSendEnabled: asyncMessagesMultiSendEnabled,
24
25
  attachments: attachments,
26
+ audioRecordingEnabled: audioRecordingEnabled,
25
27
  autocompleteTriggers: autocompleteTriggers,
26
28
  cancelURLEnrichment: cancelURLEnrichment,
27
29
  clearEditingState: clearEditingState,
@@ -64,6 +66,8 @@ export var useCreateMessageInputContext = function (value) {
64
66
  overrideSubmitHandler: overrideSubmitHandler,
65
67
  parent: parent,
66
68
  publishTypingEvent: publishTypingEvent,
69
+ recordingController: recordingController,
70
+ removeAttachment: removeAttachment,
67
71
  removeFile: removeFile,
68
72
  removeImage: removeImage,
69
73
  setCooldownRemaining: setCooldownRemaining,
@@ -73,6 +77,7 @@ export var useCreateMessageInputContext = function (value) {
73
77
  showMentionsList: showMentionsList,
74
78
  text: text,
75
79
  textareaRef: textareaRef,
80
+ uploadAttachment: uploadAttachment,
76
81
  uploadFile: uploadFile,
77
82
  uploadImage: uploadImage,
78
83
  uploadNewFiles: uploadNewFiles,
@@ -80,6 +85,8 @@ export var useCreateMessageInputContext = function (value) {
80
85
  }); },
81
86
  // eslint-disable-next-line react-hooks/exhaustive-deps
82
87
  [
88
+ asyncMessagesMultiSendEnabled,
89
+ audioRecordingEnabled,
83
90
  cancelURLEnrichment,
84
91
  cooldownInterval,
85
92
  cooldownRemaining,
@@ -88,6 +95,7 @@ export var useCreateMessageInputContext = function (value) {
88
95
  emojiSearchIndex,
89
96
  fileUploadsValue,
90
97
  findAndEnqueueURLsToEnrich,
98
+ handleSubmit,
91
99
  hideSendButton,
92
100
  imageUploadsValue,
93
101
  isUploadEnabled,
@@ -95,10 +103,12 @@ export var useCreateMessageInputContext = function (value) {
95
103
  mentionedUsersLength,
96
104
  parentId,
97
105
  publishTypingEvent,
106
+ recordingController,
107
+ removeAttachment,
98
108
  showCommandsList,
99
109
  showMentionsList,
100
110
  text,
101
- handleSubmit,
111
+ uploadAttachment,
102
112
  ]);
103
113
  return messageInputContext;
104
114
  };