From fb4c0db9360ea604638608b07d706d23d016a8b9 Mon Sep 17 00:00:00 2001 From: tfomkin Date: Wed, 28 Jan 2026 00:30:25 +0800 Subject: [PATCH 1/6] fix: disable ScreenWrapper scroll when isKeyboardAvoiding is true, custom bottom offset added --- apps/mobile/app/(main)/chat/create.tsx | 2 +- .../ui/keyboard-avoiding-view/src/lib/component.tsx | 7 ++++--- .../shared/ui/screen-wrapper/src/lib/component.tsx | 13 ++++++++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/mobile/app/(main)/chat/create.tsx b/apps/mobile/app/(main)/chat/create.tsx index 0f679f4..6b62115 100644 --- a/apps/mobile/app/(main)/chat/create.tsx +++ b/apps/mobile/app/(main)/chat/create.tsx @@ -47,7 +47,7 @@ export default function CreateChatScreen(): ReactElement { header: , }} safeAreaProps={{ edges: [] }} - keyBoardAvoidingProps={{ enabled: !isBottomSheetInputFocused }}> + keyBoardAvoidingProps={{ enabled: !isBottomSheetInputFocused, bottomOffset: 60 }}> & { onFocus?: ((event: any) => void) | null; contentContainerStyleKeyboardShown?: StyleProp; enabled?: boolean; + bottomOffset?: number; }; // TODO: Research how use nativewind here export const AppKeyboardAvoidingView: ComponentType = ({ children, ...props }) => { - const { onFocus, ...restProps } = props; + const { onFocus, contentContainerStyle, bottomOffset, ...restProps } = props; return ( {children} diff --git a/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx b/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx index 39dab46..2be92ca 100644 --- a/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx +++ b/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx @@ -25,13 +25,20 @@ export function ScreenWrapper({ isKeyboardAvoiding, keyBoardAvoidingProps, }: PropsWithChildren): ReactElement { - const { header, ...restScreenProps } = screenProps || {}; + const { header, scrollDisabled, ...restScreenProps } = screenProps || {}; + + const effectiveScrollDisabled = isKeyboardAvoiding ? true : scrollDisabled; + const content = isKeyboardAvoiding ? ( - {children} + + {children} + ) : ( - {children} + + {children} + ); return ( From 6ae9ce7fdbf429992e917a262ed9e7f7fae55903 Mon Sep 17 00:00:00 2001 From: tfomkin Date: Wed, 28 Jan 2026 00:33:30 +0800 Subject: [PATCH 2/6] fix: KnowledgeResponse items transform fix --- .../api/src/lib/knowledge/models/knowledge-response.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/shared/data-access/api/src/lib/knowledge/models/knowledge-response.ts b/libs/shared/data-access/api/src/lib/knowledge/models/knowledge-response.ts index 387f00f..5851bed 100644 --- a/libs/shared/data-access/api/src/lib/knowledge/models/knowledge-response.ts +++ b/libs/shared/data-access/api/src/lib/knowledge/models/knowledge-response.ts @@ -1,8 +1,9 @@ -import { Expose } from 'class-transformer'; +import { Expose, Type } from 'class-transformer'; import { Knowledge } from './knowledge'; export class KnowledgeResponse { @Expose() + @Type(() => Knowledge) public items: Array; @Expose() From 67d80267ca5640b60bdd86efc27d642ca3dc3a30 Mon Sep 17 00:00:00 2001 From: tfomkin Date: Fri, 30 Jan 2026 13:56:00 +0800 Subject: [PATCH 3/6] chore: props simplified --- .../shared/ui/screen-wrapper/src/lib/component.tsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx b/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx index 2be92ca..ba54d59 100644 --- a/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx +++ b/libs/mobile/shared/ui/screen-wrapper/src/lib/component.tsx @@ -25,20 +25,16 @@ export function ScreenWrapper({ isKeyboardAvoiding, keyBoardAvoidingProps, }: PropsWithChildren): ReactElement { - const { header, scrollDisabled, ...restScreenProps } = screenProps || {}; - - const effectiveScrollDisabled = isKeyboardAvoiding ? true : scrollDisabled; + const { header, ...restScreenProps } = screenProps || {}; const content = isKeyboardAvoiding ? ( - + {children} ) : ( - - {children} - + {children} ); return ( From 3f707924d29e1cf665c181e08ca568858122430c Mon Sep 17 00:00:00 2001 From: tfomkin Date: Fri, 30 Jan 2026 14:46:39 +0800 Subject: [PATCH 4/6] chore: replaced styles for Markdown code block with classnames --- .../shared/features/markdown-view/src/lib/component.tsx | 7 +------ libs/mobile/shared/ui/code-block/src/lib/component.tsx | 4 +++- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/libs/mobile/shared/features/markdown-view/src/lib/component.tsx b/libs/mobile/shared/features/markdown-view/src/lib/component.tsx index 3a4e41e..50c3d65 100644 --- a/libs/mobile/shared/features/markdown-view/src/lib/component.tsx +++ b/libs/mobile/shared/features/markdown-view/src/lib/component.tsx @@ -54,7 +54,7 @@ export function AppMarkdownView({ ) => { return ( {copyButton} - {formattedContent} + + {formattedContent} + ); } From 2b0e6ace561a020bbd81fc41c38544d8baff2e01 Mon Sep 17 00:00:00 2001 From: tfomkin Date: Sun, 8 Feb 2026 17:46:10 +0800 Subject: [PATCH 5/6] fix: voice mode modal layout fix --- .../voice-mode-modal/src/lib/component.tsx | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/libs/mobile/chat/features/voice-mode-modal/src/lib/component.tsx b/libs/mobile/chat/features/voice-mode-modal/src/lib/component.tsx index 517fea6..e0573d1 100644 --- a/libs/mobile/chat/features/voice-mode-modal/src/lib/component.tsx +++ b/libs/mobile/chat/features/voice-mode-modal/src/lib/component.tsx @@ -184,31 +184,33 @@ export function VoiceModeModal({ onChatCreated, ref, ...props }: VoiceModeModalP backdropTransitionOutTiming={1} animationOutTiming={1} animationIn='fadeIn' - style={{ overflow: 'hidden' }} + style={{ overflow: 'hidden', margin: 0 }} {...props}> - - - {isThinking || isAiSpeaking ? : } - - - - - {isAiSpeaking - ? translate('TEXT_TALKING') - : isThinking - ? translate('TEXT_THINKING') - : translate('TEXT_LISTENING')} - - - - + + + + {isThinking || isAiSpeaking ? : } + + + + + {isAiSpeaking + ? translate('TEXT_TALKING') + : isThinking + ? translate('TEXT_THINKING') + : translate('TEXT_LISTENING')} + + + + + ); From 3486abf2baaeed075b35227ad4a20032066ed841 Mon Sep 17 00:00:00 2001 From: tfomkin Date: Fri, 13 Feb 2026 16:39:52 +0800 Subject: [PATCH 6/6] fix: disable AI message actions long press while response is generating --- .../chat/features/ai-message-actions/src/lib/component.tsx | 7 ++++++- .../chat/src/lib/components/messages-list/component.tsx | 1 + .../chat/ui/message-actions-wrapper/src/lib/component.tsx | 6 +++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/libs/mobile/chat/features/ai-message-actions/src/lib/component.tsx b/libs/mobile/chat/features/ai-message-actions/src/lib/component.tsx index a7a00ff..9bff564 100644 --- a/libs/mobile/chat/features/ai-message-actions/src/lib/component.tsx +++ b/libs/mobile/chat/features/ai-message-actions/src/lib/component.tsx @@ -19,6 +19,7 @@ interface AiMessageActionsProps { onAddDetails: (messageId: string) => void; onMoreConcise: (messageId: string) => void; isLast: boolean; + isResponseGenerating: boolean; } //TODO Extend with more actions - https://www.figma.com/design/YPCZjyVlD86psDwUxvMVBc/OpenWebUI-Redesign-React-Native?node-id=27540-25291&t=kg2yUIDp3UQDStLf-0 @@ -31,6 +32,7 @@ export function AiMessageActions({ onAddDetails, onMoreConcise, isLast, + isResponseGenerating, children, }: PropsWithChildren): ReactElement { const translate = useTranslation('CHAT.AI_MESSAGE_ACTIONS'); @@ -134,7 +136,10 @@ export function AiMessageActions({ return ( - + {children} ; actions: Array; + isResponseGenerating?: boolean; + sheetRef?: React.RefObject; } export function MessageActionsSheetWrapper({ sheetRef, actions, + isResponseGenerating, children, }: PropsWithChildren): ReactElement { const actionsSheetRef = useRef(null); const { animatedStyle, startAnimation, stopAnimation } = useAnimateMessage(); const handleLongPress = (): void => { + if (isResponseGenerating) return; + startAnimation(); actionsSheetRef.current?.present(); };