diff --git a/apps/ios/Sources/Design/ChatProTab.swift b/apps/ios/Sources/Design/ChatProTab.swift index 0bde2fb36837..c606ee63e5df 100644 --- a/apps/ios/Sources/Design/ChatProTab.swift +++ b/apps/ios/Sources/Design/ChatProTab.swift @@ -42,7 +42,9 @@ struct ChatProTab: View { Spacer() } } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) .navigationBarHidden(true) } .task { diff --git a/apps/ios/Sources/Design/OpenClawProComponents.swift b/apps/ios/Sources/Design/OpenClawProComponents.swift index 07a69d5aa55d..8f7415333cad 100644 --- a/apps/ios/Sources/Design/OpenClawProComponents.swift +++ b/apps/ios/Sources/Design/OpenClawProComponents.swift @@ -22,11 +22,12 @@ struct OpenClawProBackground: View { LinearGradient( colors: [ OpenClawBrand.accent.opacity(0.05), + OpenClawBrand.accent.opacity(0.02), .clear, ], startPoint: .topTrailing, endPoint: .bottomLeading) - .frame(height: 260) + .frame(height: 620) .ignoresSafeArea() } } diff --git a/apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView.swift b/apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView.swift index 66092641e4a0..a1980e331b7a 100644 --- a/apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView.swift +++ b/apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatView.swift @@ -269,7 +269,7 @@ public struct OpenClawChatView: View { .frame(maxWidth: .infinity, alignment: .leading) } - if self.composerChrome == .clean, let error = self.activeErrorText, !self.hasVisibleMessageListContent { + if let error = self.inlineCleanErrorText { let presentation = self.errorPresentation(for: error) ChatNoticeCard( systemImage: presentation.systemImage, @@ -348,6 +348,8 @@ public struct OpenClawChatView: View { EmptyView() } else if self.showsCleanLoadingPlaceholder { EmptyView() + } else if self.inlineCleanErrorText != nil { + EmptyView() } else if let error = self.activeErrorText { if self.hasVisibleMessageListContent { EmptyView() @@ -386,6 +388,13 @@ public struct OpenClawChatView: View { return text } + private var inlineCleanErrorText: String? { + guard self.composerChrome == .clean, !self.hasVisibleMessageListContent else { + return nil + } + return self.activeErrorText + } + private var hasVisibleMessageListContent: Bool { if !self.visibleMessages.isEmpty { return true