diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 707b6a6560..e5b1ac6105 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1369,6 +1369,10 @@ jobs: shell: bash run: sudo ln -sfn "$(xcrun --sdk macosx --show-sdk-path)" /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk + - name: Check the previews listed in the snapshot tests + shell: bash + run: python3 "apps/ios/SimpleX Snapshots/check-previews.py" + - name: Build iOS app timeout-minutes: 60 shell: bash diff --git a/apps/ios/Shared/Views/Call/ActiveCallView.swift b/apps/ios/Shared/Views/Call/ActiveCallView.swift index a2e65dcf71..c74ee673d2 100644 --- a/apps/ios/Shared/Views/Call/ActiveCallView.swift +++ b/apps/ios/Shared/Views/Call/ActiveCallView.swift @@ -533,9 +533,9 @@ struct ActiveCallOverlay: View { struct ActiveCallOverlay_Previews: PreviewProvider { static var previews: some View { Group{ - ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, initialCallType: .video), client: WebRTCClient({ _ in }, Binding.constant(nil))) + ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: "00000000-0000-0000-0000-000000000001", callState: .offerSent, initialCallType: .video), client: WebRTCClient({ _ in }, Binding.constant(nil))) .background(.black) - ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, initialCallType: .audio), client: WebRTCClient({ _ in }, Binding.constant(nil))) + ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: "00000000-0000-0000-0000-000000000002", callState: .offerSent, initialCallType: .audio), client: WebRTCClient({ _ in }, Binding.constant(nil))) .background(.black) } } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift index 5521470d07..a1dee2c398 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIChatFeatureView.swift @@ -111,7 +111,7 @@ struct CIChatFeatureView_Previews: PreviewProvider { CIChatFeatureView( chat: Chat.sampleData, im: ItemsModel.shared, - chatItem: ChatItem.getChatFeatureSample(.fullDelete, enabled), feature: ChatFeature.fullDelete, iconColor: enabled.iconColor(.secondary) + chatItem: previewDated(ChatItem.getChatFeatureSample(.fullDelete, enabled)), feature: ChatFeature.fullDelete, iconColor: enabled.iconColor(.secondary) ).environment(\.revealed, true) } } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIFeaturePreferenceView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIFeaturePreferenceView.swift index dcd6ea579c..47afc76b7f 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIFeaturePreferenceView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIFeaturePreferenceView.swift @@ -78,7 +78,7 @@ struct CIFeaturePreferenceView_Previews: PreviewProvider { let content = CIContent.rcvChatPreference(feature: .timedMessages, allowed: .yes, param: 30) let chatItem = ChatItem( chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, content.text, .rcvRead), + meta: CIMeta.getSample(1, previewDate, content.text, .rcvRead), content: content, quotedItem: nil, file: nil diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift index 5c65a310b5..eff3b84b42 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift @@ -316,29 +316,37 @@ struct CIFileView_Previews: PreviewProvider { let im = ItemsModel.shared let sentFile: ChatItem = ChatItem( chatDir: .directSnd, - meta: CIMeta.getSample(1, .now, "", .sndSent(sndProgress: .complete), itemEdited: true), + meta: CIMeta.getSample(1, previewDate, "", .sndSent(sndProgress: .complete), itemEdited: true), content: .sndMsgContent(msgContent: .file("")), quotedItem: nil, file: CIFile.getSample(fileStatus: .sndComplete) ) let fileChatItemWtFile = ChatItem( chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, "", .rcvRead), + meta: CIMeta.getSample(1, previewDate, "", .rcvRead), content: .rcvMsgContent(msgContent: .file("")), quotedItem: nil, file: nil ) Group { - ChatItemView(chat: Chat.sampleData, im: im, chatItem: sentFile, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(fileName: "some_long_file_name_here", fileStatus: .rcvInvitation), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(fileStatus: .rcvAccepted), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(fileStatus: .rcvTransfer(rcvProgress: 7, rcvTotal: 10)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(fileStatus: .rcvCancelled), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(fileSize: 1_000_000_000, fileStatus: .rcvInvitation), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(text: "Hello there", fileStatus: .rcvInvitation), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getFileMsgContentSample(text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", fileStatus: .rcvInvitation), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: fileChatItemWtFile, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: sentFile, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(sentFile, tailVisible: true)) + let ci1 = previewDated(ChatItem.getFileMsgContentSample()) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci1, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = previewDated(ChatItem.getFileMsgContentSample(fileName: "some_long_file_name_here", fileStatus: .rcvInvitation)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = previewDated(ChatItem.getFileMsgContentSample(fileStatus: .rcvAccepted)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci3, tailVisible: true)) + let ci4 = previewDated(ChatItem.getFileMsgContentSample(fileStatus: .rcvTransfer(rcvProgress: 7, rcvTotal: 10))) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci4, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci4, tailVisible: true)) + let ci5 = previewDated(ChatItem.getFileMsgContentSample(fileStatus: .rcvCancelled)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci5, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci5, tailVisible: true)) + let ci6 = previewDated(ChatItem.getFileMsgContentSample(fileSize: 1_000_000_000, fileStatus: .rcvInvitation)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci6, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci6, tailVisible: true)) + let ci7 = previewDated(ChatItem.getFileMsgContentSample(text: "Hello there", fileStatus: .rcvInvitation)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci7, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci7, tailVisible: true)) + let ci8 = previewDated(ChatItem.getFileMsgContentSample(text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", fileStatus: .rcvInvitation)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci8, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci8, tailVisible: true)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: fileChatItemWtFile, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(fileChatItemWtFile, tailVisible: true)) } .environment(\.revealed, false) .previewLayout(.fixed(width: 360, height: 360)) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift index efec44e943..41a4d9c4e6 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIGroupInvitationView.swift @@ -153,8 +153,9 @@ struct CIGroupInvitationView: View { struct CIGroupInvitationView_Previews: PreviewProvider { static var previews: some View { Group { - CIGroupInvitationView(chat: Chat.sampleData, chatItem: ChatItem.getGroupInvitationSample(), groupInvitation: CIGroupInvitation.getSample(groupProfile: GroupProfile(displayName: "team", fullName: "team")), memberRole: .admin) - CIGroupInvitationView(chat: Chat.sampleData, chatItem: ChatItem.getGroupInvitationSample(), groupInvitation: CIGroupInvitation.getSample(status: .accepted), memberRole: .admin) + let ci = previewDated(ChatItem.getGroupInvitationSample()) + CIGroupInvitationView(chat: Chat.sampleData, chatItem: ci, groupInvitation: CIGroupInvitation.getSample(groupProfile: GroupProfile(displayName: "team", fullName: "team")), memberRole: .admin).modifier(ChatItemClipped(ci, tailVisible: true)) + CIGroupInvitationView(chat: Chat.sampleData, chatItem: ci, groupInvitation: CIGroupInvitation.getSample(status: .accepted), memberRole: .admin).modifier(ChatItemClipped(ci, tailVisible: true)) } } } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift index 4719c3dcdc..c68b55288b 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIMemberCreatedContactView.swift @@ -72,7 +72,7 @@ struct CIMemberCreatedContactView_Previews: PreviewProvider { let content = CIContent.rcvGroupEvent(rcvGroupEvent: .memberCreatedContact) let chatItem = ChatItem( chatDir: .groupRcv(groupMember: GroupMember.sampleData), - meta: CIMeta.getSample(1, .now, content.text, .rcvRead), + meta: CIMeta.getSample(1, previewDate, content.text, .rcvRead), content: content, quotedItem: nil, file: nil diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift index 2984c3a286..af7634672b 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIMetaView.swift @@ -193,13 +193,13 @@ struct CIMetaView_Previews: PreviewProvider { static let metaColor = Color.secondary static var previews: some View { Group { - CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent(sndProgress: .complete)), metaColor: metaColor) - CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent(sndProgress: .partial)), metaColor: metaColor) - CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndRcvd(msgRcptStatus: .ok, sndProgress: .complete)), metaColor: metaColor) - CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndRcvd(msgRcptStatus: .ok, sndProgress: .partial)), metaColor: metaColor) - CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndRcvd(msgRcptStatus: .badMsgHash, sndProgress: .complete)), metaColor: metaColor) - CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent(sndProgress: .complete), itemEdited: true), metaColor: metaColor) - CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getDeletedContentSample(), metaColor: metaColor) + CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndSent(sndProgress: .complete)), metaColor: metaColor) + CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndSent(sndProgress: .partial)), metaColor: metaColor) + CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndRcvd(msgRcptStatus: .ok, sndProgress: .complete)), metaColor: metaColor) + CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndRcvd(msgRcptStatus: .ok, sndProgress: .partial)), metaColor: metaColor) + CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndRcvd(msgRcptStatus: .badMsgHash, sndProgress: .complete)), metaColor: metaColor) + CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndSent(sndProgress: .complete), itemEdited: true), metaColor: metaColor) + CIMetaView(chat: Chat.sampleData, chatItem: ChatItem.getDeletedContentSample(1, previewDate), metaColor: metaColor) } .previewLayout(.fixed(width: 360, height: 100)) } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIVoiceView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIVoiceView.swift index 6c89a5f788..d79f3cca0c 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIVoiceView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIVoiceView.swift @@ -445,30 +445,34 @@ struct CIVoiceView_Previews: PreviewProvider { let im = ItemsModel.shared let sentVoiceMessage: ChatItem = ChatItem( chatDir: .directSnd, - meta: CIMeta.getSample(1, .now, "", .sndSent(sndProgress: .complete), itemEdited: true), + meta: CIMeta.getSample(1, previewDate, "", .sndSent(sndProgress: .complete), itemEdited: true), content: .sndMsgContent(msgContent: .voice(text: "", duration: 30)), quotedItem: nil, file: CIFile.getSample(fileStatus: .sndComplete) ) let voiceMessageWtFile = ChatItem( chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, "", .rcvRead), + meta: CIMeta.getSample(1, previewDate, "", .rcvRead), content: .rcvMsgContent(msgContent: .voice(text: "", duration: 30)), quotedItem: nil, file: nil ) Group { + let ci1 = previewDated(ChatItem.getVoiceMsgContentSample()) CIVoiceView( chat: Chat.sampleData, - chatItem: ChatItem.getVoiceMsgContentSample(), + chatItem: ci1, recordingFile: CIFile.getSample(fileName: "voice.m4a", fileSize: 65536, fileStatus: .rcvComplete), duration: 30, allowMenu: Binding.constant(true) ) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: sentVoiceMessage, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getVoiceMsgContentSample(), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getVoiceMsgContentSample(fileStatus: .rcvTransfer(rcvProgress: 7, rcvTotal: 10)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: voiceMessageWtFile, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)) + .modifier(ChatItemClipped(ci1, tailVisible: true)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: sentVoiceMessage, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)).modifier(ChatItemClipped(sentVoiceMessage, tailVisible: true)) + let ci2 = previewDated(ChatItem.getVoiceMsgContentSample()) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)).modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = previewDated(ChatItem.getVoiceMsgContentSample(fileStatus: .rcvTransfer(rcvProgress: 7, rcvTotal: 10))) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)).modifier(ChatItemClipped(ci3, tailVisible: true)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: voiceMessageWtFile, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: .constant(true)).modifier(ChatItemClipped(voiceMessageWtFile, tailVisible: true)) } .previewLayout(.fixed(width: 360, height: 360)) } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/DeletedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/DeletedItemView.swift index fb5d36ab12..93e32d4fc8 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/DeletedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/DeletedItemView.swift @@ -34,8 +34,10 @@ struct DeletedItemView: View { struct DeletedItemView_Previews: PreviewProvider { static var previews: some View { Group { - DeletedItemView(chat: Chat.sampleData, chatItem: ChatItem.getDeletedContentSample()) - DeletedItemView(chat: Chat.sampleData, chatItem: ChatItem.getDeletedContentSample(dir: .groupRcv(groupMember: GroupMember.sampleData))) + let ci1 = ChatItem.getDeletedContentSample(1, previewDate) + DeletedItemView(chat: Chat.sampleData, chatItem: ci1).modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = ChatItem.getDeletedContentSample(dir: .groupRcv(groupMember: GroupMember.sampleData), previewDate) + DeletedItemView(chat: Chat.sampleData, chatItem: ci2).modifier(ChatItemClipped(ci2, tailVisible: true)) } .previewLayout(.fixed(width: 360, height: 200)) } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/EmojiItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/EmojiItemView.swift index 04f36c97a4..bbe0e99a2b 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/EmojiItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/EmojiItemView.swift @@ -36,8 +36,8 @@ func emojiText(_ text: String) -> Text { struct EmojiItemView_Previews: PreviewProvider { static var previews: some View { Group{ - EmojiItemView(chat: Chat.sampleData, chatItem: ChatItem.getSample(1, .directSnd, .now, "🙂", .sndSent(sndProgress: .complete))) - EmojiItemView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directRcv, .now, "👍")) + EmojiItemView(chat: Chat.sampleData, chatItem: ChatItem.getSample(1, .directSnd, previewDate, "🙂", .sndSent(sndProgress: .complete))) + EmojiItemView(chat: Chat.sampleData, chatItem: ChatItem.getSample(2, .directRcv, previewDate, "👍")) } .previewLayout(.fixed(width: 360, height: 70)) } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedCIVoiceView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedCIVoiceView.swift index 123f7289bb..3e8eecc251 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedCIVoiceView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedCIVoiceView.swift @@ -82,24 +82,27 @@ struct FramedCIVoiceView_Previews: PreviewProvider { let im = ItemsModel.shared let sentVoiceMessage: ChatItem = ChatItem( chatDir: .directSnd, - meta: CIMeta.getSample(1, .now, "", .sndSent(sndProgress: .complete), itemEdited: true), + meta: CIMeta.getSample(1, previewDate, "", .sndSent(sndProgress: .complete), itemEdited: true), content: .sndMsgContent(msgContent: .voice(text: "Hello there", duration: 30)), quotedItem: nil, file: CIFile.getSample(fileStatus: .sndComplete) ) let voiceMessageWithQuote: ChatItem = ChatItem( chatDir: .directSnd, - meta: CIMeta.getSample(1, .now, "", .sndSent(sndProgress: .complete), itemEdited: true), + meta: CIMeta.getSample(1, previewDate, "", .sndSent(sndProgress: .complete), itemEdited: true), content: .sndMsgContent(msgContent: .voice(text: "", duration: 30)), - quotedItem: CIQuote.getSample(1, .now, "Hi", chatDir: .directRcv), + quotedItem: CIQuote.getSample(1, previewDate, "Hi", chatDir: .directRcv), file: CIFile.getSample(fileStatus: .sndComplete) ) Group { - ChatItemView(chat: Chat.sampleData, im: im, chatItem: sentVoiceMessage, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getVoiceMsgContentSample(text: "Hello there"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getVoiceMsgContentSample(text: "Hello there", fileStatus: .rcvTransfer(rcvProgress: 7, rcvTotal: 10)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getVoiceMsgContentSample(text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: voiceMessageWithQuote, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: sentVoiceMessage, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(sentVoiceMessage, tailVisible: true)) + let ci1 = previewDated(ChatItem.getVoiceMsgContentSample(text: "Hello there")) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci1, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = previewDated(ChatItem.getVoiceMsgContentSample(text: "Hello there", fileStatus: .rcvTransfer(rcvProgress: 7, rcvTotal: 10))) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = previewDated(ChatItem.getVoiceMsgContentSample(text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci3, tailVisible: true)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: voiceMessageWithQuote, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(voiceMessageWithQuote, tailVisible: true)) } .environment(\.revealed, false) .previewLayout(.fixed(width: 360, height: 360)) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index b6bac78d46..b4db33f7cc 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -453,14 +453,22 @@ struct FramedItemView_Previews: PreviewProvider { static var previews: some View { let im = ItemsModel.shared Group{ - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), .now, "hello", quotedItem: CIQuote.getSample(1, .now, "hi", chatDir: .directSnd)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, .now, "hi", chatDir: .directRcv)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directSnd, .now, "👍", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, .now, "Hello too", chatDir: .directRcv)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "hello there too!!! this covers -"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "hello there too!!! this text has the time on the same line "), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "https://simplex.chat"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "chaT@simplex.chat"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) + let ci1 = ChatItem.getSample(1, .directSnd, previewDate, "hello") + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci1, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), previewDate, "hello", quotedItem: CIQuote.getSample(1, previewDate, "hi", chatDir: .directSnd)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, previewDate, "hi", chatDir: .directRcv)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci3, tailVisible: true)) + let ci4 = ChatItem.getSample(2, .directSnd, previewDate, "👍", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, previewDate, "Hello too", chatDir: .directRcv)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci4, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci4, tailVisible: true)) + let ci5 = ChatItem.getSample(2, .directRcv, previewDate, "hello there too!!! this covers -") + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci5, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci5, tailVisible: true)) + let ci6 = ChatItem.getSample(2, .directRcv, previewDate, "hello there too!!! this text has the time on the same line ") + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci6, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci6, tailVisible: true)) + let ci7 = ChatItem.getSample(2, .directRcv, previewDate, "https://simplex.chat") + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci7, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci7, tailVisible: true)) + let ci8 = ChatItem.getSample(2, .directRcv, previewDate, "chaT@simplex.chat") + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci8, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci8, tailVisible: true)) } .previewLayout(.fixed(width: 360, height: 200)) } @@ -470,16 +478,26 @@ struct FramedItemView_Edited_Previews: PreviewProvider { static var previews: some View { let im = ItemsModel.shared Group { - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete), itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), .now, "hello", quotedItem: CIQuote.getSample(1, .now, "hi", chatDir: .directSnd), itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, .now, "hi", chatDir: .directRcv), itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directSnd, .now, "👍", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, .now, "Hello too", chatDir: .directRcv), itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "hello there too!!! this covers -", .rcvRead, itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "hello there too!!! this text has the time on the same line ", .rcvRead, itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "https://simplex.chat", .rcvRead, itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "chaT@simplex.chat", .rcvRead, itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), .now, "hello", quotedItem: CIQuote.getSample(1, .now, "hi there hello hello hello ther hello hello", chatDir: .directSnd, image: "data:image/jpg;base64,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"), itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), .now, "hello there this is a long text", quotedItem: CIQuote.getSample(1, .now, "hi there", chatDir: .directSnd, image: "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAuKADAAQAAAABAAAAYAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgAYAC4AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAQEBAQEBAgEBAgMCAgIDBAMDAwMEBgQEBAQEBgcGBgYGBgYHBwcHBwcHBwgICAgICAkJCQkJCwsLCwsLCwsLC//bAEMBAgICAwMDBQMDBQsIBggLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLC//dAAQADP/aAAwDAQACEQMRAD8A/v4ooooAKKKKACiiigAooooAKK+CP2vP+ChXwZ/ZPibw7dMfEHi2VAYdGs3G9N33TO/IiU9hgu3ZSOa/NzXNL/4KJ/td6JJ49+NXiq2+Cvw7kG/ZNKbDMLcjKblmfI/57SRqewrwMdxBRo1HQoRdWqt1HaP+KT0j838j7XKOCMXiqEcbjKkcPh5bSne8/wDr3BXlN+is+5+43jb45/Bf4bs0fj/xZpGjSL1jvL2KF/8AvlmDfpXjH/DfH7GQuPsv/CydD35x/wAfIx+fT9a/AO58D/8ABJj4UzvF4v8AFfif4l6mp/evpkfkWzP3w2Isg+omb61X/wCF0/8ABJr/AI9f+FQeJPL6ed9vbzPrj7ZivnavFuIT+KhHyc5Sf3wjY+7w/hlgZQv7PF1P70aUKa+SqTUvwP6afBXx2+CnxIZYvAHi3R9ZkfpHZ3sUz/8AfKsW/SvVq/lItvBf/BJX4rTLF4V8UeJ/hpqTH91JqUfn2yv2y2JcD3MqfUV9OaFon/BRH9krQ4vH3wI8XW3xq+HkY3+XDKb/ABCvJxHuaZMDr5Ergd1ruwvFNVrmq0VOK3lSkp29Y6SS+R5GY+HGGi1DD4qVKo9oYmm6XN5RqK9Nvsro/obor4A/ZC/4KH/Bv9qxV8MLnw54vjU+bo9443SFPvG3k4EoHdcB17rjmvv+vqcHjaGKpKth5qUX1X9aPyZ+b5rlOMy3ESwmOpOFRdH+aezT6NXTCiiiuo84KKKKACiiigCC6/49pP8AdP8AKuOrsbr/AI9pP90/yrjqAP/Q/v4ooooAKKKKACiiigAr8tf+ChP7cWs/BEWfwD+A8R1P4k+JQkUCQr5rWUc52o+zndNIf9Up4H324wD9x/tDfGjw/wDs9fBnX/i/4jAeHRrZpI4c4M87YWKIe7yFV9gc9q/n6+B3iOb4GfCLxL/wU1+Oypq3jzxndT2nhK2uBwZptyvcBeoQBSq4xthjwPvivluIs0lSthKM+WUk5Sl/JBbtebekfM/R+BOHaeIcszxVL2kISUKdP/n7WlrGL/uxXvT8u6uizc6b8I/+CbmmRePPi9HD8Q/j7rifbktLmTz7bSGm582ZzktITyX++5+5tX5z5L8LPgv+0X/wVH12+8ZfEbxneW/2SRxB9o02eTSosdY4XRlgjYZGV++e5Jr8xvF3i7xN4+8UX/jXxney6jquqTNcXVzMcvJI5ySfQdgBwBgDgV+sP/BPX9jj9oL9oXw9H4tuvG2s+DfAVlM8VsthcyJLdSBsyCBNwREDZ3SEHLcBTgkfmuX4j+0MXHB06LdBXagna/8AenK6u+7el9Ej9+zvA/2Jls81r4uMcY7J1px5lHf93ShaVo9FFJNq8pMyPil/wRs/aj8D6dLq3gq70vxdHECxgtZGtrogf3UmAQn2EmT2r8rPEPh3xB4R1u58M+KrGfTdRsnMdxa3MbRTROOzKwBBr+674VfCnTfhNoI0DTtX1jWFAGZtYvpL2U4934X/AICAK8V/aW/Yf/Z9/areHUvibpkkerWsRhg1KxkMFyqHkBiMrIAeQJFYDJxjJr6bNPD+nOkqmAfLP+WTuvk7XX4/I/PeHvG6tSxDo5zH2lLpUhHll6uN7NelmvPY/iir2T4KftA/GD9njxMvir4Q65caTPkGWFTutrgD+GaE/I4+oyOxB5r2n9tb9jTxj+x18RYvD+pTtqmgaqrS6VqezZ5qpjfHIBwsseRuA4IIYdcD4yr80q0sRgcQ4SvCpB+jT8mvzP6Bw2JwOcYGNany1aFRdVdNdmn22aauno9T9tLO0+D/APwUr02Txd8NI4Ph38ftGT7b5NtIYLXWGh58yJwQVkBGd/8ArEP3i6fMP0R/4J7ftw6/8YZ7z9nb9oGJtN+JPhoPFIJ18p75IPlclegnj/5aKOGHzrxnH8rPhXxT4j8D+JbHxj4QvZdO1TTJkuLW5hba8UqHIIP8x0I4PFfsZ8bPEdx+0N8FvDv/AAUl+CgXSfiJ4EuYLXxZBbDALw4CXO0clMEZznMLlSf3Zr7PJM+nzyxUF+9ir1IrRVILeVtlOO+lrr5n5RxfwbRdKGXVXfDzfLRm9ZUKr+GDlq3RqP3UnfllZfy2/ptorw/9m/43aF+0X8FNA+L+gARpq1uGnhByYLlCUmiP+44IHqMHvXuFfsNGtCrTjVpu8ZJNPyZ/LWKwtXDVp4evG04Nxa7NOzX3hRRRWhzhRRRQBBdf8e0n+6f5Vx1djdf8e0n+6f5Vx1AH/9H+/iiiigAooooAKKKKAPw9/wCCvXiPWviH4q+F/wCyN4XlKT+K9TS6uQvoXFvAT7AvI3/AQe1fnF/wVO+IOnXfxx034AeDj5Xhv4ZaXb6TawKfkE7Ro0rY6bgvlofdT61+h3xNj/4Tv/gtd4Q0W/8Anh8P6THLGp6Ax21xOD/324Nfg3+0T4kufGH7QHjjxRdtukvte1GXJ9PPcKPwAAr8a4pxUpLEz6zq8n/btOK0+cpX9Uf1d4c5bCDy+lbSlh3W/wC38RNq/qoQcV5M8fjiaeRYEOGchR9TxX9svw9+GHijSvgB4I+Gnwr1ceGbGztYY728gijluhbohLLAJVeJZJJCN0jo+0Zwu4gj+JgO8REsf3l+YfUV/bf8DNVm+Mv7KtkNF1CTTZ9Z0d4Ir2D/AFls9zF8sidPmj3hhz1Fel4YyhGtiHpzWjur6e9f9Dw/H9VXQwFvgvUv62hb8Oa3zPoDwfp6aPoiaONXuNaa1Zo3ubp43nLDqrmJEXI/3QfWukmjMsTRBihYEbl6jPcZ7ivxk/4JMf8ABOv9ob9hBvFdr8ZvGOma9Yak22wttLiYGV2kMkl1dzSIkkkzcKisX8tSwDYNfs/X7Bj6NOlXlCjUU4/zJWv8j+ZsNUnOmpThyvtufj/+1Z8Hf2bPi58PviF8Avh/4wl1j4iaBZjXG0m71qfU7i3u4FMqt5VxLL5LzR70Kx7AVfJXAXH8sysGUMOh5r+vzwl+wD+y78KP2wPEX7bGn6xqFv4g8QmWa70+fUFGlrdTRmGS4EGATIY2dRvdlXe+0DPH83Nh+x58bPFev3kljpSaVYPcymGS+kEX7oudp2DL/dx/DX4Z4xZxkmCxGHxdTGRTlG0ueUU7q3S93a7S69Oh/SngTnNSjgcZhMc1CnCSlC70966dr/4U7Lq79T5Kr9MP+CWfxHsNH+P138EPF2JvDfxL0640a9gc/I0vls0Rx6kb4x/v1x3iz9hmHwV4KuPFHiLxlaWkltGzt5sBSAsBkIHL7iT0GFJJ7V8qfAnxLc+D/jd4N8V2bFJdP1vT5wR/szoT+YyK/NeD+Lcvx+Ijisuq88ackpPlklruveSvdX2ufsmavC5zlWKw9CV7xaTs1aSV4tXS1Ukmrdj9/P8Agkfrus/DD4ifFP8AY/8AEkrPJ4Z1F7y1DeiSG3mI9m2wv/wI1+5Ffhd4Ki/4Qf8A4Lb+INM0/wCSHxDpDySqOhL2cMx/8fizX7o1/RnC7ccLPDP/AJdTnBeid1+DP5M8RkqmZUselZ4ijSqv1lG0vvcWwooor6Q+BCiiigCC6/49pP8AdP8AKuOrsbr/AI9pP90/yrjqAP/S/v4ooooAKKKKACiiigD8LfiNIfBP/BbLwpq9/wDJDr2kJHGTwCZLS4gH/j0eK/Bj9oPw7c+Evj3428M3ilZLHXtRiIPoJ3x+Ywa/fL/grnoWsfDPx98K/wBrzw5EzyeGNSS0uSvokguYQfZtsy/8CFfnB/wVP+HNho/7QFp8bvCeJvDnxK0231mznQfI0vlqsoz6kbJD/v1+M8U4WUViYW1hV5/+3akVr/4FG3qz+r/DnMYTeX1b6VcP7L/t/Dzenq4Tcl5I/M2v6yP+CR3j4eLP2XbLRZZN0uku9sRnp5bMB/45sr+Tev3u/wCCJXj7yNW8T/DyZ+C6XUak9pUw36xD865uAcV7LNFTf24tfd736Hd405d9Y4cddLWlOMvk7wf/AKUvuP6Kq/P/APaa+InjJfF8vge3lez06KONgIyVM+8ZJYjkgHIx045r9AK/Gr/gsB8UPHXwg8N+AvFfgV4oWmv7u3uTJEsiyL5SsiNkZxkMeCDmvU8bsgzPN+Fa+FyrEujUUot6tKcdnBtapO6fny2ejZ/OnAOFWJzqjheVOU+ZK+yaTlfr2t8z85td/b18H6D4n1DQLrw5fSLY3Elv5okRWcxsVJKMAVyR0yTivEPHf7f3jjVFe18BaXb6PGeBPcH7RN9QMBAfqGrFP7UPwj8c3f2/4y/DuzvbxgA93ZNtd8dyGwT+Lmuvh/aP/ZT8IxC58EfD0y3Y5UzwxKAf99mlP5Cv49wvCeBwUoc3D9Sday3qRlTb73c7Wf8Aej8j+rKWVUKLV8vlKf8AiTj/AOlW+9Hw74w8ceNvHl8NX8bajc6jK2SjTsSo/wBxeFUf7orovgf4dufF3xp8H+F7NS0uoa3p8Cgf7c6A/pW98avjx4q+NmoW0mswW9jY2G/7LaWy4WPfjJLHlicD0HoBX13/AMEtPhrZeI/2jH+L3inEPh34cWE+t31w/wBxJFRliBPqPmkH/XOv3fhXCVa/1ahUoRoybV4RacYq/dKK0jq7Ky1s3uezm+PeByeviqkFBxhK0U767RirJattLTqz9H/CMg8af8Futd1DT/ni8P6OySsOxSyiiP8A49Niv3Qr8NP+CS+j6t8V/iv8V/2wdfiZD4i1B7K0LDtLJ9olUf7imFfwr9y6/oLhe88LUxPSrUnNejdl+CP5G8RWqeY0cAnd4ejSpP8AxRjd/c5NBRRRX0h8CFFFFAEF1/x7Sf7p/lXHV2N1/wAe0n+6f5Vx1AH/0/7+KKKKACiiigAooooA8M/aT+B+iftGfBLxB8INcIjGrWxFvORnyLmMh4ZB/uSAE46jI71+AfwU8N3H7SXwL8Qf8E5fjFt0r4kfD65nuvCstycbmhz5ltuPVcE4x1idWHEdf031+UX/AAUL/Yj8T/FG/sv2mP2c5H074keGtkoFufLe+jg5Taennx9Ezw6/Ie2PleI8slUtjKUOZpOM4/zwe6X96L1j5/cfpPAXEMKF8rxNX2cZSU6VR7Uq0dE3/cmvcn5dldn8r/iXw3r/AIN8Q3vhPxXZy6fqemzPb3VtMNskUsZwysPY/n1HFfe3/BL3x/8A8IP+1bptvK+2HVbeSBvdoyso/RWH419SX8fwg/4Kc6QmleIpLfwB8f8ASI/ssiXCGC11kwfLtZSNwkGMbceZH0w6Dj88tM+HvxW/ZK/aO8OQ/FvR7nQ7uw1OElpV/czQs+x2ilGUkUqTypPvivy3DYWWX46hjaT56HOrSXa+ql/LK26fy0P6LzDMYZ3lGMynEx9ni/ZyvTfV2bjKD+3BtJqS9HZn9gnxB/aM+Cvwp8XWXgj4ja/Bo+o6hB9ogW5DrG0ZYoCZNvlr8wI+Zh0r48/4KkfDey+NP7GOqeIPDUsV7L4elh1u0khYOskcOVl2MCQcwu5GDyRXwx/wVBnbVPH3gjxGeVvPDwUt2LxzOW/9Cr87tO8PfFXVdPisbDS9avNImbzLNILa4mtXfo5j2KULZwDjmvqs+4srKvi8rqYfnjays2nqlq9JX3v0P4FwfiDisjzqNanQU3RnGUbNq9rOz0ej207nxZovhrV9enMNhHwpwztwq/U+vt1qrrWlT6JqUumXBDNHj5l6EEZr7U+IHhHxF8JvEUHhL4j2Umiald2sV/Hb3Q8t2hnztbB75BDKfmVgQQCK8e0f4N/E349/FRvBvwh0a41y+YRq/kD91ECPvSyHCRqPVmFfl8aNZ1vYcj59rWd79rbn9T+HPjFnnEPE1WhmmEWEwKw8qkVJNbSppTdSSimmpO1ko2a3aueH+H/D+ueLNds/DHhi0lv9R1CZLe2toV3SSyyHCqoHUk1+yfxl8N3X7Ln7P+h/8E9/hOF1X4nfEm4gufFDWp3FBMR5dqGHRTgLzx5au5wJKtaZZ/B7/gmFpBhsJLbx78fdVi+zwQWyma00UzjbgAfMZDnGMCSToAiElvv/AP4J7fsS+LPh5q15+1H+0q76h8R/Em+ZUuSHksI5/vFj0E8g4YDiNPkH8VfeZJkVTnlhYfxpK02tqUHur7c8trdFfzt9dxdxjQ9lDMKi/wBlpvmpRejxFVfDK26o03713bmla2yv90/sw/ArRv2bvgboHwh0crK2mQZup1GPPu5Tvmk9fmcnGei4HavfKKK/YaFGFGnGlTVoxSSXkj+WMXi6uKr1MTXlec25N923dsKKKK1OcKKKKAILr/j2k/3T/KuOrsbr/j2k/wB0/wAq46gD/9T+/iiiigAooooAKKKKACiiigD87P2wf+Ccnwm/ahmbxvosh8K+NY8NHq1onyzOn3ftEYK7yMcSKVkX1IAFfnT4m8f/ALdv7L+gyfDn9rjwFb/GLwFD8q3ssf2srGOjfaAjspA6GeMMOzV/RTRXz+N4eo1akq+Hm6VR7uNrS/xRekvzPuMo45xOGoQweOpRxFCPwqd1KH/XuorSh8m0uiPwz0L/AIKEf8E3vi6miH4saHd6Xc6B5gs4tWs3vYIPNILAGFpA65UcSLxjgCvtS1/4KT/sLWVlHFZePrCGCJAqRJa3K7VHQBRFxj0xXv8A48/Zc/Zx+J0z3Xj3wPoupzyHLTS2cfnE+8iqH/WvGP8Ah23+w953n/8ACu9PznOPMn2/98+bj9K5oYTOqMpSpyoyb3k4yjJ2015Xqac/BNSbrPD4mlKW6hKlJf8AgUkpP5n5zfta/tof8Ex/jPq+k+IPHelan491HQlljtI7KGWyikWUqSkryNCzJlcgc4JPHNcZ4V+Iv7c37TGgJ8N/2Ovh7bfB7wHN8pvoo/shMZ4LfaSiMxx1MERf/ar9sPAn7LH7N3wxmS68B+BtF02eM5WaOzjMwI9JGBf9a98AAGBWSyDF16kquKrqPN8Xso8rfrN3lY9SXG+WYPDww2W4SdRQ+B4io5xjre6pRtTvfW+up+cv7H//AATg+FX7MdynjzxHMfFnjeTLvqt2vyQO/wB77OjFtpOeZGLSH1AOK/Rqiivo8FgaGEpKjh4KMV/V33fmz4LNs5xuZ4h4rHVXOb6vouyWyS6JJIKKKK6zzAooooAKKKKAILr/AI9pP90/yrjq7G6/49pP90/yrjqAP//Z"), itemEdited: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) + let ci1 = ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete), itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci1, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), previewDate, "hello", quotedItem: CIQuote.getSample(1, previewDate, "hi", chatDir: .directSnd), itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, previewDate, "hi", chatDir: .directRcv), itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci3, tailVisible: true)) + let ci4 = ChatItem.getSample(2, .directSnd, previewDate, "👍", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, previewDate, "Hello too", chatDir: .directRcv), itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci4, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci4, tailVisible: true)) + let ci5 = ChatItem.getSample(2, .directRcv, previewDate, "hello there too!!! this covers -", .rcvRead, itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci5, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci5, tailVisible: true)) + let ci6 = ChatItem.getSample(2, .directRcv, previewDate, "hello there too!!! this text has the time on the same line ", .rcvRead, itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci6, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci6, tailVisible: true)) + let ci7 = ChatItem.getSample(2, .directRcv, previewDate, "https://simplex.chat", .rcvRead, itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci7, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci7, tailVisible: true)) + let ci8 = ChatItem.getSample(2, .directRcv, previewDate, "chaT@simplex.chat", .rcvRead, itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci8, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci8, tailVisible: true)) + let ci9 = ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), previewDate, "hello", quotedItem: CIQuote.getSample(1, previewDate, "hi there hello hello hello ther hello hello", chatDir: .directSnd, image: "data:image/jpg;base64,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"), itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci9, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci9, tailVisible: true)) + let ci10 = ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), previewDate, "hello there this is a long text", quotedItem: CIQuote.getSample(1, previewDate, "hi there", chatDir: .directSnd, image: "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAuKADAAQAAAABAAAAYAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgAYAC4AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAQEBAQEBAgEBAgMCAgIDBAMDAwMEBgQEBAQEBgcGBgYGBgYHBwcHBwcHBwgICAgICAkJCQkJCwsLCwsLCwsLC//bAEMBAgICAwMDBQMDBQsIBggLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLC//dAAQADP/aAAwDAQACEQMRAD8A/v4ooooAKKKKACiiigAooooAKK+CP2vP+ChXwZ/ZPibw7dMfEHi2VAYdGs3G9N33TO/IiU9hgu3ZSOa/NzXNL/4KJ/td6JJ49+NXiq2+Cvw7kG/ZNKbDMLcjKblmfI/57SRqewrwMdxBRo1HQoRdWqt1HaP+KT0j838j7XKOCMXiqEcbjKkcPh5bSne8/wDr3BXlN+is+5+43jb45/Bf4bs0fj/xZpGjSL1jvL2KF/8AvlmDfpXjH/DfH7GQuPsv/CydD35x/wAfIx+fT9a/AO58D/8ABJj4UzvF4v8AFfif4l6mp/evpkfkWzP3w2Isg+omb61X/wCF0/8ABJr/AI9f+FQeJPL6ed9vbzPrj7ZivnavFuIT+KhHyc5Sf3wjY+7w/hlgZQv7PF1P70aUKa+SqTUvwP6afBXx2+CnxIZYvAHi3R9ZkfpHZ3sUz/8AfKsW/SvVq/lItvBf/BJX4rTLF4V8UeJ/hpqTH91JqUfn2yv2y2JcD3MqfUV9OaFon/BRH9krQ4vH3wI8XW3xq+HkY3+XDKb/ABCvJxHuaZMDr5Ergd1ruwvFNVrmq0VOK3lSkp29Y6SS+R5GY+HGGi1DD4qVKo9oYmm6XN5RqK9Nvsro/obor4A/ZC/4KH/Bv9qxV8MLnw54vjU+bo9443SFPvG3k4EoHdcB17rjmvv+vqcHjaGKpKth5qUX1X9aPyZ+b5rlOMy3ESwmOpOFRdH+aezT6NXTCiiiuo84KKKKACiiigCC6/49pP8AdP8AKuOrsbr/AI9pP90/yrjqAP/Q/v4ooooAKKKKACiiigAr8tf+ChP7cWs/BEWfwD+A8R1P4k+JQkUCQr5rWUc52o+zndNIf9Up4H324wD9x/tDfGjw/wDs9fBnX/i/4jAeHRrZpI4c4M87YWKIe7yFV9gc9q/n6+B3iOb4GfCLxL/wU1+Oypq3jzxndT2nhK2uBwZptyvcBeoQBSq4xthjwPvivluIs0lSthKM+WUk5Sl/JBbtebekfM/R+BOHaeIcszxVL2kISUKdP/n7WlrGL/uxXvT8u6uizc6b8I/+CbmmRePPi9HD8Q/j7rifbktLmTz7bSGm582ZzktITyX++5+5tX5z5L8LPgv+0X/wVH12+8ZfEbxneW/2SRxB9o02eTSosdY4XRlgjYZGV++e5Jr8xvF3i7xN4+8UX/jXxney6jquqTNcXVzMcvJI5ySfQdgBwBgDgV+sP/BPX9jj9oL9oXw9H4tuvG2s+DfAVlM8VsthcyJLdSBsyCBNwREDZ3SEHLcBTgkfmuX4j+0MXHB06LdBXagna/8AenK6u+7el9Ej9+zvA/2Jls81r4uMcY7J1px5lHf93ShaVo9FFJNq8pMyPil/wRs/aj8D6dLq3gq70vxdHECxgtZGtrogf3UmAQn2EmT2r8rPEPh3xB4R1u58M+KrGfTdRsnMdxa3MbRTROOzKwBBr+674VfCnTfhNoI0DTtX1jWFAGZtYvpL2U4934X/AICAK8V/aW/Yf/Z9/areHUvibpkkerWsRhg1KxkMFyqHkBiMrIAeQJFYDJxjJr6bNPD+nOkqmAfLP+WTuvk7XX4/I/PeHvG6tSxDo5zH2lLpUhHll6uN7NelmvPY/iir2T4KftA/GD9njxMvir4Q65caTPkGWFTutrgD+GaE/I4+oyOxB5r2n9tb9jTxj+x18RYvD+pTtqmgaqrS6VqezZ5qpjfHIBwsseRuA4IIYdcD4yr80q0sRgcQ4SvCpB+jT8mvzP6Bw2JwOcYGNany1aFRdVdNdmn22aauno9T9tLO0+D/APwUr02Txd8NI4Ph38ftGT7b5NtIYLXWGh58yJwQVkBGd/8ArEP3i6fMP0R/4J7ftw6/8YZ7z9nb9oGJtN+JPhoPFIJ18p75IPlclegnj/5aKOGHzrxnH8rPhXxT4j8D+JbHxj4QvZdO1TTJkuLW5hba8UqHIIP8x0I4PFfsZ8bPEdx+0N8FvDv/AAUl+CgXSfiJ4EuYLXxZBbDALw4CXO0clMEZznMLlSf3Zr7PJM+nzyxUF+9ir1IrRVILeVtlOO+lrr5n5RxfwbRdKGXVXfDzfLRm9ZUKr+GDlq3RqP3UnfllZfy2/ptorw/9m/43aF+0X8FNA+L+gARpq1uGnhByYLlCUmiP+44IHqMHvXuFfsNGtCrTjVpu8ZJNPyZ/LWKwtXDVp4evG04Nxa7NOzX3hRRRWhzhRRRQBBdf8e0n+6f5Vx1djdf8e0n+6f5Vx1AH/9H+/iiiigAooooAKKKKAPw9/wCCvXiPWviH4q+F/wCyN4XlKT+K9TS6uQvoXFvAT7AvI3/AQe1fnF/wVO+IOnXfxx034AeDj5Xhv4ZaXb6TawKfkE7Ro0rY6bgvlofdT61+h3xNj/4Tv/gtd4Q0W/8Anh8P6THLGp6Ax21xOD/324Nfg3+0T4kufGH7QHjjxRdtukvte1GXJ9PPcKPwAAr8a4pxUpLEz6zq8n/btOK0+cpX9Uf1d4c5bCDy+lbSlh3W/wC38RNq/qoQcV5M8fjiaeRYEOGchR9TxX9svw9+GHijSvgB4I+Gnwr1ceGbGztYY728gijluhbohLLAJVeJZJJCN0jo+0Zwu4gj+JgO8REsf3l+YfUV/bf8DNVm+Mv7KtkNF1CTTZ9Z0d4Ir2D/AFls9zF8sidPmj3hhz1Fel4YyhGtiHpzWjur6e9f9Dw/H9VXQwFvgvUv62hb8Oa3zPoDwfp6aPoiaONXuNaa1Zo3ubp43nLDqrmJEXI/3QfWukmjMsTRBihYEbl6jPcZ7ivxk/4JMf8ABOv9ob9hBvFdr8ZvGOma9Yak22wttLiYGV2kMkl1dzSIkkkzcKisX8tSwDYNfs/X7Bj6NOlXlCjUU4/zJWv8j+ZsNUnOmpThyvtufj/+1Z8Hf2bPi58PviF8Avh/4wl1j4iaBZjXG0m71qfU7i3u4FMqt5VxLL5LzR70Kx7AVfJXAXH8sysGUMOh5r+vzwl+wD+y78KP2wPEX7bGn6xqFv4g8QmWa70+fUFGlrdTRmGS4EGATIY2dRvdlXe+0DPH83Nh+x58bPFev3kljpSaVYPcymGS+kEX7oudp2DL/dx/DX4Z4xZxkmCxGHxdTGRTlG0ueUU7q3S93a7S69Oh/SngTnNSjgcZhMc1CnCSlC70966dr/4U7Lq79T5Kr9MP+CWfxHsNH+P138EPF2JvDfxL0640a9gc/I0vls0Rx6kb4x/v1x3iz9hmHwV4KuPFHiLxlaWkltGzt5sBSAsBkIHL7iT0GFJJ7V8qfAnxLc+D/jd4N8V2bFJdP1vT5wR/szoT+YyK/NeD+Lcvx+Ijisuq88ackpPlklruveSvdX2ufsmavC5zlWKw9CV7xaTs1aSV4tXS1Ukmrdj9/P8Agkfrus/DD4ifFP8AY/8AEkrPJ4Z1F7y1DeiSG3mI9m2wv/wI1+5Ffhd4Ki/4Qf8A4Lb+INM0/wCSHxDpDySqOhL2cMx/8fizX7o1/RnC7ccLPDP/AJdTnBeid1+DP5M8RkqmZUselZ4ijSqv1lG0vvcWwooor6Q+BCiiigCC6/49pP8AdP8AKuOrsbr/AI9pP90/yrjqAP/S/v4ooooAKKKKACiiigD8LfiNIfBP/BbLwpq9/wDJDr2kJHGTwCZLS4gH/j0eK/Bj9oPw7c+Evj3428M3ilZLHXtRiIPoJ3x+Ywa/fL/grnoWsfDPx98K/wBrzw5EzyeGNSS0uSvokguYQfZtsy/8CFfnB/wVP+HNho/7QFp8bvCeJvDnxK0231mznQfI0vlqsoz6kbJD/v1+M8U4WUViYW1hV5/+3akVr/4FG3qz+r/DnMYTeX1b6VcP7L/t/Dzenq4Tcl5I/M2v6yP+CR3j4eLP2XbLRZZN0uku9sRnp5bMB/45sr+Tev3u/wCCJXj7yNW8T/DyZ+C6XUak9pUw36xD865uAcV7LNFTf24tfd736Hd405d9Y4cddLWlOMvk7wf/AKUvuP6Kq/P/APaa+InjJfF8vge3lez06KONgIyVM+8ZJYjkgHIx045r9AK/Gr/gsB8UPHXwg8N+AvFfgV4oWmv7u3uTJEsiyL5SsiNkZxkMeCDmvU8bsgzPN+Fa+FyrEujUUot6tKcdnBtapO6fny2ejZ/OnAOFWJzqjheVOU+ZK+yaTlfr2t8z85td/b18H6D4n1DQLrw5fSLY3Elv5okRWcxsVJKMAVyR0yTivEPHf7f3jjVFe18BaXb6PGeBPcH7RN9QMBAfqGrFP7UPwj8c3f2/4y/DuzvbxgA93ZNtd8dyGwT+Lmuvh/aP/ZT8IxC58EfD0y3Y5UzwxKAf99mlP5Cv49wvCeBwUoc3D9Sday3qRlTb73c7Wf8Aej8j+rKWVUKLV8vlKf8AiTj/AOlW+9Hw74w8ceNvHl8NX8bajc6jK2SjTsSo/wBxeFUf7orovgf4dufF3xp8H+F7NS0uoa3p8Cgf7c6A/pW98avjx4q+NmoW0mswW9jY2G/7LaWy4WPfjJLHlicD0HoBX13/AMEtPhrZeI/2jH+L3inEPh34cWE+t31w/wBxJFRliBPqPmkH/XOv3fhXCVa/1ahUoRoybV4RacYq/dKK0jq7Ky1s3uezm+PeByeviqkFBxhK0U767RirJattLTqz9H/CMg8af8Futd1DT/ni8P6OySsOxSyiiP8A49Niv3Qr8NP+CS+j6t8V/iv8V/2wdfiZD4i1B7K0LDtLJ9olUf7imFfwr9y6/oLhe88LUxPSrUnNejdl+CP5G8RWqeY0cAnd4ejSpP8AxRjd/c5NBRRRX0h8CFFFFAEF1/x7Sf7p/lXHV2N1/wAe0n+6f5Vx1AH/0/7+KKKKACiiigAooooA8M/aT+B+iftGfBLxB8INcIjGrWxFvORnyLmMh4ZB/uSAE46jI71+AfwU8N3H7SXwL8Qf8E5fjFt0r4kfD65nuvCstycbmhz5ltuPVcE4x1idWHEdf031+UX/AAUL/Yj8T/FG/sv2mP2c5H074keGtkoFufLe+jg5Taennx9Ezw6/Ie2PleI8slUtjKUOZpOM4/zwe6X96L1j5/cfpPAXEMKF8rxNX2cZSU6VR7Uq0dE3/cmvcn5dldn8r/iXw3r/AIN8Q3vhPxXZy6fqemzPb3VtMNskUsZwysPY/n1HFfe3/BL3x/8A8IP+1bptvK+2HVbeSBvdoyso/RWH419SX8fwg/4Kc6QmleIpLfwB8f8ASI/ssiXCGC11kwfLtZSNwkGMbceZH0w6Dj88tM+HvxW/ZK/aO8OQ/FvR7nQ7uw1OElpV/czQs+x2ilGUkUqTypPvivy3DYWWX46hjaT56HOrSXa+ql/LK26fy0P6LzDMYZ3lGMynEx9ni/ZyvTfV2bjKD+3BtJqS9HZn9gnxB/aM+Cvwp8XWXgj4ja/Bo+o6hB9ogW5DrG0ZYoCZNvlr8wI+Zh0r48/4KkfDey+NP7GOqeIPDUsV7L4elh1u0khYOskcOVl2MCQcwu5GDyRXwx/wVBnbVPH3gjxGeVvPDwUt2LxzOW/9Cr87tO8PfFXVdPisbDS9avNImbzLNILa4mtXfo5j2KULZwDjmvqs+4srKvi8rqYfnjays2nqlq9JX3v0P4FwfiDisjzqNanQU3RnGUbNq9rOz0ej207nxZovhrV9enMNhHwpwztwq/U+vt1qrrWlT6JqUumXBDNHj5l6EEZr7U+IHhHxF8JvEUHhL4j2Umiald2sV/Hb3Q8t2hnztbB75BDKfmVgQQCK8e0f4N/E349/FRvBvwh0a41y+YRq/kD91ECPvSyHCRqPVmFfl8aNZ1vYcj59rWd79rbn9T+HPjFnnEPE1WhmmEWEwKw8qkVJNbSppTdSSimmpO1ko2a3aueH+H/D+ueLNds/DHhi0lv9R1CZLe2toV3SSyyHCqoHUk1+yfxl8N3X7Ln7P+h/8E9/hOF1X4nfEm4gufFDWp3FBMR5dqGHRTgLzx5au5wJKtaZZ/B7/gmFpBhsJLbx78fdVi+zwQWyma00UzjbgAfMZDnGMCSToAiElvv/AP4J7fsS+LPh5q15+1H+0q76h8R/Em+ZUuSHksI5/vFj0E8g4YDiNPkH8VfeZJkVTnlhYfxpK02tqUHur7c8trdFfzt9dxdxjQ9lDMKi/wBlpvmpRejxFVfDK26o03713bmla2yv90/sw/ArRv2bvgboHwh0crK2mQZup1GPPu5Tvmk9fmcnGei4HavfKKK/YaFGFGnGlTVoxSSXkj+WMXi6uKr1MTXlec25N923dsKKKK1OcKKKKAILr/j2k/3T/KuOrsbr/j2k/wB0/wAq46gD/9T+/iiiigAooooAKKKKACiiigD87P2wf+Ccnwm/ahmbxvosh8K+NY8NHq1onyzOn3ftEYK7yMcSKVkX1IAFfnT4m8f/ALdv7L+gyfDn9rjwFb/GLwFD8q3ssf2srGOjfaAjspA6GeMMOzV/RTRXz+N4eo1akq+Hm6VR7uNrS/xRekvzPuMo45xOGoQweOpRxFCPwqd1KH/XuorSh8m0uiPwz0L/AIKEf8E3vi6miH4saHd6Xc6B5gs4tWs3vYIPNILAGFpA65UcSLxjgCvtS1/4KT/sLWVlHFZePrCGCJAqRJa3K7VHQBRFxj0xXv8A48/Zc/Zx+J0z3Xj3wPoupzyHLTS2cfnE+8iqH/WvGP8Ah23+w953n/8ACu9PznOPMn2/98+bj9K5oYTOqMpSpyoyb3k4yjJ2015Xqac/BNSbrPD4mlKW6hKlJf8AgUkpP5n5zfta/tof8Ex/jPq+k+IPHelan491HQlljtI7KGWyikWUqSkryNCzJlcgc4JPHNcZ4V+Iv7c37TGgJ8N/2Ovh7bfB7wHN8pvoo/shMZ4LfaSiMxx1MERf/ar9sPAn7LH7N3wxmS68B+BtF02eM5WaOzjMwI9JGBf9a98AAGBWSyDF16kquKrqPN8Xso8rfrN3lY9SXG+WYPDww2W4SdRQ+B4io5xjre6pRtTvfW+up+cv7H//AATg+FX7MdynjzxHMfFnjeTLvqt2vyQO/wB77OjFtpOeZGLSH1AOK/Rqiivo8FgaGEpKjh4KMV/V33fmz4LNs5xuZ4h4rHVXOb6vouyWyS6JJIKKKK6zzAooooAKKKKAILr/AI9pP90/yrjq7G6/49pP90/yrjqAP//Z"), itemEdited: true) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci10, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci10, tailVisible: true)) } .environment(\.revealed, false) .previewLayout(.fixed(width: 360, height: 200)) @@ -490,16 +508,26 @@ struct FramedItemView_Deleted_Previews: PreviewProvider { static var previews: some View { let im = ItemsModel.shared Group { - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), .now, "hello", quotedItem: CIQuote.getSample(1, .now, "hi", chatDir: .directSnd), itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, .now, "hi", chatDir: .directRcv), itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directSnd, .now, "👍", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, .now, "Hello too", chatDir: .directRcv), itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "hello there too!!! this covers -", .rcvRead, itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "hello there too!!! this text has the time on the same line ", .rcvRead, itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "https://simplex.chat", .rcvRead, itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "chaT@simplex.chat", .rcvRead, itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), .now, "hello", quotedItem: CIQuote.getSample(1, .now, "hi there hello hello hello ther hello hello", chatDir: .directSnd, image: "data:image/jpg;base64,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"), itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) - FramedItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), .now, "hello there this is a long text", quotedItem: CIQuote.getSample(1, .now, "hi there", chatDir: .directSnd, image: "data:image/jpg;base64,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"), itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)) + let ci1 = ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci1, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), previewDate, "hello", quotedItem: CIQuote.getSample(1, previewDate, "hi", chatDir: .directSnd), itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = ChatItem.getSample(2, .directSnd, previewDate, "https://simplex.chat", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, previewDate, "hi", chatDir: .directRcv), itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci3, tailVisible: true)) + let ci4 = ChatItem.getSample(2, .directSnd, previewDate, "👍", .sndSent(sndProgress: .complete), quotedItem: CIQuote.getSample(1, previewDate, "Hello too", chatDir: .directRcv), itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci4, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci4, tailVisible: true)) + let ci5 = ChatItem.getSample(2, .directRcv, previewDate, "hello there too!!! this covers -", .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci5, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci5, tailVisible: true)) + let ci6 = ChatItem.getSample(2, .directRcv, previewDate, "hello there too!!! this text has the time on the same line ", .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci6, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci6, tailVisible: true)) + let ci7 = ChatItem.getSample(2, .directRcv, previewDate, "https://simplex.chat", .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci7, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci7, tailVisible: true)) + let ci8 = ChatItem.getSample(2, .directRcv, previewDate, "chaT@simplex.chat", .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci8, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci8, tailVisible: true)) + let ci9 = ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), previewDate, "hello", quotedItem: CIQuote.getSample(1, previewDate, "hi there hello hello hello ther hello hello", chatDir: .directSnd, image: "data:image/jpg;base64,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"), itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci9, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci9, tailVisible: true)) + let ci10 = ChatItem.getSample(1, .groupRcv(groupMember: GroupMember.sampleData), previewDate, "hello there this is a long text", quotedItem: CIQuote.getSample(1, previewDate, "hi there", chatDir: .directSnd, image: "data:image/jpg;base64,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"), itemDeleted: .deleted(deletedTs: previewDate)) + FramedItemView(chat: Chat.sampleData, im: im, chatItem: ci10, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil), allowMenu: Binding.constant(true)).modifier(ChatItemClipped(ci10, tailVisible: true)) } .environment(\.revealed, false) .previewLayout(.fixed(width: 360, height: 200)) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/IntegrityErrorItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/IntegrityErrorItemView.swift index d831333c20..2f0492e1d9 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/IntegrityErrorItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/IntegrityErrorItemView.swift @@ -98,6 +98,7 @@ struct RcvMsgErrorItemView: View { struct IntegrityErrorItemView_Previews: PreviewProvider { static var previews: some View { - IntegrityErrorItemView(chat: Chat.sampleData, msgError: .msgBadHash, chatItem: ChatItem.getIntegrityErrorSample()) + let ci = previewDated(ChatItem.getIntegrityErrorSample()) + IntegrityErrorItemView(chat: Chat.sampleData, msgError: .msgBadHash, chatItem: ci).modifier(ChatItemClipped(ci, tailVisible: true)) } } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift index 953f4e8c82..08a648083a 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift @@ -86,11 +86,12 @@ struct MarkedDeletedItemView: View { struct MarkedDeletedItemView_Previews: PreviewProvider { static var previews: some View { Group { + let ci = ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: previewDate)) MarkedDeletedItemView( chat: Chat.sampleData, im: ItemsModel.shared, - chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: .now)) - ).environment(\.revealed, true) + chatItem: ci + ).environment(\.revealed, true).modifier(ChatItemClipped(ci, tailVisible: true)) } .previewLayout(.fixed(width: 360, height: 200)) } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift b/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift index 10bd784b7e..e91ee7f32f 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/MsgContentView.swift @@ -1020,7 +1020,7 @@ func stripFormattedTextLink(_ ft: [FormattedText]?, _ link: String) -> [Formatte struct MsgContentView_Previews: PreviewProvider { static var previews: some View { - let chatItem = ChatItem.getSample(1, .directSnd, .now, "hello") + let chatItem = ChatItem.getSample(1, .directSnd, previewDate, "hello") return MsgContentView( chat: Chat.sampleData, text: chatItem.text, diff --git a/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift index 92bab973c9..10c3d85dd7 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemForwardingView.swift @@ -129,11 +129,13 @@ struct ChatItemForwardingView: View { } } -#Preview { - ChatItemForwardingView( - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello")], - fromChatInfo: .direct(contact: Contact.sampleData), - composeState: Binding.constant(ComposeState(message: "hello")) - ).environmentObject(CurrentColors.toAppTheme()) +struct ChatItemForwardingView_Previews: PreviewProvider { + static var previews: some View { + ChatItemForwardingView( + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello")], + fromChatInfo: .direct(contact: Contact.sampleData), + composeState: Binding.constant(ComposeState(message: "hello")) + ).environmentObject(CurrentColors.toAppTheme()) + } } diff --git a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift index 3fff0e34d1..54e0726554 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift @@ -618,6 +618,6 @@ func localTimestamp(_ date: Date) -> String { struct ChatItemInfoView_Previews: PreviewProvider { static var previews: some View { - ChatItemInfoView(ci: ChatItem.getSample(1, .directSnd, .now, "hello"), userMemberId: Chat.sampleData.chatInfo.groupInfo?.membership.memberId, chatItemInfo: Binding.constant(nil)) + ChatItemInfoView(ci: ChatItem.getSample(1, .directSnd, previewDate, "hello"), userMemberId: Chat.sampleData.chatInfo.groupInfo?.membership.memberId, chatItemInfo: Binding.constant(nil)) } } diff --git a/apps/ios/Shared/Views/Chat/ChatItemView.swift b/apps/ios/Shared/Views/Chat/ChatItemView.swift index 1839651daa..2f67e70f97 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemView.swift @@ -286,19 +286,38 @@ func chatEventText(_ ci: ChatItem, _ secondaryColor: Color, isChannel: Bool = fa chatEventText("\(ci.content.text(isChannel: isChannel))", ci.timestampText, secondaryColor) } +let previewDate = Date(timeIntervalSince1970: 1_736_936_100) + +func previewDated(_ chatItem: ChatItem) -> ChatItem { + var ci = chatItem + ci.meta.itemTs = previewDate + ci.meta.createdAt = previewDate + ci.meta.updatedAt = previewDate + return ci +} + struct ChatItemView_Previews: PreviewProvider { static var previews: some View { let im = ItemsModel.shared Group{ - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "hello there too"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "🙂"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "🙂🙂🙂🙂🙂"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(2, .directRcv, .now, "🙂🙂🙂🙂🙂🙂"), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getDeletedContentSample(), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: .now)), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "🙂", .sndSent(sndProgress: .complete), itemLive: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).environment(\.revealed, true) - ChatItemView(chat: Chat.sampleData, im: im, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete), itemLive: true), scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).environment(\.revealed, true) + let ci1 = ChatItem.getSample(1, .directSnd, previewDate, "hello") + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci1, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = ChatItem.getSample(2, .directRcv, previewDate, "hello there too") + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = ChatItem.getSample(1, .directSnd, previewDate, "🙂") + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci3, tailVisible: true)) + let ci4 = ChatItem.getSample(2, .directRcv, previewDate, "🙂🙂🙂🙂🙂") + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci4, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci4, tailVisible: true)) + let ci5 = ChatItem.getSample(2, .directRcv, previewDate, "🙂🙂🙂🙂🙂🙂") + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci5, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci5, tailVisible: true)) + let ci6 = ChatItem.getDeletedContentSample(1, previewDate) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci6, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci6, tailVisible: true)) + let ci7 = ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: previewDate)) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci7, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).modifier(ChatItemClipped(ci7, tailVisible: true)) + let ci8 = ChatItem.getSample(1, .directSnd, previewDate, "🙂", .sndSent(sndProgress: .complete), itemLive: true) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci8, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).environment(\.revealed, true).modifier(ChatItemClipped(ci8, tailVisible: true)) + let ci9 = ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete), itemLive: true) + ChatItemView(chat: Chat.sampleData, im: im, chatItem: ci9, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil)).environment(\.revealed, true).modifier(ChatItemClipped(ci9, tailVisible: true)) } .environment(\.revealed, false) .previewLayout(.fixed(width: 360, height: 70)) @@ -311,70 +330,80 @@ struct ChatItemView_NonMsgContentDeleted_Previews: PreviewProvider { let im = ItemsModel.shared let ciFeatureContent = CIContent.rcvChatFeature(feature: .fullDelete, enabled: FeatureEnabled(forUser: false, forContact: false), param: nil) Group{ - ChatItemView( - chat: Chat.sampleData, - im: im, - chatItem: ChatItem( - chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, "1 skipped message", .rcvRead, itemDeleted: .deleted(deletedTs: .now)), - content: .rcvIntegrityError(msgError: .msgSkipped(fromMsgId: 1, toMsgId: 2)), - quotedItem: nil, - file: nil - ), - scrollToItem: { _ in }, - scrollToItemId: Binding.constant(nil) + let ci1 = ChatItem( + chatDir: .directRcv, + meta: CIMeta.getSample(1, previewDate, "1 skipped message", .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)), + content: .rcvIntegrityError(msgError: .msgSkipped(fromMsgId: 1, toMsgId: 2)), + quotedItem: nil, + file: nil ) ChatItemView( chat: Chat.sampleData, im: im, - chatItem: ChatItem( - chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, "1 skipped message", .rcvRead), - content: .rcvDecryptionError(msgDecryptError: .ratchetHeader, msgCount: 2), - quotedItem: nil, - file: nil - ), + chatItem: ci1, + scrollToItem: { _ in }, + scrollToItemId: Binding.constant(nil) + ) + .modifier(ChatItemClipped(ci1, tailVisible: true)) + let ci2 = ChatItem( + chatDir: .directRcv, + meta: CIMeta.getSample(1, previewDate, "1 skipped message", .rcvRead), + content: .rcvDecryptionError(msgDecryptError: .ratchetHeader, msgCount: 2), + quotedItem: nil, + file: nil + ) + ChatItemView( + chat: Chat.sampleData, + im: im, + chatItem: ci2, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil) ) - ChatItemView( - chat: Chat.sampleData, - im: im, - chatItem: ChatItem( - chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, "received invitation to join group team as admin", .rcvRead, itemDeleted: .deleted(deletedTs: .now)), - content: .rcvGroupInvitation(groupInvitation: CIGroupInvitation.getSample(status: .pending), memberRole: .admin), - quotedItem: nil, - file: nil - ), - scrollToItem: { _ in }, - scrollToItemId: Binding.constant(nil) + .modifier(ChatItemClipped(ci2, tailVisible: true)) + let ci3 = ChatItem( + chatDir: .directRcv, + meta: CIMeta.getSample(1, previewDate, "received invitation to join group team as admin", .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)), + content: .rcvGroupInvitation(groupInvitation: CIGroupInvitation.getSample(status: .pending), memberRole: .admin), + quotedItem: nil, + file: nil ) ChatItemView( chat: Chat.sampleData, im: im, - chatItem: ChatItem( - chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, "group event text", .rcvRead, itemDeleted: .deleted(deletedTs: .now)), - content: .rcvGroupEvent(rcvGroupEvent: .memberAdded(groupMemberId: 1, profile: Profile.sampleData)), - quotedItem: nil, - file: nil - ), + chatItem: ci3, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil) ) + .modifier(ChatItemClipped(ci3, tailVisible: true)) + let ci4 = ChatItem( + chatDir: .directRcv, + meta: CIMeta.getSample(1, previewDate, "group event text", .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)), + content: .rcvGroupEvent(rcvGroupEvent: .memberAdded(groupMemberId: 1, profile: Profile.sampleData)), + quotedItem: nil, + file: nil + ) ChatItemView( chat: Chat.sampleData, im: im, - chatItem: ChatItem( - chatDir: .directRcv, - meta: CIMeta.getSample(1, .now, ciFeatureContent.text, .rcvRead, itemDeleted: .deleted(deletedTs: .now)), - content: ciFeatureContent, - quotedItem: nil, - file: nil - ), + chatItem: ci4, scrollToItem: { _ in }, scrollToItemId: Binding.constant(nil) ) + .modifier(ChatItemClipped(ci4, tailVisible: true)) + let ci5 = ChatItem( + chatDir: .directRcv, + meta: CIMeta.getSample(1, previewDate, ciFeatureContent.text, .rcvRead, itemDeleted: .deleted(deletedTs: previewDate)), + content: ciFeatureContent, + quotedItem: nil, + file: nil + ) + ChatItemView( + chat: Chat.sampleData, + im: im, + chatItem: ci5, + scrollToItem: { _ in }, + scrollToItemId: Binding.constant(nil) + ) + .modifier(ChatItemClipped(ci5, tailVisible: true)) } .environment(\.revealed, true) .previewLayout(.fixed(width: 360, height: 70)) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 2a903fcd91..1ab265ae30 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -3329,15 +3329,15 @@ struct ChatView_Previews: PreviewProvider { chatModel.chatId = "@1" let im = ItemsModel.shared im.reversedChatItems = [ - ChatItem.getSample(1, .directSnd, .now, "hello"), - ChatItem.getSample(2, .directRcv, .now, "hi"), - ChatItem.getSample(3, .directRcv, .now, "hi there"), - ChatItem.getDeletedContentSample(4), - ChatItem.getSample(5, .directRcv, .now, "hello again"), - ChatItem.getSample(6, .directSnd, .now, "hi there!!!"), - ChatItem.getSample(7, .directSnd, .now, "how are you?"), - ChatItem.getSample(8, .directSnd, .now, "👍👍👍👍"), - ChatItem.getSample(9, .directSnd, .now, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") + ChatItem.getSample(1, .directSnd, previewDate, "hello"), + ChatItem.getSample(2, .directRcv, previewDate, "hi"), + ChatItem.getSample(3, .directRcv, previewDate, "hi there"), + ChatItem.getDeletedContentSample(4, previewDate), + ChatItem.getSample(5, .directRcv, previewDate, "hello again"), + ChatItem.getSample(6, .directSnd, previewDate, "hi there!!!"), + ChatItem.getSample(7, .directSnd, previewDate, "how are you?"), + ChatItem.getSample(8, .directSnd, previewDate, "👍👍👍👍"), + ChatItem.getSample(9, .directSnd, previewDate, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") ] @State var showChatInfo = false return ChatView( diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextContactRequestActionsView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextContactRequestActionsView.swift index 82c89cd43d..8637321ad2 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextContactRequestActionsView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextContactRequestActionsView.swift @@ -90,8 +90,10 @@ struct ContextContactRequestActionsView: View { } } -#Preview { - ContextContactRequestActionsView( - contactRequestId: 1 - ) +struct ContextContactRequestActionsView_Previews: PreviewProvider { + static var previews: some View { + ContextContactRequestActionsView( + contactRequestId: 1 + ) + } } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift index 13614692cb..f7f8d2982e 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextItemView.swift @@ -98,7 +98,7 @@ struct ContextItemView: View { struct ContextItemView_Previews: PreviewProvider { static var previews: some View { - let contextItem: ChatItem = ChatItem.getSample(1, .directSnd, .now, "hello") + let contextItem: ChatItem = ChatItem.getSample(1, .directSnd, previewDate, "hello") return ContextItemView(chat: Chat.sampleData, contextItems: [contextItem], contextIcon: "pencil.circle", cancelContextItem: {}, contextIconForeground: Color.red) } } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextMemberContactActionsView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextMemberContactActionsView.swift index 9a73b2b5d4..c9fa58471d 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextMemberContactActionsView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextMemberContactActionsView.swift @@ -102,9 +102,11 @@ func acceptMemberContactRequest(_ contact: Contact, inProgress: Binding? = } } -#Preview { - ContextMemberContactActionsView( - contact: Contact.sampleData, - groupDirectInv: GroupDirectInvitation.sampleData - ) +struct ContextMemberContactActionsView_Previews: PreviewProvider { + static var previews: some View { + ContextMemberContactActionsView( + contact: Contact.sampleData, + groupDirectInv: GroupDirectInvitation.sampleData + ) + } } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextPendingMemberActionsView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextPendingMemberActionsView.swift index e9913053ea..8bbbb71d6e 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextPendingMemberActionsView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextPendingMemberActionsView.swift @@ -98,9 +98,11 @@ func acceptMember(_ groupInfo: GroupInfo, _ member: GroupMember, _ role: GroupMe } } -#Preview { - ContextPendingMemberActionsView( - groupInfo: GroupInfo.sampleData, - member: GroupMember.sampleData - ) +struct ContextPendingMemberActionsView_Previews: PreviewProvider { + static var previews: some View { + ContextPendingMemberActionsView( + groupInfo: GroupInfo.sampleData, + member: GroupMember.sampleData + ) + } } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextProfilePickerView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextProfilePickerView.swift index 9047eaf84b..4803b57719 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ContextProfilePickerView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ContextProfilePickerView.swift @@ -300,9 +300,11 @@ struct ContextProfilePickerView: View { } } -#Preview { - ContextProfilePickerView( - chat: Chat.sampleData, - selectedUser: User.sampleData - ) +struct ContextProfilePickerView_Previews: PreviewProvider { + static var previews: some View { + ContextProfilePickerView( + chat: Chat.sampleData, + selectedUser: User.sampleData + ) + } } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift index 225e83c014..dbded8e39b 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/NativeTextEditor.swift @@ -284,7 +284,7 @@ struct NativeTextEditor_Previews: PreviewProvider{ disableEditing: Binding.constant(false), height: Binding.constant(100), focused: Binding.constant(false), - lastUnfocusedDate: Binding.constant(.now), + lastUnfocusedDate: Binding.constant(previewDate), placeholder: Binding.constant("Placeholder"), selectedRange: Binding.constant(NSRange(location: 0, length: 0)), onImagesAdded: { _ in } diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift index 1d75f38715..2cfa6b2b0a 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/SendMessageView.swift @@ -446,7 +446,7 @@ struct SendMessageView_Previews: PreviewProvider { static var previews: some View { @State var composeStateNew = ComposeState() @State var selectedRange = NSRange() - let ci = ChatItem.getSample(1, .directSnd, .now, "hello") + let ci = ChatItem.getSample(1, .directSnd, previewDate, "hello") @State var composeStateEditing = ComposeState(editingItem: ci) @State var selectedRangeEditing = NSRange() @State var sendEnabled: Bool = true @@ -461,7 +461,7 @@ struct SendMessageView_Previews: PreviewProvider { sendMessage: { _ in }, onMediaAdded: { _ in }, keyboardVisible: Binding.constant(true), - keyboardHiddenDate: Binding.constant(Date.now) + keyboardHiddenDate: Binding.constant(previewDate) ) } VStack { @@ -473,7 +473,7 @@ struct SendMessageView_Previews: PreviewProvider { sendMessage: { _ in }, onMediaAdded: { _ in }, keyboardVisible: Binding.constant(true), - keyboardHiddenDate: Binding.constant(Date.now) + keyboardHiddenDate: Binding.constant(previewDate) ) } } diff --git a/apps/ios/Shared/Views/Chat/Group/ChannelMembersView.swift b/apps/ios/Shared/Views/Chat/Group/ChannelMembersView.swift index e4d788b47c..f7cadc6d6f 100644 --- a/apps/ios/Shared/Views/Chat/Group/ChannelMembersView.swift +++ b/apps/ios/Shared/Views/Chat/Group/ChannelMembersView.swift @@ -104,9 +104,11 @@ struct ChannelMembersView: View { } } -#Preview { - ChannelMembersView( - chat: Chat.sampleData, - groupInfo: GroupInfo.sampleData - ) +struct ChannelMembersView_Previews: PreviewProvider { + static var previews: some View { + ChannelMembersView( + chat: Chat.sampleData, + groupInfo: GroupInfo.sampleData + ) + } } diff --git a/apps/ios/Shared/Views/Chat/Group/ChannelRelaysView.swift b/apps/ios/Shared/Views/Chat/Group/ChannelRelaysView.swift index aa94f5b346..b22b2261d6 100644 --- a/apps/ios/Shared/Views/Chat/Group/ChannelRelaysView.swift +++ b/apps/ios/Shared/Views/Chat/Group/ChannelRelaysView.swift @@ -170,6 +170,8 @@ func hostFromRelayLink(_ link: String) -> String { return link } -#Preview { - ChannelRelaysView(chat: Chat.sampleData, groupInfo: GroupInfo.sampleData) +struct ChannelRelaysView_Previews: PreviewProvider { + static var previews: some View { + ChannelRelaysView(chat: Chat.sampleData, groupInfo: GroupInfo.sampleData) + } } diff --git a/apps/ios/Shared/Views/Chat/Group/MemberAdmissionView.swift b/apps/ios/Shared/Views/Chat/Group/MemberAdmissionView.swift index d80615b5d2..7213363471 100644 --- a/apps/ios/Shared/Views/Chat/Group/MemberAdmissionView.swift +++ b/apps/ios/Shared/Views/Chat/Group/MemberAdmissionView.swift @@ -82,12 +82,14 @@ struct MemberAdmissionView: View { } } -#Preview { - MemberAdmissionView( - groupInfo: Binding.constant(GroupInfo.sampleData), - admission: Binding.constant(GroupMemberAdmission.sampleData), - currentAdmission: GroupMemberAdmission.sampleData, - creatingGroup: false, - saveAdmission: {} - ) +struct MemberAdmissionView_Previews: PreviewProvider { + static var previews: some View { + MemberAdmissionView( + groupInfo: Binding.constant(GroupInfo.sampleData), + admission: Binding.constant(GroupMemberAdmission.sampleData), + currentAdmission: GroupMemberAdmission.sampleData, + creatingGroup: false, + saveAdmission: {} + ) + } } diff --git a/apps/ios/Shared/Views/Chat/Group/MemberSupportChatToolbar.swift b/apps/ios/Shared/Views/Chat/Group/MemberSupportChatToolbar.swift index 74cb702d21..63bc83eb1d 100644 --- a/apps/ios/Shared/Views/Chat/Group/MemberSupportChatToolbar.swift +++ b/apps/ios/Shared/Views/Chat/Group/MemberSupportChatToolbar.swift @@ -36,9 +36,11 @@ struct MemberSupportChatToolbar: View { } } -#Preview { - MemberSupportChatToolbar( - groupMember: GroupMember.sampleData - ) - .environmentObject(CurrentColors.toAppTheme()) +struct MemberSupportChatToolbar_Previews: PreviewProvider { + static var previews: some View { + MemberSupportChatToolbar( + groupMember: GroupMember.sampleData + ) + .environmentObject(CurrentColors.toAppTheme()) + } } diff --git a/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift b/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift index da9d56a699..721f9b08a3 100644 --- a/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift +++ b/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift @@ -291,9 +291,11 @@ func deleteMemberSupportChat(_ groupInfo: GroupInfo, _ member: GroupMember) { } } -#Preview { - MemberSupportView( - groupInfo: GroupInfo.sampleData, - scrollToItemId: Binding.constant(nil) - ) +struct MemberSupportView_Previews: PreviewProvider { + static var previews: some View { + MemberSupportView( + groupInfo: GroupInfo.sampleData, + scrollToItemId: Binding.constant(nil) + ) + } } diff --git a/apps/ios/Shared/Views/Chat/Group/SecondaryChatView.swift b/apps/ios/Shared/Views/Chat/Group/SecondaryChatView.swift index e2092f7a24..7fade11db0 100644 --- a/apps/ios/Shared/Views/Chat/Group/SecondaryChatView.swift +++ b/apps/ios/Shared/Views/Chat/Group/SecondaryChatView.swift @@ -32,13 +32,18 @@ struct SecondaryChatView: View { } } -#Preview { - SecondaryChatView( - chat: Chat( - chatInfo: .group(groupInfo: GroupInfo.sampleData, groupChatScope: .memberSupport(groupMember_: GroupMember.sampleData)), - chatItems: [], - chatStats: ChatStats() - ), - scrollToItemId: Binding.constant(nil) - ) +struct SecondaryChatView_Previews: PreviewProvider { + static var previews: some View { + let chatModel = ChatModel() + chatModel.secondaryIM = ItemsModel(secondaryIMFilter: .groupChatScopeContext(groupScopeInfo: .memberSupport(groupMember_: GroupMember.sampleData))) + return SecondaryChatView( + chat: Chat( + chatInfo: .group(groupInfo: GroupInfo.sampleData, groupChatScope: .memberSupport(groupMember_: GroupMember.sampleData)), + chatItems: [], + chatStats: ChatStats() + ), + scrollToItemId: Binding.constant(nil) + ) + .environmentObject(chatModel) + } } diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift index 0ed78401b0..fb46fd83ed 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift @@ -781,17 +781,19 @@ func showErrorAlert(_ error: Error, _ title: String) { struct ChatListNavLink_Previews: PreviewProvider { static var previews: some View { @State var chatId: String? = "@1" + var contactRequest = UserContactRequest.sampleData + contactRequest.updatedAt = previewDate return Group { ChatListNavLink(chat: Chat( chatInfo: ChatInfo.sampleData.direct, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello")] + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello")] ), parentSheet: .constant(nil)) ChatListNavLink(chat: Chat( chatInfo: ChatInfo.sampleData.direct, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello")] + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello")] ), parentSheet: .constant(nil)) ChatListNavLink(chat: Chat( - chatInfo: ChatInfo.sampleData.contactRequest, + chatInfo: .contactRequest(contactRequest: contactRequest), chatItems: [] ), parentSheet: .constant(nil)) } diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index 5c5021b79f..9d5f9bb5d2 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -1259,17 +1259,19 @@ struct ChatListView_Previews: PreviewProvider { static var previews: some View { let chatModel = ChatModel() + var contactRequest = UserContactRequest.sampleData + contactRequest.updatedAt = previewDate chatModel.updateChats([ ChatData( chatInfo: ChatInfo.sampleData.direct, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello")] + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello")] ), ChatData( chatInfo: ChatInfo.sampleData.group, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")] + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")] ), ChatData( - chatInfo: ChatInfo.sampleData.contactRequest, + chatInfo: .contactRequest(contactRequest: contactRequest), chatItems: [] ) diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift index 7f50f09a31..70cacf5bc3 100644 --- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift @@ -573,25 +573,25 @@ struct ChatPreviewView_Previews: PreviewProvider { ), progressByTimeout: Binding.constant(false)) ChatPreviewView(chat: Chat( chatInfo: ChatInfo.sampleData.direct, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete))] + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete))] ), progressByTimeout: Binding.constant(false)) ChatPreviewView(chat: Chat( chatInfo: ChatInfo.sampleData.direct, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete))], + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete))], chatStats: ChatStats(unreadCount: 11, minUnreadItemId: 0) ), progressByTimeout: Binding.constant(false)) ChatPreviewView(chat: Chat( chatInfo: ChatInfo.sampleData.direct, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: .now))] + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete), itemDeleted: .deleted(deletedTs: previewDate))] ), progressByTimeout: Binding.constant(false)) ChatPreviewView(chat: Chat( chatInfo: ChatInfo.sampleData.direct, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent(sndProgress: .complete))], + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "hello", .sndSent(sndProgress: .complete))], chatStats: ChatStats(unreadCount: 3, minUnreadItemId: 0) ), progressByTimeout: Binding.constant(false)) ChatPreviewView(chat: Chat( chatInfo: ChatInfo.sampleData.group, - chatItems: [ChatItem.getSample(1, .directSnd, .now, "Lorem ipsum dolor sit amet, d. consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")], + chatItems: [ChatItem.getSample(1, .directSnd, previewDate, "Lorem ipsum dolor sit amet, d. consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")], chatStats: ChatStats(unreadCount: 11, minUnreadItemId: 0) ), progressByTimeout: Binding.constant(false)) } diff --git a/apps/ios/Shared/Views/ChatList/ContactConnectionView.swift b/apps/ios/Shared/Views/ChatList/ContactConnectionView.swift index f5156d86b8..06ccde1361 100644 --- a/apps/ios/Shared/Views/ChatList/ContactConnectionView.swift +++ b/apps/ios/Shared/Views/ChatList/ContactConnectionView.swift @@ -76,7 +76,9 @@ struct ContactConnectionView: View { struct ContactConnectionView_Previews: PreviewProvider { static var previews: some View { - ContactConnectionView(chat: Chat(chatInfo: ChatInfo.sampleData.contactConnection)) + var contactConnection = PendingContactConnection.getSampleData() + contactConnection.updatedAt = previewDate + return ContactConnectionView(chat: Chat(chatInfo: .contactConnection(contactConnection: contactConnection))) .previewLayout(.fixed(width: 360, height: 80)) } } diff --git a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift index 341bc10655..5a27271b16 100644 --- a/apps/ios/Shared/Views/ChatList/ContactRequestView.swift +++ b/apps/ios/Shared/Views/ChatList/ContactRequestView.swift @@ -55,7 +55,9 @@ struct ContactRequestView: View { struct ContactRequestView_Previews: PreviewProvider { static var previews: some View { - ContactRequestView(contactRequest: UserContactRequest.sampleData, chat: Chat(chatInfo: ChatInfo.sampleData.contactRequest , chatItems: [])) + var contactRequest = UserContactRequest.sampleData + contactRequest.updatedAt = previewDate + return ContactRequestView(contactRequest: contactRequest, chat: Chat(chatInfo: ChatInfo.sampleData.contactRequest , chatItems: [])) .previewLayout(.fixed(width: 360, height: 80)) } } diff --git a/apps/ios/Shared/Views/ChatList/GetStakeBanner.swift b/apps/ios/Shared/Views/ChatList/GetStakeBanner.swift index 0ee07ea828..99e8c90cc9 100644 --- a/apps/ios/Shared/Views/ChatList/GetStakeBanner.swift +++ b/apps/ios/Shared/Views/ChatList/GetStakeBanner.swift @@ -105,7 +105,9 @@ struct BannerDismissButton: View { } } -#Preview { - GetStakeBanner(showDismiss: true, onTap: {}, onDismiss: {}) - .padding() +struct GetStakeBanner_Previews: PreviewProvider { + static var previews: some View { + GetStakeBanner(showDismiss: true, onTap: {}, onDismiss: {}) + .padding() + } } diff --git a/apps/ios/Shared/Views/ChatList/OneHandUICard.swift b/apps/ios/Shared/Views/ChatList/OneHandUICard.swift index 132a19d7e7..4e1b367c96 100644 --- a/apps/ios/Shared/Views/ChatList/OneHandUICard.swift +++ b/apps/ios/Shared/Views/ChatList/OneHandUICard.swift @@ -81,6 +81,8 @@ struct OneHandUICard: View { } } -#Preview { - OneHandUICard() +struct OneHandUICard_Previews: PreviewProvider { + static var previews: some View { + OneHandUICard() + } } diff --git a/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift b/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift index ee7605dbd2..6842a33cb0 100644 --- a/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift +++ b/apps/ios/Shared/Views/ChatList/ServersSummaryView.swift @@ -737,6 +737,8 @@ struct DetailedXFTPStatsView: View { } } -#Preview { - ServersSummaryView() +struct ServersSummaryView_Previews: PreviewProvider { + static var previews: some View { + ServersSummaryView() + } } diff --git a/apps/ios/Shared/Views/NewChat/AddChannelView.swift b/apps/ios/Shared/Views/NewChat/AddChannelView.swift index fa953b2ec1..bd8c93b146 100644 --- a/apps/ios/Shared/Views/NewChat/AddChannelView.swift +++ b/apps/ios/Shared/Views/NewChat/AddChannelView.swift @@ -531,6 +531,8 @@ struct RelayProgressIndicator: View { } } -#Preview { - AddChannelView() +struct AddChannelView_Previews: PreviewProvider { + static var previews: some View { + AddChannelView() + } } diff --git a/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift b/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift index 416dc32308..60aca9be1f 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatMenuButton.swift @@ -497,6 +497,8 @@ struct DeletedChats: View { } } -#Preview { - NewChatMenuButton(showNewChatSheet: Binding.constant(false)) +struct NewChatMenuButton_Previews: PreviewProvider { + static var previews: some View { + NewChatMenuButton(showNewChatSheet: Binding.constant(false)) + } } diff --git a/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift b/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift index 2c21682dba..3c4c12ae2b 100644 --- a/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift +++ b/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift @@ -398,6 +398,8 @@ struct ChooseServerOperatorsInfoView: View { } } -#Preview { - OnboardingConditionsView(selectedOperatorIds: []) +struct OnboardingConditionsView_Previews: PreviewProvider { + static var previews: some View { + OnboardingConditionsView(selectedOperatorIds: []) + } } diff --git a/apps/ios/Shared/Views/RemoteAccess/ConnectDesktopView.swift b/apps/ios/Shared/Views/RemoteAccess/ConnectDesktopView.swift index 24ae5cffca..e7393ecc1c 100644 --- a/apps/ios/Shared/Views/RemoteAccess/ConnectDesktopView.swift +++ b/apps/ios/Shared/Views/RemoteAccess/ConnectDesktopView.swift @@ -539,6 +539,8 @@ struct ConnectDesktopView: View { } } -#Preview { - ConnectDesktopView() +struct ConnectDesktopView_Previews: PreviewProvider { + static var previews: some View { + ConnectDesktopView() + } } diff --git a/apps/ios/Shared/Views/TerminalView.swift b/apps/ios/Shared/Views/TerminalView.swift index ac143fe044..32209e97fa 100644 --- a/apps/ios/Shared/Views/TerminalView.swift +++ b/apps/ios/Shared/Views/TerminalView.swift @@ -194,8 +194,8 @@ struct TerminalView_Previews: PreviewProvider { static var previews: some View { let chatModel = ChatModel() chatModel.terminalItems = [ - .err(.now, APIResult.invalid(type: "contactSubscribed", json: "{}".data(using: .utf8)!).unexpected), - .err(.now, APIResult.invalid(type: "newChatItems", json: "{}".data(using: .utf8)!).unexpected) + .err(previewDate, APIResult.invalid(type: "contactSubscribed", json: "{}".data(using: .utf8)!).unexpected), + .err(previewDate + 1, APIResult.invalid(type: "newChatItems", json: "{}".data(using: .utf8)!).unexpected) ] return NavigationView { TerminalView() diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift index 8095c0297e..c181a19a60 100644 --- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift +++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift @@ -514,5 +514,6 @@ func updateOperatorsConditionsAcceptance(_ usvs: Binding<[UserOperatorServers]>, struct NetworkServersView_Previews: PreviewProvider { static var previews: some View { NetworkAndServers() + .environmentObject(SaveableSettings()) } } diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NewServerView.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NewServerView.swift index 0a3c82b4dd..8d43159f8c 100644 --- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NewServerView.swift +++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NewServerView.swift @@ -151,10 +151,12 @@ func addServer( } } -#Preview { - NewServerView( - userServers: Binding.constant([UserOperatorServers.sampleDataNilOperator]), - serverErrors: Binding.constant([]), - serverWarnings: Binding.constant([]) - ) +struct NewServerView_Previews: PreviewProvider { + static var previews: some View { + NewServerView( + userServers: Binding.constant([UserOperatorServers.sampleDataNilOperator]), + serverErrors: Binding.constant([]), + serverWarnings: Binding.constant([]) + ) + } } diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift index 4e2f1992d6..55ccc81850 100644 --- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift +++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/OperatorView.swift @@ -623,13 +623,15 @@ func conditionsLinkButton() -> some View { } } -#Preview { - OperatorView( - currUserServers: Binding.constant([UserOperatorServers.sampleData1, UserOperatorServers.sampleDataNilOperator]), - userServers: Binding.constant([UserOperatorServers.sampleData1, UserOperatorServers.sampleDataNilOperator]), - serverErrors: Binding.constant([]), - serverWarnings: Binding.constant([]), - operatorIndex: 1, - useOperator: ServerOperator.sampleData1.enabled - ) +struct OperatorView_Previews: PreviewProvider { + static var previews: some View { + OperatorView( + currUserServers: Binding.constant([UserOperatorServers.sampleData1, UserOperatorServers.sampleDataNilOperator]), + userServers: Binding.constant([UserOperatorServers.sampleData1, UserOperatorServers.sampleDataNilOperator]), + serverErrors: Binding.constant([]), + serverWarnings: Binding.constant([]), + operatorIndex: 1, + useOperator: ServerOperator.sampleData1.enabled + ) + } } diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/ProtocolServersView.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/ProtocolServersView.swift index a92491edef..0e03aa4cd7 100644 --- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/ProtocolServersView.swift +++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/ProtocolServersView.swift @@ -451,7 +451,7 @@ struct YourServersView_Previews: PreviewProvider { userServers: Binding.constant([UserOperatorServers.sampleDataNilOperator]), serverErrors: Binding.constant([]), serverWarnings: Binding.constant([]), - operatorIndex: 1 + operatorIndex: 0 ) } } diff --git a/apps/ios/SimpleX Snapshots/References/ActiveCallOverlay-dark-large.png b/apps/ios/SimpleX Snapshots/References/ActiveCallOverlay-dark-large.png new file mode 100644 index 0000000000..778bdb3066 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ActiveCallOverlay-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ActiveCallOverlay-light-large.png b/apps/ios/SimpleX Snapshots/References/ActiveCallOverlay-light-large.png new file mode 100644 index 0000000000..255acf2ec1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ActiveCallOverlay-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddChannelView-dark-large.png b/apps/ios/SimpleX Snapshots/References/AddChannelView-dark-large.png new file mode 100644 index 0000000000..32e8bca138 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddChannelView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddChannelView-light-large.png b/apps/ios/SimpleX Snapshots/References/AddChannelView-light-large.png new file mode 100644 index 0000000000..a5fcf3b255 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddChannelView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddContactLearnMore-dark-large.png b/apps/ios/SimpleX Snapshots/References/AddContactLearnMore-dark-large.png new file mode 100644 index 0000000000..877f795ab4 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddContactLearnMore-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddContactLearnMore-light-large.png b/apps/ios/SimpleX Snapshots/References/AddContactLearnMore-light-large.png new file mode 100644 index 0000000000..7207d98edb Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddContactLearnMore-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddGroupMembersView-dark-large.png b/apps/ios/SimpleX Snapshots/References/AddGroupMembersView-dark-large.png new file mode 100644 index 0000000000..661836f487 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddGroupMembersView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddGroupMembersView-light-large.png b/apps/ios/SimpleX Snapshots/References/AddGroupMembersView-light-large.png new file mode 100644 index 0000000000..2b6a59954d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddGroupMembersView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddGroupView-dark-large.png b/apps/ios/SimpleX Snapshots/References/AddGroupView-dark-large.png new file mode 100644 index 0000000000..8521d3f799 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddGroupView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AddGroupView-light-large.png b/apps/ios/SimpleX Snapshots/References/AddGroupView-light-large.png new file mode 100644 index 0000000000..90411da71d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AddGroupView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AdvancedNetworkSettings-dark-large.png b/apps/ios/SimpleX Snapshots/References/AdvancedNetworkSettings-dark-large.png new file mode 100644 index 0000000000..34f0cbfc5d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AdvancedNetworkSettings-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/AdvancedNetworkSettings-light-large.png b/apps/ios/SimpleX Snapshots/References/AdvancedNetworkSettings-light-large.png new file mode 100644 index 0000000000..2e69202157 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/AdvancedNetworkSettings-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/BadgesHowItWorksView-dark-large.png b/apps/ios/SimpleX Snapshots/References/BadgesHowItWorksView-dark-large.png new file mode 100644 index 0000000000..75e1af244f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/BadgesHowItWorksView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/BadgesHowItWorksView-light-large.png b/apps/ios/SimpleX Snapshots/References/BadgesHowItWorksView-light-large.png new file mode 100644 index 0000000000..5d968d9965 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/BadgesHowItWorksView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/BadgesRedeemCodeView-dark-large.png b/apps/ios/SimpleX Snapshots/References/BadgesRedeemCodeView-dark-large.png new file mode 100644 index 0000000000..bfa02ffc5c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/BadgesRedeemCodeView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/BadgesRedeemCodeView-light-large.png b/apps/ios/SimpleX Snapshots/References/BadgesRedeemCodeView-light-large.png new file mode 100644 index 0000000000..2b57644e18 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/BadgesRedeemCodeView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/BadgesSupportSimplexView-dark-large.png b/apps/ios/SimpleX Snapshots/References/BadgesSupportSimplexView-dark-large.png new file mode 100644 index 0000000000..318a7f1948 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/BadgesSupportSimplexView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/BadgesSupportSimplexView-light-large.png b/apps/ios/SimpleX Snapshots/References/BadgesSupportSimplexView-light-large.png new file mode 100644 index 0000000000..0d5b2f03de Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/BadgesSupportSimplexView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-accessibility-medium.png new file mode 100644 index 0000000000..d9fb1383d1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..a5e3812580 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-large.png new file mode 100644 index 0000000000..7f4900418b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-accessibility-medium.png new file mode 100644 index 0000000000..ca4dfc1bcd Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..e11b521914 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-large.png new file mode 100644 index 0000000000..8e3c7c68ab Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIChatFeatureView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIEventView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIEventView-dark-accessibility-medium.png new file mode 100644 index 0000000000..e4499188eb Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIEventView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIEventView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIEventView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..a10f2d80c6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIEventView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIEventView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIEventView-dark-large.png new file mode 100644 index 0000000000..fe08b45c09 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIEventView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIEventView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIEventView-light-accessibility-medium.png new file mode 100644 index 0000000000..6050f1ae6f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIEventView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIEventView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIEventView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..3661cc5461 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIEventView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIEventView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIEventView-light-large.png new file mode 100644 index 0000000000..e6be61457f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIEventView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-accessibility-medium.png new file mode 100644 index 0000000000..3daf567f32 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..714ae95c41 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-large.png new file mode 100644 index 0000000000..f70f8f446f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-accessibility-medium.png new file mode 100644 index 0000000000..c7e3d27686 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..32da139571 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-large.png new file mode 100644 index 0000000000..f8a6f8845f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFeaturePreferenceView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFileView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIFileView-dark-accessibility-medium.png new file mode 100644 index 0000000000..78d69983b7 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFileView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFileView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIFileView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..476bdd63e9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFileView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFileView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIFileView-dark-large.png new file mode 100644 index 0000000000..bf89bc25ce Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFileView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFileView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIFileView-light-accessibility-medium.png new file mode 100644 index 0000000000..5c5335c7d0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFileView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFileView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIFileView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..c368ae5bdf Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFileView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIFileView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIFileView-light-large.png new file mode 100644 index 0000000000..401a531b8f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIFileView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-accessibility-medium.png new file mode 100644 index 0000000000..24b86248b4 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..f2b414114d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-large.png new file mode 100644 index 0000000000..386df27744 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-accessibility-medium.png new file mode 100644 index 0000000000..c680d7c9bb Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..12e44fca22 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-large.png new file mode 100644 index 0000000000..596dc0851d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIGroupInvitationView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-accessibility-medium.png new file mode 100644 index 0000000000..620f898b6a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..32bd55d1c9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-large.png new file mode 100644 index 0000000000..a7b6c3d459 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-accessibility-medium.png new file mode 100644 index 0000000000..aeab893fe8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..ac748c6030 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-large.png new file mode 100644 index 0000000000..d534a1f01e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIInvalidJSONView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-accessibility-medium.png new file mode 100644 index 0000000000..0f5b1a2a79 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..2b1db9f6b9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-large.png new file mode 100644 index 0000000000..df760ef53f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-accessibility-medium.png new file mode 100644 index 0000000000..9e68d6b793 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..5535eeb14f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-large.png new file mode 100644 index 0000000000..8ad33d09f8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMemberCreatedContactView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-accessibility-medium.png new file mode 100644 index 0000000000..b8fe68610f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..3c960c0f1f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-large.png new file mode 100644 index 0000000000..cde5662fb9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMetaView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMetaView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIMetaView-light-accessibility-medium.png new file mode 100644 index 0000000000..26256b545e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMetaView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMetaView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIMetaView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..48989ed1a9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMetaView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIMetaView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIMetaView-light-large.png new file mode 100644 index 0000000000..42e73b96e6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIMetaView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-accessibility-medium.png new file mode 100644 index 0000000000..66dd209021 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..68201d8915 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-large.png b/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-large.png new file mode 100644 index 0000000000..3ff41e7f60 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIVoiceView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-accessibility-medium.png new file mode 100644 index 0000000000..6a1c2663c0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..af885bd093 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-large.png b/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-large.png new file mode 100644 index 0000000000..304e439753 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CIVoiceView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CallSettings-dark-large.png b/apps/ios/SimpleX Snapshots/References/CallSettings-dark-large.png new file mode 100644 index 0000000000..328356fe9b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CallSettings-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CallSettings-light-large.png b/apps/ios/SimpleX Snapshots/References/CallSettings-light-large.png new file mode 100644 index 0000000000..96d17b1708 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CallSettings-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChannelMembersView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChannelMembersView-dark-large.png new file mode 100644 index 0000000000..817170c0cd Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChannelMembersView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChannelMembersView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChannelMembersView-light-large.png new file mode 100644 index 0000000000..be82d30201 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChannelMembersView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChannelRelaysView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChannelRelaysView-dark-large.png new file mode 100644 index 0000000000..f0576022e4 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChannelRelaysView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChannelRelaysView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChannelRelaysView-light-large.png new file mode 100644 index 0000000000..084773f215 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChannelRelaysView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatHelp-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatHelp-dark-large.png new file mode 100644 index 0000000000..afa166cb0e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatHelp-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatHelp-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatHelp-light-large.png new file mode 100644 index 0000000000..22ae1dd89e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatHelp-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/ChatInfoImage-dark-accessibility-medium.png deleted file mode 100644 index e742c5dea6..0000000000 Binary files a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-dark-accessibility-medium.png and /dev/null differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/ChatInfoImage-dark-extra-extra-extra-large.png deleted file mode 100644 index b856951159..0000000000 Binary files a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-dark-extra-extra-extra-large.png and /dev/null differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/ChatInfoImage-light-accessibility-medium.png deleted file mode 100644 index ec16ffc3bf..0000000000 Binary files a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-light-accessibility-medium.png and /dev/null differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/ChatInfoImage-light-extra-extra-extra-large.png deleted file mode 100644 index b502b6aaf1..0000000000 Binary files a/apps/ios/SimpleX Snapshots/References/ChatInfoImage-light-extra-extra-extra-large.png and /dev/null differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoToolbar-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatInfoToolbar-dark-large.png new file mode 100644 index 0000000000..77e1183765 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatInfoToolbar-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoToolbar-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatInfoToolbar-light-large.png new file mode 100644 index 0000000000..2d3cf9f4fa Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatInfoToolbar-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatInfoView-dark-large.png new file mode 100644 index 0000000000..75e03c1667 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatInfoView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatInfoView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatInfoView-light-large.png new file mode 100644 index 0000000000..0c99a9a7de Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatInfoView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemForwardingView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemForwardingView-dark-large.png new file mode 100644 index 0000000000..f0bb34b36d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemForwardingView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemForwardingView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemForwardingView-light-large.png new file mode 100644 index 0000000000..17000f109a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemForwardingView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemInfoView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemInfoView-dark-large.png new file mode 100644 index 0000000000..7d428a7d85 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemInfoView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemInfoView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemInfoView-light-large.png new file mode 100644 index 0000000000..a8f303d453 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemInfoView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-accessibility-medium.png new file mode 100644 index 0000000000..24eb7b9745 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..edd09d09c4 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-large.png new file mode 100644 index 0000000000..21385245f6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/ChatItemView-light-accessibility-medium.png new file mode 100644 index 0000000000..0b6f2a18d3 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..476e487884 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView-light-large.png new file mode 100644 index 0000000000..6ac5fb4960 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-accessibility-medium.png new file mode 100644 index 0000000000..0c26eae61d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..8a1dd80a1d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-large.png new file mode 100644 index 0000000000..053394982d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-accessibility-medium.png new file mode 100644 index 0000000000..0ca87e33ee Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..fab866286e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-large.png new file mode 100644 index 0000000000..faaca96eb7 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatItemView_NonMsgContentDeleted-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatListNavLink-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatListNavLink-dark-large.png new file mode 100644 index 0000000000..2c8b4bc2a9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatListNavLink-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatListNavLink-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatListNavLink-light-large.png new file mode 100644 index 0000000000..72da7abf90 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatListNavLink-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatListView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatListView-dark-large.png new file mode 100644 index 0000000000..c9dbc580a7 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatListView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatListView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatListView-light-large.png new file mode 100644 index 0000000000..0cb3569a83 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatListView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ChatView-dark-large.png new file mode 100644 index 0000000000..f7b558eeb8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ChatView-light-large.png b/apps/ios/SimpleX Snapshots/References/ChatView-light-large.png new file mode 100644 index 0000000000..1e3335d4aa Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ChatView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ComposeVoiceView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ComposeVoiceView-dark-large.png new file mode 100644 index 0000000000..7329687703 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ComposeVoiceView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ComposeVoiceView-light-large.png b/apps/ios/SimpleX Snapshots/References/ComposeVoiceView-light-large.png new file mode 100644 index 0000000000..ce05cb0884 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ComposeVoiceView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ConnectDesktopView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ConnectDesktopView-dark-large.png new file mode 100644 index 0000000000..9a5bc82a85 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ConnectDesktopView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ConnectDesktopView-light-large.png b/apps/ios/SimpleX Snapshots/References/ConnectDesktopView-light-large.png new file mode 100644 index 0000000000..137e9e0382 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ConnectDesktopView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactConnectionInfo-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContactConnectionInfo-dark-large.png new file mode 100644 index 0000000000..9673f00f39 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactConnectionInfo-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactConnectionInfo-light-large.png b/apps/ios/SimpleX Snapshots/References/ContactConnectionInfo-light-large.png new file mode 100644 index 0000000000..ffb58b4d3f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactConnectionInfo-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactConnectionView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContactConnectionView-dark-large.png new file mode 100644 index 0000000000..2d2a36c883 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactConnectionView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactConnectionView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContactConnectionView-light-large.png new file mode 100644 index 0000000000..a9a4cc52c8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactConnectionView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactPreferencesView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContactPreferencesView-dark-large.png new file mode 100644 index 0000000000..b06c2d60a4 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactPreferencesView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactPreferencesView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContactPreferencesView-light-large.png new file mode 100644 index 0000000000..c3527f213b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactPreferencesView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactRequestView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContactRequestView-dark-large.png new file mode 100644 index 0000000000..c51d86a15f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactRequestView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContactRequestView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContactRequestView-light-large.png new file mode 100644 index 0000000000..644996da7a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContactRequestView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextContactRequestActionsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContextContactRequestActionsView-dark-large.png new file mode 100644 index 0000000000..702ef8b5d1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextContactRequestActionsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextContactRequestActionsView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContextContactRequestActionsView-light-large.png new file mode 100644 index 0000000000..8ec3c4a1ab Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextContactRequestActionsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextItemView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContextItemView-dark-large.png new file mode 100644 index 0000000000..954b07ecc8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextItemView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextItemView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContextItemView-light-large.png new file mode 100644 index 0000000000..12242e476d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextItemView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextMemberContactActionsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContextMemberContactActionsView-dark-large.png new file mode 100644 index 0000000000..702ef8b5d1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextMemberContactActionsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextMemberContactActionsView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContextMemberContactActionsView-light-large.png new file mode 100644 index 0000000000..8ec3c4a1ab Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextMemberContactActionsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextPendingMemberActionsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContextPendingMemberActionsView-dark-large.png new file mode 100644 index 0000000000..a0abb6e5b7 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextPendingMemberActionsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextPendingMemberActionsView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContextPendingMemberActionsView-light-large.png new file mode 100644 index 0000000000..143c068397 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextPendingMemberActionsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextProfilePickerView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ContextProfilePickerView-dark-large.png new file mode 100644 index 0000000000..b173f26b5c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextProfilePickerView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ContextProfilePickerView-light-large.png b/apps/ios/SimpleX Snapshots/References/ContextProfilePickerView-light-large.png new file mode 100644 index 0000000000..f6eefde14a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ContextProfilePickerView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CreateProfile-dark-large.png b/apps/ios/SimpleX Snapshots/References/CreateProfile-dark-large.png new file mode 100644 index 0000000000..f89c607f22 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CreateProfile-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CreateProfile-light-large.png b/apps/ios/SimpleX Snapshots/References/CreateProfile-light-large.png new file mode 100644 index 0000000000..bc1d4e96d8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CreateProfile-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CreateSimpleXAddress-dark-large.png b/apps/ios/SimpleX Snapshots/References/CreateSimpleXAddress-dark-large.png new file mode 100644 index 0000000000..89ad7b45f5 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CreateSimpleXAddress-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CreateSimpleXAddress-light-large.png b/apps/ios/SimpleX Snapshots/References/CreateSimpleXAddress-light-large.png new file mode 100644 index 0000000000..fac7009208 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CreateSimpleXAddress-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CustomTimePicker-dark-large.png b/apps/ios/SimpleX Snapshots/References/CustomTimePicker-dark-large.png new file mode 100644 index 0000000000..ca2a52d6bc Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CustomTimePicker-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/CustomTimePicker-light-large.png b/apps/ios/SimpleX Snapshots/References/CustomTimePicker-light-large.png new file mode 100644 index 0000000000..7755853789 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/CustomTimePicker-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DatabaseEncryptionView-dark-large.png b/apps/ios/SimpleX Snapshots/References/DatabaseEncryptionView-dark-large.png new file mode 100644 index 0000000000..c397d6f491 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DatabaseEncryptionView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DatabaseEncryptionView-light-large.png b/apps/ios/SimpleX Snapshots/References/DatabaseEncryptionView-light-large.png new file mode 100644 index 0000000000..e80b7d9c5c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DatabaseEncryptionView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DatabaseErrorView-dark-large.png b/apps/ios/SimpleX Snapshots/References/DatabaseErrorView-dark-large.png new file mode 100644 index 0000000000..83de2538fe Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DatabaseErrorView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DatabaseErrorView-light-large.png b/apps/ios/SimpleX Snapshots/References/DatabaseErrorView-light-large.png new file mode 100644 index 0000000000..e6edba4901 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DatabaseErrorView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DatabaseView-dark-large.png b/apps/ios/SimpleX Snapshots/References/DatabaseView-dark-large.png new file mode 100644 index 0000000000..28b0233fef Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DatabaseView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DatabaseView-light-large.png b/apps/ios/SimpleX Snapshots/References/DatabaseView-light-large.png new file mode 100644 index 0000000000..2aaf63aac3 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DatabaseView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-accessibility-medium.png new file mode 100644 index 0000000000..a2c693deae Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..28619987b3 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-large.png b/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-large.png new file mode 100644 index 0000000000..627f92de65 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeletedItemView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-accessibility-medium.png new file mode 100644 index 0000000000..1ace029570 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..eafa9ebd45 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-large.png b/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-large.png new file mode 100644 index 0000000000..79434d6957 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeletedItemView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DetermineWidth-dark-large.png b/apps/ios/SimpleX Snapshots/References/DetermineWidth-dark-large.png new file mode 100644 index 0000000000..8197ce6773 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DetermineWidth-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DetermineWidth-light-large.png b/apps/ios/SimpleX Snapshots/References/DetermineWidth-light-large.png new file mode 100644 index 0000000000..b9ff281660 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DetermineWidth-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeveloperView-dark-large.png b/apps/ios/SimpleX Snapshots/References/DeveloperView-dark-large.png new file mode 100644 index 0000000000..a9729487fa Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeveloperView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/DeveloperView-light-large.png b/apps/ios/SimpleX Snapshots/References/DeveloperView-light-large.png new file mode 100644 index 0000000000..40b79ca7ac Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/DeveloperView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-accessibility-medium.png new file mode 100644 index 0000000000..a798a154b6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..3a225d8f69 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-large.png b/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-large.png new file mode 100644 index 0000000000..4028d8dddd Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/EmojiItemView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-accessibility-medium.png new file mode 100644 index 0000000000..8426904a54 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..e9dd155f73 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-large.png b/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-large.png new file mode 100644 index 0000000000..a5a123aa8c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/EmojiItemView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-accessibility-medium.png new file mode 100644 index 0000000000..fe3367452a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..c93698ca4d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-large.png b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-large.png new file mode 100644 index 0000000000..0b4a0335a6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-accessibility-medium.png new file mode 100644 index 0000000000..ba111aa54c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..43bf7625b9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-large.png b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-large.png new file mode 100644 index 0000000000..54ee1da7f4 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedCIVoiceView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-accessibility-medium.png new file mode 100644 index 0000000000..c673e73852 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..b206855b67 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-large.png new file mode 100644 index 0000000000..49caa88a01 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedItemView-light-accessibility-medium.png new file mode 100644 index 0000000000..94eec8a773 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..ad054b9c3a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView-light-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView-light-large.png new file mode 100644 index 0000000000..e14bcfce52 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-accessibility-medium.png new file mode 100644 index 0000000000..cc8e6c4732 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..c9271abe03 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-large.png new file mode 100644 index 0000000000..d8165e594e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-accessibility-medium.png new file mode 100644 index 0000000000..c24d15b228 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..887a37e635 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-large.png new file mode 100644 index 0000000000..0c94315030 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Deleted-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-accessibility-medium.png new file mode 100644 index 0000000000..4797f73cea Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..e8fb68712b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-large.png new file mode 100644 index 0000000000..629c0af062 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-accessibility-medium.png new file mode 100644 index 0000000000..e2c67c6190 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..db550c6e8f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-large.png b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-large.png new file mode 100644 index 0000000000..d64be9d428 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/FramedItemView_Edited-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GetStakeBanner-dark-large.png b/apps/ios/SimpleX Snapshots/References/GetStakeBanner-dark-large.png new file mode 100644 index 0000000000..4c1f38f193 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GetStakeBanner-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GetStakeBanner-light-large.png b/apps/ios/SimpleX Snapshots/References/GetStakeBanner-light-large.png new file mode 100644 index 0000000000..7cfa8dcc36 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GetStakeBanner-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupChatInfoView-dark-large.png b/apps/ios/SimpleX Snapshots/References/GroupChatInfoView-dark-large.png new file mode 100644 index 0000000000..f0e88b071c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupChatInfoView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupChatInfoView-light-large.png b/apps/ios/SimpleX Snapshots/References/GroupChatInfoView-light-large.png new file mode 100644 index 0000000000..cfb832ff82 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupChatInfoView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupLinkView-dark-large.png b/apps/ios/SimpleX Snapshots/References/GroupLinkView-dark-large.png new file mode 100644 index 0000000000..cf46fb2341 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupLinkView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupLinkView-light-large.png b/apps/ios/SimpleX Snapshots/References/GroupLinkView-light-large.png new file mode 100644 index 0000000000..05f6fbfe2d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupLinkView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupMemberInfoView-dark-large.png b/apps/ios/SimpleX Snapshots/References/GroupMemberInfoView-dark-large.png new file mode 100644 index 0000000000..9c3b36a82c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupMemberInfoView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupMemberInfoView-light-large.png b/apps/ios/SimpleX Snapshots/References/GroupMemberInfoView-light-large.png new file mode 100644 index 0000000000..e536f543b6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupMemberInfoView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupPreferencesView-dark-large.png b/apps/ios/SimpleX Snapshots/References/GroupPreferencesView-dark-large.png new file mode 100644 index 0000000000..cd639e3967 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupPreferencesView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupPreferencesView-light-large.png b/apps/ios/SimpleX Snapshots/References/GroupPreferencesView-light-large.png new file mode 100644 index 0000000000..ba55b116af Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupPreferencesView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupProfileView-dark-large.png b/apps/ios/SimpleX Snapshots/References/GroupProfileView-dark-large.png new file mode 100644 index 0000000000..f8174698a5 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupProfileView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupProfileView-light-large.png b/apps/ios/SimpleX Snapshots/References/GroupProfileView-light-large.png new file mode 100644 index 0000000000..34d7120b64 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupProfileView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupWelcomeView-dark-large.png b/apps/ios/SimpleX Snapshots/References/GroupWelcomeView-dark-large.png new file mode 100644 index 0000000000..f8174698a5 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupWelcomeView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/GroupWelcomeView-light-large.png b/apps/ios/SimpleX Snapshots/References/GroupWelcomeView-light-large.png new file mode 100644 index 0000000000..34d7120b64 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/GroupWelcomeView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IncognitoHelp-dark-large.png b/apps/ios/SimpleX Snapshots/References/IncognitoHelp-dark-large.png new file mode 100644 index 0000000000..af8f806674 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IncognitoHelp-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IncognitoHelp-light-large.png b/apps/ios/SimpleX Snapshots/References/IncognitoHelp-light-large.png new file mode 100644 index 0000000000..e87a164e16 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IncognitoHelp-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IncomingCallView-dark-large.png b/apps/ios/SimpleX Snapshots/References/IncomingCallView-dark-large.png new file mode 100644 index 0000000000..18fa9ef303 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IncomingCallView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IncomingCallView-light-large.png b/apps/ios/SimpleX Snapshots/References/IncomingCallView-light-large.png new file mode 100644 index 0000000000..d1ba30287f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IncomingCallView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-accessibility-medium.png new file mode 100644 index 0000000000..3e66bca4c1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..04b0c7a42b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-large.png b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-large.png new file mode 100644 index 0000000000..293e2e4f41 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-accessibility-medium.png new file mode 100644 index 0000000000..634eeef016 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..bbb4f83d00 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-large.png b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-large.png new file mode 100644 index 0000000000..ea9e249767 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/IntegrityErrorItemView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-accessibility-medium.png new file mode 100644 index 0000000000..b1cab3ccf0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..702353bab3 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-large.png b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-large.png new file mode 100644 index 0000000000..99e838b70a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-accessibility-medium.png new file mode 100644 index 0000000000..27e81abd42 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..1cf14badd6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-large.png b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-large.png new file mode 100644 index 0000000000..14cdd70b63 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LargeLinkPreview-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LocalAuthView-dark-large.png b/apps/ios/SimpleX Snapshots/References/LocalAuthView-dark-large.png new file mode 100644 index 0000000000..640c40abe8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LocalAuthView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/LocalAuthView-light-large.png b/apps/ios/SimpleX Snapshots/References/LocalAuthView-light-large.png new file mode 100644 index 0000000000..059627066f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/LocalAuthView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkdownHelp-dark-large.png b/apps/ios/SimpleX Snapshots/References/MarkdownHelp-dark-large.png new file mode 100644 index 0000000000..48f1621037 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkdownHelp-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkdownHelp-light-large.png b/apps/ios/SimpleX Snapshots/References/MarkdownHelp-light-large.png new file mode 100644 index 0000000000..2896da9122 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkdownHelp-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-accessibility-medium.png new file mode 100644 index 0000000000..666359aa1d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..f48a75b5bd Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-large.png b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-large.png new file mode 100644 index 0000000000..00903bedc8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-accessibility-medium.png new file mode 100644 index 0000000000..f4cea0e882 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..2dce5a1586 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-large.png b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-large.png new file mode 100644 index 0000000000..28fe0130a1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MarkedDeletedItemView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MemberAdmissionView-dark-large.png b/apps/ios/SimpleX Snapshots/References/MemberAdmissionView-dark-large.png new file mode 100644 index 0000000000..fcd8267a34 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MemberAdmissionView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MemberAdmissionView-light-large.png b/apps/ios/SimpleX Snapshots/References/MemberAdmissionView-light-large.png new file mode 100644 index 0000000000..9829a9ac09 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MemberAdmissionView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MemberSupportChatToolbar-dark-large.png b/apps/ios/SimpleX Snapshots/References/MemberSupportChatToolbar-dark-large.png new file mode 100644 index 0000000000..27b9352257 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MemberSupportChatToolbar-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MemberSupportChatToolbar-light-large.png b/apps/ios/SimpleX Snapshots/References/MemberSupportChatToolbar-light-large.png new file mode 100644 index 0000000000..a42bb606b2 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MemberSupportChatToolbar-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MemberSupportView-dark-large.png b/apps/ios/SimpleX Snapshots/References/MemberSupportView-dark-large.png new file mode 100644 index 0000000000..4453018a6b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MemberSupportView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MemberSupportView-light-large.png b/apps/ios/SimpleX Snapshots/References/MemberSupportView-light-large.png new file mode 100644 index 0000000000..7bdd6a9e9e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MemberSupportView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MigrateToDevice-dark-large.png b/apps/ios/SimpleX Snapshots/References/MigrateToDevice-dark-large.png new file mode 100644 index 0000000000..9b61801a8d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MigrateToDevice-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MigrateToDevice-light-large.png b/apps/ios/SimpleX Snapshots/References/MigrateToDevice-light-large.png new file mode 100644 index 0000000000..8381c58498 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MigrateToDevice-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MigrateToGroupView-dark-large.png b/apps/ios/SimpleX Snapshots/References/MigrateToGroupView-dark-large.png new file mode 100644 index 0000000000..196f463dff Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MigrateToGroupView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MigrateToGroupView-light-large.png b/apps/ios/SimpleX Snapshots/References/MigrateToGroupView-light-large.png new file mode 100644 index 0000000000..c2b1758a4d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MigrateToGroupView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-accessibility-medium.png new file mode 100644 index 0000000000..8a6ccc0bda Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-extra-extra-extra-large.png new file mode 100644 index 0000000000..b16b666379 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-large.png b/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-large.png new file mode 100644 index 0000000000..4f2b9b76ae Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MsgContentView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MsgContentView-light-accessibility-medium.png b/apps/ios/SimpleX Snapshots/References/MsgContentView-light-accessibility-medium.png new file mode 100644 index 0000000000..7811805be0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MsgContentView-light-accessibility-medium.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MsgContentView-light-extra-extra-extra-large.png b/apps/ios/SimpleX Snapshots/References/MsgContentView-light-extra-extra-extra-large.png new file mode 100644 index 0000000000..d5ba4466f6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MsgContentView-light-extra-extra-extra-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/MsgContentView-light-large.png b/apps/ios/SimpleX Snapshots/References/MsgContentView-light-large.png new file mode 100644 index 0000000000..c5f3ef7c9b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/MsgContentView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NativeTextEditor-dark-large.png b/apps/ios/SimpleX Snapshots/References/NativeTextEditor-dark-large.png new file mode 100644 index 0000000000..cd52e80b88 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NativeTextEditor-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NativeTextEditor-light-large.png b/apps/ios/SimpleX Snapshots/References/NativeTextEditor-light-large.png new file mode 100644 index 0000000000..7e2d126979 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NativeTextEditor-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NetworkServersView-dark-large.png b/apps/ios/SimpleX Snapshots/References/NetworkServersView-dark-large.png new file mode 100644 index 0000000000..7bc1293e16 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NetworkServersView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NetworkServersView-light-large.png b/apps/ios/SimpleX Snapshots/References/NetworkServersView-light-large.png new file mode 100644 index 0000000000..0336365202 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NetworkServersView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NewChatMenuButton-dark-large.png b/apps/ios/SimpleX Snapshots/References/NewChatMenuButton-dark-large.png new file mode 100644 index 0000000000..8965e94fab Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NewChatMenuButton-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NewChatMenuButton-light-large.png b/apps/ios/SimpleX Snapshots/References/NewChatMenuButton-light-large.png new file mode 100644 index 0000000000..72d3922dee Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NewChatMenuButton-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NewFeaturesView-dark-large.png b/apps/ios/SimpleX Snapshots/References/NewFeaturesView-dark-large.png new file mode 100644 index 0000000000..9abc39e0aa Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NewFeaturesView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NewFeaturesView-light-large.png b/apps/ios/SimpleX Snapshots/References/NewFeaturesView-light-large.png new file mode 100644 index 0000000000..29b17d5779 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NewFeaturesView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NewServerView-dark-large.png b/apps/ios/SimpleX Snapshots/References/NewServerView-dark-large.png new file mode 100644 index 0000000000..43c8993bca Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NewServerView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NewServerView-light-large.png b/apps/ios/SimpleX Snapshots/References/NewServerView-light-large.png new file mode 100644 index 0000000000..132ae32a7d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NewServerView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NotificationsModeView-dark-large.png b/apps/ios/SimpleX Snapshots/References/NotificationsModeView-dark-large.png new file mode 100644 index 0000000000..6d986c94c2 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NotificationsModeView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NotificationsModeView-light-large.png b/apps/ios/SimpleX Snapshots/References/NotificationsModeView-light-large.png new file mode 100644 index 0000000000..8dae178a11 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NotificationsModeView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NotificationsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/NotificationsView-dark-large.png new file mode 100644 index 0000000000..90438d9615 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NotificationsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/NotificationsView-light-large.png b/apps/ios/SimpleX Snapshots/References/NotificationsView-light-large.png new file mode 100644 index 0000000000..6583d3d985 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/NotificationsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OnboardingConditionsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/OnboardingConditionsView-dark-large.png new file mode 100644 index 0000000000..7c34e8eaa2 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OnboardingConditionsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OnboardingConditionsView-light-large.png b/apps/ios/SimpleX Snapshots/References/OnboardingConditionsView-light-large.png new file mode 100644 index 0000000000..1170055e26 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OnboardingConditionsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OnboardingStepsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/OnboardingStepsView-dark-large.png new file mode 100644 index 0000000000..fed606b4d7 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OnboardingStepsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OnboardingStepsView-light-large.png b/apps/ios/SimpleX Snapshots/References/OnboardingStepsView-light-large.png new file mode 100644 index 0000000000..cf1398e7a0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OnboardingStepsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OneHandUICard-dark-large.png b/apps/ios/SimpleX Snapshots/References/OneHandUICard-dark-large.png new file mode 100644 index 0000000000..826929cbed Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OneHandUICard-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OneHandUICard-light-large.png b/apps/ios/SimpleX Snapshots/References/OneHandUICard-light-large.png new file mode 100644 index 0000000000..566ac49298 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OneHandUICard-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OperatorView-dark-large.png b/apps/ios/SimpleX Snapshots/References/OperatorView-dark-large.png new file mode 100644 index 0000000000..a569df4fb7 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OperatorView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/OperatorView-light-large.png b/apps/ios/SimpleX Snapshots/References/OperatorView-light-large.png new file mode 100644 index 0000000000..4477d79f97 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/OperatorView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PasscodeEntry-dark-large.png b/apps/ios/SimpleX Snapshots/References/PasscodeEntry-dark-large.png new file mode 100644 index 0000000000..1f559a2b6c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PasscodeEntry-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PasscodeEntry-light-large.png b/apps/ios/SimpleX Snapshots/References/PasscodeEntry-light-large.png new file mode 100644 index 0000000000..795b0c5f26 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PasscodeEntry-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PasscodeViewView-dark-large.png b/apps/ios/SimpleX Snapshots/References/PasscodeViewView-dark-large.png new file mode 100644 index 0000000000..640c40abe8 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PasscodeViewView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PasscodeViewView-light-large.png b/apps/ios/SimpleX Snapshots/References/PasscodeViewView-light-large.png new file mode 100644 index 0000000000..122a92328d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PasscodeViewView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PreferencesView-dark-large.png b/apps/ios/SimpleX Snapshots/References/PreferencesView-dark-large.png new file mode 100644 index 0000000000..770667863d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PreferencesView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PreferencesView-light-large.png b/apps/ios/SimpleX Snapshots/References/PreferencesView-light-large.png new file mode 100644 index 0000000000..126c52d62b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PreferencesView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PrivacySettings-dark-large.png b/apps/ios/SimpleX Snapshots/References/PrivacySettings-dark-large.png new file mode 100644 index 0000000000..3efb94b1b5 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PrivacySettings-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/PrivacySettings-light-large.png b/apps/ios/SimpleX Snapshots/References/PrivacySettings-light-large.png new file mode 100644 index 0000000000..9a16ea7c5c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/PrivacySettings-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ProfileImage-dark-large.png b/apps/ios/SimpleX Snapshots/References/ProfileImage-dark-large.png new file mode 100644 index 0000000000..3e9dfb49b2 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ProfileImage-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ProfileImage-light-large.png b/apps/ios/SimpleX Snapshots/References/ProfileImage-light-large.png new file mode 100644 index 0000000000..0d1eff105d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ProfileImage-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ProfilePrivacyView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ProfilePrivacyView-dark-large.png new file mode 100644 index 0000000000..d67b64ec5d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ProfilePrivacyView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ProfilePrivacyView-light-large.png b/apps/ios/SimpleX Snapshots/References/ProfilePrivacyView-light-large.png new file mode 100644 index 0000000000..4d0bec487a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ProfilePrivacyView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ProtocolServerView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ProtocolServerView-dark-large.png new file mode 100644 index 0000000000..3e53efb772 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ProtocolServerView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ProtocolServerView-light-large.png b/apps/ios/SimpleX Snapshots/References/ProtocolServerView-light-large.png new file mode 100644 index 0000000000..7cd08c9904 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ProtocolServerView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/QRCode-dark-large.png b/apps/ios/SimpleX Snapshots/References/QRCode-dark-large.png new file mode 100644 index 0000000000..9e088b017d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/QRCode-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/QRCode-light-large.png b/apps/ios/SimpleX Snapshots/References/QRCode-light-large.png new file mode 100644 index 0000000000..e01aca146b Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/QRCode-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/RTCServers-dark-large.png b/apps/ios/SimpleX Snapshots/References/RTCServers-dark-large.png new file mode 100644 index 0000000000..22ff629648 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/RTCServers-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/RTCServers-light-large.png b/apps/ios/SimpleX Snapshots/References/RTCServers-light-large.png new file mode 100644 index 0000000000..80914e790d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/RTCServers-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ScanCodeView-dark-large.png b/apps/ios/SimpleX Snapshots/References/ScanCodeView-dark-large.png new file mode 100644 index 0000000000..9c97558476 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ScanCodeView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ScanCodeView-light-large.png b/apps/ios/SimpleX Snapshots/References/ScanCodeView-light-large.png new file mode 100644 index 0000000000..495cc37065 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ScanCodeView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ScanProtocolServer-dark-large.png b/apps/ios/SimpleX Snapshots/References/ScanProtocolServer-dark-large.png new file mode 100644 index 0000000000..767b6c47ea Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ScanProtocolServer-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/ScanProtocolServer-light-large.png b/apps/ios/SimpleX Snapshots/References/ScanProtocolServer-light-large.png new file mode 100644 index 0000000000..a03740b179 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/ScanProtocolServer-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SecondaryChatView-dark-large.png b/apps/ios/SimpleX Snapshots/References/SecondaryChatView-dark-large.png new file mode 100644 index 0000000000..a5e2997596 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SecondaryChatView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SecondaryChatView-light-large.png b/apps/ios/SimpleX Snapshots/References/SecondaryChatView-light-large.png new file mode 100644 index 0000000000..856332338d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SecondaryChatView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SendMessageView-dark-large.png b/apps/ios/SimpleX Snapshots/References/SendMessageView-dark-large.png new file mode 100644 index 0000000000..9e82e430a1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SendMessageView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SendMessageView-light-large.png b/apps/ios/SimpleX Snapshots/References/SendMessageView-light-large.png new file mode 100644 index 0000000000..2b03c0455a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SendMessageView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SetAppPasscodeView-dark-large.png b/apps/ios/SimpleX Snapshots/References/SetAppPasscodeView-dark-large.png new file mode 100644 index 0000000000..117a3dffe9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SetAppPasscodeView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SetAppPasscodeView-light-large.png b/apps/ios/SimpleX Snapshots/References/SetAppPasscodeView-light-large.png new file mode 100644 index 0000000000..8fa0cb707a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SetAppPasscodeView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SetDeliveryReceiptsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/SetDeliveryReceiptsView-dark-large.png new file mode 100644 index 0000000000..1794f0afef Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SetDeliveryReceiptsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SetDeliveryReceiptsView-light-large.png b/apps/ios/SimpleX Snapshots/References/SetDeliveryReceiptsView-light-large.png new file mode 100644 index 0000000000..2241c568a0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SetDeliveryReceiptsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SettingsView-dark-large.png b/apps/ios/SimpleX Snapshots/References/SettingsView-dark-large.png new file mode 100644 index 0000000000..144604330c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SettingsView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SettingsView-light-large.png b/apps/ios/SimpleX Snapshots/References/SettingsView-light-large.png new file mode 100644 index 0000000000..b30044bdc0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SettingsView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SimpleXInfo-dark-large.png b/apps/ios/SimpleX Snapshots/References/SimpleXInfo-dark-large.png new file mode 100644 index 0000000000..442089f0f0 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SimpleXInfo-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SimpleXInfo-light-large.png b/apps/ios/SimpleX Snapshots/References/SimpleXInfo-light-large.png new file mode 100644 index 0000000000..390c76f60f Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SimpleXInfo-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SmallLinkPreview-dark-large.png b/apps/ios/SimpleX Snapshots/References/SmallLinkPreview-dark-large.png new file mode 100644 index 0000000000..296b2cf5eb Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SmallLinkPreview-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SmallLinkPreview-light-large.png b/apps/ios/SimpleX Snapshots/References/SmallLinkPreview-light-large.png new file mode 100644 index 0000000000..6e75db84c6 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SmallLinkPreview-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SupportSimpleXBanner-dark-large.png b/apps/ios/SimpleX Snapshots/References/SupportSimpleXBanner-dark-large.png new file mode 100644 index 0000000000..804e9e902c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SupportSimpleXBanner-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/SupportSimpleXBanner-light-large.png b/apps/ios/SimpleX Snapshots/References/SupportSimpleXBanner-light-large.png new file mode 100644 index 0000000000..c0a946f80c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/SupportSimpleXBanner-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/UserAddressLearnMore-dark-large.png b/apps/ios/SimpleX Snapshots/References/UserAddressLearnMore-dark-large.png new file mode 100644 index 0000000000..4f9ebd9d9d Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/UserAddressLearnMore-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/UserAddressLearnMore-light-large.png b/apps/ios/SimpleX Snapshots/References/UserAddressLearnMore-light-large.png new file mode 100644 index 0000000000..3927dc37c9 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/UserAddressLearnMore-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/UserAddressView-dark-large.png b/apps/ios/SimpleX Snapshots/References/UserAddressView-dark-large.png new file mode 100644 index 0000000000..e3f1287db2 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/UserAddressView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/UserAddressView-light-large.png b/apps/ios/SimpleX Snapshots/References/UserAddressView-light-large.png new file mode 100644 index 0000000000..4ed81fc844 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/UserAddressView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/UserPicker-dark-large.png b/apps/ios/SimpleX Snapshots/References/UserPicker-dark-large.png new file mode 100644 index 0000000000..d4013544a1 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/UserPicker-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/UserPicker-light-large.png b/apps/ios/SimpleX Snapshots/References/UserPicker-light-large.png new file mode 100644 index 0000000000..0fb4a7c90c Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/UserPicker-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/VerifyCodeView-dark-large.png b/apps/ios/SimpleX Snapshots/References/VerifyCodeView-dark-large.png new file mode 100644 index 0000000000..7a0debd123 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/VerifyCodeView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/VerifyCodeView-light-large.png b/apps/ios/SimpleX Snapshots/References/VerifyCodeView-light-large.png new file mode 100644 index 0000000000..56e09bec1e Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/VerifyCodeView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/VersionView-dark-large.png b/apps/ios/SimpleX Snapshots/References/VersionView-dark-large.png new file mode 100644 index 0000000000..1d212c8233 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/VersionView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/VersionView-light-large.png b/apps/ios/SimpleX Snapshots/References/VersionView-light-large.png new file mode 100644 index 0000000000..b4900903db Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/VersionView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/WhySimpleX-dark-large.png b/apps/ios/SimpleX Snapshots/References/WhySimpleX-dark-large.png new file mode 100644 index 0000000000..27ec118611 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/WhySimpleX-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/WhySimpleX-light-large.png b/apps/ios/SimpleX Snapshots/References/WhySimpleX-light-large.png new file mode 100644 index 0000000000..936f092af5 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/WhySimpleX-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/YourServersView-dark-large.png b/apps/ios/SimpleX Snapshots/References/YourServersView-dark-large.png new file mode 100644 index 0000000000..7bef40095a Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/YourServersView-dark-large.png differ diff --git a/apps/ios/SimpleX Snapshots/References/YourServersView-light-large.png b/apps/ios/SimpleX Snapshots/References/YourServersView-light-large.png new file mode 100644 index 0000000000..1566185c23 Binary files /dev/null and b/apps/ios/SimpleX Snapshots/References/YourServersView-light-large.png differ diff --git a/apps/ios/SimpleX Snapshots/SnapshotTests.swift b/apps/ios/SimpleX Snapshots/SnapshotTests.swift index 371fe1f51a..13475b27d7 100644 --- a/apps/ios/SimpleX Snapshots/SnapshotTests.swift +++ b/apps/ios/SimpleX Snapshots/SnapshotTests.swift @@ -13,11 +13,12 @@ final class SnapshotTests: XCTestCase { let size = env["SNAPSHOT_SIZE"] ?? "large" try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) let windowScene = try XCTUnwrap(UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.first) + ChatModel.shared.currentUser = User.sampleData var index: [[String: Any]] = [] for dark in [false, true] { let theme = snapshotTheme(dark) CurrentColors = theme - for scene in previewScenes() { + for scene in previewScenes() where scene.allSizes || size == "large" { let themeName = dark ? "dark" : "light" let file = "\(scene.name)-\(themeName)-\(size).png" let image = try renderScene(scene, theme.toAppTheme(), dark: dark, in: windowScene) @@ -42,12 +43,132 @@ final class SnapshotTests: XCTestCase { private struct SnapshotScene { var name: String var height: CGFloat? = nil + var allSizes: Bool var view: AnyView + + init(_ preview: P.Type, allSizes: Bool = false) { + name = String(describing: preview).replacingOccurrences(of: "_Previews", with: "") + self.allSizes = allSizes + view = AnyView(preview.previews) + } } private func previewScenes() -> [SnapshotScene] { [ - SnapshotScene(name: "ChatInfoImage", view: AnyView(ChatInfoImage_Previews.previews)) + SnapshotScene(ActiveCallOverlay_Previews.self), + SnapshotScene(AddChannelView_Previews.self), + SnapshotScene(AddContactLearnMore_Previews.self), + SnapshotScene(AddGroupMembersView_Previews.self), + SnapshotScene(AddGroupView_Previews.self), + SnapshotScene(AdvancedNetworkSettings_Previews.self), + SnapshotScene(BadgesHowItWorksView_Previews.self), + SnapshotScene(BadgesRedeemCodeView_Previews.self), + SnapshotScene(BadgesSupportSimplexView_Previews.self), + SnapshotScene(CallSettings_Previews.self), + SnapshotScene(ChannelMembersView_Previews.self), + SnapshotScene(ChannelRelaysView_Previews.self), + SnapshotScene(ChatHelp_Previews.self), + SnapshotScene(ChatInfoImage_Previews.self), + SnapshotScene(ChatInfoToolbar_Previews.self), + SnapshotScene(ChatInfoView_Previews.self), + SnapshotScene(ChatItemForwardingView_Previews.self), + SnapshotScene(ChatItemInfoView_Previews.self), + SnapshotScene(ChatItemView_NonMsgContentDeleted_Previews.self, allSizes: true), + SnapshotScene(ChatItemView_Previews.self, allSizes: true), + SnapshotScene(ChatListNavLink_Previews.self), + SnapshotScene(ChatListView_Previews.self), + SnapshotScene(ChatView_Previews.self), + SnapshotScene(CIChatFeatureView_Previews.self, allSizes: true), + SnapshotScene(CIEventView_Previews.self, allSizes: true), + SnapshotScene(CIFeaturePreferenceView_Previews.self, allSizes: true), + SnapshotScene(CIFileView_Previews.self, allSizes: true), + SnapshotScene(CIGroupInvitationView_Previews.self, allSizes: true), + SnapshotScene(CIInvalidJSONView_Previews.self, allSizes: true), + SnapshotScene(CIMemberCreatedContactView_Previews.self, allSizes: true), + SnapshotScene(CIMetaView_Previews.self, allSizes: true), + SnapshotScene(CIVoiceView_Previews.self, allSizes: true), + SnapshotScene(ComposeVoiceView_Previews.self), + SnapshotScene(ConnectDesktopView_Previews.self), + SnapshotScene(ContactConnectionInfo_Previews.self), + SnapshotScene(ContactConnectionView_Previews.self), + SnapshotScene(ContactPreferencesView_Previews.self), + SnapshotScene(ContactRequestView_Previews.self), + SnapshotScene(ContextContactRequestActionsView_Previews.self), + SnapshotScene(ContextItemView_Previews.self), + SnapshotScene(ContextMemberContactActionsView_Previews.self), + SnapshotScene(ContextPendingMemberActionsView_Previews.self), + SnapshotScene(ContextProfilePickerView_Previews.self), + SnapshotScene(CreateProfile_Previews.self), + SnapshotScene(CreateSimpleXAddress_Previews.self), + SnapshotScene(CustomTimePicker_Previews.self), + SnapshotScene(DatabaseEncryptionView_Previews.self), + SnapshotScene(DatabaseErrorView_Previews.self), + SnapshotScene(DatabaseView_Previews.self), + SnapshotScene(DeletedItemView_Previews.self, allSizes: true), + SnapshotScene(DetermineWidth_Previews.self), + SnapshotScene(DeveloperView_Previews.self), + SnapshotScene(EmojiItemView_Previews.self, allSizes: true), + SnapshotScene(FramedCIVoiceView_Previews.self, allSizes: true), + SnapshotScene(FramedItemView_Deleted_Previews.self, allSizes: true), + SnapshotScene(FramedItemView_Edited_Previews.self, allSizes: true), + SnapshotScene(FramedItemView_Previews.self, allSizes: true), + SnapshotScene(GetStakeBanner_Previews.self), + SnapshotScene(GroupChatInfoView_Previews.self), + SnapshotScene(GroupLinkView_Previews.self), + SnapshotScene(GroupMemberInfoView_Previews.self), + SnapshotScene(GroupPreferencesView_Previews.self), + SnapshotScene(GroupProfileView_Previews.self), + SnapshotScene(GroupWelcomeView_Previews.self), + SnapshotScene(IncognitoHelp_Previews.self), + SnapshotScene(IncomingCallView_Previews.self), + SnapshotScene(IntegrityErrorItemView_Previews.self, allSizes: true), + SnapshotScene(LargeLinkPreview_Previews.self, allSizes: true), + SnapshotScene(LocalAuthView_Previews.self), + SnapshotScene(MarkdownHelp_Previews.self), + SnapshotScene(MarkedDeletedItemView_Previews.self, allSizes: true), + SnapshotScene(MemberAdmissionView_Previews.self), + SnapshotScene(MemberSupportChatToolbar_Previews.self), + SnapshotScene(MemberSupportView_Previews.self), + SnapshotScene(MigrateToDevice_Previews.self), + SnapshotScene(MigrateToGroupView_Previews.self), + SnapshotScene(MsgContentView_Previews.self, allSizes: true), + SnapshotScene(NativeTextEditor_Previews.self), + SnapshotScene(NetworkServersView_Previews.self), + SnapshotScene(NewChatMenuButton_Previews.self), + SnapshotScene(NewFeaturesView_Previews.self), + SnapshotScene(NewServerView_Previews.self), + SnapshotScene(NotificationsModeView_Previews.self), + SnapshotScene(NotificationsView_Previews.self), + SnapshotScene(OnboardingConditionsView_Previews.self), + SnapshotScene(OnboardingStepsView_Previews.self), + SnapshotScene(OneHandUICard_Previews.self), + SnapshotScene(OperatorView_Previews.self), + SnapshotScene(PasscodeEntry_Previews.self), + SnapshotScene(PasscodeViewView_Previews.self), + SnapshotScene(PreferencesView_Previews.self), + SnapshotScene(PrivacySettings_Previews.self), + SnapshotScene(ProfileImage_Previews.self), + SnapshotScene(ProfilePrivacyView_Previews.self), + SnapshotScene(ProtocolServerView_Previews.self), + SnapshotScene(QRCode_Previews.self), + SnapshotScene(RTCServers_Previews.self), + SnapshotScene(ScanCodeView_Previews.self), + SnapshotScene(ScanProtocolServer_Previews.self), + SnapshotScene(SecondaryChatView_Previews.self), + SnapshotScene(SendMessageView_Previews.self), + SnapshotScene(SetAppPasscodeView_Previews.self), + SnapshotScene(SetDeliveryReceiptsView_Previews.self), + SnapshotScene(SettingsView_Previews.self), + SnapshotScene(SimpleXInfo_Previews.self), + SnapshotScene(SmallLinkPreview_Previews.self), + SnapshotScene(SupportSimpleXBanner_Previews.self), + SnapshotScene(UserAddressLearnMore_Previews.self), + SnapshotScene(UserAddressView_Previews.self), + SnapshotScene(UserPicker_Previews.self), + SnapshotScene(VerifyCodeView_Previews.self), + SnapshotScene(VersionView_Previews.self), + SnapshotScene(WhySimpleX_Previews.self), + SnapshotScene(YourServersView_Previews.self) ] } @@ -66,7 +187,7 @@ private func snapshotTheme(_ dark: Bool) -> ThemeManager.ActiveTheme { private func renderScene(_ scene: SnapshotScene, _ theme: AppTheme, dark: Bool, in windowScene: UIWindowScene) throws -> UIImage { let screen = windowScene.screen let width = screen.bounds.width - let root = scene.view + let root = VStack(spacing: 0) { scene.view } .environmentObject(ChatModel.shared) .environmentObject(theme) .frame(width: width, height: scene.height) @@ -83,10 +204,13 @@ private func renderScene(_ scene: SnapshotScene, _ theme: AppTheme, dark: Bool, if scene.height == nil { for _ in 0..<2 { let fit = host.sizeThatFits(in: CGSize(width: width, height: .greatestFiniteMagnitude)) - window.frame = CGRect(x: 0, y: 0, width: width, height: ceil(fit.height)) + let fill = host.sizeThatFits(in: screen.bounds.size) + window.frame = CGRect(x: 0, y: 0, width: width, height: ceil(max(fit.height, fill.height))) settle() } } + window.endEditing(true) + removeAnimations(window.layer) let format = UIGraphicsImageRendererFormat.default() format.scale = 1 format.preferredRange = .standard @@ -99,6 +223,11 @@ private func renderScene(_ scene: SnapshotScene, _ theme: AppTheme, dark: Bool, return image } +private func removeAnimations(_ layer: CALayer) { + layer.removeAllAnimations() + layer.sublayers?.forEach(removeAnimations) +} + private func settle() { RunLoop.main.run(until: Date().addingTimeInterval(0.6)) } diff --git a/apps/ios/SimpleX Snapshots/check-previews.py b/apps/ios/SimpleX Snapshots/check-previews.py new file mode 100755 index 0000000000..3e468b74a1 --- /dev/null +++ b/apps/ios/SimpleX Snapshots/check-previews.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +import re +import sys +from pathlib import Path + +EXCLUDED = { + "AppearanceSettings_Previews", + "BadgesCheckOrderView_Previews", + "BadgesChooseBadgeView_Previews", + "BadgesHowLongView_Previews", + "ChatPreviewView_Previews", + "MigrateFromDevice_Previews", + "NewChatView_Previews", + "ServersSummaryView_Previews", + "TerminalView_Previews", + "UserProfilesView_Previews", +} + +tests = Path(__file__).with_name("SnapshotTests.swift") +ios = tests.parents[1] +listed = set(re.findall(r"SnapshotScene\((\w+)\.self", tests.read_text())) +errors = [] +for path in sorted(ios.rglob("*.swift")): + source = path.read_text() + name = path.relative_to(ios.parent.parent) + for preview in re.findall(r"^[ \t]*struct[ \t]+(\w+)[ \t]*:[ \t]*PreviewProvider\b", source, re.M): + if preview not in listed and preview not in EXCLUDED: + errors.append(f"{name}: {preview} is not in previewScenes() of {tests.name}") + if re.search(r"^[ \t]*#Preview\b", source, re.M): + errors.append(f"{name}: #Preview is not rendered, write a PreviewProvider and add it to previewScenes() of {tests.name}") +print("\n".join(errors) or f"{len(listed)} previews are rendered, {len(EXCLUDED)} are excluded") +sys.exit(1 if errors else 0) diff --git a/scripts/ci/ios-sim/README.md b/scripts/ci/ios-sim/README.md index 34ccd4c86f..4596a32639 100644 --- a/scripts/ci/ios-sim/README.md +++ b/scripts/ci/ios-sim/README.md @@ -13,7 +13,7 @@ Results: the job logs, the Claude job's summary (Claude's usage) and the artifac - `plan` (ubuntu-24.04, 10 s) reads what the run asks for, names the core library and the backend after their sources, `hashFiles` over the Haskell sources, `cabal.project`, `simplex-chat.cabal` and the build script, and reuses an artifact of the same name that an earlier run of the same branch uploaded (30 days). So every run builds the core library, and the backend when asked, from the branch's own Haskell code, and rebuilds only when those sources change. - `core` (macOS, 30–45 min when not reused): `build-core.sh` builds `lib:simplex-chat` with cabal and the iOS flags, as the Nix iOS build does, into the package `scripts/ios/prepare.sh` expects, and `prepare-libs.sh` marks it for the simulator (`mac2ios`). - `backend` (macOS, 20–45 min when not reused, only when asked): `build-backend.sh` builds `simplex-chat`, `simplex-directory-service` and `smp-server`. -- `app` (macOS): the Xcode build 8–22 min, the smoke test about 10 min with the snapshots a few minutes more, the backend start about 10 min when asked. +- `app` (macOS): the Xcode build 8–22 min, the smoke test about 10 min, the snapshots about 18 min more, the backend start about 10 min when asked. - `claude` (macOS, only when asked, after `app` passed): a new simulator with the app job's build and the smoke test, about 7 min, then the sessions (the smoke plan's took 2.6 min). A run with reused builds and no extras takes about 25 minutes plus the wait for a macOS runner. Hosted minutes are free for this public repository; the limit is the repository's five concurrent macOS jobs, shared with PR builds (each `build.yml` run takes two), so queue waits can be long. The workflow saves no Actions caches, which this repository evicts within hours and shares with `build.yml`: builds are reused only as the artifacts above, and a core or backend rebuild compiles its dependencies too. @@ -42,9 +42,11 @@ Haiku 5.5 drives the app well: the smoke plan takes a few dozen turns and cents; At the end of the app job's smoke test, `smoke-test.sh` runs `snapshots.sh /snapshots` when the app it tested lies in the derived data of a build (`…/Build/Products/Debug-iphonesimulator`); the Claude job, which installs the app from a tarball, skips it. -`snapshots.sh` builds the unit-test target `SimpleX Snapshots` (`apps/ios/SimpleX Snapshots/SnapshotTests.swift`, hosted by the app) with `xcodebuild build-for-testing`, then runs it in the smoke test's simulator three times, after `xcrun simctl ui content_size` `large`, `extra-extra-extra-large` and `accessibility-medium`, and sets `large` back. The test hosts each preview listed in `previewScenes()` (the `previews` of a `PreviewProvider`) in a `UIHostingController` in a window of the screen's width, in the light and dark themes without a wallpaper, and draws it with `drawHierarchy` at scale 1, one pixel per point. +`snapshots.sh` builds the unit-test target `SimpleX Snapshots` (`apps/ios/SimpleX Snapshots/SnapshotTests.swift`, hosted by the app) with `xcodebuild build-for-testing`, then runs it in the smoke test's simulator three times, after `xcrun simctl ui content_size` `large`, `extra-extra-extra-large` and `accessibility-medium`, and sets `large` back. The test hosts each preview listed in `previewScenes()` (the `previews` of a `PreviewProvider`, in a `VStack`) in a `UIHostingController` in a window of the screen's width and of the larger of two heights, the preview's ideal height and its height in a frame of the screen's size, in the light and dark themes without a wallpaper, ends text editing and removes the running animations, so a text cursor or a spinner is drawn the same in every run, and draws it with `drawHierarchy` at scale 1, one pixel per point. The chat item previews (`allSizes`) are rendered at the three sizes, the other previews at `large` only. -The test runs in UTC (`NSTimeZone.default`) and en_US (`-testLanguage en -testRegion US`), so the renders do not depend on the runner's time zone or locale; a preview that shows the current date or time differs between runs. +`previewScenes()` lists every `PreviewProvider` in `apps/ios` except those in `EXCLUDED` of `apps/ios/SimpleX Snapshots/check-previews.py`, whose renders differ between runs and can be made identical only by a change of the app's code. The iOS job of `build.yml` runs `check-previews.py`, which fails when a `PreviewProvider` is neither listed nor excluded, or when a file has a `#Preview`, since the test renders previews by their type. + +The test runs in UTC (`NSTimeZone.default`) and en_US (`-testLanguage en -testRegion US`), so the renders do not depend on the runner's time zone or locale; a preview that shows the current date or time differs between runs, so the previews use `previewDate` (`ChatItemView.swift`) in place of the current time. The keyboard autocorrects the profile name typed in the smoke test differently between runs, so the test sets the app's current user to the sample user. The images go to `snapshots/` of the artifact `ios-sim-smoke-test` as 8-bit sRGB PNG files without alpha (`preferredRange = .standard`, `opaque`), named `--.png`, with `index-.json` listing each file's scene, theme, size, pixel width and height, scale and the content size category the app saw.