@@ -14,6 +14,7 @@ struct CalculatorView: View {
1414 @State private var bodyweight : String = " "
1515 @State private var useBW = false
1616 @State private var inputs : [ String : String ] = [ : ]
17+ @FocusState private var fieldFocused : Bool
1718
1819 private let ageBands = [ " 18-29 " , " 30-39 " , " 40-49 " , " 50+ " ]
1920
@@ -46,14 +47,21 @@ struct CalculatorView: View {
4647 . animation ( . snappy, value: useBW)
4748 }
4849 . background ( Theme . bg. ignoresSafeArea ( ) )
50+ . scrollDismissesKeyboard ( . interactively)
51+ . toolbar {
52+ ToolbarItemGroup ( placement: . keyboard) {
53+ Spacer ( )
54+ Button ( " Done " ) { fieldFocused = false } . bold ( ) . tint ( Theme . primary)
55+ }
56+ }
4957 }
5058
5159 private var controls : some View {
5260 VStack ( spacing: 10 ) {
5361 Picker ( " " , selection: $gender) { Text ( " Male " ) . tag ( Gender . male) ; Text ( " Female " ) . tag ( Gender . female) } . pickerStyle ( . segmented)
5462 Picker ( " " , selection: $ageBand) { ForEach ( ageBands, id: \. self) { Text ( $0) . tag ( $0) } } . pickerStyle ( . segmented)
5563 HStack ( spacing: 10 ) {
56- TextField ( " Bodyweight (kg) " , text: $bodyweight) . keyboardType ( . numberPad)
64+ TextField ( " Bodyweight (kg) " , text: $bodyweight) . keyboardType ( . numberPad) . focused ( $fieldFocused )
5765 . padding ( . horizontal, 14 ) . padding ( . vertical, 10 )
5866 . background ( Theme . surface, in: Capsule ( ) ) . overlay ( Capsule ( ) . strokeBorder ( Theme . stroke) )
5967 HStack ( spacing: 0 ) {
@@ -108,6 +116,7 @@ struct CalculatorView: View {
108116 Spacer ( )
109117 if let lvl, let lv = store. level ( number: lvl) { LevelPill ( name: lv. shortName, number: lvl) }
110118 TextField ( placeholder ( c. benchmark) , text: Binding ( get: { inputs [ c. id] ?? " " } , set: { inputs [ c. id] = $0 } ) )
119+ . focused ( $fieldFocused)
111120 . keyboardType ( c. benchmark. testType == " time " ? . numbersAndPunctuation : . numberPad)
112121 . multilineTextAlignment ( . trailing) . frame ( width: 86 )
113122 . padding ( . horizontal, 12 ) . padding ( . vertical, 9 )
0 commit comments