// Copyright (C) 2024 Rubén Beltrán del Río // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see https://map.tranquil.systems. import SwiftUI @available(macOS 26, *) struct GlassEvolutionPicker: View { @State var isShowingMenu = false @Binding var selectedEvolution: StageType var body: some View { Button( action: { isShowingMenu = !isShowingMenu }, label: { HStack(spacing: Dimensions.Spacing.loose) { Text(Stage.title(selectedEvolution)) .font(.Theme.Body.emphasized) ZStack { Image(systemName: "chevron.up") .resizable() .scaledToFit() .frame( width: Dimensions.EvolutionPicker.controlSize, height: Dimensions.EvolutionPicker.controlSize ) .offset(CGSize(width: 0, height: -Dimensions.EvolutionPicker.controlSpacing)) Image(systemName: "chevron.down") .resizable() .scaledToFit() .frame( width: Dimensions.EvolutionPicker.controlSize, height: Dimensions.EvolutionPicker.controlSize ) .offset(CGSize(width: 0, height: Dimensions.EvolutionPicker.controlSpacing)) } } .padding(.horizontal, Dimensions.Spacing.regular) .padding(.vertical, Dimensions.Spacing.cozy) } ) .buttonStyle(.glass) .buttonBorderShape(.capsule) .cornerRadius(Dimensions.EvolutionPicker.radius) .popover( isPresented: $isShowingMenu, content: { EvolutionPickerMenu(selectedEvolution: $selectedEvolution) } ) .onChange(of: selectedEvolution) { isShowingMenu = false } .animation(.bouncy, value: selectedEvolution) } } #Preview { @Previewable @State var selectedEvolution: StageType = .behavior EvolutionPicker(selectedEvolution: $selectedEvolution) }