@kesha-antonov/react-native-chat 5.0.1 → 6.0.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.
- package/README.md +485 -178
- package/lib/Actions.d.ts.map +1 -1
- package/lib/Actions.js +121 -42
- package/lib/Actions.js.map +1 -1
- package/lib/Avatar.d.ts.map +1 -1
- package/lib/Avatar.js +171 -86
- package/lib/Avatar.js.map +1 -1
- package/lib/Bubble/BubbleBody.d.ts +15 -0
- package/lib/Bubble/BubbleBody.d.ts.map +1 -0
- package/lib/Bubble/BubbleBody.js +218 -0
- package/lib/Bubble/BubbleBody.js.map +1 -0
- package/lib/Bubble/BubbleContent.d.ts +23 -0
- package/lib/Bubble/BubbleContent.d.ts.map +1 -0
- package/lib/Bubble/BubbleContent.js +446 -0
- package/lib/Bubble/BubbleContent.js.map +1 -0
- package/lib/Bubble/BubbleMenu.d.ts +45 -0
- package/lib/Bubble/BubbleMenu.d.ts.map +1 -0
- package/lib/Bubble/BubbleMenu.js +289 -0
- package/lib/Bubble/BubbleMenu.js.map +1 -0
- package/lib/Bubble/BubbleMeta.d.ts +17 -0
- package/lib/Bubble/BubbleMeta.d.ts.map +1 -0
- package/lib/Bubble/BubbleMeta.js +453 -0
- package/lib/Bubble/BubbleMeta.js.map +1 -0
- package/lib/Bubble/LiftedBubble.d.ts +18 -0
- package/lib/Bubble/LiftedBubble.d.ts.map +1 -0
- package/lib/Bubble/LiftedBubble.js +109 -0
- package/lib/Bubble/LiftedBubble.js.map +1 -0
- package/lib/Bubble/PressableBubbleRow.d.ts +33 -0
- package/lib/Bubble/PressableBubbleRow.d.ts.map +1 -0
- package/lib/Bubble/PressableBubbleRow.js +172 -0
- package/lib/Bubble/PressableBubbleRow.js.map +1 -0
- package/lib/Bubble/index.d.ts +6 -13
- package/lib/Bubble/index.d.ts.map +1 -1
- package/lib/Bubble/index.js +379 -509
- package/lib/Bubble/index.js.map +1 -1
- package/lib/Bubble/layout.d.ts +47 -0
- package/lib/Bubble/layout.d.ts.map +1 -0
- package/lib/Bubble/layout.js +258 -0
- package/lib/Bubble/layout.js.map +1 -0
- package/lib/Bubble/styles.d.ts +108 -16
- package/lib/Bubble/styles.d.ts.map +1 -1
- package/lib/Bubble/styles.js +227 -107
- package/lib/Bubble/styles.js.map +1 -1
- package/lib/Bubble/types.d.ts +19 -3
- package/lib/Bubble/types.d.ts.map +1 -1
- package/lib/Bubble/types.js.map +1 -1
- package/lib/Chat/Chat.d.ts +5 -0
- package/lib/Chat/Chat.d.ts.map +1 -0
- package/lib/Chat/Chat.js +464 -0
- package/lib/Chat/Chat.js.map +1 -0
- package/lib/Chat/ChatBackground.d.ts +16 -0
- package/lib/Chat/ChatBackground.d.ts.map +1 -0
- package/lib/Chat/ChatBackground.js +43 -0
- package/lib/Chat/ChatBackground.js.map +1 -0
- package/lib/Chat/ChatKeyboardAvoidingView.js +19 -4
- package/lib/Chat/ChatKeyboardAvoidingView.js.map +1 -1
- package/lib/Chat/ChatMessageList.d.ts +27 -0
- package/lib/Chat/ChatMessageList.d.ts.map +1 -0
- package/lib/Chat/ChatMessageList.js +220 -0
- package/lib/Chat/ChatMessageList.js.map +1 -0
- package/lib/Chat/ChatProviders.d.ts +18 -0
- package/lib/Chat/ChatProviders.d.ts.map +1 -0
- package/lib/Chat/ChatProviders.js +87 -0
- package/lib/Chat/ChatProviders.js.map +1 -0
- package/lib/Chat/ChatSafeAreaProvider.d.ts +35 -0
- package/lib/Chat/ChatSafeAreaProvider.d.ts.map +1 -0
- package/lib/Chat/ChatSafeAreaProvider.js +123 -0
- package/lib/Chat/ChatSafeAreaProvider.js.map +1 -0
- package/lib/Chat/ChatSelectionBar.d.ts +20 -0
- package/lib/Chat/ChatSelectionBar.d.ts.map +1 -0
- package/lib/Chat/ChatSelectionBar.js +141 -0
- package/lib/Chat/ChatSelectionBar.js.map +1 -0
- package/lib/Chat/ChatWrapper.d.ts +11 -0
- package/lib/Chat/ChatWrapper.d.ts.map +1 -0
- package/lib/Chat/ChatWrapper.js +98 -0
- package/lib/Chat/ChatWrapper.js.map +1 -0
- package/lib/Chat/ComposerHost.d.ts +20 -0
- package/lib/Chat/ComposerHost.d.ts.map +1 -0
- package/lib/Chat/ComposerHost.js +118 -0
- package/lib/Chat/ComposerHost.js.map +1 -0
- package/lib/Chat/index.d.ts +1 -8
- package/lib/Chat/index.d.ts.map +1 -1
- package/lib/Chat/index.js +1 -337
- package/lib/Chat/index.js.map +1 -1
- package/lib/Chat/styles.d.ts +14 -2
- package/lib/Chat/styles.d.ts.map +1 -1
- package/lib/Chat/styles.js +19 -9
- package/lib/Chat/styles.js.map +1 -1
- package/lib/Chat/types.d.ts +145 -11
- package/lib/Chat/types.d.ts.map +1 -1
- package/lib/Chat/types.js.map +1 -1
- package/lib/Chat/useChatContextValue.d.ts +19 -0
- package/lib/Chat/useChatContextValue.d.ts.map +1 -0
- package/lib/Chat/useChatContextValue.js +158 -0
- package/lib/Chat/useChatContextValue.js.map +1 -0
- package/lib/Chat/useChatMedia.d.ts +22 -0
- package/lib/Chat/useChatMedia.d.ts.map +1 -0
- package/lib/Chat/useChatMedia.js +127 -0
- package/lib/Chat/useChatMedia.js.map +1 -0
- package/lib/Chat/useChatSelection.d.ts +15 -0
- package/lib/Chat/useChatSelection.d.ts.map +1 -0
- package/lib/Chat/useChatSelection.js +106 -0
- package/lib/Chat/useChatSelection.js.map +1 -0
- package/lib/Chat/useComposerHandlers.d.ts +34 -0
- package/lib/Chat/useComposerHandlers.d.ts.map +1 -0
- package/lib/Chat/useComposerHandlers.js +330 -0
- package/lib/Chat/useComposerHandlers.js.map +1 -0
- package/lib/Chat/useComposerState.d.ts +27 -0
- package/lib/Chat/useComposerState.d.ts.map +1 -0
- package/lib/Chat/useComposerState.js +272 -0
- package/lib/Chat/useComposerState.js.map +1 -0
- package/lib/Chat/useInitialLayout.d.ts +19 -0
- package/lib/Chat/useInitialLayout.d.ts.map +1 -0
- package/lib/Chat/useInitialLayout.js +70 -0
- package/lib/Chat/useInitialLayout.js.map +1 -0
- package/lib/Chat/useMessageActions.d.ts +37 -0
- package/lib/Chat/useMessageActions.d.ts.map +1 -0
- package/lib/Chat/useMessageActions.js +323 -0
- package/lib/Chat/useMessageActions.js.map +1 -0
- package/lib/Chat/useMessageNavigation.d.ts +21 -0
- package/lib/Chat/useMessageNavigation.d.ts.map +1 -0
- package/lib/Chat/useMessageNavigation.js +149 -0
- package/lib/Chat/useMessageNavigation.js.map +1 -0
- package/lib/Chat/useOptionalPeerHints.d.ts +6 -0
- package/lib/Chat/useOptionalPeerHints.d.ts.map +1 -0
- package/lib/Chat/useOptionalPeerHints.js +63 -0
- package/lib/Chat/useOptionalPeerHints.js.map +1 -0
- package/lib/Chat/useResolvedReactions.d.ts +31 -0
- package/lib/Chat/useResolvedReactions.d.ts.map +1 -0
- package/lib/Chat/useResolvedReactions.js +95 -0
- package/lib/Chat/useResolvedReactions.js.map +1 -0
- package/lib/ChatAvatar.d.ts.map +1 -1
- package/lib/ChatAvatar.js +229 -84
- package/lib/ChatAvatar.js.map +1 -1
- package/lib/ChatContext.js +20 -10
- package/lib/ChatContext.js.map +1 -1
- package/lib/ChatList/ChatListAvatar.d.ts +21 -0
- package/lib/ChatList/ChatListAvatar.d.ts.map +1 -0
- package/lib/ChatList/ChatListAvatar.js +178 -0
- package/lib/ChatList/ChatListAvatar.js.map +1 -0
- package/lib/ChatList/ChatListCell.d.ts +16 -0
- package/lib/ChatList/ChatListCell.d.ts.map +1 -0
- package/lib/ChatList/ChatListCell.js +506 -0
- package/lib/ChatList/ChatListCell.js.map +1 -0
- package/lib/ChatList/ChatListShimmer.d.ts +3 -0
- package/lib/ChatList/ChatListShimmer.d.ts.map +1 -0
- package/lib/ChatList/ChatListShimmer.js +235 -0
- package/lib/ChatList/ChatListShimmer.js.map +1 -0
- package/lib/ChatList/index.d.ts +16 -0
- package/lib/ChatList/index.d.ts.map +1 -0
- package/lib/ChatList/index.js +1301 -0
- package/lib/ChatList/index.js.map +1 -0
- package/lib/ChatList/types.d.ts +128 -0
- package/lib/ChatList/types.d.ts.map +1 -0
- package/lib/ChatList/types.js +2 -0
- package/lib/ChatList/types.js.map +1 -0
- package/lib/ChatList/useChatList.d.ts +30 -0
- package/lib/ChatList/useChatList.d.ts.map +1 -0
- package/lib/ChatList/useChatList.js +211 -0
- package/lib/ChatList/useChatList.js.map +1 -0
- package/lib/ChatList/utils.d.ts +28 -0
- package/lib/ChatList/utils.d.ts.map +1 -0
- package/lib/ChatList/utils.js +60 -0
- package/lib/ChatList/utils.js.map +1 -0
- package/lib/Color.js +19 -19
- package/lib/Color.js.map +1 -1
- package/lib/Composer.d.ts.map +1 -1
- package/lib/Composer.js +148 -70
- package/lib/Composer.js.map +1 -1
- package/lib/Constant.js +4 -4
- package/lib/Constant.js.map +1 -1
- package/lib/Day/index.d.ts.map +1 -1
- package/lib/Day/index.js +115 -28
- package/lib/Day/index.js.map +1 -1
- package/lib/Day/styles.d.ts +3 -3
- package/lib/Day/styles.d.ts.map +1 -1
- package/lib/Day/styles.js +20 -17
- package/lib/Day/styles.js.map +1 -1
- package/lib/Day/types.js.map +1 -1
- package/lib/Icons.d.ts +1 -1
- package/lib/Icons.d.ts.map +1 -1
- package/lib/Icons.js.map +1 -1
- package/lib/InputToolbar/FieldGroup.d.ts +28 -0
- package/lib/InputToolbar/FieldGroup.d.ts.map +1 -0
- package/lib/InputToolbar/FieldGroup.js +143 -0
- package/lib/InputToolbar/FieldGroup.js.map +1 -0
- package/lib/InputToolbar/TakePreviewBar.d.ts +17 -0
- package/lib/InputToolbar/TakePreviewBar.d.ts.map +1 -0
- package/lib/InputToolbar/TakePreviewBar.js +126 -0
- package/lib/InputToolbar/TakePreviewBar.js.map +1 -0
- package/lib/InputToolbar/animations.d.ts +105 -0
- package/lib/InputToolbar/animations.d.ts.map +1 -0
- package/lib/InputToolbar/animations.js +238 -0
- package/lib/InputToolbar/animations.js.map +1 -0
- package/lib/InputToolbar/fragments.d.ts +13 -0
- package/lib/InputToolbar/fragments.d.ts.map +1 -0
- package/lib/InputToolbar/fragments.js +207 -0
- package/lib/InputToolbar/fragments.js.map +1 -0
- package/lib/InputToolbar/index.d.ts +7 -0
- package/lib/InputToolbar/index.d.ts.map +1 -0
- package/lib/InputToolbar/index.js +444 -0
- package/lib/InputToolbar/index.js.map +1 -0
- package/lib/InputToolbar/recordingOptions.d.ts +14 -0
- package/lib/InputToolbar/recordingOptions.d.ts.map +1 -0
- package/lib/InputToolbar/recordingOptions.js +38 -0
- package/lib/InputToolbar/recordingOptions.js.map +1 -0
- package/lib/InputToolbar/styles.d.ts +118 -0
- package/lib/InputToolbar/styles.d.ts.map +1 -0
- package/lib/InputToolbar/styles.js +139 -0
- package/lib/InputToolbar/styles.js.map +1 -0
- package/lib/InputToolbar/types.d.ts +77 -0
- package/lib/InputToolbar/types.d.ts.map +1 -0
- package/lib/InputToolbar/types.js +2 -0
- package/lib/InputToolbar/types.js.map +1 -0
- package/lib/InputToolbar/useActionsFragment.d.ts +6 -0
- package/lib/InputToolbar/useActionsFragment.d.ts.map +1 -0
- package/lib/InputToolbar/useActionsFragment.js +139 -0
- package/lib/InputToolbar/useActionsFragment.js.map +1 -0
- package/lib/InputToolbar/useComposerEditing.d.ts +11 -0
- package/lib/InputToolbar/useComposerEditing.d.ts.map +1 -0
- package/lib/InputToolbar/useComposerEditing.js +116 -0
- package/lib/InputToolbar/useComposerEditing.js.map +1 -0
- package/lib/InputToolbar/useEmojiButton.d.ts +14 -0
- package/lib/InputToolbar/useEmojiButton.d.ts.map +1 -0
- package/lib/InputToolbar/useEmojiButton.js +120 -0
- package/lib/InputToolbar/useEmojiButton.js.map +1 -0
- package/lib/InputToolbar/useKeyboardInset.d.ts +9 -0
- package/lib/InputToolbar/useKeyboardInset.d.ts.map +1 -0
- package/lib/InputToolbar/useKeyboardInset.js +25 -0
- package/lib/InputToolbar/useKeyboardInset.js.map +1 -0
- package/lib/InputToolbar/useRecordMode.d.ts +19 -0
- package/lib/InputToolbar/useRecordMode.d.ts.map +1 -0
- package/lib/InputToolbar/useRecordMode.js +124 -0
- package/lib/InputToolbar/useRecordMode.js.map +1 -0
- package/lib/InputToolbar/useRecordTake.d.ts +46 -0
- package/lib/InputToolbar/useRecordTake.d.ts.map +1 -0
- package/lib/InputToolbar/useRecordTake.js +315 -0
- package/lib/InputToolbar/useRecordTake.js.map +1 -0
- package/lib/InputToolbar/useReturnAnimations.d.ts +18 -0
- package/lib/InputToolbar/useReturnAnimations.d.ts.map +1 -0
- package/lib/InputToolbar/useReturnAnimations.js +30 -0
- package/lib/InputToolbar/useReturnAnimations.js.map +1 -0
- package/lib/InputToolbar/useRightControl.d.ts +40 -0
- package/lib/InputToolbar/useRightControl.d.ts.map +1 -0
- package/lib/InputToolbar/useRightControl.js +129 -0
- package/lib/InputToolbar/useRightControl.js.map +1 -0
- package/lib/LoadEarlierMessages.d.ts +2 -0
- package/lib/LoadEarlierMessages.d.ts.map +1 -1
- package/lib/LoadEarlierMessages.js +153 -40
- package/lib/LoadEarlierMessages.js.map +1 -1
- package/lib/Message/SwipeToReply.d.ts +23 -0
- package/lib/Message/SwipeToReply.d.ts.map +1 -0
- package/lib/Message/SwipeToReply.js +337 -0
- package/lib/Message/SwipeToReply.js.map +1 -0
- package/lib/Message/index.d.ts.map +1 -1
- package/lib/Message/index.js +415 -176
- package/lib/Message/index.js.map +1 -1
- package/lib/Message/styles.d.ts +2 -2
- package/lib/Message/styles.js +14 -14
- package/lib/Message/styles.js.map +1 -1
- package/lib/Message/types.d.ts +5 -0
- package/lib/Message/types.d.ts.map +1 -1
- package/lib/Message/types.js.map +1 -1
- package/lib/MessageAudio.d.ts.map +1 -1
- package/lib/MessageAudio.js +647 -107
- package/lib/MessageAudio.js.map +1 -1
- package/lib/MessageFile.d.ts +11 -0
- package/lib/MessageFile.d.ts.map +1 -0
- package/lib/MessageFile.js +315 -0
- package/lib/MessageFile.js.map +1 -0
- package/lib/MessageImage.d.ts +2 -0
- package/lib/MessageImage.d.ts.map +1 -1
- package/lib/MessageImage.js +430 -161
- package/lib/MessageImage.js.map +1 -1
- package/lib/MessageLocation.d.ts.map +1 -1
- package/lib/MessageLocation.js +180 -68
- package/lib/MessageLocation.js.map +1 -1
- package/lib/MessageText.d.ts +8 -1
- package/lib/MessageText.d.ts.map +1 -1
- package/lib/MessageText.js +261 -69
- package/lib/MessageText.js.map +1 -1
- package/lib/MessageVideo/ExpoVideoPlayer.d.ts +6 -0
- package/lib/MessageVideo/ExpoVideoPlayer.d.ts.map +1 -0
- package/lib/MessageVideo/ExpoVideoPlayer.js +68 -0
- package/lib/MessageVideo/ExpoVideoPlayer.js.map +1 -0
- package/lib/MessageVideo/MirroredVideo.d.ts +17 -0
- package/lib/MessageVideo/MirroredVideo.d.ts.map +1 -0
- package/lib/MessageVideo/MirroredVideo.js +223 -0
- package/lib/MessageVideo/MirroredVideo.js.map +1 -0
- package/lib/MessageVideo/RoundNotePlayer.d.ts +4 -0
- package/lib/MessageVideo/RoundNotePlayer.d.ts.map +1 -0
- package/lib/MessageVideo/RoundNotePlayer.js +560 -0
- package/lib/MessageVideo/RoundNotePlayer.js.map +1 -0
- package/lib/MessageVideo/RoundTranscription.d.ts +27 -0
- package/lib/MessageVideo/RoundTranscription.d.ts.map +1 -0
- package/lib/MessageVideo/RoundTranscription.js +151 -0
- package/lib/MessageVideo/RoundTranscription.js.map +1 -0
- package/lib/MessageVideo/VideoTransferOverlay.d.ts +11 -0
- package/lib/MessageVideo/VideoTransferOverlay.d.ts.map +1 -0
- package/lib/MessageVideo/VideoTransferOverlay.js +88 -0
- package/lib/MessageVideo/VideoTransferOverlay.js.map +1 -0
- package/lib/MessageVideo/constants.d.ts +13 -0
- package/lib/MessageVideo/constants.d.ts.map +1 -0
- package/lib/MessageVideo/constants.js +15 -0
- package/lib/MessageVideo/constants.js.map +1 -0
- package/lib/{MessageVideo.d.ts → MessageVideo/index.d.ts} +2 -2
- package/lib/MessageVideo/index.d.ts.map +1 -0
- package/lib/MessageVideo/index.js +92 -0
- package/lib/MessageVideo/index.js.map +1 -0
- package/lib/MessageVideo/liftedMedia.d.ts +13 -0
- package/lib/MessageVideo/liftedMedia.d.ts.map +1 -0
- package/lib/MessageVideo/liftedMedia.js +106 -0
- package/lib/MessageVideo/liftedMedia.js.map +1 -0
- package/lib/MessageVideo/styles.d.ts +71 -0
- package/lib/MessageVideo/styles.d.ts.map +1 -0
- package/lib/MessageVideo/styles.js +78 -0
- package/lib/MessageVideo/styles.js.map +1 -0
- package/lib/MessageVideo/types.d.ts +27 -0
- package/lib/MessageVideo/types.d.ts.map +1 -0
- package/lib/MessageVideo/types.js +2 -0
- package/lib/MessageVideo/types.js.map +1 -0
- package/lib/MessageVideo/useNoteGrow.d.ts +16 -0
- package/lib/MessageVideo/useNoteGrow.d.ts.map +1 -0
- package/lib/MessageVideo/useNoteGrow.js +122 -0
- package/lib/MessageVideo/useNoteGrow.js.map +1 -0
- package/lib/MessageVideo/useNotePlayer.d.ts +14 -0
- package/lib/MessageVideo/useNotePlayer.d.ts.map +1 -0
- package/lib/MessageVideo/useNotePlayer.js +142 -0
- package/lib/MessageVideo/useNotePlayer.js.map +1 -0
- package/lib/MessageVideo/useRingSeek.d.ts +16 -0
- package/lib/MessageVideo/useRingSeek.d.ts.map +1 -0
- package/lib/MessageVideo/useRingSeek.js +157 -0
- package/lib/MessageVideo/useRingSeek.js.map +1 -0
- package/lib/MessageVideo/useRoundNotePlayback.d.ts +46 -0
- package/lib/MessageVideo/useRoundNotePlayback.d.ts.map +1 -0
- package/lib/MessageVideo/useRoundNotePlayback.js +508 -0
- package/lib/MessageVideo/useRoundNotePlayback.js.map +1 -0
- package/lib/MessageVideo/useSendFlightReveal.d.ts +9 -0
- package/lib/MessageVideo/useSendFlightReveal.d.ts.map +1 -0
- package/lib/MessageVideo/useSendFlightReveal.js +85 -0
- package/lib/MessageVideo/useSendFlightReveal.js.map +1 -0
- package/lib/MessageVideo/videoPlayers.d.ts +8 -0
- package/lib/MessageVideo/videoPlayers.d.ts.map +1 -0
- package/lib/MessageVideo/videoPlayers.js +33 -0
- package/lib/MessageVideo/videoPlayers.js.map +1 -0
- package/lib/MessagesContainer/components/DayAnimated/debug.js +38 -24
- package/lib/MessagesContainer/components/DayAnimated/debug.js.map +1 -1
- package/lib/MessagesContainer/components/DayAnimated/index.d.ts +1 -1
- package/lib/MessagesContainer/components/DayAnimated/index.d.ts.map +1 -1
- package/lib/MessagesContainer/components/DayAnimated/index.js +244 -112
- package/lib/MessagesContainer/components/DayAnimated/index.js.map +1 -1
- package/lib/MessagesContainer/components/DayAnimated/styles.d.ts +3 -3
- package/lib/MessagesContainer/components/DayAnimated/styles.js +8 -8
- package/lib/MessagesContainer/components/DayAnimated/styles.js.map +1 -1
- package/lib/MessagesContainer/components/DayAnimated/types.d.ts +4 -2
- package/lib/MessagesContainer/components/DayAnimated/types.d.ts.map +1 -1
- package/lib/MessagesContainer/components/DayAnimated/types.js.map +1 -1
- package/lib/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.d.ts.map +1 -1
- package/lib/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.js +34 -25
- package/lib/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.js.map +1 -1
- package/lib/MessagesContainer/components/Item/index.d.ts +3 -4
- package/lib/MessagesContainer/components/Item/index.d.ts.map +1 -1
- package/lib/MessagesContainer/components/Item/index.js +289 -119
- package/lib/MessagesContainer/components/Item/index.js.map +1 -1
- package/lib/MessagesContainer/components/Item/types.d.ts +5 -0
- package/lib/MessagesContainer/components/Item/types.d.ts.map +1 -1
- package/lib/MessagesContainer/components/Item/types.js.map +1 -1
- package/lib/MessagesContainer/components/PageDownCounter.d.ts +14 -0
- package/lib/MessagesContainer/components/PageDownCounter.d.ts.map +1 -0
- package/lib/MessagesContainer/components/PageDownCounter.js +209 -0
- package/lib/MessagesContainer/components/PageDownCounter.js.map +1 -0
- package/lib/MessagesContainer/components/ScrollToBottomButton.d.ts +21 -0
- package/lib/MessagesContainer/components/ScrollToBottomButton.d.ts.map +1 -0
- package/lib/MessagesContainer/components/ScrollToBottomButton.js +195 -0
- package/lib/MessagesContainer/components/ScrollToBottomButton.js.map +1 -0
- package/lib/MessagesContainer/components/dayLayout.d.ts +2 -2
- package/lib/MessagesContainer/components/dayLayout.d.ts.map +1 -1
- package/lib/MessagesContainer/components/dayLayout.js +18 -13
- package/lib/MessagesContainer/components/dayLayout.js.map +1 -1
- package/lib/MessagesContainer/index.d.ts.map +1 -1
- package/lib/MessagesContainer/index.js +361 -420
- package/lib/MessagesContainer/index.js.map +1 -1
- package/lib/MessagesContainer/listState.d.ts +18 -0
- package/lib/MessagesContainer/listState.d.ts.map +1 -0
- package/lib/MessagesContainer/listState.js +25 -0
- package/lib/MessagesContainer/listState.js.map +1 -0
- package/lib/MessagesContainer/listTransitions.d.ts +10 -0
- package/lib/MessagesContainer/listTransitions.d.ts.map +1 -0
- package/lib/MessagesContainer/listTransitions.js +12 -0
- package/lib/MessagesContainer/listTransitions.js.map +1 -0
- package/lib/MessagesContainer/pageDownReturn.d.ts +11 -0
- package/lib/MessagesContainer/pageDownReturn.d.ts.map +1 -0
- package/lib/MessagesContainer/pageDownReturn.js +9 -0
- package/lib/MessagesContainer/pageDownReturn.js.map +1 -0
- package/lib/MessagesContainer/rowConfig.d.ts +39 -0
- package/lib/MessagesContainer/rowConfig.d.ts.map +1 -0
- package/lib/MessagesContainer/rowConfig.js +161 -0
- package/lib/MessagesContainer/rowConfig.js.map +1 -0
- package/lib/MessagesContainer/rowStore.d.ts +37 -0
- package/lib/MessagesContainer/rowStore.d.ts.map +1 -0
- package/lib/MessagesContainer/rowStore.js +140 -0
- package/lib/MessagesContainer/rowStore.js.map +1 -0
- package/lib/MessagesContainer/styles.d.ts +37 -31
- package/lib/MessagesContainer/styles.d.ts.map +1 -1
- package/lib/MessagesContainer/styles.js +75 -54
- package/lib/MessagesContainer/styles.js.map +1 -1
- package/lib/MessagesContainer/types.d.ts +33 -30
- package/lib/MessagesContainer/types.d.ts.map +1 -1
- package/lib/MessagesContainer/types.js +1 -9
- package/lib/MessagesContainer/types.js.map +1 -1
- package/lib/MessagesContainer/useCellLayouts.d.ts +17 -0
- package/lib/MessagesContainer/useCellLayouts.d.ts.map +1 -0
- package/lib/MessagesContainer/useCellLayouts.js +133 -0
- package/lib/MessagesContainer/useCellLayouts.js.map +1 -0
- package/lib/MessagesContainer/useDaysPositions.d.ts +18 -0
- package/lib/MessagesContainer/useDaysPositions.d.ts.map +1 -0
- package/lib/MessagesContainer/useDaysPositions.js +109 -0
- package/lib/MessagesContainer/useDaysPositions.js.map +1 -0
- package/lib/MessagesContainer/useListChrome.d.ts +14 -0
- package/lib/MessagesContainer/useListChrome.d.ts.map +1 -0
- package/lib/MessagesContainer/useListChrome.js +176 -0
- package/lib/MessagesContainer/useListChrome.js.map +1 -0
- package/lib/MessagesContainer/useListMetrics.d.ts +32 -0
- package/lib/MessagesContainer/useListMetrics.d.ts.map +1 -0
- package/lib/MessagesContainer/useListMetrics.js +176 -0
- package/lib/MessagesContainer/useListMetrics.js.map +1 -0
- package/lib/MessagesContainer/useMessageRows.d.ts +46 -0
- package/lib/MessagesContainer/useMessageRows.d.ts.map +1 -0
- package/lib/MessagesContainer/useMessageRows.js +228 -0
- package/lib/MessagesContainer/useMessageRows.js.map +1 -0
- package/lib/MessagesContainer/usePageDownUnread.d.ts +27 -0
- package/lib/MessagesContainer/usePageDownUnread.d.ts.map +1 -0
- package/lib/MessagesContainer/usePageDownUnread.js +152 -0
- package/lib/MessagesContainer/usePageDownUnread.js.map +1 -0
- package/lib/MessagesContainer/useScrollActivity.d.ts +13 -0
- package/lib/MessagesContainer/useScrollActivity.d.ts.map +1 -0
- package/lib/MessagesContainer/useScrollActivity.js +84 -0
- package/lib/MessagesContainer/useScrollActivity.js.map +1 -0
- package/lib/MessagesContainer/useScrollToBottom.d.ts +26 -0
- package/lib/MessagesContainer/useScrollToBottom.d.ts.map +1 -0
- package/lib/MessagesContainer/useScrollToBottom.js +164 -0
- package/lib/MessagesContainer/useScrollToBottom.js.map +1 -0
- package/lib/MessagesContainer/useTapToClosePanels.d.ts +7 -0
- package/lib/MessagesContainer/useTapToClosePanels.d.ts.map +1 -0
- package/lib/MessagesContainer/useTapToClosePanels.js +55 -0
- package/lib/MessagesContainer/useTapToClosePanels.js.map +1 -0
- package/lib/MessagesContainer/viewability.d.ts +9 -0
- package/lib/MessagesContainer/viewability.d.ts.map +1 -0
- package/lib/MessagesContainer/viewability.js +110 -0
- package/lib/MessagesContainer/viewability.js.map +1 -0
- package/lib/Models.d.ts +188 -3
- package/lib/Models.d.ts.map +1 -1
- package/lib/Models.js.map +1 -1
- package/lib/QuickReplies.js +234 -101
- package/lib/QuickReplies.js.map +1 -1
- package/lib/Reactions/MessageReactions.d.ts +5 -0
- package/lib/Reactions/MessageReactions.d.ts.map +1 -1
- package/lib/Reactions/MessageReactions.js +359 -80
- package/lib/Reactions/MessageReactions.js.map +1 -1
- package/lib/Reactions/ReactionPicker.d.ts +5 -3
- package/lib/Reactions/ReactionPicker.d.ts.map +1 -1
- package/lib/Reactions/ReactionPicker.js +68 -82
- package/lib/Reactions/ReactionPicker.js.map +1 -1
- package/lib/Reactions/index.js +1 -0
- package/lib/Reactions/index.js.map +1 -1
- package/lib/Reactions/types.d.ts +49 -5
- package/lib/Reactions/types.d.ts.map +1 -1
- package/lib/Reactions/types.js.map +1 -1
- package/lib/Reply/index.js.map +1 -1
- package/lib/Reply/types.d.ts +19 -3
- package/lib/Reply/types.d.ts.map +1 -1
- package/lib/Reply/types.js.map +1 -1
- package/lib/Send.d.ts +2 -2
- package/lib/Send.d.ts.map +1 -1
- package/lib/Send.js +218 -47
- package/lib/Send.js.map +1 -1
- package/lib/SystemMessage.d.ts.map +1 -1
- package/lib/SystemMessage.js +106 -37
- package/lib/SystemMessage.js.map +1 -1
- package/lib/Theme.d.ts +320 -23
- package/lib/Theme.d.ts.map +1 -1
- package/lib/Theme.js +548 -119
- package/lib/Theme.js.map +1 -1
- package/lib/Time.d.ts +7 -0
- package/lib/Time.d.ts.map +1 -1
- package/lib/Time.js +122 -30
- package/lib/Time.js.map +1 -1
- package/lib/TypingIndicator/index.d.ts +9 -1
- package/lib/TypingIndicator/index.d.ts.map +1 -1
- package/lib/TypingIndicator/index.js +318 -94
- package/lib/TypingIndicator/index.js.map +1 -1
- package/lib/TypingIndicator/styles.d.ts +6 -2
- package/lib/TypingIndicator/styles.d.ts.map +1 -1
- package/lib/TypingIndicator/styles.js +22 -18
- package/lib/TypingIndicator/styles.js.map +1 -1
- package/lib/TypingIndicator/types.js.map +1 -1
- package/lib/attachments/AttachmentButton.d.ts +18 -0
- package/lib/attachments/AttachmentButton.d.ts.map +1 -0
- package/lib/attachments/AttachmentButton.js +110 -0
- package/lib/attachments/AttachmentButton.js.map +1 -0
- package/lib/attachments/AttachmentMenu/CaptionBar.d.ts +15 -0
- package/lib/attachments/AttachmentMenu/CaptionBar.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/CaptionBar.js +165 -0
- package/lib/attachments/AttachmentMenu/CaptionBar.js.map +1 -0
- package/lib/attachments/AttachmentMenu/GalleryCell.d.ts +14 -0
- package/lib/attachments/AttachmentMenu/GalleryCell.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/GalleryCell.js +267 -0
- package/lib/attachments/AttachmentMenu/GalleryCell.js.map +1 -0
- package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts +18 -0
- package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/GalleryGrid.js +184 -0
- package/lib/attachments/AttachmentMenu/GalleryGrid.js.map +1 -0
- package/lib/attachments/AttachmentMenu/TabBar.d.ts +14 -0
- package/lib/attachments/AttachmentMenu/TabBar.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/TabBar.js +127 -0
- package/lib/attachments/AttachmentMenu/TabBar.js.map +1 -0
- package/lib/attachments/AttachmentMenu/TabButton.d.ts +15 -0
- package/lib/attachments/AttachmentMenu/TabButton.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/TabButton.js +219 -0
- package/lib/attachments/AttachmentMenu/TabButton.js.map +1 -0
- package/lib/attachments/AttachmentMenu/TabPanel.d.ts +17 -0
- package/lib/attachments/AttachmentMenu/TabPanel.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/TabPanel.js +170 -0
- package/lib/attachments/AttachmentMenu/TabPanel.js.map +1 -0
- package/lib/attachments/AttachmentMenu/constants.d.ts +54 -0
- package/lib/attachments/AttachmentMenu/constants.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/constants.js +79 -0
- package/lib/attachments/AttachmentMenu/constants.js.map +1 -0
- package/lib/attachments/AttachmentMenu/index.d.ts +16 -0
- package/lib/attachments/AttachmentMenu/index.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/index.js +498 -0
- package/lib/attachments/AttachmentMenu/index.js.map +1 -0
- package/lib/attachments/AttachmentMenu/styles.d.ts +259 -0
- package/lib/attachments/AttachmentMenu/styles.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/styles.js +262 -0
- package/lib/attachments/AttachmentMenu/styles.js.map +1 -0
- package/lib/attachments/AttachmentMenu/useSheetPresence.d.ts +14 -0
- package/lib/attachments/AttachmentMenu/useSheetPresence.d.ts.map +1 -0
- package/lib/attachments/AttachmentMenu/useSheetPresence.js +74 -0
- package/lib/attachments/AttachmentMenu/useSheetPresence.js.map +1 -0
- package/lib/attachments/buildMessages.d.ts +36 -0
- package/lib/attachments/buildMessages.d.ts.map +1 -0
- package/lib/attachments/buildMessages.js +192 -0
- package/lib/attachments/buildMessages.js.map +1 -0
- package/lib/attachments/gallery.d.ts +28 -0
- package/lib/attachments/gallery.d.ts.map +1 -0
- package/lib/attachments/gallery.js +245 -0
- package/lib/attachments/gallery.js.map +1 -0
- package/lib/attachments/types.d.ts +69 -0
- package/lib/attachments/types.d.ts.map +1 -0
- package/lib/attachments/types.js +2 -0
- package/lib/attachments/types.js.map +1 -0
- package/lib/colorUtils.d.ts +24 -0
- package/lib/colorUtils.d.ts.map +1 -0
- package/lib/colorUtils.js +71 -0
- package/lib/colorUtils.js.map +1 -0
- package/lib/components/AttachmentSheet.d.ts +1 -1
- package/lib/components/AttachmentSheet.d.ts.map +1 -1
- package/lib/components/AttachmentSheet.js +515 -155
- package/lib/components/AttachmentSheet.js.map +1 -1
- package/lib/components/BasicMarkdown.d.ts +7 -1
- package/lib/components/BasicMarkdown.d.ts.map +1 -1
- package/lib/components/BasicMarkdown.js +234 -184
- package/lib/components/BasicMarkdown.js.map +1 -1
- package/lib/components/BubbleBackground.d.ts +55 -0
- package/lib/components/BubbleBackground.d.ts.map +1 -0
- package/lib/components/BubbleBackground.js +513 -0
- package/lib/components/BubbleBackground.js.map +1 -0
- package/lib/components/ChatEmpty.d.ts +18 -0
- package/lib/components/ChatEmpty.d.ts.map +1 -0
- package/lib/components/ChatEmpty.js +125 -0
- package/lib/components/ChatEmpty.js.map +1 -0
- package/lib/components/ChatLoadingOverlay.d.ts +10 -0
- package/lib/components/ChatLoadingOverlay.d.ts.map +1 -0
- package/lib/components/ChatLoadingOverlay.js +89 -0
- package/lib/components/ChatLoadingOverlay.js.map +1 -0
- package/lib/components/ChatOverlay.d.ts +9 -0
- package/lib/components/ChatOverlay.d.ts.map +1 -0
- package/lib/components/ChatOverlay.js +60 -0
- package/lib/components/ChatOverlay.js.map +1 -0
- package/lib/components/ChatWallpaper.d.ts +32 -0
- package/lib/components/ChatWallpaper.d.ts.map +1 -0
- package/lib/components/ChatWallpaper.js +277 -0
- package/lib/components/ChatWallpaper.js.map +1 -0
- package/lib/components/ContextMenu/MenuCard.d.ts +21 -0
- package/lib/components/ContextMenu/MenuCard.d.ts.map +1 -0
- package/lib/components/ContextMenu/MenuCard.js +265 -0
- package/lib/components/ContextMenu/MenuCard.js.map +1 -0
- package/lib/components/ContextMenu/ReactionButton.d.ts +15 -0
- package/lib/components/ContextMenu/ReactionButton.d.ts.map +1 -0
- package/lib/components/ContextMenu/ReactionButton.js +116 -0
- package/lib/components/ContextMenu/ReactionButton.js.map +1 -0
- package/lib/components/ContextMenu/ReactionFlight.d.ts +14 -0
- package/lib/components/ContextMenu/ReactionFlight.d.ts.map +1 -0
- package/lib/components/ContextMenu/ReactionFlight.js +111 -0
- package/lib/components/ContextMenu/ReactionFlight.js.map +1 -0
- package/lib/components/ContextMenu/ReactionsBar.d.ts +35 -0
- package/lib/components/ContextMenu/ReactionsBar.d.ts.map +1 -0
- package/lib/components/ContextMenu/ReactionsBar.js +354 -0
- package/lib/components/ContextMenu/ReactionsBar.js.map +1 -0
- package/lib/components/ContextMenu/constants.d.ts +68 -0
- package/lib/components/ContextMenu/constants.d.ts.map +1 -0
- package/lib/components/ContextMenu/constants.js +105 -0
- package/lib/components/ContextMenu/constants.js.map +1 -0
- package/lib/components/ContextMenu/index.d.ts +12 -0
- package/lib/components/ContextMenu/index.d.ts.map +1 -0
- package/lib/components/ContextMenu/index.js +476 -0
- package/lib/components/ContextMenu/index.js.map +1 -0
- package/lib/components/ContextMenu/placement.d.ts +50 -0
- package/lib/components/ContextMenu/placement.d.ts.map +1 -0
- package/lib/components/ContextMenu/placement.js +117 -0
- package/lib/components/ContextMenu/placement.js.map +1 -0
- package/lib/components/ContextMenu/styles.d.ts +199 -0
- package/lib/components/ContextMenu/styles.d.ts.map +1 -0
- package/lib/components/ContextMenu/styles.js +169 -0
- package/lib/components/ContextMenu/styles.js.map +1 -0
- package/lib/components/ContextMenu/types.d.ts +62 -0
- package/lib/components/ContextMenu/types.d.ts.map +1 -0
- package/lib/components/ContextMenu/types.js +2 -0
- package/lib/components/ContextMenu/types.js.map +1 -0
- package/lib/components/ContextMenu/useExpandPanel.d.ts +11 -0
- package/lib/components/ContextMenu/useExpandPanel.d.ts.map +1 -0
- package/lib/components/ContextMenu/useExpandPanel.js +81 -0
- package/lib/components/ContextMenu/useExpandPanel.js.map +1 -0
- package/lib/components/ContextMenu/useMenuPresence.d.ts +17 -0
- package/lib/components/ContextMenu/useMenuPresence.d.ts.map +1 -0
- package/lib/components/ContextMenu/useMenuPresence.js +125 -0
- package/lib/components/ContextMenu/useMenuPresence.js.map +1 -0
- package/lib/components/FloatingRoundNote.d.ts +13 -0
- package/lib/components/FloatingRoundNote.d.ts.map +1 -0
- package/lib/components/FloatingRoundNote.js +541 -0
- package/lib/components/FloatingRoundNote.js.map +1 -0
- package/lib/components/GlassSurface.d.ts +16 -0
- package/lib/components/GlassSurface.d.ts.map +1 -0
- package/lib/components/GlassSurface.js +114 -0
- package/lib/components/GlassSurface.js.map +1 -0
- package/lib/components/Icon.js +57 -8
- package/lib/components/Icon.js.map +1 -1
- package/lib/components/LinkPreviewCard.d.ts +36 -0
- package/lib/components/LinkPreviewCard.d.ts.map +1 -0
- package/lib/components/LinkPreviewCard.js +416 -0
- package/lib/components/LinkPreviewCard.js.map +1 -0
- package/lib/components/LucideIcon.d.ts.map +1 -1
- package/lib/components/LucideIcon.js +103 -106
- package/lib/components/LucideIcon.js.map +1 -1
- package/lib/components/MarkdownMessageText.d.ts +17 -2
- package/lib/components/MarkdownMessageText.d.ts.map +1 -1
- package/lib/components/MarkdownMessageText.js +270 -22
- package/lib/components/MarkdownMessageText.js.map +1 -1
- package/lib/components/MediaCard.d.ts.map +1 -1
- package/lib/components/MediaCard.js +223 -85
- package/lib/components/MediaCard.js.map +1 -1
- package/lib/components/MediaControls.js +1094 -450
- package/lib/components/MediaControls.js.map +1 -1
- package/lib/components/MediaLoader.d.ts +21 -0
- package/lib/components/MediaLoader.d.ts.map +1 -0
- package/lib/components/MediaLoader.js +61 -0
- package/lib/components/MediaLoader.js.map +1 -0
- package/lib/components/MessageReply.d.ts +2 -2
- package/lib/components/MessageReply.d.ts.map +1 -1
- package/lib/components/MessageReply.js +266 -83
- package/lib/components/MessageReply.js.map +1 -1
- package/lib/components/MessageStatus.d.ts +23 -0
- package/lib/components/MessageStatus.d.ts.map +1 -0
- package/lib/components/MessageStatus.js +499 -0
- package/lib/components/MessageStatus.js.map +1 -0
- package/lib/components/NoteIndicators.d.ts +25 -0
- package/lib/components/NoteIndicators.d.ts.map +1 -0
- package/lib/components/NoteIndicators.js +206 -0
- package/lib/components/NoteIndicators.js.map +1 -0
- package/lib/components/NowPlayingBar.d.ts +15 -0
- package/lib/components/NowPlayingBar.d.ts.map +1 -0
- package/lib/components/NowPlayingBar.js +261 -0
- package/lib/components/NowPlayingBar.js.map +1 -0
- package/lib/components/PlayPauseIcon.d.ts +13 -0
- package/lib/components/PlayPauseIcon.d.ts.map +1 -0
- package/lib/components/PlayPauseIcon.js +187 -0
- package/lib/components/PlayPauseIcon.js.map +1 -0
- package/lib/components/PlaybackSpeedPill.d.ts +11 -0
- package/lib/components/PlaybackSpeedPill.d.ts.map +1 -0
- package/lib/components/PlaybackSpeedPill.js +350 -0
- package/lib/components/PlaybackSpeedPill.js.map +1 -0
- package/lib/components/RadialProgress.d.ts +70 -0
- package/lib/components/RadialProgress.d.ts.map +1 -0
- package/lib/components/RadialProgress.js +864 -0
- package/lib/components/RadialProgress.js.map +1 -0
- package/lib/components/RecordButton/LockPill.d.ts +27 -0
- package/lib/components/RecordButton/LockPill.d.ts.map +1 -0
- package/lib/components/RecordButton/LockPill.js +182 -0
- package/lib/components/RecordButton/LockPill.js.map +1 -0
- package/lib/components/RecordButton/ModeButton.d.ts +18 -0
- package/lib/components/RecordButton/ModeButton.d.ts.map +1 -0
- package/lib/components/RecordButton/ModeButton.js +154 -0
- package/lib/components/RecordButton/ModeButton.js.map +1 -0
- package/lib/components/RecordButton/ResumeButton.d.ts +20 -0
- package/lib/components/RecordButton/ResumeButton.d.ts.map +1 -0
- package/lib/components/RecordButton/ResumeButton.js +63 -0
- package/lib/components/RecordButton/ResumeButton.js.map +1 -0
- package/lib/components/RecordButton/Tooltips.d.ts +20 -0
- package/lib/components/RecordButton/Tooltips.d.ts.map +1 -0
- package/lib/components/RecordButton/Tooltips.js +191 -0
- package/lib/components/RecordButton/Tooltips.js.map +1 -0
- package/lib/components/RecordButton/ViewOnceButton.d.ts +16 -0
- package/lib/components/RecordButton/ViewOnceButton.d.ts.map +1 -0
- package/lib/components/RecordButton/ViewOnceButton.js +96 -0
- package/lib/components/RecordButton/ViewOnceButton.js.map +1 -0
- package/lib/components/RecordButton/constants.d.ts +52 -0
- package/lib/components/RecordButton/constants.d.ts.map +1 -0
- package/lib/components/RecordButton/constants.js +58 -0
- package/lib/components/RecordButton/constants.js.map +1 -0
- package/lib/components/RecordButton/index.d.ts +14 -0
- package/lib/components/RecordButton/index.d.ts.map +1 -0
- package/lib/components/RecordButton/index.js +382 -0
- package/lib/components/RecordButton/index.js.map +1 -0
- package/lib/components/RecordButton/styles.d.ts +155 -0
- package/lib/components/RecordButton/styles.d.ts.map +1 -0
- package/lib/components/RecordButton/styles.js +161 -0
- package/lib/components/RecordButton/styles.js.map +1 -0
- package/lib/components/RecordButton/types.d.ts +63 -0
- package/lib/components/RecordButton/types.d.ts.map +1 -0
- package/lib/components/RecordButton/types.js +2 -0
- package/lib/components/RecordButton/types.js.map +1 -0
- package/lib/components/RecordButton/useRecordGesture.d.ts +28 -0
- package/lib/components/RecordButton/useRecordGesture.d.ts.map +1 -0
- package/lib/components/RecordButton/useRecordGesture.js +263 -0
- package/lib/components/RecordButton/useRecordGesture.js.map +1 -0
- package/lib/components/RecordButton/useRecordHints.d.ts +27 -0
- package/lib/components/RecordButton/useRecordHints.d.ts.map +1 -0
- package/lib/components/RecordButton/useRecordHints.js +210 -0
- package/lib/components/RecordButton/useRecordHints.js.map +1 -0
- package/lib/components/RecordButton/useRecordSlideDistance.d.ts +3 -0
- package/lib/components/RecordButton/useRecordSlideDistance.d.ts.map +1 -0
- package/lib/components/RecordButton/useRecordSlideDistance.js +15 -0
- package/lib/components/RecordButton/useRecordSlideDistance.js.map +1 -0
- package/lib/components/RecordButton/useRecordTake.d.ts +41 -0
- package/lib/components/RecordButton/useRecordTake.d.ts.map +1 -0
- package/lib/components/RecordButton/useRecordTake.js +349 -0
- package/lib/components/RecordButton/useRecordTake.js.map +1 -0
- package/lib/components/RecordButton/useSendFlight.d.ts +25 -0
- package/lib/components/RecordButton/useSendFlight.d.ts.map +1 -0
- package/lib/components/RecordButton/useSendFlight.js +162 -0
- package/lib/components/RecordButton/useSendFlight.js.map +1 -0
- package/lib/components/RecordCircle.d.ts +92 -0
- package/lib/components/RecordCircle.d.ts.map +1 -0
- package/lib/components/RecordCircle.js +629 -0
- package/lib/components/RecordCircle.js.map +1 -0
- package/lib/components/RecordingBar.d.ts +24 -0
- package/lib/components/RecordingBar.d.ts.map +1 -0
- package/lib/components/RecordingBar.js +766 -0
- package/lib/components/RecordingBar.js.map +1 -0
- package/lib/components/ReplyPreview.js +318 -135
- package/lib/components/ReplyPreview.js.map +1 -1
- package/lib/components/SelectionBar.d.ts +17 -0
- package/lib/components/SelectionBar.d.ts.map +1 -0
- package/lib/components/SelectionBar.js +214 -0
- package/lib/components/SelectionBar.js.map +1 -0
- package/lib/components/SelectionCheckbox.d.ts +12 -0
- package/lib/components/SelectionCheckbox.d.ts.map +1 -0
- package/lib/components/SelectionCheckbox.js +104 -0
- package/lib/components/SelectionCheckbox.js.map +1 -0
- package/lib/components/SendIcon.js +60 -26
- package/lib/components/SendIcon.js.map +1 -1
- package/lib/components/ServiceSpinner.d.ts +17 -0
- package/lib/components/ServiceSpinner.d.ts.map +1 -0
- package/lib/components/ServiceSpinner.js +77 -0
- package/lib/components/ServiceSpinner.js.map +1 -0
- package/lib/components/Spinner.d.ts +18 -0
- package/lib/components/Spinner.d.ts.map +1 -0
- package/lib/components/Spinner.js +169 -0
- package/lib/components/Spinner.js.map +1 -0
- package/lib/components/StreamingCursor.js +54 -9
- package/lib/components/StreamingCursor.js.map +1 -1
- package/lib/components/Ticks.d.ts +6 -5
- package/lib/components/Ticks.d.ts.map +1 -1
- package/lib/components/Ticks.js +272 -82
- package/lib/components/Ticks.js.map +1 -1
- package/lib/components/TouchableOpacity.d.ts.map +1 -1
- package/lib/components/TouchableOpacity.js +153 -51
- package/lib/components/TouchableOpacity.js.map +1 -1
- package/lib/components/TranscribeButton.d.ts +45 -0
- package/lib/components/TranscribeButton.d.ts.map +1 -0
- package/lib/components/TranscribeButton.js +549 -0
- package/lib/components/TranscribeButton.js.map +1 -0
- package/lib/components/TypingStatus.d.ts +29 -0
- package/lib/components/TypingStatus.d.ts.map +1 -0
- package/lib/components/TypingStatus.js +446 -0
- package/lib/components/TypingStatus.js.map +1 -0
- package/lib/components/UnreadSeparator.d.ts +8 -0
- package/lib/components/UnreadSeparator.d.ts.map +1 -0
- package/lib/components/UnreadSeparator.js +101 -0
- package/lib/components/UnreadSeparator.js.map +1 -0
- package/lib/components/VideoNoteCapture/ProgressRing.d.ts +16 -0
- package/lib/components/VideoNoteCapture/ProgressRing.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/ProgressRing.js +75 -0
- package/lib/components/VideoNoteCapture/ProgressRing.js.map +1 -0
- package/lib/components/VideoNoteCapture/VideoNoteCaptureView.d.ts +31 -0
- package/lib/components/VideoNoteCapture/VideoNoteCaptureView.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/VideoNoteCaptureView.js +500 -0
- package/lib/components/VideoNoteCapture/VideoNoteCaptureView.js.map +1 -0
- package/lib/components/VideoNoteCapture/VideoNotePreviewView.d.ts +12 -0
- package/lib/components/VideoNoteCapture/VideoNotePreviewView.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/VideoNotePreviewView.js +105 -0
- package/lib/components/VideoNoteCapture/VideoNotePreviewView.js.map +1 -0
- package/lib/components/VideoNoteCapture/VideoNoteStage.d.ts +12 -0
- package/lib/components/VideoNoteCapture/VideoNoteStage.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/VideoNoteStage.js +95 -0
- package/lib/components/VideoNoteCapture/VideoNoteStage.js.map +1 -0
- package/lib/components/VideoNoteCapture/constants.d.ts +50 -0
- package/lib/components/VideoNoteCapture/constants.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/constants.js +53 -0
- package/lib/components/VideoNoteCapture/constants.js.map +1 -0
- package/lib/components/VideoNoteCapture/index.d.ts +3 -0
- package/lib/components/VideoNoteCapture/index.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/index.js +2 -0
- package/lib/components/VideoNoteCapture/index.js.map +1 -0
- package/lib/components/VideoNoteCapture/optional.d.ts +6 -0
- package/lib/components/VideoNoteCapture/optional.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/optional.js +15 -0
- package/lib/components/VideoNoteCapture/optional.js.map +1 -0
- package/lib/components/VideoNoteCapture/sessionState.d.ts +10 -0
- package/lib/components/VideoNoteCapture/sessionState.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/sessionState.js +19 -0
- package/lib/components/VideoNoteCapture/sessionState.js.map +1 -0
- package/lib/components/VideoNoteCapture/styles.d.ts +84 -0
- package/lib/components/VideoNoteCapture/styles.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/styles.js +86 -0
- package/lib/components/VideoNoteCapture/styles.js.map +1 -0
- package/lib/components/VideoNoteCapture/types.d.ts +54 -0
- package/lib/components/VideoNoteCapture/types.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/types.js +2 -0
- package/lib/components/VideoNoteCapture/types.js.map +1 -0
- package/lib/components/VideoNoteCapture/useRoundAnimation.d.ts +47 -0
- package/lib/components/VideoNoteCapture/useRoundAnimation.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/useRoundAnimation.js +216 -0
- package/lib/components/VideoNoteCapture/useRoundAnimation.js.map +1 -0
- package/lib/components/VideoNoteCapture/useRoundLayout.d.ts +14 -0
- package/lib/components/VideoNoteCapture/useRoundLayout.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/useRoundLayout.js +61 -0
- package/lib/components/VideoNoteCapture/useRoundLayout.js.map +1 -0
- package/lib/components/VideoNoteCapture/useVideoNoteSession.d.ts +25 -0
- package/lib/components/VideoNoteCapture/useVideoNoteSession.d.ts.map +1 -0
- package/lib/components/VideoNoteCapture/useVideoNoteSession.js +611 -0
- package/lib/components/VideoNoteCapture/useVideoNoteSession.js.map +1 -0
- package/lib/components/VideoNoteOverlay.d.ts +42 -11
- package/lib/components/VideoNoteOverlay.d.ts.map +1 -1
- package/lib/components/VideoNoteOverlay.js +722 -135
- package/lib/components/VideoNoteOverlay.js.map +1 -1
- package/lib/components/VideoNoteRecorder/LiveVideoNote.d.ts +6 -0
- package/lib/components/VideoNoteRecorder/LiveVideoNote.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/LiveVideoNote.js +205 -0
- package/lib/components/VideoNoteRecorder/LiveVideoNote.js.map +1 -0
- package/lib/components/VideoNoteRecorder/RecorderChrome.d.ts +35 -0
- package/lib/components/VideoNoteRecorder/RecorderChrome.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/RecorderChrome.js +350 -0
- package/lib/components/VideoNoteRecorder/RecorderChrome.js.map +1 -0
- package/lib/components/VideoNoteRecorder/UnavailableVideoNote.d.ts +10 -0
- package/lib/components/VideoNoteRecorder/UnavailableVideoNote.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/UnavailableVideoNote.js +52 -0
- package/lib/components/VideoNoteRecorder/UnavailableVideoNote.js.map +1 -0
- package/lib/components/VideoNoteRecorder/constants.d.ts +16 -0
- package/lib/components/VideoNoteRecorder/constants.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/constants.js +30 -0
- package/lib/components/VideoNoteRecorder/constants.js.map +1 -0
- package/lib/components/{VideoNoteRecorder.d.ts → VideoNoteRecorder/index.d.ts} +5 -10
- package/lib/components/VideoNoteRecorder/index.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/index.js +26 -0
- package/lib/components/VideoNoteRecorder/index.js.map +1 -0
- package/lib/components/VideoNoteRecorder/styles.d.ts +159 -0
- package/lib/components/VideoNoteRecorder/styles.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/styles.js +170 -0
- package/lib/components/VideoNoteRecorder/styles.js.map +1 -0
- package/lib/components/VideoNoteRecorder/types.d.ts +7 -0
- package/lib/components/VideoNoteRecorder/types.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/types.js +2 -0
- package/lib/components/VideoNoteRecorder/types.js.map +1 -0
- package/lib/components/VideoNoteRecorder/useRecordingTimer.d.ts +10 -0
- package/lib/components/VideoNoteRecorder/useRecordingTimer.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/useRecordingTimer.js +134 -0
- package/lib/components/VideoNoteRecorder/useRecordingTimer.js.map +1 -0
- package/lib/components/VideoNoteRecorder/useVideoNoteRecording.d.ts +28 -0
- package/lib/components/VideoNoteRecorder/useVideoNoteRecording.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/useVideoNoteRecording.js +287 -0
- package/lib/components/VideoNoteRecorder/useVideoNoteRecording.js.map +1 -0
- package/lib/components/VideoNoteRecorder/visionCameraHooks.d.ts +6 -0
- package/lib/components/VideoNoteRecorder/visionCameraHooks.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder/visionCameraHooks.js +11 -0
- package/lib/components/VideoNoteRecorder/visionCameraHooks.js.map +1 -0
- package/lib/components/VideoRecordButton.d.ts +1 -1
- package/lib/components/VideoRecordButton.d.ts.map +1 -1
- package/lib/components/VideoRecordButton.js +221 -92
- package/lib/components/VideoRecordButton.js.map +1 -1
- package/lib/components/ViewOnceBadge.d.ts +23 -0
- package/lib/components/ViewOnceBadge.d.ts.map +1 -0
- package/lib/components/ViewOnceBadge.js +233 -0
- package/lib/components/ViewOnceBadge.js.map +1 -0
- package/lib/components/VoiceMessageInput/RecordedVoicePreview.d.ts +16 -0
- package/lib/components/VoiceMessageInput/RecordedVoicePreview.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/RecordedVoicePreview.js +503 -0
- package/lib/components/VoiceMessageInput/RecordedVoicePreview.js.map +1 -0
- package/lib/components/VoiceMessageInput/constants.d.ts +16 -0
- package/lib/components/VoiceMessageInput/constants.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/constants.js +22 -0
- package/lib/components/VoiceMessageInput/constants.js.map +1 -0
- package/lib/components/VoiceMessageInput/formatElapsed.d.ts +2 -0
- package/lib/components/VoiceMessageInput/formatElapsed.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/formatElapsed.js +7 -0
- package/lib/components/VoiceMessageInput/formatElapsed.js.map +1 -0
- package/lib/components/VoiceMessageInput/index.d.ts +9 -0
- package/lib/components/VoiceMessageInput/index.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/index.js +148 -0
- package/lib/components/VoiceMessageInput/index.js.map +1 -0
- package/lib/components/VoiceMessageInput/previewStyles.d.ts +77 -0
- package/lib/components/VoiceMessageInput/previewStyles.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/previewStyles.js +80 -0
- package/lib/components/VoiceMessageInput/previewStyles.js.map +1 -0
- package/lib/components/VoiceMessageInput/previewWaveform.d.ts +15 -0
- package/lib/components/VoiceMessageInput/previewWaveform.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/previewWaveform.js +27 -0
- package/lib/components/VoiceMessageInput/previewWaveform.js.map +1 -0
- package/lib/components/VoiceMessageInput/recorder.d.ts +18 -0
- package/lib/components/VoiceMessageInput/recorder.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/recorder.js +80 -0
- package/lib/components/VoiceMessageInput/recorder.js.map +1 -0
- package/lib/components/VoiceMessageInput/types.d.ts +56 -0
- package/lib/components/VoiceMessageInput/types.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/types.js +2 -0
- package/lib/components/VoiceMessageInput/types.js.map +1 -0
- package/lib/components/VoiceMessageInput/useLazyRecorder.d.ts +7 -0
- package/lib/components/VoiceMessageInput/useLazyRecorder.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/useLazyRecorder.js +61 -0
- package/lib/components/VoiceMessageInput/useLazyRecorder.js.map +1 -0
- package/lib/components/VoiceMessageInput/useStateReport.d.ts +16 -0
- package/lib/components/VoiceMessageInput/useStateReport.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/useStateReport.js +81 -0
- package/lib/components/VoiceMessageInput/useStateReport.js.map +1 -0
- package/lib/components/VoiceMessageInput/useTakePreviewActions.d.ts +34 -0
- package/lib/components/VoiceMessageInput/useTakePreviewActions.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/useTakePreviewActions.js +207 -0
- package/lib/components/VoiceMessageInput/useTakePreviewActions.js.map +1 -0
- package/lib/components/VoiceMessageInput/useVoiceTake.d.ts +25 -0
- package/lib/components/VoiceMessageInput/useVoiceTake.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput/useVoiceTake.js +424 -0
- package/lib/components/VoiceMessageInput/useVoiceTake.js.map +1 -0
- package/lib/components/WaveformPlayer/Bars.d.ts +30 -0
- package/lib/components/WaveformPlayer/Bars.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/Bars.js +171 -0
- package/lib/components/WaveformPlayer/Bars.js.map +1 -0
- package/lib/components/WaveformPlayer/VoiceButton.d.ts +23 -0
- package/lib/components/WaveformPlayer/VoiceButton.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/VoiceButton.js +111 -0
- package/lib/components/WaveformPlayer/VoiceButton.js.map +1 -0
- package/lib/components/WaveformPlayer/WaveformTrack.d.ts +31 -0
- package/lib/components/WaveformPlayer/WaveformTrack.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/WaveformTrack.js +199 -0
- package/lib/components/WaveformPlayer/WaveformTrack.js.map +1 -0
- package/lib/components/WaveformPlayer/audio.d.ts +23 -0
- package/lib/components/WaveformPlayer/audio.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/audio.js +97 -0
- package/lib/components/WaveformPlayer/audio.js.map +1 -0
- package/lib/components/WaveformPlayer/index.d.ts +13 -0
- package/lib/components/WaveformPlayer/index.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/index.js +475 -0
- package/lib/components/WaveformPlayer/index.js.map +1 -0
- package/lib/components/WaveformPlayer/styles.d.ts +257 -0
- package/lib/components/WaveformPlayer/styles.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/styles.js +120 -0
- package/lib/components/WaveformPlayer/styles.js.map +1 -0
- package/lib/components/WaveformPlayer/types.d.ts +32 -0
- package/lib/components/WaveformPlayer/types.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/types.js +2 -0
- package/lib/components/WaveformPlayer/types.js.map +1 -0
- package/lib/components/WaveformPlayer/useSendFlightReveal.d.ts +21 -0
- package/lib/components/WaveformPlayer/useSendFlightReveal.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/useSendFlightReveal.js +105 -0
- package/lib/components/WaveformPlayer/useSendFlightReveal.js.map +1 -0
- package/lib/components/WaveformPlayer/useVoicePlayback.d.ts +39 -0
- package/lib/components/WaveformPlayer/useVoicePlayback.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/useVoicePlayback.js +401 -0
- package/lib/components/WaveformPlayer/useVoicePlayback.js.map +1 -0
- package/lib/components/WaveformPlayer/useVoiceSource.d.ts +38 -0
- package/lib/components/WaveformPlayer/useVoiceSource.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/useVoiceSource.js +244 -0
- package/lib/components/WaveformPlayer/useVoiceSource.js.map +1 -0
- package/lib/components/WaveformPlayer/useWaveformMotion.d.ts +16 -0
- package/lib/components/WaveformPlayer/useWaveformMotion.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/useWaveformMotion.js +135 -0
- package/lib/components/WaveformPlayer/useWaveformMotion.js.map +1 -0
- package/lib/components/WaveformPlayer/useWaveformScrub.d.ts +16 -0
- package/lib/components/WaveformPlayer/useWaveformScrub.d.ts.map +1 -0
- package/lib/components/WaveformPlayer/useWaveformScrub.js +168 -0
- package/lib/components/WaveformPlayer/useWaveformScrub.js.map +1 -0
- package/lib/components/composerPanels.d.ts +13 -0
- package/lib/components/composerPanels.d.ts.map +1 -0
- package/lib/components/composerPanels.js +22 -0
- package/lib/components/composerPanels.js.map +1 -0
- package/lib/components/defaultMessageActions.d.ts +30 -0
- package/lib/components/defaultMessageActions.d.ts.map +1 -0
- package/lib/components/defaultMessageActions.js +124 -0
- package/lib/components/defaultMessageActions.js.map +1 -0
- package/lib/components/earpiece.d.ts +56 -0
- package/lib/components/earpiece.d.ts.map +1 -0
- package/lib/components/earpiece.js +218 -0
- package/lib/components/earpiece.js.map +1 -0
- package/lib/components/floatingNoteMath.d.ts +66 -0
- package/lib/components/floatingNoteMath.d.ts.map +1 -0
- package/lib/components/floatingNoteMath.js +143 -0
- package/lib/components/floatingNoteMath.js.map +1 -0
- package/lib/components/haptics.d.ts +5 -0
- package/lib/components/haptics.d.ts.map +1 -0
- package/lib/components/haptics.js +26 -0
- package/lib/components/haptics.js.map +1 -0
- package/lib/components/mediaDownload.d.ts +14 -0
- package/lib/components/mediaDownload.d.ts.map +1 -0
- package/lib/components/mediaDownload.js +43 -0
- package/lib/components/mediaDownload.js.map +1 -0
- package/lib/components/mediaPalette.d.ts +7 -2
- package/lib/components/mediaPalette.d.ts.map +1 -1
- package/lib/components/mediaPalette.js +27 -15
- package/lib/components/mediaPalette.js.map +1 -1
- package/lib/components/mediaPlayback.d.ts +204 -5
- package/lib/components/mediaPlayback.d.ts.map +1 -1
- package/lib/components/mediaPlayback.js +746 -17
- package/lib/components/mediaPlayback.js.map +1 -1
- package/lib/components/mediaTransfer.d.ts +29 -0
- package/lib/components/mediaTransfer.d.ts.map +1 -0
- package/lib/components/mediaTransfer.js +52 -0
- package/lib/components/mediaTransfer.js.map +1 -0
- package/lib/components/mediaViewer/MediaViewer.d.ts +17 -0
- package/lib/components/mediaViewer/MediaViewer.d.ts.map +1 -0
- package/lib/components/mediaViewer/MediaViewer.js +347 -0
- package/lib/components/mediaViewer/MediaViewer.js.map +1 -0
- package/lib/components/mediaViewer/MediaViewerChrome.d.ts +14 -0
- package/lib/components/mediaViewer/MediaViewerChrome.d.ts.map +1 -0
- package/lib/components/mediaViewer/MediaViewerChrome.js +164 -0
- package/lib/components/mediaViewer/MediaViewerChrome.js.map +1 -0
- package/lib/components/mediaViewer/MediaViewerHost.d.ts +10 -0
- package/lib/components/mediaViewer/MediaViewerHost.d.ts.map +1 -0
- package/lib/components/mediaViewer/MediaViewerHost.js +76 -0
- package/lib/components/mediaViewer/MediaViewerHost.js.map +1 -0
- package/lib/components/mediaViewer/MediaViewerPage.d.ts +25 -0
- package/lib/components/mediaViewer/MediaViewerPage.d.ts.map +1 -0
- package/lib/components/mediaViewer/MediaViewerPage.js +194 -0
- package/lib/components/mediaViewer/MediaViewerPage.js.map +1 -0
- package/lib/components/mediaViewer/gallery.d.ts +27 -0
- package/lib/components/mediaViewer/gallery.d.ts.map +1 -0
- package/lib/components/mediaViewer/gallery.js +41 -0
- package/lib/components/mediaViewer/gallery.js.map +1 -0
- package/lib/components/messageHighlight.d.ts +41 -0
- package/lib/components/messageHighlight.d.ts.map +1 -0
- package/lib/components/messageHighlight.js +157 -0
- package/lib/components/messageHighlight.js.map +1 -0
- package/lib/components/messagePress.d.ts +14 -0
- package/lib/components/messagePress.d.ts.map +1 -0
- package/lib/components/messagePress.js +18 -0
- package/lib/components/messagePress.js.map +1 -0
- package/lib/components/messageSelection.d.ts +39 -0
- package/lib/components/messageSelection.d.ts.map +1 -0
- package/lib/components/messageSelection.js +135 -0
- package/lib/components/messageSelection.js.map +1 -0
- package/lib/components/recordingFeedback.d.ts +22 -0
- package/lib/components/recordingFeedback.d.ts.map +1 -0
- package/lib/components/recordingFeedback.js +80 -0
- package/lib/components/recordingFeedback.js.map +1 -0
- package/lib/components/recordingMeter.d.ts +19 -0
- package/lib/components/recordingMeter.d.ts.map +1 -0
- package/lib/components/recordingMeter.js +21 -0
- package/lib/components/recordingMeter.js.map +1 -0
- package/lib/components/roundNoteChrome.d.ts +107 -0
- package/lib/components/roundNoteChrome.d.ts.map +1 -0
- package/lib/components/roundNoteChrome.js +249 -0
- package/lib/components/roundNoteChrome.js.map +1 -0
- package/lib/components/roundNotePlayers.d.ts +78 -0
- package/lib/components/roundNotePlayers.d.ts.map +1 -0
- package/lib/components/roundNotePlayers.js +230 -0
- package/lib/components/roundNotePlayers.js.map +1 -0
- package/lib/components/sendFlight.d.ts +88 -0
- package/lib/components/sendFlight.d.ts.map +1 -0
- package/lib/components/sendFlight.js +146 -0
- package/lib/components/sendFlight.js.map +1 -0
- package/lib/components/viewOnce.d.ts +27 -0
- package/lib/components/viewOnce.d.ts.map +1 -0
- package/lib/components/viewOnce.js +168 -0
- package/lib/components/viewOnce.js.map +1 -0
- package/lib/components/visionCamera.d.ts +45 -0
- package/lib/components/visionCamera.d.ts.map +1 -0
- package/lib/components/visionCamera.js +117 -0
- package/lib/components/visionCamera.js.map +1 -0
- package/lib/components/voiceEditing.d.ts +34 -0
- package/lib/components/voiceEditing.d.ts.map +1 -0
- package/lib/components/voiceEditing.js +159 -0
- package/lib/components/voiceEditing.js.map +1 -0
- package/lib/components/voiceWaveform.d.ts +108 -0
- package/lib/components/voiceWaveform.d.ts.map +1 -0
- package/lib/components/voiceWaveform.js +165 -0
- package/lib/components/voiceWaveform.js.map +1 -0
- package/lib/components/wallpaperGradient.d.ts +16 -0
- package/lib/components/wallpaperGradient.d.ts.map +1 -0
- package/lib/components/wallpaperGradient.js +186 -0
- package/lib/components/wallpaperGradient.js.map +1 -0
- package/lib/components/windowInsets.d.ts +11 -0
- package/lib/components/windowInsets.d.ts.map +1 -0
- package/lib/components/windowInsets.js +44 -0
- package/lib/components/windowInsets.js.map +1 -0
- package/lib/dayjsLocales.js +15 -2
- package/lib/dayjsLocales.js.map +1 -1
- package/lib/emoji/EmojiGrid/BackspaceButton.d.ts +11 -0
- package/lib/emoji/EmojiGrid/BackspaceButton.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/BackspaceButton.js +111 -0
- package/lib/emoji/EmojiGrid/BackspaceButton.js.map +1 -0
- package/lib/emoji/EmojiGrid/EmojiRow.d.ts +15 -0
- package/lib/emoji/EmojiGrid/EmojiRow.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/EmojiRow.js +71 -0
- package/lib/emoji/EmojiGrid/EmojiRow.js.map +1 -0
- package/lib/emoji/EmojiGrid/Search.d.ts +29 -0
- package/lib/emoji/EmojiGrid/Search.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/Search.js +234 -0
- package/lib/emoji/EmojiGrid/Search.js.map +1 -0
- package/lib/emoji/EmojiGrid/TabStrip.d.ts +16 -0
- package/lib/emoji/EmojiGrid/TabStrip.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/TabStrip.js +237 -0
- package/lib/emoji/EmojiGrid/TabStrip.js.map +1 -0
- package/lib/emoji/EmojiGrid/TonePopup.d.ts +12 -0
- package/lib/emoji/EmojiGrid/TonePopup.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/TonePopup.js +137 -0
- package/lib/emoji/EmojiGrid/TonePopup.js.map +1 -0
- package/lib/emoji/EmojiGrid/constants.d.ts +29 -0
- package/lib/emoji/EmojiGrid/constants.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/constants.js +65 -0
- package/lib/emoji/EmojiGrid/constants.js.map +1 -0
- package/lib/emoji/EmojiGrid/index.d.ts +10 -0
- package/lib/emoji/EmojiGrid/index.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/index.js +450 -0
- package/lib/emoji/EmojiGrid/index.js.map +1 -0
- package/lib/emoji/EmojiGrid/items.d.ts +25 -0
- package/lib/emoji/EmojiGrid/items.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/items.js +75 -0
- package/lib/emoji/EmojiGrid/items.js.map +1 -0
- package/lib/emoji/EmojiGrid/styles.d.ts +181 -0
- package/lib/emoji/EmojiGrid/styles.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/styles.js +184 -0
- package/lib/emoji/EmojiGrid/styles.js.map +1 -0
- package/lib/emoji/EmojiGrid/types.d.ts +53 -0
- package/lib/emoji/EmojiGrid/types.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/types.js +2 -0
- package/lib/emoji/EmojiGrid/types.js.map +1 -0
- package/lib/emoji/EmojiGrid/useTabScroll.d.ts +19 -0
- package/lib/emoji/EmojiGrid/useTabScroll.d.ts.map +1 -0
- package/lib/emoji/EmojiGrid/useTabScroll.js +124 -0
- package/lib/emoji/EmojiGrid/useTabScroll.js.map +1 -0
- package/lib/emoji/EmojiKeyboard.d.ts +79 -0
- package/lib/emoji/EmojiKeyboard.d.ts.map +1 -0
- package/lib/emoji/EmojiKeyboard.js +445 -0
- package/lib/emoji/EmojiKeyboard.js.map +1 -0
- package/lib/emoji/defaultExpandedPicker.d.ts +5 -0
- package/lib/emoji/defaultExpandedPicker.d.ts.map +1 -0
- package/lib/emoji/defaultExpandedPicker.js +11 -0
- package/lib/emoji/defaultExpandedPicker.js.map +1 -0
- package/lib/emoji/emojiData.d.ts +2 -0
- package/lib/emoji/emojiData.d.ts.map +1 -0
- package/lib/emoji/emojiData.js +5 -0
- package/lib/emoji/emojiData.js.map +1 -0
- package/lib/emoji/emojiStore.d.ts +70 -0
- package/lib/emoji/emojiStore.d.ts.map +1 -0
- package/lib/emoji/emojiStore.js +246 -0
- package/lib/emoji/emojiStore.js.map +1 -0
- package/lib/emoji/textEditing.d.ts +20 -0
- package/lib/emoji/textEditing.d.ts.map +1 -0
- package/lib/emoji/textEditing.js +97 -0
- package/lib/emoji/textEditing.js.map +1 -0
- package/lib/emojiOnly.d.ts +11 -0
- package/lib/emojiOnly.d.ts.map +1 -0
- package/lib/emojiOnly.js +79 -0
- package/lib/emojiOnly.js.map +1 -0
- package/lib/gestures/useRowSwipe.d.ts +43 -0
- package/lib/gestures/useRowSwipe.d.ts.map +1 -0
- package/lib/gestures/useRowSwipe.js +74 -0
- package/lib/gestures/useRowSwipe.js.map +1 -0
- package/lib/hooks/useAnimatedPresence.d.ts +22 -0
- package/lib/hooks/useAnimatedPresence.d.ts.map +1 -0
- package/lib/hooks/useAnimatedPresence.js +97 -0
- package/lib/hooks/useAnimatedPresence.js.map +1 -0
- package/lib/hooks/useChatMessages.d.ts +39 -0
- package/lib/hooks/useChatMessages.d.ts.map +1 -0
- package/lib/hooks/useChatMessages.js +125 -0
- package/lib/hooks/useChatMessages.js.map +1 -0
- package/lib/hooks/useColorScheme.d.ts +7 -1
- package/lib/hooks/useColorScheme.d.ts.map +1 -1
- package/lib/hooks/useColorScheme.js +46 -8
- package/lib/hooks/useColorScheme.js.map +1 -1
- package/lib/hooks/useHasKeyboardProvider.js +18 -7
- package/lib/hooks/useHasKeyboardProvider.js.map +1 -1
- package/lib/hooks/useIcons.js +15 -2
- package/lib/hooks/useIcons.js.map +1 -1
- package/lib/hooks/useIsKeyboardVisible.js +39 -17
- package/lib/hooks/useIsKeyboardVisible.js.map +1 -1
- package/lib/hooks/useIsRTL.js +15 -2
- package/lib/hooks/useIsRTL.js.map +1 -1
- package/lib/hooks/useKeyboardVerticalOffset.d.ts +5 -3
- package/lib/hooks/useKeyboardVerticalOffset.d.ts.map +1 -1
- package/lib/hooks/useKeyboardVerticalOffset.js +52 -18
- package/lib/hooks/useKeyboardVerticalOffset.js.map +1 -1
- package/lib/hooks/useLabels.js +15 -2
- package/lib/hooks/useLabels.js.map +1 -1
- package/lib/hooks/useStreamingMessages.js +200 -86
- package/lib/hooks/useStreamingMessages.js.map +1 -1
- package/lib/hooks/useTheme.js +56 -7
- package/lib/hooks/useTheme.js.map +1 -1
- package/lib/hooks/useUpdateLayoutEffect.d.ts.map +1 -1
- package/lib/hooks/useUpdateLayoutEffect.js +35 -11
- package/lib/hooks/useUpdateLayoutEffect.js.map +1 -1
- package/lib/i18n.d.ts +182 -0
- package/lib/i18n.d.ts.map +1 -1
- package/lib/i18n.js +121 -23
- package/lib/i18n.js.map +1 -1
- package/lib/index.d.ts +31 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -1
- package/lib/index.js.map +1 -1
- package/lib/linkParser.js +318 -185
- package/lib/linkParser.js.map +1 -1
- package/lib/locales/ar.d.ts.map +1 -1
- package/lib/locales/ar.js +110 -19
- package/lib/locales/ar.js.map +1 -1
- package/lib/locales/de.d.ts.map +1 -1
- package/lib/locales/de.js +110 -19
- package/lib/locales/de.js.map +1 -1
- package/lib/locales/es.d.ts.map +1 -1
- package/lib/locales/es.js +110 -19
- package/lib/locales/es.js.map +1 -1
- package/lib/locales/fr.d.ts.map +1 -1
- package/lib/locales/fr.js +110 -19
- package/lib/locales/fr.js.map +1 -1
- package/lib/locales/hi.d.ts.map +1 -1
- package/lib/locales/hi.js +110 -19
- package/lib/locales/hi.js.map +1 -1
- package/lib/locales/id.d.ts.map +1 -1
- package/lib/locales/id.js +110 -19
- package/lib/locales/id.js.map +1 -1
- package/lib/locales/index.js +19 -5
- package/lib/locales/index.js.map +1 -1
- package/lib/locales/it.d.ts.map +1 -1
- package/lib/locales/it.js +110 -19
- package/lib/locales/it.js.map +1 -1
- package/lib/locales/ja.d.ts.map +1 -1
- package/lib/locales/ja.js +110 -19
- package/lib/locales/ja.js.map +1 -1
- package/lib/locales/ko.d.ts.map +1 -1
- package/lib/locales/ko.js +110 -19
- package/lib/locales/ko.js.map +1 -1
- package/lib/locales/nl.d.ts.map +1 -1
- package/lib/locales/nl.js +110 -19
- package/lib/locales/nl.js.map +1 -1
- package/lib/locales/pl.d.ts.map +1 -1
- package/lib/locales/pl.js +110 -19
- package/lib/locales/pl.js.map +1 -1
- package/lib/locales/pt.d.ts.map +1 -1
- package/lib/locales/pt.js +110 -19
- package/lib/locales/pt.js.map +1 -1
- package/lib/locales/ru.d.ts.map +1 -1
- package/lib/locales/ru.js +110 -19
- package/lib/locales/ru.js.map +1 -1
- package/lib/locales/tr.d.ts.map +1 -1
- package/lib/locales/tr.js +110 -19
- package/lib/locales/tr.js.map +1 -1
- package/lib/locales/zh.d.ts.map +1 -1
- package/lib/locales/zh.js +110 -19
- package/lib/locales/zh.js.map +1 -1
- package/lib/logging.d.ts +5 -0
- package/lib/logging.d.ts.map +1 -1
- package/lib/logging.js +13 -1
- package/lib/logging.js.map +1 -1
- package/lib/messageUtils.d.ts +19 -0
- package/lib/messageUtils.d.ts.map +1 -0
- package/lib/messageUtils.js +61 -0
- package/lib/messageUtils.js.map +1 -0
- package/lib/motion.d.ts +21 -0
- package/lib/motion.d.ts.map +1 -0
- package/lib/motion.js +30 -0
- package/lib/motion.js.map +1 -0
- package/lib/optional/index.d.ts +99 -0
- package/lib/optional/index.d.ts.map +1 -0
- package/lib/optional/index.js +284 -0
- package/lib/optional/index.js.map +1 -0
- package/lib/rtl.js +7 -5
- package/lib/rtl.js.map +1 -1
- package/lib/store.d.ts +40 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/store.js +127 -0
- package/lib/store.js.map +1 -0
- package/lib/styles.d.ts +2 -2
- package/lib/styles.d.ts.map +1 -1
- package/lib/styles.js +15 -15
- package/lib/styles.js.map +1 -1
- package/lib/types.js +1 -0
- package/lib/types.js.map +1 -1
- package/lib/utils.d.ts +15 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +199 -94
- package/lib/utils.js.map +1 -1
- package/llms.txt +133 -31
- package/package.json +89 -46
- package/lib/InputToolbar.d.ts +0 -49
- package/lib/InputToolbar.d.ts.map +0 -1
- package/lib/InputToolbar.js +0 -338
- package/lib/InputToolbar.js.map +0 -1
- package/lib/MessageVideo.d.ts.map +0 -1
- package/lib/MessageVideo.js +0 -162
- package/lib/MessageVideo.js.map +0 -1
- package/lib/MessagesContainer/FlashList.d.ts +0 -9
- package/lib/MessagesContainer/FlashList.d.ts.map +0 -1
- package/lib/MessagesContainer/FlashList.js +0 -23
- package/lib/MessagesContainer/FlashList.js.map +0 -1
- package/lib/components/ContextMenu.d.ts +0 -25
- package/lib/components/ContextMenu.d.ts.map +0 -1
- package/lib/components/ContextMenu.js +0 -122
- package/lib/components/ContextMenu.js.map +0 -1
- package/lib/components/VideoNoteRecorder.d.ts.map +0 -1
- package/lib/components/VideoNoteRecorder.js +0 -634
- package/lib/components/VideoNoteRecorder.js.map +0 -1
- package/lib/components/VoiceMessageInput.d.ts +0 -33
- package/lib/components/VoiceMessageInput.d.ts.map +0 -1
- package/lib/components/VoiceMessageInput.js +0 -403
- package/lib/components/VoiceMessageInput.js.map +0 -1
- package/lib/components/WaveformPlayer.d.ts +0 -19
- package/lib/components/WaveformPlayer.d.ts.map +0 -1
- package/lib/components/WaveformPlayer.js +0 -367
- package/lib/components/WaveformPlayer.js.map +0 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { c as _c } from "react/compiler-runtime";
|
|
2
|
+
import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A view-once note plays a single time. Once it has
|
|
6
|
+
* started, finishing it - at its end, or by being stopped - spends it, and the
|
|
7
|
+
* app is told exactly once so it can remove the message. A pause does not
|
|
8
|
+
* spend it: the note is still being listened to.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const noop = () => {};
|
|
12
|
+
export const createViewOnceTracker = (isViewOnce, onEnd) => {
|
|
13
|
+
let hasStarted = false;
|
|
14
|
+
let isSpent = false;
|
|
15
|
+
return {
|
|
16
|
+
start() {
|
|
17
|
+
if (isSpent) return false;
|
|
18
|
+
if (isViewOnce) hasStarted = true;
|
|
19
|
+
return true;
|
|
20
|
+
},
|
|
21
|
+
end() {
|
|
22
|
+
if (!isViewOnce || !hasStarted || isSpent) return false;
|
|
23
|
+
isSpent = true;
|
|
24
|
+
onEnd();
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
hasStarted: () => hasStarted,
|
|
28
|
+
isSpent: () => isSpent
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* View-once state for one player. `onStart` gates playback; `onEnd` spends the
|
|
34
|
+
* note. A note that started and then unmounts (scrolled away, chat closed)
|
|
35
|
+
* counts as ended too, as closing a view-once player does.
|
|
36
|
+
*/
|
|
37
|
+
export const useViewOnce = (message, messageId, isViewOnce, onViewOnceEnd) => {
|
|
38
|
+
const $ = _c(24);
|
|
39
|
+
const [hasStarted, setHasStarted] = useState(false);
|
|
40
|
+
const [isSpent, setIsSpent] = useState(false);
|
|
41
|
+
const notifyRef = useRef(_temp);
|
|
42
|
+
let t0;
|
|
43
|
+
if ($[0] !== message || $[1] !== onViewOnceEnd) {
|
|
44
|
+
t0 = () => {
|
|
45
|
+
notifyRef.current = () => {
|
|
46
|
+
if (message) {
|
|
47
|
+
onViewOnceEnd?.(message);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
$[0] = message;
|
|
52
|
+
$[1] = onViewOnceEnd;
|
|
53
|
+
$[2] = t0;
|
|
54
|
+
} else {
|
|
55
|
+
t0 = $[2];
|
|
56
|
+
}
|
|
57
|
+
useLayoutEffect(t0);
|
|
58
|
+
const key = `${isViewOnce}:${messageId}`;
|
|
59
|
+
let t1;
|
|
60
|
+
if ($[3] !== isViewOnce) {
|
|
61
|
+
t1 = createViewOnceTracker(isViewOnce, noop);
|
|
62
|
+
$[3] = isViewOnce;
|
|
63
|
+
$[4] = t1;
|
|
64
|
+
} else {
|
|
65
|
+
t1 = $[4];
|
|
66
|
+
}
|
|
67
|
+
let t2;
|
|
68
|
+
if ($[5] !== key || $[6] !== t1) {
|
|
69
|
+
t2 = {
|
|
70
|
+
key,
|
|
71
|
+
tracker: t1
|
|
72
|
+
};
|
|
73
|
+
$[5] = key;
|
|
74
|
+
$[6] = t1;
|
|
75
|
+
$[7] = t2;
|
|
76
|
+
} else {
|
|
77
|
+
t2 = $[7];
|
|
78
|
+
}
|
|
79
|
+
const {
|
|
80
|
+
tracker
|
|
81
|
+
} = t2;
|
|
82
|
+
let t3;
|
|
83
|
+
if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
|
|
84
|
+
t3 = () => {
|
|
85
|
+
setHasStarted(false);
|
|
86
|
+
setIsSpent(false);
|
|
87
|
+
};
|
|
88
|
+
$[8] = t3;
|
|
89
|
+
} else {
|
|
90
|
+
t3 = $[8];
|
|
91
|
+
}
|
|
92
|
+
let t4;
|
|
93
|
+
if ($[9] !== key) {
|
|
94
|
+
t4 = [key];
|
|
95
|
+
$[9] = key;
|
|
96
|
+
$[10] = t4;
|
|
97
|
+
} else {
|
|
98
|
+
t4 = $[10];
|
|
99
|
+
}
|
|
100
|
+
useEffect(t3, t4);
|
|
101
|
+
let t5;
|
|
102
|
+
let t6;
|
|
103
|
+
if ($[11] !== tracker) {
|
|
104
|
+
t5 = () => () => {
|
|
105
|
+
if (tracker.end()) {
|
|
106
|
+
notifyRef.current();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
t6 = [tracker];
|
|
110
|
+
$[11] = tracker;
|
|
111
|
+
$[12] = t5;
|
|
112
|
+
$[13] = t6;
|
|
113
|
+
} else {
|
|
114
|
+
t5 = $[12];
|
|
115
|
+
t6 = $[13];
|
|
116
|
+
}
|
|
117
|
+
useEffect(t5, t6);
|
|
118
|
+
const t7 = isViewOnce && hasStarted;
|
|
119
|
+
const t8 = isViewOnce && isSpent;
|
|
120
|
+
let t9;
|
|
121
|
+
if ($[14] !== isViewOnce || $[15] !== tracker) {
|
|
122
|
+
t9 = () => {
|
|
123
|
+
const canPlay = tracker.start();
|
|
124
|
+
if (canPlay && isViewOnce) {
|
|
125
|
+
setHasStarted(true);
|
|
126
|
+
}
|
|
127
|
+
return canPlay;
|
|
128
|
+
};
|
|
129
|
+
$[14] = isViewOnce;
|
|
130
|
+
$[15] = tracker;
|
|
131
|
+
$[16] = t9;
|
|
132
|
+
} else {
|
|
133
|
+
t9 = $[16];
|
|
134
|
+
}
|
|
135
|
+
let t10;
|
|
136
|
+
if ($[17] !== tracker) {
|
|
137
|
+
t10 = () => {
|
|
138
|
+
if (!tracker.end()) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
notifyRef.current();
|
|
142
|
+
setIsSpent(true);
|
|
143
|
+
};
|
|
144
|
+
$[17] = tracker;
|
|
145
|
+
$[18] = t10;
|
|
146
|
+
} else {
|
|
147
|
+
t10 = $[18];
|
|
148
|
+
}
|
|
149
|
+
let t11;
|
|
150
|
+
if ($[19] !== t10 || $[20] !== t7 || $[21] !== t8 || $[22] !== t9) {
|
|
151
|
+
t11 = {
|
|
152
|
+
hasStarted: t7,
|
|
153
|
+
isSpent: t8,
|
|
154
|
+
onStart: t9,
|
|
155
|
+
onEnd: t10
|
|
156
|
+
};
|
|
157
|
+
$[19] = t10;
|
|
158
|
+
$[20] = t7;
|
|
159
|
+
$[21] = t8;
|
|
160
|
+
$[22] = t9;
|
|
161
|
+
$[23] = t11;
|
|
162
|
+
} else {
|
|
163
|
+
t11 = $[23];
|
|
164
|
+
}
|
|
165
|
+
return t11;
|
|
166
|
+
};
|
|
167
|
+
function _temp() {}
|
|
168
|
+
//# sourceMappingURL=viewOnce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewOnce.js","names":["useEffect","useLayoutEffect","useMemo","useRef","useState","noop","createViewOnceTracker","isViewOnce","onEnd","hasStarted","isSpent","start","end","useViewOnce","message","messageId","onViewOnceEnd","$","_c","setHasStarted","setIsSpent","notifyRef","_temp","t0","current","key","t1","t2","tracker","t3","Symbol","for","t4","t5","t6","t7","t8","t9","canPlay","t10","t11","onStart"],"sources":["../../src/components/viewOnce.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\n/**\n * A view-once note plays a single time. Once it has\n * started, finishing it - at its end, or by being stopped - spends it, and the\n * app is told exactly once so it can remove the message. A pause does not\n * spend it: the note is still being listened to.\n */\nexport interface ViewOnceTracker {\n /** Playback started. Returns false for a spent note, which must not play. */\n start: () => boolean\n /** The note ended or was stopped; spends it if it had started. */\n end: () => boolean\n hasStarted: () => boolean\n isSpent: () => boolean\n}\n\nconst noop = () => {}\n\nexport const createViewOnceTracker = (isViewOnce: boolean, onEnd: () => void): ViewOnceTracker => {\n let hasStarted = false\n let isSpent = false\n\n return {\n start () {\n if (isSpent)\n return false\n if (isViewOnce)\n hasStarted = true\n return true\n },\n end () {\n if (!isViewOnce || !hasStarted || isSpent)\n return false\n isSpent = true\n onEnd()\n return true\n },\n hasStarted: () => hasStarted,\n isSpent: () => isSpent,\n }\n}\n\n/**\n * View-once state for one player. `onStart` gates playback; `onEnd` spends the\n * note. A note that started and then unmounts (scrolled away, chat closed)\n * counts as ended too, as closing a view-once player does.\n */\nexport const useViewOnce = <TMessage >(\n message: TMessage | undefined,\n messageId: string | number | undefined,\n isViewOnce: boolean,\n onViewOnceEnd: ((message: TMessage) => void) | undefined\n) => {\n const [hasStarted, setHasStarted] = useState(false)\n const [isSpent, setIsSpent] = useState(false)\n const notifyRef = useRef(() => {})\n useLayoutEffect(() => {\n notifyRef.current = () => {\n if (message)\n onViewOnceEnd?.(message)\n }\n })\n\n const key = `${isViewOnce}:${messageId}`\n // One tracker per note: a recycled row showing another message starts afresh. The app is\n // told here, where `end()` reports spending the note, rather than through the tracker's\n // callback, so render never hands a ref-reading closure to it.\n const { tracker } = useMemo(\n () => ({ key, tracker: createViewOnceTracker(isViewOnce, noop) }),\n [key, isViewOnce]\n )\n\n useEffect(() => {\n setHasStarted(false)\n setIsSpent(false)\n }, [key])\n\n useEffect(() => () => {\n if (tracker.end())\n notifyRef.current()\n }, [tracker])\n\n return {\n hasStarted: isViewOnce && hasStarted,\n isSpent: isViewOnce && isSpent,\n onStart: () => {\n const canPlay = tracker.start()\n if (canPlay && isViewOnce)\n setHasStarted(true)\n return canPlay\n },\n onEnd: () => {\n if (!tracker.end())\n return\n notifyRef.current()\n setIsSpent(true)\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vision-camera 5 or newer is installed and its native module is linked.
|
|
3
|
+
* @deprecated Use `getChatCapabilities().roundVideoCapture`.
|
|
4
|
+
*/
|
|
5
|
+
export declare const isVisionCameraAvailable: boolean;
|
|
6
|
+
export declare const isVisionCameraNativeReady: boolean;
|
|
7
|
+
/** The `react-native-vision-camera` module; only read it when `isVisionCameraAvailable`. */
|
|
8
|
+
export declare const getVisionCamera: () => any;
|
|
9
|
+
export type CameraPermissionStatus = 'not-determined' | 'authorized' | 'denied' | 'restricted';
|
|
10
|
+
export declare function getCameraPermissionStatus(): CameraPermissionStatus;
|
|
11
|
+
export declare function getMicrophonePermissionStatus(): CameraPermissionStatus;
|
|
12
|
+
/** Resolves `true` once the permission is granted. */
|
|
13
|
+
export declare function requestCameraPermission(): Promise<boolean>;
|
|
14
|
+
/** Resolves `true` once the permission is granted. */
|
|
15
|
+
export declare function requestMicrophonePermission(): Promise<boolean>;
|
|
16
|
+
export interface RecordingCallbacks {
|
|
17
|
+
onRecordingFinished: (video: {
|
|
18
|
+
path: string;
|
|
19
|
+
}) => void;
|
|
20
|
+
onRecordingError: (error: unknown) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The recording controls the round-note code drives, the shape vision-camera 4
|
|
24
|
+
* exposed on its camera ref. Every method is safe to call at any time: before a
|
|
25
|
+
* take has started they wait for it, after it has ended they do nothing.
|
|
26
|
+
*/
|
|
27
|
+
export interface VideoNoteRecorderController {
|
|
28
|
+
startRecording: (callbacks: RecordingCallbacks) => void;
|
|
29
|
+
stopRecording: () => Promise<void>;
|
|
30
|
+
cancelRecording: () => Promise<void>;
|
|
31
|
+
pauseRecording: () => Promise<void>;
|
|
32
|
+
resumeRecording: () => Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Wraps a vision-camera 5 video output (`useVideoOutput`) in start/stop/pause
|
|
36
|
+
* controls. Each take gets a fresh `Recorder`; creating it is asynchronous, so a
|
|
37
|
+
* stop that arrives first waits for the take to have actually started.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createVideoNoteRecorder(videoOutput: any): VideoNoteRecorderController;
|
|
40
|
+
/**
|
|
41
|
+
* A failed zoom, torch or focus call, which leaves the camera session running, as opposed to a
|
|
42
|
+
* failure of the camera itself. vision-camera reports both through `<Camera onError>`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isCameraControlError(error: unknown): boolean;
|
|
45
|
+
//# sourceMappingURL=visionCamera.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visionCamera.d.ts","sourceRoot":"","sources":["../../src/components/visionCamera.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,SAAyB,CAAA;AAG7D,eAAO,MAAM,yBAAyB,SAQlC,CAAA;AAEJ,4FAA4F;AAC5F,eAAO,MAAM,eAAe,QAAO,GAAmB,CAAA;AAEtD,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAA;AAE9F,wBAAgB,yBAAyB,IAAK,sBAAsB,CAEnE;AAED,wBAAgB,6BAA6B,IAAK,sBAAsB,CAEvE;AAED,sDAAsD;AACtD,wBAAsB,uBAAuB,IAAK,OAAO,CAAC,OAAO,CAAC,CAEjE;AAED,sDAAsD;AACtD,wBAAsB,2BAA2B,IAAK,OAAO,CAAC,OAAO,CAAC,CAErE;AAED,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACtD,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CAC3C;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,cAAc,EAAE,CAAC,SAAS,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACvD,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAE,WAAW,EAAE,GAAG,GAAG,2BAA2B,CA+CtF;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAG7D"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Optional camera for round video notes, resolved through the optional-peer registry (`src/optional`) so
|
|
2
|
+
// the bundle works whether or not the consumer installed `react-native-vision-camera`.
|
|
3
|
+
//
|
|
4
|
+
// Version 5 rebuilt the library on Nitro: recording goes through a video output
|
|
5
|
+
// handed to `<Camera outputs>` and a `Recorder` it creates, instead of methods on
|
|
6
|
+
// the camera ref. Its entry point also creates the native `CameraFactory` while it
|
|
7
|
+
// loads, so a JS package without the native module behind it (a binary built
|
|
8
|
+
// before the dependency was added) throws here and counts as not installed - the
|
|
9
|
+
// recorder then falls back to the system camera.
|
|
10
|
+
|
|
11
|
+
import { getVisionCamera as resolveVisionCamera, hasRoundVideoCapture } from '../optional';
|
|
12
|
+
const visionCamera = resolveVisionCamera();
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* vision-camera 5 or newer is installed and its native module is linked.
|
|
16
|
+
* @deprecated Use `getChatCapabilities().roundVideoCapture`.
|
|
17
|
+
*/
|
|
18
|
+
export const isVisionCameraAvailable = hasRoundVideoCapture();
|
|
19
|
+
|
|
20
|
+
// Reading a permission status is the cheapest call that crosses into native code.
|
|
21
|
+
export const isVisionCameraNativeReady = (() => {
|
|
22
|
+
if (!isVisionCameraAvailable) return false;
|
|
23
|
+
try {
|
|
24
|
+
return typeof visionCamera.VisionCamera.cameraPermissionStatus === 'string';
|
|
25
|
+
} catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
})();
|
|
29
|
+
|
|
30
|
+
/** The `react-native-vision-camera` module; only read it when `isVisionCameraAvailable`. */
|
|
31
|
+
export const getVisionCamera = () => visionCamera;
|
|
32
|
+
export function getCameraPermissionStatus() {
|
|
33
|
+
return visionCamera?.VisionCamera?.cameraPermissionStatus ?? 'authorized';
|
|
34
|
+
}
|
|
35
|
+
export function getMicrophonePermissionStatus() {
|
|
36
|
+
return visionCamera?.VisionCamera?.microphonePermissionStatus ?? 'authorized';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Resolves `true` once the permission is granted. */
|
|
40
|
+
export async function requestCameraPermission() {
|
|
41
|
+
return (await visionCamera?.VisionCamera?.requestCameraPermission?.()) ?? true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Resolves `true` once the permission is granted. */
|
|
45
|
+
export async function requestMicrophonePermission() {
|
|
46
|
+
return (await visionCamera?.VisionCamera?.requestMicrophonePermission?.()) ?? true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The recording controls the round-note code drives, the shape vision-camera 4
|
|
51
|
+
* exposed on its camera ref. Every method is safe to call at any time: before a
|
|
52
|
+
* take has started they wait for it, after it has ended they do nothing.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Wraps a vision-camera 5 video output (`useVideoOutput`) in start/stop/pause
|
|
57
|
+
* controls. Each take gets a fresh `Recorder`; creating it is asynchronous, so a
|
|
58
|
+
* stop that arrives first waits for the take to have actually started.
|
|
59
|
+
*/
|
|
60
|
+
export function createVideoNoteRecorder(videoOutput) {
|
|
61
|
+
let recorder = null;
|
|
62
|
+
let starting = null;
|
|
63
|
+
const whenStarted = async () => {
|
|
64
|
+
try {
|
|
65
|
+
await starting;
|
|
66
|
+
} catch {
|
|
67
|
+
// the start failed and already reported it
|
|
68
|
+
}
|
|
69
|
+
return recorder;
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
startRecording({
|
|
73
|
+
onRecordingFinished,
|
|
74
|
+
onRecordingError
|
|
75
|
+
}) {
|
|
76
|
+
recorder = null;
|
|
77
|
+
starting = (async () => {
|
|
78
|
+
const next = await videoOutput.createRecorder({});
|
|
79
|
+
recorder = next;
|
|
80
|
+
await next.startRecording(filePath => onRecordingFinished({
|
|
81
|
+
path: filePath
|
|
82
|
+
}), error => onRecordingError(error));
|
|
83
|
+
})();
|
|
84
|
+
starting.catch(onRecordingError);
|
|
85
|
+
},
|
|
86
|
+
async stopRecording() {
|
|
87
|
+
const current = await whenStarted();
|
|
88
|
+
if (current?.isRecording) await current.stopRecording();
|
|
89
|
+
},
|
|
90
|
+
async cancelRecording() {
|
|
91
|
+
const current = await whenStarted();
|
|
92
|
+
if (current?.isRecording) await current.cancelRecording();
|
|
93
|
+
},
|
|
94
|
+
async pauseRecording() {
|
|
95
|
+
const current = await whenStarted();
|
|
96
|
+
if (current?.isRecording && !current.isPaused) await current.pauseRecording();
|
|
97
|
+
},
|
|
98
|
+
async resumeRecording() {
|
|
99
|
+
const current = await whenStarted();
|
|
100
|
+
if (current?.isRecording && current.isPaused) await current.resumeRecording();
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// CameraX's own failures of a single control call, as vision-camera's Android side reports them
|
|
106
|
+
// (the Java exception text travels in the message).
|
|
107
|
+
const CAMERA_CONTROL_FAILURE = /CameraControl\$OperationCanceledException|Camera is not active|No flash unit/;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* A failed zoom, torch or focus call, which leaves the camera session running, as opposed to a
|
|
111
|
+
* failure of the camera itself. vision-camera reports both through `<Camera onError>`.
|
|
112
|
+
*/
|
|
113
|
+
export function isCameraControlError(error) {
|
|
114
|
+
const message = error instanceof Error ? error.message : typeof error === 'string' ? error : '';
|
|
115
|
+
return CAMERA_CONTROL_FAILURE.test(message);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=visionCamera.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visionCamera.js","names":["getVisionCamera","resolveVisionCamera","hasRoundVideoCapture","visionCamera","isVisionCameraAvailable","isVisionCameraNativeReady","VisionCamera","cameraPermissionStatus","getCameraPermissionStatus","getMicrophonePermissionStatus","microphonePermissionStatus","requestCameraPermission","requestMicrophonePermission","createVideoNoteRecorder","videoOutput","recorder","starting","whenStarted","startRecording","onRecordingFinished","onRecordingError","next","createRecorder","filePath","path","error","catch","stopRecording","current","isRecording","cancelRecording","pauseRecording","isPaused","resumeRecording","CAMERA_CONTROL_FAILURE","isCameraControlError","message","Error","test"],"sources":["../../src/components/visionCamera.ts"],"sourcesContent":["// Optional camera for round video notes, resolved through the optional-peer registry (`src/optional`) so\n// the bundle works whether or not the consumer installed `react-native-vision-camera`.\n//\n// Version 5 rebuilt the library on Nitro: recording goes through a video output\n// handed to `<Camera outputs>` and a `Recorder` it creates, instead of methods on\n// the camera ref. Its entry point also creates the native `CameraFactory` while it\n// loads, so a JS package without the native module behind it (a binary built\n// before the dependency was added) throws here and counts as not installed - the\n// recorder then falls back to the system camera.\n\nimport { getVisionCamera as resolveVisionCamera, hasRoundVideoCapture } from '../optional'\n\nconst visionCamera = resolveVisionCamera()\n\n/**\n * vision-camera 5 or newer is installed and its native module is linked.\n * @deprecated Use `getChatCapabilities().roundVideoCapture`.\n */\nexport const isVisionCameraAvailable = hasRoundVideoCapture()\n\n// Reading a permission status is the cheapest call that crosses into native code.\nexport const isVisionCameraNativeReady = (() => {\n if (!isVisionCameraAvailable)\n return false\n try {\n return typeof visionCamera.VisionCamera.cameraPermissionStatus === 'string'\n } catch {\n return false\n }\n})()\n\n/** The `react-native-vision-camera` module; only read it when `isVisionCameraAvailable`. */\nexport const getVisionCamera = (): any => visionCamera\n\nexport type CameraPermissionStatus = 'not-determined' | 'authorized' | 'denied' | 'restricted'\n\nexport function getCameraPermissionStatus (): CameraPermissionStatus {\n return visionCamera?.VisionCamera?.cameraPermissionStatus ?? 'authorized'\n}\n\nexport function getMicrophonePermissionStatus (): CameraPermissionStatus {\n return visionCamera?.VisionCamera?.microphonePermissionStatus ?? 'authorized'\n}\n\n/** Resolves `true` once the permission is granted. */\nexport async function requestCameraPermission (): Promise<boolean> {\n return (await visionCamera?.VisionCamera?.requestCameraPermission?.()) ?? true\n}\n\n/** Resolves `true` once the permission is granted. */\nexport async function requestMicrophonePermission (): Promise<boolean> {\n return (await visionCamera?.VisionCamera?.requestMicrophonePermission?.()) ?? true\n}\n\nexport interface RecordingCallbacks {\n onRecordingFinished: (video: { path: string }) => void\n onRecordingError: (error: unknown) => void\n}\n\n/**\n * The recording controls the round-note code drives, the shape vision-camera 4\n * exposed on its camera ref. Every method is safe to call at any time: before a\n * take has started they wait for it, after it has ended they do nothing.\n */\nexport interface VideoNoteRecorderController {\n startRecording: (callbacks: RecordingCallbacks) => void\n stopRecording: () => Promise<void>\n cancelRecording: () => Promise<void>\n pauseRecording: () => Promise<void>\n resumeRecording: () => Promise<void>\n}\n\n/**\n * Wraps a vision-camera 5 video output (`useVideoOutput`) in start/stop/pause\n * controls. Each take gets a fresh `Recorder`; creating it is asynchronous, so a\n * stop that arrives first waits for the take to have actually started.\n */\nexport function createVideoNoteRecorder (videoOutput: any): VideoNoteRecorderController {\n let recorder: any = null\n let starting: Promise<void> | null = null\n\n const whenStarted = async () => {\n try {\n await starting\n } catch {\n // the start failed and already reported it\n }\n return recorder\n }\n\n return {\n startRecording ({ onRecordingFinished, onRecordingError }) {\n recorder = null\n starting = (async () => {\n const next = await videoOutput.createRecorder({})\n recorder = next\n await next.startRecording(\n (filePath: string) => onRecordingFinished({ path: filePath }),\n (error: unknown) => onRecordingError(error)\n )\n })()\n starting.catch(onRecordingError)\n },\n async stopRecording () {\n const current = await whenStarted()\n if (current?.isRecording)\n await current.stopRecording()\n },\n async cancelRecording () {\n const current = await whenStarted()\n if (current?.isRecording)\n await current.cancelRecording()\n },\n async pauseRecording () {\n const current = await whenStarted()\n if (current?.isRecording && !current.isPaused)\n await current.pauseRecording()\n },\n async resumeRecording () {\n const current = await whenStarted()\n if (current?.isRecording && current.isPaused)\n await current.resumeRecording()\n },\n }\n}\n\n// CameraX's own failures of a single control call, as vision-camera's Android side reports them\n// (the Java exception text travels in the message).\nconst CAMERA_CONTROL_FAILURE = /CameraControl\\$OperationCanceledException|Camera is not active|No flash unit/\n\n/**\n * A failed zoom, torch or focus call, which leaves the camera session running, as opposed to a\n * failure of the camera itself. vision-camera reports both through `<Camera onError>`.\n */\nexport function isCameraControlError (error: unknown): boolean {\n const message = error instanceof Error ? error.message : typeof error === 'string' ? error : ''\n return CAMERA_CONTROL_FAILURE.test(message)\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Spacing of the recorder's amplitude samples (its timer interval). */
|
|
2
|
+
export declare const LEVEL_INTERVAL_MS = 100;
|
|
3
|
+
/** A paused take can be resumed: the clips can be joined into one file. */
|
|
4
|
+
export declare const isVoiceResumeAvailable: () => boolean;
|
|
5
|
+
/** A paused take can be trimmed: the clips can be decoded and written back. */
|
|
6
|
+
export declare const isVoiceTrimAvailable: () => boolean;
|
|
7
|
+
/** One recording of a take, and the part of it that is kept. */
|
|
8
|
+
export interface VoiceClip {
|
|
9
|
+
uri: string;
|
|
10
|
+
/** Length of the recording itself. */
|
|
11
|
+
durationMs: number;
|
|
12
|
+
/** Kept window within the recording. */
|
|
13
|
+
startMs: number;
|
|
14
|
+
endMs: number;
|
|
15
|
+
/** Amplitudes over the kept window, 0..1. */
|
|
16
|
+
levels: number[];
|
|
17
|
+
}
|
|
18
|
+
export declare const createClip: (uri: string, durationMs: number, levels: number[]) => VoiceClip;
|
|
19
|
+
export declare const clipsDuration: (clips: VoiceClip[]) => number;
|
|
20
|
+
export declare const clipsLevels: (clips: VoiceClip[]) => number[];
|
|
21
|
+
/**
|
|
22
|
+
* Keeps `[fromMs, toMs]` of the take's timeline, cutting into the clips it
|
|
23
|
+
* crosses. Nothing is re-encoded here; the cut is applied on render.
|
|
24
|
+
*/
|
|
25
|
+
export declare const trimClips: (clips: VoiceClip[], fromMs: number, toMs: number) => VoiceClip[];
|
|
26
|
+
/** 16-bit PCM WAV, mono, from consecutive pieces of float samples. */
|
|
27
|
+
export declare const encodeWav: (pieces: Float32Array[], sampleRate: number) => Uint8Array<ArrayBuffer>;
|
|
28
|
+
/**
|
|
29
|
+
* One file for the clips: the recording itself when there is only one and
|
|
30
|
+
* it is whole, the recordings joined without re-encoding when none is cut,
|
|
31
|
+
* otherwise a WAV of the kept parts.
|
|
32
|
+
*/
|
|
33
|
+
export declare const renderClips: (clips: VoiceClip[]) => Promise<string>;
|
|
34
|
+
//# sourceMappingURL=voiceEditing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voiceEditing.d.ts","sourceRoot":"","sources":["../../src/components/voiceEditing.ts"],"names":[],"mappings":"AAiBA,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAkBpC,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,eACoC,CAAA;AAEvE,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,eAGd,CAAA;AAEnB,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,6CAA6C;IAC7C,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM,EAAE,KAAG,SAE7E,CAAA;AAIF,eAAO,MAAM,aAAa,GAAI,OAAO,SAAS,EAAE,WACqB,CAAA;AAErE,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,EAAE,aACV,CAAA;AAEpC;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,SAAS,EAAE,EAAE,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,SAAS,EAwBrF,CAAA;AAaD,sEAAsE;AACtE,eAAO,MAAM,SAAS,GAAI,QAAQ,YAAY,EAAE,EAAE,YAAY,MAAM,4BAgCnE,CAAA;AAmCD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAU,OAAO,SAAS,EAAE,KAAG,OAAO,CAAC,MAAM,CAcpE,CAAA"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Pause, resume and trim for voice takes. expo-audio cannot append to a finished file, so a
|
|
3
|
+
* resumed take is a list of clips, each its own recording, joined when the
|
|
4
|
+
* take is previewed or sent. Both need native help that is optional here:
|
|
5
|
+
* joining uses react-native-audio-api's `concatAudioFiles` (an FFmpeg remux,
|
|
6
|
+
* no re-encode), and a trimmed take is decoded with react-native-audio-api
|
|
7
|
+
* and written as 16-bit PCM WAV with expo-file-system, since there is no AAC
|
|
8
|
+
* encoder to reach from JS.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { getAudioApi, getExpoFileSystem } from '../optional';
|
|
12
|
+
|
|
13
|
+
// Optional natives. Resolved through the optional-peer registry (`src/optional`) so the bundle works
|
|
14
|
+
// whether or not the consumer installed them.
|
|
15
|
+
const audioApi = getAudioApi();
|
|
16
|
+
const fileSystem = getExpoFileSystem();
|
|
17
|
+
|
|
18
|
+
/** Spacing of the recorder's amplitude samples (its timer interval). */
|
|
19
|
+
export const LEVEL_INTERVAL_MS = 100;
|
|
20
|
+
/** A trimmed take is written at this rate: plenty for speech, a third of 48k's size. */
|
|
21
|
+
const TRIM_SAMPLE_RATE = 24000;
|
|
22
|
+
let ffmpegEnabled = null;
|
|
23
|
+
// Both joining and decoding an M4A go through FFmpeg, which an app can
|
|
24
|
+
// compile out of react-native-audio-api.
|
|
25
|
+
const isFfmpegEnabled = () => {
|
|
26
|
+
if (ffmpegEnabled == null) try {
|
|
27
|
+
ffmpegEnabled = audioApi?.isFfmpegEnabled ? audioApi.isFfmpegEnabled() !== false : !!audioApi;
|
|
28
|
+
} catch {
|
|
29
|
+
ffmpegEnabled = false;
|
|
30
|
+
}
|
|
31
|
+
return ffmpegEnabled;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/** A paused take can be resumed: the clips can be joined into one file. */
|
|
35
|
+
export const isVoiceResumeAvailable = () => typeof audioApi?.concatAudioFiles === 'function' && isFfmpegEnabled();
|
|
36
|
+
|
|
37
|
+
/** A paused take can be trimmed: the clips can be decoded and written back. */
|
|
38
|
+
export const isVoiceTrimAvailable = () => typeof audioApi?.decodeAudioData === 'function' && typeof fileSystem?.File === 'function' && isFfmpegEnabled();
|
|
39
|
+
|
|
40
|
+
/** One recording of a take, and the part of it that is kept. */
|
|
41
|
+
|
|
42
|
+
export const createClip = (uri, durationMs, levels) => ({
|
|
43
|
+
uri,
|
|
44
|
+
durationMs,
|
|
45
|
+
startMs: 0,
|
|
46
|
+
endMs: durationMs,
|
|
47
|
+
levels
|
|
48
|
+
});
|
|
49
|
+
const isWhole = clip => clip.startMs <= 0 && clip.endMs >= clip.durationMs;
|
|
50
|
+
export const clipsDuration = clips => clips.reduce((total, clip) => total + clip.endMs - clip.startMs, 0);
|
|
51
|
+
export const clipsLevels = clips => clips.flatMap(clip => clip.levels);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Keeps `[fromMs, toMs]` of the take's timeline, cutting into the clips it
|
|
55
|
+
* crosses. Nothing is re-encoded here; the cut is applied on render.
|
|
56
|
+
*/
|
|
57
|
+
export const trimClips = (clips, fromMs, toMs) => {
|
|
58
|
+
const out = [];
|
|
59
|
+
let offset = 0;
|
|
60
|
+
for (const clip of clips) {
|
|
61
|
+
const length = clip.endMs - clip.startMs;
|
|
62
|
+
const keepFrom = Math.max(fromMs, offset);
|
|
63
|
+
const keepTo = Math.min(toMs, offset + length);
|
|
64
|
+
if (keepTo > keepFrom) {
|
|
65
|
+
const levelsFrom = Math.floor((keepFrom - offset) / length * clip.levels.length);
|
|
66
|
+
const levelsTo = Math.ceil((keepTo - offset) / length * clip.levels.length);
|
|
67
|
+
out.push({
|
|
68
|
+
...clip,
|
|
69
|
+
startMs: clip.startMs + keepFrom - offset,
|
|
70
|
+
endMs: clip.startMs + keepTo - offset,
|
|
71
|
+
levels: clip.levels.slice(levelsFrom, levelsTo)
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
offset += length;
|
|
75
|
+
}
|
|
76
|
+
return out;
|
|
77
|
+
};
|
|
78
|
+
const directoryOf = uri => uri.slice(0, uri.lastIndexOf('/'));
|
|
79
|
+
const extensionOf = uri => {
|
|
80
|
+
const name = uri.slice(uri.lastIndexOf('/') + 1);
|
|
81
|
+
const dot = name.lastIndexOf('.');
|
|
82
|
+
return dot > 0 ? name.slice(dot) : '.m4a';
|
|
83
|
+
};
|
|
84
|
+
const uniqueName = (prefix, extension) => `${prefix}-${Date.now()}-${Math.round(Math.random() * 1e6)}${extension}`;
|
|
85
|
+
|
|
86
|
+
/** 16-bit PCM WAV, mono, from consecutive pieces of float samples. */
|
|
87
|
+
export const encodeWav = (pieces, sampleRate) => {
|
|
88
|
+
const sampleCount = pieces.reduce((total, piece) => total + piece.length, 0);
|
|
89
|
+
const bytes = new Uint8Array(44 + sampleCount * 2);
|
|
90
|
+
const view = new DataView(bytes.buffer);
|
|
91
|
+
const writeAscii = (at, text) => {
|
|
92
|
+
for (let i = 0; i < text.length; i++) view.setUint8(at + i, text.charCodeAt(i));
|
|
93
|
+
};
|
|
94
|
+
writeAscii(0, 'RIFF');
|
|
95
|
+
view.setUint32(4, 36 + sampleCount * 2, true);
|
|
96
|
+
writeAscii(8, 'WAVE');
|
|
97
|
+
writeAscii(12, 'fmt ');
|
|
98
|
+
view.setUint32(16, 16, true);
|
|
99
|
+
view.setUint16(20, 1, true);
|
|
100
|
+
view.setUint16(22, 1, true);
|
|
101
|
+
view.setUint32(24, sampleRate, true);
|
|
102
|
+
view.setUint32(28, sampleRate * 2, true);
|
|
103
|
+
view.setUint16(32, 2, true);
|
|
104
|
+
view.setUint16(34, 16, true);
|
|
105
|
+
writeAscii(36, 'data');
|
|
106
|
+
view.setUint32(40, sampleCount * 2, true);
|
|
107
|
+
let at = 44;
|
|
108
|
+
for (const piece of pieces) for (let i = 0; i < piece.length; i++) {
|
|
109
|
+
const sample = Math.max(-1, Math.min(1, piece[i]));
|
|
110
|
+
view.setInt16(at, sample < 0 ? sample * 0x8000 : sample * 0x7fff, true);
|
|
111
|
+
at += 2;
|
|
112
|
+
}
|
|
113
|
+
return bytes;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
// Averages the channels so a stereo recording still lands as one voice.
|
|
117
|
+
const mixdown = buffer => {
|
|
118
|
+
const channels = buffer.numberOfChannels ?? 1;
|
|
119
|
+
const first = buffer.getChannelData(0);
|
|
120
|
+
if (channels < 2) return first;
|
|
121
|
+
const mixed = new Float32Array(first.length);
|
|
122
|
+
for (let channel = 0; channel < channels; channel++) {
|
|
123
|
+
const data = buffer.getChannelData(channel);
|
|
124
|
+
for (let i = 0; i < mixed.length; i++) mixed[i] += data[i] / channels;
|
|
125
|
+
}
|
|
126
|
+
return mixed;
|
|
127
|
+
};
|
|
128
|
+
const writeTrimmed = async clips => {
|
|
129
|
+
const pieces = [];
|
|
130
|
+
for (const clip of clips) {
|
|
131
|
+
const buffer = await audioApi.decodeAudioData(clip.uri, TRIM_SAMPLE_RATE);
|
|
132
|
+
const samples = mixdown(buffer);
|
|
133
|
+
const from = Math.min(samples.length, Math.round(clip.startMs / 1000 * TRIM_SAMPLE_RATE));
|
|
134
|
+
const to = Math.min(samples.length, Math.round(clip.endMs / 1000 * TRIM_SAMPLE_RATE));
|
|
135
|
+
pieces.push(samples.subarray(from, Math.max(from, to)));
|
|
136
|
+
}
|
|
137
|
+
const directory = directoryOf(clips[0].uri);
|
|
138
|
+
const base = directory.includes('://') ? directory : `file://${directory}`;
|
|
139
|
+
const file = new fileSystem.File(`${base}/${uniqueName('voice-trimmed', '.wav')}`);
|
|
140
|
+
file.write(encodeWav(pieces, TRIM_SAMPLE_RATE));
|
|
141
|
+
return file.uri;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* One file for the clips: the recording itself when there is only one and
|
|
146
|
+
* it is whole, the recordings joined without re-encoding when none is cut,
|
|
147
|
+
* otherwise a WAV of the kept parts.
|
|
148
|
+
*/
|
|
149
|
+
export const renderClips = async clips => {
|
|
150
|
+
if (!clips.length) throw new Error('Nothing recorded');
|
|
151
|
+
if (clips.length === 1 && isWhole(clips[0])) return clips[0].uri;
|
|
152
|
+
if (clips.every(isWhole)) {
|
|
153
|
+
const first = clips[0].uri;
|
|
154
|
+
const output = `${directoryOf(first)}/${uniqueName('voice', extensionOf(first))}`;
|
|
155
|
+
return await audioApi.concatAudioFiles(clips.map(clip => clip.uri), output);
|
|
156
|
+
}
|
|
157
|
+
return await writeTrimmed(clips);
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=voiceEditing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voiceEditing.js","names":["getAudioApi","getExpoFileSystem","audioApi","fileSystem","LEVEL_INTERVAL_MS","TRIM_SAMPLE_RATE","ffmpegEnabled","isFfmpegEnabled","isVoiceResumeAvailable","concatAudioFiles","isVoiceTrimAvailable","decodeAudioData","File","createClip","uri","durationMs","levels","startMs","endMs","isWhole","clip","clipsDuration","clips","reduce","total","clipsLevels","flatMap","trimClips","fromMs","toMs","out","offset","length","keepFrom","Math","max","keepTo","min","levelsFrom","floor","levelsTo","ceil","push","slice","directoryOf","lastIndexOf","extensionOf","name","dot","uniqueName","prefix","extension","Date","now","round","random","encodeWav","pieces","sampleRate","sampleCount","piece","bytes","Uint8Array","view","DataView","buffer","writeAscii","at","text","i","setUint8","charCodeAt","setUint32","setUint16","sample","setInt16","mixdown","channels","numberOfChannels","first","getChannelData","mixed","Float32Array","channel","data","writeTrimmed","samples","from","to","subarray","directory","base","includes","file","write","renderClips","Error","every","output","map"],"sources":["../../src/components/voiceEditing.ts"],"sourcesContent":["/*\n * Pause, resume and trim for voice takes. expo-audio cannot append to a finished file, so a\n * resumed take is a list of clips, each its own recording, joined when the\n * take is previewed or sent. Both need native help that is optional here:\n * joining uses react-native-audio-api's `concatAudioFiles` (an FFmpeg remux,\n * no re-encode), and a trimmed take is decoded with react-native-audio-api\n * and written as 16-bit PCM WAV with expo-file-system, since there is no AAC\n * encoder to reach from JS.\n */\n\nimport { getAudioApi, getExpoFileSystem } from '../optional'\n\n// Optional natives. Resolved through the optional-peer registry (`src/optional`) so the bundle works\n// whether or not the consumer installed them.\nconst audioApi = getAudioApi()\nconst fileSystem = getExpoFileSystem()\n\n/** Spacing of the recorder's amplitude samples (its timer interval). */\nexport const LEVEL_INTERVAL_MS = 100\n/** A trimmed take is written at this rate: plenty for speech, a third of 48k's size. */\nconst TRIM_SAMPLE_RATE = 24000\n\nlet ffmpegEnabled: boolean | null = null\n// Both joining and decoding an M4A go through FFmpeg, which an app can\n// compile out of react-native-audio-api.\nconst isFfmpegEnabled = () => {\n if (ffmpegEnabled == null)\n try {\n ffmpegEnabled = audioApi?.isFfmpegEnabled ? audioApi.isFfmpegEnabled() !== false : !!audioApi\n } catch {\n ffmpegEnabled = false\n }\n\n return ffmpegEnabled\n}\n\n/** A paused take can be resumed: the clips can be joined into one file. */\nexport const isVoiceResumeAvailable = () =>\n typeof audioApi?.concatAudioFiles === 'function' && isFfmpegEnabled()\n\n/** A paused take can be trimmed: the clips can be decoded and written back. */\nexport const isVoiceTrimAvailable = () =>\n typeof audioApi?.decodeAudioData === 'function' &&\n typeof fileSystem?.File === 'function' &&\n isFfmpegEnabled()\n\n/** One recording of a take, and the part of it that is kept. */\nexport interface VoiceClip {\n uri: string\n /** Length of the recording itself. */\n durationMs: number\n /** Kept window within the recording. */\n startMs: number\n endMs: number\n /** Amplitudes over the kept window, 0..1. */\n levels: number[]\n}\n\nexport const createClip = (uri: string, durationMs: number, levels: number[]): VoiceClip => ({\n uri, durationMs, startMs: 0, endMs: durationMs, levels,\n})\n\nconst isWhole = (clip: VoiceClip) => clip.startMs <= 0 && clip.endMs >= clip.durationMs\n\nexport const clipsDuration = (clips: VoiceClip[]) =>\n clips.reduce((total, clip) => total + clip.endMs - clip.startMs, 0)\n\nexport const clipsLevels = (clips: VoiceClip[]) =>\n clips.flatMap(clip => clip.levels)\n\n/**\n * Keeps `[fromMs, toMs]` of the take's timeline, cutting into the clips it\n * crosses. Nothing is re-encoded here; the cut is applied on render.\n */\nexport const trimClips = (clips: VoiceClip[], fromMs: number, toMs: number): VoiceClip[] => {\n const out: VoiceClip[] = []\n let offset = 0\n\n for (const clip of clips) {\n const length = clip.endMs - clip.startMs\n const keepFrom = Math.max(fromMs, offset)\n const keepTo = Math.min(toMs, offset + length)\n\n if (keepTo > keepFrom) {\n const levelsFrom = Math.floor(((keepFrom - offset) / length) * clip.levels.length)\n const levelsTo = Math.ceil(((keepTo - offset) / length) * clip.levels.length)\n out.push({\n ...clip,\n startMs: clip.startMs + keepFrom - offset,\n endMs: clip.startMs + keepTo - offset,\n levels: clip.levels.slice(levelsFrom, levelsTo),\n })\n }\n\n offset += length\n }\n\n return out\n}\n\nconst directoryOf = (uri: string) => uri.slice(0, uri.lastIndexOf('/'))\n\nconst extensionOf = (uri: string) => {\n const name = uri.slice(uri.lastIndexOf('/') + 1)\n const dot = name.lastIndexOf('.')\n return dot > 0 ? name.slice(dot) : '.m4a'\n}\n\nconst uniqueName = (prefix: string, extension: string) =>\n `${prefix}-${Date.now()}-${Math.round(Math.random() * 1e6)}${extension}`\n\n/** 16-bit PCM WAV, mono, from consecutive pieces of float samples. */\nexport const encodeWav = (pieces: Float32Array[], sampleRate: number) => {\n const sampleCount = pieces.reduce((total, piece) => total + piece.length, 0)\n const bytes = new Uint8Array(44 + sampleCount * 2)\n const view = new DataView(bytes.buffer)\n const writeAscii = (at: number, text: string) => {\n for (let i = 0; i < text.length; i++)\n view.setUint8(at + i, text.charCodeAt(i))\n }\n\n writeAscii(0, 'RIFF')\n view.setUint32(4, 36 + sampleCount * 2, true)\n writeAscii(8, 'WAVE')\n writeAscii(12, 'fmt ')\n view.setUint32(16, 16, true)\n view.setUint16(20, 1, true)\n view.setUint16(22, 1, true)\n view.setUint32(24, sampleRate, true)\n view.setUint32(28, sampleRate * 2, true)\n view.setUint16(32, 2, true)\n view.setUint16(34, 16, true)\n writeAscii(36, 'data')\n view.setUint32(40, sampleCount * 2, true)\n\n let at = 44\n for (const piece of pieces)\n for (let i = 0; i < piece.length; i++) {\n const sample = Math.max(-1, Math.min(1, piece[i]))\n view.setInt16(at, sample < 0 ? sample * 0x8000 : sample * 0x7fff, true)\n at += 2\n }\n\n return bytes\n}\n\n// Averages the channels so a stereo recording still lands as one voice.\nconst mixdown = (buffer: any): Float32Array => {\n const channels: number = buffer.numberOfChannels ?? 1\n const first: Float32Array = buffer.getChannelData(0)\n if (channels < 2)\n return first\n\n const mixed = new Float32Array(first.length)\n for (let channel = 0; channel < channels; channel++) {\n const data: Float32Array = buffer.getChannelData(channel)\n for (let i = 0; i < mixed.length; i++)\n mixed[i] += data[i] / channels\n }\n return mixed\n}\n\nconst writeTrimmed = async (clips: VoiceClip[]) => {\n const pieces: Float32Array[] = []\n for (const clip of clips) {\n const buffer = await audioApi.decodeAudioData(clip.uri, TRIM_SAMPLE_RATE)\n const samples = mixdown(buffer)\n const from = Math.min(samples.length, Math.round((clip.startMs / 1000) * TRIM_SAMPLE_RATE))\n const to = Math.min(samples.length, Math.round((clip.endMs / 1000) * TRIM_SAMPLE_RATE))\n pieces.push(samples.subarray(from, Math.max(from, to)))\n }\n\n const directory = directoryOf(clips[0].uri)\n const base = directory.includes('://') ? directory : `file://${directory}`\n const file = new fileSystem.File(`${base}/${uniqueName('voice-trimmed', '.wav')}`)\n file.write(encodeWav(pieces, TRIM_SAMPLE_RATE))\n return file.uri as string\n}\n\n/**\n * One file for the clips: the recording itself when there is only one and\n * it is whole, the recordings joined without re-encoding when none is cut,\n * otherwise a WAV of the kept parts.\n */\nexport const renderClips = async (clips: VoiceClip[]): Promise<string> => {\n if (!clips.length)\n throw new Error('Nothing recorded')\n\n if (clips.length === 1 && isWhole(clips[0]))\n return clips[0].uri\n\n if (clips.every(isWhole)) {\n const first = clips[0].uri\n const output = `${directoryOf(first)}/${uniqueName('voice', extensionOf(first))}`\n return await audioApi.concatAudioFiles(clips.map(clip => clip.uri), output)\n }\n\n return await writeTrimmed(clips)\n}\n"],"mappings":"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","ignoreList":[]}
|