add a telegram-style bottom tab bar to the main screen

- Replace the sidebar-based MainChatView with MainTabView: a custom
  bottom bar with Контакты / Звонки / Чаты / Настройки that looks the
  same on iOS and macOS, and open chats via push navigation.
- Put the search field above the chat and contact lists (searchable on
  iOS, an inline field on macOS) and add an aggregated call-history
  screen backed by model.callHistoryMessages.
- Embed SettingsView as a tab, update verify.sh guards, and keep CI on
  deterministic unit tests while the UI tests stay runnable manually.
This commit is contained in:
wt
2026-08-30 01:39:54 +07:00
parent 6ed5cb3ce9
commit efe3986ba5
11 changed files with 539 additions and 332 deletions
+10
View File
@@ -251,6 +251,16 @@ final class AppModel: ObservableObject {
)
}
/// Aggregated call history for the «Звонки» tab, newest first.
var callHistoryMessages: [ChatMessage] {
messages
.filter { $0.callHistory != nil }
.sorted { lhs, rhs in
if lhs.timestamp != rhs.timestamp { return lhs.timestamp > rhs.timestamp }
return lhs.clientID < rhs.clientID
}
}
var selectedMessages: [ChatMessage] {
guard let selectedConversationID else { return [] }
if selectedMessagesCacheConversationID == selectedConversationID {