@sendbird/uikit-react-native 3.10.0 → 3.10.1

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.
@@ -24,8 +24,10 @@ const AUTO_FOCUS = _reactNative.Platform.select({
24
24
  android: true,
25
25
  default: false
26
26
  });
27
+ const isAndroidApi35 = _reactNative.Platform.OS === 'android' && _reactNative.Platform.Version >= 35;
27
28
  const KEYBOARD_AVOID_VIEW_BEHAVIOR = _reactNative.Platform.select({
28
29
  ios: 'padding',
30
+ android: isAndroidApi35 ? 'padding' : undefined,
29
31
  default: undefined
30
32
  });
31
33
 
@@ -45,6 +47,15 @@ const ChannelInput = props => {
45
47
  setMessageToEdit
46
48
  } = props;
47
49
  const safeArea = (0, _uikitUtils.useSafeAreaPadding)(['top', 'left', 'right', 'bottom']);
50
+
51
+ // Android API 35+ keyboard avoidance handling
52
+ /**
53
+ * Android API 35+ introduced edge-to-edge layouts, which changed how keyboard avoidance should be handled.
54
+ * For API 35+, the system manages insets automatically, so we use the provided keyboardAvoidOffset directly.
55
+ * For older Android versions, we manually subtract the safe area bottom padding to avoid overlapping with system UI.
56
+ * See: https://developer.android.com/develop/ui/views/layout/edge-to-edge
57
+ */
58
+ const keyboardVerticalOffset = isAndroidApi35 ? keyboardAvoidOffset : -safeArea.paddingBottom + keyboardAvoidOffset;
48
59
  const {
49
60
  colors,
50
61
  typography
@@ -100,7 +111,7 @@ const ChannelInput = props => {
100
111
  });
101
112
  }
102
113
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.KeyboardAvoidingView, {
103
- keyboardVerticalOffset: -safeArea.paddingBottom + keyboardAvoidOffset,
114
+ keyboardVerticalOffset: keyboardVerticalOffset,
104
115
  behavior: KEYBOARD_AVOID_VIEW_BEHAVIOR
105
116
  }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
106
117
  style: {
@@ -133,7 +144,7 @@ const ChannelInput = props => {
133
144
  messageToEdit: messageToEdit,
134
145
  setMessageToEdit: setMessageToEdit,
135
146
  style: textInputStyle
136
- }))), /*#__PURE__*/_react.default.createElement(SafeAreaBottom, {
147
+ }))), !isAndroidApi35 && /*#__PURE__*/_react.default.createElement(SafeAreaBottom, {
137
148
  height: safeArea.paddingBottom
138
149
  }))), mentionAvailable && props.SuggestedMentionList && /*#__PURE__*/_react.default.createElement(props.SuggestedMentionList, {
139
150
  text: text,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_useMentionTextInput","_interopRequireDefault","_AttachmentsButton","_EditInput","_MessageToReplyPreview","_SendInput","_VoiceMessageInput","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","AUTO_FOCUS","Platform","select","ios","android","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","safeArea","useSafeAreaPadding","colors","typography","useUIKitTheme","sbOptions","mentionManager","useSendbirdChat","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","useMentionTextInput","inputMode","useIIFE","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","inputHeight","setInputHeight","useState","styles","inputDefault","height","fontStyle","useMemo","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","StyleSheet","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","replace","shouldRenderInput","createElement","SafeAreaBottom","paddingBottom","Fragment","KeyboardAvoidingView","keyboardVerticalOffset","behavior","View","paddingStart","paddingEnd","backgroundColor","background","onLayout","nativeEvent","layout","inputContainer","key","ref","VoiceMessageInput","AttachmentsButton","MessageToReplyPreview","autoFocus","SuggestedMentionList","topInset","paddingTop","bottomInset","useEffect","triggerTyping","action","endTyping","startTyping","catch","error","Logger","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","createStyleSheet","justifyContent","width","flex","marginEnd","borderRadius","minHeight","maxHeight","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n /**\n * Whether to show user id information on each item.\n * */\n showUserId?: boolean;\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\n// const GET_INPUT_KEY = (shouldReset: boolean) => {\n// return Platform.OS === 'ios' && shouldReset ? 'uikit-input-clear' : 'uikit-input';\n// };\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = 'input'; //GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={safeArea.paddingBottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-safeArea.paddingBottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View\n style={{\n paddingStart: safeArea.paddingStart,\n paddingEnd: safeArea.paddingEnd,\n backgroundColor: colors.background,\n }}\n >\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n <SafeAreaBottom height={safeArea.paddingBottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={safeArea.paddingTop}\n bottomInset={safeArea.paddingBottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = () => (text.length === 0 ? channel.endTyping() : channel.startTyping());\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginEnd: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_useMentionTextInput","_interopRequireDefault","_AttachmentsButton","_EditInput","_MessageToReplyPreview","_SendInput","_VoiceMessageInput","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","AUTO_FOCUS","Platform","select","ios","android","isAndroidApi35","OS","Version","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","safeArea","useSafeAreaPadding","keyboardVerticalOffset","paddingBottom","colors","typography","useUIKitTheme","sbOptions","mentionManager","useSendbirdChat","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","useMentionTextInput","inputMode","useIIFE","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","inputHeight","setInputHeight","useState","styles","inputDefault","height","fontStyle","useMemo","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","StyleSheet","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","replace","shouldRenderInput","createElement","SafeAreaBottom","Fragment","KeyboardAvoidingView","behavior","View","paddingStart","paddingEnd","backgroundColor","background","onLayout","nativeEvent","layout","inputContainer","key","ref","VoiceMessageInput","AttachmentsButton","MessageToReplyPreview","autoFocus","SuggestedMentionList","topInset","paddingTop","bottomInset","useEffect","triggerTyping","action","endTyping","startTyping","catch","error","Logger","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","createStyleSheet","justifyContent","width","flex","marginEnd","borderRadius","minHeight","maxHeight","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n /**\n * Whether to show user id information on each item.\n * */\n showUserId?: boolean;\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst isAndroidApi35 = Platform.OS === 'android' && Platform.Version >= 35;\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({\n ios: 'padding' as const,\n android: isAndroidApi35 ? ('padding' as const) : undefined,\n default: undefined,\n});\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\n// const GET_INPUT_KEY = (shouldReset: boolean) => {\n// return Platform.OS === 'ios' && shouldReset ? 'uikit-input-clear' : 'uikit-input';\n// };\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);\n\n // Android API 35+ keyboard avoidance handling\n /**\n * Android API 35+ introduced edge-to-edge layouts, which changed how keyboard avoidance should be handled.\n * For API 35+, the system manages insets automatically, so we use the provided keyboardAvoidOffset directly.\n * For older Android versions, we manually subtract the safe area bottom padding to avoid overlapping with system UI.\n * See: https://developer.android.com/develop/ui/views/layout/edge-to-edge\n */\n const keyboardVerticalOffset = isAndroidApi35 ? keyboardAvoidOffset : -safeArea.paddingBottom + keyboardAvoidOffset;\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = 'input'; //GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={safeArea.paddingBottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView keyboardVerticalOffset={keyboardVerticalOffset} behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}>\n <View\n style={{\n paddingStart: safeArea.paddingStart,\n paddingEnd: safeArea.paddingEnd,\n backgroundColor: colors.background,\n }}\n >\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n {!isAndroidApi35 && <SafeAreaBottom height={safeArea.paddingBottom} />}\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={safeArea.paddingTop}\n bottomInset={safeArea.paddingBottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = () => (text.length === 0 ? channel.endTyping() : channel.startTyping());\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginEnd: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- const VERSION = '3.10.0';
7
+ const VERSION = '3.10.1';
8
8
  var _default = exports.default = VERSION;
9
9
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.10.0';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,QAAQ;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACVH,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.10.1';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,QAAQ;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACVH,OAAO","ignoreList":[]}
@@ -15,8 +15,10 @@ const AUTO_FOCUS = Platform.select({
15
15
  android: true,
16
16
  default: false
17
17
  });
18
+ const isAndroidApi35 = Platform.OS === 'android' && Platform.Version >= 35;
18
19
  const KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({
19
20
  ios: 'padding',
21
+ android: isAndroidApi35 ? 'padding' : undefined,
20
22
  default: undefined
21
23
  });
22
24
 
@@ -36,6 +38,15 @@ const ChannelInput = props => {
36
38
  setMessageToEdit
37
39
  } = props;
38
40
  const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);
41
+
42
+ // Android API 35+ keyboard avoidance handling
43
+ /**
44
+ * Android API 35+ introduced edge-to-edge layouts, which changed how keyboard avoidance should be handled.
45
+ * For API 35+, the system manages insets automatically, so we use the provided keyboardAvoidOffset directly.
46
+ * For older Android versions, we manually subtract the safe area bottom padding to avoid overlapping with system UI.
47
+ * See: https://developer.android.com/develop/ui/views/layout/edge-to-edge
48
+ */
49
+ const keyboardVerticalOffset = isAndroidApi35 ? keyboardAvoidOffset : -safeArea.paddingBottom + keyboardAvoidOffset;
39
50
  const {
40
51
  colors,
41
52
  typography
@@ -91,7 +102,7 @@ const ChannelInput = props => {
91
102
  });
92
103
  }
93
104
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(KeyboardAvoidingView, {
94
- keyboardVerticalOffset: -safeArea.paddingBottom + keyboardAvoidOffset,
105
+ keyboardVerticalOffset: keyboardVerticalOffset,
95
106
  behavior: KEYBOARD_AVOID_VIEW_BEHAVIOR
96
107
  }, /*#__PURE__*/React.createElement(View, {
97
108
  style: {
@@ -124,7 +135,7 @@ const ChannelInput = props => {
124
135
  messageToEdit: messageToEdit,
125
136
  setMessageToEdit: setMessageToEdit,
126
137
  style: textInputStyle
127
- }))), /*#__PURE__*/React.createElement(SafeAreaBottom, {
138
+ }))), !isAndroidApi35 && /*#__PURE__*/React.createElement(SafeAreaBottom, {
128
139
  height: safeArea.paddingBottom
129
140
  }))), mentionAvailable && props.SuggestedMentionList && /*#__PURE__*/React.createElement(props.SuggestedMentionList, {
130
141
  text: text,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useMemo","useState","KeyboardAvoidingView","Platform","StyleSheet","View","createStyleSheet","useUIKitTheme","Logger","replace","useIIFE","useSafeAreaPadding","useSendbirdChat","useMentionTextInput","AttachmentsButton","EditInput","MessageToReplyPreview","SendInput","VoiceMessageInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","safeArea","colors","typography","sbOptions","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","inputHeight","setInputHeight","styles","inputDefault","height","fontStyle","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","length","shouldRenderInput","createElement","SafeAreaBottom","paddingBottom","Fragment","keyboardVerticalOffset","behavior","paddingStart","paddingEnd","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","paddingTop","bottomInset","triggerTyping","action","endTyping","startTyping","catch","error","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","justifyContent","width","flex","marginEnd","borderRadius","minHeight","maxHeight","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n /**\n * Whether to show user id information on each item.\n * */\n showUserId?: boolean;\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\n// const GET_INPUT_KEY = (shouldReset: boolean) => {\n// return Platform.OS === 'ios' && shouldReset ? 'uikit-input-clear' : 'uikit-input';\n// };\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = 'input'; //GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={safeArea.paddingBottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-safeArea.paddingBottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View\n style={{\n paddingStart: safeArea.paddingStart,\n paddingEnd: safeArea.paddingEnd,\n backgroundColor: colors.background,\n }}\n >\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n <SafeAreaBottom height={safeArea.paddingBottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={safeArea.paddingTop}\n bottomInset={safeArea.paddingBottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = () => (text.length === 0 ? channel.endTyping() : channel.startTyping());\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginEnd: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useMemo","useState","KeyboardAvoidingView","Platform","StyleSheet","View","createStyleSheet","useUIKitTheme","Logger","replace","useIIFE","useSafeAreaPadding","useSendbirdChat","useMentionTextInput","AttachmentsButton","EditInput","MessageToReplyPreview","SendInput","VoiceMessageInput","AUTO_FOCUS","select","ios","android","default","isAndroidApi35","OS","Version","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","safeArea","keyboardVerticalOffset","paddingBottom","colors","typography","sbOptions","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","inputHeight","setInputHeight","styles","inputDefault","height","fontStyle","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","length","shouldRenderInput","createElement","SafeAreaBottom","Fragment","behavior","paddingStart","paddingEnd","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","paddingTop","bottomInset","triggerTyping","action","endTyping","startTyping","catch","error","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","justifyContent","width","flex","marginEnd","borderRadius","minHeight","maxHeight","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n /**\n * Whether to show user id information on each item.\n * */\n showUserId?: boolean;\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst isAndroidApi35 = Platform.OS === 'android' && Platform.Version >= 35;\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({\n ios: 'padding' as const,\n android: isAndroidApi35 ? ('padding' as const) : undefined,\n default: undefined,\n});\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\n// const GET_INPUT_KEY = (shouldReset: boolean) => {\n// return Platform.OS === 'ios' && shouldReset ? 'uikit-input-clear' : 'uikit-input';\n// };\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);\n\n // Android API 35+ keyboard avoidance handling\n /**\n * Android API 35+ introduced edge-to-edge layouts, which changed how keyboard avoidance should be handled.\n * For API 35+, the system manages insets automatically, so we use the provided keyboardAvoidOffset directly.\n * For older Android versions, we manually subtract the safe area bottom padding to avoid overlapping with system UI.\n * See: https://developer.android.com/develop/ui/views/layout/edge-to-edge\n */\n const keyboardVerticalOffset = isAndroidApi35 ? keyboardAvoidOffset : -safeArea.paddingBottom + keyboardAvoidOffset;\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = 'input'; //GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={safeArea.paddingBottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView keyboardVerticalOffset={keyboardVerticalOffset} behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}>\n <View\n style={{\n paddingStart: safeArea.paddingStart,\n paddingEnd: safeArea.paddingEnd,\n backgroundColor: colors.background,\n }}\n >\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n {!isAndroidApi35 && <SafeAreaBottom height={safeArea.paddingBottom} />}\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={safeArea.paddingTop}\n bottomInset={safeArea.paddingBottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = () => (text.length === 0 ? channel.endTyping() : channel.startTyping());\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginEnd: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAC3D,SAASC,oBAAoB,EAAEC,QAAQ,EAAaC,UAAU,EAAwBC,IAAI,QAAQ,cAAc;AAEhH,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,yCAAyC;AACzF,SACEC,MAAM,EAUNC,OAAO,EACPC,OAAO,EACPC,kBAAkB,QACb,uBAAuB;AAE9B,SAASC,eAAe,QAAQ,wBAAwB;AACxD,OAAOC,mBAAmB,MAAM,iCAAiC;AAGjE,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,OAAOC,SAAS,MAAM,aAAa;AAEnC,SAASC,qBAAqB,QAAQ,yBAAyB;AAC/D,OAAOC,SAAS,MAAM,aAAa;AACnC,OAAOC,iBAAiB,MAAkC,qBAAqB;AAsD/E,MAAMC,UAAU,GAAGhB,QAAQ,CAACiB,MAAM,CAAC;EAAEC,GAAG,EAAE,KAAK;EAAEC,OAAO,EAAE,IAAI;EAAEC,OAAO,EAAE;AAAM,CAAC,CAAC;AACjF,MAAMC,cAAc,GAAGrB,QAAQ,CAACsB,EAAE,KAAK,SAAS,IAAItB,QAAQ,CAACuB,OAAO,IAAI,EAAE;AAC1E,MAAMC,4BAA4B,GAAGxB,QAAQ,CAACiB,MAAM,CAAC;EACnDC,GAAG,EAAE,SAAkB;EACvBC,OAAO,EAAEE,cAAc,GAAI,SAAS,GAAaI,SAAS;EAC1DL,OAAO,EAAEK;AACX,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMC,YAAY,GAAIC,KAAwB,IAAK;EACjD,MAAM;IAAEC,OAAO;IAAEC,mBAAmB;IAAEC,aAAa;IAAEC;EAAiB,CAAC,GAAGJ,KAAK;EAE/E,MAAMK,QAAQ,GAAGxB,kBAAkB,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;;EAEvE;EACA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMyB,sBAAsB,GAAGZ,cAAc,GAAGQ,mBAAmB,GAAG,CAACG,QAAQ,CAACE,aAAa,GAAGL,mBAAmB;EACnH,MAAM;IAAEM,MAAM;IAAEC;EAAW,CAAC,GAAGhC,aAAa,CAAC,CAAC;EAC9C,MAAM;IAAEiC,SAAS;IAAEC;EAAe,CAAC,GAAG7B,eAAe,CAAC,CAAC;EAEvD,MAAM;IAAE8B,SAAS;IAAEC,iBAAiB;IAAEC,YAAY;IAAEC,IAAI;IAAEC,YAAY;IAAEC;EAAe,CAAC,GAAGlC,mBAAmB,CAAC;IAC7GoB;EACF,CAAC,CAAC;EACF,MAAMe,SAAS,GAAGtC,OAAO,CAAC,MAAM;IAC9B,IAAIuB,aAAa,IAAI,CAACA,aAAa,CAACgB,aAAa,CAAC,CAAC,EAAE,OAAO,MAAM,CAAC,KAC9D,OAAO,MAAM;EACpB,CAAC,CAAC;EAEF,MAAMC,gBAAgB,GACpBV,SAAS,CAACW,KAAK,CAACC,YAAY,CAACrB,OAAO,CAACsB,aAAa,IAAItB,OAAO,CAACuB,cAAc,CAAC,CAAC,IAAI,CAACvB,OAAO,CAACwB,WAAW;EACxG,MAAMC,iBAAiB,GAAG,OAAO,CAAC,CAAC;;EAEnC,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGzD,QAAQ,CAAC0D,MAAM,CAACC,YAAY,CAACC,MAAM,CAAC;EAE1E,MAAMC,SAAS,GAAG9D,OAAO,CAAC,MAAM;IAC9B,IAAI,CAACuC,UAAU,CAACwB,KAAK,CAACC,QAAQ,EAAE,OAAOzB,UAAU,CAACwB,KAAK;IACvD;IACA,OAAO;MAAE,GAAGxB,UAAU,CAACwB,KAAK;MAAEE,UAAU,EAAE1B,UAAU,CAACwB,KAAK,CAACC,QAAQ,GAAG,KAAK;MAAEE,iBAAiB,EAAE;IAAS,CAAC;EAC5G,CAAC,EAAE,CAAC3B,UAAU,CAACwB,KAAK,CAACC,QAAQ,CAAC,CAAC;EAE/B,MAAMG,cAAc,GAAG/D,UAAU,CAACgE,OAAO,CAAC,CAACT,MAAM,CAACU,KAAK,EAAEP,SAAS,EAAEhC,KAAK,CAACwC,KAAK,CAAC,CAAC;EAEjFC,gBAAgB,CAAC1B,IAAI,EAAEd,OAAO,CAAC;EAC/ByC,sBAAsB,CAAC1B,YAAY,EAAEhB,KAAK,CAAC2C,aAAa,CAAC;EACzDC,sBAAsB,CAAC9B,YAAY,EAAEX,aAAa,CAAC;EAEnD,MAAM0C,gBAAgB,GAAGA,CAACC,IAAoB,EAAEC,iBAAwB,KAAK;IAC3E,MAAMC,oBAAoB,GAAGrC,cAAc,CAACsC,sBAAsB,CAACH,IAAI,EAAE,IAAI,CAAC;IAC9E,MAAMI,KAAK,GAAG;MAAEC,KAAK,EAAEJ,iBAAiB,CAACI,KAAK;MAAEC,GAAG,EAAEL,iBAAiB,CAACI,KAAK,GAAGH,oBAAoB,CAACK,MAAM,GAAG;IAAE,CAAC;IAEhHrC,YAAY,CAACrC,OAAO,CAACoC,IAAI,EAAEgC,iBAAiB,CAACI,KAAK,EAAEJ,iBAAiB,CAACK,GAAG,EAAEJ,oBAAoB,CAAC,EAAE;MAAEF,IAAI;MAAEI;IAAM,CAAC,CAAC;EACpH,CAAC;EAED,IAAI,CAAClD,KAAK,CAACsD,iBAAiB,EAAE;IAC5B,oBAAOtF,KAAA,CAAAuF,aAAA,CAACC,cAAc;MAACzB,MAAM,EAAE1B,QAAQ,CAACE;IAAc,CAAE,CAAC;EAC3D;EAEA,oBACEvC,KAAA,CAAAuF,aAAA,CAAAvF,KAAA,CAAAyF,QAAA,qBACEzF,KAAA,CAAAuF,aAAA,CAACnF,oBAAoB;IAACkC,sBAAsB,EAAEA,sBAAuB;IAACoD,QAAQ,EAAE7D;EAA6B,gBAC3G7B,KAAA,CAAAuF,aAAA,CAAChF,IAAI;IACHiE,KAAK,EAAE;MACLmB,YAAY,EAAEtD,QAAQ,CAACsD,YAAY;MACnCC,UAAU,EAAEvD,QAAQ,CAACuD,UAAU;MAC/BC,eAAe,EAAErD,MAAM,CAACsD;IAC1B;EAAE,gBAEF9F,KAAA,CAAAuF,aAAA,CAAChF,IAAI;IAACwF,QAAQ,EAAGC,CAAC,IAAKpC,cAAc,CAACoC,CAAC,CAACC,WAAW,CAACC,MAAM,CAACnC,MAAM,CAAE;IAACS,KAAK,EAAEX,MAAM,CAACsC;EAAe,GAC9FjD,SAAS,KAAK,MAAM,iBACnBlD,KAAA,CAAAuF,aAAA,CAACpE,SAAS,EAAAiF,QAAA,KACJpE,KAAK;IACTqE,GAAG,EAAE3C,iBAAkB;IACvB4C,GAAG,EAAExD,YAAsB;IAC3BC,IAAI,EAAEA,IAAK;IACXC,YAAY,EAAEA,YAAa;IAC3BH,iBAAiB,EAAEA,iBAAkB;IACrCI,cAAc,EAAEA,cAAe;IAC/B7B,iBAAiB,EAAEY,KAAK,CAACZ,iBAAiB,IAAIA,iBAAkB;IAChEJ,iBAAiB,EAAEgB,KAAK,CAAChB,iBAAiB,IAAIA,iBAAkB;IAChEE,qBAAqB,EAAEc,KAAK,CAACd,qBAAqB,IAAIA,qBAAsB;IAC5EsD,KAAK,EAAEH;EAAe,EACvB,CACF,EACAnB,SAAS,KAAK,MAAM,IAAIf,aAAa,iBACpCnC,KAAA,CAAAuF,aAAA,CAACtE,SAAS,EAAAmF,QAAA,KACJpE,KAAK;IACTqE,GAAG,EAAE3C,iBAAkB;IACvB4C,GAAG,EAAExD,YAAsB;IAC3BC,IAAI,EAAEA,IAAK;IACXC,YAAY,EAAEA,YAAa;IAC3BuD,SAAS,EAAElF,UAAW;IACtBwB,iBAAiB,EAAEA,iBAAkB;IACrCI,cAAc,EAAEA,cAAe;IAC/Bd,aAAa,EAAEA,aAAc;IAC7BC,gBAAgB,EAAEA,gBAAiB;IACnCoC,KAAK,EAAEH;EAAe,EACvB,CAEC,CAAC,EACN,CAAC3C,cAAc,iBAAI1B,KAAA,CAAAuF,aAAA,CAACC,cAAc;IAACzB,MAAM,EAAE1B,QAAQ,CAACE;EAAc,CAAE,CACjE,CACc,CAAC,EACtBa,gBAAgB,IAAIpB,KAAK,CAACwE,oBAAoB,iBAC7CxG,KAAA,CAAAuF,aAAA,CAACvD,KAAK,CAACwE,oBAAoB;IACzBzD,IAAI,EAAEA,IAAK;IACXH,SAAS,EAAEA,SAAU;IACrBe,WAAW,EAAEA,WAAY;IACzB8C,QAAQ,EAAEpE,QAAQ,CAACqE,UAAW;IAC9BC,WAAW,EAAEtE,QAAQ,CAACE,aAAc;IACpCsC,gBAAgB,EAAEA,gBAAiB;IACnC5B,cAAc,EAAEA;EAAe,CAChC,CAEH,CAAC;AAEP,CAAC;AAED,MAAMwB,gBAAgB,GAAGA,CAAC1B,IAAY,EAAEd,OAA4B,KAAK;EACvEhC,SAAS,CACP,MAAM;IACJ,SAAS2G,aAAaA,CAAA,EAAG;MACvB,IAAI3E,OAAO,CAACuB,cAAc,CAAC,CAAC,EAAE;QAC5B,MAAMqD,MAAM,GAAGA,CAAA,KAAO9D,IAAI,CAACsC,MAAM,KAAK,CAAC,GAAGpD,OAAO,CAAC6E,SAAS,CAAC,CAAC,GAAG7E,OAAO,CAAC8E,WAAW,CAAC,CAAE;QACtFF,MAAM,CAAC,CAAC,CAACG,KAAK,CAAEC,KAAK,IAAK;UACxBvG,MAAM,CAACwG,KAAK,CAAC,wCAAwC,EAAED,KAAK,CAAC;QAC/D,CAAC,CAAC;MACJ;IACF;IAEAL,aAAa,CAAC,CAAC;EACjB,CAAC,EACD3E,OAAO,CAACuB,cAAc,CAAC,CAAC,GAAG,CAACT,IAAI,CAAC,GAAG,EACtC,CAAC;AACH,CAAC;AAED,MAAM2B,sBAAsB,GAAGA,CAACyC,OAA8B,EAAEC,YAAqB,KAAK;EACxFnH,SAAS,CAAC,MAAM;IACd,IAAImH,YAAY,EAAED,OAAO,CAAC,EAAE,CAAC;EAC/B,CAAC,EAAE,CAACC,YAAY,CAAC,CAAC;AACpB,CAAC;AAED,MAAMxC,sBAAsB,GAAGA,CAC7B9B,YAA2D,EAC3DX,aAAmC,KAChC;EACHlC,SAAS,CAAC,MAAM;IACd,IAAIkC,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEkF,aAAa,CAAC,CAAC,EAAE;MAClC,IAAI,CAAChG,UAAU,EAAEiG,UAAU,CAAC;QAAA,IAAAC,qBAAA;QAAA,QAAAA,qBAAA,GAAMzE,YAAY,CAAC0E,OAAO,cAAAD,qBAAA,uBAApBA,qBAAA,CAAsBE,KAAK,CAAC,CAAC;MAAA,GAAE,GAAG,CAAC;IACvE;EACF,CAAC,EAAE,CAACtF,aAAa,CAAC,CAAC;AACrB,CAAC;AAED,MAAMqD,cAAc,GAAGA,CAAC;EAAEzB;AAA2B,CAAC,KAAK;EACzD,oBAAO/D,KAAA,CAAAuF,aAAA,CAAChF,IAAI;IAACiE,KAAK,EAAE;MAAET;IAAO;EAAE,CAAE,CAAC;AACpC,CAAC;AAED,MAAMF,MAAM,GAAGrD,gBAAgB,CAAC;EAC9B2F,cAAc,EAAE;IACduB,cAAc,EAAE,QAAQ;IACxBC,KAAK,EAAE;EACT,CAAC;EACD7D,YAAY,EAAE;IACZC,MAAM,EAAE;EACV,CAAC;EACDQ,KAAK,EAAE;IACLqD,IAAI,EAAE,CAAC;IACPC,SAAS,EAAE,CAAC;IACZC,YAAY,EAAE,EAAE;IAChBpB,UAAU,EAAE,CAAC;IACbnE,aAAa,EAAE,CAAC;IAChBwF,SAAS,EAAE,EAAE;IACb;IACA;IACAC,SAAS,EAAE3H,QAAQ,CAACiB,MAAM,CAAC;MAAEC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE;MAAEC,OAAO,EAAE,EAAE,GAAG;IAAE,CAAC;EAClE;AACF,CAAC,CAAC;AAEF,4BAAexB,KAAK,CAACiI,IAAI,CAAClG,YAAY,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- const VERSION = '3.10.0';
1
+ const VERSION = '3.10.1';
2
2
  export default VERSION;
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.10.0';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,QAAQ;AACxB,eAAeA,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.10.1';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,QAAQ;AACxB,eAAeA,OAAO","ignoreList":[]}
@@ -14,7 +14,7 @@ import type { StringSet } from '../localization/StringSet.type';
14
14
  import type { ClipboardServiceInterface, FileServiceInterface, MediaServiceInterface, NotificationServiceInterface, PlayerServiceInterface, RecorderServiceInterface } from '../platform/types';
15
15
  import { ErrorBoundaryProps, LocalCacheStorage } from '../types';
16
16
  export declare const SendbirdUIKit: Readonly<{
17
- VERSION: "3.10.0";
17
+ VERSION: "3.10.1";
18
18
  PLATFORM: string;
19
19
  DEFAULT: {
20
20
  AUTO_PUSH_TOKEN_REGISTRATION: boolean;
@@ -1,2 +1,2 @@
1
- declare const VERSION = "3.10.0";
1
+ declare const VERSION = "3.10.1";
2
2
  export default VERSION;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendbird/uikit-react-native",
3
- "version": "3.10.0",
3
+ "version": "3.10.1",
4
4
  "description": "Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.",
5
5
  "keywords": [
6
6
  "sendbird",
@@ -60,10 +60,10 @@
60
60
  },
61
61
  "dependencies": {
62
62
  "@openspacelabs/react-native-zoomable-view": "^2.1.5",
63
- "@sendbird/uikit-chat-hooks": "3.10.0",
64
- "@sendbird/uikit-react-native-foundation": "3.10.0",
65
- "@sendbird/uikit-tools": "0.0.10",
66
- "@sendbird/uikit-utils": "3.10.0"
63
+ "@sendbird/uikit-chat-hooks": "3.10.1",
64
+ "@sendbird/uikit-react-native-foundation": "3.10.1",
65
+ "@sendbird/uikit-tools": "0.0.15",
66
+ "@sendbird/uikit-utils": "3.10.1"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@bam.tech/react-native-image-resizer": "^3.0.4",
@@ -218,5 +218,5 @@
218
218
  ]
219
219
  ]
220
220
  },
221
- "gitHead": "01b356019dead8053d3469bf5a40c69d66c5b980"
221
+ "gitHead": "4202a8ca4c1db6bb15b37fda743ea36f95b457b3"
222
222
  }
@@ -82,7 +82,12 @@ export type ChannelInputProps = {
82
82
  };
83
83
 
84
84
  const AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });
85
- const KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });
85
+ const isAndroidApi35 = Platform.OS === 'android' && Platform.Version >= 35;
86
+ const KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({
87
+ ios: 'padding' as const,
88
+ android: isAndroidApi35 ? ('padding' as const) : undefined,
89
+ default: undefined,
90
+ });
86
91
 
87
92
  // FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)
88
93
  // To workaround temporarily, change the key for re-mount the component.
@@ -96,6 +101,15 @@ const ChannelInput = (props: ChannelInputProps) => {
96
101
  const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;
97
102
 
98
103
  const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);
104
+
105
+ // Android API 35+ keyboard avoidance handling
106
+ /**
107
+ * Android API 35+ introduced edge-to-edge layouts, which changed how keyboard avoidance should be handled.
108
+ * For API 35+, the system manages insets automatically, so we use the provided keyboardAvoidOffset directly.
109
+ * For older Android versions, we manually subtract the safe area bottom padding to avoid overlapping with system UI.
110
+ * See: https://developer.android.com/develop/ui/views/layout/edge-to-edge
111
+ */
112
+ const keyboardVerticalOffset = isAndroidApi35 ? keyboardAvoidOffset : -safeArea.paddingBottom + keyboardAvoidOffset;
99
113
  const { colors, typography } = useUIKitTheme();
100
114
  const { sbOptions, mentionManager } = useSendbirdChat();
101
115
 
@@ -138,10 +152,7 @@ const ChannelInput = (props: ChannelInputProps) => {
138
152
 
139
153
  return (
140
154
  <>
141
- <KeyboardAvoidingView
142
- keyboardVerticalOffset={-safeArea.paddingBottom + keyboardAvoidOffset}
143
- behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}
144
- >
155
+ <KeyboardAvoidingView keyboardVerticalOffset={keyboardVerticalOffset} behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}>
145
156
  <View
146
157
  style={{
147
158
  paddingStart: safeArea.paddingStart,
@@ -181,7 +192,7 @@ const ChannelInput = (props: ChannelInputProps) => {
181
192
  />
182
193
  )}
183
194
  </View>
184
- <SafeAreaBottom height={safeArea.paddingBottom} />
195
+ {!isAndroidApi35 && <SafeAreaBottom height={safeArea.paddingBottom} />}
185
196
  </View>
186
197
  </KeyboardAvoidingView>
187
198
  {mentionAvailable && props.SuggestedMentionList && (
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
- const VERSION = '3.10.0';
1
+ const VERSION = '3.10.1';
2
2
  export default VERSION;