mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
57 lines
2 KiB
Swift
57 lines
2 KiB
Swift
//
|
|
// TabSelectionView.swift
|
|
// DynamicIsland
|
|
//
|
|
// Created by Hugo Persson on 2024-08-25.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct TabModel: Identifiable {
|
|
let id = UUID()
|
|
let label: String
|
|
let icon: String
|
|
let view: NotchViews
|
|
}
|
|
|
|
let tabs = [
|
|
TabModel(label: "Home", icon: "house.fill", view: .home),
|
|
TabModel(label: "Shelf", icon: "tray.fill", view: .shelf),
|
|
TabModel(label: "Timer", icon: "timer", view: .timer),
|
|
TabModel(label: "Stats", icon: "chart.line.uptrend.xyaxis", view: .stats)
|
|
]
|
|
|
|
struct TabSelectionView: View {
|
|
@ObservedObject var coordinator = DynamicIslandViewCoordinator.shared
|
|
@Namespace var animation
|
|
var body: some View {
|
|
HStack(spacing: 0) {
|
|
ForEach(tabs) { tab in
|
|
TabButton(label: tab.label, icon: tab.icon, selected: coordinator.currentView == tab.view) {
|
|
withAnimation(.smooth) {
|
|
coordinator.currentView = tab.view
|
|
}
|
|
}
|
|
.frame(height: 26)
|
|
.foregroundStyle(tab.view == coordinator.currentView ? .white : .gray)
|
|
.background {
|
|
if tab.view == coordinator.currentView {
|
|
Capsule()
|
|
.fill(coordinator.currentView == tab.view ? Color(nsColor: .secondarySystemFill) : Color.clear)
|
|
.matchedGeometryEffect(id: "capsule", in: animation)
|
|
} else {
|
|
Capsule()
|
|
.fill(coordinator.currentView == tab.view ? Color(nsColor: .secondarySystemFill) : Color.clear)
|
|
.matchedGeometryEffect(id: "capsule", in: animation)
|
|
.hidden()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.clipShape(Capsule())
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
DynamicIslandHeader().environmentObject(DynamicIslandViewModel())
|
|
}
|