Skip to content

Conversation

@martinmitrevski
Copy link
Contributor

🔗 Issue Links

Provide all Linear and/or Github issues related to this PR, if applicable.

🎯 Goal

Describe why we are making this change.

📝 Summary

Provide bullet points with the most important changes in the codebase.

🛠 Implementation

Provide a detailed description of the implementation and explain your decisions if you find them relevant.

🎨 Showcase

Add relevant screenshots and/or videos/gifs to easily see what this PR changes, if applicable.

Before After
img img

🧪 Manual Testing Notes

Explain how this change can be tested manually, if applicable.

☑️ Contributor Checklist

  • I have signed the Stream CLA (required)
  • This change should be manually QAed
  • Changelog is updated with client-facing changes
  • Changelog is updated with new localization keys
  • New code is covered by unit tests
  • Documentation has been updated in the docs-content repo

@martinmitrevski martinmitrevski requested a review from a team as a code owner December 18, 2025 13:42
@martinmitrevski martinmitrevski marked this pull request as draft December 18, 2025 13:42
@github-actions
Copy link

1 Warning
⚠️ Big PR
1 Message
📖 There seems to be app changes but CHANGELOG wasn't modified.
Please include an entry if the PR includes user-facing changes.
You can find it at CHANGELOG.md.

Generated by 🚫 Danger

@github-actions
Copy link

Public Interface

+ @MainActor public protocol Styles

+ public struct LiquidGlassModifier: ViewModifier  
+ 
+   public init(shape: BackgroundShape)
+   
+ 
+   public func body(content: Content)-> some View

+ public struct StandardInputViewModifier: ViewModifier  
+ 
+   public init(keyboardShown: Bool)
+   
+ 
+   public func body(content: Content)-> some View

+ public enum ComposerPlacement  
+ 
+   case docked
+   case floating

+ extension Styles  
+ 
+   public func makeChannelListContentModifier(options: ChannelListContentModifierOptions)-> some ViewModifier
+   public func makeChannelListModifier(options: ChannelListModifierOptions)-> some ViewModifier
+   public func makeMessageListModifier(options: MessageListModifierOptions)-> some ViewModifier
+   public func makeMessageListContainerModifier(options: MessageListContainerModifierOptions)-> some ViewModifier
+   public func makeMessageViewModifier(for messageModifierInfo: MessageModifierInfo)-> some ViewModifier
+   public func makeBouncedMessageActionsModifier(viewModel: ChatChannelViewModel)-> some ViewModifier
+   public func makeComposerViewModifier(options: ComposerViewModifierOptions)-> some ViewModifier

+ public class LiquidGlassStyles: Styles  
+ 
+   public var composerPlacement: ComposerPlacement
+   
+ 
+   public init()
+   
+ 
+   public func makeComposerInputViewModifier(options: ComposerInputModifierOptions)-> some ViewModifier
+   public func makeComposerButtonViewModifier(options: ComposerButtonModifierOptions)-> some ViewModifier

+ public class ComposerButtonModifierOptions  
+ 
+   public init()

+ public class ComposerInputModifierOptions  
+ 
+   public let keyboardShown: Bool
+   
+ 
+   public init(keyboardShown: Bool)

+ public final class ComposerInputTrailingViewOptions: Sendable  
+ 
+   public let viewModel: MessageComposerViewModel
+   public let onTap: @MainActor () -> Void
+   
+ 
+   public init(viewModel: MessageComposerViewModel,onTap: @escaping @MainActor () -> Void)



 public struct ComposerInputView: View, KeyboardReadable  
-   public init(factory: Factory,text: Binding<String>,selectedRangeLocation: Binding<Int>,command: Binding<ComposerCommand?>,addedAssets: [AddedAsset],addedFileURLs: [URL],addedCustomAttachments: [CustomAttachment],quotedMessage: Binding<ChatMessage?>,maxMessageLength: Int? = nil,cooldownDuration: Int,onCustomAttachmentTap: @escaping @MainActor (CustomAttachment) -> Void,removeAttachmentWithId: @escaping (String) -> Void)
+   public init(factory: Factory,text: Binding<String>,selectedRangeLocation: Binding<Int>,command: Binding<ComposerCommand?>,addedAssets: [AddedAsset],addedFileURLs: [URL],addedCustomAttachments: [CustomAttachment],quotedMessage: Binding<ChatMessage?>,maxMessageLength: Int? = nil,cooldownDuration: Int,onCustomAttachmentTap: @escaping @MainActor (CustomAttachment) -> Void,removeAttachmentWithId: @escaping (String) -> Void,sendMessage: @escaping @MainActor () -> Void)

 public class DefaultViewFactory: ViewFactory  
-   public static let shared
+   public var styles
+   public static let shared

 extension ViewFactory  
-   public func makeChannelListContentModifier(options: ChannelListContentModifierOptions)-> some ViewModifier
+   public func makeChannelDestination(options: ChannelDestinationOptions)-> @MainActor (ChannelSelectionInfo) -> ChatChannelView<Self>
-   public func makeChannelListModifier(options: ChannelListModifierOptions)-> some ViewModifier
+   public func makeMessageThreadDestination(options: MessageThreadDestinationOptions)-> @MainActor (ChatChannel, ChatMessage) -> ChatChannelView<Self>
-   public func makeChannelDestination(options: ChannelDestinationOptions)-> @MainActor (ChannelSelectionInfo) -> ChatChannelView<Self>
+   public func makeEmptyMessagesView(options: EmptyMessagesViewOptions)-> some View
-   public func makeMessageThreadDestination(options: MessageThreadDestinationOptions)-> @MainActor (ChatChannel, ChatMessage) -> ChatChannelView<Self>
+   public func makeMessageAvatarView(options: MessageAvatarViewOptions)-> some View
-   public func makeMessageListModifier(options: MessageListModifierOptions)-> some ViewModifier
+   public func makeQuotedMessageAvatarView(options: QuotedMessageAvatarViewOptions)-> some View
-   public func makeMessageListContainerModifier(options: MessageListContainerModifierOptions)-> some ViewModifier
+   public func makeChannelHeaderViewModifier(options: ChannelHeaderViewModifierOptions)-> some ChatChannelHeaderViewModifier
-   public func makeMessageViewModifier(for messageModifierInfo: MessageModifierInfo)-> some ViewModifier
+   public func makeChannelBarsVisibilityViewModifier(options: ChannelBarsVisibilityViewModifierOptions)-> some ViewModifier
-   public func makeBouncedMessageActionsModifier(viewModel: ChatChannelViewModel)-> some ViewModifier
+   public func makeChannelLoadingView(options: ChannelLoadingViewOptions)-> some View
-   public func makeEmptyMessagesView(options: EmptyMessagesViewOptions)-> some View
+   public func makeMessageThreadHeaderViewModifier(options: MessageThreadHeaderViewModifierOptions)-> some MessageThreadHeaderViewModifier
-   public func makeMessageAvatarView(options: MessageAvatarViewOptions)-> some View
+   public func makeMessageListBackground(options: MessageListBackgroundOptions)-> some View
-   public func makeQuotedMessageAvatarView(options: QuotedMessageAvatarViewOptions)-> some View
+   public func makeMessageContainerView(options: MessageContainerViewOptions)-> some View
-   public func makeChannelHeaderViewModifier(options: ChannelHeaderViewModifierOptions)-> some ChatChannelHeaderViewModifier
+   public func makeMessageTextView(options: MessageTextViewOptions)-> some View
-   public func makeChannelBarsVisibilityViewModifier(options: ChannelBarsVisibilityViewModifierOptions)-> some ViewModifier
+   public func makeMessageDateView(options: MessageDateViewOptions)-> some View
-   public func makeChannelLoadingView(options: ChannelLoadingViewOptions)-> some View
+   public func makeMessageAuthorAndDateView(options: MessageAuthorAndDateViewOptions)-> some View
-   public func makeMessageThreadHeaderViewModifier(options: MessageThreadHeaderViewModifierOptions)-> some MessageThreadHeaderViewModifier
+   public func makeLastInGroupHeaderView(options: LastInGroupHeaderViewOptions)-> some View
-   public func makeMessageListBackground(options: MessageListBackgroundOptions)-> some View
+   public func makeMessageTranslationFooterView(options: MessageTranslationFooterViewOptions)-> some View
-   public func makeMessageContainerView(options: MessageContainerViewOptions)-> some View
+   public func makeImageAttachmentView(options: ImageAttachmentViewOptions)-> some View
-   public func makeMessageTextView(options: MessageTextViewOptions)-> some View
+   public func makeGiphyAttachmentView(options: GiphyAttachmentViewOptions)-> some View
-   public func makeMessageDateView(options: MessageDateViewOptions)-> some View
+   public func makeLinkAttachmentView(options: LinkAttachmentViewOptions)-> some View
-   public func makeMessageAuthorAndDateView(options: MessageAuthorAndDateViewOptions)-> some View
+   public func makeFileAttachmentView(options: FileAttachmentViewOptions)-> some View
-   public func makeLastInGroupHeaderView(options: LastInGroupHeaderViewOptions)-> some View
+   public func makeVideoAttachmentView(options: VideoAttachmentViewOptions)-> some View
-   public func makeMessageTranslationFooterView(options: MessageTranslationFooterViewOptions)-> some View
+   public func makeGalleryView(options: GalleryViewOptions)-> some View
-   public func makeImageAttachmentView(options: ImageAttachmentViewOptions)-> some View
+   public func makeGalleryHeaderView(options: GalleryHeaderViewOptions)-> some View
-   public func makeGiphyAttachmentView(options: GiphyAttachmentViewOptions)-> some View
+   public func makeVideoPlayerView(options: VideoPlayerViewOptions)-> some View
-   public func makeLinkAttachmentView(options: LinkAttachmentViewOptions)-> some View
+   public func makeVideoPlayerHeaderView(options: VideoPlayerHeaderViewOptions)-> some View
-   public func makeFileAttachmentView(options: FileAttachmentViewOptions)-> some View
+   public func makeVideoPlayerFooterView(options: VideoPlayerFooterViewOptions)-> some View
-   public func makeVideoAttachmentView(options: VideoAttachmentViewOptions)-> some View
+   public func makeDeletedMessageView(options: DeletedMessageViewOptions)-> some View
-   public func makeGalleryView(options: GalleryViewOptions)-> some View
+   public func makeSystemMessageView(options: SystemMessageViewOptions)-> some View
-   public func makeGalleryHeaderView(options: GalleryHeaderViewOptions)-> some View
+   public func makeEmojiTextView(options: EmojiTextViewOptions)-> some View
-   public func makeVideoPlayerView(options: VideoPlayerViewOptions)-> some View
+   public func makeCustomAttachmentViewType(options: CustomAttachmentViewTypeOptions)-> some View
-   public func makeVideoPlayerHeaderView(options: VideoPlayerHeaderViewOptions)-> some View
+   public func makeScrollToBottomButton(options: ScrollToBottomButtonOptions)-> some View
-   public func makeVideoPlayerFooterView(options: VideoPlayerFooterViewOptions)-> some View
+   public func makeDateIndicatorView(options: DateIndicatorViewOptions)-> some View
-   public func makeDeletedMessageView(options: DeletedMessageViewOptions)-> some View
+   public func makeMessageListDateIndicator(options: MessageListDateIndicatorViewOptions)-> some View
-   public func makeSystemMessageView(options: SystemMessageViewOptions)-> some View
+   public func makeTypingIndicatorBottomView(options: TypingIndicatorBottomViewOptions)-> some View
-   public func makeEmojiTextView(options: EmojiTextViewOptions)-> some View
+   public func makeGiphyBadgeViewType(options: GiphyBadgeViewTypeOptions)-> some View
-   public func makeCustomAttachmentViewType(options: CustomAttachmentViewTypeOptions)-> some View
+   public func makeMessageRepliesView(options: MessageRepliesViewOptions)-> some View
-   public func makeScrollToBottomButton(options: ScrollToBottomButtonOptions)-> some View
+   public func makeMessageRepliesShownInChannelView(options: MessageRepliesShownInChannelViewOptions)-> some View
-   public func makeDateIndicatorView(options: DateIndicatorViewOptions)-> some View
+   public func makeMessageComposerViewType(options: MessageComposerViewTypeOptions)-> MessageComposerView<Self>
-   public func makeMessageListDateIndicator(options: MessageListDateIndicatorViewOptions)-> some View
+   public func makeLeadingComposerView(options: LeadingComposerViewOptions)-> some View
-   public func makeTypingIndicatorBottomView(options: TypingIndicatorBottomViewOptions)-> some View
+   @ViewBuilder public func makeComposerInputView(options: ComposerInputViewOptions)-> some View
-   public func makeGiphyBadgeViewType(options: GiphyBadgeViewTypeOptions)-> some View
+   public func makeComposerTextInputView(options: ComposerTextInputViewOptions)-> some View
-   public func makeMessageRepliesView(options: MessageRepliesViewOptions)-> some View
+   public func makeComposerInputTrailingView(options: ComposerInputTrailingViewOptions)-> some View
-   public func makeMessageRepliesShownInChannelView(options: MessageRepliesShownInChannelViewOptions)-> some View
+   public func makeTrailingComposerView(options: TrailingComposerViewOptions)-> some View
-   public func makeMessageComposerViewType(options: MessageComposerViewTypeOptions)-> MessageComposerView<Self>
+   public func makeComposerRecordingView(options: ComposerRecordingViewOptions)-> some View
-   public func makeLeadingComposerView(options: LeadingComposerViewOptions)-> some View
+   public func makeComposerRecordingLockedView(options: ComposerRecordingLockedViewOptions)-> some View
-   @ViewBuilder public func makeComposerInputView(options: ComposerInputViewOptions)-> some View
+   public func makeComposerRecordingTipView(options: ComposerRecordingTipViewOptions)-> some View
-   public func makeComposerTextInputView(options: ComposerTextInputViewOptions)-> some View
+   public func makeAttachmentPickerView(options: AttachmentPickerViewOptions)-> some View
-   public func makeTrailingComposerView(options: TrailingComposerViewOptions)-> some View
+   public func makeVoiceRecordingView(options: VoiceRecordingViewOptions)-> some View
-   public func makeComposerRecordingView(options: ComposerRecordingViewOptions)-> some View
+   public func makeCustomAttachmentView(options: CustomComposerAttachmentViewOptions)-> some View
-   public func makeComposerRecordingLockedView(options: ComposerRecordingLockedViewOptions)-> some View
+   public func makeCustomAttachmentPreviewView(options: CustomAttachmentPreviewViewOptions)-> some View
-   public func makeComposerRecordingTipView(options: ComposerRecordingTipViewOptions)-> some View
+   public func makeAttachmentSourcePickerView(options: AttachmentSourcePickerViewOptions)-> some View
-   public func makeComposerViewModifier(options: ComposerViewModifierOptions)-> some ViewModifier
+   public func makePhotoAttachmentPickerView(options: PhotoAttachmentPickerViewOptions)-> some View
-   public func makeAttachmentPickerView(options: AttachmentPickerViewOptions)-> some View
+   public func makeFilePickerView(options: FilePickerViewOptions)-> some View
-   public func makeVoiceRecordingView(options: VoiceRecordingViewOptions)-> some View
+   public func makeCameraPickerView(options: CameraPickerViewOptions)-> some View
-   public func makeCustomAttachmentView(options: CustomComposerAttachmentViewOptions)-> some View
+   public func makeAssetsAccessPermissionView(options: AssetsAccessPermissionViewOptions)-> some View
-   public func makeCustomAttachmentPreviewView(options: CustomAttachmentPreviewViewOptions)-> some View
+   public func makeSendInChannelView(options: SendInChannelViewOptions)-> some View
-   public func makeAttachmentSourcePickerView(options: AttachmentSourcePickerViewOptions)-> some View
+   public func supportedMessageActions(options: SupportedMessageActionsOptions)-> [MessageAction]
-   public func makePhotoAttachmentPickerView(options: PhotoAttachmentPickerViewOptions)-> some View
+   public func makeMessageActionsView(options: MessageActionsViewOptions)-> some View
-   public func makeFilePickerView(options: FilePickerViewOptions)-> some View
+   public func makeReactionsUsersView(options: ReactionsUsersViewOptions)-> some View
-   public func makeCameraPickerView(options: CameraPickerViewOptions)-> some View
+   public func makeBottomReactionsView(options: ReactionsBottomViewOptions)-> some View
-   public func makeAssetsAccessPermissionView(options: AssetsAccessPermissionViewOptions)-> some View
+   public func makeMessageReactionView(options: MessageReactionViewOptions)-> some View
-   public func makeSendInChannelView(options: SendInChannelViewOptions)-> some View
+   public func makeReactionsOverlayView(options: ReactionsOverlayViewOptions)-> some View
-   public func supportedMessageActions(options: SupportedMessageActionsOptions)-> [MessageAction]
+   public func makeReactionsContentView(options: ReactionsContentViewOptions)-> some View
-   public func makeMessageActionsView(options: MessageActionsViewOptions)-> some View
+   public func makeReactionsBackgroundView(options: ReactionsBackgroundOptions)-> some View
-   public func makeReactionsUsersView(options: ReactionsUsersViewOptions)-> some View
+   public func makeQuotedMessageHeaderView(options: QuotedMessageHeaderViewOptions)-> some View
-   public func makeBottomReactionsView(options: ReactionsBottomViewOptions)-> some View
+   public func makeQuotedMessageView(options: QuotedMessageViewOptions)-> some View
-   public func makeMessageReactionView(options: MessageReactionViewOptions)-> some View
+   public func makeQuotedMessageContentView(options: QuotedMessageContentViewOptions)-> some View
-   public func makeReactionsOverlayView(options: ReactionsOverlayViewOptions)-> some View
+   public func makeCustomAttachmentQuotedView(options: CustomAttachmentQuotedViewOptions)-> some View
-   public func makeReactionsContentView(options: ReactionsContentViewOptions)-> some View
+   public func makeEditedMessageHeaderView(options: EditedMessageHeaderViewOptions)-> some View
-   public func makeReactionsBackgroundView(options: ReactionsBackgroundOptions)-> some View
+   public func makeCommandsContainerView(options: CommandsContainerViewOptions)-> some View
-   public func makeQuotedMessageHeaderView(options: QuotedMessageHeaderViewOptions)-> some View
+   public func makeMessageReadIndicatorView(options: MessageReadIndicatorViewOptions)-> some View
-   public func makeQuotedMessageView(options: QuotedMessageViewOptions)-> some View
+   public func makeNewMessagesIndicatorView(options: NewMessagesIndicatorViewOptions)-> some View
-   public func makeQuotedMessageContentView(options: QuotedMessageContentViewOptions)-> some View
+   public func makeJumpToUnreadButton(options: JumpToUnreadButtonOptions)-> some View
-   public func makeCustomAttachmentQuotedView(options: CustomAttachmentQuotedViewOptions)-> some View
+   public func makeComposerPollView(options: ComposerPollViewOptions)-> some View
-   public func makeEditedMessageHeaderView(options: EditedMessageHeaderViewOptions)-> some View
+   public func makePollView(options: PollViewOptions)-> some View
-   public func makeCommandsContainerView(options: CommandsContainerViewOptions)-> some View
+   public func makeThreadDestination(options: ThreadDestinationOptions)-> @MainActor (ChatThread) -> ChatChannelView<Self>
-   public func makeMessageReadIndicatorView(options: MessageReadIndicatorViewOptions)-> some View
+   public func makeThreadListItem(options: ThreadListItemOptions<ThreadDestination>)-> some View
-   public func makeNewMessagesIndicatorView(options: NewMessagesIndicatorViewOptions)-> some View
+   public func makeNoThreadsView(options: NoThreadsViewOptions)-> some View
-   public func makeJumpToUnreadButton(options: JumpToUnreadButtonOptions)-> some View
+   public func makeThreadsListErrorBannerView(options: ThreadListErrorBannerViewOptions)-> some View
-   public func makeComposerPollView(options: ComposerPollViewOptions)-> some View
+   public func makeThreadListLoadingView(options: ThreadListLoadingViewOptions)-> some View
-   public func makePollView(options: PollViewOptions)-> some View
+   public func makeThreadListContainerViewModifier(options: ThreadListContainerModifierOptions)-> some ViewModifier
-   public func makeThreadDestination(options: ThreadDestinationOptions)-> @MainActor (ChatThread) -> ChatChannelView<Self>
+   public func makeThreadListHeaderViewModifier(options: ThreadListHeaderViewModifierOptions)-> some ViewModifier
-   public func makeThreadListItem(options: ThreadListItemOptions<ThreadDestination>)-> some View
+   public func makeThreadListHeaderView(options: ThreadListHeaderViewOptions)-> some View
-   public func makeNoThreadsView(options: NoThreadsViewOptions)-> some View
+   public func makeThreadListFooterView(options: ThreadListFooterViewOptions)-> some View
-   public func makeThreadsListErrorBannerView(options: ThreadListErrorBannerViewOptions)-> some View
+   public func makeThreadListBackground(options: ThreadListBackgroundOptions)-> some View
-   public func makeThreadListLoadingView(options: ThreadListLoadingViewOptions)-> some View
+   public func makeThreadListItemBackground(options: ThreadListItemBackgroundOptions)-> some View
-   public func makeThreadListContainerViewModifier(options: ThreadListContainerModifierOptions)-> some ViewModifier
+   public func makeThreadListDividerItem(options: ThreadListDividerItemOptions)-> some View
-   public func makeThreadListHeaderViewModifier(options: ThreadListHeaderViewModifierOptions)-> some ViewModifier
+   public func makeAddUsersView(options: AddUsersViewOptions)-> some View
-   public func makeThreadListHeaderView(options: ThreadListHeaderViewOptions)-> some View
+   public func makeAttachmentTextView(options: AttachmentTextViewOptions)-> some View
-   public func makeThreadListFooterView(options: ThreadListFooterViewOptions)-> some View
-   public func makeThreadListBackground(options: ThreadListBackgroundOptions)-> some View
-   public func makeThreadListItemBackground(options: ThreadListItemBackgroundOptions)-> some View
-   public func makeThreadListDividerItem(options: ThreadListDividerItemOptions)-> some View
-   public func makeAddUsersView(options: AddUsersViewOptions)-> some View
-   public func makeAttachmentTextView(options: AttachmentTextViewOptions)-> some View

 public struct MessageComposerView: View, KeyboardReadable  
+   
+ 
+   public func sendMessage()

 public struct ChatChannelView: View, KeyboardReadable  
-   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: ChatChannelViewModel? = nil,channelController: ChatChannelController,messageController: ChatMessageController? = nil,scrollToMessage: ChatMessage? = nil)
+   public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: ChatChannelViewModel? = nil,channelController: ChatChannelController,messageController: ChatMessageController? = nil,scrollToMessage: ChatMessage? = nil,composerPlacement: ComposerPlacement = .floating)

 public final class ComposerInputViewOptions: Sendable  
-   
+   public let sendMessage: @MainActor () -> Void
- 
+   
-   public init(text: Binding<String>,selectedRangeLocation: Binding<Int>,command: Binding<ComposerCommand?>,addedAssets: [AddedAsset],addedFileURLs: [URL],addedCustomAttachments: [CustomAttachment],quotedMessage: Binding<ChatMessage?>,maxMessageLength: Int?,cooldownDuration: Int,onCustomAttachmentTap: @escaping @MainActor (CustomAttachment) -> Void,shouldScroll: Bool,removeAttachmentWithId: @escaping @MainActor (String) -> Void)
+ 
+   public init(text: Binding<String>,selectedRangeLocation: Binding<Int>,command: Binding<ComposerCommand?>,addedAssets: [AddedAsset],addedFileURLs: [URL],addedCustomAttachments: [CustomAttachment],quotedMessage: Binding<ChatMessage?>,maxMessageLength: Int?,cooldownDuration: Int,onCustomAttachmentTap: @escaping @MainActor (CustomAttachment) -> Void,shouldScroll: Bool,removeAttachmentWithId: @escaping @MainActor (String) -> Void,sendMessage: @escaping @MainActor () -> Void)

 public struct MessageListView: View, KeyboardReadable  
-   public init(factory: Factory,channel: ChatChannel,messages: [ChatMessage],messagesGroupingInfo: [String: [String]],scrolledId: Binding<String?>,showScrollToLatestButton: Binding<Bool>,quotedMessage: Binding<ChatMessage?>,currentDateString: String? = nil,listId: String,isMessageThread: Bool = false,shouldShowTypingIndicator: Bool = false,scrollPosition: Binding<String?> = .constant(nil),loadingNextMessages: Bool = false,firstUnreadMessageId: Binding<MessageId?> = .constant(nil),onMessageAppear: @escaping @MainActor (Int, ScrollDirection) -> Void,onScrollToBottom: @escaping @MainActor () -> Void,onLongPress: @escaping @MainActor (MessageDisplayInfo) -> Void,onJumpToMessage: ((String) -> Bool)? = nil)
+   public init(factory: Factory,channel: ChatChannel,messages: [ChatMessage],messagesGroupingInfo: [String: [String]],scrolledId: Binding<String?>,showScrollToLatestButton: Binding<Bool>,quotedMessage: Binding<ChatMessage?>,currentDateString: String? = nil,listId: String,isMessageThread: Bool = false,shouldShowTypingIndicator: Bool = false,bottomInset: CGFloat = 0,scrollPosition: Binding<String?> = .constant(nil),loadingNextMessages: Bool = false,firstUnreadMessageId: Binding<MessageId?> = .constant(nil),onMessageAppear: @escaping @MainActor (Int, ScrollDirection) -> Void,onScrollToBottom: @escaping @MainActor () -> Void,onLongPress: @escaping @MainActor (MessageDisplayInfo) -> Void,onJumpToMessage: ((String) -> Bool)? = nil)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants