AlphabetRail.swift
45 lignes · 1745 octets
import SwiftUI // Port of ui/carnet/AlphabetRail.kt — A–Z + '#' rail; letters with contacts // are ink and tappable, the others muted. private let railLetters: [Character] = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ#") struct AlphabetRail: View { let presentLetters: Set<Character> let onLetter: (Character) -> Void var body: some View { GeometryReader { _ in VStack(alignment: .center, spacing: 0) { ForEach(railLetters, id: \.self) { letter in let present = presentLetters.contains(letter) Group { if present { Button { onLetter(letter) } label: { Text(String(letter)) .font(C2VFont.labelSmall) .foregroundColor(C2VColor.ink) // Enlarged tap target: the whole rail width is tappable. .frame(maxWidth: .infinity) .contentShape(Rectangle()) } .buttonStyle(.plain) } else { Text(String(letter)) .font(C2VFont.labelSmall) .foregroundColor(C2VColor.body) } } .frame(maxHeight: .infinity) .padding(.vertical, 2) } } .frame(maxWidth: .infinity, maxHeight: .infinity) } .frame(width: 32) .padding(.vertical, 4) } }
GitRust