apply to terimal

This commit is contained in:
neon443
2025-08-25 21:32:53 +01:00
parent cc028321db
commit f85ef3deaf
2 changed files with 116 additions and 112 deletions

View File

@@ -12,102 +12,90 @@ struct ContentView: View {
@ObservedObject var hostsManager: HostsManager @ObservedObject var hostsManager: HostsManager
@ObservedObject var keyManager: KeyManager @ObservedObject var keyManager: KeyManager
@State private var spawnTime: Date = .now
var body: some View { var body: some View {
TimelineView(.animation) { tl in NavigationStack {
let time = tl.date.distance(to: spawnTime) ZStack {
NavigationStack { hostsManager.selectedTheme.background.suiColor.opacity(0.7)
ZStack { .ignoresSafeArea(.all)
hostsManager.selectedTheme.background.suiColor.opacity(0.7) List {
.ignoresSafeArea(.all) SessionsListView(
List { handler: handler,
SessionsListView( hostsManager: hostsManager,
handler: handler, keyManager: keyManager
hostsManager: hostsManager, )
keyManager: keyManager
)
RecentsView( RecentsView(
hostsManager: hostsManager, hostsManager: hostsManager,
keyManager: keyManager keyManager: keyManager
) )
HostsView( HostsView(
handler: handler, handler: handler,
hostsManager: hostsManager, hostsManager: hostsManager,
keyManager: keyManager keyManager: keyManager
) )
Section() { Section() {
NavigationLink {
ThemeManagerView(hostsManager: hostsManager)
} label: {
Label("Themes", systemImage: "swatchpalette")
}
NavigationLink {
FontManagerView(hostsManager: hostsManager)
} label: {
Label("Fonts", systemImage: "textformat")
}
}
Section {
NavigationLink {
SnippetManagerView(hostsManager: hostsManager)
} label: {
Label("Snippets", systemImage: "paperclip")
}
NavigationLink {
KeyManagerView(hostsManager: hostsManager, keyManager: keyManager)
} label: {
Label("Keys", systemImage: "key.fill")
}
NavigationLink {
HostkeysView(hostsManager: hostsManager)
} label: {
Label("Hostkey Fingerprints", systemImage: "lock.display")
}
}
Section {
NavigationLink {
SettingsView(hostsManager: hostsManager, keyManager: keyManager)
} label: {
Label("Settings", systemImage: "gear")
}
NavigationLink {
AboutView(hostsManager: hostsManager)
} label: {
Label("About", systemImage: "info.square")
}
}
}
.scrollContentBackground(.hidden)
}
.navigationTitle("ShhShell")
.toolbar {
ToolbarItem(placement: .confirmationAction) {
NavigationLink { NavigationLink {
ConnectionView( ThemeManagerView(hostsManager: hostsManager)
handler: SSHHandler(host: Host.blank, keyManager: keyManager),
hostsManager: hostsManager,
keyManager: keyManager
)
} label: { } label: {
Label("Add", systemImage: "plus") Label("Themes", systemImage: "swatchpalette")
}
NavigationLink {
FontManagerView(hostsManager: hostsManager)
} label: {
Label("Fonts", systemImage: "textformat")
}
}
Section {
NavigationLink {
SnippetManagerView(hostsManager: hostsManager)
} label: {
Label("Snippets", systemImage: "paperclip")
}
NavigationLink {
KeyManagerView(hostsManager: hostsManager, keyManager: keyManager)
} label: {
Label("Keys", systemImage: "key.fill")
}
NavigationLink {
HostkeysView(hostsManager: hostsManager)
} label: {
Label("Hostkey Fingerprints", systemImage: "lock.display")
}
}
Section {
NavigationLink {
SettingsView(hostsManager: hostsManager, keyManager: keyManager)
} label: {
Label("Settings", systemImage: "gear")
}
NavigationLink {
AboutView(hostsManager: hostsManager)
} label: {
Label("About", systemImage: "info.square")
} }
} }
} }
.scrollContentBackground(.hidden)
} }
.visualEffect { content, proxy in .navigationTitle("ShhShell")
content .toolbar {
.colorEffect(ShaderLibrary.crt( ToolbarItem(placement: .confirmationAction) {
.float2(proxy.size), NavigationLink {
.float(time) ConnectionView(
)) handler: SSHHandler(host: Host.blank, keyManager: keyManager),
hostsManager: hostsManager,
keyManager: keyManager
)
} label: {
Label("Add", systemImage: "plus")
}
}
} }
} }
} }
@@ -115,7 +103,7 @@ struct ContentView: View {
#Preview { #Preview {
let keymanager = KeyManager() let keymanager = KeyManager()
ContentView( ContentView(
handler: SSHHandler(host: Host.debug, keyManager: keymanager), handler: SSHHandler(host: Host.debug, keyManager: keymanager),
hostsManager: HostsManager(), hostsManager: HostsManager(),
keyManager: keymanager keyManager: keymanager

View File

@@ -16,32 +16,48 @@ struct ShellView: View {
@Environment(\.dismiss) var dismiss @Environment(\.dismiss) var dismiss
@State var startTime: Date = .now
var body: some View { var body: some View {
NavigationStack { NavigationStack {
ZStack { ZStack {
hostsManager.selectedTheme.background.suiColor TimelineView(.animation) { tl in
.ignoresSafeArea(.all) let time = tl.date.distance(to: startTime)
TerminalController(handler: handler, hostsManager: hostsManager) let shaderEnabled = hostsManager.settings.filter == .crt
hostsManager.selectedTheme.background.suiColor
.ignoresSafeArea(.all)
TerminalController(handler: handler, hostsManager: hostsManager)
Group { Group {
Color.gray.opacity(0.2) Color.gray.opacity(0.2)
.transition(.opacity) .transition(.opacity)
Image(systemName: "bell.fill") Image(systemName: "bell.fill")
.foregroundStyle( .foregroundStyle(
hostsManager.selectedTheme.background.luminance > 0.5 ? hostsManager.selectedTheme.background.luminance > 0.5 ?
.black : .white .black : .white
) )
.font(.largeTitle) .font(.largeTitle)
.shadow(color: .black, radius: 5) .shadow(color: .black, radius: 5)
}
.opacity(handler.bell ? 1 : 0)
.onChange(of: handler.bell) { _ in
guard handler.bell else { return }
if hostsManager.settings.bellHaptic {
Haptic.warning.trigger()
} }
if hostsManager.settings.bellSound { .opacity(handler.bell ? 1 : 0)
AudioServicesPlaySystemSound(1103) .onChange(of: handler.bell) { _ in
guard handler.bell else { return }
if hostsManager.settings.bellHaptic {
Haptic.warning.trigger()
}
if hostsManager.settings.bellSound {
AudioServicesPlaySystemSound(1103)
}
}
.visualEffect { content, proxy in
content
.colorEffect(
ShaderLibrary.crt(
.float2(proxy.size),
.float(time)
),
isEnabled: shaderEnabled
)
} }
} }
} }