mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 23:24:32 +00:00
68 lines
2.4 KiB
Swift
68 lines
2.4 KiB
Swift
//
|
|
// TabSelectionView.swift
|
|
// DynamicIsland
|
|
//
|
|
// Created by Hugo Persson on 2024-08-25.
|
|
// Modified by Hariharan Mudaliar
|
|
|
|
import SwiftUI
|
|
import Defaults
|
|
|
|
struct TabModel: Identifiable {
|
|
let id = UUID()
|
|
let label: String
|
|
let icon: String
|
|
let view: NotchViews
|
|
}
|
|
|
|
struct TabSelectionView: View {
|
|
@ObservedObject var coordinator = DynamicIslandViewCoordinator.shared
|
|
@Default(.enableStatsFeature) var enableStatsFeature
|
|
@Default(.enableColorPickerFeature) var enableColorPickerFeature
|
|
@Namespace var animation
|
|
|
|
private var tabs: [TabModel] {
|
|
var tabsArray: [TabModel] = []
|
|
|
|
tabsArray.append(TabModel(label: "Home", icon: "house.fill", view: .home))
|
|
|
|
tabsArray.append(TabModel(label: "Shelf", icon: "tray.fill", view: .shelf))
|
|
|
|
// Stats tab only shown when stats feature is enabled
|
|
if Defaults[.enableStatsFeature] {
|
|
tabsArray.append(TabModel(label: "Stats", icon: "chart.xyaxis.line", view: .stats))
|
|
}
|
|
|
|
return tabsArray
|
|
}
|
|
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())
|
|
}
|