stream-chat-react-native-core 4.11.1-beta.1 → 4.11.1-beta.2

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.
@@ -128,7 +128,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
128
128
 
129
129
  var share = function () {
130
130
  var _ref = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
131
- var _photo$mime_type, _photo$user, _photo$mime_type2, extension, localFile;
131
+ var _photo$mime_type, _photo$user, extension, localFile;
132
132
 
133
133
  return _regenerator["default"].wrap(function _callee$(_context) {
134
134
  while (1) {
@@ -147,7 +147,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
147
147
  localFile = _context.sent;
148
148
  _context.next = 8;
149
149
  return (0, _native.shareImage)({
150
- type: (_photo$mime_type2 = photo.mime_type) != null ? _photo$mime_type2 : 'image/jpeg',
150
+ type: photo.mime_type || 'image/jpeg',
151
151
  url: localFile
152
152
  });
153
153
 
@@ -255,6 +255,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
255
255
  columnNumber: 15
256
256
  }
257
257
  }, ShareIcon ? ShareIcon : _react["default"].createElement(_icons.Share, {
258
+ pathFill: black,
258
259
  __self: _this,
259
260
  __source: {
260
261
  fileName: _jsxFileName,
@@ -1 +1 @@
1
- {"version":3,"sources":["ImageGalleryFooter.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","imageCountText","fontSize","fontWeight","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","wrapper","bottom","left","position","right","ImageGalleryFooterWithContext","props","centerElement","duration","GridIcon","leftElement","onPlayPause","onProgressDrag","opacity","openGridView","paused","photo","photoLength","progress","rightElement","selectedIndex","ShareIcon","videoControlElement","visible","setHeight","shareMenuOpen","setShareMenuOpen","theme","colors","black","white","imageGallery","footer","container","t","footerStyle","value","transform","translateY","Extrapolate","CLAMP","share","extension","mime_type","split","fileName","user","id","messageId","fromUrl","uri","localFile","type","url","console","log","event","nativeEvent","layout","backgroundColor","color","index","areEqual","prevProps","nextProps","prevDuration","prevPaused","prevProgress","prevSelectedIndex","nextDuration","nextPaused","nextProgress","nextSelectedIndex","isDurationEqual","isPausedEqual","isProgressEqual","isSelectedIndexEqual","MemoizedImageGalleryFooter","React","memo","ImageGalleryFooter","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { SafeAreaView, StyleSheet, Text, TouchableOpacity, View, ViewStyle } from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { ImageGalleryVideoControl } from './ImageGalleryVideoControl';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Grid as GridIconDefault, Share as ShareIconDefault } from '../../../icons';\nimport { deleteFile, saveFile, shareImage } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { Photo } from '../ImageGallery';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n imageCountText: {\n fontSize: 16,\n fontWeight: '600',\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n flex: 1,\n justifyContent: 'center',\n marginRight: 8,\n },\n wrapper: {\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n },\n});\n\nexport type ImageGalleryFooterCustomComponent<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ({\n openGridView,\n photo,\n share,\n shareMenuOpen,\n}: {\n openGridView: () => void;\n share: () => Promise<void>;\n shareMenuOpen: boolean;\n photo?: Photo<StreamChatGenerics>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryFooterVideoControlProps = {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n paused: boolean;\n progress: number;\n};\n\nexport type ImageGalleryFooterVideoControlComponent = ({\n duration,\n onPlayPause,\n onProgressDrag,\n paused,\n progress,\n}: ImageGalleryFooterVideoControlProps) => React.ReactElement | null;\n\nexport type ImageGalleryFooterCustomComponentProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n centerElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n GridIcon?: React.ReactElement;\n leftElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n rightElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n ShareIcon?: React.ReactElement;\n videoControlElement?: ImageGalleryFooterVideoControlComponent;\n};\n\ntype ImageGalleryFooterPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterCustomComponentProps<StreamChatGenerics> & {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n opacity: Animated.SharedValue<number>;\n openGridView: () => void;\n paused: boolean;\n photo: Photo<StreamChatGenerics>;\n photoLength: number;\n progress: number;\n selectedIndex: number;\n visible: Animated.SharedValue<number>;\n};\n\nexport const ImageGalleryFooterWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n centerElement,\n duration,\n GridIcon,\n leftElement,\n onPlayPause,\n onProgressDrag,\n opacity,\n openGridView,\n paused,\n photo,\n photoLength,\n progress,\n rightElement,\n selectedIndex,\n ShareIcon,\n videoControlElement,\n visible,\n } = props;\n\n const [height, setHeight] = useState(200);\n const [shareMenuOpen, setShareMenuOpen] = useState(false);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n footer: {\n centerContainer,\n container,\n imageCountText,\n innerContainer,\n leftContainer,\n rightContainer,\n },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n const footerStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [height, 0], Extrapolate.CLAMP),\n },\n ],\n }),\n [height],\n );\n\n const share = async () => {\n setShareMenuOpen(true);\n try {\n const extension = photo.mime_type?.split('/')[1] || 'jpg';\n const localFile = await saveFile({\n fileName: `${photo.user?.id || 'ChatPhoto'}-${\n photo.messageId\n }-${selectedIndex}.${extension}`,\n fromUrl: photo.uri,\n });\n // `image/jpeg` is added for the case where the mime_type isn't available for a file/image\n await shareImage({ type: photo.mime_type ?? 'image/jpeg', url: localFile });\n await deleteFile({ uri: localFile });\n } catch (error) {\n console.log(error);\n }\n setShareMenuOpen(false);\n };\n\n return (\n <Animated.View\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n style={styles.wrapper}\n >\n <ReanimatedSafeAreaView style={[container, footerStyle, { backgroundColor: white }]}>\n {photo.type === 'video' ? (\n videoControlElement ? (\n videoControlElement({ duration, onPlayPause, onProgressDrag, paused, progress })\n ) : (\n <ImageGalleryVideoControl\n duration={duration}\n onPlayPause={onPlayPause}\n onProgressDrag={onProgressDrag}\n paused={paused}\n progress={progress}\n />\n )\n ) : null}\n <View style={[styles.innerContainer, innerContainer, { backgroundColor: white }]}>\n {leftElement ? (\n leftElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity disabled={shareMenuOpen} onPress={share}>\n <View style={[styles.leftContainer, leftContainer]}>\n {ShareIcon ? ShareIcon : <ShareIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.imageCountText, { color: black }, imageCountText]}>\n {t('{{ index }} of {{ photoLength }}', {\n index: photoLength - selectedIndex,\n photoLength,\n })}\n </Text>\n </View>\n )}\n {rightElement ? (\n rightElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity onPress={openGridView}>\n <View style={[styles.rightContainer, rightContainer]}>\n {GridIcon ? GridIcon : <GridIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n </View>\n </ReanimatedSafeAreaView>\n </Animated.View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n nextProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n duration: prevDuration,\n paused: prevPaused,\n progress: prevProgress,\n selectedIndex: prevSelectedIndex,\n } = prevProps;\n const {\n duration: nextDuration,\n paused: nextPaused,\n progress: nextProgress,\n selectedIndex: nextSelectedIndex,\n } = nextProps;\n\n const isDurationEqual = prevDuration === nextDuration;\n if (!isDurationEqual) return false;\n\n const isPausedEqual = prevPaused === nextPaused;\n if (!isPausedEqual) return false;\n\n const isProgressEqual = prevProgress === nextProgress;\n if (!isProgressEqual) return false;\n\n const isSelectedIndexEqual = prevSelectedIndex === nextSelectedIndex;\n if (!isSelectedIndexEqual) return false;\n\n return true;\n};\n\nconst MemoizedImageGalleryFooter = React.memo(\n ImageGalleryFooterWithContext,\n areEqual,\n) as typeof ImageGalleryFooterWithContext;\n\nexport type ImageGalleryFooterProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterPropsWithContext<StreamChatGenerics>;\n\nexport const ImageGalleryFooter = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterProps<StreamChatGenerics>,\n) => <MemoizedImageGalleryFooter {...props} />;\n\nImageGalleryFooter.displayName = 'ImageGalleryFooter{imageGallery{footer}}';\n"]}
1
+ {"version":3,"sources":["ImageGalleryFooter.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","imageCountText","fontSize","fontWeight","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","wrapper","bottom","left","position","right","ImageGalleryFooterWithContext","props","centerElement","duration","GridIcon","leftElement","onPlayPause","onProgressDrag","opacity","openGridView","paused","photo","photoLength","progress","rightElement","selectedIndex","ShareIcon","videoControlElement","visible","setHeight","shareMenuOpen","setShareMenuOpen","theme","colors","black","white","imageGallery","footer","container","t","footerStyle","value","transform","translateY","Extrapolate","CLAMP","share","extension","mime_type","split","fileName","user","id","messageId","fromUrl","uri","localFile","type","url","console","log","event","nativeEvent","layout","backgroundColor","color","index","areEqual","prevProps","nextProps","prevDuration","prevPaused","prevProgress","prevSelectedIndex","nextDuration","nextPaused","nextProgress","nextSelectedIndex","isDurationEqual","isPausedEqual","isProgressEqual","isSelectedIndexEqual","MemoizedImageGalleryFooter","React","memo","ImageGalleryFooter","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { SafeAreaView, StyleSheet, Text, TouchableOpacity, View, ViewStyle } from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { ImageGalleryVideoControl } from './ImageGalleryVideoControl';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Grid as GridIconDefault, Share as ShareIconDefault } from '../../../icons';\nimport { deleteFile, saveFile, shareImage } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { Photo } from '../ImageGallery';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n imageCountText: {\n fontSize: 16,\n fontWeight: '600',\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n flex: 1,\n justifyContent: 'center',\n marginRight: 8,\n },\n wrapper: {\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n },\n});\n\nexport type ImageGalleryFooterCustomComponent<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ({\n openGridView,\n photo,\n share,\n shareMenuOpen,\n}: {\n openGridView: () => void;\n share: () => Promise<void>;\n shareMenuOpen: boolean;\n photo?: Photo<StreamChatGenerics>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryFooterVideoControlProps = {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n paused: boolean;\n progress: number;\n};\n\nexport type ImageGalleryFooterVideoControlComponent = ({\n duration,\n onPlayPause,\n onProgressDrag,\n paused,\n progress,\n}: ImageGalleryFooterVideoControlProps) => React.ReactElement | null;\n\nexport type ImageGalleryFooterCustomComponentProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n centerElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n GridIcon?: React.ReactElement;\n leftElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n rightElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n ShareIcon?: React.ReactElement;\n videoControlElement?: ImageGalleryFooterVideoControlComponent;\n};\n\ntype ImageGalleryFooterPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterCustomComponentProps<StreamChatGenerics> & {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n opacity: Animated.SharedValue<number>;\n openGridView: () => void;\n paused: boolean;\n photo: Photo<StreamChatGenerics>;\n photoLength: number;\n progress: number;\n selectedIndex: number;\n visible: Animated.SharedValue<number>;\n};\n\nexport const ImageGalleryFooterWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n centerElement,\n duration,\n GridIcon,\n leftElement,\n onPlayPause,\n onProgressDrag,\n opacity,\n openGridView,\n paused,\n photo,\n photoLength,\n progress,\n rightElement,\n selectedIndex,\n ShareIcon,\n videoControlElement,\n visible,\n } = props;\n\n const [height, setHeight] = useState(200);\n const [shareMenuOpen, setShareMenuOpen] = useState(false);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n footer: {\n centerContainer,\n container,\n imageCountText,\n innerContainer,\n leftContainer,\n rightContainer,\n },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n const footerStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [height, 0], Extrapolate.CLAMP),\n },\n ],\n }),\n [height],\n );\n\n const share = async () => {\n setShareMenuOpen(true);\n try {\n const extension = photo.mime_type?.split('/')[1] || 'jpg';\n const localFile = await saveFile({\n fileName: `${photo.user?.id || 'ChatPhoto'}-${\n photo.messageId\n }-${selectedIndex}.${extension}`,\n fromUrl: photo.uri,\n });\n // `image/jpeg` is added for the case where the mime_type isn't available for a file/image\n await shareImage({ type: photo.mime_type || 'image/jpeg', url: localFile });\n await deleteFile({ uri: localFile });\n } catch (error) {\n console.log(error);\n }\n setShareMenuOpen(false);\n };\n\n return (\n <Animated.View\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n style={styles.wrapper}\n >\n <ReanimatedSafeAreaView style={[container, footerStyle, { backgroundColor: white }]}>\n {photo.type === 'video' ? (\n videoControlElement ? (\n videoControlElement({ duration, onPlayPause, onProgressDrag, paused, progress })\n ) : (\n <ImageGalleryVideoControl\n duration={duration}\n onPlayPause={onPlayPause}\n onProgressDrag={onProgressDrag}\n paused={paused}\n progress={progress}\n />\n )\n ) : null}\n <View style={[styles.innerContainer, innerContainer, { backgroundColor: white }]}>\n {leftElement ? (\n leftElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity disabled={shareMenuOpen} onPress={share}>\n <View style={[styles.leftContainer, leftContainer]}>\n {ShareIcon ? ShareIcon : <ShareIconDefault pathFill={black} />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.imageCountText, { color: black }, imageCountText]}>\n {t('{{ index }} of {{ photoLength }}', {\n index: photoLength - selectedIndex,\n photoLength,\n })}\n </Text>\n </View>\n )}\n {rightElement ? (\n rightElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity onPress={openGridView}>\n <View style={[styles.rightContainer, rightContainer]}>\n {GridIcon ? GridIcon : <GridIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n </View>\n </ReanimatedSafeAreaView>\n </Animated.View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n nextProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n duration: prevDuration,\n paused: prevPaused,\n progress: prevProgress,\n selectedIndex: prevSelectedIndex,\n } = prevProps;\n const {\n duration: nextDuration,\n paused: nextPaused,\n progress: nextProgress,\n selectedIndex: nextSelectedIndex,\n } = nextProps;\n\n const isDurationEqual = prevDuration === nextDuration;\n if (!isDurationEqual) return false;\n\n const isPausedEqual = prevPaused === nextPaused;\n if (!isPausedEqual) return false;\n\n const isProgressEqual = prevProgress === nextProgress;\n if (!isProgressEqual) return false;\n\n const isSelectedIndexEqual = prevSelectedIndex === nextSelectedIndex;\n if (!isSelectedIndexEqual) return false;\n\n return true;\n};\n\nconst MemoizedImageGalleryFooter = React.memo(\n ImageGalleryFooterWithContext,\n areEqual,\n) as typeof ImageGalleryFooterWithContext;\n\nexport type ImageGalleryFooterProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterPropsWithContext<StreamChatGenerics>;\n\nexport const ImageGalleryFooter = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterProps<StreamChatGenerics>,\n) => <MemoizedImageGalleryFooter {...props} />;\n\nImageGalleryFooter.displayName = 'ImageGalleryFooter{imageGallery{footer}}';\n"]}
@@ -435,7 +435,7 @@ var MessageInputProvider = function MessageInputProvider(_ref) {
435
435
  attachments.push({
436
436
  fallback: _image2.file.name,
437
437
  image_url: _image2.url,
438
- mime_type: mime_type,
438
+ mime_type: mime_type ? mime_type : undefined,
439
439
  original_height: _image2.height,
440
440
  original_width: _image2.width,
441
441
  type: 'image'
@@ -508,7 +508,7 @@ var MessageInputProvider = function MessageInputProvider(_ref) {
508
508
  attachments.push({
509
509
  fallback: _file2.file.name,
510
510
  image_url: _file2.url,
511
- mime_type: mime_type,
511
+ mime_type: mime_type ? mime_type : undefined,
512
512
  type: 'image'
513
513
  });
514
514
  } else if ((_file2$file$type2 = _file2.file.type) != null && _file2$file$type2.startsWith('audio/')) {
@@ -1 +1 @@
1
- {"version":3,"sources":["MessageInputContext.tsx"],"names":["MessageInputContext","React","createContext","DEFAULT_BASE_CONTEXT_VALUE","MessageInputProvider","children","value","closePicker","openPicker","selectedPicker","setSelectedPicker","appSettings","client","getFileUploadConfig","fileConfig","app","file_upload_config","undefined","blockedFileExtensionTypes","blocked_file_extensions","blockedFileMimeTypes","blocked_mime_types","getImageUploadConfig","imageConfig","image_upload_config","blockedImageExtensionTypes","blockedImageMimeTypes","channelCapabities","channel","giphyEnabled","thread","t","inputBoxRef","sending","asyncIds","setAsyncIds","asyncUploads","setAsyncUploads","giphyActive","setGiphyActive","sendThreadMessageInChannel","setSendThreadMessageInChannel","editing","hasFilePicker","hasImagePicker","initialValue","fileUploads","imageUploads","mentionedUsers","numberOfUploads","setFileUploads","setImageUploads","setMentionedUsers","setNumberOfUploads","setShowMoreOptions","setText","showMoreOptions","text","cooldownEndsAt","endsAt","startCooldown","start","threadId","id","appendText","newText","prevText","isValidMessage","trim","image","state","FileState","UPLOAD_FAILED","UPLOADING","file","onChange","current","sendTypingEvents","keystroke","onChangeText","openCommandsPicker","focus","openMentionsPicker","openAttachmentPicker","Keyboard","dismiss","setTimeout","pickFile","closeAttachmentPicker","toggleAttachmentPicker","onSelectItem","item","prevMentionedUsers","maxNumberOfFiles","Alert","alert","result","cancelled","docs","forEach","doc","uploadNewFile","removeFile","some","prevFileUploads","filter","prevNumberOfUploads","removeImage","prevImageUploads","resetInput","pendingAttachments","length","sendMessage","sendLinks","match","urlRegex","clear","attachments","sendImageAsync","prevAsyncIds","mime_type","filename","UPLOADED","FINISHED","push","fallback","name","image_url","url","original_height","height","original_width","width","type","startsWith","asset_url","duration","file_size","size","title","thumb_url","updatedMessage","mentioned_users","quoted_message","clearEditingState","updateMessagePromise","editMessage","then","parent_id","quoted_message_id","quotedMessage","show_in_channel","clearQuotedMessageState","_error","setQuotedMessageState","slice","console","log","sendMessageAsync","splice","indexOf","prevAsyncUploads","setInputBoxRef","ref","setInputRef","triggerSettings","autoCompleteTriggerSettings","onMentionSelectItem","updateMessage","regExcondition","getUploadSetStateAction","fileState","extraData","uploads","prevUploads","map","prevUpload","handleFileOrImageUploadError","error","isImageError","Error","test","message","NOT_SUPPORTED","uploadFile","newFile","response","doDocUploadRequest","uri","sendFile","uploadImage","newImage","localUri","source","compressImageQuality","compressedUri","replace","contentType","doImageUploadRequest","sendImage","res","includes","newImageUploads","Object","keys","mimeType","isBlockedFileExtension","fileExtensionType","isBlockedFileMimeType","Promise","all","concat","uploadNewImage","isBlockedImageMimeType","isBlockedImageExtension","imageExtensionType","imageState","messageInputContext","openFilePicker","useMessageInputContext","contextValue","withMessageInputContext","Component","WithMessageInputContextComponent","props","displayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AAIA;;AACA;;AACA;;AAYA;;AACA;;AASA;;AAQA;;AAEA;;AASA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;;AAsVO,IAAMA,mBAAmB,GAAGC,kBAAMC,aAAN,CACjCC,mDADiC,CAA5B;;;;AAIA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,OAO7B;AAAA;;AAAA,MAJLC,QAIK,QAJLA,QAIK;AAAA,MAHLC,KAGK,QAHLA,KAGK;;AACL,8BACE,0DADF;AAAA,MAAQC,WAAR,yBAAQA,WAAR;AAAA,MAAqBC,UAArB,yBAAqBA,UAArB;AAAA,MAAiCC,cAAjC,yBAAiCA,cAAjC;AAAA,MAAiDC,iBAAjD,yBAAiDA,iBAAjD;;AAEA,wBAAgC,kCAAhC;AAAA,MAAQC,WAAR,mBAAQA,WAAR;AAAA,MAAqBC,MAArB,mBAAqBA,MAArB;;AAEA,MAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,GAAM;AAAA;;AAChC,QAAMC,UAAU,GAAGH,WAAH,wCAAGA,WAAW,CAAEI,GAAhB,qBAAG,iBAAkBC,kBAArC;;AACA,QAAIF,UAAU,KAAK,IAAf,IAAuBA,UAAU,KAAKG,SAA1C,EAAqD;AACnD,aAAOH,UAAP;AACD,KAFD,MAEO;AACL,aAAO,EAAP;AACD;AACF,GAPD;;AASA,MAAMI,yBAAyB,2BAAGL,mBAAmB,EAAtB,qBAAG,qBAAuBM,uBAAzD;AACA,MAAMC,oBAAoB,4BAAGP,mBAAmB,EAAtB,qBAAG,sBAAuBQ,kBAApD;;AAEA,MAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AAAA;;AACjC,QAAMC,WAAW,GAAGZ,WAAH,yCAAGA,WAAW,CAAEI,GAAhB,qBAAG,kBAAkBS,mBAAtC;;AACA,QAAID,WAAW,KAAK,IAAhB,IAAwBA,WAAW,KAAKN,SAA5C,EAAuD;AACrD,aAAOM,WAAP;AACD;;AACD,WAAO,EAAP;AACD,GAND;;AAQA,MAAME,0BAA0B,4BAAGH,oBAAoB,EAAvB,qBAAG,sBAAwBH,uBAA3D;AACA,MAAMO,qBAAqB,6BAAGJ,oBAAoB,EAAvB,qBAAG,uBAAwBD,kBAAtD;AAEA,MAAMM,iBAAiB,GAAG,wDAA1B;;AAEA,2BAAkC,wCAAlC;AAAA,MAAQC,OAAR,sBAAQA,OAAR;AAAA,MAAiBC,YAAjB,sBAAiBA,YAAjB;;AACA,0BAAmB,sCAAnB;AAAA,MAAQC,MAAR,qBAAQA,MAAR;;AACA,8BAAc,gDAAd;AAAA,MAAQC,CAAR,yBAAQA,CAAR;;AACA,MAAMC,WAAW,GAAG,mBAAyB,IAAzB,CAApB;AACA,MAAMC,OAAO,GAAG,mBAAO,KAAP,CAAhB;;AAEA,kBAAgC,qBAAmB,EAAnB,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,mBAAwC,qBAKrC,EALqC,CAAxC;AAAA;AAAA,MAAOC,YAAP;AAAA,MAAqBC,eAArB;;AAMA,mBAAsC,qBAAS,KAAT,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBC,cAApB;;AACA,mBAAoE,qBAAS,KAAT,CAApE;AAAA;AAAA,MAAOC,0BAAP;AAAA,MAAmCC,6BAAnC;;AACA,MAAQC,OAAR,GAAiEpC,KAAjE,CAAQoC,OAAR;AAAA,MAAiBC,aAAjB,GAAiErC,KAAjE,CAAiBqC,aAAjB;AAAA,MAAgCC,cAAhC,GAAiEtC,KAAjE,CAAgCsC,cAAhC;AAAA,MAAgDC,YAAhD,GAAiEvC,KAAjE,CAAgDuC,YAAhD;;AACA,8BAaI,0DAA8CH,OAA9C,EAAuDG,YAAvD,CAbJ;AAAA,MACEC,WADF,yBACEA,WADF;AAAA,MAEEC,YAFF,yBAEEA,YAFF;AAAA,MAGEC,cAHF,yBAGEA,cAHF;AAAA,MAIEC,eAJF,yBAIEA,eAJF;AAAA,MAKEC,cALF,yBAKEA,cALF;AAAA,MAMEC,eANF,yBAMEA,eANF;AAAA,MAOEC,iBAPF,yBAOEA,iBAPF;AAAA,MAQEC,kBARF,yBAQEA,kBARF;AAAA,MASEC,kBATF,yBASEA,kBATF;AAAA,MAUEC,OAVF,yBAUEA,OAVF;AAAA,MAWEC,eAXF,yBAWEA,eAXF;AAAA,MAYEC,IAZF,yBAYEA,IAZF;;AAcA,qBAAyD,gCAAzD;AAAA,MAAgBC,cAAhB,gBAAQC,MAAR;AAAA,MAAuCC,aAAvC,gBAAgCC,KAAhC;;AAEA,MAAMC,QAAQ,GAAGhC,MAAH,oBAAGA,MAAM,CAAEiC,EAAzB;AACA,wBAAU,YAAM;AACdtB,IAAAA,6BAA6B,CAAC,KAAD,CAA7B;AACD,GAFD,EAEG,CAACqB,QAAD,CAFH;;AAIA,MAAME,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAAqB;AACtCV,IAAAA,OAAO,CAAC,UAACW,QAAD;AAAA,kBAAiBA,QAAjB,GAA4BD,OAA5B;AAAA,KAAD,CAAP;AACD,GAFD;;AAKA,MAAME,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AAC3B,QAAIV,IAAI,IAAIA,IAAI,CAACW,IAAL,EAAZ,EAAyB;AACvB,aAAO,IAAP;AACD;;AAED,yDAAoBrB,YAApB,wCAAkC;AAAA,UAAvBsB,MAAuB;;AAChC,UAAI,CAACA,MAAD,IAAUA,MAAK,CAACC,KAAN,KAAgBC,iBAAUC,aAAxC,EAAuD;AACrD;AACD;;AACD,UAAIH,MAAK,CAACC,KAAN,KAAgBC,iBAAUE,SAA9B,EAAyC;AAEvC,eAAO,KAAP;AACD;;AAED,aAAO,IAAP;AACD;;AAED,0DAAmB3B,WAAnB,2CAAgC;AAAA,UAArB4B,KAAqB;;AAC9B,UAAI,CAACA,KAAD,IAASA,KAAI,CAACJ,KAAL,KAAeC,iBAAUC,aAAtC,EAAqD;AACnD;AACD;;AACD,UAAIE,KAAI,CAACJ,KAAL,KAAeC,iBAAUE,SAA7B,EAAwC;AAEtC,eAAO,KAAP;AACD;;AAED,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GA9BD;;AAgCA,MAAME,QAAQ,GAAG,SAAXA,QAAW,CAACV,OAAD,EAAqB;AACpC,QAAIhC,OAAO,CAAC2C,OAAZ,EAAqB;AACnB;AACD;;AACDrB,IAAAA,OAAO,CAACU,OAAD,CAAP;;AAEA,QAAIA,OAAO,IAAIrC,OAAX,IAAsBD,iBAAiB,CAACkD,gBAA5C,EAA8D;AAC5D,+CAAwBjD,OAAO,CAACkD,SAAR,CAAkBhD,MAAlB,oBAAkBA,MAAM,CAAEiC,EAA1B,CAAxB,EAAuD,oBAAvD;AACD;;AAED,QAAIzD,KAAK,CAACyE,YAAV,EAAwB;AACtBzE,MAAAA,KAAK,CAACyE,YAAN,CAAmBd,OAAnB;AACD;AACF,GAbD;;AAeA,MAAMe,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/BhB,IAAAA,UAAU,CAAC,GAAD,CAAV;;AACA,QAAIhC,WAAW,CAAC4C,OAAhB,EAAyB;AACvB5C,MAAAA,WAAW,CAAC4C,OAAZ,CAAoBK,KAApB;AACD;AACF,GALD;;AAOA,MAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/BlB,IAAAA,UAAU,CAAC,GAAD,CAAV;;AACA,QAAIhC,WAAW,CAAC4C,OAAhB,EAAyB;AACvB5C,MAAAA,WAAW,CAAC4C,OAAZ,CAAoBK,KAApB;AACD;AACF,GALD;;AAOA,MAAME,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACjC,QAAIvC,cAAJ,EAAoB;AAClBwC,4BAASC,OAAT;;AACA7E,MAAAA,UAAU;AACVE,MAAAA,iBAAiB,CAAC,QAAD,CAAjB;AAQA4E,MAAAA,UAAU,CAAC9E,UAAD,EAAa,GAAb,CAAV;AACD,KAZD,MAYO,IAAImC,aAAJ,EAAmB;AACxB4C,MAAAA,QAAQ;AACT;AACF,GAhBD;;AAkBA,MAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,GAAM;AAClC9E,IAAAA,iBAAiB,CAACO,SAAD,CAAjB;AACAV,IAAAA,WAAW;AACZ,GAHD;;AAKA,MAAMkF,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AACnC,QAAIhF,cAAJ,EAAoB;AAClB+E,MAAAA,qBAAqB;AACtB,KAFD,MAEO;AACLL,MAAAA,oBAAoB;AACrB;AACF,GAND;;AAQA,MAAMO,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD,EAA4C;AAC/DvC,IAAAA,iBAAiB,CAAC,UAACwC,kBAAD;AAAA,2DAA4BA,kBAA5B,IAAgDD,IAAI,CAAC5B,EAArD;AAAA,KAAD,CAAjB;AACD,GAFD;;AAIA,MAAMwB,QAAQ;AAAA,gFAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBACXtC,eAAe,IAAI3C,KAAK,CAACuF,gBADd;AAAA;AAAA;AAAA;;AAEbC,iCAAMC,KAAN,CAAY,iCAAZ;;AAFa;;AAAA;AAAA;AAAA,qBAMM,0BAAa;AAChCF,gBAAAA,gBAAgB,EAAEvF,KAAK,CAACuF,gBAAN,GAAyB5C;AADX,eAAb,CANN;;AAAA;AAMT+C,cAAAA,MANS;;AASf,kBAAI,CAACA,MAAM,CAACC,SAAR,IAAqBD,MAAM,CAACE,IAAhC,EAAsC;AACpCF,gBAAAA,MAAM,CAACE,IAAP,CAAYC,OAAZ,CAAoB,UAACC,GAAD,EAAS;AAQ3BC,kBAAAA,aAAa,CAACD,GAAD,CAAb;AACD,iBATD;AAUD;;AApBc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAARb,QAAQ;AAAA;AAAA;AAAA,KAAd;;AAuBA,MAAMe,UAAU,GAAG,SAAbA,UAAa,CAACvC,EAAD,EAAgB;AACjC,QAAIjB,WAAW,CAACyD,IAAZ,CAAiB,UAAC7B,IAAD;AAAA,aAAUA,IAAI,CAACX,EAAL,KAAYA,EAAtB;AAAA,KAAjB,CAAJ,EAAgD;AAC9Cb,MAAAA,cAAc,CAAC,UAACsD,eAAD;AAAA,eAAqBA,eAAe,CAACC,MAAhB,CAAuB,UAAC/B,IAAD;AAAA,iBAAUA,IAAI,CAACX,EAAL,KAAYA,EAAtB;AAAA,SAAvB,CAArB;AAAA,OAAD,CAAd;AACAV,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;AACD;AACF,GALD;;AAOA,MAAMC,WAAW,GAAG,SAAdA,WAAc,CAAC5C,EAAD,EAAgB;AAClC,QAAIhB,YAAY,CAACwD,IAAb,CAAkB,UAAClC,KAAD;AAAA,aAAWA,KAAK,CAACN,EAAN,KAAaA,EAAxB;AAAA,KAAlB,CAAJ,EAAmD;AACjDZ,MAAAA,eAAe,CAAC,UAACyD,gBAAD;AAAA,eAAsBA,gBAAgB,CAACH,MAAjB,CAAwB,UAACpC,KAAD;AAAA,iBAAWA,KAAK,CAACN,EAAN,KAAaA,EAAxB;AAAA,SAAxB,CAAtB;AAAA,OAAD,CAAf;AACAV,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;AACD;AACF,GALD;;AAOA,MAAMG,UAAU,GAAG,SAAbA,UAAa,GAA+D;AAAA,QAA9DC,kBAA8D,uEAAP,EAAO;AAChF5D,IAAAA,cAAc,CAAC,EAAD,CAAd;AACAX,IAAAA,cAAc,CAAC,KAAD,CAAd;AACAe,IAAAA,kBAAkB,CAAC,IAAD,CAAlB;AACAH,IAAAA,eAAe,CAAC,EAAD,CAAf;AACAC,IAAAA,iBAAiB,CAAC,EAAD,CAAjB;AACAC,IAAAA,kBAAkB,CAChB,UAACqD,mBAAD;AAAA,aAAyBA,mBAAmB,IAAI,CAAAI,kBAAkB,QAAlB,YAAAA,kBAAkB,CAAEC,MAApB,KAA8B,CAAlC,CAA5C;AAAA,KADgB,CAAlB;AAGAxD,IAAAA,OAAO,CAAC,EAAD,CAAP;AACD,GAVD;;AAcA,MAAMyD,WAAW;AAAA,gFAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,mBACd/E,OAAO,CAAC2C,OADM;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,oBAKd,CAACjD,iBAAiB,CAACsF,SAAnB,IAAgC,CAAC,CAACxD,IAAI,CAACyD,KAAL,CAAWC,eAAX,CALpB;AAAA;AAAA;AAAA;;AAMhBrB,iCAAMC,KAAN,CAAYhE,CAAC,CAAC,oBAAD,CAAb,EAAqCA,CAAC,CAAC,mDAAD,CAAtC;;AANgB;;AAAA;AAWlBE,cAAAA,OAAO,CAAC2C,OAAR,GAAkB,IAAlB;AAEAhB,cAAAA,aAAa;AAEPM,cAAAA,QAfY,GAeDrC,YAAY,IAAIS,WAAhB,eAAwCmB,IAAxC,GAAiDA,IAfhD;AAgBlBF,cAAAA,OAAO,CAAC,EAAD,CAAP;;AACA,kBAAIvB,WAAW,CAAC4C,OAAhB,EAAyB;AACvB5C,gBAAAA,WAAW,CAAC4C,OAAZ,CAAoBwC,KAApB;AACD;;AAEKC,cAAAA,WArBY,GAqBE,EArBF;;AAAA,qCAsBPhD,OAtBO;AAuBhB,oBAAI,CAACA,OAAD,IAAUA,OAAK,CAACC,KAAN,KAAgBC,iBAAUC,aAAxC,EAAuD;AACrD;AACD;;AAED,oBAAIH,OAAK,CAACC,KAAN,KAAgBC,iBAAUE,SAA9B,EAAyC;AAEvC,sBAAInE,KAAK,CAACgH,cAAV,EAA0B;AAKxBnF,oBAAAA,WAAW,CAAC,UAACoF,YAAD;AAAA,2EAAsBA,YAAtB,IAAoClD,OAAK,CAACN,EAA1C;AAAA,qBAAD,CAAX;AACD,mBAND,MAMO;AACL9B,oBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AACA;AAAA,yBAAOrB,OAAO,CAACW,QAAD;AAAd;AACD;AACF;;AAGD,oBAAMsD,SAA2B,GAAG,uBAAOnD,OAAK,CAACK,IAAN,CAAW+C,QAAlB,CAApC;;AAEA,oBAAIpD,OAAK,CAACC,KAAN,KAAgBC,iBAAUmD,QAA1B,IAAsCrD,OAAK,CAACC,KAAN,KAAgBC,iBAAUoD,QAApE,EAA8E;AAC5EN,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfC,oBAAAA,QAAQ,EAAExD,OAAK,CAACK,IAAN,CAAWoD,IADN;AAEfC,oBAAAA,SAAS,EAAE1D,OAAK,CAAC2D,GAFF;AAGfR,oBAAAA,SAAS,EAATA,SAHe;AAIfS,oBAAAA,eAAe,EAAE5D,OAAK,CAAC6D,MAJR;AAKfC,oBAAAA,cAAc,EAAE9D,OAAK,CAAC+D,KALP;AAMfC,oBAAAA,IAAI,EAAE;AANS,mBAAjB;AAQD;AArDe;;AAAA,2DAsBEtF,YAtBF;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAsBPsB,cAAAA,OAtBO;AAAA,2BAsBPA,OAtBO;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,2DAwDCvB,WAxDD;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAwDP4B,cAAAA,MAxDO;;AAAA,oBAyDZ,CAACA,MAAD,IAASA,MAAI,CAACJ,KAAL,KAAeC,iBAAUC,aAzDtB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,oBA4DZE,MAAI,CAACJ,KAAL,KAAeC,iBAAUE,SA5Db;AAAA;AAAA;AAAA;;AA8DdxC,cAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AA9Dc;;AAAA;AAiEV4C,cAAAA,SAjEU,GAiEoB,uBAAO9C,MAAI,CAACA,IAAL,CAAUoD,IAAjB,CAjEpB;;AAmEhB,kBAAIpD,MAAI,CAACJ,KAAL,KAAeC,iBAAUmD,QAAzB,IAAqChD,MAAI,CAACJ,KAAL,KAAeC,iBAAUoD,QAAlE,EAA4E;AAC1E,wCAAIjD,MAAI,CAACA,IAAL,CAAU2D,IAAd,aAAI,iBAAgBC,UAAhB,CAA2B,QAA3B,CAAJ,EAA0C;AACxCjB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfC,oBAAAA,QAAQ,EAAEnD,MAAI,CAACA,IAAL,CAAUoD,IADL;AAEfC,oBAAAA,SAAS,EAAErD,MAAI,CAACsD,GAFD;AAGfR,oBAAAA,SAAS,EAATA,SAHe;AAIfa,oBAAAA,IAAI,EAAE;AAJS,mBAAjB;AAMD,iBAPD,MAOO,yBAAI3D,MAAI,CAACA,IAAL,CAAU2D,IAAd,aAAI,kBAAgBC,UAAhB,CAA2B,QAA3B,CAAJ,EAA0C;AAC/CjB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfW,oBAAAA,SAAS,EAAE7D,MAAI,CAACsD,GADD;AAEfQ,oBAAAA,QAAQ,EAAE9D,MAAI,CAACA,IAAL,CAAU8D,QAFL;AAGfC,oBAAAA,SAAS,EAAE/D,MAAI,CAACA,IAAL,CAAUgE,IAHN;AAIflB,oBAAAA,SAAS,EAAE9C,MAAI,CAACA,IAAL,CAAU2D,IAJN;AAKfM,oBAAAA,KAAK,EAAEjE,MAAI,CAACA,IAAL,CAAUoD,IALF;AAMfO,oBAAAA,IAAI,EAAE;AANS,mBAAjB;AAQD,iBATM,MASA,yBAAI3D,MAAI,CAACA,IAAL,CAAU2D,IAAd,aAAI,kBAAgBC,UAAhB,CAA2B,QAA3B,CAAJ,EAA0C;AAC/CjB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfW,oBAAAA,SAAS,EAAE7D,MAAI,CAACsD,GADD;AAEfQ,oBAAAA,QAAQ,EAAE9D,MAAI,CAACA,IAAL,CAAU8D,QAFL;AAGfC,oBAAAA,SAAS,EAAE/D,MAAI,CAACA,IAAL,CAAUgE,IAHN;AAIflB,oBAAAA,SAAS,EAAE9C,MAAI,CAACA,IAAL,CAAU2D,IAJN;AAKfO,oBAAAA,SAAS,EAAElE,MAAI,CAACkE,SALD;AAMfD,oBAAAA,KAAK,EAAEjE,MAAI,CAACA,IAAL,CAAUoD,IANF;AAOfO,oBAAAA,IAAI,EAAE;AAPS,mBAAjB;AASD,iBAVM,MAUA;AACLhB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfW,oBAAAA,SAAS,EAAE7D,MAAI,CAACsD,GADD;AAEfS,oBAAAA,SAAS,EAAE/D,MAAI,CAACA,IAAL,CAAUgE,IAFN;AAGflB,oBAAAA,SAAS,EAAE9C,MAAI,CAACA,IAAL,CAAU2D,IAHN;AAIfM,oBAAAA,KAAK,EAAEjE,MAAI,CAACA,IAAL,CAAUoD,IAJF;AAKfO,oBAAAA,IAAI,EAAE;AALS,mBAAjB;AAOD;AACF;;AAvGe;AAAA;AAAA;;AAAA;AAAA,oBA2Gd,CAACnE,QAAD,IAAamD,WAAW,CAACN,MAAZ,KAAuB,CA3GtB;AAAA;AAAA;AAAA;;AA4GhB9E,cAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AA5GgB;;AAAA;AAgHlB,kBAAItE,KAAK,CAACoC,OAAN,IAAiB,CAAC,iDAAiBpC,KAAK,CAACoC,OAAvB,CAAtB,EAAuD;AAC/CmG,gBAAAA,cAD+C,iCAEhDvI,KAAK,CAACoC,OAF0C;AAGnD2E,kBAAAA,WAAW,EAAXA,WAHmD;AAInDyB,kBAAAA,eAAe,EAAE9F,cAJkC;AAKnD+F,kBAAAA,cAAc,EAAE9H,SALmC;AAMnDwC,kBAAAA,IAAI,EAAES;AAN6C;AAUrD5D,gBAAAA,KAAK,CAAC0I,iBAAN;AAEMC,gBAAAA,oBAZ+C,GAYxB3I,KAAK,CAAC4I,WAAN,CAAkBL,cAAlB,EAAkCM,IAAlC,CAAuC7I,KAAK,CAAC0I,iBAA7C,CAZwB;AAarDnC,gBAAAA,UAAU,CAACQ,WAAD,CAAV;AACA,yDAAwB4B,oBAAxB,EAA8C,gBAA9C;AAEAhH,gBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AACD,eAjBD,MAiBO;AACL,oBAAI;AACFtE,kBAAAA,KAAK,CAAC0G,WAAN,CAAkB;AAChBK,oBAAAA,WAAW,EAAXA,WADgB;AAEhByB,oBAAAA,eAAe,EAAE,sBAAK9F,cAAL,CAFD;AAIhBoG,oBAAAA,SAAS,EAAEtH,MAAF,oBAAEA,MAAM,CAAEiC,EAJH;AAKhBsF,oBAAAA,iBAAiB,EACf,OAAO/I,KAAK,CAACgJ,aAAb,KAA+B,SAA/B,GAA2CrI,SAA3C,GAAuDX,KAAK,CAACgJ,aAAN,CAAoBvF,EAN7D;AAOhBwF,oBAAAA,eAAe,EAAE/G,0BAA0B,IAAIvB,SAP/B;AAQhBwC,oBAAAA,IAAI,EAAES;AARU,mBAAlB;AAWA5D,kBAAAA,KAAK,CAACkJ,uBAAN;AACAvH,kBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AACAiC,kBAAAA,UAAU,CAACQ,WAAD,CAAV;AACD,iBAfD,CAeE,OAAOoC,MAAP,EAAe;AACfxH,kBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;;AACA,sBAAItE,KAAK,CAACgJ,aAAN,IAAuB,OAAOhJ,KAAK,CAACgJ,aAAb,KAA+B,SAA1D,EAAqE;AACnEhJ,oBAAAA,KAAK,CAACoJ,qBAAN,CAA4BpJ,KAAK,CAACgJ,aAAlC;AACD;;AACD/F,kBAAAA,OAAO,CAACW,QAAQ,CAACyF,KAAT,CAAe9H,YAAY,IAAIS,WAAhB,GAA8B,CAA9B,GAAkC,CAAjD,CAAD,CAAP;AACAsH,kBAAAA,OAAO,CAACC,GAAR,CAAY,wBAAZ;AACD;AACF;;AAzJiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAX7C,WAAW;AAAA;AAAA;AAAA,KAAjB;;AA4JA,MAAM8C,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAC/F,EAAD,EAAgB;AACvC,QAAMM,KAAK,GAAGjC,YAAY,CAAC2B,EAAD,CAA1B;;AACA,QAAI,CAACM,KAAD,IAAUA,KAAK,CAACC,KAAN,KAAgBC,iBAAUC,aAAxC,EAAuD;AACrD;AACD;;AAED,QAAIH,KAAK,CAACC,KAAN,KAAgBC,iBAAUmD,QAA1B,IAAsCrD,KAAK,CAACC,KAAN,KAAgBC,iBAAUoD,QAApE,EAA8E;AAC5E,UAAMN,YAAW,GAAG,CAClB;AACEU,QAAAA,SAAS,EAAE1D,KAAK,CAAC2D,GADnB;AAEEK,QAAAA,IAAI,EAAE;AAFR,OADkB,CAApB;AAOAzE,MAAAA,aAAa;;AACb,UAAI;AACFtD,QAAAA,KAAK,CAAC0G,WAAN,CAAkB;AAChBK,UAAAA,WAAW,EAAXA,YADgB;AAEhByB,UAAAA,eAAe,EAAE,EAFD;AAGhBM,UAAAA,SAAS,EAAEtH,MAAF,oBAAEA,MAAM,CAAEiC,EAHH;AAIhBsF,UAAAA,iBAAiB,EACf,OAAO/I,KAAK,CAACgJ,aAAb,KAA+B,SAA/B,GAA2CrI,SAA3C,GAAuDX,KAAK,CAACgJ,aAAN,CAAoBvF,EAL7D;AAMhBwF,UAAAA,eAAe,EAAE/G,0BAA0B,IAAIvB,SAN/B;AAOhBwC,UAAAA,IAAI,EAAE;AAPU,SAAlB;AAUAtB,QAAAA,WAAW,CAAC,UAACoF,YAAD;AAAA,iBAAkBA,YAAY,CAACwC,MAAb,CAAoBxC,YAAY,CAACyC,OAAb,CAAqBjG,EAArB,CAApB,EAA8C,CAA9C,CAAlB;AAAA,SAAD,CAAX;AACA1B,QAAAA,eAAe,CAAC,UAAC4H,gBAAD,EAAsB;AACpC,iBAAOA,gBAAgB,CAAClG,EAAD,CAAvB;AACA,iBAAOkG,gBAAP;AACD,SAHc,CAAf;AAKA5G,QAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,iBAAyBA,mBAAmB,GAAG,CAA/C;AAAA,SAAD,CAAlB;AACD,OAlBD,CAkBE,OAAO+C,MAAP,EAAe;AACfG,QAAAA,OAAO,CAACC,GAAR,CAAY,QAAZ;AACD;AACF;AACF,GArCD;;AAuCA,MAAMK,cAAc,GAAG,SAAjBA,cAAiB,CAACC,GAAD,EAA2B;AAChDnI,IAAAA,WAAW,CAAC4C,OAAZ,GAAsBuF,GAAtB;;AACA,QAAI7J,KAAK,CAAC8J,WAAV,EAAuB;AACrB9J,MAAAA,KAAK,CAAC8J,WAAN,CAAkBD,GAAlB;AACD;AACF,GALD;;AAOA,MAAME,eAAe,GAAGzI,OAAO,GAC3BtB,KAAK,CAACgK,2BAAN,GACEhK,KAAK,CAACgK,2BAAN,CAAkC;AAChC1I,IAAAA,OAAO,EAAPA,OADgC;AAEhChB,IAAAA,MAAM,EAANA,MAFgC;AAGhC2J,IAAAA,mBAAmB,EAAE7E;AAHW,GAAlC,CADF,GAME,+BAAuC;AACrC9D,IAAAA,OAAO,EAAPA,OADqC;AAErChB,IAAAA,MAAM,EAANA,MAFqC;AAGrC2J,IAAAA,mBAAmB,EAAE7E;AAHgB,GAAvC,CAPyB,GAY1B,EAZL;;AAcA,MAAM8E,aAAa;AAAA,gFAAG;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,kBAEb,iDAAiBlK,KAAK,CAACoC,OAAvB,CAFa;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAGV9B,MAAM,CAAC4J,aAAP,+BACDlK,KAAK,CAACoC,OADL;AAEJqG,gBAAAA,cAAc,EAAE9H,SAFZ;AAGJwC,gBAAAA,IAAI,EAAE5B,YAAY,IAAIS,WAAhB,eAAwCmB,IAAxC,GAAiDA;AAHnD,iBAHU;;AAAA;AAUlBoD,cAAAA,UAAU;AACVvG,cAAAA,KAAK,CAAC0I,iBAAN;AAXkB;AAAA;;AAAA;AAAA;AAAA;AAalBY,cAAAA,OAAO,CAACC,GAAR;;AAbkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAbW,aAAa;AAAA;AAAA;AAAA,KAAnB;;AAiBA,MAAMC,cAAc,GAAG,sDAAvB;;AAEA,MAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAC9B3G,EAD8B,EAE9B4G,SAF8B,EAIS;AAAA,QADvCC,SACuC,uEADN,EACM;;AACvC,QAAMC,OAAoD,GAAG,SAAvDA,OAAuD,CAACC,WAAD;AAAA,aAC3DA,WAAW,CAACC,GAAZ,CAAgB,UAACC,UAAD,EAAgB;AAC9B,YAAIA,UAAU,CAACjH,EAAX,KAAkBA,EAAtB,EAA0B;AACxB,+CACKiH,UADL,EAEKJ,SAFL;AAGEtG,YAAAA,KAAK,EAAEqG;AAHT;AAKD;;AACD,eAAOK,UAAP;AACD,OATD,CAD2D;AAAA,KAA7D;;AAYA,WAAOH,OAAP;AACD,GAlBD;;AAoBA,MAAMI,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACC,KAAD,EAAiBC,YAAjB,EAAwCpH,EAAxC,EAAuD;AAC1F,QAAIoH,YAAJ,EAAkB;AAChB9H,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;;AACA,UAAIwE,KAAK,YAAYE,KAArB,EAA4B;AAC1B,YAAIX,cAAc,CAACY,IAAf,CAAoBH,KAAK,CAACI,OAA1B,CAAJ,EAAwC;AACtC,iBAAOnI,eAAe,CAACuH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUgH,aAAf,CAAxB,CAAtB;AACD;;AAED,eAAOpI,eAAe,CAACuH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUC,aAAf,CAAxB,CAAtB;AACD;AACF,KATD,MASO;AACLnB,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;;AAEA,UAAIwE,KAAK,YAAYE,KAArB,EAA4B;AAC1B,YAAIX,cAAc,CAACY,IAAf,CAAoBH,KAAK,CAACI,OAA1B,CAAJ,EAAwC;AACtC,iBAAOpI,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUgH,aAAf,CAAxB,CAArB;AACD;;AACD,eAAOrI,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUC,aAAf,CAAxB,CAArB;AACD;AACF;AACF,GApBD;;AAsBA,MAAMgH,UAAU;AAAA,gFAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAASC,cAAAA,OAAT,SAASA,OAAT;AACT/G,cAAAA,IADS,GACI+G,OADJ,CACT/G,IADS,EACHX,EADG,GACI0H,OADJ,CACH1H,EADG;AAGjBb,cAAAA,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUE,SAAf,CAAxB,CAAd;AAEIiH,cAAAA,QALa,GAK4B,EAL5B;AAAA;;AAAA,mBAOXpL,KAAK,CAACqL,kBAPK;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAQIrL,KAAK,CAACqL,kBAAN,CAAyBjH,IAAzB,EAA+B9C,OAA/B,CARJ;;AAAA;AAQb8J,cAAAA,QARa;AAAA;AAAA;;AAAA;AAAA,oBASJ9J,OAAO,IAAI8C,IAAI,CAACkH,GATZ;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAUIhK,OAAO,CAACiK,QAAR,CAAiBnH,IAAI,CAACkH,GAAtB,EAA2BlH,IAAI,CAACoD,IAAhC,EAAsCpD,IAAI,CAAC2D,IAA3C,CAVJ;;AAAA;AAUbqD,cAAAA,QAVa;;AAAA;AAYTd,cAAAA,SAZS,GAYwB;AAAEhC,gBAAAA,SAAS,EAAE8C,QAAQ,CAAC9C,SAAtB;AAAiCZ,gBAAAA,GAAG,EAAE0D,QAAQ,CAAChH;AAA/C,eAZxB;AAafxB,cAAAA,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUmD,QAAf,EAAyBkD,SAAzB,CAAxB,CAAd;AAbe;AAAA;;AAAA;AAAA;AAAA;AAefK,cAAAA,4BAA4B,eAAQ,KAAR,EAAelH,EAAf,CAA5B;;AAfe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAVyH,UAAU;AAAA;AAAA;AAAA,KAAhB;;AAmBA,MAAMM,WAAW;AAAA,gFAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAASC,cAAAA,QAAT,SAASA,QAAT;AAAA,sBACGA,QAAQ,IAAI,EADf,EACVrH,IADU,SACVA,IADU,EACJX,EADI,SACJA,EADI;;AAAA,kBAGbW,IAHa;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAOdgH,cAAAA,QAPc,GAOH,EAPG;AAAA;;AAAA,mBAkBChH,IAAI,CAACX,EAlBN;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAmBN,8BAAiBW,IAAI,CAACX,EAAtB,CAnBM;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,iCAoBZW,IAAI,CAACkH,GApBO,aAoBZ,UAAU1E,KAAV,CAAgB,gBAAhB,CApBY;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAqBN,8BAAiBxC,IAAI,CAACkH,GAAtB,CArBM;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,6BAsBZlH,IAAI,CAACkH,GAtBO;;AAAA;AAAA;;AAAA;AAkBVI,cAAAA,QAlBU;AAwBVJ,cAAAA,GAxBU,GAwBJlH,IAAI,CAACoD,IAAL,IAAakE,QAAb,IAAyB,EAxBrB;AAAA;AAAA,qBA+BatH,IAAI,CAACuH,MAAL,KAAgB,QAAhB,IAC7B,CAACvH,IAAI,CAACwD,MADuB,IAE7B,CAACxD,IAAI,CAAC0D,KAFuB,IAG7B,OAAO9H,KAAK,CAAC4L,oBAAb,KAAsC,QAHT,IAI7B5L,KAAK,CAAC4L,oBAAN,KAA+B,CAJF,GAKzBN,GALyB,GAMzB,2BAAc;AACZM,gBAAAA,oBAAoB,EAAE5L,KAAK,CAAC4L,oBADhB;AAEZhE,gBAAAA,MAAM,EAAExD,IAAI,CAACwD,MAFD;AAGZ0D,gBAAAA,GAAG,EAAHA,GAHY;AAIZxD,gBAAAA,KAAK,EAAE1D,IAAI,CAAC0D;AAJA,eAAd,CArCY;;AAAA;AA+BV+D,cAAAA,aA/BU;AA2CV1E,cAAAA,QA3CU,GA2CCmE,GAAG,CAACQ,OAAJ,CAAY,+CAAZ,EAA6D,EAA7D,CA3CD;AA4CVC,cAAAA,WA5CU,GA4CI,uBAAO5E,QAAP,KAAoB,qBA5CxB;;AAAA,mBA6CZnH,KAAK,CAACgM,oBA7CM;AAAA;AAAA;AAAA;;AAAA;AAAA,qBA8CGhM,KAAK,CAACgM,oBAAN,CAA2B5H,IAA3B,EAAiC9C,OAAjC,CA9CH;;AAAA;AA8Cd8J,cAAAA,QA9Cc;AAAA;AAAA;;AAAA;AAAA,oBA+CLS,aAAa,IAAIvK,OA/CZ;AAAA;AAAA;AAAA;;AAAA,mBAgDVtB,KAAK,CAACgH,cAhDI;AAAA;AAAA;AAAA;;AAiDZ1F,cAAAA,OAAO,CAAC2K,SAAR,CAAkBJ,aAAlB,EAAiCzH,IAAI,CAAC+C,QAAtC,EAAgD4E,WAAhD,EAA6DlD,IAA7D,CAAkE,UAACqD,GAAD,EAAS;AACzE,oBAAItK,QAAQ,CAACuK,QAAT,CAAkB1I,EAAlB,CAAJ,EAA2B;AAEzB1B,kBAAAA,eAAe,CAAC,UAAC4H,gBAAD,EAAsB;AACpCA,oBAAAA,gBAAgB,CAAClG,EAAD,CAAhB,iCACKkG,gBAAgB,CAAClG,EAAD,CADrB;AAEEO,sBAAAA,KAAK,EAAEC,iBAAUmD,QAFnB;AAGEM,sBAAAA,GAAG,EAAEwE,GAAG,CAAC9H;AAHX;AAKA,2BAAOuF,gBAAP;AACD,mBAPc,CAAf;AAQD,iBAVD,MAUO;AACL,sBAAMyC,eAAe,GAAGhC,uBAAuB,CAAc3G,EAAd,EAAkBQ,iBAAUmD,QAA5B,EAAsC;AACnFM,oBAAAA,GAAG,EAAEwE,GAAG,CAAC9H;AAD0E,mBAAtC,CAA/C;AAGAvB,kBAAAA,eAAe,CAACuJ,eAAD,CAAf;AACD;AACF,eAjBD;AAjDY;AAAA;;AAAA;AAAA;AAAA,qBAoEK9K,OAAO,CAAC2K,SAAR,CAAkBJ,aAAlB,EAAiCzH,IAAI,CAAC+C,QAAtC,EAAgD4E,WAAhD,CApEL;;AAAA;AAoEZX,cAAAA,QApEY;;AAAA;AAwEhB,kBAAIiB,MAAM,CAACC,IAAP,CAAYlB,QAAZ,EAAsB3E,MAA1B,EAAkC;AAC1B2F,gBAAAA,eAD0B,GACRhC,uBAAuB,CAAc3G,EAAd,EAAkBQ,iBAAUmD,QAA5B,EAAsC;AACnFQ,kBAAAA,MAAM,EAAExD,IAAI,CAACwD,MADsE;AAEnFF,kBAAAA,GAAG,EAAE0D,QAAQ,CAAChH,IAFqE;AAGnF0D,kBAAAA,KAAK,EAAE1D,IAAI,CAAC0D;AAHuE,iBAAtC,CADf;AAMhCjF,gBAAAA,eAAe,CAACuJ,eAAD,CAAf;AACD;;AA/Ee;AAAA;;AAAA;AAAA;AAAA;AAiFhBzB,cAAAA,4BAA4B,eAAQ,IAAR,EAAclH,EAAd,CAA5B;;AAjFgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAX+H,WAAW;AAAA;AAAA;AAAA,KAAjB;;AAqFA,MAAMzF,aAAa;AAAA,iFAAG,kBAAO3B,IAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAMdX,cAAAA,EANc,GAMD,8BANC;AAOd8I,cAAAA,QAPc,GAOe,uBAAOnI,IAAI,CAACoD,IAAZ,CAPf;AASdgF,cAAAA,sBATc,GASgC5L,yBAThC,oBASgCA,yBAAyB,CAAEqF,IAA3B,CAClD,UAACwG,iBAAD;AAAA;;AAAA,qCAA+BrI,IAAI,CAACoD,IAApC,qBAA+B,WAAW2E,QAAX,CAAoBM,iBAApB,CAA/B;AAAA,eADkD,CAThC;AAYdC,cAAAA,qBAZc,GAY+B5L,oBAZ/B,oBAY+BA,oBAAoB,CAAEmF,IAAtB,CACjD,UAACsG,QAAD;AAAA;;AAAA,sCAAsBnI,IAAI,CAACoD,IAA3B,qBAAsB,YAAW2E,QAAX,CAAoBI,QAApB,CAAtB;AAAA,eADiD,CAZ/B;AAgBdlC,cAAAA,SAhBc,GAiBlBmC,sBAAsB,IAAIE,qBAA1B,GACIzI,iBAAUgH,aADd,GAEIhH,iBAAUE,SAnBI;AAqBdgH,cAAAA,OArBc,GAqBQ;AAC1B/G,gBAAAA,IAAI,gCAAOA,IAAP;AAAa2D,kBAAAA,IAAI,EAAEwE,QAAQ,KAAInI,IAAJ,oBAAIA,IAAI,CAAE2D,IAAV;AAA3B,kBADsB;AAE1BtE,gBAAAA,EAAE,EAAFA,EAF0B;AAG1BO,gBAAAA,KAAK,EAAEqG;AAHmB,eArBR;AAAA;AAAA,qBA2BdsC,OAAO,CAACC,GAAR,CAAY,CAChBhK,cAAc,CAAC,UAACsD,eAAD;AAAA,uBAAqBA,eAAe,CAAC2G,MAAhB,CAAuB,CAAC1B,OAAD,CAAvB,CAArB;AAAA,eAAD,CADE,EAEhBpI,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,uBAAyBA,mBAAmB,GAAG,CAA/C;AAAA,eAAD,CAFF,CAAZ,CA3Bc;;AAAA;AAgCpB,kBAAI,CAACoG,sBAAL,EAA6B;AAC3BtB,gBAAAA,UAAU,CAAC;AAAEC,kBAAAA,OAAO,EAAPA;AAAF,iBAAD,CAAV;AACD;;AAlCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAbpF,aAAa;AAAA;AAAA;AAAA,KAAnB;;AAqCA,MAAM+G,cAAc;AAAA,iFAAG,kBAAO/I,KAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AACfN,cAAAA,EADe,GACV,8BADU;AAGfsJ,cAAAA,sBAHe,GAGU3L,qBAHV,oBAGUA,qBAAqB,CAAE6E,IAAvB,CAA4B,UAACsG,QAAD;AAAA;;AAAA,qCACzDxI,KAAK,CAACuH,GADmD,qBACzD,WAAWa,QAAX,CAAoBI,QAApB,CADyD;AAAA,eAA5B,CAHV;AAOfS,cAAAA,uBAPe,GAOW7L,0BAPX,oBAOWA,0BAA0B,CAAE8E,IAA5B,CAAiC,UAACgH,kBAAD;AAAA;;AAAA,sCAC/DlJ,KAAK,CAACuH,GADyD,qBAC/D,YAAWa,QAAX,CAAoBc,kBAApB,CAD+D;AAAA,eAAjC,CAPX;AAWfC,cAAAA,UAXe,GAYnBF,uBAAuB,IAAID,sBAA3B,GACI9I,iBAAUgH,aADd,GAEIhH,iBAAUE,SAdK;AAgBfsH,cAAAA,QAhBe,GAgBS;AAC5BrH,gBAAAA,IAAI,EAAEL,KADsB;AAE5BN,gBAAAA,EAAE,EAAFA,EAF4B;AAG5BO,gBAAAA,KAAK,EAAEkJ;AAHqB,eAhBT;AAAA;AAAA,qBAsBfP,OAAO,CAACC,GAAR,CAAY,CAChB/J,eAAe,CAAC,UAACyD,gBAAD;AAAA,uBAAsBA,gBAAgB,CAACuG,MAAjB,CAAwB,CAACpB,QAAD,CAAxB,CAAtB;AAAA,eAAD,CADC,EAEhB1I,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,uBAAyBA,mBAAmB,GAAG,CAA/C;AAAA,eAAD,CAFF,CAAZ,CAtBe;;AAAA;AA2BrB,kBAAI,CAAC4G,uBAAL,EAA8B;AAC5BxB,gBAAAA,WAAW,CAAC;AAAEC,kBAAAA,QAAQ,EAARA;AAAF,iBAAD,CAAX;AACD;;AA7BoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAdqB,cAAc;AAAA;AAAA;AAAA,KAApB;;AAgCA,MAAMK,mBAAmB,GAAG;AAC1BzJ,IAAAA,UAAU,EAAVA,UAD0B;AAE1B9B,IAAAA,QAAQ,EAARA,QAF0B;AAG1BE,IAAAA,YAAY,EAAZA,YAH0B;AAI1BoD,IAAAA,qBAAqB,EAArBA,qBAJ0B;AAK1B9B,IAAAA,cAAc,EAAdA,cAL0B;AAM1BZ,IAAAA,WAAW,EAAXA,WAN0B;AAO1BR,IAAAA,WAAW,EAAXA,WAP0B;AAQ1BS,IAAAA,YAAY,EAAZA,YAR0B;AAS1Bf,IAAAA,WAAW,EAAXA,WAT0B;AAU1BmC,IAAAA,cAAc,EAAdA,cAV0B;AAW1BnB,IAAAA,cAAc,EAAdA,cAX0B;AAY1BC,IAAAA,eAAe,EAAfA,eAZ0B;AAa1B0B,IAAAA,QAAQ,EAARA,QAb0B;AAc1Be,IAAAA,YAAY,EAAZA,YAd0B;AAe1BP,IAAAA,oBAAoB,EAApBA,oBAf0B;AAgB1BH,IAAAA,kBAAkB,EAAlBA,kBAhB0B;AAiB1B0I,IAAAA,cAAc,EAAEnI,QAjBU;AAkB1BL,IAAAA,kBAAkB,EAAlBA,kBAlB0B;AAmB1BK,IAAAA,QAAQ,EAARA,QAnB0B;AAoB1Be,IAAAA,UAAU,EAAVA,UApB0B;AAqB1BK,IAAAA,WAAW,EAAXA,WArB0B;AAsB1BE,IAAAA,UAAU,EAAVA,UAtB0B;AAuB1BpG,IAAAA,cAAc,EAAdA,cAvB0B;AAwB1BwB,IAAAA,OAAO,EAAPA,OAxB0B;AAyB1B6H,IAAAA,gBAAgB,EAAhBA,gBAzB0B;AA0B1BtH,IAAAA,0BAA0B,EAA1BA,0BA1B0B;AA2B1BL,IAAAA,WAAW,EAAXA,WA3B0B;AA4B1BE,IAAAA,eAAe,EAAfA,eA5B0B;AA6B1Ba,IAAAA,cAAc,EAAdA,cA7B0B;AA8B1BX,IAAAA,cAAc,EAAdA,cA9B0B;AA+B1BY,IAAAA,eAAe,EAAfA,eA/B0B;AAgC1B+G,IAAAA,cAAc,EAAdA,cAhC0B;AAiC1B9G,IAAAA,iBAAiB,EAAjBA,iBAjC0B;AAkC1BC,IAAAA,kBAAkB,EAAlBA,kBAlC0B;AAmC1BZ,IAAAA,6BAA6B,EAA7BA,6BAnC0B;AAoC1Ba,IAAAA,kBAAkB,EAAlBA,kBApC0B;AAqC1BC,IAAAA,OAAO,EAAPA,OArC0B;AAsC1BC,IAAAA,eAAe,EAAfA,eAtC0B;AAuC1BC,IAAAA,IAAI,EAAJA,IAvC0B;AAwC1B3B,IAAAA,MAAM,EAANA,MAxC0B;AAyC1B2D,IAAAA,sBAAsB,EAAtBA,sBAzC0B;AA0C1B4E,IAAAA,eAAe,EAAfA,eA1C0B;AA2C1BG,IAAAA,aAAa,EAAbA,aA3C0B;AA4C1BgB,IAAAA,UAAU,EAAVA,UA5C0B;AA6C1BM,IAAAA,WAAW,EAAXA,WA7C0B;AA8C1BzF,IAAAA,aAAa,EAAbA,aA9C0B;AA+C1B+G,IAAAA,cAAc,EAAdA;AA/C0B,KAgDvB9M,KAhDuB;AAiD1B0G,IAAAA,WAAW,EAAXA;AAjD0B,KAA5B;AAoDA,SACE,gCAAC,mBAAD,CAAqB,QAArB;AACE,IAAA,KAAK,EAAEyG,mBADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAGGpN,QAHH,CADF;AAOD,CA/tBM;;;;AAiuBA,IAAMsN,sBAAsB,GAAG,SAAzBA,sBAAyB,GAE/B;AACL,MAAMC,YAAY,GAAG,uBACnB5N,mBADmB,CAArB;;AAIA,MAAI4N,YAAY,KAAKzN,mDAAjB,IAA+C,CAAC,2CAApD,EAAyE;AACvE,UAAM,IAAIiL,KAAJ,wOAAN;AAGD;;AAED,SAAOwC,YAAP;AACD,CAdM;;;;AAqBA,IAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAIrCC,SAJqC,EAKqC;AAC1E,MAAMC,gCAAgC,GAAG,SAAnCA,gCAAmC,CACvCC,KADuC,EAEpC;AACH,QAAMP,mBAAmB,GAAGE,sBAAsB,EAAlD;AAEA,WAAO,gCAAC,SAAD,gCAAgBK,KAAhB,EAAiCP,mBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAND;;AAOAM,EAAAA,gCAAgC,CAACE,WAAjC,+BAAyE,oCACvEH,SADuE,CAAzE;AAGA,SAAOC,gCAAP;AACD,CAjBM","sourcesContent":["import React, { PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';\n\nimport { Alert, Keyboard } from 'react-native';\n\nimport type { TextInput, TextInputProps } from 'react-native';\n\nimport uniq from 'lodash/uniq';\nimport { lookup } from 'mime-types';\nimport {\n Attachment,\n logChatPromiseExecution,\n SendFileAPIResponse,\n StreamChat,\n Message as StreamMessage,\n UserFilters,\n UserOptions,\n UserResponse,\n UserSort,\n} from 'stream-chat';\n\nimport { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';\nimport { isEditingBoolean, useMessageDetailsForState } from './hooks/useMessageDetailsForState';\n\nimport type { AttachButtonProps } from '../../components/MessageInput/AttachButton';\nimport type { CommandsButtonProps } from '../../components/MessageInput/CommandsButton';\nimport type { InputEditingStateHeaderProps } from '../../components/MessageInput/components/InputEditingStateHeader';\nimport type { InputGiphySearchProps } from '../../components/MessageInput/components/InputGiphySearch';\nimport type { InputReplyStateHeaderProps } from '../../components/MessageInput/components/InputReplyStateHeader';\nimport type { CooldownTimerProps } from '../../components/MessageInput/CooldownTimer';\nimport type { FileUploadPreviewProps } from '../../components/MessageInput/FileUploadPreview';\nimport { useCooldown } from '../../components/MessageInput/hooks/useCooldown';\nimport type { ImageUploadPreviewProps } from '../../components/MessageInput/ImageUploadPreview';\nimport type { InputButtonsProps } from '../../components/MessageInput/InputButtons';\nimport type { MessageInputProps } from '../../components/MessageInput/MessageInput';\nimport type { MoreOptionsButtonProps } from '../../components/MessageInput/MoreOptionsButton';\nimport type { SendButtonProps } from '../../components/MessageInput/SendButton';\nimport type { UploadProgressIndicatorProps } from '../../components/MessageInput/UploadProgressIndicator';\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport { compressImage, getLocalAssetUri, pickDocument } from '../../native';\nimport type { Asset, DefaultStreamChatGenerics, File, UnknownType } from '../../types/types';\nimport {\n ACITriggerSettings,\n ACITriggerSettingsParams,\n FileState,\n FileStateValue,\n generateRandomId,\n TriggerSettings,\n urlRegex,\n} from '../../utils/utils';\nimport { useAttachmentPickerContext } from '../attachmentPickerContext/AttachmentPickerContext';\nimport { ChannelContextValue, useChannelContext } from '../channelContext/ChannelContext';\nimport { useChatContext } from '../chatContext/ChatContext';\nimport { useOwnCapabilitiesContext } from '../ownCapabilitiesContext/OwnCapabilitiesContext';\nimport { useThreadContext } from '../threadContext/ThreadContext';\nimport { useTranslationContext } from '../translationContext/TranslationContext';\nimport { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';\n\nimport { getDisplayName } from '../utils/getDisplayName';\nimport { isTestEnvironment } from '../utils/isTestEnvironment';\n\nexport type FileUpload = {\n file: File;\n id: string;\n state: FileStateValue;\n thumb_url?: string;\n url?: string;\n};\n\nexport type ImageUpload = {\n file: Partial<Asset> & {\n name?: string;\n };\n id: string;\n state: FileStateValue;\n height?: number;\n url?: string;\n width?: number;\n};\n\nexport type MentionAllAppUsersQuery<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n filters?: UserFilters<StreamChatGenerics>;\n options?: UserOptions;\n sort?: UserSort<StreamChatGenerics>;\n};\n\nexport type LocalMessageInputContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n appendText: (newText: string) => void;\n asyncIds: string[];\n asyncUploads: {\n [key: string]: {\n state: string;\n url: string;\n };\n };\n closeAttachmentPicker: () => void;\n /** The time at which the active cooldown will end */\n cooldownEndsAt: Date;\n /**\n * An array of file objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * ]\n * ```\n *\n */\n fileUploads: FileUpload[];\n giphyActive: boolean;\n /**\n * An array of image objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * ]\n * ```\n *\n */\n imageUploads: ImageUpload[];\n inputBoxRef: React.MutableRefObject<TextInput | null>;\n isValidMessage: () => boolean;\n mentionedUsers: string[];\n numberOfUploads: number;\n onChange: (newText: string) => void;\n onSelectItem: (item: UserResponse<StreamChatGenerics>) => void;\n openAttachmentPicker: () => void;\n openCommandsPicker: () => void;\n openFilePicker: () => void;\n openMentionsPicker: () => void;\n pickFile: () => Promise<void>;\n /**\n * Function for removing a file from the upload preview\n *\n * @param id string ID of file in `fileUploads` object in state of MessageInput\n */\n removeFile: (id: string) => void;\n /**\n * Function for removing an image from the upload preview\n *\n * @param id string ID of image in `imageUploads` object in state of MessageInput\n */\n removeImage: (id: string) => void;\n resetInput: (pendingAttachments?: Attachment<StreamChatGenerics>[]) => void;\n selectedPicker: string | undefined;\n sending: React.MutableRefObject<boolean>;\n sendMessage: () => Promise<void>;\n sendMessageAsync: (id: string) => void;\n sendThreadMessageInChannel: boolean;\n setAsyncIds: React.Dispatch<React.SetStateAction<string[]>>;\n setAsyncUploads: React.Dispatch<\n React.SetStateAction<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>\n >;\n setFileUploads: React.Dispatch<React.SetStateAction<FileUpload[]>>;\n setGiphyActive: React.Dispatch<React.SetStateAction<boolean>>;\n setImageUploads: React.Dispatch<React.SetStateAction<ImageUpload[]>>;\n /**\n * Ref callback to set reference on input box\n */\n setInputBoxRef: (ref: TextInput | null) => void;\n setMentionedUsers: React.Dispatch<React.SetStateAction<string[]>>;\n setNumberOfUploads: React.Dispatch<React.SetStateAction<number>>;\n setSendThreadMessageInChannel: React.Dispatch<React.SetStateAction<boolean>>;\n setShowMoreOptions: React.Dispatch<React.SetStateAction<boolean>>;\n setText: React.Dispatch<React.SetStateAction<string>>;\n showMoreOptions: boolean;\n /**\n * Text value of the TextInput\n */\n text: string;\n toggleAttachmentPicker: () => void;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n triggerSettings: TriggerSettings<StreamChatGenerics>;\n updateMessage: () => Promise<void>;\n /** Function for attempting to upload a file */\n uploadFile: ({ newFile }: { newFile: FileUpload }) => Promise<void>;\n /** Function for attempting to upload an image */\n uploadImage: ({ newImage }: { newImage: ImageUpload }) => Promise<void>;\n uploadNewFile: (file: File) => Promise<void>;\n uploadNewImage: (image: Asset) => Promise<void>;\n};\n\nexport type InputMessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Custom UI component for attach button.\n *\n * Defaults to and accepts same props as: [AttachButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/attach-button/)\n */\n AttachButton: React.ComponentType<AttachButtonProps<StreamChatGenerics>>;\n clearEditingState: () => void;\n clearQuotedMessageState: () => void;\n /**\n * Custom UI component for commands button.\n *\n * Defaults to and accepts same props as: [CommandsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/commands-button/)\n */\n CommandsButton: React.ComponentType<CommandsButtonProps<StreamChatGenerics>>;\n /**\n * Custom UI component to display the remaining cooldown a user will have to wait before\n * being allowed to send another message. This component is displayed in place of the\n * send button for the MessageInput component.\n *\n * **default** [CooldownTimer](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/CooldownTimer.tsx)\n */\n CooldownTimer: React.ComponentType<CooldownTimerProps>;\n editing: boolean | MessageType<StreamChatGenerics>;\n editMessage: StreamChat<StreamChatGenerics>['updateMessage'];\n\n /**\n * Custom UI component for FileUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/FileUploadPreview.tsx\n */\n FileUploadPreview: React.ComponentType<FileUploadPreviewProps<StreamChatGenerics>>;\n\n /** When false, CommandsButton will be hidden */\n hasCommands: boolean;\n /** When false, FileSelectorIcon will be hidden */\n hasFilePicker: boolean;\n /** When false, ImageSelectorIcon will be hidden */\n hasImagePicker: boolean;\n /**\n * Custom UI component for ImageUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/ImageUploadPreview.tsx\n */\n ImageUploadPreview: React.ComponentType<ImageUploadPreviewProps<StreamChatGenerics>>;\n InputEditingStateHeader: React.ComponentType<InputEditingStateHeaderProps<StreamChatGenerics>>;\n InputGiphySearch: React.ComponentType<InputGiphySearchProps<StreamChatGenerics>>;\n InputReplyStateHeader: React.ComponentType<InputReplyStateHeaderProps<StreamChatGenerics>>;\n /** Limit on allowed number of files to attach at a time. */\n maxNumberOfFiles: number;\n /**\n * Custom UI component for more options button.\n *\n * Defaults to and accepts same props as: [MoreOptionsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/more-options-button/)\n */\n MoreOptionsButton: React.ComponentType<MoreOptionsButtonProps<StreamChatGenerics>>;\n /** Limit on the number of lines in the text input before scrolling */\n numberOfLines: number;\n quotedMessage: boolean | MessageType<StreamChatGenerics>;\n /**\n * Custom UI component for send button.\n *\n * Defaults to and accepts same props as: [SendButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/send-button/)\n */\n SendButton: React.ComponentType<SendButtonProps<StreamChatGenerics>>;\n sendImageAsync: boolean;\n sendMessage: (message: Partial<StreamMessage<StreamChatGenerics>>) => Promise<void>;\n setQuotedMessageState: (message: MessageType<StreamChatGenerics>) => void;\n /**\n * Custom UI component to render checkbox with text (\"Also send to channel\") in Thread's input box.\n * When ticked, message will also be sent in parent channel.\n */\n ShowThreadMessageInChannelButton: React.ComponentType<{\n threadList?: boolean;\n }>;\n /**\n * Custom UI component to render upload progress indicator on attachment preview.\n *\n * **Default** [UploadProgressIndicator](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/UploadProgressIndicator.tsx)\n */\n UploadProgressIndicator: React.ComponentType<UploadProgressIndicatorProps>;\n /**\n * Additional props for underlying TextInput component. These props will be forwarded as it is to TextInput component.\n *\n * @see See https://reactnative.dev/docs/textinput#reference\n */\n additionalTextInputProps?: TextInputProps;\n /** Max number of suggestions to display in autocomplete list. Defaults to 10. */\n autoCompleteSuggestionsLimit?: number;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n autoCompleteTriggerSettings?: (\n settings: ACITriggerSettingsParams<StreamChatGenerics>,\n ) => TriggerSettings<StreamChatGenerics>;\n /**\n * Compress image with quality (from 0 to 1, where 1 is best quality).\n * On iOS, values larger than 0.8 don't produce a noticeable quality increase in most images,\n * while a value of 0.8 will reduce the file size by about half or less compared to a value of 1.\n * Image picker defaults to 0.8 for iOS and 1 for Android\n */\n compressImageQuality?: number;\n /**\n * Override file upload request\n *\n * @param file File object - { uri: '', name: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doDocUploadRequest?: (\n file: {\n name: string;\n size?: string | number;\n type?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n /**\n * Override image upload request\n *\n * @param file File object - { uri: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doImageUploadRequest?: (\n file: {\n name?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n\n /** Initial value to set on input */\n initialValue?: string;\n /**\n * Custom UI component for AutoCompleteInput.\n * Has access to all of [MessageInputContext](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/messageInputContext/MessageInputContext.tsx)\n */\n Input?: React.ComponentType<\n Omit<MessageInputProps<StreamChatGenerics>, 'Input'> &\n InputButtonsProps<StreamChatGenerics> & {\n getUsers: () => UserResponse<StreamChatGenerics>[];\n }\n >;\n /**\n * Custom UI component to override buttons on left side of input box\n * Defaults to [InputButtons](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/InputButtons.tsx),\n * which contain following components/buttons:\n *\n * - AttachButton\n * - CommandsButtom\n *\n * You have access to following prop functions:\n *\n * - closeAttachmentPicker\n * - openAttachmentPicker\n * - openCommandsPicker\n * - toggleAttachmentPicker\n */\n InputButtons?: React.ComponentType<InputButtonsProps<StreamChatGenerics>>;\n maxMessageLength?: number;\n mentionAllAppUsersEnabled?: boolean;\n /** Object containing filters/sort/options overrides for an @mention user query */\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n /**\n * Callback that is called when the text input's text changes. Changed text is passed as a single string argument to the callback handler.\n */\n onChangeText?: (newText: string) => void;\n SendMessageDisallowedIndicator?: React.ComponentType;\n /**\n * ref for input setter function\n *\n * @param ref [Ref object](https://reactjs.org/docs/refs-and-the-dom.html) for underling `TextInput` component.\n *\n * @overrideType Function\n */\n setInputRef?: (ref: TextInput | null) => void;\n};\n\nexport type MessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = LocalMessageInputContext<StreamChatGenerics> &\n Omit<InputMessageInputContextValue<StreamChatGenerics>, 'sendMessage'>;\n\nexport const MessageInputContext = React.createContext(\n DEFAULT_BASE_CONTEXT_VALUE as MessageInputContextValue,\n);\n\nexport const MessageInputProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value: InputMessageInputContextValue<StreamChatGenerics>;\n}>) => {\n const { closePicker, openPicker, selectedPicker, setSelectedPicker } =\n useAttachmentPickerContext();\n const { appSettings, client } = useChatContext<StreamChatGenerics>();\n\n const getFileUploadConfig = () => {\n const fileConfig = appSettings?.app?.file_upload_config;\n if (fileConfig !== null || fileConfig !== undefined) {\n return fileConfig;\n } else {\n return {};\n }\n };\n\n const blockedFileExtensionTypes = getFileUploadConfig()?.blocked_file_extensions;\n const blockedFileMimeTypes = getFileUploadConfig()?.blocked_mime_types;\n\n const getImageUploadConfig = () => {\n const imageConfig = appSettings?.app?.image_upload_config;\n if (imageConfig !== null || imageConfig !== undefined) {\n return imageConfig;\n }\n return {};\n };\n\n const blockedImageExtensionTypes = getImageUploadConfig()?.blocked_file_extensions;\n const blockedImageMimeTypes = getImageUploadConfig()?.blocked_mime_types;\n\n const channelCapabities = useOwnCapabilitiesContext();\n\n const { channel, giphyEnabled } = useChannelContext<StreamChatGenerics>();\n const { thread } = useThreadContext<StreamChatGenerics>();\n const { t } = useTranslationContext();\n const inputBoxRef = useRef<TextInput | null>(null);\n const sending = useRef(false);\n\n const [asyncIds, setAsyncIds] = useState<string[]>([]);\n const [asyncUploads, setAsyncUploads] = useState<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>({});\n const [giphyActive, setGiphyActive] = useState(false);\n const [sendThreadMessageInChannel, setSendThreadMessageInChannel] = useState(false);\n const { editing, hasFilePicker, hasImagePicker, initialValue } = value;\n const {\n fileUploads,\n imageUploads,\n mentionedUsers,\n numberOfUploads,\n setFileUploads,\n setImageUploads,\n setMentionedUsers,\n setNumberOfUploads,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n } = useMessageDetailsForState<StreamChatGenerics>(editing, initialValue);\n const { endsAt: cooldownEndsAt, start: startCooldown } = useCooldown<StreamChatGenerics>();\n\n const threadId = thread?.id;\n useEffect(() => {\n setSendThreadMessageInChannel(false);\n }, [threadId]);\n\n const appendText = (newText: string) => {\n setText((prevText) => `${prevText}${newText}`);\n };\n\n /** Checks if the message is valid or not. Accordingly we can enable/disable send button */\n const isValidMessage = () => {\n if (text && text.trim()) {\n return true;\n }\n\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n return false;\n };\n\n const onChange = (newText: string) => {\n if (sending.current) {\n return;\n }\n setText(newText);\n\n if (newText && channel && channelCapabities.sendTypingEvents) {\n logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');\n }\n\n if (value.onChangeText) {\n value.onChangeText(newText);\n }\n };\n\n const openCommandsPicker = () => {\n appendText('/');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openMentionsPicker = () => {\n appendText('@');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openAttachmentPicker = () => {\n if (hasImagePicker) {\n Keyboard.dismiss();\n openPicker();\n setSelectedPicker('images');\n /**\n * TODO: Remove this, this is the result of\n * the bottom sheet now having some keyboard\n * handling baked in, creating an issue when\n * we call dismiss and open in short order.\n * https://github.com/gorhom/react-native-bottom-sheet/issues/446\n */\n setTimeout(openPicker, 600);\n } else if (hasFilePicker) {\n pickFile();\n }\n };\n\n const closeAttachmentPicker = () => {\n setSelectedPicker(undefined);\n closePicker();\n };\n\n const toggleAttachmentPicker = () => {\n if (selectedPicker) {\n closeAttachmentPicker();\n } else {\n openAttachmentPicker();\n }\n };\n\n const onSelectItem = (item: UserResponse<StreamChatGenerics>) => {\n setMentionedUsers((prevMentionedUsers) => [...prevMentionedUsers, item.id]);\n };\n\n const pickFile = async () => {\n if (numberOfUploads >= value.maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return;\n }\n\n const result = await pickDocument({\n maxNumberOfFiles: value.maxNumberOfFiles - numberOfUploads,\n });\n if (!result.cancelled && result.docs) {\n result.docs.forEach((doc) => {\n /**\n * TODO: The current tight coupling of images to the image\n * picker does not allow images picked from the file picker\n * to be rendered in a preview via the uploadNewImage call.\n * This should be updated alongside allowing image a file\n * uploads together.\n */\n uploadNewFile(doc);\n });\n }\n };\n\n const removeFile = (id: string) => {\n if (fileUploads.some((file) => file.id === id)) {\n setFileUploads((prevFileUploads) => prevFileUploads.filter((file) => file.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const removeImage = (id: string) => {\n if (imageUploads.some((image) => image.id === id)) {\n setImageUploads((prevImageUploads) => prevImageUploads.filter((image) => image.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const resetInput = (pendingAttachments: Attachment<StreamChatGenerics>[] = []) => {\n setFileUploads([]);\n setGiphyActive(false);\n setShowMoreOptions(true);\n setImageUploads([]);\n setMentionedUsers([]);\n setNumberOfUploads(\n (prevNumberOfUploads) => prevNumberOfUploads - (pendingAttachments?.length || 0),\n );\n setText('');\n };\n\n // TODO: Figure out why this is async, as it doesn't await any promise.\n // eslint-disable-next-line require-await\n const sendMessage = async () => {\n if (sending.current) {\n return;\n }\n\n if (!channelCapabities.sendLinks && !!text.match(urlRegex)) {\n Alert.alert(t('Links are disabled'), t('Sending links is not allowed in this conversation'));\n\n return;\n }\n\n sending.current = true;\n\n startCooldown();\n\n const prevText = giphyEnabled && giphyActive ? `/giphy ${text}` : text;\n setText('');\n if (inputBoxRef.current) {\n inputBoxRef.current.clear();\n }\n\n const attachments = [] as Attachment<StreamChatGenerics>[];\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n if (value.sendImageAsync) {\n /**\n * If user hit send before image uploaded, push ID into a queue to later\n * be matched with the successful CDN response\n */\n setAsyncIds((prevAsyncIds) => [...prevAsyncIds, image.id]);\n } else {\n sending.current = false;\n return setText(prevText);\n }\n }\n\n // To get the mime type of the image from the file name and send it as an response for an image\n const mime_type: string | boolean = lookup(image.file.filename as string);\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n attachments.push({\n fallback: image.file.name,\n image_url: image.url,\n mime_type,\n original_height: image.height,\n original_width: image.width,\n type: 'image',\n } as Attachment<StreamChatGenerics>);\n }\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n sending.current = false;\n return;\n }\n const mime_type: string | boolean = lookup(file.file.name as string);\n\n if (file.state === FileState.UPLOADED || file.state === FileState.FINISHED) {\n if (file.file.type?.startsWith('image/')) {\n attachments.push({\n fallback: file.file.name,\n image_url: file.url,\n mime_type,\n type: 'image',\n } as Attachment<StreamChatGenerics>);\n } else if (file.file.type?.startsWith('audio/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'audio',\n } as Attachment<StreamChatGenerics>);\n } else if (file.file.type?.startsWith('video/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n thumb_url: file.thumb_url,\n title: file.file.name,\n type: 'video',\n } as Attachment<StreamChatGenerics>);\n } else {\n attachments.push({\n asset_url: file.url,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'file',\n } as Attachment<StreamChatGenerics>);\n }\n }\n }\n\n // Disallow sending message if its empty.\n if (!prevText && attachments.length === 0) {\n sending.current = false;\n return;\n }\n\n if (value.editing && !isEditingBoolean(value.editing)) {\n const updatedMessage = {\n ...value.editing,\n attachments,\n mentioned_users: mentionedUsers,\n quoted_message: undefined,\n text: prevText,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0];\n\n // TODO: Remove this line and show an error when submit fails\n value.clearEditingState();\n\n const updateMessagePromise = value.editMessage(updatedMessage).then(value.clearEditingState);\n resetInput(attachments);\n logChatPromiseExecution(updateMessagePromise, 'update message');\n\n sending.current = false;\n } else {\n try {\n value.sendMessage({\n attachments,\n mentioned_users: uniq(mentionedUsers),\n /** Parent message id - in case of thread */\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: prevText,\n } as unknown as StreamMessage<StreamChatGenerics>);\n\n value.clearQuotedMessageState();\n sending.current = false;\n resetInput(attachments);\n } catch (_error) {\n sending.current = false;\n if (value.quotedMessage && typeof value.quotedMessage !== 'boolean') {\n value.setQuotedMessageState(value.quotedMessage);\n }\n setText(prevText.slice(giphyEnabled && giphyActive ? 7 : 0)); // 7 because of '/giphy ' length\n console.log('Failed to send message');\n }\n }\n };\n\n const sendMessageAsync = (id: string) => {\n const image = asyncUploads[id];\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n return;\n }\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n const attachments = [\n {\n image_url: image.url,\n type: 'image',\n },\n ] as StreamMessage<StreamChatGenerics>['attachments'];\n\n startCooldown();\n try {\n value.sendMessage({\n attachments,\n mentioned_users: [],\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: '',\n } as unknown as Partial<StreamMessage<StreamChatGenerics>>);\n\n setAsyncIds((prevAsyncIds) => prevAsyncIds.splice(prevAsyncIds.indexOf(id), 1));\n setAsyncUploads((prevAsyncUploads) => {\n delete prevAsyncUploads[id];\n return prevAsyncUploads;\n });\n\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n } catch (_error) {\n console.log('Failed');\n }\n }\n };\n\n const setInputBoxRef = (ref: TextInput | null) => {\n inputBoxRef.current = ref;\n if (value.setInputRef) {\n value.setInputRef(ref);\n }\n };\n\n const triggerSettings = channel\n ? value.autoCompleteTriggerSettings\n ? value.autoCompleteTriggerSettings({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ACITriggerSettings<StreamChatGenerics>({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ({} as TriggerSettings<StreamChatGenerics>);\n\n const updateMessage = async () => {\n try {\n if (!isEditingBoolean(value.editing)) {\n await client.updateMessage({\n ...value.editing,\n quoted_message: undefined,\n text: giphyEnabled && giphyActive ? `/giphy ${text}` : text,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0]);\n }\n\n resetInput();\n value.clearEditingState();\n } catch (error) {\n console.log(error);\n }\n };\n\n const regExcondition = /File (extension \\.\\w{2,4}|type \\S+) is not supported/;\n\n const getUploadSetStateAction = <UploadType extends ImageUpload | FileUpload>(\n id: string,\n fileState: FileStateValue,\n extraData: Partial<UploadType> = {},\n ): React.SetStateAction<UploadType[]> => {\n const uploads: (prevUploads: UploadType[]) => UploadType[] = (prevUploads: UploadType[]) =>\n prevUploads.map((prevUpload) => {\n if (prevUpload.id === id) {\n return {\n ...prevUpload,\n ...extraData,\n state: fileState,\n };\n }\n return prevUpload;\n });\n\n return uploads;\n };\n\n const handleFileOrImageUploadError = (error: unknown, isImageError: boolean, id: string) => {\n if (isImageError) {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setImageUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n\n return setImageUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n } else {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setFileUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n return setFileUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n }\n };\n\n const uploadFile = async ({ newFile }: { newFile: FileUpload }) => {\n const { file, id } = newFile;\n\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADING));\n\n let response: Partial<SendFileAPIResponse> = {};\n try {\n if (value.doDocUploadRequest) {\n response = await value.doDocUploadRequest(file, channel);\n } else if (channel && file.uri) {\n response = await channel.sendFile(file.uri, file.name, file.type);\n }\n const extraData: Partial<FileUpload> = { thumb_url: response.thumb_url, url: response.file };\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADED, extraData));\n } catch (error: unknown) {\n handleFileOrImageUploadError(error, false, id);\n }\n };\n\n const uploadImage = async ({ newImage }: { newImage: ImageUpload }) => {\n const { file, id } = newImage || {};\n\n if (!file) {\n return;\n }\n\n let response = {} as SendFileAPIResponse;\n\n try {\n /**\n * Expo now uses the assets-library which is also how remote\n * native files are presented. We now return a file id from Expo\n * only, if that file id exits we call getLocalAssetUri to download\n * the asset for expo before uploading it. We do the same for native\n * if the uri includes assets-library, this uses the CameraRoll.save\n * function to also create a local uri.\n */\n const localUri = file.id\n ? await getLocalAssetUri(file.id)\n : file.uri?.match(/assets-library/)\n ? await getLocalAssetUri(file.uri)\n : file.uri;\n\n const uri = file.name || localUri || '';\n /**\n * We skip compression if:\n * - the file is from the camera as that should already be compressed\n * - the file has not height/width value to maintain for compression\n * - the compressImageQuality number is not present or is 1 (meaning no compression)\n */\n const compressedUri = await (file.source === 'camera' ||\n !file.height ||\n !file.width ||\n typeof value.compressImageQuality !== 'number' ||\n value.compressImageQuality === 1\n ? uri\n : compressImage({\n compressImageQuality: value.compressImageQuality,\n height: file.height,\n uri,\n width: file.width,\n }));\n const filename = uri.replace(/^(file:\\/\\/|content:\\/\\/|assets-library:\\/\\/)/, '');\n const contentType = lookup(filename) || 'multipart/form-data';\n if (value.doImageUploadRequest) {\n response = await value.doImageUploadRequest(file, channel);\n } else if (compressedUri && channel) {\n if (value.sendImageAsync) {\n channel.sendImage(compressedUri, file.filename, contentType).then((res) => {\n if (asyncIds.includes(id)) {\n // Evaluates to true if user hit send before image successfully uploaded\n setAsyncUploads((prevAsyncUploads) => {\n prevAsyncUploads[id] = {\n ...prevAsyncUploads[id],\n state: FileState.UPLOADED,\n url: res.file,\n };\n return prevAsyncUploads;\n });\n } else {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n url: res.file,\n });\n setImageUploads(newImageUploads);\n }\n });\n } else {\n response = await channel.sendImage(compressedUri, file.filename, contentType);\n }\n }\n\n if (Object.keys(response).length) {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n height: file.height,\n url: response.file,\n width: file.width,\n });\n setImageUploads(newImageUploads);\n }\n } catch (error) {\n handleFileOrImageUploadError(error, true, id);\n }\n };\n\n const uploadNewFile = async (file: {\n name: string;\n size?: number | string;\n type?: string;\n uri?: string;\n }) => {\n const id: string = generateRandomId();\n const mimeType: string | boolean = lookup(file.name);\n\n const isBlockedFileExtension: boolean | undefined = blockedFileExtensionTypes?.some(\n (fileExtensionType: string) => file.name?.includes(fileExtensionType),\n );\n const isBlockedFileMimeType: boolean | undefined = blockedFileMimeTypes?.some(\n (mimeType: string) => file.name?.includes(mimeType),\n );\n\n const fileState =\n isBlockedFileExtension || isBlockedFileMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newFile: FileUpload = {\n file: { ...file, type: mimeType || file?.type },\n id,\n state: fileState,\n };\n\n await Promise.all([\n setFileUploads((prevFileUploads) => prevFileUploads.concat([newFile])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedFileExtension) {\n uploadFile({ newFile });\n }\n };\n\n const uploadNewImage = async (image: Asset) => {\n const id = generateRandomId();\n\n const isBlockedImageMimeType = blockedImageMimeTypes?.some((mimeType: string) =>\n image.uri?.includes(mimeType),\n );\n\n const isBlockedImageExtension = blockedImageExtensionTypes?.some((imageExtensionType: string) =>\n image.uri?.includes(imageExtensionType),\n );\n\n const imageState =\n isBlockedImageExtension || isBlockedImageMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newImage: ImageUpload = {\n file: image,\n id,\n state: imageState,\n };\n\n await Promise.all([\n setImageUploads((prevImageUploads) => prevImageUploads.concat([newImage])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedImageExtension) {\n uploadImage({ newImage });\n }\n };\n\n const messageInputContext = useCreateMessageInputContext({\n appendText,\n asyncIds,\n asyncUploads,\n closeAttachmentPicker,\n cooldownEndsAt,\n fileUploads,\n giphyActive,\n imageUploads,\n inputBoxRef,\n isValidMessage,\n mentionedUsers,\n numberOfUploads,\n onChange,\n onSelectItem,\n openAttachmentPicker,\n openCommandsPicker,\n openFilePicker: pickFile,\n openMentionsPicker,\n pickFile,\n removeFile,\n removeImage,\n resetInput,\n selectedPicker,\n sending,\n sendMessageAsync,\n sendThreadMessageInChannel,\n setAsyncIds,\n setAsyncUploads,\n setFileUploads,\n setGiphyActive,\n setImageUploads,\n setInputBoxRef,\n setMentionedUsers,\n setNumberOfUploads,\n setSendThreadMessageInChannel,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n thread,\n toggleAttachmentPicker,\n triggerSettings,\n updateMessage,\n uploadFile,\n uploadImage,\n uploadNewFile,\n uploadNewImage,\n ...value,\n sendMessage, // overriding the originally passed in sendMessage\n });\n\n return (\n <MessageInputContext.Provider\n value={messageInputContext as unknown as MessageInputContextValue}\n >\n {children}\n </MessageInputContext.Provider>\n );\n};\n\nexport const useMessageInputContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const contextValue = useContext(\n MessageInputContext,\n ) as unknown as MessageInputContextValue<StreamChatGenerics>;\n\n if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {\n throw new Error(\n `The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure you have configured Channel component correctly - https://getstream.io/chat/docs/sdk/reactnative/basics/hello_stream_chat/#channel`,\n );\n }\n\n return contextValue;\n};\n\n/**\n * Typescript currently does not support partial inference so if MessageInputContext\n * typing is desired while using the HOC withMessageInputContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withMessageInputContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>> => {\n const WithMessageInputContextComponent = (\n props: Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>,\n ) => {\n const messageInputContext = useMessageInputContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...messageInputContext} />;\n };\n WithMessageInputContextComponent.displayName = `WithMessageInputContext${getDisplayName(\n Component,\n )}`;\n return WithMessageInputContextComponent;\n};\n"]}
1
+ {"version":3,"sources":["MessageInputContext.tsx"],"names":["MessageInputContext","React","createContext","DEFAULT_BASE_CONTEXT_VALUE","MessageInputProvider","children","value","closePicker","openPicker","selectedPicker","setSelectedPicker","appSettings","client","getFileUploadConfig","fileConfig","app","file_upload_config","undefined","blockedFileExtensionTypes","blocked_file_extensions","blockedFileMimeTypes","blocked_mime_types","getImageUploadConfig","imageConfig","image_upload_config","blockedImageExtensionTypes","blockedImageMimeTypes","channelCapabities","channel","giphyEnabled","thread","t","inputBoxRef","sending","asyncIds","setAsyncIds","asyncUploads","setAsyncUploads","giphyActive","setGiphyActive","sendThreadMessageInChannel","setSendThreadMessageInChannel","editing","hasFilePicker","hasImagePicker","initialValue","fileUploads","imageUploads","mentionedUsers","numberOfUploads","setFileUploads","setImageUploads","setMentionedUsers","setNumberOfUploads","setShowMoreOptions","setText","showMoreOptions","text","cooldownEndsAt","endsAt","startCooldown","start","threadId","id","appendText","newText","prevText","isValidMessage","trim","image","state","FileState","UPLOAD_FAILED","UPLOADING","file","onChange","current","sendTypingEvents","keystroke","onChangeText","openCommandsPicker","focus","openMentionsPicker","openAttachmentPicker","Keyboard","dismiss","setTimeout","pickFile","closeAttachmentPicker","toggleAttachmentPicker","onSelectItem","item","prevMentionedUsers","maxNumberOfFiles","Alert","alert","result","cancelled","docs","forEach","doc","uploadNewFile","removeFile","some","prevFileUploads","filter","prevNumberOfUploads","removeImage","prevImageUploads","resetInput","pendingAttachments","length","sendMessage","sendLinks","match","urlRegex","clear","attachments","sendImageAsync","prevAsyncIds","mime_type","filename","UPLOADED","FINISHED","push","fallback","name","image_url","url","original_height","height","original_width","width","type","startsWith","asset_url","duration","file_size","size","title","thumb_url","updatedMessage","mentioned_users","quoted_message","clearEditingState","updateMessagePromise","editMessage","then","parent_id","quoted_message_id","quotedMessage","show_in_channel","clearQuotedMessageState","_error","setQuotedMessageState","slice","console","log","sendMessageAsync","splice","indexOf","prevAsyncUploads","setInputBoxRef","ref","setInputRef","triggerSettings","autoCompleteTriggerSettings","onMentionSelectItem","updateMessage","regExcondition","getUploadSetStateAction","fileState","extraData","uploads","prevUploads","map","prevUpload","handleFileOrImageUploadError","error","isImageError","Error","test","message","NOT_SUPPORTED","uploadFile","newFile","response","doDocUploadRequest","uri","sendFile","uploadImage","newImage","localUri","source","compressImageQuality","compressedUri","replace","contentType","doImageUploadRequest","sendImage","res","includes","newImageUploads","Object","keys","mimeType","isBlockedFileExtension","fileExtensionType","isBlockedFileMimeType","Promise","all","concat","uploadNewImage","isBlockedImageMimeType","isBlockedImageExtension","imageExtensionType","imageState","messageInputContext","openFilePicker","useMessageInputContext","contextValue","withMessageInputContext","Component","WithMessageInputContextComponent","props","displayName"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';\n\nimport { Alert, Keyboard } from 'react-native';\n\nimport type { TextInput, TextInputProps } from 'react-native';\n\nimport uniq from 'lodash/uniq';\nimport { lookup } from 'mime-types';\nimport {\n Attachment,\n logChatPromiseExecution,\n SendFileAPIResponse,\n StreamChat,\n Message as StreamMessage,\n UserFilters,\n UserOptions,\n UserResponse,\n UserSort,\n} from 'stream-chat';\n\nimport { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';\nimport { isEditingBoolean, useMessageDetailsForState } from './hooks/useMessageDetailsForState';\n\nimport type { AttachButtonProps } from '../../components/MessageInput/AttachButton';\nimport type { CommandsButtonProps } from '../../components/MessageInput/CommandsButton';\nimport type { InputEditingStateHeaderProps } from '../../components/MessageInput/components/InputEditingStateHeader';\nimport type { InputGiphySearchProps } from '../../components/MessageInput/components/InputGiphySearch';\nimport type { InputReplyStateHeaderProps } from '../../components/MessageInput/components/InputReplyStateHeader';\nimport type { CooldownTimerProps } from '../../components/MessageInput/CooldownTimer';\nimport type { FileUploadPreviewProps } from '../../components/MessageInput/FileUploadPreview';\nimport { useCooldown } from '../../components/MessageInput/hooks/useCooldown';\nimport type { ImageUploadPreviewProps } from '../../components/MessageInput/ImageUploadPreview';\nimport type { InputButtonsProps } from '../../components/MessageInput/InputButtons';\nimport type { MessageInputProps } from '../../components/MessageInput/MessageInput';\nimport type { MoreOptionsButtonProps } from '../../components/MessageInput/MoreOptionsButton';\nimport type { SendButtonProps } from '../../components/MessageInput/SendButton';\nimport type { UploadProgressIndicatorProps } from '../../components/MessageInput/UploadProgressIndicator';\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport { compressImage, getLocalAssetUri, pickDocument } from '../../native';\nimport type { Asset, DefaultStreamChatGenerics, File, UnknownType } from '../../types/types';\nimport {\n ACITriggerSettings,\n ACITriggerSettingsParams,\n FileState,\n FileStateValue,\n generateRandomId,\n TriggerSettings,\n urlRegex,\n} from '../../utils/utils';\nimport { useAttachmentPickerContext } from '../attachmentPickerContext/AttachmentPickerContext';\nimport { ChannelContextValue, useChannelContext } from '../channelContext/ChannelContext';\nimport { useChatContext } from '../chatContext/ChatContext';\nimport { useOwnCapabilitiesContext } from '../ownCapabilitiesContext/OwnCapabilitiesContext';\nimport { useThreadContext } from '../threadContext/ThreadContext';\nimport { useTranslationContext } from '../translationContext/TranslationContext';\nimport { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';\n\nimport { getDisplayName } from '../utils/getDisplayName';\nimport { isTestEnvironment } from '../utils/isTestEnvironment';\n\nexport type FileUpload = {\n file: File;\n id: string;\n state: FileStateValue;\n thumb_url?: string;\n url?: string;\n};\n\nexport type ImageUpload = {\n file: Partial<Asset> & {\n name?: string;\n };\n id: string;\n state: FileStateValue;\n height?: number;\n url?: string;\n width?: number;\n};\n\nexport type MentionAllAppUsersQuery<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n filters?: UserFilters<StreamChatGenerics>;\n options?: UserOptions;\n sort?: UserSort<StreamChatGenerics>;\n};\n\nexport type LocalMessageInputContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n appendText: (newText: string) => void;\n asyncIds: string[];\n asyncUploads: {\n [key: string]: {\n state: string;\n url: string;\n };\n };\n closeAttachmentPicker: () => void;\n /** The time at which the active cooldown will end */\n cooldownEndsAt: Date;\n /**\n * An array of file objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * ]\n * ```\n *\n */\n fileUploads: FileUpload[];\n giphyActive: boolean;\n /**\n * An array of image objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * ]\n * ```\n *\n */\n imageUploads: ImageUpload[];\n inputBoxRef: React.MutableRefObject<TextInput | null>;\n isValidMessage: () => boolean;\n mentionedUsers: string[];\n numberOfUploads: number;\n onChange: (newText: string) => void;\n onSelectItem: (item: UserResponse<StreamChatGenerics>) => void;\n openAttachmentPicker: () => void;\n openCommandsPicker: () => void;\n openFilePicker: () => void;\n openMentionsPicker: () => void;\n pickFile: () => Promise<void>;\n /**\n * Function for removing a file from the upload preview\n *\n * @param id string ID of file in `fileUploads` object in state of MessageInput\n */\n removeFile: (id: string) => void;\n /**\n * Function for removing an image from the upload preview\n *\n * @param id string ID of image in `imageUploads` object in state of MessageInput\n */\n removeImage: (id: string) => void;\n resetInput: (pendingAttachments?: Attachment<StreamChatGenerics>[]) => void;\n selectedPicker: string | undefined;\n sending: React.MutableRefObject<boolean>;\n sendMessage: () => Promise<void>;\n sendMessageAsync: (id: string) => void;\n sendThreadMessageInChannel: boolean;\n setAsyncIds: React.Dispatch<React.SetStateAction<string[]>>;\n setAsyncUploads: React.Dispatch<\n React.SetStateAction<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>\n >;\n setFileUploads: React.Dispatch<React.SetStateAction<FileUpload[]>>;\n setGiphyActive: React.Dispatch<React.SetStateAction<boolean>>;\n setImageUploads: React.Dispatch<React.SetStateAction<ImageUpload[]>>;\n /**\n * Ref callback to set reference on input box\n */\n setInputBoxRef: (ref: TextInput | null) => void;\n setMentionedUsers: React.Dispatch<React.SetStateAction<string[]>>;\n setNumberOfUploads: React.Dispatch<React.SetStateAction<number>>;\n setSendThreadMessageInChannel: React.Dispatch<React.SetStateAction<boolean>>;\n setShowMoreOptions: React.Dispatch<React.SetStateAction<boolean>>;\n setText: React.Dispatch<React.SetStateAction<string>>;\n showMoreOptions: boolean;\n /**\n * Text value of the TextInput\n */\n text: string;\n toggleAttachmentPicker: () => void;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n triggerSettings: TriggerSettings<StreamChatGenerics>;\n updateMessage: () => Promise<void>;\n /** Function for attempting to upload a file */\n uploadFile: ({ newFile }: { newFile: FileUpload }) => Promise<void>;\n /** Function for attempting to upload an image */\n uploadImage: ({ newImage }: { newImage: ImageUpload }) => Promise<void>;\n uploadNewFile: (file: File) => Promise<void>;\n uploadNewImage: (image: Asset) => Promise<void>;\n};\n\nexport type InputMessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Custom UI component for attach button.\n *\n * Defaults to and accepts same props as: [AttachButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/attach-button/)\n */\n AttachButton: React.ComponentType<AttachButtonProps<StreamChatGenerics>>;\n clearEditingState: () => void;\n clearQuotedMessageState: () => void;\n /**\n * Custom UI component for commands button.\n *\n * Defaults to and accepts same props as: [CommandsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/commands-button/)\n */\n CommandsButton: React.ComponentType<CommandsButtonProps<StreamChatGenerics>>;\n /**\n * Custom UI component to display the remaining cooldown a user will have to wait before\n * being allowed to send another message. This component is displayed in place of the\n * send button for the MessageInput component.\n *\n * **default** [CooldownTimer](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/CooldownTimer.tsx)\n */\n CooldownTimer: React.ComponentType<CooldownTimerProps>;\n editing: boolean | MessageType<StreamChatGenerics>;\n editMessage: StreamChat<StreamChatGenerics>['updateMessage'];\n\n /**\n * Custom UI component for FileUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/FileUploadPreview.tsx\n */\n FileUploadPreview: React.ComponentType<FileUploadPreviewProps<StreamChatGenerics>>;\n\n /** When false, CommandsButton will be hidden */\n hasCommands: boolean;\n /** When false, FileSelectorIcon will be hidden */\n hasFilePicker: boolean;\n /** When false, ImageSelectorIcon will be hidden */\n hasImagePicker: boolean;\n /**\n * Custom UI component for ImageUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/ImageUploadPreview.tsx\n */\n ImageUploadPreview: React.ComponentType<ImageUploadPreviewProps<StreamChatGenerics>>;\n InputEditingStateHeader: React.ComponentType<InputEditingStateHeaderProps<StreamChatGenerics>>;\n InputGiphySearch: React.ComponentType<InputGiphySearchProps<StreamChatGenerics>>;\n InputReplyStateHeader: React.ComponentType<InputReplyStateHeaderProps<StreamChatGenerics>>;\n /** Limit on allowed number of files to attach at a time. */\n maxNumberOfFiles: number;\n /**\n * Custom UI component for more options button.\n *\n * Defaults to and accepts same props as: [MoreOptionsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/more-options-button/)\n */\n MoreOptionsButton: React.ComponentType<MoreOptionsButtonProps<StreamChatGenerics>>;\n /** Limit on the number of lines in the text input before scrolling */\n numberOfLines: number;\n quotedMessage: boolean | MessageType<StreamChatGenerics>;\n /**\n * Custom UI component for send button.\n *\n * Defaults to and accepts same props as: [SendButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/send-button/)\n */\n SendButton: React.ComponentType<SendButtonProps<StreamChatGenerics>>;\n sendImageAsync: boolean;\n sendMessage: (message: Partial<StreamMessage<StreamChatGenerics>>) => Promise<void>;\n setQuotedMessageState: (message: MessageType<StreamChatGenerics>) => void;\n /**\n * Custom UI component to render checkbox with text (\"Also send to channel\") in Thread's input box.\n * When ticked, message will also be sent in parent channel.\n */\n ShowThreadMessageInChannelButton: React.ComponentType<{\n threadList?: boolean;\n }>;\n /**\n * Custom UI component to render upload progress indicator on attachment preview.\n *\n * **Default** [UploadProgressIndicator](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/UploadProgressIndicator.tsx)\n */\n UploadProgressIndicator: React.ComponentType<UploadProgressIndicatorProps>;\n /**\n * Additional props for underlying TextInput component. These props will be forwarded as it is to TextInput component.\n *\n * @see See https://reactnative.dev/docs/textinput#reference\n */\n additionalTextInputProps?: TextInputProps;\n /** Max number of suggestions to display in autocomplete list. Defaults to 10. */\n autoCompleteSuggestionsLimit?: number;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n autoCompleteTriggerSettings?: (\n settings: ACITriggerSettingsParams<StreamChatGenerics>,\n ) => TriggerSettings<StreamChatGenerics>;\n /**\n * Compress image with quality (from 0 to 1, where 1 is best quality).\n * On iOS, values larger than 0.8 don't produce a noticeable quality increase in most images,\n * while a value of 0.8 will reduce the file size by about half or less compared to a value of 1.\n * Image picker defaults to 0.8 for iOS and 1 for Android\n */\n compressImageQuality?: number;\n /**\n * Override file upload request\n *\n * @param file File object - { uri: '', name: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doDocUploadRequest?: (\n file: {\n name: string;\n size?: string | number;\n type?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n /**\n * Override image upload request\n *\n * @param file File object - { uri: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doImageUploadRequest?: (\n file: {\n name?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n\n /** Initial value to set on input */\n initialValue?: string;\n /**\n * Custom UI component for AutoCompleteInput.\n * Has access to all of [MessageInputContext](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/messageInputContext/MessageInputContext.tsx)\n */\n Input?: React.ComponentType<\n Omit<MessageInputProps<StreamChatGenerics>, 'Input'> &\n InputButtonsProps<StreamChatGenerics> & {\n getUsers: () => UserResponse<StreamChatGenerics>[];\n }\n >;\n /**\n * Custom UI component to override buttons on left side of input box\n * Defaults to [InputButtons](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/InputButtons.tsx),\n * which contain following components/buttons:\n *\n * - AttachButton\n * - CommandsButtom\n *\n * You have access to following prop functions:\n *\n * - closeAttachmentPicker\n * - openAttachmentPicker\n * - openCommandsPicker\n * - toggleAttachmentPicker\n */\n InputButtons?: React.ComponentType<InputButtonsProps<StreamChatGenerics>>;\n maxMessageLength?: number;\n mentionAllAppUsersEnabled?: boolean;\n /** Object containing filters/sort/options overrides for an @mention user query */\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n /**\n * Callback that is called when the text input's text changes. Changed text is passed as a single string argument to the callback handler.\n */\n onChangeText?: (newText: string) => void;\n SendMessageDisallowedIndicator?: React.ComponentType;\n /**\n * ref for input setter function\n *\n * @param ref [Ref object](https://reactjs.org/docs/refs-and-the-dom.html) for underling `TextInput` component.\n *\n * @overrideType Function\n */\n setInputRef?: (ref: TextInput | null) => void;\n};\n\nexport type MessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = LocalMessageInputContext<StreamChatGenerics> &\n Omit<InputMessageInputContextValue<StreamChatGenerics>, 'sendMessage'>;\n\nexport const MessageInputContext = React.createContext(\n DEFAULT_BASE_CONTEXT_VALUE as MessageInputContextValue,\n);\n\nexport const MessageInputProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value: InputMessageInputContextValue<StreamChatGenerics>;\n}>) => {\n const { closePicker, openPicker, selectedPicker, setSelectedPicker } =\n useAttachmentPickerContext();\n const { appSettings, client } = useChatContext<StreamChatGenerics>();\n\n const getFileUploadConfig = () => {\n const fileConfig = appSettings?.app?.file_upload_config;\n if (fileConfig !== null || fileConfig !== undefined) {\n return fileConfig;\n } else {\n return {};\n }\n };\n\n const blockedFileExtensionTypes = getFileUploadConfig()?.blocked_file_extensions;\n const blockedFileMimeTypes = getFileUploadConfig()?.blocked_mime_types;\n\n const getImageUploadConfig = () => {\n const imageConfig = appSettings?.app?.image_upload_config;\n if (imageConfig !== null || imageConfig !== undefined) {\n return imageConfig;\n }\n return {};\n };\n\n const blockedImageExtensionTypes = getImageUploadConfig()?.blocked_file_extensions;\n const blockedImageMimeTypes = getImageUploadConfig()?.blocked_mime_types;\n\n const channelCapabities = useOwnCapabilitiesContext();\n\n const { channel, giphyEnabled } = useChannelContext<StreamChatGenerics>();\n const { thread } = useThreadContext<StreamChatGenerics>();\n const { t } = useTranslationContext();\n const inputBoxRef = useRef<TextInput | null>(null);\n const sending = useRef(false);\n\n const [asyncIds, setAsyncIds] = useState<string[]>([]);\n const [asyncUploads, setAsyncUploads] = useState<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>({});\n const [giphyActive, setGiphyActive] = useState(false);\n const [sendThreadMessageInChannel, setSendThreadMessageInChannel] = useState(false);\n const { editing, hasFilePicker, hasImagePicker, initialValue } = value;\n const {\n fileUploads,\n imageUploads,\n mentionedUsers,\n numberOfUploads,\n setFileUploads,\n setImageUploads,\n setMentionedUsers,\n setNumberOfUploads,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n } = useMessageDetailsForState<StreamChatGenerics>(editing, initialValue);\n const { endsAt: cooldownEndsAt, start: startCooldown } = useCooldown<StreamChatGenerics>();\n\n const threadId = thread?.id;\n useEffect(() => {\n setSendThreadMessageInChannel(false);\n }, [threadId]);\n\n const appendText = (newText: string) => {\n setText((prevText) => `${prevText}${newText}`);\n };\n\n /** Checks if the message is valid or not. Accordingly we can enable/disable send button */\n const isValidMessage = () => {\n if (text && text.trim()) {\n return true;\n }\n\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n return false;\n };\n\n const onChange = (newText: string) => {\n if (sending.current) {\n return;\n }\n setText(newText);\n\n if (newText && channel && channelCapabities.sendTypingEvents) {\n logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');\n }\n\n if (value.onChangeText) {\n value.onChangeText(newText);\n }\n };\n\n const openCommandsPicker = () => {\n appendText('/');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openMentionsPicker = () => {\n appendText('@');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openAttachmentPicker = () => {\n if (hasImagePicker) {\n Keyboard.dismiss();\n openPicker();\n setSelectedPicker('images');\n /**\n * TODO: Remove this, this is the result of\n * the bottom sheet now having some keyboard\n * handling baked in, creating an issue when\n * we call dismiss and open in short order.\n * https://github.com/gorhom/react-native-bottom-sheet/issues/446\n */\n setTimeout(openPicker, 600);\n } else if (hasFilePicker) {\n pickFile();\n }\n };\n\n const closeAttachmentPicker = () => {\n setSelectedPicker(undefined);\n closePicker();\n };\n\n const toggleAttachmentPicker = () => {\n if (selectedPicker) {\n closeAttachmentPicker();\n } else {\n openAttachmentPicker();\n }\n };\n\n const onSelectItem = (item: UserResponse<StreamChatGenerics>) => {\n setMentionedUsers((prevMentionedUsers) => [...prevMentionedUsers, item.id]);\n };\n\n const pickFile = async () => {\n if (numberOfUploads >= value.maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return;\n }\n\n const result = await pickDocument({\n maxNumberOfFiles: value.maxNumberOfFiles - numberOfUploads,\n });\n if (!result.cancelled && result.docs) {\n result.docs.forEach((doc) => {\n /**\n * TODO: The current tight coupling of images to the image\n * picker does not allow images picked from the file picker\n * to be rendered in a preview via the uploadNewImage call.\n * This should be updated alongside allowing image a file\n * uploads together.\n */\n uploadNewFile(doc);\n });\n }\n };\n\n const removeFile = (id: string) => {\n if (fileUploads.some((file) => file.id === id)) {\n setFileUploads((prevFileUploads) => prevFileUploads.filter((file) => file.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const removeImage = (id: string) => {\n if (imageUploads.some((image) => image.id === id)) {\n setImageUploads((prevImageUploads) => prevImageUploads.filter((image) => image.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const resetInput = (pendingAttachments: Attachment<StreamChatGenerics>[] = []) => {\n setFileUploads([]);\n setGiphyActive(false);\n setShowMoreOptions(true);\n setImageUploads([]);\n setMentionedUsers([]);\n setNumberOfUploads(\n (prevNumberOfUploads) => prevNumberOfUploads - (pendingAttachments?.length || 0),\n );\n setText('');\n };\n\n // TODO: Figure out why this is async, as it doesn't await any promise.\n // eslint-disable-next-line require-await\n const sendMessage = async () => {\n if (sending.current) {\n return;\n }\n\n if (!channelCapabities.sendLinks && !!text.match(urlRegex)) {\n Alert.alert(t('Links are disabled'), t('Sending links is not allowed in this conversation'));\n\n return;\n }\n\n sending.current = true;\n\n startCooldown();\n\n const prevText = giphyEnabled && giphyActive ? `/giphy ${text}` : text;\n setText('');\n if (inputBoxRef.current) {\n inputBoxRef.current.clear();\n }\n\n const attachments = [] as Attachment<StreamChatGenerics>[];\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n if (value.sendImageAsync) {\n /**\n * If user hit send before image uploaded, push ID into a queue to later\n * be matched with the successful CDN response\n */\n setAsyncIds((prevAsyncIds) => [...prevAsyncIds, image.id]);\n } else {\n sending.current = false;\n return setText(prevText);\n }\n }\n\n // To get the mime type of the image from the file name and send it as an response for an image\n const mime_type: string | boolean = lookup(image.file.filename as string);\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n attachments.push({\n fallback: image.file.name,\n image_url: image.url,\n mime_type: mime_type ? mime_type : undefined,\n original_height: image.height,\n original_width: image.width,\n type: 'image',\n });\n }\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n sending.current = false;\n return;\n }\n const mime_type: string | boolean = lookup(file.file.name as string);\n\n if (file.state === FileState.UPLOADED || file.state === FileState.FINISHED) {\n if (file.file.type?.startsWith('image/')) {\n attachments.push({\n fallback: file.file.name,\n image_url: file.url,\n mime_type: mime_type ? mime_type : undefined,\n type: 'image',\n });\n } else if (file.file.type?.startsWith('audio/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'audio',\n });\n } else if (file.file.type?.startsWith('video/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n thumb_url: file.thumb_url,\n title: file.file.name,\n type: 'video',\n });\n } else {\n attachments.push({\n asset_url: file.url,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'file',\n });\n }\n }\n }\n\n // Disallow sending message if its empty.\n if (!prevText && attachments.length === 0) {\n sending.current = false;\n return;\n }\n\n if (value.editing && !isEditingBoolean(value.editing)) {\n const updatedMessage = {\n ...value.editing,\n attachments,\n mentioned_users: mentionedUsers,\n quoted_message: undefined,\n text: prevText,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0];\n\n // TODO: Remove this line and show an error when submit fails\n value.clearEditingState();\n\n const updateMessagePromise = value.editMessage(updatedMessage).then(value.clearEditingState);\n resetInput(attachments);\n logChatPromiseExecution(updateMessagePromise, 'update message');\n\n sending.current = false;\n } else {\n try {\n value.sendMessage({\n attachments,\n mentioned_users: uniq(mentionedUsers),\n /** Parent message id - in case of thread */\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: prevText,\n } as unknown as StreamMessage<StreamChatGenerics>);\n\n value.clearQuotedMessageState();\n sending.current = false;\n resetInput(attachments);\n } catch (_error) {\n sending.current = false;\n if (value.quotedMessage && typeof value.quotedMessage !== 'boolean') {\n value.setQuotedMessageState(value.quotedMessage);\n }\n setText(prevText.slice(giphyEnabled && giphyActive ? 7 : 0)); // 7 because of '/giphy ' length\n console.log('Failed to send message');\n }\n }\n };\n\n const sendMessageAsync = (id: string) => {\n const image = asyncUploads[id];\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n return;\n }\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n const attachments = [\n {\n image_url: image.url,\n type: 'image',\n },\n ] as StreamMessage<StreamChatGenerics>['attachments'];\n\n startCooldown();\n try {\n value.sendMessage({\n attachments,\n mentioned_users: [],\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: '',\n } as unknown as Partial<StreamMessage<StreamChatGenerics>>);\n\n setAsyncIds((prevAsyncIds) => prevAsyncIds.splice(prevAsyncIds.indexOf(id), 1));\n setAsyncUploads((prevAsyncUploads) => {\n delete prevAsyncUploads[id];\n return prevAsyncUploads;\n });\n\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n } catch (_error) {\n console.log('Failed');\n }\n }\n };\n\n const setInputBoxRef = (ref: TextInput | null) => {\n inputBoxRef.current = ref;\n if (value.setInputRef) {\n value.setInputRef(ref);\n }\n };\n\n const triggerSettings = channel\n ? value.autoCompleteTriggerSettings\n ? value.autoCompleteTriggerSettings({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ACITriggerSettings<StreamChatGenerics>({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ({} as TriggerSettings<StreamChatGenerics>);\n\n const updateMessage = async () => {\n try {\n if (!isEditingBoolean(value.editing)) {\n await client.updateMessage({\n ...value.editing,\n quoted_message: undefined,\n text: giphyEnabled && giphyActive ? `/giphy ${text}` : text,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0]);\n }\n\n resetInput();\n value.clearEditingState();\n } catch (error) {\n console.log(error);\n }\n };\n\n const regExcondition = /File (extension \\.\\w{2,4}|type \\S+) is not supported/;\n\n const getUploadSetStateAction = <UploadType extends ImageUpload | FileUpload>(\n id: string,\n fileState: FileStateValue,\n extraData: Partial<UploadType> = {},\n ): React.SetStateAction<UploadType[]> => {\n const uploads: (prevUploads: UploadType[]) => UploadType[] = (prevUploads: UploadType[]) =>\n prevUploads.map((prevUpload) => {\n if (prevUpload.id === id) {\n return {\n ...prevUpload,\n ...extraData,\n state: fileState,\n };\n }\n return prevUpload;\n });\n\n return uploads;\n };\n\n const handleFileOrImageUploadError = (error: unknown, isImageError: boolean, id: string) => {\n if (isImageError) {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setImageUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n\n return setImageUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n } else {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setFileUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n return setFileUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n }\n };\n\n const uploadFile = async ({ newFile }: { newFile: FileUpload }) => {\n const { file, id } = newFile;\n\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADING));\n\n let response: Partial<SendFileAPIResponse> = {};\n try {\n if (value.doDocUploadRequest) {\n response = await value.doDocUploadRequest(file, channel);\n } else if (channel && file.uri) {\n response = await channel.sendFile(file.uri, file.name, file.type);\n }\n const extraData: Partial<FileUpload> = { thumb_url: response.thumb_url, url: response.file };\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADED, extraData));\n } catch (error: unknown) {\n handleFileOrImageUploadError(error, false, id);\n }\n };\n\n const uploadImage = async ({ newImage }: { newImage: ImageUpload }) => {\n const { file, id } = newImage || {};\n\n if (!file) {\n return;\n }\n\n let response = {} as SendFileAPIResponse;\n\n try {\n /**\n * Expo now uses the assets-library which is also how remote\n * native files are presented. We now return a file id from Expo\n * only, if that file id exits we call getLocalAssetUri to download\n * the asset for expo before uploading it. We do the same for native\n * if the uri includes assets-library, this uses the CameraRoll.save\n * function to also create a local uri.\n */\n const localUri = file.id\n ? await getLocalAssetUri(file.id)\n : file.uri?.match(/assets-library/)\n ? await getLocalAssetUri(file.uri)\n : file.uri;\n\n const uri = file.name || localUri || '';\n /**\n * We skip compression if:\n * - the file is from the camera as that should already be compressed\n * - the file has not height/width value to maintain for compression\n * - the compressImageQuality number is not present or is 1 (meaning no compression)\n */\n const compressedUri = await (file.source === 'camera' ||\n !file.height ||\n !file.width ||\n typeof value.compressImageQuality !== 'number' ||\n value.compressImageQuality === 1\n ? uri\n : compressImage({\n compressImageQuality: value.compressImageQuality,\n height: file.height,\n uri,\n width: file.width,\n }));\n const filename = uri.replace(/^(file:\\/\\/|content:\\/\\/|assets-library:\\/\\/)/, '');\n const contentType = lookup(filename) || 'multipart/form-data';\n if (value.doImageUploadRequest) {\n response = await value.doImageUploadRequest(file, channel);\n } else if (compressedUri && channel) {\n if (value.sendImageAsync) {\n channel.sendImage(compressedUri, file.filename, contentType).then((res) => {\n if (asyncIds.includes(id)) {\n // Evaluates to true if user hit send before image successfully uploaded\n setAsyncUploads((prevAsyncUploads) => {\n prevAsyncUploads[id] = {\n ...prevAsyncUploads[id],\n state: FileState.UPLOADED,\n url: res.file,\n };\n return prevAsyncUploads;\n });\n } else {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n url: res.file,\n });\n setImageUploads(newImageUploads);\n }\n });\n } else {\n response = await channel.sendImage(compressedUri, file.filename, contentType);\n }\n }\n\n if (Object.keys(response).length) {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n height: file.height,\n url: response.file,\n width: file.width,\n });\n setImageUploads(newImageUploads);\n }\n } catch (error) {\n handleFileOrImageUploadError(error, true, id);\n }\n };\n\n const uploadNewFile = async (file: {\n name: string;\n size?: number | string;\n type?: string;\n uri?: string;\n }) => {\n const id: string = generateRandomId();\n const mimeType: string | boolean = lookup(file.name);\n\n const isBlockedFileExtension: boolean | undefined = blockedFileExtensionTypes?.some(\n (fileExtensionType: string) => file.name?.includes(fileExtensionType),\n );\n const isBlockedFileMimeType: boolean | undefined = blockedFileMimeTypes?.some(\n (mimeType: string) => file.name?.includes(mimeType),\n );\n\n const fileState =\n isBlockedFileExtension || isBlockedFileMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newFile: FileUpload = {\n file: { ...file, type: mimeType || file?.type },\n id,\n state: fileState,\n };\n\n await Promise.all([\n setFileUploads((prevFileUploads) => prevFileUploads.concat([newFile])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedFileExtension) {\n uploadFile({ newFile });\n }\n };\n\n const uploadNewImage = async (image: Asset) => {\n const id = generateRandomId();\n\n const isBlockedImageMimeType = blockedImageMimeTypes?.some((mimeType: string) =>\n image.uri?.includes(mimeType),\n );\n\n const isBlockedImageExtension = blockedImageExtensionTypes?.some((imageExtensionType: string) =>\n image.uri?.includes(imageExtensionType),\n );\n\n const imageState =\n isBlockedImageExtension || isBlockedImageMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newImage: ImageUpload = {\n file: image,\n id,\n state: imageState,\n };\n\n await Promise.all([\n setImageUploads((prevImageUploads) => prevImageUploads.concat([newImage])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedImageExtension) {\n uploadImage({ newImage });\n }\n };\n\n const messageInputContext = useCreateMessageInputContext({\n appendText,\n asyncIds,\n asyncUploads,\n closeAttachmentPicker,\n cooldownEndsAt,\n fileUploads,\n giphyActive,\n imageUploads,\n inputBoxRef,\n isValidMessage,\n mentionedUsers,\n numberOfUploads,\n onChange,\n onSelectItem,\n openAttachmentPicker,\n openCommandsPicker,\n openFilePicker: pickFile,\n openMentionsPicker,\n pickFile,\n removeFile,\n removeImage,\n resetInput,\n selectedPicker,\n sending,\n sendMessageAsync,\n sendThreadMessageInChannel,\n setAsyncIds,\n setAsyncUploads,\n setFileUploads,\n setGiphyActive,\n setImageUploads,\n setInputBoxRef,\n setMentionedUsers,\n setNumberOfUploads,\n setSendThreadMessageInChannel,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n thread,\n toggleAttachmentPicker,\n triggerSettings,\n updateMessage,\n uploadFile,\n uploadImage,\n uploadNewFile,\n uploadNewImage,\n ...value,\n sendMessage, // overriding the originally passed in sendMessage\n });\n\n return (\n <MessageInputContext.Provider\n value={messageInputContext as unknown as MessageInputContextValue}\n >\n {children}\n </MessageInputContext.Provider>\n );\n};\n\nexport const useMessageInputContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const contextValue = useContext(\n MessageInputContext,\n ) as unknown as MessageInputContextValue<StreamChatGenerics>;\n\n if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {\n throw new Error(\n `The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure you have configured Channel component correctly - https://getstream.io/chat/docs/sdk/reactnative/basics/hello_stream_chat/#channel`,\n );\n }\n\n return contextValue;\n};\n\n/**\n * Typescript currently does not support partial inference so if MessageInputContext\n * typing is desired while using the HOC withMessageInputContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withMessageInputContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>> => {\n const WithMessageInputContextComponent = (\n props: Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>,\n ) => {\n const messageInputContext = useMessageInputContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...messageInputContext} />;\n };\n WithMessageInputContextComponent.displayName = `WithMessageInputContext${getDisplayName(\n Component,\n )}`;\n return WithMessageInputContextComponent;\n};\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.11.1-beta.1"
2
+ "version": "4.11.1-beta.2"
3
3
  }
@@ -128,7 +128,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
128
128
 
129
129
  var share = function () {
130
130
  var _ref = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
131
- var _photo$mime_type, _photo$user, _photo$mime_type2, extension, localFile;
131
+ var _photo$mime_type, _photo$user, extension, localFile;
132
132
 
133
133
  return _regenerator["default"].wrap(function _callee$(_context) {
134
134
  while (1) {
@@ -147,7 +147,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
147
147
  localFile = _context.sent;
148
148
  _context.next = 8;
149
149
  return (0, _native.shareImage)({
150
- type: (_photo$mime_type2 = photo.mime_type) != null ? _photo$mime_type2 : 'image/jpeg',
150
+ type: photo.mime_type || 'image/jpeg',
151
151
  url: localFile
152
152
  });
153
153
 
@@ -255,6 +255,7 @@ var ImageGalleryFooterWithContext = function ImageGalleryFooterWithContext(props
255
255
  columnNumber: 15
256
256
  }
257
257
  }, ShareIcon ? ShareIcon : _react["default"].createElement(_icons.Share, {
258
+ pathFill: black,
258
259
  __self: _this,
259
260
  __source: {
260
261
  fileName: _jsxFileName,
@@ -1 +1 @@
1
- {"version":3,"sources":["ImageGalleryFooter.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","imageCountText","fontSize","fontWeight","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","wrapper","bottom","left","position","right","ImageGalleryFooterWithContext","props","centerElement","duration","GridIcon","leftElement","onPlayPause","onProgressDrag","opacity","openGridView","paused","photo","photoLength","progress","rightElement","selectedIndex","ShareIcon","videoControlElement","visible","setHeight","shareMenuOpen","setShareMenuOpen","theme","colors","black","white","imageGallery","footer","container","t","footerStyle","value","transform","translateY","Extrapolate","CLAMP","share","extension","mime_type","split","fileName","user","id","messageId","fromUrl","uri","localFile","type","url","console","log","event","nativeEvent","layout","backgroundColor","color","index","areEqual","prevProps","nextProps","prevDuration","prevPaused","prevProgress","prevSelectedIndex","nextDuration","nextPaused","nextProgress","nextSelectedIndex","isDurationEqual","isPausedEqual","isProgressEqual","isSelectedIndexEqual","MemoizedImageGalleryFooter","React","memo","ImageGalleryFooter","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { SafeAreaView, StyleSheet, Text, TouchableOpacity, View, ViewStyle } from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { ImageGalleryVideoControl } from './ImageGalleryVideoControl';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Grid as GridIconDefault, Share as ShareIconDefault } from '../../../icons';\nimport { deleteFile, saveFile, shareImage } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { Photo } from '../ImageGallery';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n imageCountText: {\n fontSize: 16,\n fontWeight: '600',\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n flex: 1,\n justifyContent: 'center',\n marginRight: 8,\n },\n wrapper: {\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n },\n});\n\nexport type ImageGalleryFooterCustomComponent<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ({\n openGridView,\n photo,\n share,\n shareMenuOpen,\n}: {\n openGridView: () => void;\n share: () => Promise<void>;\n shareMenuOpen: boolean;\n photo?: Photo<StreamChatGenerics>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryFooterVideoControlProps = {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n paused: boolean;\n progress: number;\n};\n\nexport type ImageGalleryFooterVideoControlComponent = ({\n duration,\n onPlayPause,\n onProgressDrag,\n paused,\n progress,\n}: ImageGalleryFooterVideoControlProps) => React.ReactElement | null;\n\nexport type ImageGalleryFooterCustomComponentProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n centerElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n GridIcon?: React.ReactElement;\n leftElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n rightElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n ShareIcon?: React.ReactElement;\n videoControlElement?: ImageGalleryFooterVideoControlComponent;\n};\n\ntype ImageGalleryFooterPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterCustomComponentProps<StreamChatGenerics> & {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n opacity: Animated.SharedValue<number>;\n openGridView: () => void;\n paused: boolean;\n photo: Photo<StreamChatGenerics>;\n photoLength: number;\n progress: number;\n selectedIndex: number;\n visible: Animated.SharedValue<number>;\n};\n\nexport const ImageGalleryFooterWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n centerElement,\n duration,\n GridIcon,\n leftElement,\n onPlayPause,\n onProgressDrag,\n opacity,\n openGridView,\n paused,\n photo,\n photoLength,\n progress,\n rightElement,\n selectedIndex,\n ShareIcon,\n videoControlElement,\n visible,\n } = props;\n\n const [height, setHeight] = useState(200);\n const [shareMenuOpen, setShareMenuOpen] = useState(false);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n footer: {\n centerContainer,\n container,\n imageCountText,\n innerContainer,\n leftContainer,\n rightContainer,\n },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n const footerStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [height, 0], Extrapolate.CLAMP),\n },\n ],\n }),\n [height],\n );\n\n const share = async () => {\n setShareMenuOpen(true);\n try {\n const extension = photo.mime_type?.split('/')[1] || 'jpg';\n const localFile = await saveFile({\n fileName: `${photo.user?.id || 'ChatPhoto'}-${\n photo.messageId\n }-${selectedIndex}.${extension}`,\n fromUrl: photo.uri,\n });\n // `image/jpeg` is added for the case where the mime_type isn't available for a file/image\n await shareImage({ type: photo.mime_type ?? 'image/jpeg', url: localFile });\n await deleteFile({ uri: localFile });\n } catch (error) {\n console.log(error);\n }\n setShareMenuOpen(false);\n };\n\n return (\n <Animated.View\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n style={styles.wrapper}\n >\n <ReanimatedSafeAreaView style={[container, footerStyle, { backgroundColor: white }]}>\n {photo.type === 'video' ? (\n videoControlElement ? (\n videoControlElement({ duration, onPlayPause, onProgressDrag, paused, progress })\n ) : (\n <ImageGalleryVideoControl\n duration={duration}\n onPlayPause={onPlayPause}\n onProgressDrag={onProgressDrag}\n paused={paused}\n progress={progress}\n />\n )\n ) : null}\n <View style={[styles.innerContainer, innerContainer, { backgroundColor: white }]}>\n {leftElement ? (\n leftElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity disabled={shareMenuOpen} onPress={share}>\n <View style={[styles.leftContainer, leftContainer]}>\n {ShareIcon ? ShareIcon : <ShareIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.imageCountText, { color: black }, imageCountText]}>\n {t('{{ index }} of {{ photoLength }}', {\n index: photoLength - selectedIndex,\n photoLength,\n })}\n </Text>\n </View>\n )}\n {rightElement ? (\n rightElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity onPress={openGridView}>\n <View style={[styles.rightContainer, rightContainer]}>\n {GridIcon ? GridIcon : <GridIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n </View>\n </ReanimatedSafeAreaView>\n </Animated.View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n nextProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n duration: prevDuration,\n paused: prevPaused,\n progress: prevProgress,\n selectedIndex: prevSelectedIndex,\n } = prevProps;\n const {\n duration: nextDuration,\n paused: nextPaused,\n progress: nextProgress,\n selectedIndex: nextSelectedIndex,\n } = nextProps;\n\n const isDurationEqual = prevDuration === nextDuration;\n if (!isDurationEqual) return false;\n\n const isPausedEqual = prevPaused === nextPaused;\n if (!isPausedEqual) return false;\n\n const isProgressEqual = prevProgress === nextProgress;\n if (!isProgressEqual) return false;\n\n const isSelectedIndexEqual = prevSelectedIndex === nextSelectedIndex;\n if (!isSelectedIndexEqual) return false;\n\n return true;\n};\n\nconst MemoizedImageGalleryFooter = React.memo(\n ImageGalleryFooterWithContext,\n areEqual,\n) as typeof ImageGalleryFooterWithContext;\n\nexport type ImageGalleryFooterProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterPropsWithContext<StreamChatGenerics>;\n\nexport const ImageGalleryFooter = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterProps<StreamChatGenerics>,\n) => <MemoizedImageGalleryFooter {...props} />;\n\nImageGalleryFooter.displayName = 'ImageGalleryFooter{imageGallery{footer}}';\n"]}
1
+ {"version":3,"sources":["ImageGalleryFooter.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","imageCountText","fontSize","fontWeight","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","wrapper","bottom","left","position","right","ImageGalleryFooterWithContext","props","centerElement","duration","GridIcon","leftElement","onPlayPause","onProgressDrag","opacity","openGridView","paused","photo","photoLength","progress","rightElement","selectedIndex","ShareIcon","videoControlElement","visible","setHeight","shareMenuOpen","setShareMenuOpen","theme","colors","black","white","imageGallery","footer","container","t","footerStyle","value","transform","translateY","Extrapolate","CLAMP","share","extension","mime_type","split","fileName","user","id","messageId","fromUrl","uri","localFile","type","url","console","log","event","nativeEvent","layout","backgroundColor","color","index","areEqual","prevProps","nextProps","prevDuration","prevPaused","prevProgress","prevSelectedIndex","nextDuration","nextPaused","nextProgress","nextSelectedIndex","isDurationEqual","isPausedEqual","isProgressEqual","isSelectedIndexEqual","MemoizedImageGalleryFooter","React","memo","ImageGalleryFooter","displayName"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;AAKA,IAAMA,sBAAsB,GAAGC,kCAASC,uBAAT,GAC3BD,kCAASC,uBAAT,CAAiCC,yBAAjC,CAD2B,GAE3BA,yBAFJ;;AAIA,IAAMC,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,eAAe,EAAE;AACfC,IAAAA,UAAU,EAAE,QADG;AAEfC,IAAAA,IAAI,EAAE,CAFS;AAGfC,IAAAA,cAAc,EAAE;AAHD,GADc;AAM/BC,EAAAA,cAAc,EAAE;AACdC,IAAAA,QAAQ,EAAE,EADI;AAEdC,IAAAA,UAAU,EAAE;AAFE,GANe;AAU/BC,EAAAA,cAAc,EAAE;AACdC,IAAAA,aAAa,EAAE,KADD;AAEdC,IAAAA,MAAM,EAAE;AAFM,GAVe;AAc/BC,EAAAA,aAAa,EAAE;AACbR,IAAAA,IAAI,EAAE,CADO;AAEbC,IAAAA,cAAc,EAAE,QAFH;AAGbQ,IAAAA,UAAU,EAAE;AAHC,GAdgB;AAmB/BC,EAAAA,cAAc,EAAE;AACdV,IAAAA,IAAI,EAAE,CADQ;AAEdC,IAAAA,cAAc,EAAE,QAFF;AAGdU,IAAAA,WAAW,EAAE;AAHC,GAnBe;AAwB/BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,MAAM,EAAE,CADD;AAEPC,IAAAA,IAAI,EAAE,CAFC;AAGPC,IAAAA,QAAQ,EAAE,UAHH;AAIPC,IAAAA,KAAK,EAAE;AAJA;AAxBsB,CAAlB,CAAf;;AAyFO,IAAMC,6BAA6B,GAAG,SAAhCA,6BAAgC,CAG3CC,KAH2C,EAIxC;AACH,MACEC,aADF,GAkBID,KAlBJ,CACEC,aADF;AAAA,MAEEC,QAFF,GAkBIF,KAlBJ,CAEEE,QAFF;AAAA,MAGEC,QAHF,GAkBIH,KAlBJ,CAGEG,QAHF;AAAA,MAIEC,WAJF,GAkBIJ,KAlBJ,CAIEI,WAJF;AAAA,MAKEC,WALF,GAkBIL,KAlBJ,CAKEK,WALF;AAAA,MAMEC,cANF,GAkBIN,KAlBJ,CAMEM,cANF;AAAA,MAOEC,OAPF,GAkBIP,KAlBJ,CAOEO,OAPF;AAAA,MAQEC,YARF,GAkBIR,KAlBJ,CAQEQ,YARF;AAAA,MASEC,MATF,GAkBIT,KAlBJ,CASES,MATF;AAAA,MAUEC,KAVF,GAkBIV,KAlBJ,CAUEU,KAVF;AAAA,MAWEC,WAXF,GAkBIX,KAlBJ,CAWEW,WAXF;AAAA,MAYEC,QAZF,GAkBIZ,KAlBJ,CAYEY,QAZF;AAAA,MAaEC,YAbF,GAkBIb,KAlBJ,CAaEa,YAbF;AAAA,MAcEC,aAdF,GAkBId,KAlBJ,CAcEc,aAdF;AAAA,MAeEC,SAfF,GAkBIf,KAlBJ,CAeEe,SAfF;AAAA,MAgBEC,mBAhBF,GAkBIhB,KAlBJ,CAgBEgB,mBAhBF;AAAA,MAiBEC,OAjBF,GAkBIjB,KAlBJ,CAiBEiB,OAjBF;;AAoBA,kBAA4B,qBAAS,GAAT,CAA5B;AAAA;AAAA,MAAO5B,MAAP;AAAA,MAAe6B,SAAf;;AACA,mBAA0C,qBAAS,KAAT,CAA1C;AAAA;AAAA,MAAOC,aAAP;AAAA,MAAsBC,gBAAtB;;AACA,kBAcI,6BAdJ;AAAA,kCACEC,KADF;AAAA,8CAEIC,MAFJ;AAAA,MAEcC,KAFd,yBAEcA,KAFd;AAAA,MAEqBC,KAFrB,yBAEqBA,KAFrB;AAAA,8CAGIC,YAHJ,CAIMC,MAJN;AAAA,MAKQ9C,eALR,yBAKQA,eALR;AAAA,MAMQ+C,SANR,yBAMQA,SANR;AAAA,MAOQ3C,cAPR,yBAOQA,cAPR;AAAA,MAQQG,cARR,yBAQQA,cARR;AAAA,MASQG,aATR,yBASQA,aATR;AAAA,MAUQE,cAVR,yBAUQA,cAVR;;AAeA,8BAAc,gDAAd;AAAA,MAAQoC,CAAR,yBAAQA,CAAR;;AAEA,MAAMC,WAAW,GAAG,6CAClB;AAAA,WAAO;AACLtB,MAAAA,OAAO,EAAEA,OAAO,CAACuB,KADZ;AAELC,MAAAA,SAAS,EAAE,CACT;AACEC,QAAAA,UAAU,EAAE,wCAAYf,OAAO,CAACa,KAApB,EAA2B,CAAC,CAAD,EAAI,CAAJ,CAA3B,EAAmC,CAACzC,MAAD,EAAS,CAAT,CAAnC,EAAgD4C,mCAAYC,KAA5D;AADd,OADS;AAFN,KAAP;AAAA,GADkB,EASlB,CAAC7C,MAAD,CATkB,CAApB;;AAYA,MAAM8C,KAAK;AAAA,+EAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AACZf,cAAAA,gBAAgB,CAAC,IAAD,CAAhB;AADY;AAGJgB,cAAAA,SAHI,GAGQ,qBAAA1B,KAAK,CAAC2B,SAAN,sCAAiBC,KAAjB,CAAuB,GAAvB,EAA4B,CAA5B,MAAkC,KAH1C;AAAA;AAAA,qBAIc,sBAAS;AAC/BC,gBAAAA,QAAQ,GAAK,gBAAA7B,KAAK,CAAC8B,IAAN,iCAAYC,EAAZ,KAAkB,WAAvB,UACN/B,KAAK,CAACgC,SADA,SAEJ5B,aAFI,SAEasB,SAHU;AAI/BO,gBAAAA,OAAO,EAAEjC,KAAK,CAACkC;AAJgB,eAAT,CAJd;;AAAA;AAIJC,cAAAA,SAJI;AAAA;AAAA,qBAWJ,wBAAW;AAAEC,gBAAAA,IAAI,EAAEpC,KAAK,CAAC2B,SAAN,IAAmB,YAA3B;AAAyCU,gBAAAA,GAAG,EAAEF;AAA9C,eAAX,CAXI;;AAAA;AAAA;AAAA,qBAYJ,wBAAW;AAAED,gBAAAA,GAAG,EAAEC;AAAP,eAAX,CAZI;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAcVG,cAAAA,OAAO,CAACC,GAAR;;AAdU;AAgBZ7B,cAAAA,gBAAgB,CAAC,KAAD,CAAhB;;AAhBY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAALe,KAAK;AAAA;AAAA;AAAA,KAAX;;AAmBA,SACE,gCAAC,iCAAD,CAAU,IAAV;AACE,IAAA,QAAQ,EAAE,kBAACe,KAAD;AAAA,aAAWhC,SAAS,CAACgC,KAAK,CAACC,WAAN,CAAkBC,MAAlB,CAAyB/D,MAA1B,CAApB;AAAA,KADZ;AAEE,IAAA,aAAa,EAAE,UAFjB;AAGE,IAAA,KAAK,EAAEZ,MAAM,CAACiB,OAHhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKE,gCAAC,sBAAD;AAAwB,IAAA,KAAK,EAAE,CAACiC,SAAD,EAAYE,WAAZ,EAAyB;AAAEwB,MAAAA,eAAe,EAAE7B;AAAnB,KAAzB,CAA/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGd,KAAK,CAACoC,IAAN,KAAe,OAAf,GACC9B,mBAAmB,GACjBA,mBAAmB,CAAC;AAAEd,IAAAA,QAAQ,EAARA,QAAF;AAAYG,IAAAA,WAAW,EAAXA,WAAZ;AAAyBC,IAAAA,cAAc,EAAdA,cAAzB;AAAyCG,IAAAA,MAAM,EAANA,MAAzC;AAAiDG,IAAAA,QAAQ,EAARA;AAAjD,GAAD,CADF,GAGjB,gCAAC,kDAAD;AACE,IAAA,QAAQ,EAAEV,QADZ;AAEE,IAAA,WAAW,EAAEG,WAFf;AAGE,IAAA,cAAc,EAAEC,cAHlB;AAIE,IAAA,MAAM,EAAEG,MAJV;AAKE,IAAA,QAAQ,EAAEG,QALZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAJH,GAYG,IAbN,EAcE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAACnC,MAAM,CAACU,cAAR,EAAwBA,cAAxB,EAAwC;AAAEkE,MAAAA,eAAe,EAAE7B;AAAnB,KAAxC,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGpB,WAAW,GACVA,WAAW,CAAC;AAAEI,IAAAA,YAAY,EAAZA,YAAF;AAAgBE,IAAAA,KAAK,EAALA,KAAhB;AAAuByB,IAAAA,KAAK,EAALA,KAAvB;AAA8BhB,IAAAA,aAAa,EAAbA;AAA9B,GAAD,CADD,GAGV,gCAAC,6BAAD;AAAkB,IAAA,QAAQ,EAAEA,aAA5B;AAA2C,IAAA,OAAO,EAAEgB,KAApD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAC1D,MAAM,CAACa,aAAR,EAAuBA,aAAvB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGyB,SAAS,GAAGA,SAAH,GAAe,gCAAC,YAAD;AAAkB,IAAA,QAAQ,EAAEQ,KAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAD3B,CADF,CAJJ,EAUGtB,aAAa,GACZA,aAAa,CAAC;AAAEO,IAAAA,YAAY,EAAZA,YAAF;AAAgBE,IAAAA,KAAK,EAALA,KAAhB;AAAuByB,IAAAA,KAAK,EAALA,KAAvB;AAA8BhB,IAAAA,aAAa,EAAbA;AAA9B,GAAD,CADD,GAGZ,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAC1C,MAAM,CAACG,eAAR,EAAyBA,eAAzB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAACH,MAAM,CAACO,cAAR,EAAwB;AAAEsE,MAAAA,KAAK,EAAE/B;AAAT,KAAxB,EAA0CvC,cAA1C,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACG4C,CAAC,CAAC,kCAAD,EAAqC;AACrC2B,IAAAA,KAAK,EAAE5C,WAAW,GAAGG,aADgB;AAErCH,IAAAA,WAAW,EAAXA;AAFqC,GAArC,CADJ,CADF,CAbJ,EAsBGE,YAAY,GACXA,YAAY,CAAC;AAAEL,IAAAA,YAAY,EAAZA,YAAF;AAAgBE,IAAAA,KAAK,EAALA,KAAhB;AAAuByB,IAAAA,KAAK,EAALA,KAAvB;AAA8BhB,IAAAA,aAAa,EAAbA;AAA9B,GAAD,CADD,GAGX,gCAAC,6BAAD;AAAkB,IAAA,OAAO,EAAEX,YAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAC/B,MAAM,CAACe,cAAR,EAAwBA,cAAxB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGW,QAAQ,GAAGA,QAAH,GAAc,gCAAC,WAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADzB,CADF,CAzBJ,CAdF,CALF,CADF;AAuDD,CAlIM;;;;AAoIP,IAAMqD,QAAQ,GAAG,SAAXA,QAAW,CACfC,SADe,EAEfC,SAFe,EAGZ;AACH,MACYC,YADZ,GAKIF,SALJ,CACEvD,QADF;AAAA,MAEU0D,UAFV,GAKIH,SALJ,CAEEhD,MAFF;AAAA,MAGYoD,YAHZ,GAKIJ,SALJ,CAGE7C,QAHF;AAAA,MAIiBkD,iBAJjB,GAKIL,SALJ,CAIE3C,aAJF;AAMA,MACYiD,YADZ,GAKIL,SALJ,CACExD,QADF;AAAA,MAEU8D,UAFV,GAKIN,SALJ,CAEEjD,MAFF;AAAA,MAGYwD,YAHZ,GAKIP,SALJ,CAGE9C,QAHF;AAAA,MAIiBsD,iBAJjB,GAKIR,SALJ,CAIE5C,aAJF;AAOA,MAAMqD,eAAe,GAAGR,YAAY,KAAKI,YAAzC;AACA,MAAI,CAACI,eAAL,EAAsB,OAAO,KAAP;AAEtB,MAAMC,aAAa,GAAGR,UAAU,KAAKI,UAArC;AACA,MAAI,CAACI,aAAL,EAAoB,OAAO,KAAP;AAEpB,MAAMC,eAAe,GAAGR,YAAY,KAAKI,YAAzC;AACA,MAAI,CAACI,eAAL,EAAsB,OAAO,KAAP;AAEtB,MAAMC,oBAAoB,GAAGR,iBAAiB,KAAKI,iBAAnD;AACA,MAAI,CAACI,oBAAL,EAA2B,OAAO,KAAP;AAE3B,SAAO,IAAP;AACD,CA9BD;;AAgCA,IAAMC,0BAA0B,GAAGC,kBAAMC,IAAN,CACjC1E,6BADiC,EAEjCyD,QAFiC,CAAnC;;AASO,IAAMkB,kBAAkB,GAAG,SAArBA,kBAAqB,CAGhC1E,KAHgC;AAAA,SAI7B,gCAAC,0BAAD,gCAAgCA,KAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAJ6B;AAAA,CAA3B;;;AAMP0E,kBAAkB,CAACC,WAAnB,GAAiC,0CAAjC","sourcesContent":["import React, { useState } from 'react';\nimport { SafeAreaView, StyleSheet, Text, TouchableOpacity, View, ViewStyle } from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { ImageGalleryVideoControl } from './ImageGalleryVideoControl';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Grid as GridIconDefault, Share as ShareIconDefault } from '../../../icons';\nimport { deleteFile, saveFile, shareImage } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { Photo } from '../ImageGallery';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n imageCountText: {\n fontSize: 16,\n fontWeight: '600',\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n flex: 1,\n justifyContent: 'center',\n marginRight: 8,\n },\n wrapper: {\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n },\n});\n\nexport type ImageGalleryFooterCustomComponent<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ({\n openGridView,\n photo,\n share,\n shareMenuOpen,\n}: {\n openGridView: () => void;\n share: () => Promise<void>;\n shareMenuOpen: boolean;\n photo?: Photo<StreamChatGenerics>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryFooterVideoControlProps = {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n paused: boolean;\n progress: number;\n};\n\nexport type ImageGalleryFooterVideoControlComponent = ({\n duration,\n onPlayPause,\n onProgressDrag,\n paused,\n progress,\n}: ImageGalleryFooterVideoControlProps) => React.ReactElement | null;\n\nexport type ImageGalleryFooterCustomComponentProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n centerElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n GridIcon?: React.ReactElement;\n leftElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n rightElement?: ImageGalleryFooterCustomComponent<StreamChatGenerics>;\n ShareIcon?: React.ReactElement;\n videoControlElement?: ImageGalleryFooterVideoControlComponent;\n};\n\ntype ImageGalleryFooterPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterCustomComponentProps<StreamChatGenerics> & {\n duration: number;\n onPlayPause: () => void;\n onProgressDrag: (progress: number) => void;\n opacity: Animated.SharedValue<number>;\n openGridView: () => void;\n paused: boolean;\n photo: Photo<StreamChatGenerics>;\n photoLength: number;\n progress: number;\n selectedIndex: number;\n visible: Animated.SharedValue<number>;\n};\n\nexport const ImageGalleryFooterWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n centerElement,\n duration,\n GridIcon,\n leftElement,\n onPlayPause,\n onProgressDrag,\n opacity,\n openGridView,\n paused,\n photo,\n photoLength,\n progress,\n rightElement,\n selectedIndex,\n ShareIcon,\n videoControlElement,\n visible,\n } = props;\n\n const [height, setHeight] = useState(200);\n const [shareMenuOpen, setShareMenuOpen] = useState(false);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n footer: {\n centerContainer,\n container,\n imageCountText,\n innerContainer,\n leftContainer,\n rightContainer,\n },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n const footerStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [height, 0], Extrapolate.CLAMP),\n },\n ],\n }),\n [height],\n );\n\n const share = async () => {\n setShareMenuOpen(true);\n try {\n const extension = photo.mime_type?.split('/')[1] || 'jpg';\n const localFile = await saveFile({\n fileName: `${photo.user?.id || 'ChatPhoto'}-${\n photo.messageId\n }-${selectedIndex}.${extension}`,\n fromUrl: photo.uri,\n });\n // `image/jpeg` is added for the case where the mime_type isn't available for a file/image\n await shareImage({ type: photo.mime_type || 'image/jpeg', url: localFile });\n await deleteFile({ uri: localFile });\n } catch (error) {\n console.log(error);\n }\n setShareMenuOpen(false);\n };\n\n return (\n <Animated.View\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n style={styles.wrapper}\n >\n <ReanimatedSafeAreaView style={[container, footerStyle, { backgroundColor: white }]}>\n {photo.type === 'video' ? (\n videoControlElement ? (\n videoControlElement({ duration, onPlayPause, onProgressDrag, paused, progress })\n ) : (\n <ImageGalleryVideoControl\n duration={duration}\n onPlayPause={onPlayPause}\n onProgressDrag={onProgressDrag}\n paused={paused}\n progress={progress}\n />\n )\n ) : null}\n <View style={[styles.innerContainer, innerContainer, { backgroundColor: white }]}>\n {leftElement ? (\n leftElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity disabled={shareMenuOpen} onPress={share}>\n <View style={[styles.leftContainer, leftContainer]}>\n {ShareIcon ? ShareIcon : <ShareIconDefault pathFill={black} />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.imageCountText, { color: black }, imageCountText]}>\n {t('{{ index }} of {{ photoLength }}', {\n index: photoLength - selectedIndex,\n photoLength,\n })}\n </Text>\n </View>\n )}\n {rightElement ? (\n rightElement({ openGridView, photo, share, shareMenuOpen })\n ) : (\n <TouchableOpacity onPress={openGridView}>\n <View style={[styles.rightContainer, rightContainer]}>\n {GridIcon ? GridIcon : <GridIconDefault />}\n </View>\n </TouchableOpacity>\n )}\n </View>\n </ReanimatedSafeAreaView>\n </Animated.View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n nextProps: ImageGalleryFooterPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n duration: prevDuration,\n paused: prevPaused,\n progress: prevProgress,\n selectedIndex: prevSelectedIndex,\n } = prevProps;\n const {\n duration: nextDuration,\n paused: nextPaused,\n progress: nextProgress,\n selectedIndex: nextSelectedIndex,\n } = nextProps;\n\n const isDurationEqual = prevDuration === nextDuration;\n if (!isDurationEqual) return false;\n\n const isPausedEqual = prevPaused === nextPaused;\n if (!isPausedEqual) return false;\n\n const isProgressEqual = prevProgress === nextProgress;\n if (!isProgressEqual) return false;\n\n const isSelectedIndexEqual = prevSelectedIndex === nextSelectedIndex;\n if (!isSelectedIndexEqual) return false;\n\n return true;\n};\n\nconst MemoizedImageGalleryFooter = React.memo(\n ImageGalleryFooterWithContext,\n areEqual,\n) as typeof ImageGalleryFooterWithContext;\n\nexport type ImageGalleryFooterProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ImageGalleryFooterPropsWithContext<StreamChatGenerics>;\n\nexport const ImageGalleryFooter = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ImageGalleryFooterProps<StreamChatGenerics>,\n) => <MemoizedImageGalleryFooter {...props} />;\n\nImageGalleryFooter.displayName = 'ImageGalleryFooter{imageGallery{footer}}';\n"]}
@@ -435,7 +435,7 @@ var MessageInputProvider = function MessageInputProvider(_ref) {
435
435
  attachments.push({
436
436
  fallback: _image2.file.name,
437
437
  image_url: _image2.url,
438
- mime_type: mime_type,
438
+ mime_type: mime_type ? mime_type : undefined,
439
439
  original_height: _image2.height,
440
440
  original_width: _image2.width,
441
441
  type: 'image'
@@ -508,7 +508,7 @@ var MessageInputProvider = function MessageInputProvider(_ref) {
508
508
  attachments.push({
509
509
  fallback: _file2.file.name,
510
510
  image_url: _file2.url,
511
- mime_type: mime_type,
511
+ mime_type: mime_type ? mime_type : undefined,
512
512
  type: 'image'
513
513
  });
514
514
  } else if ((_file2$file$type2 = _file2.file.type) != null && _file2$file$type2.startsWith('audio/')) {
@@ -1 +1 @@
1
- {"version":3,"sources":["MessageInputContext.tsx"],"names":["MessageInputContext","React","createContext","DEFAULT_BASE_CONTEXT_VALUE","MessageInputProvider","children","value","closePicker","openPicker","selectedPicker","setSelectedPicker","appSettings","client","getFileUploadConfig","fileConfig","app","file_upload_config","undefined","blockedFileExtensionTypes","blocked_file_extensions","blockedFileMimeTypes","blocked_mime_types","getImageUploadConfig","imageConfig","image_upload_config","blockedImageExtensionTypes","blockedImageMimeTypes","channelCapabities","channel","giphyEnabled","thread","t","inputBoxRef","sending","asyncIds","setAsyncIds","asyncUploads","setAsyncUploads","giphyActive","setGiphyActive","sendThreadMessageInChannel","setSendThreadMessageInChannel","editing","hasFilePicker","hasImagePicker","initialValue","fileUploads","imageUploads","mentionedUsers","numberOfUploads","setFileUploads","setImageUploads","setMentionedUsers","setNumberOfUploads","setShowMoreOptions","setText","showMoreOptions","text","cooldownEndsAt","endsAt","startCooldown","start","threadId","id","appendText","newText","prevText","isValidMessage","trim","image","state","FileState","UPLOAD_FAILED","UPLOADING","file","onChange","current","sendTypingEvents","keystroke","onChangeText","openCommandsPicker","focus","openMentionsPicker","openAttachmentPicker","Keyboard","dismiss","setTimeout","pickFile","closeAttachmentPicker","toggleAttachmentPicker","onSelectItem","item","prevMentionedUsers","maxNumberOfFiles","Alert","alert","result","cancelled","docs","forEach","doc","uploadNewFile","removeFile","some","prevFileUploads","filter","prevNumberOfUploads","removeImage","prevImageUploads","resetInput","pendingAttachments","length","sendMessage","sendLinks","match","urlRegex","clear","attachments","sendImageAsync","prevAsyncIds","mime_type","filename","UPLOADED","FINISHED","push","fallback","name","image_url","url","original_height","height","original_width","width","type","startsWith","asset_url","duration","file_size","size","title","thumb_url","updatedMessage","mentioned_users","quoted_message","clearEditingState","updateMessagePromise","editMessage","then","parent_id","quoted_message_id","quotedMessage","show_in_channel","clearQuotedMessageState","_error","setQuotedMessageState","slice","console","log","sendMessageAsync","splice","indexOf","prevAsyncUploads","setInputBoxRef","ref","setInputRef","triggerSettings","autoCompleteTriggerSettings","onMentionSelectItem","updateMessage","regExcondition","getUploadSetStateAction","fileState","extraData","uploads","prevUploads","map","prevUpload","handleFileOrImageUploadError","error","isImageError","Error","test","message","NOT_SUPPORTED","uploadFile","newFile","response","doDocUploadRequest","uri","sendFile","uploadImage","newImage","localUri","source","compressImageQuality","compressedUri","replace","contentType","doImageUploadRequest","sendImage","res","includes","newImageUploads","Object","keys","mimeType","isBlockedFileExtension","fileExtensionType","isBlockedFileMimeType","Promise","all","concat","uploadNewImage","isBlockedImageMimeType","isBlockedImageExtension","imageExtensionType","imageState","messageInputContext","openFilePicker","useMessageInputContext","contextValue","withMessageInputContext","Component","WithMessageInputContextComponent","props","displayName"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';\n\nimport { Alert, Keyboard } from 'react-native';\n\nimport type { TextInput, TextInputProps } from 'react-native';\n\nimport uniq from 'lodash/uniq';\nimport { lookup } from 'mime-types';\nimport {\n Attachment,\n logChatPromiseExecution,\n SendFileAPIResponse,\n StreamChat,\n Message as StreamMessage,\n UserFilters,\n UserOptions,\n UserResponse,\n UserSort,\n} from 'stream-chat';\n\nimport { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';\nimport { isEditingBoolean, useMessageDetailsForState } from './hooks/useMessageDetailsForState';\n\nimport type { AttachButtonProps } from '../../components/MessageInput/AttachButton';\nimport type { CommandsButtonProps } from '../../components/MessageInput/CommandsButton';\nimport type { InputEditingStateHeaderProps } from '../../components/MessageInput/components/InputEditingStateHeader';\nimport type { InputGiphySearchProps } from '../../components/MessageInput/components/InputGiphySearch';\nimport type { InputReplyStateHeaderProps } from '../../components/MessageInput/components/InputReplyStateHeader';\nimport type { CooldownTimerProps } from '../../components/MessageInput/CooldownTimer';\nimport type { FileUploadPreviewProps } from '../../components/MessageInput/FileUploadPreview';\nimport { useCooldown } from '../../components/MessageInput/hooks/useCooldown';\nimport type { ImageUploadPreviewProps } from '../../components/MessageInput/ImageUploadPreview';\nimport type { InputButtonsProps } from '../../components/MessageInput/InputButtons';\nimport type { MessageInputProps } from '../../components/MessageInput/MessageInput';\nimport type { MoreOptionsButtonProps } from '../../components/MessageInput/MoreOptionsButton';\nimport type { SendButtonProps } from '../../components/MessageInput/SendButton';\nimport type { UploadProgressIndicatorProps } from '../../components/MessageInput/UploadProgressIndicator';\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport { compressImage, getLocalAssetUri, pickDocument } from '../../native';\nimport type { Asset, DefaultStreamChatGenerics, File, UnknownType } from '../../types/types';\nimport {\n ACITriggerSettings,\n ACITriggerSettingsParams,\n FileState,\n FileStateValue,\n generateRandomId,\n TriggerSettings,\n urlRegex,\n} from '../../utils/utils';\nimport { useAttachmentPickerContext } from '../attachmentPickerContext/AttachmentPickerContext';\nimport { ChannelContextValue, useChannelContext } from '../channelContext/ChannelContext';\nimport { useChatContext } from '../chatContext/ChatContext';\nimport { useOwnCapabilitiesContext } from '../ownCapabilitiesContext/OwnCapabilitiesContext';\nimport { useThreadContext } from '../threadContext/ThreadContext';\nimport { useTranslationContext } from '../translationContext/TranslationContext';\nimport { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';\n\nimport { getDisplayName } from '../utils/getDisplayName';\nimport { isTestEnvironment } from '../utils/isTestEnvironment';\n\nexport type FileUpload = {\n file: File;\n id: string;\n state: FileStateValue;\n thumb_url?: string;\n url?: string;\n};\n\nexport type ImageUpload = {\n file: Partial<Asset> & {\n name?: string;\n };\n id: string;\n state: FileStateValue;\n height?: number;\n url?: string;\n width?: number;\n};\n\nexport type MentionAllAppUsersQuery<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n filters?: UserFilters<StreamChatGenerics>;\n options?: UserOptions;\n sort?: UserSort<StreamChatGenerics>;\n};\n\nexport type LocalMessageInputContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n appendText: (newText: string) => void;\n asyncIds: string[];\n asyncUploads: {\n [key: string]: {\n state: string;\n url: string;\n };\n };\n closeAttachmentPicker: () => void;\n /** The time at which the active cooldown will end */\n cooldownEndsAt: Date;\n /**\n * An array of file objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * ]\n * ```\n *\n */\n fileUploads: FileUpload[];\n giphyActive: boolean;\n /**\n * An array of image objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * ]\n * ```\n *\n */\n imageUploads: ImageUpload[];\n inputBoxRef: React.MutableRefObject<TextInput | null>;\n isValidMessage: () => boolean;\n mentionedUsers: string[];\n numberOfUploads: number;\n onChange: (newText: string) => void;\n onSelectItem: (item: UserResponse<StreamChatGenerics>) => void;\n openAttachmentPicker: () => void;\n openCommandsPicker: () => void;\n openFilePicker: () => void;\n openMentionsPicker: () => void;\n pickFile: () => Promise<void>;\n /**\n * Function for removing a file from the upload preview\n *\n * @param id string ID of file in `fileUploads` object in state of MessageInput\n */\n removeFile: (id: string) => void;\n /**\n * Function for removing an image from the upload preview\n *\n * @param id string ID of image in `imageUploads` object in state of MessageInput\n */\n removeImage: (id: string) => void;\n resetInput: (pendingAttachments?: Attachment<StreamChatGenerics>[]) => void;\n selectedPicker: string | undefined;\n sending: React.MutableRefObject<boolean>;\n sendMessage: () => Promise<void>;\n sendMessageAsync: (id: string) => void;\n sendThreadMessageInChannel: boolean;\n setAsyncIds: React.Dispatch<React.SetStateAction<string[]>>;\n setAsyncUploads: React.Dispatch<\n React.SetStateAction<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>\n >;\n setFileUploads: React.Dispatch<React.SetStateAction<FileUpload[]>>;\n setGiphyActive: React.Dispatch<React.SetStateAction<boolean>>;\n setImageUploads: React.Dispatch<React.SetStateAction<ImageUpload[]>>;\n /**\n * Ref callback to set reference on input box\n */\n setInputBoxRef: (ref: TextInput | null) => void;\n setMentionedUsers: React.Dispatch<React.SetStateAction<string[]>>;\n setNumberOfUploads: React.Dispatch<React.SetStateAction<number>>;\n setSendThreadMessageInChannel: React.Dispatch<React.SetStateAction<boolean>>;\n setShowMoreOptions: React.Dispatch<React.SetStateAction<boolean>>;\n setText: React.Dispatch<React.SetStateAction<string>>;\n showMoreOptions: boolean;\n /**\n * Text value of the TextInput\n */\n text: string;\n toggleAttachmentPicker: () => void;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n triggerSettings: TriggerSettings<StreamChatGenerics>;\n updateMessage: () => Promise<void>;\n /** Function for attempting to upload a file */\n uploadFile: ({ newFile }: { newFile: FileUpload }) => Promise<void>;\n /** Function for attempting to upload an image */\n uploadImage: ({ newImage }: { newImage: ImageUpload }) => Promise<void>;\n uploadNewFile: (file: File) => Promise<void>;\n uploadNewImage: (image: Asset) => Promise<void>;\n};\n\nexport type InputMessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Custom UI component for attach button.\n *\n * Defaults to and accepts same props as: [AttachButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/attach-button/)\n */\n AttachButton: React.ComponentType<AttachButtonProps<StreamChatGenerics>>;\n clearEditingState: () => void;\n clearQuotedMessageState: () => void;\n /**\n * Custom UI component for commands button.\n *\n * Defaults to and accepts same props as: [CommandsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/commands-button/)\n */\n CommandsButton: React.ComponentType<CommandsButtonProps<StreamChatGenerics>>;\n /**\n * Custom UI component to display the remaining cooldown a user will have to wait before\n * being allowed to send another message. This component is displayed in place of the\n * send button for the MessageInput component.\n *\n * **default** [CooldownTimer](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/CooldownTimer.tsx)\n */\n CooldownTimer: React.ComponentType<CooldownTimerProps>;\n editing: boolean | MessageType<StreamChatGenerics>;\n editMessage: StreamChat<StreamChatGenerics>['updateMessage'];\n\n /**\n * Custom UI component for FileUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/FileUploadPreview.tsx\n */\n FileUploadPreview: React.ComponentType<FileUploadPreviewProps<StreamChatGenerics>>;\n\n /** When false, CommandsButton will be hidden */\n hasCommands: boolean;\n /** When false, FileSelectorIcon will be hidden */\n hasFilePicker: boolean;\n /** When false, ImageSelectorIcon will be hidden */\n hasImagePicker: boolean;\n /**\n * Custom UI component for ImageUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/ImageUploadPreview.tsx\n */\n ImageUploadPreview: React.ComponentType<ImageUploadPreviewProps<StreamChatGenerics>>;\n InputEditingStateHeader: React.ComponentType<InputEditingStateHeaderProps<StreamChatGenerics>>;\n InputGiphySearch: React.ComponentType<InputGiphySearchProps<StreamChatGenerics>>;\n InputReplyStateHeader: React.ComponentType<InputReplyStateHeaderProps<StreamChatGenerics>>;\n /** Limit on allowed number of files to attach at a time. */\n maxNumberOfFiles: number;\n /**\n * Custom UI component for more options button.\n *\n * Defaults to and accepts same props as: [MoreOptionsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/more-options-button/)\n */\n MoreOptionsButton: React.ComponentType<MoreOptionsButtonProps<StreamChatGenerics>>;\n /** Limit on the number of lines in the text input before scrolling */\n numberOfLines: number;\n quotedMessage: boolean | MessageType<StreamChatGenerics>;\n /**\n * Custom UI component for send button.\n *\n * Defaults to and accepts same props as: [SendButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/send-button/)\n */\n SendButton: React.ComponentType<SendButtonProps<StreamChatGenerics>>;\n sendImageAsync: boolean;\n sendMessage: (message: Partial<StreamMessage<StreamChatGenerics>>) => Promise<void>;\n setQuotedMessageState: (message: MessageType<StreamChatGenerics>) => void;\n /**\n * Custom UI component to render checkbox with text (\"Also send to channel\") in Thread's input box.\n * When ticked, message will also be sent in parent channel.\n */\n ShowThreadMessageInChannelButton: React.ComponentType<{\n threadList?: boolean;\n }>;\n /**\n * Custom UI component to render upload progress indicator on attachment preview.\n *\n * **Default** [UploadProgressIndicator](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/UploadProgressIndicator.tsx)\n */\n UploadProgressIndicator: React.ComponentType<UploadProgressIndicatorProps>;\n /**\n * Additional props for underlying TextInput component. These props will be forwarded as it is to TextInput component.\n *\n * @see See https://reactnative.dev/docs/textinput#reference\n */\n additionalTextInputProps?: TextInputProps;\n /** Max number of suggestions to display in autocomplete list. Defaults to 10. */\n autoCompleteSuggestionsLimit?: number;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n autoCompleteTriggerSettings?: (\n settings: ACITriggerSettingsParams<StreamChatGenerics>,\n ) => TriggerSettings<StreamChatGenerics>;\n /**\n * Compress image with quality (from 0 to 1, where 1 is best quality).\n * On iOS, values larger than 0.8 don't produce a noticeable quality increase in most images,\n * while a value of 0.8 will reduce the file size by about half or less compared to a value of 1.\n * Image picker defaults to 0.8 for iOS and 1 for Android\n */\n compressImageQuality?: number;\n /**\n * Override file upload request\n *\n * @param file File object - { uri: '', name: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doDocUploadRequest?: (\n file: {\n name: string;\n size?: string | number;\n type?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n /**\n * Override image upload request\n *\n * @param file File object - { uri: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doImageUploadRequest?: (\n file: {\n name?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n\n /** Initial value to set on input */\n initialValue?: string;\n /**\n * Custom UI component for AutoCompleteInput.\n * Has access to all of [MessageInputContext](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/messageInputContext/MessageInputContext.tsx)\n */\n Input?: React.ComponentType<\n Omit<MessageInputProps<StreamChatGenerics>, 'Input'> &\n InputButtonsProps<StreamChatGenerics> & {\n getUsers: () => UserResponse<StreamChatGenerics>[];\n }\n >;\n /**\n * Custom UI component to override buttons on left side of input box\n * Defaults to [InputButtons](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/InputButtons.tsx),\n * which contain following components/buttons:\n *\n * - AttachButton\n * - CommandsButtom\n *\n * You have access to following prop functions:\n *\n * - closeAttachmentPicker\n * - openAttachmentPicker\n * - openCommandsPicker\n * - toggleAttachmentPicker\n */\n InputButtons?: React.ComponentType<InputButtonsProps<StreamChatGenerics>>;\n maxMessageLength?: number;\n mentionAllAppUsersEnabled?: boolean;\n /** Object containing filters/sort/options overrides for an @mention user query */\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n /**\n * Callback that is called when the text input's text changes. Changed text is passed as a single string argument to the callback handler.\n */\n onChangeText?: (newText: string) => void;\n SendMessageDisallowedIndicator?: React.ComponentType;\n /**\n * ref for input setter function\n *\n * @param ref [Ref object](https://reactjs.org/docs/refs-and-the-dom.html) for underling `TextInput` component.\n *\n * @overrideType Function\n */\n setInputRef?: (ref: TextInput | null) => void;\n};\n\nexport type MessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = LocalMessageInputContext<StreamChatGenerics> &\n Omit<InputMessageInputContextValue<StreamChatGenerics>, 'sendMessage'>;\n\nexport const MessageInputContext = React.createContext(\n DEFAULT_BASE_CONTEXT_VALUE as MessageInputContextValue,\n);\n\nexport const MessageInputProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value: InputMessageInputContextValue<StreamChatGenerics>;\n}>) => {\n const { closePicker, openPicker, selectedPicker, setSelectedPicker } =\n useAttachmentPickerContext();\n const { appSettings, client } = useChatContext<StreamChatGenerics>();\n\n const getFileUploadConfig = () => {\n const fileConfig = appSettings?.app?.file_upload_config;\n if (fileConfig !== null || fileConfig !== undefined) {\n return fileConfig;\n } else {\n return {};\n }\n };\n\n const blockedFileExtensionTypes = getFileUploadConfig()?.blocked_file_extensions;\n const blockedFileMimeTypes = getFileUploadConfig()?.blocked_mime_types;\n\n const getImageUploadConfig = () => {\n const imageConfig = appSettings?.app?.image_upload_config;\n if (imageConfig !== null || imageConfig !== undefined) {\n return imageConfig;\n }\n return {};\n };\n\n const blockedImageExtensionTypes = getImageUploadConfig()?.blocked_file_extensions;\n const blockedImageMimeTypes = getImageUploadConfig()?.blocked_mime_types;\n\n const channelCapabities = useOwnCapabilitiesContext();\n\n const { channel, giphyEnabled } = useChannelContext<StreamChatGenerics>();\n const { thread } = useThreadContext<StreamChatGenerics>();\n const { t } = useTranslationContext();\n const inputBoxRef = useRef<TextInput | null>(null);\n const sending = useRef(false);\n\n const [asyncIds, setAsyncIds] = useState<string[]>([]);\n const [asyncUploads, setAsyncUploads] = useState<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>({});\n const [giphyActive, setGiphyActive] = useState(false);\n const [sendThreadMessageInChannel, setSendThreadMessageInChannel] = useState(false);\n const { editing, hasFilePicker, hasImagePicker, initialValue } = value;\n const {\n fileUploads,\n imageUploads,\n mentionedUsers,\n numberOfUploads,\n setFileUploads,\n setImageUploads,\n setMentionedUsers,\n setNumberOfUploads,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n } = useMessageDetailsForState<StreamChatGenerics>(editing, initialValue);\n const { endsAt: cooldownEndsAt, start: startCooldown } = useCooldown<StreamChatGenerics>();\n\n const threadId = thread?.id;\n useEffect(() => {\n setSendThreadMessageInChannel(false);\n }, [threadId]);\n\n const appendText = (newText: string) => {\n setText((prevText) => `${prevText}${newText}`);\n };\n\n /** Checks if the message is valid or not. Accordingly we can enable/disable send button */\n const isValidMessage = () => {\n if (text && text.trim()) {\n return true;\n }\n\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n return false;\n };\n\n const onChange = (newText: string) => {\n if (sending.current) {\n return;\n }\n setText(newText);\n\n if (newText && channel && channelCapabities.sendTypingEvents) {\n logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');\n }\n\n if (value.onChangeText) {\n value.onChangeText(newText);\n }\n };\n\n const openCommandsPicker = () => {\n appendText('/');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openMentionsPicker = () => {\n appendText('@');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openAttachmentPicker = () => {\n if (hasImagePicker) {\n Keyboard.dismiss();\n openPicker();\n setSelectedPicker('images');\n /**\n * TODO: Remove this, this is the result of\n * the bottom sheet now having some keyboard\n * handling baked in, creating an issue when\n * we call dismiss and open in short order.\n * https://github.com/gorhom/react-native-bottom-sheet/issues/446\n */\n setTimeout(openPicker, 600);\n } else if (hasFilePicker) {\n pickFile();\n }\n };\n\n const closeAttachmentPicker = () => {\n setSelectedPicker(undefined);\n closePicker();\n };\n\n const toggleAttachmentPicker = () => {\n if (selectedPicker) {\n closeAttachmentPicker();\n } else {\n openAttachmentPicker();\n }\n };\n\n const onSelectItem = (item: UserResponse<StreamChatGenerics>) => {\n setMentionedUsers((prevMentionedUsers) => [...prevMentionedUsers, item.id]);\n };\n\n const pickFile = async () => {\n if (numberOfUploads >= value.maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return;\n }\n\n const result = await pickDocument({\n maxNumberOfFiles: value.maxNumberOfFiles - numberOfUploads,\n });\n if (!result.cancelled && result.docs) {\n result.docs.forEach((doc) => {\n /**\n * TODO: The current tight coupling of images to the image\n * picker does not allow images picked from the file picker\n * to be rendered in a preview via the uploadNewImage call.\n * This should be updated alongside allowing image a file\n * uploads together.\n */\n uploadNewFile(doc);\n });\n }\n };\n\n const removeFile = (id: string) => {\n if (fileUploads.some((file) => file.id === id)) {\n setFileUploads((prevFileUploads) => prevFileUploads.filter((file) => file.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const removeImage = (id: string) => {\n if (imageUploads.some((image) => image.id === id)) {\n setImageUploads((prevImageUploads) => prevImageUploads.filter((image) => image.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const resetInput = (pendingAttachments: Attachment<StreamChatGenerics>[] = []) => {\n setFileUploads([]);\n setGiphyActive(false);\n setShowMoreOptions(true);\n setImageUploads([]);\n setMentionedUsers([]);\n setNumberOfUploads(\n (prevNumberOfUploads) => prevNumberOfUploads - (pendingAttachments?.length || 0),\n );\n setText('');\n };\n\n // TODO: Figure out why this is async, as it doesn't await any promise.\n // eslint-disable-next-line require-await\n const sendMessage = async () => {\n if (sending.current) {\n return;\n }\n\n if (!channelCapabities.sendLinks && !!text.match(urlRegex)) {\n Alert.alert(t('Links are disabled'), t('Sending links is not allowed in this conversation'));\n\n return;\n }\n\n sending.current = true;\n\n startCooldown();\n\n const prevText = giphyEnabled && giphyActive ? `/giphy ${text}` : text;\n setText('');\n if (inputBoxRef.current) {\n inputBoxRef.current.clear();\n }\n\n const attachments = [] as Attachment<StreamChatGenerics>[];\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n if (value.sendImageAsync) {\n /**\n * If user hit send before image uploaded, push ID into a queue to later\n * be matched with the successful CDN response\n */\n setAsyncIds((prevAsyncIds) => [...prevAsyncIds, image.id]);\n } else {\n sending.current = false;\n return setText(prevText);\n }\n }\n\n // To get the mime type of the image from the file name and send it as an response for an image\n const mime_type: string | boolean = lookup(image.file.filename as string);\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n attachments.push({\n fallback: image.file.name,\n image_url: image.url,\n mime_type,\n original_height: image.height,\n original_width: image.width,\n type: 'image',\n } as Attachment<StreamChatGenerics>);\n }\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n sending.current = false;\n return;\n }\n const mime_type: string | boolean = lookup(file.file.name as string);\n\n if (file.state === FileState.UPLOADED || file.state === FileState.FINISHED) {\n if (file.file.type?.startsWith('image/')) {\n attachments.push({\n fallback: file.file.name,\n image_url: file.url,\n mime_type,\n type: 'image',\n } as Attachment<StreamChatGenerics>);\n } else if (file.file.type?.startsWith('audio/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'audio',\n } as Attachment<StreamChatGenerics>);\n } else if (file.file.type?.startsWith('video/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n thumb_url: file.thumb_url,\n title: file.file.name,\n type: 'video',\n } as Attachment<StreamChatGenerics>);\n } else {\n attachments.push({\n asset_url: file.url,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'file',\n } as Attachment<StreamChatGenerics>);\n }\n }\n }\n\n // Disallow sending message if its empty.\n if (!prevText && attachments.length === 0) {\n sending.current = false;\n return;\n }\n\n if (value.editing && !isEditingBoolean(value.editing)) {\n const updatedMessage = {\n ...value.editing,\n attachments,\n mentioned_users: mentionedUsers,\n quoted_message: undefined,\n text: prevText,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0];\n\n // TODO: Remove this line and show an error when submit fails\n value.clearEditingState();\n\n const updateMessagePromise = value.editMessage(updatedMessage).then(value.clearEditingState);\n resetInput(attachments);\n logChatPromiseExecution(updateMessagePromise, 'update message');\n\n sending.current = false;\n } else {\n try {\n value.sendMessage({\n attachments,\n mentioned_users: uniq(mentionedUsers),\n /** Parent message id - in case of thread */\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: prevText,\n } as unknown as StreamMessage<StreamChatGenerics>);\n\n value.clearQuotedMessageState();\n sending.current = false;\n resetInput(attachments);\n } catch (_error) {\n sending.current = false;\n if (value.quotedMessage && typeof value.quotedMessage !== 'boolean') {\n value.setQuotedMessageState(value.quotedMessage);\n }\n setText(prevText.slice(giphyEnabled && giphyActive ? 7 : 0)); // 7 because of '/giphy ' length\n console.log('Failed to send message');\n }\n }\n };\n\n const sendMessageAsync = (id: string) => {\n const image = asyncUploads[id];\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n return;\n }\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n const attachments = [\n {\n image_url: image.url,\n type: 'image',\n },\n ] as StreamMessage<StreamChatGenerics>['attachments'];\n\n startCooldown();\n try {\n value.sendMessage({\n attachments,\n mentioned_users: [],\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: '',\n } as unknown as Partial<StreamMessage<StreamChatGenerics>>);\n\n setAsyncIds((prevAsyncIds) => prevAsyncIds.splice(prevAsyncIds.indexOf(id), 1));\n setAsyncUploads((prevAsyncUploads) => {\n delete prevAsyncUploads[id];\n return prevAsyncUploads;\n });\n\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n } catch (_error) {\n console.log('Failed');\n }\n }\n };\n\n const setInputBoxRef = (ref: TextInput | null) => {\n inputBoxRef.current = ref;\n if (value.setInputRef) {\n value.setInputRef(ref);\n }\n };\n\n const triggerSettings = channel\n ? value.autoCompleteTriggerSettings\n ? value.autoCompleteTriggerSettings({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ACITriggerSettings<StreamChatGenerics>({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ({} as TriggerSettings<StreamChatGenerics>);\n\n const updateMessage = async () => {\n try {\n if (!isEditingBoolean(value.editing)) {\n await client.updateMessage({\n ...value.editing,\n quoted_message: undefined,\n text: giphyEnabled && giphyActive ? `/giphy ${text}` : text,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0]);\n }\n\n resetInput();\n value.clearEditingState();\n } catch (error) {\n console.log(error);\n }\n };\n\n const regExcondition = /File (extension \\.\\w{2,4}|type \\S+) is not supported/;\n\n const getUploadSetStateAction = <UploadType extends ImageUpload | FileUpload>(\n id: string,\n fileState: FileStateValue,\n extraData: Partial<UploadType> = {},\n ): React.SetStateAction<UploadType[]> => {\n const uploads: (prevUploads: UploadType[]) => UploadType[] = (prevUploads: UploadType[]) =>\n prevUploads.map((prevUpload) => {\n if (prevUpload.id === id) {\n return {\n ...prevUpload,\n ...extraData,\n state: fileState,\n };\n }\n return prevUpload;\n });\n\n return uploads;\n };\n\n const handleFileOrImageUploadError = (error: unknown, isImageError: boolean, id: string) => {\n if (isImageError) {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setImageUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n\n return setImageUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n } else {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setFileUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n return setFileUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n }\n };\n\n const uploadFile = async ({ newFile }: { newFile: FileUpload }) => {\n const { file, id } = newFile;\n\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADING));\n\n let response: Partial<SendFileAPIResponse> = {};\n try {\n if (value.doDocUploadRequest) {\n response = await value.doDocUploadRequest(file, channel);\n } else if (channel && file.uri) {\n response = await channel.sendFile(file.uri, file.name, file.type);\n }\n const extraData: Partial<FileUpload> = { thumb_url: response.thumb_url, url: response.file };\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADED, extraData));\n } catch (error: unknown) {\n handleFileOrImageUploadError(error, false, id);\n }\n };\n\n const uploadImage = async ({ newImage }: { newImage: ImageUpload }) => {\n const { file, id } = newImage || {};\n\n if (!file) {\n return;\n }\n\n let response = {} as SendFileAPIResponse;\n\n try {\n /**\n * Expo now uses the assets-library which is also how remote\n * native files are presented. We now return a file id from Expo\n * only, if that file id exits we call getLocalAssetUri to download\n * the asset for expo before uploading it. We do the same for native\n * if the uri includes assets-library, this uses the CameraRoll.save\n * function to also create a local uri.\n */\n const localUri = file.id\n ? await getLocalAssetUri(file.id)\n : file.uri?.match(/assets-library/)\n ? await getLocalAssetUri(file.uri)\n : file.uri;\n\n const uri = file.name || localUri || '';\n /**\n * We skip compression if:\n * - the file is from the camera as that should already be compressed\n * - the file has not height/width value to maintain for compression\n * - the compressImageQuality number is not present or is 1 (meaning no compression)\n */\n const compressedUri = await (file.source === 'camera' ||\n !file.height ||\n !file.width ||\n typeof value.compressImageQuality !== 'number' ||\n value.compressImageQuality === 1\n ? uri\n : compressImage({\n compressImageQuality: value.compressImageQuality,\n height: file.height,\n uri,\n width: file.width,\n }));\n const filename = uri.replace(/^(file:\\/\\/|content:\\/\\/|assets-library:\\/\\/)/, '');\n const contentType = lookup(filename) || 'multipart/form-data';\n if (value.doImageUploadRequest) {\n response = await value.doImageUploadRequest(file, channel);\n } else if (compressedUri && channel) {\n if (value.sendImageAsync) {\n channel.sendImage(compressedUri, file.filename, contentType).then((res) => {\n if (asyncIds.includes(id)) {\n // Evaluates to true if user hit send before image successfully uploaded\n setAsyncUploads((prevAsyncUploads) => {\n prevAsyncUploads[id] = {\n ...prevAsyncUploads[id],\n state: FileState.UPLOADED,\n url: res.file,\n };\n return prevAsyncUploads;\n });\n } else {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n url: res.file,\n });\n setImageUploads(newImageUploads);\n }\n });\n } else {\n response = await channel.sendImage(compressedUri, file.filename, contentType);\n }\n }\n\n if (Object.keys(response).length) {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n height: file.height,\n url: response.file,\n width: file.width,\n });\n setImageUploads(newImageUploads);\n }\n } catch (error) {\n handleFileOrImageUploadError(error, true, id);\n }\n };\n\n const uploadNewFile = async (file: {\n name: string;\n size?: number | string;\n type?: string;\n uri?: string;\n }) => {\n const id: string = generateRandomId();\n const mimeType: string | boolean = lookup(file.name);\n\n const isBlockedFileExtension: boolean | undefined = blockedFileExtensionTypes?.some(\n (fileExtensionType: string) => file.name?.includes(fileExtensionType),\n );\n const isBlockedFileMimeType: boolean | undefined = blockedFileMimeTypes?.some(\n (mimeType: string) => file.name?.includes(mimeType),\n );\n\n const fileState =\n isBlockedFileExtension || isBlockedFileMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newFile: FileUpload = {\n file: { ...file, type: mimeType || file?.type },\n id,\n state: fileState,\n };\n\n await Promise.all([\n setFileUploads((prevFileUploads) => prevFileUploads.concat([newFile])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedFileExtension) {\n uploadFile({ newFile });\n }\n };\n\n const uploadNewImage = async (image: Asset) => {\n const id = generateRandomId();\n\n const isBlockedImageMimeType = blockedImageMimeTypes?.some((mimeType: string) =>\n image.uri?.includes(mimeType),\n );\n\n const isBlockedImageExtension = blockedImageExtensionTypes?.some((imageExtensionType: string) =>\n image.uri?.includes(imageExtensionType),\n );\n\n const imageState =\n isBlockedImageExtension || isBlockedImageMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newImage: ImageUpload = {\n file: image,\n id,\n state: imageState,\n };\n\n await Promise.all([\n setImageUploads((prevImageUploads) => prevImageUploads.concat([newImage])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedImageExtension) {\n uploadImage({ newImage });\n }\n };\n\n const messageInputContext = useCreateMessageInputContext({\n appendText,\n asyncIds,\n asyncUploads,\n closeAttachmentPicker,\n cooldownEndsAt,\n fileUploads,\n giphyActive,\n imageUploads,\n inputBoxRef,\n isValidMessage,\n mentionedUsers,\n numberOfUploads,\n onChange,\n onSelectItem,\n openAttachmentPicker,\n openCommandsPicker,\n openFilePicker: pickFile,\n openMentionsPicker,\n pickFile,\n removeFile,\n removeImage,\n resetInput,\n selectedPicker,\n sending,\n sendMessageAsync,\n sendThreadMessageInChannel,\n setAsyncIds,\n setAsyncUploads,\n setFileUploads,\n setGiphyActive,\n setImageUploads,\n setInputBoxRef,\n setMentionedUsers,\n setNumberOfUploads,\n setSendThreadMessageInChannel,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n thread,\n toggleAttachmentPicker,\n triggerSettings,\n updateMessage,\n uploadFile,\n uploadImage,\n uploadNewFile,\n uploadNewImage,\n ...value,\n sendMessage, // overriding the originally passed in sendMessage\n });\n\n return (\n <MessageInputContext.Provider\n value={messageInputContext as unknown as MessageInputContextValue}\n >\n {children}\n </MessageInputContext.Provider>\n );\n};\n\nexport const useMessageInputContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const contextValue = useContext(\n MessageInputContext,\n ) as unknown as MessageInputContextValue<StreamChatGenerics>;\n\n if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {\n throw new Error(\n `The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure you have configured Channel component correctly - https://getstream.io/chat/docs/sdk/reactnative/basics/hello_stream_chat/#channel`,\n );\n }\n\n return contextValue;\n};\n\n/**\n * Typescript currently does not support partial inference so if MessageInputContext\n * typing is desired while using the HOC withMessageInputContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withMessageInputContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>> => {\n const WithMessageInputContextComponent = (\n props: Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>,\n ) => {\n const messageInputContext = useMessageInputContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...messageInputContext} />;\n };\n WithMessageInputContextComponent.displayName = `WithMessageInputContext${getDisplayName(\n Component,\n )}`;\n return WithMessageInputContextComponent;\n};\n"]}
1
+ {"version":3,"sources":["MessageInputContext.tsx"],"names":["MessageInputContext","React","createContext","DEFAULT_BASE_CONTEXT_VALUE","MessageInputProvider","children","value","closePicker","openPicker","selectedPicker","setSelectedPicker","appSettings","client","getFileUploadConfig","fileConfig","app","file_upload_config","undefined","blockedFileExtensionTypes","blocked_file_extensions","blockedFileMimeTypes","blocked_mime_types","getImageUploadConfig","imageConfig","image_upload_config","blockedImageExtensionTypes","blockedImageMimeTypes","channelCapabities","channel","giphyEnabled","thread","t","inputBoxRef","sending","asyncIds","setAsyncIds","asyncUploads","setAsyncUploads","giphyActive","setGiphyActive","sendThreadMessageInChannel","setSendThreadMessageInChannel","editing","hasFilePicker","hasImagePicker","initialValue","fileUploads","imageUploads","mentionedUsers","numberOfUploads","setFileUploads","setImageUploads","setMentionedUsers","setNumberOfUploads","setShowMoreOptions","setText","showMoreOptions","text","cooldownEndsAt","endsAt","startCooldown","start","threadId","id","appendText","newText","prevText","isValidMessage","trim","image","state","FileState","UPLOAD_FAILED","UPLOADING","file","onChange","current","sendTypingEvents","keystroke","onChangeText","openCommandsPicker","focus","openMentionsPicker","openAttachmentPicker","Keyboard","dismiss","setTimeout","pickFile","closeAttachmentPicker","toggleAttachmentPicker","onSelectItem","item","prevMentionedUsers","maxNumberOfFiles","Alert","alert","result","cancelled","docs","forEach","doc","uploadNewFile","removeFile","some","prevFileUploads","filter","prevNumberOfUploads","removeImage","prevImageUploads","resetInput","pendingAttachments","length","sendMessage","sendLinks","match","urlRegex","clear","attachments","sendImageAsync","prevAsyncIds","mime_type","filename","UPLOADED","FINISHED","push","fallback","name","image_url","url","original_height","height","original_width","width","type","startsWith","asset_url","duration","file_size","size","title","thumb_url","updatedMessage","mentioned_users","quoted_message","clearEditingState","updateMessagePromise","editMessage","then","parent_id","quoted_message_id","quotedMessage","show_in_channel","clearQuotedMessageState","_error","setQuotedMessageState","slice","console","log","sendMessageAsync","splice","indexOf","prevAsyncUploads","setInputBoxRef","ref","setInputRef","triggerSettings","autoCompleteTriggerSettings","onMentionSelectItem","updateMessage","regExcondition","getUploadSetStateAction","fileState","extraData","uploads","prevUploads","map","prevUpload","handleFileOrImageUploadError","error","isImageError","Error","test","message","NOT_SUPPORTED","uploadFile","newFile","response","doDocUploadRequest","uri","sendFile","uploadImage","newImage","localUri","source","compressImageQuality","compressedUri","replace","contentType","doImageUploadRequest","sendImage","res","includes","newImageUploads","Object","keys","mimeType","isBlockedFileExtension","fileExtensionType","isBlockedFileMimeType","Promise","all","concat","uploadNewImage","isBlockedImageMimeType","isBlockedImageExtension","imageExtensionType","imageState","messageInputContext","openFilePicker","useMessageInputContext","contextValue","withMessageInputContext","Component","WithMessageInputContextComponent","props","displayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AAIA;;AACA;;AACA;;AAYA;;AACA;;AASA;;AAQA;;AAEA;;AASA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;;AAsVO,IAAMA,mBAAmB,GAAGC,kBAAMC,aAAN,CACjCC,mDADiC,CAA5B;;;;AAIA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,OAO7B;AAAA;;AAAA,MAJLC,QAIK,QAJLA,QAIK;AAAA,MAHLC,KAGK,QAHLA,KAGK;;AACL,8BACE,0DADF;AAAA,MAAQC,WAAR,yBAAQA,WAAR;AAAA,MAAqBC,UAArB,yBAAqBA,UAArB;AAAA,MAAiCC,cAAjC,yBAAiCA,cAAjC;AAAA,MAAiDC,iBAAjD,yBAAiDA,iBAAjD;;AAEA,wBAAgC,kCAAhC;AAAA,MAAQC,WAAR,mBAAQA,WAAR;AAAA,MAAqBC,MAArB,mBAAqBA,MAArB;;AAEA,MAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,GAAM;AAAA;;AAChC,QAAMC,UAAU,GAAGH,WAAH,wCAAGA,WAAW,CAAEI,GAAhB,qBAAG,iBAAkBC,kBAArC;;AACA,QAAIF,UAAU,KAAK,IAAf,IAAuBA,UAAU,KAAKG,SAA1C,EAAqD;AACnD,aAAOH,UAAP;AACD,KAFD,MAEO;AACL,aAAO,EAAP;AACD;AACF,GAPD;;AASA,MAAMI,yBAAyB,2BAAGL,mBAAmB,EAAtB,qBAAG,qBAAuBM,uBAAzD;AACA,MAAMC,oBAAoB,4BAAGP,mBAAmB,EAAtB,qBAAG,sBAAuBQ,kBAApD;;AAEA,MAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AAAA;;AACjC,QAAMC,WAAW,GAAGZ,WAAH,yCAAGA,WAAW,CAAEI,GAAhB,qBAAG,kBAAkBS,mBAAtC;;AACA,QAAID,WAAW,KAAK,IAAhB,IAAwBA,WAAW,KAAKN,SAA5C,EAAuD;AACrD,aAAOM,WAAP;AACD;;AACD,WAAO,EAAP;AACD,GAND;;AAQA,MAAME,0BAA0B,4BAAGH,oBAAoB,EAAvB,qBAAG,sBAAwBH,uBAA3D;AACA,MAAMO,qBAAqB,6BAAGJ,oBAAoB,EAAvB,qBAAG,uBAAwBD,kBAAtD;AAEA,MAAMM,iBAAiB,GAAG,wDAA1B;;AAEA,2BAAkC,wCAAlC;AAAA,MAAQC,OAAR,sBAAQA,OAAR;AAAA,MAAiBC,YAAjB,sBAAiBA,YAAjB;;AACA,0BAAmB,sCAAnB;AAAA,MAAQC,MAAR,qBAAQA,MAAR;;AACA,8BAAc,gDAAd;AAAA,MAAQC,CAAR,yBAAQA,CAAR;;AACA,MAAMC,WAAW,GAAG,mBAAyB,IAAzB,CAApB;AACA,MAAMC,OAAO,GAAG,mBAAO,KAAP,CAAhB;;AAEA,kBAAgC,qBAAmB,EAAnB,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,mBAAwC,qBAKrC,EALqC,CAAxC;AAAA;AAAA,MAAOC,YAAP;AAAA,MAAqBC,eAArB;;AAMA,mBAAsC,qBAAS,KAAT,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBC,cAApB;;AACA,mBAAoE,qBAAS,KAAT,CAApE;AAAA;AAAA,MAAOC,0BAAP;AAAA,MAAmCC,6BAAnC;;AACA,MAAQC,OAAR,GAAiEpC,KAAjE,CAAQoC,OAAR;AAAA,MAAiBC,aAAjB,GAAiErC,KAAjE,CAAiBqC,aAAjB;AAAA,MAAgCC,cAAhC,GAAiEtC,KAAjE,CAAgCsC,cAAhC;AAAA,MAAgDC,YAAhD,GAAiEvC,KAAjE,CAAgDuC,YAAhD;;AACA,8BAaI,0DAA8CH,OAA9C,EAAuDG,YAAvD,CAbJ;AAAA,MACEC,WADF,yBACEA,WADF;AAAA,MAEEC,YAFF,yBAEEA,YAFF;AAAA,MAGEC,cAHF,yBAGEA,cAHF;AAAA,MAIEC,eAJF,yBAIEA,eAJF;AAAA,MAKEC,cALF,yBAKEA,cALF;AAAA,MAMEC,eANF,yBAMEA,eANF;AAAA,MAOEC,iBAPF,yBAOEA,iBAPF;AAAA,MAQEC,kBARF,yBAQEA,kBARF;AAAA,MASEC,kBATF,yBASEA,kBATF;AAAA,MAUEC,OAVF,yBAUEA,OAVF;AAAA,MAWEC,eAXF,yBAWEA,eAXF;AAAA,MAYEC,IAZF,yBAYEA,IAZF;;AAcA,qBAAyD,gCAAzD;AAAA,MAAgBC,cAAhB,gBAAQC,MAAR;AAAA,MAAuCC,aAAvC,gBAAgCC,KAAhC;;AAEA,MAAMC,QAAQ,GAAGhC,MAAH,oBAAGA,MAAM,CAAEiC,EAAzB;AACA,wBAAU,YAAM;AACdtB,IAAAA,6BAA6B,CAAC,KAAD,CAA7B;AACD,GAFD,EAEG,CAACqB,QAAD,CAFH;;AAIA,MAAME,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAAqB;AACtCV,IAAAA,OAAO,CAAC,UAACW,QAAD;AAAA,kBAAiBA,QAAjB,GAA4BD,OAA5B;AAAA,KAAD,CAAP;AACD,GAFD;;AAKA,MAAME,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AAC3B,QAAIV,IAAI,IAAIA,IAAI,CAACW,IAAL,EAAZ,EAAyB;AACvB,aAAO,IAAP;AACD;;AAED,yDAAoBrB,YAApB,wCAAkC;AAAA,UAAvBsB,MAAuB;;AAChC,UAAI,CAACA,MAAD,IAAUA,MAAK,CAACC,KAAN,KAAgBC,iBAAUC,aAAxC,EAAuD;AACrD;AACD;;AACD,UAAIH,MAAK,CAACC,KAAN,KAAgBC,iBAAUE,SAA9B,EAAyC;AAEvC,eAAO,KAAP;AACD;;AAED,aAAO,IAAP;AACD;;AAED,0DAAmB3B,WAAnB,2CAAgC;AAAA,UAArB4B,KAAqB;;AAC9B,UAAI,CAACA,KAAD,IAASA,KAAI,CAACJ,KAAL,KAAeC,iBAAUC,aAAtC,EAAqD;AACnD;AACD;;AACD,UAAIE,KAAI,CAACJ,KAAL,KAAeC,iBAAUE,SAA7B,EAAwC;AAEtC,eAAO,KAAP;AACD;;AAED,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GA9BD;;AAgCA,MAAME,QAAQ,GAAG,SAAXA,QAAW,CAACV,OAAD,EAAqB;AACpC,QAAIhC,OAAO,CAAC2C,OAAZ,EAAqB;AACnB;AACD;;AACDrB,IAAAA,OAAO,CAACU,OAAD,CAAP;;AAEA,QAAIA,OAAO,IAAIrC,OAAX,IAAsBD,iBAAiB,CAACkD,gBAA5C,EAA8D;AAC5D,+CAAwBjD,OAAO,CAACkD,SAAR,CAAkBhD,MAAlB,oBAAkBA,MAAM,CAAEiC,EAA1B,CAAxB,EAAuD,oBAAvD;AACD;;AAED,QAAIzD,KAAK,CAACyE,YAAV,EAAwB;AACtBzE,MAAAA,KAAK,CAACyE,YAAN,CAAmBd,OAAnB;AACD;AACF,GAbD;;AAeA,MAAMe,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/BhB,IAAAA,UAAU,CAAC,GAAD,CAAV;;AACA,QAAIhC,WAAW,CAAC4C,OAAhB,EAAyB;AACvB5C,MAAAA,WAAW,CAAC4C,OAAZ,CAAoBK,KAApB;AACD;AACF,GALD;;AAOA,MAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/BlB,IAAAA,UAAU,CAAC,GAAD,CAAV;;AACA,QAAIhC,WAAW,CAAC4C,OAAhB,EAAyB;AACvB5C,MAAAA,WAAW,CAAC4C,OAAZ,CAAoBK,KAApB;AACD;AACF,GALD;;AAOA,MAAME,oBAAoB,GAAG,SAAvBA,oBAAuB,GAAM;AACjC,QAAIvC,cAAJ,EAAoB;AAClBwC,4BAASC,OAAT;;AACA7E,MAAAA,UAAU;AACVE,MAAAA,iBAAiB,CAAC,QAAD,CAAjB;AAQA4E,MAAAA,UAAU,CAAC9E,UAAD,EAAa,GAAb,CAAV;AACD,KAZD,MAYO,IAAImC,aAAJ,EAAmB;AACxB4C,MAAAA,QAAQ;AACT;AACF,GAhBD;;AAkBA,MAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,GAAM;AAClC9E,IAAAA,iBAAiB,CAACO,SAAD,CAAjB;AACAV,IAAAA,WAAW;AACZ,GAHD;;AAKA,MAAMkF,sBAAsB,GAAG,SAAzBA,sBAAyB,GAAM;AACnC,QAAIhF,cAAJ,EAAoB;AAClB+E,MAAAA,qBAAqB;AACtB,KAFD,MAEO;AACLL,MAAAA,oBAAoB;AACrB;AACF,GAND;;AAQA,MAAMO,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD,EAA4C;AAC/DvC,IAAAA,iBAAiB,CAAC,UAACwC,kBAAD;AAAA,2DAA4BA,kBAA5B,IAAgDD,IAAI,CAAC5B,EAArD;AAAA,KAAD,CAAjB;AACD,GAFD;;AAIA,MAAMwB,QAAQ;AAAA,gFAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBACXtC,eAAe,IAAI3C,KAAK,CAACuF,gBADd;AAAA;AAAA;AAAA;;AAEbC,iCAAMC,KAAN,CAAY,iCAAZ;;AAFa;;AAAA;AAAA;AAAA,qBAMM,0BAAa;AAChCF,gBAAAA,gBAAgB,EAAEvF,KAAK,CAACuF,gBAAN,GAAyB5C;AADX,eAAb,CANN;;AAAA;AAMT+C,cAAAA,MANS;;AASf,kBAAI,CAACA,MAAM,CAACC,SAAR,IAAqBD,MAAM,CAACE,IAAhC,EAAsC;AACpCF,gBAAAA,MAAM,CAACE,IAAP,CAAYC,OAAZ,CAAoB,UAACC,GAAD,EAAS;AAQ3BC,kBAAAA,aAAa,CAACD,GAAD,CAAb;AACD,iBATD;AAUD;;AApBc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAARb,QAAQ;AAAA;AAAA;AAAA,KAAd;;AAuBA,MAAMe,UAAU,GAAG,SAAbA,UAAa,CAACvC,EAAD,EAAgB;AACjC,QAAIjB,WAAW,CAACyD,IAAZ,CAAiB,UAAC7B,IAAD;AAAA,aAAUA,IAAI,CAACX,EAAL,KAAYA,EAAtB;AAAA,KAAjB,CAAJ,EAAgD;AAC9Cb,MAAAA,cAAc,CAAC,UAACsD,eAAD;AAAA,eAAqBA,eAAe,CAACC,MAAhB,CAAuB,UAAC/B,IAAD;AAAA,iBAAUA,IAAI,CAACX,EAAL,KAAYA,EAAtB;AAAA,SAAvB,CAArB;AAAA,OAAD,CAAd;AACAV,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;AACD;AACF,GALD;;AAOA,MAAMC,WAAW,GAAG,SAAdA,WAAc,CAAC5C,EAAD,EAAgB;AAClC,QAAIhB,YAAY,CAACwD,IAAb,CAAkB,UAAClC,KAAD;AAAA,aAAWA,KAAK,CAACN,EAAN,KAAaA,EAAxB;AAAA,KAAlB,CAAJ,EAAmD;AACjDZ,MAAAA,eAAe,CAAC,UAACyD,gBAAD;AAAA,eAAsBA,gBAAgB,CAACH,MAAjB,CAAwB,UAACpC,KAAD;AAAA,iBAAWA,KAAK,CAACN,EAAN,KAAaA,EAAxB;AAAA,SAAxB,CAAtB;AAAA,OAAD,CAAf;AACAV,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;AACD;AACF,GALD;;AAOA,MAAMG,UAAU,GAAG,SAAbA,UAAa,GAA+D;AAAA,QAA9DC,kBAA8D,uEAAP,EAAO;AAChF5D,IAAAA,cAAc,CAAC,EAAD,CAAd;AACAX,IAAAA,cAAc,CAAC,KAAD,CAAd;AACAe,IAAAA,kBAAkB,CAAC,IAAD,CAAlB;AACAH,IAAAA,eAAe,CAAC,EAAD,CAAf;AACAC,IAAAA,iBAAiB,CAAC,EAAD,CAAjB;AACAC,IAAAA,kBAAkB,CAChB,UAACqD,mBAAD;AAAA,aAAyBA,mBAAmB,IAAI,CAAAI,kBAAkB,QAAlB,YAAAA,kBAAkB,CAAEC,MAApB,KAA8B,CAAlC,CAA5C;AAAA,KADgB,CAAlB;AAGAxD,IAAAA,OAAO,CAAC,EAAD,CAAP;AACD,GAVD;;AAcA,MAAMyD,WAAW;AAAA,gFAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,mBACd/E,OAAO,CAAC2C,OADM;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,oBAKd,CAACjD,iBAAiB,CAACsF,SAAnB,IAAgC,CAAC,CAACxD,IAAI,CAACyD,KAAL,CAAWC,eAAX,CALpB;AAAA;AAAA;AAAA;;AAMhBrB,iCAAMC,KAAN,CAAYhE,CAAC,CAAC,oBAAD,CAAb,EAAqCA,CAAC,CAAC,mDAAD,CAAtC;;AANgB;;AAAA;AAWlBE,cAAAA,OAAO,CAAC2C,OAAR,GAAkB,IAAlB;AAEAhB,cAAAA,aAAa;AAEPM,cAAAA,QAfY,GAeDrC,YAAY,IAAIS,WAAhB,eAAwCmB,IAAxC,GAAiDA,IAfhD;AAgBlBF,cAAAA,OAAO,CAAC,EAAD,CAAP;;AACA,kBAAIvB,WAAW,CAAC4C,OAAhB,EAAyB;AACvB5C,gBAAAA,WAAW,CAAC4C,OAAZ,CAAoBwC,KAApB;AACD;;AAEKC,cAAAA,WArBY,GAqBE,EArBF;;AAAA,qCAsBPhD,OAtBO;AAuBhB,oBAAI,CAACA,OAAD,IAAUA,OAAK,CAACC,KAAN,KAAgBC,iBAAUC,aAAxC,EAAuD;AACrD;AACD;;AAED,oBAAIH,OAAK,CAACC,KAAN,KAAgBC,iBAAUE,SAA9B,EAAyC;AAEvC,sBAAInE,KAAK,CAACgH,cAAV,EAA0B;AAKxBnF,oBAAAA,WAAW,CAAC,UAACoF,YAAD;AAAA,2EAAsBA,YAAtB,IAAoClD,OAAK,CAACN,EAA1C;AAAA,qBAAD,CAAX;AACD,mBAND,MAMO;AACL9B,oBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AACA;AAAA,yBAAOrB,OAAO,CAACW,QAAD;AAAd;AACD;AACF;;AAGD,oBAAMsD,SAA2B,GAAG,uBAAOnD,OAAK,CAACK,IAAN,CAAW+C,QAAlB,CAApC;;AAEA,oBAAIpD,OAAK,CAACC,KAAN,KAAgBC,iBAAUmD,QAA1B,IAAsCrD,OAAK,CAACC,KAAN,KAAgBC,iBAAUoD,QAApE,EAA8E;AAC5EN,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfC,oBAAAA,QAAQ,EAAExD,OAAK,CAACK,IAAN,CAAWoD,IADN;AAEfC,oBAAAA,SAAS,EAAE1D,OAAK,CAAC2D,GAFF;AAGfR,oBAAAA,SAAS,EAAEA,SAAS,GAAGA,SAAH,GAAevG,SAHpB;AAIfgH,oBAAAA,eAAe,EAAE5D,OAAK,CAAC6D,MAJR;AAKfC,oBAAAA,cAAc,EAAE9D,OAAK,CAAC+D,KALP;AAMfC,oBAAAA,IAAI,EAAE;AANS,mBAAjB;AAQD;AArDe;;AAAA,2DAsBEtF,YAtBF;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAsBPsB,cAAAA,OAtBO;AAAA,2BAsBPA,OAtBO;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,2DAwDCvB,WAxDD;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAwDP4B,cAAAA,MAxDO;;AAAA,oBAyDZ,CAACA,MAAD,IAASA,MAAI,CAACJ,KAAL,KAAeC,iBAAUC,aAzDtB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,oBA4DZE,MAAI,CAACJ,KAAL,KAAeC,iBAAUE,SA5Db;AAAA;AAAA;AAAA;;AA8DdxC,cAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AA9Dc;;AAAA;AAiEV4C,cAAAA,SAjEU,GAiEoB,uBAAO9C,MAAI,CAACA,IAAL,CAAUoD,IAAjB,CAjEpB;;AAmEhB,kBAAIpD,MAAI,CAACJ,KAAL,KAAeC,iBAAUmD,QAAzB,IAAqChD,MAAI,CAACJ,KAAL,KAAeC,iBAAUoD,QAAlE,EAA4E;AAC1E,wCAAIjD,MAAI,CAACA,IAAL,CAAU2D,IAAd,aAAI,iBAAgBC,UAAhB,CAA2B,QAA3B,CAAJ,EAA0C;AACxCjB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfC,oBAAAA,QAAQ,EAAEnD,MAAI,CAACA,IAAL,CAAUoD,IADL;AAEfC,oBAAAA,SAAS,EAAErD,MAAI,CAACsD,GAFD;AAGfR,oBAAAA,SAAS,EAAEA,SAAS,GAAGA,SAAH,GAAevG,SAHpB;AAIfoH,oBAAAA,IAAI,EAAE;AAJS,mBAAjB;AAMD,iBAPD,MAOO,yBAAI3D,MAAI,CAACA,IAAL,CAAU2D,IAAd,aAAI,kBAAgBC,UAAhB,CAA2B,QAA3B,CAAJ,EAA0C;AAC/CjB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfW,oBAAAA,SAAS,EAAE7D,MAAI,CAACsD,GADD;AAEfQ,oBAAAA,QAAQ,EAAE9D,MAAI,CAACA,IAAL,CAAU8D,QAFL;AAGfC,oBAAAA,SAAS,EAAE/D,MAAI,CAACA,IAAL,CAAUgE,IAHN;AAIflB,oBAAAA,SAAS,EAAE9C,MAAI,CAACA,IAAL,CAAU2D,IAJN;AAKfM,oBAAAA,KAAK,EAAEjE,MAAI,CAACA,IAAL,CAAUoD,IALF;AAMfO,oBAAAA,IAAI,EAAE;AANS,mBAAjB;AAQD,iBATM,MASA,yBAAI3D,MAAI,CAACA,IAAL,CAAU2D,IAAd,aAAI,kBAAgBC,UAAhB,CAA2B,QAA3B,CAAJ,EAA0C;AAC/CjB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfW,oBAAAA,SAAS,EAAE7D,MAAI,CAACsD,GADD;AAEfQ,oBAAAA,QAAQ,EAAE9D,MAAI,CAACA,IAAL,CAAU8D,QAFL;AAGfC,oBAAAA,SAAS,EAAE/D,MAAI,CAACA,IAAL,CAAUgE,IAHN;AAIflB,oBAAAA,SAAS,EAAE9C,MAAI,CAACA,IAAL,CAAU2D,IAJN;AAKfO,oBAAAA,SAAS,EAAElE,MAAI,CAACkE,SALD;AAMfD,oBAAAA,KAAK,EAAEjE,MAAI,CAACA,IAAL,CAAUoD,IANF;AAOfO,oBAAAA,IAAI,EAAE;AAPS,mBAAjB;AASD,iBAVM,MAUA;AACLhB,kBAAAA,WAAW,CAACO,IAAZ,CAAiB;AACfW,oBAAAA,SAAS,EAAE7D,MAAI,CAACsD,GADD;AAEfS,oBAAAA,SAAS,EAAE/D,MAAI,CAACA,IAAL,CAAUgE,IAFN;AAGflB,oBAAAA,SAAS,EAAE9C,MAAI,CAACA,IAAL,CAAU2D,IAHN;AAIfM,oBAAAA,KAAK,EAAEjE,MAAI,CAACA,IAAL,CAAUoD,IAJF;AAKfO,oBAAAA,IAAI,EAAE;AALS,mBAAjB;AAOD;AACF;;AAvGe;AAAA;AAAA;;AAAA;AAAA,oBA2Gd,CAACnE,QAAD,IAAamD,WAAW,CAACN,MAAZ,KAAuB,CA3GtB;AAAA;AAAA;AAAA;;AA4GhB9E,cAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AA5GgB;;AAAA;AAgHlB,kBAAItE,KAAK,CAACoC,OAAN,IAAiB,CAAC,iDAAiBpC,KAAK,CAACoC,OAAvB,CAAtB,EAAuD;AAC/CmG,gBAAAA,cAD+C,iCAEhDvI,KAAK,CAACoC,OAF0C;AAGnD2E,kBAAAA,WAAW,EAAXA,WAHmD;AAInDyB,kBAAAA,eAAe,EAAE9F,cAJkC;AAKnD+F,kBAAAA,cAAc,EAAE9H,SALmC;AAMnDwC,kBAAAA,IAAI,EAAES;AAN6C;AAUrD5D,gBAAAA,KAAK,CAAC0I,iBAAN;AAEMC,gBAAAA,oBAZ+C,GAYxB3I,KAAK,CAAC4I,WAAN,CAAkBL,cAAlB,EAAkCM,IAAlC,CAAuC7I,KAAK,CAAC0I,iBAA7C,CAZwB;AAarDnC,gBAAAA,UAAU,CAACQ,WAAD,CAAV;AACA,yDAAwB4B,oBAAxB,EAA8C,gBAA9C;AAEAhH,gBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AACD,eAjBD,MAiBO;AACL,oBAAI;AACFtE,kBAAAA,KAAK,CAAC0G,WAAN,CAAkB;AAChBK,oBAAAA,WAAW,EAAXA,WADgB;AAEhByB,oBAAAA,eAAe,EAAE,sBAAK9F,cAAL,CAFD;AAIhBoG,oBAAAA,SAAS,EAAEtH,MAAF,oBAAEA,MAAM,CAAEiC,EAJH;AAKhBsF,oBAAAA,iBAAiB,EACf,OAAO/I,KAAK,CAACgJ,aAAb,KAA+B,SAA/B,GAA2CrI,SAA3C,GAAuDX,KAAK,CAACgJ,aAAN,CAAoBvF,EAN7D;AAOhBwF,oBAAAA,eAAe,EAAE/G,0BAA0B,IAAIvB,SAP/B;AAQhBwC,oBAAAA,IAAI,EAAES;AARU,mBAAlB;AAWA5D,kBAAAA,KAAK,CAACkJ,uBAAN;AACAvH,kBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;AACAiC,kBAAAA,UAAU,CAACQ,WAAD,CAAV;AACD,iBAfD,CAeE,OAAOoC,MAAP,EAAe;AACfxH,kBAAAA,OAAO,CAAC2C,OAAR,GAAkB,KAAlB;;AACA,sBAAItE,KAAK,CAACgJ,aAAN,IAAuB,OAAOhJ,KAAK,CAACgJ,aAAb,KAA+B,SAA1D,EAAqE;AACnEhJ,oBAAAA,KAAK,CAACoJ,qBAAN,CAA4BpJ,KAAK,CAACgJ,aAAlC;AACD;;AACD/F,kBAAAA,OAAO,CAACW,QAAQ,CAACyF,KAAT,CAAe9H,YAAY,IAAIS,WAAhB,GAA8B,CAA9B,GAAkC,CAAjD,CAAD,CAAP;AACAsH,kBAAAA,OAAO,CAACC,GAAR,CAAY,wBAAZ;AACD;AACF;;AAzJiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAX7C,WAAW;AAAA;AAAA;AAAA,KAAjB;;AA4JA,MAAM8C,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAC/F,EAAD,EAAgB;AACvC,QAAMM,KAAK,GAAGjC,YAAY,CAAC2B,EAAD,CAA1B;;AACA,QAAI,CAACM,KAAD,IAAUA,KAAK,CAACC,KAAN,KAAgBC,iBAAUC,aAAxC,EAAuD;AACrD;AACD;;AAED,QAAIH,KAAK,CAACC,KAAN,KAAgBC,iBAAUmD,QAA1B,IAAsCrD,KAAK,CAACC,KAAN,KAAgBC,iBAAUoD,QAApE,EAA8E;AAC5E,UAAMN,YAAW,GAAG,CAClB;AACEU,QAAAA,SAAS,EAAE1D,KAAK,CAAC2D,GADnB;AAEEK,QAAAA,IAAI,EAAE;AAFR,OADkB,CAApB;AAOAzE,MAAAA,aAAa;;AACb,UAAI;AACFtD,QAAAA,KAAK,CAAC0G,WAAN,CAAkB;AAChBK,UAAAA,WAAW,EAAXA,YADgB;AAEhByB,UAAAA,eAAe,EAAE,EAFD;AAGhBM,UAAAA,SAAS,EAAEtH,MAAF,oBAAEA,MAAM,CAAEiC,EAHH;AAIhBsF,UAAAA,iBAAiB,EACf,OAAO/I,KAAK,CAACgJ,aAAb,KAA+B,SAA/B,GAA2CrI,SAA3C,GAAuDX,KAAK,CAACgJ,aAAN,CAAoBvF,EAL7D;AAMhBwF,UAAAA,eAAe,EAAE/G,0BAA0B,IAAIvB,SAN/B;AAOhBwC,UAAAA,IAAI,EAAE;AAPU,SAAlB;AAUAtB,QAAAA,WAAW,CAAC,UAACoF,YAAD;AAAA,iBAAkBA,YAAY,CAACwC,MAAb,CAAoBxC,YAAY,CAACyC,OAAb,CAAqBjG,EAArB,CAApB,EAA8C,CAA9C,CAAlB;AAAA,SAAD,CAAX;AACA1B,QAAAA,eAAe,CAAC,UAAC4H,gBAAD,EAAsB;AACpC,iBAAOA,gBAAgB,CAAClG,EAAD,CAAvB;AACA,iBAAOkG,gBAAP;AACD,SAHc,CAAf;AAKA5G,QAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,iBAAyBA,mBAAmB,GAAG,CAA/C;AAAA,SAAD,CAAlB;AACD,OAlBD,CAkBE,OAAO+C,MAAP,EAAe;AACfG,QAAAA,OAAO,CAACC,GAAR,CAAY,QAAZ;AACD;AACF;AACF,GArCD;;AAuCA,MAAMK,cAAc,GAAG,SAAjBA,cAAiB,CAACC,GAAD,EAA2B;AAChDnI,IAAAA,WAAW,CAAC4C,OAAZ,GAAsBuF,GAAtB;;AACA,QAAI7J,KAAK,CAAC8J,WAAV,EAAuB;AACrB9J,MAAAA,KAAK,CAAC8J,WAAN,CAAkBD,GAAlB;AACD;AACF,GALD;;AAOA,MAAME,eAAe,GAAGzI,OAAO,GAC3BtB,KAAK,CAACgK,2BAAN,GACEhK,KAAK,CAACgK,2BAAN,CAAkC;AAChC1I,IAAAA,OAAO,EAAPA,OADgC;AAEhChB,IAAAA,MAAM,EAANA,MAFgC;AAGhC2J,IAAAA,mBAAmB,EAAE7E;AAHW,GAAlC,CADF,GAME,+BAAuC;AACrC9D,IAAAA,OAAO,EAAPA,OADqC;AAErChB,IAAAA,MAAM,EAANA,MAFqC;AAGrC2J,IAAAA,mBAAmB,EAAE7E;AAHgB,GAAvC,CAPyB,GAY1B,EAZL;;AAcA,MAAM8E,aAAa;AAAA,gFAAG;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,kBAEb,iDAAiBlK,KAAK,CAACoC,OAAvB,CAFa;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAGV9B,MAAM,CAAC4J,aAAP,+BACDlK,KAAK,CAACoC,OADL;AAEJqG,gBAAAA,cAAc,EAAE9H,SAFZ;AAGJwC,gBAAAA,IAAI,EAAE5B,YAAY,IAAIS,WAAhB,eAAwCmB,IAAxC,GAAiDA;AAHnD,iBAHU;;AAAA;AAUlBoD,cAAAA,UAAU;AACVvG,cAAAA,KAAK,CAAC0I,iBAAN;AAXkB;AAAA;;AAAA;AAAA;AAAA;AAalBY,cAAAA,OAAO,CAACC,GAAR;;AAbkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAbW,aAAa;AAAA;AAAA;AAAA,KAAnB;;AAiBA,MAAMC,cAAc,GAAG,sDAAvB;;AAEA,MAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAC9B3G,EAD8B,EAE9B4G,SAF8B,EAIS;AAAA,QADvCC,SACuC,uEADN,EACM;;AACvC,QAAMC,OAAoD,GAAG,SAAvDA,OAAuD,CAACC,WAAD;AAAA,aAC3DA,WAAW,CAACC,GAAZ,CAAgB,UAACC,UAAD,EAAgB;AAC9B,YAAIA,UAAU,CAACjH,EAAX,KAAkBA,EAAtB,EAA0B;AACxB,+CACKiH,UADL,EAEKJ,SAFL;AAGEtG,YAAAA,KAAK,EAAEqG;AAHT;AAKD;;AACD,eAAOK,UAAP;AACD,OATD,CAD2D;AAAA,KAA7D;;AAYA,WAAOH,OAAP;AACD,GAlBD;;AAoBA,MAAMI,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACC,KAAD,EAAiBC,YAAjB,EAAwCpH,EAAxC,EAAuD;AAC1F,QAAIoH,YAAJ,EAAkB;AAChB9H,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;;AACA,UAAIwE,KAAK,YAAYE,KAArB,EAA4B;AAC1B,YAAIX,cAAc,CAACY,IAAf,CAAoBH,KAAK,CAACI,OAA1B,CAAJ,EAAwC;AACtC,iBAAOnI,eAAe,CAACuH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUgH,aAAf,CAAxB,CAAtB;AACD;;AAED,eAAOpI,eAAe,CAACuH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUC,aAAf,CAAxB,CAAtB;AACD;AACF,KATD,MASO;AACLnB,MAAAA,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,eAAyBA,mBAAmB,GAAG,CAA/C;AAAA,OAAD,CAAlB;;AAEA,UAAIwE,KAAK,YAAYE,KAArB,EAA4B;AAC1B,YAAIX,cAAc,CAACY,IAAf,CAAoBH,KAAK,CAACI,OAA1B,CAAJ,EAAwC;AACtC,iBAAOpI,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUgH,aAAf,CAAxB,CAArB;AACD;;AACD,eAAOrI,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUC,aAAf,CAAxB,CAArB;AACD;AACF;AACF,GApBD;;AAsBA,MAAMgH,UAAU;AAAA,gFAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAASC,cAAAA,OAAT,SAASA,OAAT;AACT/G,cAAAA,IADS,GACI+G,OADJ,CACT/G,IADS,EACHX,EADG,GACI0H,OADJ,CACH1H,EADG;AAGjBb,cAAAA,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUE,SAAf,CAAxB,CAAd;AAEIiH,cAAAA,QALa,GAK4B,EAL5B;AAAA;;AAAA,mBAOXpL,KAAK,CAACqL,kBAPK;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAQIrL,KAAK,CAACqL,kBAAN,CAAyBjH,IAAzB,EAA+B9C,OAA/B,CARJ;;AAAA;AAQb8J,cAAAA,QARa;AAAA;AAAA;;AAAA;AAAA,oBASJ9J,OAAO,IAAI8C,IAAI,CAACkH,GATZ;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAUIhK,OAAO,CAACiK,QAAR,CAAiBnH,IAAI,CAACkH,GAAtB,EAA2BlH,IAAI,CAACoD,IAAhC,EAAsCpD,IAAI,CAAC2D,IAA3C,CAVJ;;AAAA;AAUbqD,cAAAA,QAVa;;AAAA;AAYTd,cAAAA,SAZS,GAYwB;AAAEhC,gBAAAA,SAAS,EAAE8C,QAAQ,CAAC9C,SAAtB;AAAiCZ,gBAAAA,GAAG,EAAE0D,QAAQ,CAAChH;AAA/C,eAZxB;AAafxB,cAAAA,cAAc,CAACwH,uBAAuB,CAAC3G,EAAD,EAAKQ,iBAAUmD,QAAf,EAAyBkD,SAAzB,CAAxB,CAAd;AAbe;AAAA;;AAAA;AAAA;AAAA;AAefK,cAAAA,4BAA4B,eAAQ,KAAR,EAAelH,EAAf,CAA5B;;AAfe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAVyH,UAAU;AAAA;AAAA;AAAA,KAAhB;;AAmBA,MAAMM,WAAW;AAAA,gFAAG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAASC,cAAAA,QAAT,SAASA,QAAT;AAAA,sBACGA,QAAQ,IAAI,EADf,EACVrH,IADU,SACVA,IADU,EACJX,EADI,SACJA,EADI;;AAAA,kBAGbW,IAHa;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAOdgH,cAAAA,QAPc,GAOH,EAPG;AAAA;;AAAA,mBAkBChH,IAAI,CAACX,EAlBN;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAmBN,8BAAiBW,IAAI,CAACX,EAAtB,CAnBM;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,iCAoBZW,IAAI,CAACkH,GApBO,aAoBZ,UAAU1E,KAAV,CAAgB,gBAAhB,CApBY;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAqBN,8BAAiBxC,IAAI,CAACkH,GAAtB,CArBM;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,6BAsBZlH,IAAI,CAACkH,GAtBO;;AAAA;AAAA;;AAAA;AAkBVI,cAAAA,QAlBU;AAwBVJ,cAAAA,GAxBU,GAwBJlH,IAAI,CAACoD,IAAL,IAAakE,QAAb,IAAyB,EAxBrB;AAAA;AAAA,qBA+BatH,IAAI,CAACuH,MAAL,KAAgB,QAAhB,IAC7B,CAACvH,IAAI,CAACwD,MADuB,IAE7B,CAACxD,IAAI,CAAC0D,KAFuB,IAG7B,OAAO9H,KAAK,CAAC4L,oBAAb,KAAsC,QAHT,IAI7B5L,KAAK,CAAC4L,oBAAN,KAA+B,CAJF,GAKzBN,GALyB,GAMzB,2BAAc;AACZM,gBAAAA,oBAAoB,EAAE5L,KAAK,CAAC4L,oBADhB;AAEZhE,gBAAAA,MAAM,EAAExD,IAAI,CAACwD,MAFD;AAGZ0D,gBAAAA,GAAG,EAAHA,GAHY;AAIZxD,gBAAAA,KAAK,EAAE1D,IAAI,CAAC0D;AAJA,eAAd,CArCY;;AAAA;AA+BV+D,cAAAA,aA/BU;AA2CV1E,cAAAA,QA3CU,GA2CCmE,GAAG,CAACQ,OAAJ,CAAY,+CAAZ,EAA6D,EAA7D,CA3CD;AA4CVC,cAAAA,WA5CU,GA4CI,uBAAO5E,QAAP,KAAoB,qBA5CxB;;AAAA,mBA6CZnH,KAAK,CAACgM,oBA7CM;AAAA;AAAA;AAAA;;AAAA;AAAA,qBA8CGhM,KAAK,CAACgM,oBAAN,CAA2B5H,IAA3B,EAAiC9C,OAAjC,CA9CH;;AAAA;AA8Cd8J,cAAAA,QA9Cc;AAAA;AAAA;;AAAA;AAAA,oBA+CLS,aAAa,IAAIvK,OA/CZ;AAAA;AAAA;AAAA;;AAAA,mBAgDVtB,KAAK,CAACgH,cAhDI;AAAA;AAAA;AAAA;;AAiDZ1F,cAAAA,OAAO,CAAC2K,SAAR,CAAkBJ,aAAlB,EAAiCzH,IAAI,CAAC+C,QAAtC,EAAgD4E,WAAhD,EAA6DlD,IAA7D,CAAkE,UAACqD,GAAD,EAAS;AACzE,oBAAItK,QAAQ,CAACuK,QAAT,CAAkB1I,EAAlB,CAAJ,EAA2B;AAEzB1B,kBAAAA,eAAe,CAAC,UAAC4H,gBAAD,EAAsB;AACpCA,oBAAAA,gBAAgB,CAAClG,EAAD,CAAhB,iCACKkG,gBAAgB,CAAClG,EAAD,CADrB;AAEEO,sBAAAA,KAAK,EAAEC,iBAAUmD,QAFnB;AAGEM,sBAAAA,GAAG,EAAEwE,GAAG,CAAC9H;AAHX;AAKA,2BAAOuF,gBAAP;AACD,mBAPc,CAAf;AAQD,iBAVD,MAUO;AACL,sBAAMyC,eAAe,GAAGhC,uBAAuB,CAAc3G,EAAd,EAAkBQ,iBAAUmD,QAA5B,EAAsC;AACnFM,oBAAAA,GAAG,EAAEwE,GAAG,CAAC9H;AAD0E,mBAAtC,CAA/C;AAGAvB,kBAAAA,eAAe,CAACuJ,eAAD,CAAf;AACD;AACF,eAjBD;AAjDY;AAAA;;AAAA;AAAA;AAAA,qBAoEK9K,OAAO,CAAC2K,SAAR,CAAkBJ,aAAlB,EAAiCzH,IAAI,CAAC+C,QAAtC,EAAgD4E,WAAhD,CApEL;;AAAA;AAoEZX,cAAAA,QApEY;;AAAA;AAwEhB,kBAAIiB,MAAM,CAACC,IAAP,CAAYlB,QAAZ,EAAsB3E,MAA1B,EAAkC;AAC1B2F,gBAAAA,eAD0B,GACRhC,uBAAuB,CAAc3G,EAAd,EAAkBQ,iBAAUmD,QAA5B,EAAsC;AACnFQ,kBAAAA,MAAM,EAAExD,IAAI,CAACwD,MADsE;AAEnFF,kBAAAA,GAAG,EAAE0D,QAAQ,CAAChH,IAFqE;AAGnF0D,kBAAAA,KAAK,EAAE1D,IAAI,CAAC0D;AAHuE,iBAAtC,CADf;AAMhCjF,gBAAAA,eAAe,CAACuJ,eAAD,CAAf;AACD;;AA/Ee;AAAA;;AAAA;AAAA;AAAA;AAiFhBzB,cAAAA,4BAA4B,eAAQ,IAAR,EAAclH,EAAd,CAA5B;;AAjFgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAX+H,WAAW;AAAA;AAAA;AAAA,KAAjB;;AAqFA,MAAMzF,aAAa;AAAA,iFAAG,kBAAO3B,IAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAMdX,cAAAA,EANc,GAMD,8BANC;AAOd8I,cAAAA,QAPc,GAOe,uBAAOnI,IAAI,CAACoD,IAAZ,CAPf;AASdgF,cAAAA,sBATc,GASgC5L,yBAThC,oBASgCA,yBAAyB,CAAEqF,IAA3B,CAClD,UAACwG,iBAAD;AAAA;;AAAA,qCAA+BrI,IAAI,CAACoD,IAApC,qBAA+B,WAAW2E,QAAX,CAAoBM,iBAApB,CAA/B;AAAA,eADkD,CAThC;AAYdC,cAAAA,qBAZc,GAY+B5L,oBAZ/B,oBAY+BA,oBAAoB,CAAEmF,IAAtB,CACjD,UAACsG,QAAD;AAAA;;AAAA,sCAAsBnI,IAAI,CAACoD,IAA3B,qBAAsB,YAAW2E,QAAX,CAAoBI,QAApB,CAAtB;AAAA,eADiD,CAZ/B;AAgBdlC,cAAAA,SAhBc,GAiBlBmC,sBAAsB,IAAIE,qBAA1B,GACIzI,iBAAUgH,aADd,GAEIhH,iBAAUE,SAnBI;AAqBdgH,cAAAA,OArBc,GAqBQ;AAC1B/G,gBAAAA,IAAI,gCAAOA,IAAP;AAAa2D,kBAAAA,IAAI,EAAEwE,QAAQ,KAAInI,IAAJ,oBAAIA,IAAI,CAAE2D,IAAV;AAA3B,kBADsB;AAE1BtE,gBAAAA,EAAE,EAAFA,EAF0B;AAG1BO,gBAAAA,KAAK,EAAEqG;AAHmB,eArBR;AAAA;AAAA,qBA2BdsC,OAAO,CAACC,GAAR,CAAY,CAChBhK,cAAc,CAAC,UAACsD,eAAD;AAAA,uBAAqBA,eAAe,CAAC2G,MAAhB,CAAuB,CAAC1B,OAAD,CAAvB,CAArB;AAAA,eAAD,CADE,EAEhBpI,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,uBAAyBA,mBAAmB,GAAG,CAA/C;AAAA,eAAD,CAFF,CAAZ,CA3Bc;;AAAA;AAgCpB,kBAAI,CAACoG,sBAAL,EAA6B;AAC3BtB,gBAAAA,UAAU,CAAC;AAAEC,kBAAAA,OAAO,EAAPA;AAAF,iBAAD,CAAV;AACD;;AAlCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAbpF,aAAa;AAAA;AAAA;AAAA,KAAnB;;AAqCA,MAAM+G,cAAc;AAAA,iFAAG,kBAAO/I,KAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AACfN,cAAAA,EADe,GACV,8BADU;AAGfsJ,cAAAA,sBAHe,GAGU3L,qBAHV,oBAGUA,qBAAqB,CAAE6E,IAAvB,CAA4B,UAACsG,QAAD;AAAA;;AAAA,qCACzDxI,KAAK,CAACuH,GADmD,qBACzD,WAAWa,QAAX,CAAoBI,QAApB,CADyD;AAAA,eAA5B,CAHV;AAOfS,cAAAA,uBAPe,GAOW7L,0BAPX,oBAOWA,0BAA0B,CAAE8E,IAA5B,CAAiC,UAACgH,kBAAD;AAAA;;AAAA,sCAC/DlJ,KAAK,CAACuH,GADyD,qBAC/D,YAAWa,QAAX,CAAoBc,kBAApB,CAD+D;AAAA,eAAjC,CAPX;AAWfC,cAAAA,UAXe,GAYnBF,uBAAuB,IAAID,sBAA3B,GACI9I,iBAAUgH,aADd,GAEIhH,iBAAUE,SAdK;AAgBfsH,cAAAA,QAhBe,GAgBS;AAC5BrH,gBAAAA,IAAI,EAAEL,KADsB;AAE5BN,gBAAAA,EAAE,EAAFA,EAF4B;AAG5BO,gBAAAA,KAAK,EAAEkJ;AAHqB,eAhBT;AAAA;AAAA,qBAsBfP,OAAO,CAACC,GAAR,CAAY,CAChB/J,eAAe,CAAC,UAACyD,gBAAD;AAAA,uBAAsBA,gBAAgB,CAACuG,MAAjB,CAAwB,CAACpB,QAAD,CAAxB,CAAtB;AAAA,eAAD,CADC,EAEhB1I,kBAAkB,CAAC,UAACqD,mBAAD;AAAA,uBAAyBA,mBAAmB,GAAG,CAA/C;AAAA,eAAD,CAFF,CAAZ,CAtBe;;AAAA;AA2BrB,kBAAI,CAAC4G,uBAAL,EAA8B;AAC5BxB,gBAAAA,WAAW,CAAC;AAAEC,kBAAAA,QAAQ,EAARA;AAAF,iBAAD,CAAX;AACD;;AA7BoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAH;;AAAA,oBAAdqB,cAAc;AAAA;AAAA;AAAA,KAApB;;AAgCA,MAAMK,mBAAmB,GAAG;AAC1BzJ,IAAAA,UAAU,EAAVA,UAD0B;AAE1B9B,IAAAA,QAAQ,EAARA,QAF0B;AAG1BE,IAAAA,YAAY,EAAZA,YAH0B;AAI1BoD,IAAAA,qBAAqB,EAArBA,qBAJ0B;AAK1B9B,IAAAA,cAAc,EAAdA,cAL0B;AAM1BZ,IAAAA,WAAW,EAAXA,WAN0B;AAO1BR,IAAAA,WAAW,EAAXA,WAP0B;AAQ1BS,IAAAA,YAAY,EAAZA,YAR0B;AAS1Bf,IAAAA,WAAW,EAAXA,WAT0B;AAU1BmC,IAAAA,cAAc,EAAdA,cAV0B;AAW1BnB,IAAAA,cAAc,EAAdA,cAX0B;AAY1BC,IAAAA,eAAe,EAAfA,eAZ0B;AAa1B0B,IAAAA,QAAQ,EAARA,QAb0B;AAc1Be,IAAAA,YAAY,EAAZA,YAd0B;AAe1BP,IAAAA,oBAAoB,EAApBA,oBAf0B;AAgB1BH,IAAAA,kBAAkB,EAAlBA,kBAhB0B;AAiB1B0I,IAAAA,cAAc,EAAEnI,QAjBU;AAkB1BL,IAAAA,kBAAkB,EAAlBA,kBAlB0B;AAmB1BK,IAAAA,QAAQ,EAARA,QAnB0B;AAoB1Be,IAAAA,UAAU,EAAVA,UApB0B;AAqB1BK,IAAAA,WAAW,EAAXA,WArB0B;AAsB1BE,IAAAA,UAAU,EAAVA,UAtB0B;AAuB1BpG,IAAAA,cAAc,EAAdA,cAvB0B;AAwB1BwB,IAAAA,OAAO,EAAPA,OAxB0B;AAyB1B6H,IAAAA,gBAAgB,EAAhBA,gBAzB0B;AA0B1BtH,IAAAA,0BAA0B,EAA1BA,0BA1B0B;AA2B1BL,IAAAA,WAAW,EAAXA,WA3B0B;AA4B1BE,IAAAA,eAAe,EAAfA,eA5B0B;AA6B1Ba,IAAAA,cAAc,EAAdA,cA7B0B;AA8B1BX,IAAAA,cAAc,EAAdA,cA9B0B;AA+B1BY,IAAAA,eAAe,EAAfA,eA/B0B;AAgC1B+G,IAAAA,cAAc,EAAdA,cAhC0B;AAiC1B9G,IAAAA,iBAAiB,EAAjBA,iBAjC0B;AAkC1BC,IAAAA,kBAAkB,EAAlBA,kBAlC0B;AAmC1BZ,IAAAA,6BAA6B,EAA7BA,6BAnC0B;AAoC1Ba,IAAAA,kBAAkB,EAAlBA,kBApC0B;AAqC1BC,IAAAA,OAAO,EAAPA,OArC0B;AAsC1BC,IAAAA,eAAe,EAAfA,eAtC0B;AAuC1BC,IAAAA,IAAI,EAAJA,IAvC0B;AAwC1B3B,IAAAA,MAAM,EAANA,MAxC0B;AAyC1B2D,IAAAA,sBAAsB,EAAtBA,sBAzC0B;AA0C1B4E,IAAAA,eAAe,EAAfA,eA1C0B;AA2C1BG,IAAAA,aAAa,EAAbA,aA3C0B;AA4C1BgB,IAAAA,UAAU,EAAVA,UA5C0B;AA6C1BM,IAAAA,WAAW,EAAXA,WA7C0B;AA8C1BzF,IAAAA,aAAa,EAAbA,aA9C0B;AA+C1B+G,IAAAA,cAAc,EAAdA;AA/C0B,KAgDvB9M,KAhDuB;AAiD1B0G,IAAAA,WAAW,EAAXA;AAjD0B,KAA5B;AAoDA,SACE,gCAAC,mBAAD,CAAqB,QAArB;AACE,IAAA,KAAK,EAAEyG,mBADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAGGpN,QAHH,CADF;AAOD,CA/tBM;;;;AAiuBA,IAAMsN,sBAAsB,GAAG,SAAzBA,sBAAyB,GAE/B;AACL,MAAMC,YAAY,GAAG,uBACnB5N,mBADmB,CAArB;;AAIA,MAAI4N,YAAY,KAAKzN,mDAAjB,IAA+C,CAAC,2CAApD,EAAyE;AACvE,UAAM,IAAIiL,KAAJ,wOAAN;AAGD;;AAED,SAAOwC,YAAP;AACD,CAdM;;;;AAqBA,IAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,CAIrCC,SAJqC,EAKqC;AAC1E,MAAMC,gCAAgC,GAAG,SAAnCA,gCAAmC,CACvCC,KADuC,EAEpC;AACH,QAAMP,mBAAmB,GAAGE,sBAAsB,EAAlD;AAEA,WAAO,gCAAC,SAAD,gCAAgBK,KAAhB,EAAiCP,mBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAND;;AAOAM,EAAAA,gCAAgC,CAACE,WAAjC,+BAAyE,oCACvEH,SADuE,CAAzE;AAGA,SAAOC,gCAAP;AACD,CAjBM","sourcesContent":["import React, { PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';\n\nimport { Alert, Keyboard } from 'react-native';\n\nimport type { TextInput, TextInputProps } from 'react-native';\n\nimport uniq from 'lodash/uniq';\nimport { lookup } from 'mime-types';\nimport {\n Attachment,\n logChatPromiseExecution,\n SendFileAPIResponse,\n StreamChat,\n Message as StreamMessage,\n UserFilters,\n UserOptions,\n UserResponse,\n UserSort,\n} from 'stream-chat';\n\nimport { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';\nimport { isEditingBoolean, useMessageDetailsForState } from './hooks/useMessageDetailsForState';\n\nimport type { AttachButtonProps } from '../../components/MessageInput/AttachButton';\nimport type { CommandsButtonProps } from '../../components/MessageInput/CommandsButton';\nimport type { InputEditingStateHeaderProps } from '../../components/MessageInput/components/InputEditingStateHeader';\nimport type { InputGiphySearchProps } from '../../components/MessageInput/components/InputGiphySearch';\nimport type { InputReplyStateHeaderProps } from '../../components/MessageInput/components/InputReplyStateHeader';\nimport type { CooldownTimerProps } from '../../components/MessageInput/CooldownTimer';\nimport type { FileUploadPreviewProps } from '../../components/MessageInput/FileUploadPreview';\nimport { useCooldown } from '../../components/MessageInput/hooks/useCooldown';\nimport type { ImageUploadPreviewProps } from '../../components/MessageInput/ImageUploadPreview';\nimport type { InputButtonsProps } from '../../components/MessageInput/InputButtons';\nimport type { MessageInputProps } from '../../components/MessageInput/MessageInput';\nimport type { MoreOptionsButtonProps } from '../../components/MessageInput/MoreOptionsButton';\nimport type { SendButtonProps } from '../../components/MessageInput/SendButton';\nimport type { UploadProgressIndicatorProps } from '../../components/MessageInput/UploadProgressIndicator';\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport { compressImage, getLocalAssetUri, pickDocument } from '../../native';\nimport type { Asset, DefaultStreamChatGenerics, File, UnknownType } from '../../types/types';\nimport {\n ACITriggerSettings,\n ACITriggerSettingsParams,\n FileState,\n FileStateValue,\n generateRandomId,\n TriggerSettings,\n urlRegex,\n} from '../../utils/utils';\nimport { useAttachmentPickerContext } from '../attachmentPickerContext/AttachmentPickerContext';\nimport { ChannelContextValue, useChannelContext } from '../channelContext/ChannelContext';\nimport { useChatContext } from '../chatContext/ChatContext';\nimport { useOwnCapabilitiesContext } from '../ownCapabilitiesContext/OwnCapabilitiesContext';\nimport { useThreadContext } from '../threadContext/ThreadContext';\nimport { useTranslationContext } from '../translationContext/TranslationContext';\nimport { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';\n\nimport { getDisplayName } from '../utils/getDisplayName';\nimport { isTestEnvironment } from '../utils/isTestEnvironment';\n\nexport type FileUpload = {\n file: File;\n id: string;\n state: FileStateValue;\n thumb_url?: string;\n url?: string;\n};\n\nexport type ImageUpload = {\n file: Partial<Asset> & {\n name?: string;\n };\n id: string;\n state: FileStateValue;\n height?: number;\n url?: string;\n width?: number;\n};\n\nexport type MentionAllAppUsersQuery<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n filters?: UserFilters<StreamChatGenerics>;\n options?: UserOptions;\n sort?: UserSort<StreamChatGenerics>;\n};\n\nexport type LocalMessageInputContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n appendText: (newText: string) => void;\n asyncIds: string[];\n asyncUploads: {\n [key: string]: {\n state: string;\n url: string;\n };\n };\n closeAttachmentPicker: () => void;\n /** The time at which the active cooldown will end */\n cooldownEndsAt: Date;\n /**\n * An array of file objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * \"url\": \"https://url1.com\",\n * },\n * ]\n * ```\n *\n */\n fileUploads: FileUpload[];\n giphyActive: boolean;\n /**\n * An array of image objects which are set for upload. It has the following structure:\n *\n * ```json\n * [\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_1\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * {\n * \"file\": // File object,\n * \"id\": \"randomly_generated_temp_id_2\",\n * \"state\": \"uploading\" // or \"finished\",\n * },\n * ]\n * ```\n *\n */\n imageUploads: ImageUpload[];\n inputBoxRef: React.MutableRefObject<TextInput | null>;\n isValidMessage: () => boolean;\n mentionedUsers: string[];\n numberOfUploads: number;\n onChange: (newText: string) => void;\n onSelectItem: (item: UserResponse<StreamChatGenerics>) => void;\n openAttachmentPicker: () => void;\n openCommandsPicker: () => void;\n openFilePicker: () => void;\n openMentionsPicker: () => void;\n pickFile: () => Promise<void>;\n /**\n * Function for removing a file from the upload preview\n *\n * @param id string ID of file in `fileUploads` object in state of MessageInput\n */\n removeFile: (id: string) => void;\n /**\n * Function for removing an image from the upload preview\n *\n * @param id string ID of image in `imageUploads` object in state of MessageInput\n */\n removeImage: (id: string) => void;\n resetInput: (pendingAttachments?: Attachment<StreamChatGenerics>[]) => void;\n selectedPicker: string | undefined;\n sending: React.MutableRefObject<boolean>;\n sendMessage: () => Promise<void>;\n sendMessageAsync: (id: string) => void;\n sendThreadMessageInChannel: boolean;\n setAsyncIds: React.Dispatch<React.SetStateAction<string[]>>;\n setAsyncUploads: React.Dispatch<\n React.SetStateAction<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>\n >;\n setFileUploads: React.Dispatch<React.SetStateAction<FileUpload[]>>;\n setGiphyActive: React.Dispatch<React.SetStateAction<boolean>>;\n setImageUploads: React.Dispatch<React.SetStateAction<ImageUpload[]>>;\n /**\n * Ref callback to set reference on input box\n */\n setInputBoxRef: (ref: TextInput | null) => void;\n setMentionedUsers: React.Dispatch<React.SetStateAction<string[]>>;\n setNumberOfUploads: React.Dispatch<React.SetStateAction<number>>;\n setSendThreadMessageInChannel: React.Dispatch<React.SetStateAction<boolean>>;\n setShowMoreOptions: React.Dispatch<React.SetStateAction<boolean>>;\n setText: React.Dispatch<React.SetStateAction<string>>;\n showMoreOptions: boolean;\n /**\n * Text value of the TextInput\n */\n text: string;\n toggleAttachmentPicker: () => void;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n triggerSettings: TriggerSettings<StreamChatGenerics>;\n updateMessage: () => Promise<void>;\n /** Function for attempting to upload a file */\n uploadFile: ({ newFile }: { newFile: FileUpload }) => Promise<void>;\n /** Function for attempting to upload an image */\n uploadImage: ({ newImage }: { newImage: ImageUpload }) => Promise<void>;\n uploadNewFile: (file: File) => Promise<void>;\n uploadNewImage: (image: Asset) => Promise<void>;\n};\n\nexport type InputMessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Custom UI component for attach button.\n *\n * Defaults to and accepts same props as: [AttachButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/attach-button/)\n */\n AttachButton: React.ComponentType<AttachButtonProps<StreamChatGenerics>>;\n clearEditingState: () => void;\n clearQuotedMessageState: () => void;\n /**\n * Custom UI component for commands button.\n *\n * Defaults to and accepts same props as: [CommandsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/commands-button/)\n */\n CommandsButton: React.ComponentType<CommandsButtonProps<StreamChatGenerics>>;\n /**\n * Custom UI component to display the remaining cooldown a user will have to wait before\n * being allowed to send another message. This component is displayed in place of the\n * send button for the MessageInput component.\n *\n * **default** [CooldownTimer](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/CooldownTimer.tsx)\n */\n CooldownTimer: React.ComponentType<CooldownTimerProps>;\n editing: boolean | MessageType<StreamChatGenerics>;\n editMessage: StreamChat<StreamChatGenerics>['updateMessage'];\n\n /**\n * Custom UI component for FileUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/FileUploadPreview.tsx\n */\n FileUploadPreview: React.ComponentType<FileUploadPreviewProps<StreamChatGenerics>>;\n\n /** When false, CommandsButton will be hidden */\n hasCommands: boolean;\n /** When false, FileSelectorIcon will be hidden */\n hasFilePicker: boolean;\n /** When false, ImageSelectorIcon will be hidden */\n hasImagePicker: boolean;\n /**\n * Custom UI component for ImageUploadPreview.\n * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/ImageUploadPreview.tsx\n */\n ImageUploadPreview: React.ComponentType<ImageUploadPreviewProps<StreamChatGenerics>>;\n InputEditingStateHeader: React.ComponentType<InputEditingStateHeaderProps<StreamChatGenerics>>;\n InputGiphySearch: React.ComponentType<InputGiphySearchProps<StreamChatGenerics>>;\n InputReplyStateHeader: React.ComponentType<InputReplyStateHeaderProps<StreamChatGenerics>>;\n /** Limit on allowed number of files to attach at a time. */\n maxNumberOfFiles: number;\n /**\n * Custom UI component for more options button.\n *\n * Defaults to and accepts same props as: [MoreOptionsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/more-options-button/)\n */\n MoreOptionsButton: React.ComponentType<MoreOptionsButtonProps<StreamChatGenerics>>;\n /** Limit on the number of lines in the text input before scrolling */\n numberOfLines: number;\n quotedMessage: boolean | MessageType<StreamChatGenerics>;\n /**\n * Custom UI component for send button.\n *\n * Defaults to and accepts same props as: [SendButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/send-button/)\n */\n SendButton: React.ComponentType<SendButtonProps<StreamChatGenerics>>;\n sendImageAsync: boolean;\n sendMessage: (message: Partial<StreamMessage<StreamChatGenerics>>) => Promise<void>;\n setQuotedMessageState: (message: MessageType<StreamChatGenerics>) => void;\n /**\n * Custom UI component to render checkbox with text (\"Also send to channel\") in Thread's input box.\n * When ticked, message will also be sent in parent channel.\n */\n ShowThreadMessageInChannelButton: React.ComponentType<{\n threadList?: boolean;\n }>;\n /**\n * Custom UI component to render upload progress indicator on attachment preview.\n *\n * **Default** [UploadProgressIndicator](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/UploadProgressIndicator.tsx)\n */\n UploadProgressIndicator: React.ComponentType<UploadProgressIndicatorProps>;\n /**\n * Additional props for underlying TextInput component. These props will be forwarded as it is to TextInput component.\n *\n * @see See https://reactnative.dev/docs/textinput#reference\n */\n additionalTextInputProps?: TextInputProps;\n /** Max number of suggestions to display in autocomplete list. Defaults to 10. */\n autoCompleteSuggestionsLimit?: number;\n /**\n * Mapping of input triggers to the outputs to be displayed by the AutoCompleteInput\n */\n autoCompleteTriggerSettings?: (\n settings: ACITriggerSettingsParams<StreamChatGenerics>,\n ) => TriggerSettings<StreamChatGenerics>;\n /**\n * Compress image with quality (from 0 to 1, where 1 is best quality).\n * On iOS, values larger than 0.8 don't produce a noticeable quality increase in most images,\n * while a value of 0.8 will reduce the file size by about half or less compared to a value of 1.\n * Image picker defaults to 0.8 for iOS and 1 for Android\n */\n compressImageQuality?: number;\n /**\n * Override file upload request\n *\n * @param file File object - { uri: '', name: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doDocUploadRequest?: (\n file: {\n name: string;\n size?: string | number;\n type?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n /**\n * Override image upload request\n *\n * @param file File object - { uri: '' }\n * @param channel Current channel object\n *\n * @overrideType Function\n */\n doImageUploadRequest?: (\n file: {\n name?: string;\n uri?: string;\n },\n channel: ChannelContextValue<StreamChatGenerics>['channel'],\n ) => Promise<SendFileAPIResponse>;\n\n /** Initial value to set on input */\n initialValue?: string;\n /**\n * Custom UI component for AutoCompleteInput.\n * Has access to all of [MessageInputContext](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/messageInputContext/MessageInputContext.tsx)\n */\n Input?: React.ComponentType<\n Omit<MessageInputProps<StreamChatGenerics>, 'Input'> &\n InputButtonsProps<StreamChatGenerics> & {\n getUsers: () => UserResponse<StreamChatGenerics>[];\n }\n >;\n /**\n * Custom UI component to override buttons on left side of input box\n * Defaults to [InputButtons](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/InputButtons.tsx),\n * which contain following components/buttons:\n *\n * - AttachButton\n * - CommandsButtom\n *\n * You have access to following prop functions:\n *\n * - closeAttachmentPicker\n * - openAttachmentPicker\n * - openCommandsPicker\n * - toggleAttachmentPicker\n */\n InputButtons?: React.ComponentType<InputButtonsProps<StreamChatGenerics>>;\n maxMessageLength?: number;\n mentionAllAppUsersEnabled?: boolean;\n /** Object containing filters/sort/options overrides for an @mention user query */\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n /**\n * Callback that is called when the text input's text changes. Changed text is passed as a single string argument to the callback handler.\n */\n onChangeText?: (newText: string) => void;\n SendMessageDisallowedIndicator?: React.ComponentType;\n /**\n * ref for input setter function\n *\n * @param ref [Ref object](https://reactjs.org/docs/refs-and-the-dom.html) for underling `TextInput` component.\n *\n * @overrideType Function\n */\n setInputRef?: (ref: TextInput | null) => void;\n};\n\nexport type MessageInputContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = LocalMessageInputContext<StreamChatGenerics> &\n Omit<InputMessageInputContextValue<StreamChatGenerics>, 'sendMessage'>;\n\nexport const MessageInputContext = React.createContext(\n DEFAULT_BASE_CONTEXT_VALUE as MessageInputContextValue,\n);\n\nexport const MessageInputProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value: InputMessageInputContextValue<StreamChatGenerics>;\n}>) => {\n const { closePicker, openPicker, selectedPicker, setSelectedPicker } =\n useAttachmentPickerContext();\n const { appSettings, client } = useChatContext<StreamChatGenerics>();\n\n const getFileUploadConfig = () => {\n const fileConfig = appSettings?.app?.file_upload_config;\n if (fileConfig !== null || fileConfig !== undefined) {\n return fileConfig;\n } else {\n return {};\n }\n };\n\n const blockedFileExtensionTypes = getFileUploadConfig()?.blocked_file_extensions;\n const blockedFileMimeTypes = getFileUploadConfig()?.blocked_mime_types;\n\n const getImageUploadConfig = () => {\n const imageConfig = appSettings?.app?.image_upload_config;\n if (imageConfig !== null || imageConfig !== undefined) {\n return imageConfig;\n }\n return {};\n };\n\n const blockedImageExtensionTypes = getImageUploadConfig()?.blocked_file_extensions;\n const blockedImageMimeTypes = getImageUploadConfig()?.blocked_mime_types;\n\n const channelCapabities = useOwnCapabilitiesContext();\n\n const { channel, giphyEnabled } = useChannelContext<StreamChatGenerics>();\n const { thread } = useThreadContext<StreamChatGenerics>();\n const { t } = useTranslationContext();\n const inputBoxRef = useRef<TextInput | null>(null);\n const sending = useRef(false);\n\n const [asyncIds, setAsyncIds] = useState<string[]>([]);\n const [asyncUploads, setAsyncUploads] = useState<{\n [key: string]: {\n state: string;\n url: string;\n };\n }>({});\n const [giphyActive, setGiphyActive] = useState(false);\n const [sendThreadMessageInChannel, setSendThreadMessageInChannel] = useState(false);\n const { editing, hasFilePicker, hasImagePicker, initialValue } = value;\n const {\n fileUploads,\n imageUploads,\n mentionedUsers,\n numberOfUploads,\n setFileUploads,\n setImageUploads,\n setMentionedUsers,\n setNumberOfUploads,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n } = useMessageDetailsForState<StreamChatGenerics>(editing, initialValue);\n const { endsAt: cooldownEndsAt, start: startCooldown } = useCooldown<StreamChatGenerics>();\n\n const threadId = thread?.id;\n useEffect(() => {\n setSendThreadMessageInChannel(false);\n }, [threadId]);\n\n const appendText = (newText: string) => {\n setText((prevText) => `${prevText}${newText}`);\n };\n\n /** Checks if the message is valid or not. Accordingly we can enable/disable send button */\n const isValidMessage = () => {\n if (text && text.trim()) {\n return true;\n }\n\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n return false;\n }\n\n return true;\n }\n\n return false;\n };\n\n const onChange = (newText: string) => {\n if (sending.current) {\n return;\n }\n setText(newText);\n\n if (newText && channel && channelCapabities.sendTypingEvents) {\n logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');\n }\n\n if (value.onChangeText) {\n value.onChangeText(newText);\n }\n };\n\n const openCommandsPicker = () => {\n appendText('/');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openMentionsPicker = () => {\n appendText('@');\n if (inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n };\n\n const openAttachmentPicker = () => {\n if (hasImagePicker) {\n Keyboard.dismiss();\n openPicker();\n setSelectedPicker('images');\n /**\n * TODO: Remove this, this is the result of\n * the bottom sheet now having some keyboard\n * handling baked in, creating an issue when\n * we call dismiss and open in short order.\n * https://github.com/gorhom/react-native-bottom-sheet/issues/446\n */\n setTimeout(openPicker, 600);\n } else if (hasFilePicker) {\n pickFile();\n }\n };\n\n const closeAttachmentPicker = () => {\n setSelectedPicker(undefined);\n closePicker();\n };\n\n const toggleAttachmentPicker = () => {\n if (selectedPicker) {\n closeAttachmentPicker();\n } else {\n openAttachmentPicker();\n }\n };\n\n const onSelectItem = (item: UserResponse<StreamChatGenerics>) => {\n setMentionedUsers((prevMentionedUsers) => [...prevMentionedUsers, item.id]);\n };\n\n const pickFile = async () => {\n if (numberOfUploads >= value.maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return;\n }\n\n const result = await pickDocument({\n maxNumberOfFiles: value.maxNumberOfFiles - numberOfUploads,\n });\n if (!result.cancelled && result.docs) {\n result.docs.forEach((doc) => {\n /**\n * TODO: The current tight coupling of images to the image\n * picker does not allow images picked from the file picker\n * to be rendered in a preview via the uploadNewImage call.\n * This should be updated alongside allowing image a file\n * uploads together.\n */\n uploadNewFile(doc);\n });\n }\n };\n\n const removeFile = (id: string) => {\n if (fileUploads.some((file) => file.id === id)) {\n setFileUploads((prevFileUploads) => prevFileUploads.filter((file) => file.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const removeImage = (id: string) => {\n if (imageUploads.some((image) => image.id === id)) {\n setImageUploads((prevImageUploads) => prevImageUploads.filter((image) => image.id !== id));\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n }\n };\n\n const resetInput = (pendingAttachments: Attachment<StreamChatGenerics>[] = []) => {\n setFileUploads([]);\n setGiphyActive(false);\n setShowMoreOptions(true);\n setImageUploads([]);\n setMentionedUsers([]);\n setNumberOfUploads(\n (prevNumberOfUploads) => prevNumberOfUploads - (pendingAttachments?.length || 0),\n );\n setText('');\n };\n\n // TODO: Figure out why this is async, as it doesn't await any promise.\n // eslint-disable-next-line require-await\n const sendMessage = async () => {\n if (sending.current) {\n return;\n }\n\n if (!channelCapabities.sendLinks && !!text.match(urlRegex)) {\n Alert.alert(t('Links are disabled'), t('Sending links is not allowed in this conversation'));\n\n return;\n }\n\n sending.current = true;\n\n startCooldown();\n\n const prevText = giphyEnabled && giphyActive ? `/giphy ${text}` : text;\n setText('');\n if (inputBoxRef.current) {\n inputBoxRef.current.clear();\n }\n\n const attachments = [] as Attachment<StreamChatGenerics>[];\n for (const image of imageUploads) {\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n\n if (image.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n if (value.sendImageAsync) {\n /**\n * If user hit send before image uploaded, push ID into a queue to later\n * be matched with the successful CDN response\n */\n setAsyncIds((prevAsyncIds) => [...prevAsyncIds, image.id]);\n } else {\n sending.current = false;\n return setText(prevText);\n }\n }\n\n // To get the mime type of the image from the file name and send it as an response for an image\n const mime_type: string | boolean = lookup(image.file.filename as string);\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n attachments.push({\n fallback: image.file.name,\n image_url: image.url,\n mime_type: mime_type ? mime_type : undefined,\n original_height: image.height,\n original_width: image.width,\n type: 'image',\n });\n }\n }\n\n for (const file of fileUploads) {\n if (!file || file.state === FileState.UPLOAD_FAILED) {\n continue;\n }\n if (file.state === FileState.UPLOADING) {\n // TODO: show error to user that they should wait until image is uploaded\n sending.current = false;\n return;\n }\n const mime_type: string | boolean = lookup(file.file.name as string);\n\n if (file.state === FileState.UPLOADED || file.state === FileState.FINISHED) {\n if (file.file.type?.startsWith('image/')) {\n attachments.push({\n fallback: file.file.name,\n image_url: file.url,\n mime_type: mime_type ? mime_type : undefined,\n type: 'image',\n });\n } else if (file.file.type?.startsWith('audio/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'audio',\n });\n } else if (file.file.type?.startsWith('video/')) {\n attachments.push({\n asset_url: file.url,\n duration: file.file.duration,\n file_size: file.file.size,\n mime_type: file.file.type,\n thumb_url: file.thumb_url,\n title: file.file.name,\n type: 'video',\n });\n } else {\n attachments.push({\n asset_url: file.url,\n file_size: file.file.size,\n mime_type: file.file.type,\n title: file.file.name,\n type: 'file',\n });\n }\n }\n }\n\n // Disallow sending message if its empty.\n if (!prevText && attachments.length === 0) {\n sending.current = false;\n return;\n }\n\n if (value.editing && !isEditingBoolean(value.editing)) {\n const updatedMessage = {\n ...value.editing,\n attachments,\n mentioned_users: mentionedUsers,\n quoted_message: undefined,\n text: prevText,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0];\n\n // TODO: Remove this line and show an error when submit fails\n value.clearEditingState();\n\n const updateMessagePromise = value.editMessage(updatedMessage).then(value.clearEditingState);\n resetInput(attachments);\n logChatPromiseExecution(updateMessagePromise, 'update message');\n\n sending.current = false;\n } else {\n try {\n value.sendMessage({\n attachments,\n mentioned_users: uniq(mentionedUsers),\n /** Parent message id - in case of thread */\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: prevText,\n } as unknown as StreamMessage<StreamChatGenerics>);\n\n value.clearQuotedMessageState();\n sending.current = false;\n resetInput(attachments);\n } catch (_error) {\n sending.current = false;\n if (value.quotedMessage && typeof value.quotedMessage !== 'boolean') {\n value.setQuotedMessageState(value.quotedMessage);\n }\n setText(prevText.slice(giphyEnabled && giphyActive ? 7 : 0)); // 7 because of '/giphy ' length\n console.log('Failed to send message');\n }\n }\n };\n\n const sendMessageAsync = (id: string) => {\n const image = asyncUploads[id];\n if (!image || image.state === FileState.UPLOAD_FAILED) {\n return;\n }\n\n if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {\n const attachments = [\n {\n image_url: image.url,\n type: 'image',\n },\n ] as StreamMessage<StreamChatGenerics>['attachments'];\n\n startCooldown();\n try {\n value.sendMessage({\n attachments,\n mentioned_users: [],\n parent_id: thread?.id,\n quoted_message_id:\n typeof value.quotedMessage === 'boolean' ? undefined : value.quotedMessage.id,\n show_in_channel: sendThreadMessageInChannel || undefined,\n text: '',\n } as unknown as Partial<StreamMessage<StreamChatGenerics>>);\n\n setAsyncIds((prevAsyncIds) => prevAsyncIds.splice(prevAsyncIds.indexOf(id), 1));\n setAsyncUploads((prevAsyncUploads) => {\n delete prevAsyncUploads[id];\n return prevAsyncUploads;\n });\n\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n } catch (_error) {\n console.log('Failed');\n }\n }\n };\n\n const setInputBoxRef = (ref: TextInput | null) => {\n inputBoxRef.current = ref;\n if (value.setInputRef) {\n value.setInputRef(ref);\n }\n };\n\n const triggerSettings = channel\n ? value.autoCompleteTriggerSettings\n ? value.autoCompleteTriggerSettings({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ACITriggerSettings<StreamChatGenerics>({\n channel,\n client,\n onMentionSelectItem: onSelectItem,\n })\n : ({} as TriggerSettings<StreamChatGenerics>);\n\n const updateMessage = async () => {\n try {\n if (!isEditingBoolean(value.editing)) {\n await client.updateMessage({\n ...value.editing,\n quoted_message: undefined,\n text: giphyEnabled && giphyActive ? `/giphy ${text}` : text,\n } as Parameters<StreamChat<StreamChatGenerics>['updateMessage']>[0]);\n }\n\n resetInput();\n value.clearEditingState();\n } catch (error) {\n console.log(error);\n }\n };\n\n const regExcondition = /File (extension \\.\\w{2,4}|type \\S+) is not supported/;\n\n const getUploadSetStateAction = <UploadType extends ImageUpload | FileUpload>(\n id: string,\n fileState: FileStateValue,\n extraData: Partial<UploadType> = {},\n ): React.SetStateAction<UploadType[]> => {\n const uploads: (prevUploads: UploadType[]) => UploadType[] = (prevUploads: UploadType[]) =>\n prevUploads.map((prevUpload) => {\n if (prevUpload.id === id) {\n return {\n ...prevUpload,\n ...extraData,\n state: fileState,\n };\n }\n return prevUpload;\n });\n\n return uploads;\n };\n\n const handleFileOrImageUploadError = (error: unknown, isImageError: boolean, id: string) => {\n if (isImageError) {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setImageUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n\n return setImageUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n } else {\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads - 1);\n\n if (error instanceof Error) {\n if (regExcondition.test(error.message)) {\n return setFileUploads(getUploadSetStateAction(id, FileState.NOT_SUPPORTED));\n }\n return setFileUploads(getUploadSetStateAction(id, FileState.UPLOAD_FAILED));\n }\n }\n };\n\n const uploadFile = async ({ newFile }: { newFile: FileUpload }) => {\n const { file, id } = newFile;\n\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADING));\n\n let response: Partial<SendFileAPIResponse> = {};\n try {\n if (value.doDocUploadRequest) {\n response = await value.doDocUploadRequest(file, channel);\n } else if (channel && file.uri) {\n response = await channel.sendFile(file.uri, file.name, file.type);\n }\n const extraData: Partial<FileUpload> = { thumb_url: response.thumb_url, url: response.file };\n setFileUploads(getUploadSetStateAction(id, FileState.UPLOADED, extraData));\n } catch (error: unknown) {\n handleFileOrImageUploadError(error, false, id);\n }\n };\n\n const uploadImage = async ({ newImage }: { newImage: ImageUpload }) => {\n const { file, id } = newImage || {};\n\n if (!file) {\n return;\n }\n\n let response = {} as SendFileAPIResponse;\n\n try {\n /**\n * Expo now uses the assets-library which is also how remote\n * native files are presented. We now return a file id from Expo\n * only, if that file id exits we call getLocalAssetUri to download\n * the asset for expo before uploading it. We do the same for native\n * if the uri includes assets-library, this uses the CameraRoll.save\n * function to also create a local uri.\n */\n const localUri = file.id\n ? await getLocalAssetUri(file.id)\n : file.uri?.match(/assets-library/)\n ? await getLocalAssetUri(file.uri)\n : file.uri;\n\n const uri = file.name || localUri || '';\n /**\n * We skip compression if:\n * - the file is from the camera as that should already be compressed\n * - the file has not height/width value to maintain for compression\n * - the compressImageQuality number is not present or is 1 (meaning no compression)\n */\n const compressedUri = await (file.source === 'camera' ||\n !file.height ||\n !file.width ||\n typeof value.compressImageQuality !== 'number' ||\n value.compressImageQuality === 1\n ? uri\n : compressImage({\n compressImageQuality: value.compressImageQuality,\n height: file.height,\n uri,\n width: file.width,\n }));\n const filename = uri.replace(/^(file:\\/\\/|content:\\/\\/|assets-library:\\/\\/)/, '');\n const contentType = lookup(filename) || 'multipart/form-data';\n if (value.doImageUploadRequest) {\n response = await value.doImageUploadRequest(file, channel);\n } else if (compressedUri && channel) {\n if (value.sendImageAsync) {\n channel.sendImage(compressedUri, file.filename, contentType).then((res) => {\n if (asyncIds.includes(id)) {\n // Evaluates to true if user hit send before image successfully uploaded\n setAsyncUploads((prevAsyncUploads) => {\n prevAsyncUploads[id] = {\n ...prevAsyncUploads[id],\n state: FileState.UPLOADED,\n url: res.file,\n };\n return prevAsyncUploads;\n });\n } else {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n url: res.file,\n });\n setImageUploads(newImageUploads);\n }\n });\n } else {\n response = await channel.sendImage(compressedUri, file.filename, contentType);\n }\n }\n\n if (Object.keys(response).length) {\n const newImageUploads = getUploadSetStateAction<ImageUpload>(id, FileState.UPLOADED, {\n height: file.height,\n url: response.file,\n width: file.width,\n });\n setImageUploads(newImageUploads);\n }\n } catch (error) {\n handleFileOrImageUploadError(error, true, id);\n }\n };\n\n const uploadNewFile = async (file: {\n name: string;\n size?: number | string;\n type?: string;\n uri?: string;\n }) => {\n const id: string = generateRandomId();\n const mimeType: string | boolean = lookup(file.name);\n\n const isBlockedFileExtension: boolean | undefined = blockedFileExtensionTypes?.some(\n (fileExtensionType: string) => file.name?.includes(fileExtensionType),\n );\n const isBlockedFileMimeType: boolean | undefined = blockedFileMimeTypes?.some(\n (mimeType: string) => file.name?.includes(mimeType),\n );\n\n const fileState =\n isBlockedFileExtension || isBlockedFileMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newFile: FileUpload = {\n file: { ...file, type: mimeType || file?.type },\n id,\n state: fileState,\n };\n\n await Promise.all([\n setFileUploads((prevFileUploads) => prevFileUploads.concat([newFile])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedFileExtension) {\n uploadFile({ newFile });\n }\n };\n\n const uploadNewImage = async (image: Asset) => {\n const id = generateRandomId();\n\n const isBlockedImageMimeType = blockedImageMimeTypes?.some((mimeType: string) =>\n image.uri?.includes(mimeType),\n );\n\n const isBlockedImageExtension = blockedImageExtensionTypes?.some((imageExtensionType: string) =>\n image.uri?.includes(imageExtensionType),\n );\n\n const imageState =\n isBlockedImageExtension || isBlockedImageMimeType\n ? FileState.NOT_SUPPORTED\n : FileState.UPLOADING;\n\n const newImage: ImageUpload = {\n file: image,\n id,\n state: imageState,\n };\n\n await Promise.all([\n setImageUploads((prevImageUploads) => prevImageUploads.concat([newImage])),\n setNumberOfUploads((prevNumberOfUploads) => prevNumberOfUploads + 1),\n ]);\n\n if (!isBlockedImageExtension) {\n uploadImage({ newImage });\n }\n };\n\n const messageInputContext = useCreateMessageInputContext({\n appendText,\n asyncIds,\n asyncUploads,\n closeAttachmentPicker,\n cooldownEndsAt,\n fileUploads,\n giphyActive,\n imageUploads,\n inputBoxRef,\n isValidMessage,\n mentionedUsers,\n numberOfUploads,\n onChange,\n onSelectItem,\n openAttachmentPicker,\n openCommandsPicker,\n openFilePicker: pickFile,\n openMentionsPicker,\n pickFile,\n removeFile,\n removeImage,\n resetInput,\n selectedPicker,\n sending,\n sendMessageAsync,\n sendThreadMessageInChannel,\n setAsyncIds,\n setAsyncUploads,\n setFileUploads,\n setGiphyActive,\n setImageUploads,\n setInputBoxRef,\n setMentionedUsers,\n setNumberOfUploads,\n setSendThreadMessageInChannel,\n setShowMoreOptions,\n setText,\n showMoreOptions,\n text,\n thread,\n toggleAttachmentPicker,\n triggerSettings,\n updateMessage,\n uploadFile,\n uploadImage,\n uploadNewFile,\n uploadNewImage,\n ...value,\n sendMessage, // overriding the originally passed in sendMessage\n });\n\n return (\n <MessageInputContext.Provider\n value={messageInputContext as unknown as MessageInputContextValue}\n >\n {children}\n </MessageInputContext.Provider>\n );\n};\n\nexport const useMessageInputContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const contextValue = useContext(\n MessageInputContext,\n ) as unknown as MessageInputContextValue<StreamChatGenerics>;\n\n if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {\n throw new Error(\n `The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure you have configured Channel component correctly - https://getstream.io/chat/docs/sdk/reactnative/basics/hello_stream_chat/#channel`,\n );\n }\n\n return contextValue;\n};\n\n/**\n * Typescript currently does not support partial inference so if MessageInputContext\n * typing is desired while using the HOC withMessageInputContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withMessageInputContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>> => {\n const WithMessageInputContextComponent = (\n props: Omit<P, keyof MessageInputContextValue<StreamChatGenerics>>,\n ) => {\n const messageInputContext = useMessageInputContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...messageInputContext} />;\n };\n WithMessageInputContextComponent.displayName = `WithMessageInputContext${getDisplayName(\n Component,\n )}`;\n return WithMessageInputContextComponent;\n};\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.11.1-beta.1"
2
+ "version": "4.11.1-beta.2"
3
3
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stream-chat-react-native-core",
3
3
  "description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
4
- "version": "4.11.1-beta.1",
4
+ "version": "4.11.1-beta.2",
5
5
  "author": {
6
6
  "company": "Stream.io Inc",
7
7
  "name": "Stream.io Inc"
@@ -172,7 +172,7 @@ export const ImageGalleryFooterWithContext = <
172
172
  fromUrl: photo.uri,
173
173
  });
174
174
  // `image/jpeg` is added for the case where the mime_type isn't available for a file/image
175
- await shareImage({ type: photo.mime_type ?? 'image/jpeg', url: localFile });
175
+ await shareImage({ type: photo.mime_type || 'image/jpeg', url: localFile });
176
176
  await deleteFile({ uri: localFile });
177
177
  } catch (error) {
178
178
  console.log(error);
@@ -206,7 +206,7 @@ export const ImageGalleryFooterWithContext = <
206
206
  ) : (
207
207
  <TouchableOpacity disabled={shareMenuOpen} onPress={share}>
208
208
  <View style={[styles.leftContainer, leftContainer]}>
209
- {ShareIcon ? ShareIcon : <ShareIconDefault />}
209
+ {ShareIcon ? ShareIcon : <ShareIconDefault pathFill={black} />}
210
210
  </View>
211
211
  </TouchableOpacity>
212
212
  )}
@@ -676,11 +676,11 @@ export const MessageInputProvider = <
676
676
  attachments.push({
677
677
  fallback: image.file.name,
678
678
  image_url: image.url,
679
- mime_type,
679
+ mime_type: mime_type ? mime_type : undefined,
680
680
  original_height: image.height,
681
681
  original_width: image.width,
682
682
  type: 'image',
683
- } as Attachment<StreamChatGenerics>);
683
+ });
684
684
  }
685
685
  }
686
686
 
@@ -700,9 +700,9 @@ export const MessageInputProvider = <
700
700
  attachments.push({
701
701
  fallback: file.file.name,
702
702
  image_url: file.url,
703
- mime_type,
703
+ mime_type: mime_type ? mime_type : undefined,
704
704
  type: 'image',
705
- } as Attachment<StreamChatGenerics>);
705
+ });
706
706
  } else if (file.file.type?.startsWith('audio/')) {
707
707
  attachments.push({
708
708
  asset_url: file.url,
@@ -711,7 +711,7 @@ export const MessageInputProvider = <
711
711
  mime_type: file.file.type,
712
712
  title: file.file.name,
713
713
  type: 'audio',
714
- } as Attachment<StreamChatGenerics>);
714
+ });
715
715
  } else if (file.file.type?.startsWith('video/')) {
716
716
  attachments.push({
717
717
  asset_url: file.url,
@@ -721,7 +721,7 @@ export const MessageInputProvider = <
721
721
  thumb_url: file.thumb_url,
722
722
  title: file.file.name,
723
723
  type: 'video',
724
- } as Attachment<StreamChatGenerics>);
724
+ });
725
725
  } else {
726
726
  attachments.push({
727
727
  asset_url: file.url,
@@ -729,7 +729,7 @@ export const MessageInputProvider = <
729
729
  mime_type: file.file.type,
730
730
  title: file.file.name,
731
731
  type: 'file',
732
- } as Attachment<StreamChatGenerics>);
732
+ });
733
733
  }
734
734
  }
735
735
  }
@@ -6,7 +6,7 @@ Object {
6
6
  Object {
7
7
  "fallback": undefined,
8
8
  "image_url": undefined,
9
- "mime_type": false,
9
+ "mime_type": undefined,
10
10
  "original_height": undefined,
11
11
  "original_width": undefined,
12
12
  "type": "image",
@@ -87,7 +87,7 @@ Object {
87
87
  Object {
88
88
  "fallback": undefined,
89
89
  "image_url": undefined,
90
- "mime_type": false,
90
+ "mime_type": undefined,
91
91
  "original_height": undefined,
92
92
  "original_width": undefined,
93
93
  "type": "image",
@@ -95,7 +95,7 @@ Object {
95
95
  Object {
96
96
  "fallback": undefined,
97
97
  "image_url": undefined,
98
- "mime_type": false,
98
+ "mime_type": undefined,
99
99
  "original_height": undefined,
100
100
  "original_width": undefined,
101
101
  "type": "image",
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.11.1-beta.1"
2
+ "version": "4.11.1-beta.2"
3
3
  }