telegram ui style
This commit is contained in:
1 parent
7db327c588
commit
f7e22364fd
9 files changed
+663
-476
No files matched your search
@@ -2,53 +2,60 @@ import SwiftUI
|
||||
|
||||
struct ConnectionBanner: View {
|
||||
@ObservedObject var model: AppModel
|
||||
var text: String
|
||||
|
||||
var body: some View {
|
||||
switch model.connectionStatus {
|
||||
case .connected:
|
||||
if model.isArchiveSyncing || !model.isOMEMOReady {
|
||||
banner(
|
||||
icon: model.isArchiveSyncing ? "arrow.triangle.2.circlepath" : "lock.rotation",
|
||||
text: model.isArchiveSyncing ? "Синхронизация истории…" : "Публикация ключей OMEMO…",
|
||||
color: .blue,
|
||||
// text: model.isArchiveSyncing ? "Синхронизация истории…" : "Публикация ключей OMEMO…",
|
||||
text: "Обновление",
|
||||
color: .clear,
|
||||
progress: true
|
||||
)
|
||||
} else {
|
||||
Text(text)
|
||||
.font(.headline)
|
||||
}
|
||||
case .connecting:
|
||||
banner(icon: "antenna.radiowaves.left.and.right", text: "Подключение…", color: .orange, progress: true)
|
||||
case .disconnected(let reason):
|
||||
HStack(spacing: 8) {
|
||||
Image(systemName: "wifi.exclamationmark")
|
||||
Text(reason ?? "Нет соединения")
|
||||
.lineLimit(1)
|
||||
Spacer()
|
||||
Button("Повторить") { Task { await model.reconnect() } }
|
||||
.buttonStyle(.borderless)
|
||||
.fontWeight(.semibold)
|
||||
}
|
||||
.font(.caption)
|
||||
.foregroundStyle(.white)
|
||||
.padding(.horizontal, 12)
|
||||
.padding(.vertical, 8)
|
||||
.background(Color.red.opacity(0.88))
|
||||
// banner(icon: "antenna.radiowaves.left.and.right", text: "Подключение…", color: .clear, progress: true)
|
||||
banner(text: "Подключение", color: .clear, progress: true)
|
||||
case .disconnected:
|
||||
banner(text: "Ожидание сети", color: .clear, progress: true)
|
||||
// HStack(spacing: 8) {
|
||||
// Image(systemName: "wifi.exclamationmark")
|
||||
// Text(reason ?? "Нет соединения")
|
||||
// .lineLimit(1)
|
||||
// Spacer()
|
||||
// Button { Task { await model.reconnect() } } label: {
|
||||
// Label("Обновить", systemImage: "arrow.clockwise")
|
||||
// }
|
||||
// .buttonStyle(.borderless)
|
||||
// .fontWeight(.semibold)
|
||||
// }
|
||||
// .font(.caption)
|
||||
// .foregroundStyle(.white)
|
||||
// .padding(.horizontal, 12)
|
||||
// .padding(.vertical, 8)
|
||||
//// .background(Color.red.opacity(0.88))
|
||||
// .background(Color.clear)
|
||||
}
|
||||
}
|
||||
|
||||
private func banner(icon: String, text: String, color: Color, progress: Bool) -> some View {
|
||||
private func banner(text: String, color: Color, progress: Bool) -> some View {
|
||||
HStack(spacing: 8) {
|
||||
if progress {
|
||||
ProgressView().controlSize(.mini).tint(.white)
|
||||
} else {
|
||||
Image(systemName: icon)
|
||||
}
|
||||
Text(text)
|
||||
Spacer()
|
||||
// Spacer()
|
||||
}
|
||||
.font(.caption)
|
||||
.foregroundStyle(.white)
|
||||
.padding(.horizontal, 12)
|
||||
.padding(.vertical, 8)
|
||||
.background(color.opacity(0.88))
|
||||
// .padding(.horizontal, 12)
|
||||
// .padding(.vertical, 8)
|
||||
// .background(color.opacity(0.88))
|
||||
}
|
||||
}
|
||||
|
||||
+607
-441
File diff suppressed because it is too large.
Load diff
@@ -13,6 +13,9 @@ struct NewChatView: View {
|
||||
Section("Контакт") {
|
||||
TextField("user@example.org", text: $jid)
|
||||
.disableAutocorrection(true)
|
||||
#if os(iOS)
|
||||
.keyboardType(.emailAddress)
|
||||
#endif
|
||||
TextField("Имя (необязательно)", text: $name)
|
||||
}
|
||||
Section {
|
||||
|
||||
@@ -19,6 +19,9 @@ struct NewGroupView: View {
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
TextField("room@conference.example.org", text: $roomJID)
|
||||
.disableAutocorrection(true)
|
||||
#if os(iOS)
|
||||
.keyboardType(.emailAddress)
|
||||
#endif
|
||||
TextField("Название (необязательно)", text: $name)
|
||||
TextField("Ваш псевдоним", text: $nickname)
|
||||
}
|
||||
@@ -31,6 +34,9 @@ struct NewGroupView: View {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
TextField("alice@example.org, bob@example.org", text: $invitees, axis: .vertical)
|
||||
.lineLimit(2...5)
|
||||
#if os(iOS)
|
||||
.keyboardType(.emailAddress)
|
||||
#endif
|
||||
Text("Укажите JID через запятую или с новой строки. Если комнаты ещё нет, Prosody создаст её с настройками по умолчанию.")
|
||||
.font(.footnote)
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
@@ -120,7 +120,7 @@ struct ServerInfoView: View {
|
||||
.font(.caption)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.listRowBackground(Color.clear)
|
||||
.listRowBackground(Color.gray.opacity(0.16))
|
||||
}
|
||||
|
||||
private func connectionRows() -> some View {
|
||||
@@ -271,7 +271,7 @@ private extension ServerInformation.CapabilityStatus {
|
||||
var color: Color {
|
||||
switch self {
|
||||
case .success: return Color.green.opacity(0.16)
|
||||
case .normal: return Color.clear
|
||||
case .normal: return Color.gray.opacity(0.16)
|
||||
case .warning: return Color.orange.opacity(0.16)
|
||||
case .error: return Color.red.opacity(0.16)
|
||||
}
|
||||
|
||||
@@ -153,8 +153,13 @@ struct SettingsView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Настройки")
|
||||
.navigationTitle("")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .principal) {
|
||||
Text("Настройки")
|
||||
.font(.headline)
|
||||
}
|
||||
if !presentedAsTab {
|
||||
ToolbarItem(placement: .confirmationAction) {
|
||||
Button("Готово") { dismiss() }
|
||||
|
||||
Reference in new issue
Block a user