// // Picker.swift // MacBackend // // Created by david-swift on 08.12.2024. // import SwiftUI /// A picker view. public struct Picker: SwiftUIWidget where Item: Hashable, Item: CustomStringConvertible { /// The selected item. @Meta.Binding var selection: Item /// The picker's label. var label: String /// The picker's items. var items: [Item] /// Whether to use the segmented picker stlye. var segmented = false /// Initialize the picker. /// - Parameters: /// - label: The picker's label. /// - items: The picker's items. /// - selection: The selected item. public init(_ label: String, items: [Item], selection: Meta.Binding) { self._selection = selection self.label = label self.items = items } /// Get the SwiftUI view. /// - Parameter properties: The widget data. /// - Returns: The SwiftUI view. public static func view(properties: Picker) -> some SwiftUI.View { let picker = SwiftUI.Picker(properties.label, selection: properties._selection.swiftUI) { SwiftUI.ForEach(properties.items, id: \.hashValue) { item in SwiftUI.Text(item.description) .tag(item.description) } } if properties.segmented { picker .pickerStyle(.segmented) } else { picker .pickerStyle(.automatic) } } /// Make the picker segmented. /// - Parameter segmented: Whether the picker is segmented. /// - Returns: The picker. public func segmented(_ segmented: Bool = true) -> Self { modify { $0.segmented = segmented } } }