@sendbird/uikit-react 3.3.7 → 3.4.0-rc.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 (572) hide show
  1. package/App.js +60 -34
  2. package/App.js.map +1 -1
  3. package/CHANGELOG.md +150 -0
  4. package/Channel/components/ChannelHeader.js +20 -18
  5. package/Channel/components/ChannelHeader.js.map +1 -1
  6. package/Channel/components/ChannelUI.js +48 -29
  7. package/Channel/components/ChannelUI.js.map +1 -1
  8. package/Channel/components/FileViewer.js +15 -14
  9. package/Channel/components/FileViewer.js.map +1 -1
  10. package/Channel/components/FrozenNotification.js +4 -4
  11. package/Channel/components/Message.js +33 -24
  12. package/Channel/components/Message.js.map +1 -1
  13. package/Channel/components/MessageInput.js +62 -20
  14. package/Channel/components/MessageInput.js.map +1 -1
  15. package/Channel/components/MessageList.js +36 -27
  16. package/Channel/components/MessageList.js.map +1 -1
  17. package/Channel/components/RemoveMessageModal.js +21 -17
  18. package/Channel/components/RemoveMessageModal.js.map +1 -1
  19. package/Channel/components/SuggestedMentionList.js +17 -16
  20. package/Channel/components/SuggestedMentionList.js.map +1 -1
  21. package/Channel/components/TypingIndicator.js +15 -14
  22. package/Channel/components/TypingIndicator.js.map +1 -1
  23. package/Channel/components/UnreadCount.js +4 -4
  24. package/Channel/context.js +14 -13
  25. package/Channel/context.js.map +1 -1
  26. package/Channel.js +43 -28
  27. package/Channel.js.map +1 -1
  28. package/ChannelList/components/AddChannel.js +15 -15
  29. package/ChannelList/components/ChannelListHeader.js +7 -7
  30. package/ChannelList/components/ChannelListUI.js +29 -28
  31. package/ChannelList/components/ChannelListUI.js.map +1 -1
  32. package/ChannelList/components/ChannelPreview.js +26 -25
  33. package/ChannelList/components/ChannelPreview.js.map +1 -1
  34. package/ChannelList/components/ChannelPreviewAction.js +14 -14
  35. package/ChannelList/context.js +8 -8
  36. package/ChannelList.js +29 -28
  37. package/ChannelList.js.map +1 -1
  38. package/{ChannelListProvider-eb4708a3.js → ChannelListProvider-3c78429f.js} +8 -8
  39. package/{ChannelListProvider-eb4708a3.js.map → ChannelListProvider-3c78429f.js.map} +1 -1
  40. package/{ChannelProvider-1e540c0e.js → ChannelProvider-1d70b8a0.js} +88 -13
  41. package/ChannelProvider-1d70b8a0.js.map +1 -0
  42. package/ChannelSettings/components/ChannelProfile.js +12 -12
  43. package/ChannelSettings/components/ChannelSettingsUI.js +18 -18
  44. package/ChannelSettings/components/EditDetailsModal.js +12 -12
  45. package/ChannelSettings/components/LeaveChannel.js +12 -12
  46. package/ChannelSettings/components/ModerationPanel.js +15 -15
  47. package/ChannelSettings/components/UserListItem.js +11 -11
  48. package/ChannelSettings/components/UserPanel.js +18 -15
  49. package/ChannelSettings/components/UserPanel.js.map +1 -1
  50. package/ChannelSettings/context.js +3 -3
  51. package/ChannelSettings.js +18 -18
  52. package/CreateChannel/components/CreateChannelUI.js +14 -14
  53. package/CreateChannel/components/InviteUsers.js +14 -14
  54. package/CreateChannel/components/SelectChannelType.js +11 -11
  55. package/CreateChannel/context.js +4 -4
  56. package/CreateChannel.js +14 -14
  57. package/{CreateChannelProvider-ed2e3cb4.js → CreateChannelProvider-946fb371.js} +1 -1
  58. package/{CreateChannelProvider-ed2e3cb4.js.map → CreateChannelProvider-946fb371.js.map} +1 -1
  59. package/CreateOpenChannel/components/CreateOpenChannelUI.js +10 -10
  60. package/CreateOpenChannel/context.js +1 -1
  61. package/CreateOpenChannel.js +10 -10
  62. package/EditUserProfile/components/EditUserProfileUI.js +13 -13
  63. package/EditUserProfile.js +13 -13
  64. package/{LocalizationContext-4c2faa9a.js → LocalizationContext-539093a9.js} +3 -3
  65. package/{LocalizationContext-4c2faa9a.js.map → LocalizationContext-539093a9.js.map} +1 -1
  66. package/{MediaQueryContext-97a21b7e.js → MediaQueryContext-79c8ad08.js} +1 -1
  67. package/{MediaQueryContext-97a21b7e.js.map → MediaQueryContext-79c8ad08.js.map} +1 -1
  68. package/{MemberList-6483a7db.js → MemberList-1350e670.js} +10 -7
  69. package/MemberList-1350e670.js.map +1 -0
  70. package/MessageSearch/components/MessageSearchUI.js +13 -11
  71. package/MessageSearch/components/MessageSearchUI.js.map +1 -1
  72. package/MessageSearch/context.js +2 -2
  73. package/MessageSearch.js +13 -11
  74. package/MessageSearch.js.map +1 -1
  75. package/OpenChannel/components/FrozenChannelNotification.js +4 -4
  76. package/OpenChannel/components/OpenChannelHeader.js +13 -13
  77. package/OpenChannel/components/OpenChannelInput.js +16 -15
  78. package/OpenChannel/components/OpenChannelInput.js.map +1 -1
  79. package/OpenChannel/components/OpenChannelMessage.js +22 -22
  80. package/OpenChannel/components/OpenChannelMessageList.js +24 -24
  81. package/OpenChannel/components/OpenChannelUI.js +24 -24
  82. package/OpenChannel/context.js +9 -9
  83. package/OpenChannel.js +24 -24
  84. package/OpenChannelList/components/OpenChannelListUI.js +13 -13
  85. package/OpenChannelList/components/OpenChannelPreview.js +4 -4
  86. package/OpenChannelList/context.js +4 -4
  87. package/OpenChannelList.js +13 -13
  88. package/{OpenChannelListProvider-95808e48.js → OpenChannelListProvider-64e2ca27.js} +3 -3
  89. package/{OpenChannelListProvider-95808e48.js.map → OpenChannelListProvider-64e2ca27.js.map} +1 -1
  90. package/{OpenChannelProvider-e3137432.js → OpenChannelProvider-5a54a791.js} +7 -7
  91. package/{OpenChannelProvider-e3137432.js.map → OpenChannelProvider-5a54a791.js.map} +1 -1
  92. package/OpenChannelSettings/components/EditDetailsModal.js +13 -13
  93. package/OpenChannelSettings/components/OpenChannelProfile.js +13 -13
  94. package/OpenChannelSettings/components/OpenChannelSettingsUI.js +18 -18
  95. package/OpenChannelSettings/components/OperatorUI.js +17 -17
  96. package/OpenChannelSettings/components/ParticipantUI.js +15 -15
  97. package/OpenChannelSettings/context.js +3 -3
  98. package/OpenChannelSettings.js +18 -18
  99. package/README.md +8 -0
  100. package/{RemoveMessageModal-0baf3553.js → RemoveMessageModal-cd536405.js} +3 -3
  101. package/{RemoveMessageModal-0baf3553.js.map → RemoveMessageModal-cd536405.js.map} +1 -1
  102. package/SendbirdProvider.js +29 -11
  103. package/SendbirdProvider.js.map +1 -1
  104. package/Thread/components/ParentMessageInfo.js +32 -22
  105. package/Thread/components/ParentMessageInfo.js.map +1 -1
  106. package/Thread/components/ParentMessageInfoItem.js +33 -16
  107. package/Thread/components/ParentMessageInfoItem.js.map +1 -1
  108. package/Thread/components/ThreadHeader.js +6 -6
  109. package/Thread/components/ThreadList.js +33 -24
  110. package/Thread/components/ThreadList.js.map +1 -1
  111. package/Thread/components/ThreadListItem.js +40 -25
  112. package/Thread/components/ThreadListItem.js.map +1 -1
  113. package/Thread/components/ThreadMessageInput.js +71 -21
  114. package/Thread/components/ThreadMessageInput.js.map +1 -1
  115. package/Thread/components/ThreadUI.js +49 -31
  116. package/Thread/components/ThreadUI.js.map +1 -1
  117. package/Thread/context.js +9 -8
  118. package/Thread/context.js.map +1 -1
  119. package/Thread.js +47 -29
  120. package/Thread.js.map +1 -1
  121. package/{ThreadProvider-a1413f01.js → ThreadProvider-9f8652df.js} +91 -11
  122. package/ThreadProvider-9f8652df.js.map +1 -0
  123. package/{UserProfileContext-e5d90f15.js → UserProfileContext-bd8525b7.js} +1 -1
  124. package/{UserProfileContext-e5d90f15.js.map → UserProfileContext-bd8525b7.js.map} +1 -1
  125. package/VoiceMessageInputWrapper-b149ff89.js +173 -0
  126. package/VoiceMessageInputWrapper-b149ff89.js.map +1 -0
  127. package/VoicePlayer/context.js +5 -0
  128. package/VoicePlayer/context.js.map +1 -0
  129. package/VoicePlayer/useVoicePlayer.js +87 -0
  130. package/VoicePlayer/useVoicePlayer.js.map +1 -0
  131. package/VoiceRecorder/context.js +243 -0
  132. package/VoiceRecorder/context.js.map +1 -0
  133. package/VoiceRecorder/useVoiceRecorder.js +117 -0
  134. package/VoiceRecorder/useVoiceRecorder.js.map +1 -0
  135. package/{_rollupPluginBabelHelpers-b45d3824.js → _rollupPluginBabelHelpers-09618dc3.js} +1 -1
  136. package/_rollupPluginBabelHelpers-09618dc3.js.map +1 -0
  137. package/{actionTypes-c69daac1.js → actionTypes-0dd0c34b.js} +1 -1
  138. package/{actionTypes-c69daac1.js.map → actionTypes-0dd0c34b.js.map} +1 -1
  139. package/cjs/App.js +60 -34
  140. package/cjs/App.js.map +1 -1
  141. package/cjs/Channel/components/ChannelHeader.js +20 -18
  142. package/cjs/Channel/components/ChannelHeader.js.map +1 -1
  143. package/cjs/Channel/components/ChannelUI.js +48 -29
  144. package/cjs/Channel/components/ChannelUI.js.map +1 -1
  145. package/cjs/Channel/components/FileViewer.js +15 -14
  146. package/cjs/Channel/components/FileViewer.js.map +1 -1
  147. package/cjs/Channel/components/FrozenNotification.js +4 -4
  148. package/cjs/Channel/components/Message.js +33 -24
  149. package/cjs/Channel/components/Message.js.map +1 -1
  150. package/cjs/Channel/components/MessageInput.js +62 -20
  151. package/cjs/Channel/components/MessageInput.js.map +1 -1
  152. package/cjs/Channel/components/MessageList.js +36 -27
  153. package/cjs/Channel/components/MessageList.js.map +1 -1
  154. package/cjs/Channel/components/RemoveMessageModal.js +21 -17
  155. package/cjs/Channel/components/RemoveMessageModal.js.map +1 -1
  156. package/cjs/Channel/components/SuggestedMentionList.js +17 -16
  157. package/cjs/Channel/components/SuggestedMentionList.js.map +1 -1
  158. package/cjs/Channel/components/TypingIndicator.js +15 -14
  159. package/cjs/Channel/components/TypingIndicator.js.map +1 -1
  160. package/cjs/Channel/components/UnreadCount.js +4 -4
  161. package/cjs/Channel/context.js +14 -13
  162. package/cjs/Channel/context.js.map +1 -1
  163. package/cjs/Channel.js +43 -28
  164. package/cjs/Channel.js.map +1 -1
  165. package/cjs/ChannelList/components/AddChannel.js +15 -15
  166. package/cjs/ChannelList/components/ChannelListHeader.js +7 -7
  167. package/cjs/ChannelList/components/ChannelListUI.js +29 -28
  168. package/cjs/ChannelList/components/ChannelListUI.js.map +1 -1
  169. package/cjs/ChannelList/components/ChannelPreview.js +26 -25
  170. package/cjs/ChannelList/components/ChannelPreview.js.map +1 -1
  171. package/cjs/ChannelList/components/ChannelPreviewAction.js +14 -14
  172. package/cjs/ChannelList/context.js +8 -8
  173. package/cjs/ChannelList.js +29 -28
  174. package/cjs/ChannelList.js.map +1 -1
  175. package/cjs/{ChannelListProvider-94df9f01.js → ChannelListProvider-7df03e2a.js} +8 -8
  176. package/cjs/{ChannelListProvider-94df9f01.js.map → ChannelListProvider-7df03e2a.js.map} +1 -1
  177. package/cjs/{ChannelProvider-3fbf7c5e.js → ChannelProvider-56b10dd6.js} +87 -12
  178. package/cjs/ChannelProvider-56b10dd6.js.map +1 -0
  179. package/cjs/ChannelSettings/components/ChannelProfile.js +12 -12
  180. package/cjs/ChannelSettings/components/ChannelSettingsUI.js +18 -18
  181. package/cjs/ChannelSettings/components/EditDetailsModal.js +12 -12
  182. package/cjs/ChannelSettings/components/LeaveChannel.js +12 -12
  183. package/cjs/ChannelSettings/components/ModerationPanel.js +15 -15
  184. package/cjs/ChannelSettings/components/UserListItem.js +11 -11
  185. package/cjs/ChannelSettings/components/UserPanel.js +18 -15
  186. package/cjs/ChannelSettings/components/UserPanel.js.map +1 -1
  187. package/cjs/ChannelSettings/context.js +3 -3
  188. package/cjs/ChannelSettings.js +18 -18
  189. package/cjs/CreateChannel/components/CreateChannelUI.js +14 -14
  190. package/cjs/CreateChannel/components/InviteUsers.js +14 -14
  191. package/cjs/CreateChannel/components/SelectChannelType.js +11 -11
  192. package/cjs/CreateChannel/context.js +4 -4
  193. package/cjs/CreateChannel.js +14 -14
  194. package/cjs/{CreateChannelProvider-70422add.js → CreateChannelProvider-359f35d1.js} +1 -1
  195. package/cjs/{CreateChannelProvider-70422add.js.map → CreateChannelProvider-359f35d1.js.map} +1 -1
  196. package/cjs/CreateOpenChannel/components/CreateOpenChannelUI.js +10 -10
  197. package/cjs/CreateOpenChannel/context.js +1 -1
  198. package/cjs/CreateOpenChannel.js +10 -10
  199. package/cjs/EditUserProfile/components/EditUserProfileUI.js +13 -13
  200. package/cjs/EditUserProfile.js +13 -13
  201. package/cjs/{LocalizationContext-a0f833e9.js → LocalizationContext-7d2c13ee.js} +3 -3
  202. package/cjs/{LocalizationContext-a0f833e9.js.map → LocalizationContext-7d2c13ee.js.map} +1 -1
  203. package/cjs/{MediaQueryContext-770ae8bc.js → MediaQueryContext-36855cf6.js} +1 -1
  204. package/cjs/{MediaQueryContext-770ae8bc.js.map → MediaQueryContext-36855cf6.js.map} +1 -1
  205. package/cjs/{MemberList-4a0910dd.js → MemberList-cf4488bc.js} +10 -7
  206. package/cjs/MemberList-cf4488bc.js.map +1 -0
  207. package/cjs/MessageSearch/components/MessageSearchUI.js +13 -11
  208. package/cjs/MessageSearch/components/MessageSearchUI.js.map +1 -1
  209. package/cjs/MessageSearch/context.js +2 -2
  210. package/cjs/MessageSearch.js +13 -11
  211. package/cjs/MessageSearch.js.map +1 -1
  212. package/cjs/OpenChannel/components/FrozenChannelNotification.js +4 -4
  213. package/cjs/OpenChannel/components/OpenChannelHeader.js +13 -13
  214. package/cjs/OpenChannel/components/OpenChannelInput.js +16 -15
  215. package/cjs/OpenChannel/components/OpenChannelInput.js.map +1 -1
  216. package/cjs/OpenChannel/components/OpenChannelMessage.js +22 -22
  217. package/cjs/OpenChannel/components/OpenChannelMessageList.js +24 -24
  218. package/cjs/OpenChannel/components/OpenChannelUI.js +24 -24
  219. package/cjs/OpenChannel/context.js +9 -9
  220. package/cjs/OpenChannel.js +24 -24
  221. package/cjs/OpenChannelList/components/OpenChannelListUI.js +13 -13
  222. package/cjs/OpenChannelList/components/OpenChannelPreview.js +4 -4
  223. package/cjs/OpenChannelList/context.js +4 -4
  224. package/cjs/OpenChannelList.js +13 -13
  225. package/cjs/{OpenChannelListProvider-e97c8ed9.js → OpenChannelListProvider-d0e494e8.js} +3 -3
  226. package/cjs/{OpenChannelListProvider-e97c8ed9.js.map → OpenChannelListProvider-d0e494e8.js.map} +1 -1
  227. package/cjs/{OpenChannelProvider-9b453ac0.js → OpenChannelProvider-84d45a52.js} +7 -7
  228. package/cjs/{OpenChannelProvider-9b453ac0.js.map → OpenChannelProvider-84d45a52.js.map} +1 -1
  229. package/cjs/OpenChannelSettings/components/EditDetailsModal.js +13 -13
  230. package/cjs/OpenChannelSettings/components/OpenChannelProfile.js +13 -13
  231. package/cjs/OpenChannelSettings/components/OpenChannelSettingsUI.js +18 -18
  232. package/cjs/OpenChannelSettings/components/OperatorUI.js +17 -17
  233. package/cjs/OpenChannelSettings/components/ParticipantUI.js +15 -15
  234. package/cjs/OpenChannelSettings/context.js +3 -3
  235. package/cjs/OpenChannelSettings.js +18 -18
  236. package/cjs/{RemoveMessageModal-7bde69be.js → RemoveMessageModal-44018509.js} +3 -3
  237. package/cjs/{RemoveMessageModal-7bde69be.js.map → RemoveMessageModal-44018509.js.map} +1 -1
  238. package/cjs/SendbirdProvider.js +29 -11
  239. package/cjs/SendbirdProvider.js.map +1 -1
  240. package/cjs/Thread/components/ParentMessageInfo.js +34 -24
  241. package/cjs/Thread/components/ParentMessageInfo.js.map +1 -1
  242. package/cjs/Thread/components/ParentMessageInfoItem.js +33 -16
  243. package/cjs/Thread/components/ParentMessageInfoItem.js.map +1 -1
  244. package/cjs/Thread/components/ThreadHeader.js +6 -6
  245. package/cjs/Thread/components/ThreadList.js +33 -24
  246. package/cjs/Thread/components/ThreadList.js.map +1 -1
  247. package/cjs/Thread/components/ThreadListItem.js +41 -26
  248. package/cjs/Thread/components/ThreadListItem.js.map +1 -1
  249. package/cjs/Thread/components/ThreadMessageInput.js +73 -23
  250. package/cjs/Thread/components/ThreadMessageInput.js.map +1 -1
  251. package/cjs/Thread/components/ThreadUI.js +49 -31
  252. package/cjs/Thread/components/ThreadUI.js.map +1 -1
  253. package/cjs/Thread/context.js +9 -8
  254. package/cjs/Thread/context.js.map +1 -1
  255. package/cjs/Thread.js +47 -29
  256. package/cjs/Thread.js.map +1 -1
  257. package/cjs/{ThreadProvider-71441c16.js → ThreadProvider-e8591a61.js} +90 -10
  258. package/cjs/ThreadProvider-e8591a61.js.map +1 -0
  259. package/cjs/{UserProfileContext-74e6409b.js → UserProfileContext-89b8a98d.js} +1 -1
  260. package/cjs/{UserProfileContext-74e6409b.js.map → UserProfileContext-89b8a98d.js.map} +1 -1
  261. package/cjs/VoiceMessageInputWrapper-6d309e8c.js +179 -0
  262. package/cjs/VoiceMessageInputWrapper-6d309e8c.js.map +1 -0
  263. package/cjs/VoicePlayer/context.js +14 -0
  264. package/cjs/VoicePlayer/context.js.map +1 -0
  265. package/cjs/VoicePlayer/useVoicePlayer.js +91 -0
  266. package/cjs/VoicePlayer/useVoicePlayer.js.map +1 -0
  267. package/cjs/VoiceRecorder/context.js +253 -0
  268. package/cjs/VoiceRecorder/context.js.map +1 -0
  269. package/cjs/VoiceRecorder/useVoiceRecorder.js +122 -0
  270. package/cjs/VoiceRecorder/useVoiceRecorder.js.map +1 -0
  271. package/cjs/{_rollupPluginBabelHelpers-25763ef8.js → _rollupPluginBabelHelpers-9807f0cb.js} +1 -1
  272. package/cjs/_rollupPluginBabelHelpers-9807f0cb.js.map +1 -0
  273. package/cjs/{actionTypes-85a652e4.js → actionTypes-64f969d0.js} +1 -1
  274. package/cjs/{actionTypes-85a652e4.js.map → actionTypes-64f969d0.js.map} +1 -1
  275. package/cjs/{color-51fd9a0c.js → color-ae15b40e.js} +1 -1
  276. package/cjs/{color-51fd9a0c.js.map → color-ae15b40e.js.map} +1 -1
  277. package/cjs/{compareIds-44844f10.js → compareIds-88a3abee.js} +1 -1
  278. package/cjs/{compareIds-44844f10.js.map → compareIds-88a3abee.js.map} +1 -1
  279. package/cjs/{const-4761421a.js → const-6d993a66.js} +1 -1
  280. package/cjs/{const-4761421a.js.map → const-6d993a66.js.map} +1 -1
  281. package/cjs/{const-618dd4f4.js → const-98ae036e.js} +1 -1
  282. package/cjs/{const-618dd4f4.js.map → const-98ae036e.js.map} +1 -1
  283. package/cjs/consts-7142bdfe.js +36 -0
  284. package/cjs/consts-7142bdfe.js.map +1 -0
  285. package/cjs/{context-4b1de73e.js → context-9f945182.js} +2 -2
  286. package/cjs/{context-4b1de73e.js.map → context-9f945182.js.map} +1 -1
  287. package/cjs/dist/index.css +413 -16
  288. package/cjs/dist/index.css.map +1 -1
  289. package/cjs/{index-32b39be6.js → index-1f2ac00b.js} +5 -5
  290. package/cjs/{index-32b39be6.js.map → index-1f2ac00b.js.map} +1 -1
  291. package/cjs/{index-4dc29990.js → index-31135e46.js} +1 -1
  292. package/cjs/{index-4dc29990.js.map → index-31135e46.js.map} +1 -1
  293. package/cjs/{index-9f6a474c.js → index-318ca5bb.js} +2 -2
  294. package/cjs/{index-9f6a474c.js.map → index-318ca5bb.js.map} +1 -1
  295. package/cjs/{index-0e76934f.js → index-45c199d5.js} +8 -8
  296. package/cjs/index-45c199d5.js.map +1 -0
  297. package/cjs/{index-bfe8bdde.js → index-6691da2c.js} +49 -3
  298. package/cjs/index-6691da2c.js.map +1 -0
  299. package/cjs/{index-97532335.js → index-80ec94b9.js} +2 -2
  300. package/cjs/{index-97532335.js.map → index-80ec94b9.js.map} +1 -1
  301. package/cjs/{index-2c095d94.js → index-86b55059.js} +2 -2
  302. package/cjs/{index-2c095d94.js.map → index-86b55059.js.map} +1 -1
  303. package/cjs/{index-c4738d8b.js → index-9d2d5d23.js} +3 -3
  304. package/cjs/{index-c4738d8b.js.map → index-9d2d5d23.js.map} +1 -1
  305. package/cjs/{index-756baf20.js → index-9f074bb0.js} +7 -7
  306. package/cjs/{index-756baf20.js.map → index-9f074bb0.js.map} +1 -1
  307. package/cjs/{index-4d6f2a4e.js → index-a34a53d3.js} +4 -4
  308. package/cjs/{index-4d6f2a4e.js.map → index-a34a53d3.js.map} +1 -1
  309. package/cjs/{index-67134275.js → index-c34f34a2.js} +2 -2
  310. package/cjs/{index-67134275.js.map → index-c34f34a2.js.map} +1 -1
  311. package/cjs/index-e0971532.js +280 -0
  312. package/cjs/index-e0971532.js.map +1 -0
  313. package/cjs/index-fa531baa.js +175 -0
  314. package/cjs/index-fa531baa.js.map +1 -0
  315. package/cjs/{index-7d4e7ad9.js → index-fb42d34c.js} +1 -1
  316. package/cjs/{index-7d4e7ad9.js.map → index-fb42d34c.js.map} +1 -1
  317. package/cjs/index.js +51 -39
  318. package/cjs/index.js.map +1 -1
  319. package/cjs/lame.all.js +14498 -0
  320. package/cjs/lame.all.js.map +1 -0
  321. package/cjs/sendbirdSelectors.js +2 -2
  322. package/cjs/{stringSet-87e51d08.js → stringSet-d4071e23.js} +5 -1
  323. package/cjs/stringSet-d4071e23.js.map +1 -0
  324. package/cjs/{topics-d9091126.js → topics-7108f68f.js} +1 -1
  325. package/cjs/{topics-d9091126.js.map → topics-7108f68f.js.map} +1 -1
  326. package/cjs/{tslib.es6-0b4c49f8.js → tslib.es6-23b4ef32.js} +1 -1
  327. package/cjs/{tslib.es6-0b4c49f8.js.map → tslib.es6-23b4ef32.js.map} +1 -1
  328. package/cjs/types-8f7bbb00.js +11 -0
  329. package/cjs/types-8f7bbb00.js.map +1 -0
  330. package/cjs/ui/Accordion.js +3 -3
  331. package/cjs/ui/AccordionGroup.js +2 -2
  332. package/cjs/ui/AdminMessage.js +3 -3
  333. package/cjs/ui/Avatar.js +2 -2
  334. package/cjs/ui/Badge.js +5 -5
  335. package/cjs/ui/BottomSheet.js +1 -1
  336. package/cjs/ui/Button.js +3 -3
  337. package/cjs/ui/ChannelAvatar.js +3 -3
  338. package/cjs/ui/ConnectionStatus.js +4 -4
  339. package/cjs/ui/ContextMenu.js +5 -5
  340. package/cjs/ui/DateSeparator.js +4 -4
  341. package/cjs/ui/EmojiReactions.js +7 -7
  342. package/cjs/ui/FileMessageItemBody.js +6 -6
  343. package/cjs/ui/FileViewer.js +8 -8
  344. package/cjs/ui/Icon.js +354 -314
  345. package/cjs/ui/Icon.js.map +1 -1
  346. package/cjs/ui/IconButton.js +1 -1
  347. package/cjs/ui/ImageRenderer.js +1 -1
  348. package/cjs/ui/Input.js +2 -2
  349. package/cjs/ui/Label.js +2 -2
  350. package/cjs/ui/LinkLabel.js +2 -2
  351. package/cjs/ui/Loader.js +1 -1
  352. package/cjs/ui/MentionLabel.js +11 -11
  353. package/cjs/ui/MessageContent.js +35 -20
  354. package/cjs/ui/MessageContent.js.map +1 -1
  355. package/cjs/ui/MessageInput.js +35 -16
  356. package/cjs/ui/MessageInput.js.map +1 -1
  357. package/cjs/ui/MessageItemMenu.js +9 -8
  358. package/cjs/ui/MessageItemMenu.js.map +1 -1
  359. package/cjs/ui/MessageItemReactionMenu.js +5 -5
  360. package/cjs/ui/MessageSearchFileItem.js +17 -14
  361. package/cjs/ui/MessageSearchFileItem.js.map +1 -1
  362. package/cjs/ui/MessageSearchItem.js +9 -9
  363. package/cjs/ui/MessageStatus.js +10 -10
  364. package/cjs/ui/Modal.js +7 -7
  365. package/cjs/ui/OGMessageItemBody.js +36 -26
  366. package/cjs/ui/OGMessageItemBody.js.map +1 -1
  367. package/cjs/ui/OpenChannelAdminMessage.js +3 -3
  368. package/cjs/ui/OpenChannelAvatar.js +6 -6
  369. package/cjs/ui/OpenchannelConversationHeader.js +6 -6
  370. package/cjs/ui/OpenchannelFileMessage.js +16 -16
  371. package/cjs/ui/OpenchannelOGMessage.js +16 -16
  372. package/cjs/ui/OpenchannelThumbnailMessage.js +15 -15
  373. package/cjs/ui/OpenchannelUserMessage.js +16 -16
  374. package/cjs/ui/PlaceHolder.js +6 -6
  375. package/cjs/ui/PlaybackTime.js +36 -0
  376. package/cjs/ui/PlaybackTime.js.map +1 -0
  377. package/cjs/ui/ProgressBar.js +41 -0
  378. package/cjs/ui/ProgressBar.js.map +1 -0
  379. package/cjs/ui/QuoteMessage.js +14 -8
  380. package/cjs/ui/QuoteMessage.js.map +1 -1
  381. package/cjs/ui/QuoteMessageInput.js +12 -11
  382. package/cjs/ui/QuoteMessageInput.js.map +1 -1
  383. package/cjs/ui/ReactionBadge.js +3 -3
  384. package/cjs/ui/ReactionButton.js +1 -1
  385. package/cjs/ui/SortByRow.js +2 -2
  386. package/cjs/ui/TextButton.js +2 -2
  387. package/cjs/ui/TextMessageItemBody.js +11 -11
  388. package/cjs/ui/ThreadReplies.js +6 -6
  389. package/cjs/ui/ThumbnailMessageItemBody.js +2 -2
  390. package/cjs/ui/Tooltip.js +3 -3
  391. package/cjs/ui/TooltipWrapper.js +1 -1
  392. package/cjs/ui/UnknownMessageItemBody.js +6 -6
  393. package/cjs/ui/UserListItem.js +11 -11
  394. package/cjs/ui/UserProfile.js +10 -10
  395. package/cjs/ui/VoiceMessageItemBody.js +119 -0
  396. package/cjs/ui/VoiceMessageItemBody.js.map +1 -0
  397. package/cjs/ui/VoiceMessgeInput.js +23 -0
  398. package/cjs/ui/VoiceMessgeInput.js.map +1 -0
  399. package/cjs/ui/Word.js +11 -11
  400. package/cjs/{useLongPress-ff6353a1.js → useLongPress-62a89444.js} +3 -3
  401. package/cjs/{useLongPress-ff6353a1.js.map → useLongPress-62a89444.js.map} +1 -1
  402. package/cjs/useSendbirdStateContext.js +1 -1
  403. package/cjs/utils/message/isVoiceMessage.js +10 -0
  404. package/cjs/utils/message/isVoiceMessage.js.map +1 -0
  405. package/cjs/{utils-aa1597cc.js → utils-178ccede.js} +1 -1
  406. package/cjs/{utils-aa1597cc.js.map → utils-178ccede.js.map} +1 -1
  407. package/cjs/{utils-edb40a10.js → utils-41fef560.js} +2 -2
  408. package/cjs/{utils-edb40a10.js.map → utils-41fef560.js.map} +1 -1
  409. package/cjs/{utils-c948ddfe.js → utils-7bec6eaa.js} +1 -1
  410. package/cjs/{utils-c948ddfe.js.map → utils-7bec6eaa.js.map} +1 -1
  411. package/cjs/{utils-72ab488f.js → utils-b691a058.js} +1 -1
  412. package/cjs/{utils-72ab488f.js.map → utils-b691a058.js.map} +1 -1
  413. package/cjs/{uuid-0b5f4e5e.js → uuid-42040a5c.js} +1 -1
  414. package/cjs/{uuid-0b5f4e5e.js.map → uuid-42040a5c.js.map} +1 -1
  415. package/cjs/withSendbird.js +1 -1
  416. package/{color-1b42e49d.js → color-f2370c85.js} +1 -1
  417. package/{color-1b42e49d.js.map → color-f2370c85.js.map} +1 -1
  418. package/{compareIds-df760ae2.js → compareIds-a4557492.js} +1 -1
  419. package/{compareIds-df760ae2.js.map → compareIds-a4557492.js.map} +1 -1
  420. package/{const-c269fd32.js → const-593595f5.js} +1 -1
  421. package/{const-c269fd32.js.map → const-593595f5.js.map} +1 -1
  422. package/{const-11ae0dd9.js → const-ce447fcf.js} +1 -1
  423. package/{const-11ae0dd9.js.map → const-ce447fcf.js.map} +1 -1
  424. package/consts-d2d25dac.js +23 -0
  425. package/consts-d2d25dac.js.map +1 -0
  426. package/{context-2c35a852.js → context-95839b09.js} +2 -2
  427. package/{context-2c35a852.js.map → context-95839b09.js.map} +1 -1
  428. package/dist/index.css +413 -16
  429. package/dist/index.css.map +1 -1
  430. package/{index-6a8be188.js → index-2aaa784a.js} +7 -7
  431. package/{index-6a8be188.js.map → index-2aaa784a.js.map} +1 -1
  432. package/{index-e2994193.js → index-4a977e7d.js} +2 -2
  433. package/{index-e2994193.js.map → index-4a977e7d.js.map} +1 -1
  434. package/{index-6491c190.js → index-4b51e7af.js} +5 -5
  435. package/{index-6491c190.js.map → index-4b51e7af.js.map} +1 -1
  436. package/{index-30726ee1.js → index-4c6a2064.js} +2 -2
  437. package/{index-30726ee1.js.map → index-4c6a2064.js.map} +1 -1
  438. package/index-60d3992b.js +271 -0
  439. package/index-60d3992b.js.map +1 -0
  440. package/{index-8c38f9d0.js → index-620331eb.js} +2 -2
  441. package/{index-8c38f9d0.js.map → index-620331eb.js.map} +1 -1
  442. package/index-7b5efb26.js +168 -0
  443. package/index-7b5efb26.js.map +1 -0
  444. package/{index-a53d78b6.js → index-999fdb64.js} +1 -1
  445. package/{index-a53d78b6.js.map → index-999fdb64.js.map} +1 -1
  446. package/{index-1f0b91f3.js → index-9c2d0ccd.js} +2 -2
  447. package/{index-1f0b91f3.js.map → index-9c2d0ccd.js.map} +1 -1
  448. package/{index-fd5a03a3.js → index-b8e990b4.js} +1 -1
  449. package/{index-fd5a03a3.js.map → index-b8e990b4.js.map} +1 -1
  450. package/{index-425e5f17.js → index-bbab31f0.js} +48 -4
  451. package/index-bbab31f0.js.map +1 -0
  452. package/{index-aa4edbe2.js → index-daccde5e.js} +8 -8
  453. package/index-daccde5e.js.map +1 -0
  454. package/{index-6d541758.js → index-ed1f765b.js} +3 -3
  455. package/{index-6d541758.js.map → index-ed1f765b.js.map} +1 -1
  456. package/{index-aecdd02c.js → index-eefaf935.js} +4 -4
  457. package/{index-aecdd02c.js.map → index-eefaf935.js.map} +1 -1
  458. package/index.d.ts +16 -1
  459. package/index.js +51 -39
  460. package/index.js.map +1 -1
  461. package/lame.all.js +14492 -0
  462. package/lame.all.js.map +1 -0
  463. package/package.json +1 -1
  464. package/sendbirdSelectors.js +2 -2
  465. package/{stringSet-c2443946.js → stringSet-f9763488.js} +5 -1
  466. package/stringSet-f9763488.js.map +1 -0
  467. package/{topics-0ba43ee8.js → topics-1ec669f0.js} +1 -1
  468. package/{topics-0ba43ee8.js.map → topics-1ec669f0.js.map} +1 -1
  469. package/{tslib.es6-13412863.js → tslib.es6-fc4a2658.js} +1 -1
  470. package/{tslib.es6-13412863.js.map → tslib.es6-fc4a2658.js.map} +1 -1
  471. package/types-e86f9fca.js +9 -0
  472. package/types-e86f9fca.js.map +1 -0
  473. package/ui/Accordion.js +3 -3
  474. package/ui/AccordionGroup.js +2 -2
  475. package/ui/AdminMessage.js +3 -3
  476. package/ui/Avatar.js +2 -2
  477. package/ui/Badge.js +5 -5
  478. package/ui/BottomSheet.js +1 -1
  479. package/ui/Button.js +3 -3
  480. package/ui/ChannelAvatar.js +3 -3
  481. package/ui/ConnectionStatus.js +4 -4
  482. package/ui/ContextMenu.js +5 -5
  483. package/ui/DateSeparator.js +4 -4
  484. package/ui/EmojiReactions.js +7 -7
  485. package/ui/FileMessageItemBody.js +6 -6
  486. package/ui/FileViewer.js +8 -8
  487. package/ui/Icon.js +341 -299
  488. package/ui/Icon.js.map +1 -1
  489. package/ui/IconButton.js +1 -1
  490. package/ui/ImageRenderer.js +1 -1
  491. package/ui/Input.js +2 -2
  492. package/ui/Label.js +2 -2
  493. package/ui/LinkLabel.js +2 -2
  494. package/ui/Loader.js +1 -1
  495. package/ui/MentionLabel.js +11 -11
  496. package/ui/MessageContent.js +35 -20
  497. package/ui/MessageContent.js.map +1 -1
  498. package/ui/MessageInput.js +35 -16
  499. package/ui/MessageInput.js.map +1 -1
  500. package/ui/MessageItemMenu.js +9 -8
  501. package/ui/MessageItemMenu.js.map +1 -1
  502. package/ui/MessageItemReactionMenu.js +5 -5
  503. package/ui/MessageSearchFileItem.js +17 -14
  504. package/ui/MessageSearchFileItem.js.map +1 -1
  505. package/ui/MessageSearchItem.js +9 -9
  506. package/ui/MessageStatus.js +10 -10
  507. package/ui/Modal.js +7 -7
  508. package/ui/OGMessageItemBody.js +37 -27
  509. package/ui/OGMessageItemBody.js.map +1 -1
  510. package/ui/OpenChannelAdminMessage.js +3 -3
  511. package/ui/OpenChannelAvatar.js +6 -6
  512. package/ui/OpenchannelConversationHeader.js +6 -6
  513. package/ui/OpenchannelFileMessage.js +16 -16
  514. package/ui/OpenchannelOGMessage.js +16 -16
  515. package/ui/OpenchannelThumbnailMessage.js +15 -15
  516. package/ui/OpenchannelUserMessage.js +16 -16
  517. package/ui/PlaceHolder.js +6 -6
  518. package/ui/PlaybackTime.js +27 -0
  519. package/ui/PlaybackTime.js.map +1 -0
  520. package/ui/ProgressBar.js +31 -0
  521. package/ui/ProgressBar.js.map +1 -0
  522. package/ui/QuoteMessage.js +14 -8
  523. package/ui/QuoteMessage.js.map +1 -1
  524. package/ui/QuoteMessageInput.js +12 -11
  525. package/ui/QuoteMessageInput.js.map +1 -1
  526. package/ui/ReactionBadge.js +3 -3
  527. package/ui/ReactionButton.js +1 -1
  528. package/ui/SortByRow.js +2 -2
  529. package/ui/TextButton.js +2 -2
  530. package/ui/TextMessageItemBody.js +11 -11
  531. package/ui/ThreadReplies.js +6 -6
  532. package/ui/ThumbnailMessageItemBody.js +2 -2
  533. package/ui/Tooltip.js +3 -3
  534. package/ui/TooltipWrapper.js +1 -1
  535. package/ui/UnknownMessageItemBody.js +6 -6
  536. package/ui/UserListItem.js +11 -11
  537. package/ui/UserProfile.js +10 -10
  538. package/ui/VoiceMessageItemBody.js +110 -0
  539. package/ui/VoiceMessageItemBody.js.map +1 -0
  540. package/ui/VoiceMessgeInput.js +15 -0
  541. package/ui/VoiceMessgeInput.js.map +1 -0
  542. package/ui/Word.js +11 -11
  543. package/{useLongPress-fbe83e54.js → useLongPress-6fc8312a.js} +3 -3
  544. package/{useLongPress-fbe83e54.js.map → useLongPress-6fc8312a.js.map} +1 -1
  545. package/useSendbirdStateContext.js +1 -1
  546. package/utils/message/isVoiceMessage.js +7 -0
  547. package/utils/message/isVoiceMessage.js.map +1 -0
  548. package/{utils-87d19647.js → utils-2570c397.js} +1 -1
  549. package/{utils-87d19647.js.map → utils-2570c397.js.map} +1 -1
  550. package/{utils-dd13f89e.js → utils-6c7dd397.js} +1 -1
  551. package/{utils-dd13f89e.js.map → utils-6c7dd397.js.map} +1 -1
  552. package/{utils-9c95a786.js → utils-8c242c8c.js} +2 -2
  553. package/{utils-9c95a786.js.map → utils-8c242c8c.js.map} +1 -1
  554. package/{utils-87dce5dd.js → utils-c1d219fa.js} +1 -1
  555. package/{utils-87dce5dd.js.map → utils-c1d219fa.js.map} +1 -1
  556. package/{uuid-7a5e68ed.js → uuid-6ca64623.js} +1 -1
  557. package/{uuid-7a5e68ed.js.map → uuid-6ca64623.js.map} +1 -1
  558. package/withSendbird.js +1 -1
  559. package/ChannelProvider-1e540c0e.js.map +0 -1
  560. package/MemberList-6483a7db.js.map +0 -1
  561. package/ThreadProvider-a1413f01.js.map +0 -1
  562. package/_rollupPluginBabelHelpers-b45d3824.js.map +0 -1
  563. package/cjs/ChannelProvider-3fbf7c5e.js.map +0 -1
  564. package/cjs/MemberList-4a0910dd.js.map +0 -1
  565. package/cjs/ThreadProvider-71441c16.js.map +0 -1
  566. package/cjs/_rollupPluginBabelHelpers-25763ef8.js.map +0 -1
  567. package/cjs/index-0e76934f.js.map +0 -1
  568. package/cjs/index-bfe8bdde.js.map +0 -1
  569. package/cjs/stringSet-87e51d08.js.map +0 -1
  570. package/index-425e5f17.js.map +0 -1
  571. package/index-aa4edbe2.js.map +0 -1
  572. package/stringSet-c2443946.js.map +0 -1
@@ -0,0 +1,87 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { u as useVoicePlayerContext, A as AudioUnitDefaultValue } from '../index-60d3992b.js';
3
+ import { g as VOICE_PLAYER_AUDIO_ID } from '../consts-d2d25dac.js';
4
+ import { useVoiceRecorderContext } from '../VoiceRecorder/context.js';
5
+ import '../tslib.es6-fc4a2658.js';
6
+ import '../lame.all.js';
7
+
8
+ var generateGroupKey = function (channelUrl, key) {
9
+ if (channelUrl === void 0) {
10
+ channelUrl = '';
11
+ }
12
+
13
+ if (key === void 0) {
14
+ key = '';
15
+ }
16
+
17
+ return "".concat(channelUrl, "-").concat(key);
18
+ };
19
+
20
+ var useVoicePlayer = function (_a) {
21
+ var _b;
22
+
23
+ var _c = _a.key,
24
+ key = _c === void 0 ? '' : _c,
25
+ _d = _a.channelUrl,
26
+ channelUrl = _d === void 0 ? '' : _d,
27
+ _e = _a.audioFile,
28
+ audioFile = _e === void 0 ? null : _e,
29
+ _f = _a.audioFileUrl,
30
+ audioFileUrl = _f === void 0 ? '' : _f;
31
+ var groupKey = useState(generateGroupKey(channelUrl, key))[0];
32
+
33
+ var _g = useVoicePlayerContext(),
34
+ play = _g.play,
35
+ pause = _g.pause,
36
+ stop = _g.stop,
37
+ voicePlayerStore = _g.voicePlayerStore;
38
+
39
+ var isRecordable = useVoiceRecorderContext().isRecordable;
40
+ var currentAudioUnit = ((_b = voicePlayerStore === null || voicePlayerStore === void 0 ? void 0 : voicePlayerStore.audioStorage) === null || _b === void 0 ? void 0 : _b[groupKey]) || AudioUnitDefaultValue();
41
+
42
+ var playVoicePlayer = function () {
43
+ if (!isRecordable) {
44
+ play === null || play === void 0 ? void 0 : play({
45
+ groupKey: groupKey,
46
+ audioFile: audioFile,
47
+ audioFileUrl: audioFileUrl
48
+ });
49
+ }
50
+ };
51
+
52
+ var pauseVoicePlayer = function () {
53
+ pause === null || pause === void 0 ? void 0 : pause(groupKey);
54
+ };
55
+
56
+ var stopVoicePlayer = function (text) {
57
+ if (text === void 0) {
58
+ text = '';
59
+ }
60
+
61
+ stop === null || stop === void 0 ? void 0 : stop(text);
62
+ };
63
+
64
+ useEffect(function () {
65
+ return function () {
66
+ var _a;
67
+
68
+ if (audioFile || audioFileUrl) {
69
+ // Can't get the current AudioPlayer through the React hooks(useReducer or useState) in this scope
70
+ var voiceAudioPlayerElement = document.getElementById(VOICE_PLAYER_AUDIO_ID);
71
+ (_a = voiceAudioPlayerElement === null || voiceAudioPlayerElement === void 0 ? void 0 : voiceAudioPlayerElement.pause) === null || _a === void 0 ? void 0 : _a.call(voiceAudioPlayerElement);
72
+ }
73
+ };
74
+ }, []);
75
+ return {
76
+ play: playVoicePlayer,
77
+ pause: pauseVoicePlayer,
78
+ stop: stopVoicePlayer,
79
+ playbackTime: (currentAudioUnit === null || currentAudioUnit === void 0 ? void 0 : currentAudioUnit.playbackTime) * 1000,
80
+ duration: (currentAudioUnit === null || currentAudioUnit === void 0 ? void 0 : currentAudioUnit.duration) * 1000,
81
+ // the unit of playbackTime and duration should be millisecond
82
+ playingStatus: currentAudioUnit === null || currentAudioUnit === void 0 ? void 0 : currentAudioUnit.playingStatus
83
+ };
84
+ };
85
+
86
+ export { useVoicePlayer };
87
+ //# sourceMappingURL=useVoicePlayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVoicePlayer.js","sources":["../../src/hooks/VoicePlayer/utils.ts","../../src/hooks/VoicePlayer/useVoicePlayer.tsx"],"sourcesContent":["export type GroupKey = string;\nexport const generateGroupKey = (channelUrl = '', key = ''): GroupKey => (`${channelUrl}-${key}`);\n","import { useEffect, useState } from \"react\";\nimport { useVoicePlayerContext } from \".\";\nimport { VOICE_PLAYER_AUDIO_ID } from \"../../utils/consts\";\nimport { useVoiceRecorderContext } from \"../VoiceRecorder\";\n\nimport { AudioUnitDefaultValue, VoicePlayerStatus } from \"./dux/initialState\";\nimport { generateGroupKey } from \"./utils\";\n\nexport interface UseVoicePlayerProps {\n key: string;\n channelUrl: string;\n audioFile?: File;\n audioFileUrl?: string;\n}\n\nexport interface UseVoicePlayerContext {\n play: () => void;\n pause: () => void;\n stop: (text?: string) => void;\n playbackTime: number;\n duration: number;\n playingStatus: VoicePlayerStatus;\n}\n\nexport const useVoicePlayer = ({\n key = '',\n channelUrl = '',\n audioFile = null,\n audioFileUrl = '',\n}: UseVoicePlayerProps): UseVoicePlayerContext => {\n const [groupKey] = useState<string>(generateGroupKey(channelUrl, key));\n const {\n play,\n pause,\n stop,\n voicePlayerStore,\n } = useVoicePlayerContext();\n const { isRecordable } = useVoiceRecorderContext();\n const currentAudioUnit = voicePlayerStore?.audioStorage?.[groupKey] || AudioUnitDefaultValue();\n\n const playVoicePlayer = () => {\n if (!isRecordable) {\n play?.({\n groupKey,\n audioFile,\n audioFileUrl,\n });\n }\n };\n\n const pauseVoicePlayer = () => {\n pause?.(groupKey);\n };\n\n const stopVoicePlayer = (text = '') => {\n stop?.(text);\n };\n\n useEffect(() => {\n return () => {\n if (audioFile || audioFileUrl) {\n // Can't get the current AudioPlayer through the React hooks(useReducer or useState) in this scope\n const voiceAudioPlayerElement = document.getElementById(VOICE_PLAYER_AUDIO_ID);\n (voiceAudioPlayerElement as HTMLAudioElement)?.pause?.();\n }\n }\n }, []);\n\n return ({\n play: playVoicePlayer,\n pause: pauseVoicePlayer,\n stop: stopVoicePlayer,\n playbackTime: currentAudioUnit?.playbackTime * 1000,\n duration: currentAudioUnit?.duration * 1000,\n // the unit of playbackTime and duration should be millisecond\n playingStatus: currentAudioUnit?.playingStatus,\n });\n};\n"],"names":["generateGroupKey","channelUrl","key","concat","useVoicePlayer","_a","_c","_d","_e","audioFile","_f","audioFileUrl","groupKey","useState","_g","useVoicePlayerContext","play","pause","stop","voicePlayerStore","isRecordable","useVoiceRecorderContext","currentAudioUnit","_b","audioStorage","AudioUnitDefaultValue","playVoicePlayer","pauseVoicePlayer","stopVoicePlayer","text","useEffect","voiceAudioPlayerElement","document","getElementById","VOICE_PLAYER_AUDIO_ID","playbackTime","duration","playingStatus"],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ import React__default, { useState, useCallback, useContext, createContext } from 'react';
2
+ import { WavHeader as WavHeader_1, Mp3Encoder as Mp3Encoder_1 } from '../lame.all.js';
3
+ import { b as VOICE_RECORDER_MIME_TYPE, c as VOICE_RECORDER_AUDIO_BITS, d as VOICE_MESSAGE_FILE_NAME, e as VOICE_MESSAGE_MIME_TYPE } from '../consts-d2d25dac.js';
4
+
5
+ // Thanks to https://codesandbox.io/s/media-recorder-api-downsampling-16k-mp3-encode-using-lame-js-forked-n1pblw
6
+
7
+ function encodeMp3(arrayBuffer) {
8
+ var wav = WavHeader_1.readHeader(new DataView(arrayBuffer));
9
+ var dataView = new Int16Array(arrayBuffer, wav.dataOffset, wav.dataLen / 2);
10
+ var mp3Encoder = new Mp3Encoder_1(wav.channels, wav.sampleRate, 128);
11
+ var maxSamples = 1152;
12
+ var samplesLeft = wav.channels === 1 ? dataView : new Int16Array(wav.dataLen / (2 * wav.channels));
13
+ var samplesRight = wav.channels === 2 ? new Int16Array(wav.dataLen / (2 * wav.channels)) : undefined;
14
+
15
+ if (wav.channels > 1) {
16
+ for (var j = 0; j < samplesLeft.length; j++) {
17
+ samplesLeft[j] = dataView[j * 2];
18
+ samplesRight[j] = dataView[j * 2 + 1];
19
+ }
20
+ }
21
+
22
+ var dataBuffer = [];
23
+ var remaining = samplesLeft.length;
24
+
25
+ for (var i = 0; remaining >= maxSamples; i += maxSamples) {
26
+ var left = samplesLeft.subarray(i, i + maxSamples);
27
+ var right = void 0;
28
+
29
+ if (samplesRight) {
30
+ right = samplesRight.subarray(i, i + maxSamples);
31
+ }
32
+
33
+ var mp3buf = mp3Encoder.encodeBuffer(left, right);
34
+ dataBuffer.push(new Int8Array(mp3buf));
35
+ remaining -= maxSamples;
36
+ }
37
+
38
+ var mp3Lastbuf = mp3Encoder.flush();
39
+ dataBuffer.push(new Int8Array(mp3Lastbuf));
40
+ return dataBuffer;
41
+ } // Convert audioFile to arrayBuffer, because Mp3Encoder requires a parameter of ArrayBuffer type
42
+
43
+
44
+ function downsampleToWav(file, callback) {
45
+ //Browser compatibility
46
+ // https://caniuse.com/?search=AudioContext
47
+ var audioCtx = new AudioContext();
48
+ var fileReader = new FileReader();
49
+
50
+ fileReader.onload = function (ev) {
51
+ // Decode audio
52
+ audioCtx.decodeAudioData(ev.target.result, function (buffer) {
53
+ // this is where you down sample the audio, usually is 44100 samples per second
54
+ var usingWebkit = !window.OfflineAudioContext;
55
+ var offlineAudioCtx = new OfflineAudioContext(1, 16000 * buffer.duration, 16000);
56
+ var soundSource = offlineAudioCtx.createBufferSource();
57
+ soundSource.buffer = buffer;
58
+ soundSource.connect(offlineAudioCtx.destination);
59
+ var reader = new FileReader();
60
+
61
+ reader.onload = function () {
62
+ var renderCompleteHandler = function (evt) {
63
+ var renderedBuffer = usingWebkit ? evt.renderedBuffer : evt;
64
+ var buffer = bufferToWav(renderedBuffer, renderedBuffer.length);
65
+
66
+ if (callback) {
67
+ callback(buffer);
68
+ }
69
+ };
70
+
71
+ if (usingWebkit) {
72
+ offlineAudioCtx.oncomplete = renderCompleteHandler;
73
+ offlineAudioCtx.startRendering();
74
+ } else {
75
+ offlineAudioCtx.startRendering().then(renderCompleteHandler).catch(function (err) {
76
+ return console.warn(err);
77
+ });
78
+ }
79
+ };
80
+
81
+ reader.readAsArrayBuffer(file);
82
+ soundSource.start(0);
83
+ });
84
+ };
85
+
86
+ fileReader.readAsArrayBuffer(file);
87
+ }
88
+
89
+ function bufferToWav(abuffer, len) {
90
+ var numOfChan = abuffer.numberOfChannels;
91
+ var length = len * numOfChan * 2 + 44;
92
+ var buffer = new ArrayBuffer(length);
93
+ var view = new DataView(buffer);
94
+ var channels = [];
95
+ var i = 0;
96
+ var sample;
97
+ var offset = 0;
98
+ var pos = 0; // write WAVE header
99
+
100
+ setUint32(0x46464952); // "RIFF"
101
+
102
+ setUint32(length - 8); // file length - 8
103
+
104
+ setUint32(0x45564157); // "WAVE"
105
+
106
+ setUint32(0x20746d66); // "fmt " chunk
107
+
108
+ setUint32(16); // length = 16
109
+
110
+ setUint16(1); // PCM (uncompressed)
111
+
112
+ setUint16(numOfChan);
113
+ setUint32(abuffer.sampleRate);
114
+ setUint32(abuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec
115
+
116
+ setUint16(numOfChan * 2); // block-align
117
+
118
+ setUint16(16); // 16-bit (hardcoded in this demo)
119
+
120
+ setUint32(0x61746164); // "data" - chunk
121
+
122
+ setUint32(length - pos - 4); // chunk length
123
+ // write interleaved data
124
+
125
+ for (i = 0; i < abuffer.numberOfChannels; i++) channels.push(abuffer.getChannelData(i));
126
+
127
+ while (pos < length) {
128
+ for (i = 0; i < numOfChan; i++) {
129
+ // interleave channels
130
+ sample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp
131
+
132
+ sample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767) | 0; // scale to 16-bit signed int
133
+
134
+ view.setInt16(pos, sample, true); // write 16-bit sample
135
+
136
+ pos += 2;
137
+ }
138
+
139
+ offset++; // next source sample
140
+ }
141
+
142
+ return buffer;
143
+
144
+ function setUint16(data) {
145
+ view.setUint16(pos, data, true);
146
+ pos += 2;
147
+ }
148
+
149
+ function setUint32(data) {
150
+ view.setUint32(pos, data, true);
151
+ pos += 4;
152
+ }
153
+ }
154
+
155
+ var noop = function () {};
156
+
157
+ var VoiceRecorderContext = /*#__PURE__*/createContext({
158
+ start: noop,
159
+ stop: noop,
160
+ isRecordable: false
161
+ });
162
+ var VoiceRecorderProvider = function (props) {
163
+ var _a = useState(null),
164
+ mediaRecorder = _a[0],
165
+ setMediaRecorder = _a[1];
166
+
167
+ var _b = useState(false),
168
+ isRecordable = _b[0],
169
+ setIsRecordable = _b[1];
170
+
171
+ var children = props.children;
172
+ var start = useCallback(function (eventHandler) {
173
+ var _a, _b;
174
+
175
+ if (mediaRecorder) {
176
+ stop();
177
+ }
178
+
179
+ (_b = (_a = navigator === null || navigator === void 0 ? void 0 : navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.getUserMedia) === null || _b === void 0 ? void 0 : _b.call(_a, {
180
+ audio: true
181
+ }).then(function (stream) {
182
+ setIsRecordable(true);
183
+ var mediaRecorder = new MediaRecorder(stream, {
184
+ mimeType: VOICE_RECORDER_MIME_TYPE,
185
+ audioBitsPerSecond: VOICE_RECORDER_AUDIO_BITS
186
+ });
187
+
188
+ mediaRecorder.ondataavailable = function (e) {
189
+ var _a, _b, _c;
190
+
191
+ var audioFile = new File([e.data], VOICE_MESSAGE_FILE_NAME, {
192
+ lastModified: new Date().getTime(),
193
+ type: VOICE_MESSAGE_MIME_TYPE
194
+ });
195
+ downsampleToWav(audioFile, function (buffer) {
196
+ var mp3Buffer = encodeMp3(buffer);
197
+ var mp3blob = new Blob(mp3Buffer, {
198
+ type: VOICE_MESSAGE_MIME_TYPE
199
+ });
200
+ var convertedAudioFile = new File([mp3blob], VOICE_MESSAGE_FILE_NAME, {
201
+ lastModified: new Date().getTime(),
202
+ type: VOICE_MESSAGE_MIME_TYPE
203
+ });
204
+ eventHandler === null || eventHandler === void 0 ? void 0 : eventHandler.onRecordingEnded(convertedAudioFile);
205
+ });
206
+ (_c = (_a = stream === null || stream === void 0 ? void 0 : stream.getAudioTracks) === null || _a === void 0 ? void 0 : (_b = _a.call(stream)).forEach) === null || _c === void 0 ? void 0 : _c.call(_b, function (track) {
207
+ return track === null || track === void 0 ? void 0 : track.stop();
208
+ });
209
+ setIsRecordable(false);
210
+ };
211
+
212
+ mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.start();
213
+ setMediaRecorder(mediaRecorder);
214
+ eventHandler === null || eventHandler === void 0 ? void 0 : eventHandler.onRecordingStarted();
215
+ }).catch(function () {
216
+ // error
217
+ setMediaRecorder(null);
218
+ });
219
+ }, [mediaRecorder]);
220
+ var stop = useCallback(function () {
221
+ // Stop recording
222
+ mediaRecorder === null || mediaRecorder === void 0 ? void 0 : mediaRecorder.stop();
223
+ setMediaRecorder(null);
224
+ setIsRecordable(false); // TODO: logger
225
+ }, [mediaRecorder]);
226
+ return /*#__PURE__*/React__default.createElement(VoiceRecorderContext.Provider, {
227
+ value: {
228
+ start: start,
229
+ stop: stop,
230
+ isRecordable: isRecordable
231
+ }
232
+ }, children);
233
+ };
234
+ var useVoiceRecorderContext = function () {
235
+ return useContext(VoiceRecorderContext);
236
+ };
237
+ var index = {
238
+ VoiceRecorderProvider: VoiceRecorderProvider,
239
+ useVoiceRecorderContext: useVoiceRecorderContext
240
+ };
241
+
242
+ export { VoiceRecorderProvider, index as default, useVoiceRecorderContext };
243
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sources":["../../src/hooks/VoiceRecorder/WebAudioUtils.ts","../../src/hooks/VoiceRecorder/index.tsx"],"sourcesContent":["// Thanks to https://codesandbox.io/s/media-recorder-api-downsampling-16k-mp3-encode-using-lame-js-forked-n1pblw\nimport { WavHeader, Mp3Encoder } from \"../../_externals/lamejs/js/index.js\";\n\nfunction encodeMp3(arrayBuffer: ArrayBuffer): WavHeader {\n const wav = WavHeader.readHeader(new DataView(arrayBuffer));\n const dataView = new Int16Array(arrayBuffer, wav.dataOffset, wav.dataLen / 2);\n const mp3Encoder = new Mp3Encoder(wav.channels, wav.sampleRate, 128);\n const maxSamples = 1152;\n\n const samplesLeft = (wav.channels === 1) ? dataView : new Int16Array(wav.dataLen / (2 * wav.channels));\n const samplesRight = (wav.channels === 2) ? new Int16Array(wav.dataLen / (2 * wav.channels)) : undefined;\n\n if (wav.channels > 1) {\n for (let j = 0; j < samplesLeft.length; j++) {\n samplesLeft[j] = dataView[j * 2];\n samplesRight[j] = dataView[j * 2 + 1];\n }\n }\n\n const dataBuffer = [];\n let remaining = samplesLeft.length;\n for (let i = 0; remaining >= maxSamples; i += maxSamples) {\n const left = samplesLeft.subarray(i, i + maxSamples);\n let right;\n if (samplesRight) {\n right = samplesRight.subarray(i, i + maxSamples);\n }\n const mp3buf = mp3Encoder.encodeBuffer(left, right);\n dataBuffer.push(new Int8Array(mp3buf));\n remaining -= maxSamples;\n }\n\n const mp3Lastbuf = mp3Encoder.flush();\n dataBuffer.push(new Int8Array(mp3Lastbuf));\n return dataBuffer;\n}\n\n// Convert audioFile to arrayBuffer, because Mp3Encoder requires a parameter of ArrayBuffer type\nfunction downsampleToWav(file: File, callback: (buffer: ArrayBuffer) => void): void {\n //Browser compatibility\n // https://caniuse.com/?search=AudioContext\n const audioCtx = new AudioContext();\n const fileReader = new FileReader();\n fileReader.onload = function (ev) {\n // Decode audio\n audioCtx.decodeAudioData(ev.target.result as ArrayBuffer, (buffer) => {\n // this is where you down sample the audio, usually is 44100 samples per second\n const usingWebkit = !window.OfflineAudioContext;\n const offlineAudioCtx = new OfflineAudioContext(1, 16000 * buffer.duration, 16000);\n\n const soundSource = offlineAudioCtx.createBufferSource();\n soundSource.buffer = buffer;\n soundSource.connect(offlineAudioCtx.destination);\n\n const reader = new FileReader();\n reader.onload = function () {\n const renderCompleteHandler = (evt): void => {\n const renderedBuffer = usingWebkit ? evt.renderedBuffer : evt;\n const buffer = bufferToWav(renderedBuffer, renderedBuffer.length);\n if (callback) {\n callback(buffer);\n }\n };\n if (usingWebkit) {\n offlineAudioCtx.oncomplete = renderCompleteHandler;\n offlineAudioCtx.startRendering();\n } else {\n offlineAudioCtx\n .startRendering()\n .then(renderCompleteHandler)\n .catch((err) => console.warn(err));\n }\n };\n reader.readAsArrayBuffer(file);\n soundSource.start(0);\n });\n };\n fileReader.readAsArrayBuffer(file);\n}\n\nfunction bufferToWav(abuffer, len) {\n const numOfChan = abuffer.numberOfChannels;\n const length = len * numOfChan * 2 + 44;\n const buffer = new ArrayBuffer(length);\n const view = new DataView(buffer);\n const channels = [];\n let i = 0;\n let sample;\n let offset = 0;\n let pos = 0;\n\n // write WAVE header\n setUint32(0x46464952); // \"RIFF\"\n setUint32(length - 8); // file length - 8\n setUint32(0x45564157); // \"WAVE\"\n setUint32(0x20746d66); // \"fmt \" chunk\n setUint32(16); // length = 16\n setUint16(1); // PCM (uncompressed)\n setUint16(numOfChan);\n setUint32(abuffer.sampleRate);\n setUint32(abuffer.sampleRate * 2 * numOfChan); // avg. bytes/sec\n setUint16(numOfChan * 2); // block-align\n setUint16(16); // 16-bit (hardcoded in this demo)\n setUint32(0x61746164); // \"data\" - chunk\n setUint32(length - pos - 4); // chunk length\n // write interleaved data\n for (i = 0; i < abuffer.numberOfChannels; i++)\n channels.push(abuffer.getChannelData(i));\n\n while (pos < length) {\n for (i = 0; i < numOfChan; i++) {\n // interleave channels\n sample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp\n sample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767) | 0; // scale to 16-bit signed int\n view.setInt16(pos, sample, true); // write 16-bit sample\n pos += 2;\n }\n offset++; // next source sample\n }\n\n return buffer;\n\n function setUint16(data) {\n view.setUint16(pos, data, true);\n pos += 2;\n }\n\n function setUint32(data) {\n view.setUint32(pos, data, true);\n pos += 4;\n }\n}\n\nexport { downsampleToWav, encodeMp3 };\n","import React, { createContext, useCallback, useContext, useState } from 'react';\nimport { downsampleToWav, encodeMp3 } from './WebAudioUtils';\nimport {\n VOICE_MESSAGE_FILE_NAME,\n VOICE_MESSAGE_MIME_TYPE,\n VOICE_RECORDER_AUDIO_BITS,\n VOICE_RECORDER_MIME_TYPE,\n} from '../../utils/consts';\n\n// Input props of VoiceRecorder\nexport interface VoiceRecorderProps {\n children: React.ReactElement;\n}\n\nexport interface VoiceRecorderEventHandler {\n onRecordingStarted?: () => void;\n onRecordingEnded?: (props: null | File) => void;\n}\n\n// Output of VoiceRecorder\nexport interface VoiceRecorderContext {\n start: (eventHandler?: VoiceRecorderEventHandler) => void,\n stop: () => void,\n isRecordable: boolean;\n}\nconst noop = () => {/* noop */ };\nconst VoiceRecorderContext = createContext<VoiceRecorderContext>({\n start: noop,\n stop: noop,\n isRecordable: false,\n});\n\nexport const VoiceRecorderProvider = (props: VoiceRecorderProps): React.ReactElement => {\n const [mediaRecorder, setMediaRecorder] = useState<MediaRecorder>(null);\n const [isRecordable, setIsRecordable] = useState<boolean>(false);\n\n const { children } = props;\n\n const start = useCallback((eventHandler: VoiceRecorderEventHandler): void => {\n if (mediaRecorder) {\n stop();\n }\n navigator?.mediaDevices?.getUserMedia?.({ audio: true })\n .then((stream) => {\n setIsRecordable(true);\n const mediaRecorder = new MediaRecorder(stream, {\n mimeType: VOICE_RECORDER_MIME_TYPE,\n audioBitsPerSecond: VOICE_RECORDER_AUDIO_BITS,\n });\n mediaRecorder.ondataavailable = (e) => {// when recording stops\n const audioFile = new File([e.data], VOICE_MESSAGE_FILE_NAME, {\n lastModified: new Date().getTime(),\n type: VOICE_MESSAGE_MIME_TYPE,\n });\n downsampleToWav(audioFile, (buffer) => {\n const mp3Buffer = encodeMp3(buffer);\n const mp3blob = new Blob(mp3Buffer, { type: VOICE_MESSAGE_MIME_TYPE });\n const convertedAudioFile = new File([mp3blob], VOICE_MESSAGE_FILE_NAME, {\n lastModified: new Date().getTime(),\n type: VOICE_MESSAGE_MIME_TYPE,\n });\n eventHandler?.onRecordingEnded(convertedAudioFile);\n });\n stream?.getAudioTracks?.().forEach?.(track => track?.stop());\n setIsRecordable(false);\n };\n mediaRecorder?.start();\n setMediaRecorder(mediaRecorder);\n eventHandler?.onRecordingStarted();\n })\n .catch(() => {\n // error\n setMediaRecorder(null);\n });\n }, [mediaRecorder]);\n\n const stop = useCallback((): void => {\n // Stop recording\n mediaRecorder?.stop();\n setMediaRecorder(null);\n setIsRecordable(false);\n // TODO: logger\n }, [mediaRecorder]);\n\n return (\n <VoiceRecorderContext.Provider value={{\n start,\n stop,\n isRecordable,\n }}>\n {children}\n </VoiceRecorderContext.Provider>\n )\n};\n\nexport const useVoiceRecorderContext = (): VoiceRecorderContext => useContext(VoiceRecorderContext);\n\nexport default {\n VoiceRecorderProvider,\n useVoiceRecorderContext,\n};\n"],"names":["encodeMp3","arrayBuffer","wav","WavHeader","readHeader","DataView","dataView","Int16Array","dataOffset","dataLen","mp3Encoder","Mp3Encoder","channels","sampleRate","maxSamples","samplesLeft","samplesRight","undefined","j","length","dataBuffer","remaining","i","left","subarray","right","mp3buf","encodeBuffer","push","Int8Array","mp3Lastbuf","flush","downsampleToWav","file","callback","audioCtx","AudioContext","fileReader","FileReader","onload","ev","decodeAudioData","target","result","buffer","usingWebkit","window","OfflineAudioContext","offlineAudioCtx","duration","soundSource","createBufferSource","connect","destination","reader","renderCompleteHandler","evt","renderedBuffer","bufferToWav","oncomplete","startRendering","then","catch","err","console","warn","readAsArrayBuffer","start","abuffer","len","numOfChan","numberOfChannels","ArrayBuffer","view","sample","offset","pos","setUint32","setUint16","getChannelData","Math","max","min","setInt16","data","noop","VoiceRecorderContext","createContext","stop","isRecordable","VoiceRecorderProvider","props","_a","useState","mediaRecorder","setMediaRecorder","_b","setIsRecordable","children","useCallback","eventHandler","navigator","mediaDevices","getUserMedia","audio","stream","MediaRecorder","mimeType","VOICE_RECORDER_MIME_TYPE","audioBitsPerSecond","VOICE_RECORDER_AUDIO_BITS","ondataavailable","e","audioFile","File","VOICE_MESSAGE_FILE_NAME","lastModified","Date","getTime","type","VOICE_MESSAGE_MIME_TYPE","mp3Buffer","mp3blob","Blob","convertedAudioFile","onRecordingEnded","_c","getAudioTracks","call","forEach","track","onRecordingStarted","React","useVoiceRecorderContext","useContext"],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+ import { useVoiceRecorderContext } from './context.js';
3
+ import useSendbirdStateContext from '../useSendbirdStateContext.js';
4
+ import '../lame.all.js';
5
+ import '../consts-d2d25dac.js';
6
+ import '../withSendbird.js';
7
+ import '../_rollupPluginBabelHelpers-09618dc3.js';
8
+
9
+ // /**
10
+ // * onRecordingStarted
11
+ // * onRecordingEnded
12
+ // */
13
+ // }
14
+
15
+ var VoiceRecorderStatus = {
16
+ PREPARING: 'PREPARING',
17
+ READY_TO_RECORD: 'READY_TO_RECORD',
18
+ RECORDING: 'RECORDING',
19
+ COMPLETED: 'COMPLETED'
20
+ };
21
+
22
+ var noop = function () {};
23
+
24
+ var useVoiceRecorder = function (_a) {
25
+ var _b = _a.onRecordingStarted,
26
+ onRecordingStarted = _b === void 0 ? noop : _b,
27
+ _c = _a.onRecordingEnded,
28
+ onRecordingEnded = _c === void 0 ? noop : _c;
29
+ var config = useSendbirdStateContext().config;
30
+ var voiceRecord = config.voiceRecord;
31
+ var maxRecordingTime = voiceRecord.maxRecordingTime;
32
+ var voiceRecorder = useVoiceRecorderContext();
33
+ var isRecordable = voiceRecorder.isRecordable;
34
+
35
+ var _d = useState(null),
36
+ recordedFile = _d[0],
37
+ setRecordedFile = _d[1];
38
+
39
+ var _e = useState(VoiceRecorderStatus.PREPARING),
40
+ recordingStatus = _e[0],
41
+ setRecordingStatus = _e[1];
42
+
43
+ useEffect(function () {
44
+ if (isRecordable && recordingStatus === VoiceRecorderStatus.PREPARING) {
45
+ setRecordingStatus(VoiceRecorderStatus.READY_TO_RECORD);
46
+ }
47
+ }, [isRecordable]);
48
+ var start = useCallback(function () {
49
+ voiceRecorder === null || voiceRecorder === void 0 ? void 0 : voiceRecorder.start({
50
+ onRecordingStarted: function () {
51
+ setRecordingStatus(VoiceRecorderStatus.RECORDING);
52
+ onRecordingStarted();
53
+ startTimer();
54
+ },
55
+ onRecordingEnded: function (audioFile) {
56
+ setRecordingStatus(VoiceRecorderStatus.COMPLETED);
57
+ onRecordingEnded(audioFile);
58
+ setRecordedFile(audioFile);
59
+ stopTimer();
60
+ }
61
+ });
62
+ }, [onRecordingStarted, onRecordingEnded]);
63
+ var stop = useCallback(function () {
64
+ voiceRecorder === null || voiceRecorder === void 0 ? void 0 : voiceRecorder.stop();
65
+ stopTimer();
66
+ }, [voiceRecorder]);
67
+ var cancel = useCallback(function () {
68
+ stop();
69
+ setRecordedFile(null);
70
+ }, [voiceRecorder]); // Timer
71
+
72
+ var _f = useState(0),
73
+ recordingTime = _f[0],
74
+ setRecordingTime = _f[1];
75
+
76
+ var timer = null;
77
+
78
+ function startTimer() {
79
+ stopTimer();
80
+ setRecordingTime(0);
81
+ var interval = setInterval(function () {
82
+ setRecordingTime(function (prevTime) {
83
+ var newTime = prevTime + 100;
84
+
85
+ if (newTime > maxRecordingTime) {
86
+ stopTimer();
87
+ }
88
+
89
+ return newTime;
90
+ });
91
+ }, 100);
92
+ timer = interval;
93
+ }
94
+
95
+ function stopTimer() {
96
+ clearInterval(timer);
97
+ timer = null;
98
+ }
99
+
100
+ useEffect(function () {
101
+ if (recordingTime > maxRecordingTime) {
102
+ stop();
103
+ }
104
+ }, [recordingTime, maxRecordingTime, stop]);
105
+ return {
106
+ start: start,
107
+ stop: stop,
108
+ cancel: cancel,
109
+ recordingStatus: recordingStatus,
110
+ recordingTime: recordingTime,
111
+ recordedFile: recordedFile,
112
+ recordingLimit: maxRecordingTime
113
+ };
114
+ };
115
+
116
+ export { VoiceRecorderStatus, useVoiceRecorder };
117
+ //# sourceMappingURL=useVoiceRecorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVoiceRecorder.js","sources":["../../src/hooks/VoiceRecorder/useVoiceRecorder.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { VoiceRecorderEventHandler, useVoiceRecorderContext } from '.';\nimport useSendbirdStateContext from '../useSendbirdStateContext';\n\n// export interface UseVoiceRecorderProps extends VoiceRecorderEventHandler {\n// /**\n// * onRecordingStarted\n// * onRecordingEnded\n// */\n// }\nexport const VoiceRecorderStatus = {\n PREPARING: 'PREPARING',\n READY_TO_RECORD: 'READY_TO_RECORD',\n RECORDING: 'RECORDING',\n COMPLETED: 'COMPLETED',\n} as const;\nexport type VoiceRecorderStatus = typeof VoiceRecorderStatus[keyof typeof VoiceRecorderStatus];\nexport interface UseVoiceRecorderContext {\n start: () => void;\n stop: () => void;\n cancel: () => void;\n recordingLimit: number;\n recordingTime: number;\n recordedFile: File;\n recordingStatus: VoiceRecorderStatus;\n}\n\nconst noop = () => {/* noop */};\n\nexport const useVoiceRecorder = ({\n onRecordingStarted = noop,\n onRecordingEnded = noop,\n}: VoiceRecorderEventHandler): UseVoiceRecorderContext => {\n const { config } = useSendbirdStateContext();\n const { voiceRecord } = config;\n const { maxRecordingTime } = voiceRecord;\n const voiceRecorder = useVoiceRecorderContext();\n const { isRecordable } = voiceRecorder;\n\n const [recordedFile, setRecordedFile] = useState<File>(null);\n const [recordingStatus, setRecordingStatus] = useState<VoiceRecorderStatus>(VoiceRecorderStatus.PREPARING);\n useEffect(() => {\n if (isRecordable && recordingStatus === VoiceRecorderStatus.PREPARING) {\n setRecordingStatus(VoiceRecorderStatus.READY_TO_RECORD);\n }\n }, [isRecordable]);\n\n const start = useCallback(() => {\n voiceRecorder?.start({\n onRecordingStarted: () => {\n setRecordingStatus(VoiceRecorderStatus.RECORDING);\n onRecordingStarted();\n startTimer();\n },\n onRecordingEnded: (audioFile) => {\n setRecordingStatus(VoiceRecorderStatus.COMPLETED);\n onRecordingEnded(audioFile);\n setRecordedFile(audioFile);\n stopTimer();\n },\n });\n }, [onRecordingStarted, onRecordingEnded]);\n const stop = useCallback(() => {\n voiceRecorder?.stop();\n stopTimer();\n }, [voiceRecorder]);\n const cancel = useCallback(() => {\n stop();\n setRecordedFile(null);\n }, [voiceRecorder]);\n\n // Timer\n const [recordingTime, setRecordingTime] = useState<number>(0);\n let timer: ReturnType<typeof setInterval> = null;\n function startTimer() {\n stopTimer();\n setRecordingTime(0);\n const interval = setInterval(() => {\n setRecordingTime(prevTime => {\n const newTime = prevTime + 100;\n if (newTime > maxRecordingTime) {\n stopTimer();\n }\n return newTime;\n });\n }, 100);\n timer = interval;\n }\n function stopTimer() {\n clearInterval(timer);\n timer = null;\n }\n useEffect(() => {\n if (recordingTime > maxRecordingTime) {\n stop();\n }\n }, [recordingTime, maxRecordingTime, stop]);\n\n return ({\n start,\n stop,\n cancel,\n recordingStatus,\n recordingTime,\n recordedFile,\n recordingLimit: maxRecordingTime,\n });\n};\n"],"names":["VoiceRecorderStatus","PREPARING","READY_TO_RECORD","RECORDING","COMPLETED","noop","useVoiceRecorder","_a","_b","onRecordingStarted","_c","onRecordingEnded","config","useSendbirdStateContext","voiceRecord","maxRecordingTime","voiceRecorder","useVoiceRecorderContext","isRecordable","_d","useState","recordedFile","setRecordedFile","_e","recordingStatus","setRecordingStatus","useEffect","start","useCallback","startTimer","audioFile","stopTimer","stop","cancel","_f","recordingTime","setRecordingTime","timer","interval","setInterval","prevTime","newTime","clearInterval","recordingLimit"],"mappings":"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"}
@@ -57,4 +57,4 @@ function _extends() {
57
57
  }
58
58
 
59
59
  export { _objectSpread2 as _, _extends as a };
60
- //# sourceMappingURL=_rollupPluginBabelHelpers-b45d3824.js.map
60
+ //# sourceMappingURL=_rollupPluginBabelHelpers-09618dc3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_rollupPluginBabelHelpers-09618dc3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,4 +3,4 @@ const RESET_USER = 'RESET_USER';
3
3
  const UPDATE_USER_INFO = 'UPDATE_USER_INFO';
4
4
 
5
5
  export { INIT_USER as I, RESET_USER as R, UPDATE_USER_INFO as U };
6
- //# sourceMappingURL=actionTypes-c69daac1.js.map
6
+ //# sourceMappingURL=actionTypes-0dd0c34b.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actionTypes-c69daac1.js","sources":["../src/lib/dux/user/actionTypes.js"],"sourcesContent":["export const INIT_USER = 'INIT_USER';\nexport const RESET_USER = 'RESET_USER';\nexport const SET_USER_LOADING = 'SET_USER_LOADING';\nexport const UPDATE_USER_INFO = 'UPDATE_USER_INFO';\n"],"names":["INIT_USER","RESET_USER","UPDATE_USER_INFO"],"mappings":"AAAO,MAAMA,SAAS,GAAG,YAAlB;AACA,MAAMC,UAAU,GAAG,aAAnB;AAEA,MAAMC,gBAAgB,GAAG;;;;"}
1
+ {"version":3,"file":"actionTypes-0dd0c34b.js","sources":["../src/lib/dux/user/actionTypes.js"],"sourcesContent":["export const INIT_USER = 'INIT_USER';\nexport const RESET_USER = 'RESET_USER';\nexport const SET_USER_LOADING = 'SET_USER_LOADING';\nexport const UPDATE_USER_INFO = 'UPDATE_USER_INFO';\n"],"names":["INIT_USER","RESET_USER","UPDATE_USER_INFO"],"mappings":"AAAO,MAAMA,SAAS,GAAG,YAAlB;AACA,MAAMC,UAAU,GAAG,aAAnB;AAEA,MAAMC,gBAAgB,GAAG;;;;"}