Просмотр исходного кода

Various fixes and additions:
* Add fullstop to every mini hint
* Use conditional logic for all glucose values in hints
* Refactor all texts with \n\n

Deniz Cengiz 1 год назад
Родитель
Сommit
7d75e0c63f
29 измененных файлов с 230 добавлено и 182 удалено
  1. 23 25
      FreeAPS/Sources/Modules/AlgorithmAdvancedSettings/View/AlgorithmAdvancedSettingsRootView.swift
  2. 3 3
      FreeAPS/Sources/Modules/AutosensSettings/View/AutosensSettingsRootView.swift
  3. 2 2
      FreeAPS/Sources/Modules/AutotuneConfig/View/AutotuneConfigRootView.swift
  4. 4 4
      FreeAPS/Sources/Modules/BolusCalculatorConfig/View/BolusCalculatorConfigRootView.swift
  5. 3 3
      FreeAPS/Sources/Modules/CGM/View/CGMRootView.swift
  6. 3 3
      FreeAPS/Sources/Modules/CalendarEventSettings/View/CalendarEventSettingsRootView.swift
  7. 7 7
      FreeAPS/Sources/Modules/DynamicSettings/View/DynamicSettingsRootView.swift
  8. 3 3
      FreeAPS/Sources/Modules/GeneralSettings/View/UnitsLimitsSettingsRootView.swift
  9. 6 6
      FreeAPS/Sources/Modules/GlucoseNotificationSettings/View/GlucoseNotificationSettingsRootView.swift
  10. 1 1
      FreeAPS/Sources/Modules/HealthKit/View/AppleHealthKitRootView.swift
  11. 8 3
      FreeAPS/Sources/Modules/Home/View/HomeRootView.swift
  12. 3 3
      FreeAPS/Sources/Modules/LiveActivitySettings/View/LiveActivitySettingsRootView.swift
  13. 10 10
      FreeAPS/Sources/Modules/MealSettings/View/MealSettingsRootView.swift
  14. 16 7
      FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutConfigRootView.swift
  15. 2 2
      FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutFetchView.swift
  16. 2 2
      FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutUploadView.swift
  17. 1 1
      FreeAPS/Sources/Modules/NightscoutConfig/View/ProfileImport/ReviewInsulinActionView.swift
  18. 15 4
      FreeAPS/Sources/Modules/PumpConfig/View/PumpConfigRootView.swift
  19. 1 1
      FreeAPS/Sources/Modules/RemoteControlConfig/View/RemoteControlConfig.swift
  20. 14 14
      FreeAPS/Sources/Modules/SMBSettings/View/SMBSettingsRootView.swift
  21. 1 1
      FreeAPS/Sources/Modules/Settings/View/SettingsRootView.swift
  22. 1 1
      FreeAPS/Sources/Modules/Settings/View/TidepoolStartView.swift
  23. 1 1
      FreeAPS/Sources/Modules/ShortcutsConfig/View/ShortcutsConfigView.swift
  24. 14 11
      FreeAPS/Sources/Modules/TargetBehavoir/View/TargetBehavoirRootView.swift
  25. 0 1
      FreeAPS/Sources/Modules/UserInterfaceSettings/UserInterfaceSettingsStateModel.swift
  26. 80 57
      FreeAPS/Sources/Modules/UserInterfaceSettings/View/UserInterfaceSettingsRootView.swift
  27. 3 3
      FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigAppleWatchView.swift
  28. 2 2
      FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigGarminView.swift
  29. 1 1
      FreeAPS/Sources/Views/SettingInputSection.swift

+ 23 - 25
FreeAPS/Sources/Modules/AlgorithmAdvancedSettings/View/AlgorithmAdvancedSettingsRootView.swift

@@ -60,7 +60,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .decimal("maxDailySafetyMultiplier"),
                     label: NSLocalizedString("Max Daily Safety Multiplier", comment: "Max Daily Safety Multiplier"),
-                    miniHint: "Limits temporary basal rates to this percentage of your largest basal rate",
+                    miniHint: "Limits temporary basal rates to this percentage of your largest basal rate.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 300%").bold()
@@ -89,7 +89,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .decimal("currentBasalSafetyMultiplier"),
                     label: NSLocalizedString("Current Basal Safety Multiplier", comment: "Current Basal Safety Multiplier"),
-                    miniHint: "Limits temporary basal rates to this percentage of the current basal rate",
+                    miniHint: "Limits temporary basal rates to this percentage of the current basal rate.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 400%").bold()
@@ -117,7 +117,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .decimal("dia"),
                     label: "Duration of Insulin Action",
-                    miniHint: "Number of hours insulin is active in your body",
+                    miniHint: "Number of hours insulin is active in your body.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 6 hours").bold()
@@ -149,7 +149,7 @@ extension AlgorithmAdvancedSettings {
                     type: .conditionalDecimal("insulinPeakTime"),
                     label: NSLocalizedString("Use Custom Peak Time", comment: "Use Custom Peak Time"),
                     conditionalLabel: NSLocalizedString("Insulin Peak Time", comment: "Insulin Peak Time"),
-                    miniHint: "Sets time of insulin's peak effect",
+                    miniHint: "Sets time of insulin's peak effect.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: Set by Insulin Type").bold()
@@ -179,7 +179,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Skip Neutral Temps", comment: "Skip Neutral Temps"),
-                    miniHint: "Skip neutral temporary basal rates to reduce pump alerts",
+                    miniHint: "Skip neutral temporary basal rates to reduce pump alerts.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
@@ -204,7 +204,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Unsuspend If No Temp", comment: "Unsuspend If No Temp"),
-                    miniHint: "Automatically resumes pump after suspension",
+                    miniHint: "Automatically resumes pump after suspension.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
@@ -229,7 +229,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Suspend Zeros IOB", comment: "Suspend Zeros IOB"),
-                    miniHint: "Clears temporary basal rates and resets IOB when suspended",
+                    miniHint: "Clears temporary basal rates and resets IOB when suspended.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
@@ -284,21 +284,18 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .decimal("min5mCarbimpact"),
                     label: NSLocalizedString("Min 5m Carb Impact", comment: "Min 5m Carb Impact"),
-                    miniHint: "Estimates the impact of carb absorbtion after 5 minutes",
-                    verboseHint: VStack(spacing: 10) {
-                        //     let myText = (state.units == .mgdL ? 8.description : 8.formmatedAsMmolL) as! String + "Default:" + state.units.rawValue
-                        //     Text(myText).bold
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Min 5m Carb Impact sets the expected glucose rise from carbs over 5 minutes when absorption isn't obvious from glucose data."
-                            )
-                            Text(
-                                "The default value of 8 mg/dL per 5 minutes corresponds to an absorption rate of 24g of carbs per hour."
-                            )
-                            Text(
-                                "This setting helps the system estimate how much glucose your body is absorbing, even when it's not immediately visible in your glucose data, ensuring more accurate insulin dosing during carb absorption."
-                            )
-                        }
+                    miniHint: "Estimates the impact of carb absorbtion after 5 minutes.",
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
+                        Text(
+                            "Min 5m Carb Impact sets the expected glucose rise from carbs over 5 minutes when absorption isn't obvious from glucose data."
+                        )
+                        Text(
+                            "The default value of 8 mg/dL per 5 minutes corresponds to an absorption rate of 24g of carbs per hour."
+                        )
+                        Text(
+                            "This setting helps the system estimate how much glucose your body is absorbing, even when it's not immediately visible in your glucose data, ensuring more accurate insulin dosing during carb absorption."
+                        )
                     }
                 )
 
@@ -316,7 +313,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .decimal("remainingCarbsFraction"),
                     label: NSLocalizedString("Remaining Carbs Percentage", comment: "Remaining Carbs Percentage"),
-                    miniHint: "% of carbs still available if no absorption is detected",
+                    miniHint: "Percentage of carbs still available if no absorption is detected.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 100%").bold()
@@ -343,7 +340,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .decimal("remainingCarbsCap"),
                     label: NSLocalizedString("Remaining Carbs Cap", comment: "Remaining Carbs Cap"),
-                    miniHint: "Maximum amount of carbs still available if no absorption is detected",
+                    miniHint: "Maximum amount of carbs still available if no absorption is detected.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 90g").bold()
@@ -370,7 +367,7 @@ extension AlgorithmAdvancedSettings {
                     units: state.units,
                     type: .decimal("noisyCGMTargetMultiplier"),
                     label: NSLocalizedString("Noisy CGM Target Increase", comment: "Noisy CGM Target Increase"),
-                    miniHint: "Increase glucose target when noisy CGM data detected%",
+                    miniHint: "Increase glucose target when noisy CGM data detected.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 130%").bold()
@@ -380,6 +377,7 @@ extension AlgorithmAdvancedSettings {
                         Text(
                             "This helps reduce the risk of incorrect insulin dosing based on inaccurate sensor data, ensuring safer insulin adjustments during periods of poor CGM accuracy."
                         )
+                        Text("Note: A CGM is considered noisy when it provides inconsistent readings.")
                     }
                 )
             }

+ 3 - 3
FreeAPS/Sources/Modules/AutosensSettings/View/AutosensSettingsRootView.swift

@@ -48,7 +48,7 @@ extension AutosensSettings {
                     units: state.units,
                     type: .decimal("autosensMax"),
                     label: NSLocalizedString("Autosens Max", comment: "Autosens Max"),
-                    miniHint: "The higher limit of the Autosens Ratio",
+                    miniHint: "The higher limit of the Autosens Ratio.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 120%").bold()
@@ -79,7 +79,7 @@ extension AutosensSettings {
                     units: state.units,
                     type: .decimal("autosensMin"),
                     label: NSLocalizedString("Autosens Min", comment: "Autosens Min"),
-                    miniHint: "The lower limit of the Autosens Ratio",
+                    miniHint: "The lower limit of the Autosens Ratio.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 80%").bold()
@@ -109,7 +109,7 @@ extension AutosensSettings {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Rewind Resets Autosens", comment: "Rewind Resets Autosens"),
-                    miniHint: "Pump rewind initiates a reset in Autosens Ratio",
+                    miniHint: "Pump rewind initiates a reset in Autosens Ratio.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: ON").bold()
                         Text("Medtronic Users Only").bold()

+ 2 - 2
FreeAPS/Sources/Modules/AutotuneConfig/View/AutotuneConfigRootView.swift

@@ -70,7 +70,7 @@ extension AutotuneConfig {
                     units: state.units,
                     type: .boolean,
                     label: "Use Autotune",
-                    miniHint: "It is not advised to use Autotune with Trio",
+                    miniHint: "It is not advised to use Autotune with Trio.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("It is not advised to use Autotune with Trio").bold()
@@ -95,7 +95,7 @@ extension AutotuneConfig {
                         units: state.units,
                         type: .boolean,
                         label: "Only Autotune Basal Insulin",
-                        miniHint: "Restricts Autotune adjustments to only basal settings",
+                        miniHint: "Restricts Autotune adjustments to only basal settings.",
                         verboseHint: Text("Restricts Autotune adjustments to only basal settings.")
                     )
                 }

+ 4 - 4
FreeAPS/Sources/Modules/BolusCalculatorConfig/View/BolusCalculatorConfigRootView.swift

@@ -62,7 +62,7 @@ extension BolusCalculatorConfig {
                     units: state.units,
                     type: .boolean,
                     label: "Display Meal Presets",
-                    miniHint: "Allows you to create and save preset meals",
+                    miniHint: "Allows you to create and save preset meals.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("Enabling this feature allows you to create and save preset meals.")
@@ -83,7 +83,7 @@ extension BolusCalculatorConfig {
                     units: state.units,
                     type: .decimal("overrideFactor"),
                     label: "Recommended Bolus Percentage",
-                    miniHint: "Percent of bolus used in bolus calculator",
+                    miniHint: "Percentage of bolus used in bolus calculator.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 70%").bold()
@@ -115,7 +115,7 @@ extension BolusCalculatorConfig {
                     type: .conditionalDecimal("fattyMealFactor"),
                     label: "Enable Fatty Meal Option",
                     conditionalLabel: "Fatty Meal Bolus Percentage",
-                    miniHint: "\"Fatty Meal\" option appears in the bolus calculator",
+                    miniHint: "\"Fatty Meal\" option appears in the bolus calculator.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
@@ -148,7 +148,7 @@ extension BolusCalculatorConfig {
                     type: .conditionalDecimal("sweetMealFactor"),
                     label: "Enable Super Bolus Option",
                     conditionalLabel: "Super Bolus Percentage",
-                    miniHint: "\"Super Bolus\" option appears in the bolus calculator",
+                    miniHint: "\"Super Bolus\" option appears in the bolus calculator.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()

+ 3 - 3
FreeAPS/Sources/Modules/CGM/View/CGMRootView.swift

@@ -50,7 +50,7 @@ extension CGM {
                                     }
                                 }.padding(.top)
 
-                                HStack(alignment: .top) {
+                                HStack(alignment: .center) {
                                     Text(
                                         "Select your CGM"
                                     )
@@ -165,7 +165,7 @@ extension CGM {
                                     Text("CGM is not used as heartbeat.").padding(.top)
                                 }
 
-                                HStack(alignment: .top) {
+                                HStack(alignment: .center) {
                                     Text(
                                         "A heartbeat tells Trio to start a loop cycle. \nThis is required to keep looping."
                                     )
@@ -215,7 +215,7 @@ extension CGM {
                         units: state.units,
                         type: .boolean,
                         label: "Smooth Glucose Value",
-                        miniHint: "Smooth CGM readings using Savitzky-Golay filtering",
+                        miniHint: "Smooth CGM readings using Savitzky-Golay filtering.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()

+ 3 - 3
FreeAPS/Sources/Modules/CalendarEventSettings/View/CalendarEventSettingsRootView.swift

@@ -48,7 +48,7 @@ extension CalendarEventSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Create Events in Calendar",
-                    miniHint: "Uses calendar events to display current data",
+                    miniHint: "Uses calendar events to display current data.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
@@ -91,7 +91,7 @@ extension CalendarEventSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Display Emojis as Labels",
-                        miniHint: "Emojis used instead of text for data labels",
+                        miniHint: "Emojis used instead of text for data labels.",
                         verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
                             VStack(alignment: .leading, spacing: 5) {
@@ -126,7 +126,7 @@ extension CalendarEventSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Display IOB and COB",
-                        miniHint: "Include IOB & COB in the calendar event data",
+                        miniHint: "Include IOB & COB in the calendar event data.",
                         verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
                             Text(

+ 7 - 7
FreeAPS/Sources/Modules/DynamicSettings/View/DynamicSettingsRootView.swift

@@ -106,7 +106,7 @@ extension DynamicSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Activate Dynamic CR (Carb Ratio)",
-                        miniHint: "Dynamically adjusts your Carb Ratio (CR)",
+                        miniHint: "Dynamically adjusts your Carb Ratio (CR).",
                         verboseHint:
 
                         VStack(alignment: .leading, spacing: 10) {
@@ -140,7 +140,7 @@ extension DynamicSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Use Sigmoid Formula",
-                        miniHint: "Adjusts ISF using a sigmoid-shaped curve",
+                        miniHint: "Adjusts ISF using a sigmoid-shaped curve.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
@@ -177,7 +177,7 @@ extension DynamicSettings {
                             units: state.units,
                             type: .decimal("adjustmentFactor"),
                             label: "Adjustment Factor (AF)",
-                            miniHint: "Influences the rate of Dynamic ISF (Sensitivity) adjustments",
+                            miniHint: "Influences the rate of Dynamic ISF (Sensitivity) adjustments.",
                             verboseHint:
                             VStack(alignment: .leading, spacing: 10) {
                                 Text("Default: 80%").bold()
@@ -207,7 +207,7 @@ extension DynamicSettings {
                             units: state.units,
                             type: .decimal("adjustmentFactorSigmoid"),
                             label: "Sigmoid Adjustment Factor",
-                            miniHint: "Influences the rate of dynamic sensitivity adjustments for Sigmoid",
+                            miniHint: "Influences the rate of dynamic sensitivity adjustments for Sigmoid.",
                             verboseHint:
                             VStack(alignment: .leading, spacing: 10) {
                                 Text("Default: 50%").bold()
@@ -241,7 +241,7 @@ extension DynamicSettings {
                         units: state.units,
                         type: .decimal("weightPercentage"),
                         label: "Weighted Average of TDD",
-                        miniHint: "Weight of 24-hr TDD against 10-day TDD",
+                        miniHint: "Weight of 24-hr TDD against 10-day TDD.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 65%").bold()
@@ -270,7 +270,7 @@ extension DynamicSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Adjust Basal",
-                        miniHint: "Use Dynamic Ratio to adjust basal rates",
+                        miniHint: "Use Dynamic Ratio to adjust basal rates.",
                         verboseHint: VStack(spacing: 10) {
                             Text("Default: OFF").bold()
                             Text(
@@ -300,7 +300,7 @@ extension DynamicSettings {
                         units: state.units,
                         type: .decimal("threshold_setting"),
                         label: "Minimum Safety Threshold",
-                        miniHint: "Increase the safety threshold used to suspend insulin delivery",
+                        miniHint: "Increase the safety threshold used to suspend insulin delivery.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: Set by Algorithm").bold()

+ 3 - 3
FreeAPS/Sources/Modules/GeneralSettings/View/UnitsLimitsSettingsRootView.swift

@@ -58,7 +58,7 @@ extension UnitsLimitsSettings {
                     units: state.units,
                     type: .decimal("maxIOB"),
                     label: NSLocalizedString("Max IOB", comment: "Max IOB"),
-                    miniHint: "Maximum units of insulin allowed active at any given time",
+                    miniHint: "Maximum units of insulin allowed active at any given time.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 0 units").bold()
@@ -91,7 +91,7 @@ extension UnitsLimitsSettings {
                     units: state.units,
                     type: .decimal("maxBolus"),
                     label: "Max Bolus",
-                    miniHint: "Largest bolus of insulin allowed",
+                    miniHint: "Largest bolus of insulin allowed.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 10 units").bold()
@@ -138,7 +138,7 @@ extension UnitsLimitsSettings {
                     units: state.units,
                     type: .decimal("maxCOB"),
                     label: NSLocalizedString("Max COB", comment: "Max COB"),
-                    miniHint: "Max carbs Trio can use in dosing calculations",
+                    miniHint: "Max carbs Trio can use in dosing calculations.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 120 carbs").bold()

+ 6 - 6
FreeAPS/Sources/Modules/GlucoseNotificationSettings/View/GlucoseNotificationSettingsRootView.swift

@@ -70,7 +70,7 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Show Glucose App Badge",
-                    miniHint: "Show your current glucose on Trio app icon",
+                    miniHint: "Show your current glucose on Trio app icon.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("This will add your current glucose on the top right of your Trio icon as a red notification badge.")
@@ -92,7 +92,7 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Always Notify Glucose",
-                    miniHint: "Trigger a notification every time your glucose is updated",
+                    miniHint: "Trigger a notification every time your glucose is updated.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("A notification will be triggered every time your glucose is updated in Trio.")
@@ -113,7 +113,7 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Play Alarm Sound",
-                    miniHint: "Alarm with every Trio notification",
+                    miniHint: "Alarm with every Trio notification.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("This will cause a sound to be triggered by every Trio notification.")
@@ -134,7 +134,7 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Add Glucose Source to Alarm",
-                    miniHint: "Source of the glucose reading will be added to the notification",
+                    miniHint: "Source of the glucose reading will be added to the notification.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("The source of the glucose reading will be added to the notification.")
@@ -234,9 +234,9 @@ extension GlucoseNotificationSettings {
                         .frame(maxWidth: .infinity)
                     }
 
-                    HStack(alignment: .top) {
+                    HStack(alignment: .center) {
                         Text(
-                            "Sets the lower and upper limit for glucose alarms"
+                            "Sets the lower and upper limit for glucose alarms."
                         )
                         .lineLimit(nil)
                         .font(.footnote)

+ 1 - 1
FreeAPS/Sources/Modules/HealthKit/View/AppleHealthKitRootView.swift

@@ -47,7 +47,7 @@ extension AppleHealthKit {
                     units: state.units,
                     type: .boolean,
                     label: "Connect to Apple Health",
-                    miniHint: "Allow Trio to read from and write to Apple Health",
+                    miniHint: "Allow Trio to read from and write to Apple Health.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()

+ 8 - 3
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -821,9 +821,14 @@ extension Home {
                         List {
                             DefinitionRow(
                                 term: "Cone of Uncertainty",
-                                definition: Text(
-                                    "For simplicity reasons, oref's various forecast curves are displayed as a \"Cone of Uncertainty\" that depicts a possible, forecasted range of future glucose fluctuation based on the current data and the algothim's result.\n\nTo modify the forecast display type, go to Trio Settings > Features > User Interface > Forecast Display Type."
-                                ),
+                                definition: VStack {
+                                    Text(
+                                        "For simplicity reasons, oref's various forecast curves are displayed as a \"Cone of Uncertainty\" that depicts a possible, forecasted range of future glucose fluctuation based on the current data and the algothim's result."
+                                    )
+                                    Text(
+                                        "Note: To modify the forecast display type, go to Trio Settings > Features > User Interface > Forecast Display Type."
+                                    )
+                                },
                                 color: Color.blue.opacity(0.5)
                             )
                         }

+ 3 - 3
FreeAPS/Sources/Modules/LiveActivitySettings/View/LiveActivitySettingsRootView.swift

@@ -75,7 +75,7 @@ extension LiveActivitySettings {
                         units: state.units,
                         type: .boolean,
                         label: "Enable Live Activity",
-                        miniHint: "Display customizable data on Lock Screen and Dynamic Island",
+                        miniHint: "Display customizable data on Lock Screen and Dynamic Island.",
                         verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
                             VStack(alignment: .leading, spacing: 10) {
@@ -109,9 +109,9 @@ extension LiveActivitySettings {
                                     }
                                 }.padding(.top)
 
-                                HStack(alignment: .top) {
+                                HStack(alignment: .center) {
                                     Text(
-                                        "Choose between simple or detailed style"
+                                        "Choose between simple or detailed style."
                                     )
                                     .font(.footnote)
                                     .foregroundColor(.secondary)

+ 10 - 10
FreeAPS/Sources/Modules/MealSettings/View/MealSettingsRootView.swift

@@ -161,9 +161,9 @@ extension MealSettings {
                                 }
                             }
 
-                            HStack(alignment: .top) {
+                            HStack(alignment: .center) {
                                 Text(
-                                    "Set limits for each type of macro per meal entry"
+                                    "Set limits for each type of macro per meal entry."
                                 )
                                 .lineLimit(nil)
                                 .font(.footnote)
@@ -208,7 +208,7 @@ extension MealSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Enable Fat and Protein Entries",
-                    miniHint: "Allows you to add fat and protein macros to meals",
+                    miniHint: "Allows you to add fat and protein macros to meals.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         VStack(alignment: .leading, spacing: 10) {
@@ -222,15 +222,15 @@ extension MealSettings {
                                 )
                             }
                         }
-                        VStack(spacing: 5) {
+                        VStack(alignment: .center, spacing: 5) {
                             Text("Fat Conversion").bold()
                             Text("𝑭 = fat(g) × 90%")
                         }
-                        VStack(spacing: 5) {
+                        VStack(alignment: .center, spacing: 5) {
                             Text("Protein Conversion").bold()
                             Text("𝑷 = protein(g) × 40%")
                         }
-                        VStack(spacing: 5) {
+                        VStack(alignment: .center, spacing: 5) {
                             Text("FPU Conversion").bold()
                             Text("𝑭 + 𝑷 = g CHO")
                         }
@@ -263,7 +263,7 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("delay"),
                         label: "Fat and Protein Delay",
-                        miniHint: "Delay between fat & protein entry and first FPU entry",
+                        miniHint: "Delay between fat & protein entry and first FPU entry.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 60 min").bold()
@@ -290,7 +290,7 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("timeCap"),
                         label: "Maximum Duration",
-                        miniHint: "Set the maximum timeframe to extend FPUs",
+                        miniHint: "Set the maximum timeframe to extend FPUs.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 8 hours").bold()
@@ -320,7 +320,7 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("minuteInterval"),
                         label: "Spread Interval",
-                        miniHint: "Time interval between FPUs",
+                        miniHint: "Time interval between FPUs.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 30 minutes").bold()
@@ -348,7 +348,7 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("individualAdjustmentFactor"),
                         label: "Fat and Protein Percentage",
-                        miniHint: "Influences the conversion rate used in the Warsaw Method",
+                        miniHint: "Influences the conversion rate used in the Warsaw Method.",
                         verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 50%").bold()
                             VStack(spacing: 10) {

+ 16 - 7
FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutConfigRootView.swift

@@ -102,9 +102,9 @@ extension NightscoutConfig {
                                 .buttonStyle(.bordered)
                                 .disabled(state.url.isEmpty || state.connecting)
 
-                            HStack(alignment: .top) {
+                            HStack(alignment: .center) {
                                 Text(
-                                    "Import therapy settings from Nightscout\nSee hint for the list of settings available for import"
+                                    "Import therapy settings from Nightscout.\nSee hint for the list of settings available for import."
                                 )
                                 .font(.footnote)
                                 .foregroundColor(.secondary)
@@ -115,9 +115,18 @@ extension NightscoutConfig {
                                         hintLabel = "Import Settings from Nightscout"
                                         selectedVerboseHint =
                                             AnyView(
-                                                Text(
-                                                    "This will overwrite the following Trio therapy settings:\n\n• Basal Rates\n• Insulin Sensitivities\n• Carb Ratios\n• Target Glucose\n• Duration of Insulin Action"
-                                                )
+                                                VStack(spacing: 10) {
+                                                    Text(
+                                                        "This will overwrite the following Trio therapy settings:"
+                                                    )
+                                                    VStack {
+                                                        Text("• Basal Rates")
+                                                        Text("• Insulin Sensitivities")
+                                                        Text("• Carb Ratios")
+                                                        Text("• Target Glucose")
+                                                        Text("• Duration of Insulin Action")
+                                                    }
+                                                }
                                             )
                                         shouldDisplayHint.toggle()
                                     },
@@ -146,9 +155,9 @@ extension NightscoutConfig {
                                     .buttonStyle(.bordered)
                                     .disabled(state.url.isEmpty || state.connecting || state.backfilling)
 
-                                HStack(alignment: .top) {
+                                HStack(alignment: .center) {
                                     Text(
-                                        "Backfill missing glucose data from Nightscout"
+                                        "Backfill missing glucose data from Nightscout."
                                     )
                                     .font(.footnote)
                                     .foregroundColor(.secondary)

+ 2 - 2
FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutFetchView.swift

@@ -45,7 +45,7 @@ struct NightscoutFetchView: View {
                 units: state.units,
                 type: .boolean,
                 label: "Allow Fetching from Nightscout",
-                miniHint: "Enable fetching of selected data sets from Nightscout",
+                miniHint: "Enable fetching of selected data sets from Nightscout.",
                 verboseHint: VStack(alignment: .leading, spacing: 10) {
                     Text("Default: OFF").bold()
                     Text(
@@ -70,7 +70,7 @@ struct NightscoutFetchView: View {
                     units: state.units,
                     type: .boolean,
                     label: "Allow Remote Control of Trio",
-                    miniHint: "Enables selected remote control capabilities via Nightscout",
+                    miniHint: "Enables selected remote control capabilities via Nightscout.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("When enabled you allow the following remote functions through announcements from Nightscout:")

+ 2 - 2
FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutUploadView.swift

@@ -45,7 +45,7 @@ struct NightscoutUploadView: View {
                 units: state.units,
                 type: .boolean,
                 label: "Allow Uploading to Nightscout",
-                miniHint: "Enables upload of selected data sets to Nightscout",
+                miniHint: "Enables upload of selected data sets to Nightscout.",
                 verboseHint:
                 VStack(alignment: .leading, spacing: 10) {
                     Text("Default: OFF").bold()
@@ -78,7 +78,7 @@ struct NightscoutUploadView: View {
                     units: state.units,
                     type: .boolean,
                     label: "Upload Glucose",
-                    miniHint: "Enables uploading of CGM readings to Nightscout",
+                    miniHint: "Enables uploading of CGM readings to Nightscout.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("Enabling this setting allows CGM readings from Trio to be used in Nightscout.")

+ 1 - 1
FreeAPS/Sources/Modules/NightscoutConfig/View/ProfileImport/ReviewInsulinActionView.swift

@@ -49,7 +49,7 @@ struct ReviewInsulinActionView: BaseView {
                 units: state.units,
                 type: .decimal("dia"),
                 label: "Duration of Insulin Action",
-                miniHint: "Number of hours insulin is active in your body",
+                miniHint: "Number of hours insulin is active in your body.",
                 verboseHint:
                 VStack(alignment: .leading, spacing: 10) {
                     Text("Default: 6 hours").bold()

+ 15 - 4
FreeAPS/Sources/Modules/PumpConfig/View/PumpConfigRootView.swift

@@ -62,7 +62,7 @@ extension PumpConfig {
                                         .frame(maxWidth: .infinity, alignment: .center)
                                         .buttonStyle(.bordered)
 
-                                    HStack(alignment: .top) {
+                                    HStack(alignment: .center) {
                                         Text(
                                             "Pair a compatible pump with Trio. See details for available devices."
                                         )
@@ -75,9 +75,20 @@ extension PumpConfig {
                                                 hintLabel = "Pump Pairing to Trio"
                                                 selectedVerboseHint =
                                                     AnyView(
-                                                        Text(
-                                                            "Current Pump Models Supported:\n\n•Medtronic\n•Omnipod Eros\n•Omnipod Dash\n•Pump Simulator\n\nNote: If using a pump simulator, you will not have continuous readings from the CGM in Trio. Using a pump simulator is only advisable for becoming familiar with the app user interface. It will not give you insight on how the algorithm will respond."
-                                                        )
+                                                        VStack(alignment: .leading, spacing: 10) {
+                                                            Text(
+                                                                "Current Pump Models Supported:"
+                                                            )
+                                                            VStack {
+                                                                Text("• Medtronic")
+                                                                Text("• Omnipod Eros")
+                                                                Text("• Omnipod Dash")
+                                                                Text("• Pump Simulator")
+                                                            }
+                                                            Text(
+                                                                "Note: If using a pump simulator, you will not have continuous readings from the CGM in Trio. Using a pump simulator is only advisable for becoming familiar with the app user interface. It will not give you insight on how the algorithm will respond."
+                                                            )
+                                                        }
                                                     )
                                                 shouldDisplayHint.toggle()
                                             },

+ 1 - 1
FreeAPS/Sources/Modules/RemoteControlConfig/View/RemoteControlConfig.swift

@@ -51,7 +51,7 @@ extension RemoteControlConfig {
                     units: state.units,
                     type: .boolean,
                     label: "Enable Remote Control",
-                    miniHint: "Allow Trio to receive instructions, such as boluses and temp targets, from Loop Follow remotely \n Default: OFF",
+                    miniHint: "Allow Trio to receive instructions, such as boluses and temp targets, from Loop Follow remotely.",
                     verboseHint: VStack(spacing: 10) {
                         Text("Default: OFF").bold()
                         Text(

+ 14 - 14
FreeAPS/Sources/Modules/SMBSettings/View/SMBSettingsRootView.swift

@@ -48,7 +48,7 @@ extension SMBSettings {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Enable SMB Always", comment: "Enable SMB Always"),
-                    miniHint: "Allow SMBs at all times except when a high Temp Target is set",
+                    miniHint: "Allow SMBs at all times except when a high Temp Target is set.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text(
@@ -73,7 +73,7 @@ extension SMBSettings {
                         units: state.units,
                         type: .boolean,
                         label: NSLocalizedString("Enable SMB With COB", comment: "Enable SMB With COB"),
-                        miniHint: "Allow SMB when carbs are on board",
+                        miniHint: "Allow SMB when carbs are on board.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
@@ -100,12 +100,12 @@ extension SMBSettings {
                         units: state.units,
                         type: .boolean,
                         label: NSLocalizedString("Enable SMB With Temptarget", comment: "Enable SMB With Temptarget"),
-                        miniHint: "Allow SMB when a manual Temporary Target is set under 100 mg/dL (5.5 mmol/L)",
+                        miniHint: "Allow SMB when a manual Temporary Target is set under \(state.units == .mgdL ? "100" : 100.formattedAsMmol ?? "100") \(state.units.rawValue).",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
                             Text(
-                                "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) at times when a manual Temporary Target under 100 mg/dL (5.5 mmol/L) is set."
+                                "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) at times when a manual Temporary Target under \(state.units == .mgdL ? "100" : 100.formattedAsMmol ?? "100") \(state.units.rawValue) is set."
                             )
                             Text(
                                 "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
@@ -127,7 +127,7 @@ extension SMBSettings {
                         units: state.units,
                         type: .boolean,
                         label: NSLocalizedString("Enable SMB After Carbs", comment: "Enable SMB After Carbs"),
-                        miniHint: "Allow SMB for 6 hrs after carbs are logged",
+                        miniHint: "Allow SMB for 6 hrs after carbs are logged.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
@@ -155,7 +155,7 @@ extension SMBSettings {
                         type: .conditionalDecimal("enableSMB_high_bg_target"),
                         label: NSLocalizedString("Enable SMB With High BG", comment: "Enable SMB With High BG"),
                         conditionalLabel: "High BG Target",
-                        miniHint: "Allow SMB when glucose is above the High BG Target value",
+                        miniHint: "Allow SMB when glucose is above the High BG Target value.",
                         verboseHint:
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
@@ -189,12 +189,12 @@ extension SMBSettings {
                         "Allow SMB With High Temptarget",
                         comment: "Allow SMB With High Temptarget"
                     ),
-                    miniHint: "Allow SMB when a manual Temporary Target is set greater than 100 mg/dL (5.5 mmol/L)",
+                    miniHint: "Allow SMB when a manual Temporary Target is set greater than \(state.units == .mgdL ? "100" : 100.formattedAsMmol ?? "100") \(state.units.rawValue).",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text(
-                            "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when a manual Temporary Target above 100 mg/dL (5.5 mmol/L) is set."
+                            "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when a manual Temporary Target above \(state.units == .mgdL ? "100" : 100.formattedAsMmol ?? "100") \(state.units.rawValue) is set."
                         )
                         Text(
                             "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
@@ -219,7 +219,7 @@ extension SMBSettings {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Enable UAM", comment: "Enable UAM"),
-                    miniHint: "Automatically adjust insulin delivery when carbs are not announced or miscalculated",
+                    miniHint: "Automatically adjust insulin delivery when carbs are not announced or miscalculated.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
@@ -249,7 +249,7 @@ extension SMBSettings {
                     units: state.units,
                     type: .decimal("maxSMBBasalMinutes"),
                     label: NSLocalizedString("Max SMB Basal Minutes", comment: "Max SMB Basal Minutes"),
-                    miniHint: "Limits the size of a single Super Micro Bolus (SMB) dose",
+                    miniHint: "Limits the size of a single Super Micro Bolus (SMB) dose.",
                     verboseHint: VStack(spacing: 10) {
                         VStack(alignment: .leading, spacing: 1) {
                             Text("Default: 30 minutes").bold()
@@ -292,7 +292,7 @@ extension SMBSettings {
                     units: state.units,
                     type: .decimal("maxUAMSMBBasalMinutes"),
                     label: NSLocalizedString("Max UAM Basal Minutes", comment: "Max UAM Basal Minutes"),
-                    miniHint: "Limits the size of a single Unannounced Meal (UAM) SMB dose",
+                    miniHint: "Limits the size of a single Unannounced Meal (UAM) SMB dose.",
                     verboseHint: VStack(spacing: 10) {
                         VStack(alignment: .leading, spacing: 1) {
                             Text("Default: 30 minutes").bold()
@@ -335,7 +335,7 @@ extension SMBSettings {
                     units: state.units,
                     type: .decimal("maxDeltaBGthreshold"),
                     label: NSLocalizedString("Max Delta-BG Threshold SMB", comment: "Max Delta-BG Threshold"),
-                    miniHint: "Disables SMBs if last two glucose values differ by more than this percent",
+                    miniHint: "Disables SMBs if last two glucose values differ by more than this percent.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 20% increase").bold()
@@ -360,7 +360,7 @@ extension SMBSettings {
                     units: state.units,
                     type: .decimal("smbDeliveryRatio"),
                     label: NSLocalizedString("SMB DeliveryRatio", comment: "SMB DeliveryRatio"),
-                    miniHint: "Limits % of total insulin required that can be given as SMB",
+                    miniHint: "Limits % of total insulin required that can be given as SMB.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 50%").bold()
@@ -388,7 +388,7 @@ extension SMBSettings {
                     units: state.units,
                     type: .decimal("smbInterval"),
                     label: NSLocalizedString("SMB Interval", comment: "SMB Interval"),
-                    miniHint: "Minimum minutes since the last SMB or manual bolus to allow an automated SMB",
+                    miniHint: "Minimum minutes since the last SMB or manual bolus to allow an automated SMB.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 3 min").bold()

+ 1 - 1
FreeAPS/Sources/Modules/Settings/View/SettingsRootView.swift

@@ -98,7 +98,7 @@ extension Settings {
                         units: state.units,
                         type: .boolean,
                         label: "Closed Loop",
-                        miniHint: "Enables automated insulin delivery \nRequires active CGM sensor session and connected pump",
+                        miniHint: "Enables automated insulin delivery. Requires active CGM sensor session and connected pump.",
                         verboseHint: VStack(spacing: 10) {
                             Text(
                                 "Running Trio in closed loop mode requires an active CGM sensor session and a connected pump. This enables automated insulin delivery."

+ 1 - 1
FreeAPS/Sources/Modules/Settings/View/TidepoolStartView.swift

@@ -67,7 +67,7 @@ struct TidepoolStartView: BaseView {
                             }
                         }
 
-                        HStack(alignment: .top) {
+                        HStack(alignment: .center) {
                             Text("You can connect Trio to seamlessly upload and manage your diabetes data on Tidepool.")
                                 .font(.footnote)
                                 .foregroundColor(.secondary)

+ 1 - 1
FreeAPS/Sources/Modules/ShortcutsConfig/View/ShortcutsConfigView.swift

@@ -70,7 +70,7 @@ extension ShortcutsConfig {
                     units: state.units,
                     type: .boolean,
                     label: "Allow Bolusing with Shortcuts",
-                    miniHint: "Automate boluses using the Shortcuts App",
+                    miniHint: "Automate boluses using the iOS Shortcuts App.",
                     verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         VStack(alignment: .leading, spacing: 10) {

+ 14 - 11
FreeAPS/Sources/Modules/TargetBehavoir/View/TargetBehavoirRootView.swift

@@ -54,15 +54,15 @@ extension TargetBehavoir {
                         "High Temp Target Raises Sensitivity",
                         comment: "High Temp Target Raises Sensitivity"
                     ),
-                    miniHint: "A Temp Target > 110 mg/dL increases sensitivity when glucose is above target",
+                    miniHint: "A Temp Target > \(state.units == .mgdL ? "110" : 110.formattedAsMmol ?? "110") \(state.units.rawValue) increases sensitivity when glucose is above target.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text(
-                            "When this feature is enabled, setting a temporary target above 110 mg/dL will decrease the Autosens Ratio used for ISF and basal adjustments, resulting in less insulin delivered overall. This scales with the temporary target set; the higher the temp target, the lower the Autosens Ratio used."
+                            "When this feature is enabled, setting a temporary target above \(state.units == .mgdL ? "110" : 110.formattedAsMmol ?? "110") \(state.units.rawValue) will decrease the Autosens Ratio used for ISF and basal adjustments, resulting in less insulin delivered overall. This scales with the temporary target set; the higher the temp target, the lower the Autosens Ratio used."
                         )
                         Text(
-                            "If Half Basal Exercise Target is set to 160, a temp target of 120 mg/dL uses an Autosens Ratio of 0.75. A temp target of 140 mg/dL uses an Autosens Ratio of 0.6."
+                            "If Half Basal Exercise Target is set to \(state.units == .mgdL ? "160" : 160.formattedAsMmol ?? "160") \(state.units.rawValue), a temp target of \(state.units == .mgdL ? "120" : 120.formattedAsMmol ?? "120") \(state.units.rawValue) uses an Autosens Ratio of 0.75. A temp target of \(state.units == .mgdL ? "140" : 140.formattedAsMmol ?? "140") \(state.units.rawValue) uses an Autosens Ratio of 0.6."
                         )
                         Text("Note: The effect of this can be adjusted with the Half Basal Exercise Target")
                     },
@@ -89,15 +89,15 @@ extension TargetBehavoir {
                         "Low Temp Target Lowers Sensitivity",
                         comment: "Low Temp Target Lowers Sensitivity"
                     ),
-                    miniHint: "Temp Target < 100 mg/dL decreases sensitivity when glucose is below target",
+                    miniHint: "Temp Target < \(state.units == .mgdL ? "100" : 100.formattedAsMmol ?? "100") \(state.units.rawValue) decreases sensitivity when glucose is below target.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text(
-                            "When this feature is enabled, setting a temporary target below 100 mg/dL will increase the Autosens Ratio used for ISF and basal adjustments, resulting in more insulin delivered overall. This scales with the temporary target set; the lower the Temp Target, the higher the Autosens Ratio used."
+                            "When this feature is enabled, setting a temporary target below \(state.units == .mgdL ? "100" : 100.formattedAsMmol ?? "100") \(state.units.rawValue) will increase the Autosens Ratio used for ISF and basal adjustments, resulting in more insulin delivered overall. This scales with the temporary target set; the lower the Temp Target, the higher the Autosens Ratio used."
                         )
                         Text(
-                            "If Half Basal Exercise Target is 160, a Temp Target of 95 mg/dL uses an Autosens Ratio of 1.09. A Temp Target of 85 mg/dL uses an Autosens Ratio of 1.33."
+                            "If Half Basal Exercise Target is \(state.units == .mgdL ? "160" : 160.formattedAsMmol ?? "160") \(state.units.rawValue), a Temp Target of \(state.units == .mgdL ? "95" : 95.formattedAsMmol ?? "95") \(state.units.rawValue) uses an Autosens Ratio of 1.09. A Temp Target of \(state.units == .mgdL ? "85" : 85.formattedAsMmol ?? "85") \(state.units.rawValue) uses an Autosens Ratio of 1.33."
                         )
                         Text("Note: The effect of this can be adjusted with the Half Basal Exercise Target")
                     }
@@ -117,7 +117,7 @@ extension TargetBehavoir {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Sensitivity Raises Target", comment: "Sensitivity Raises Target"),
-                    miniHint: "Automatically raise target glucose if sensitivity is detected",
+                    miniHint: "Automatically raise target glucose if sensitivity is detected.",
                     verboseHint: VStack(spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("Automatically increase target glucose if it detects an increase in sensitivity.")
@@ -138,7 +138,7 @@ extension TargetBehavoir {
                     units: state.units,
                     type: .boolean,
                     label: NSLocalizedString("Resistance Lowers Target", comment: "Resistance Lowers Target"),
-                    miniHint: "Automatically lower target glucose if resistance is detected",
+                    miniHint: "Automatically lower target glucose if resistance is detected.",
                     verboseHint: VStack(spacing: 10) {
                         Text("Default: OFF").bold()
                         Text(
@@ -161,15 +161,18 @@ extension TargetBehavoir {
                     units: state.units,
                     type: .decimal("halfBasalExerciseTarget"),
                     label: NSLocalizedString("Half Basal Exercise Target", comment: "Half Basal Exercise Target"),
-                    miniHint: "Scales down your basal rate to 50% at this value",
+                    miniHint: "Scales down your basal rate to 50% at this value.",
                     verboseHint:
                     VStack(alignment: .leading, spacing: 10) {
-                        Text("Default: 160 mg/dL (8.9 mmol/L)").bold()
+                        Text(
+                            "Default: \(state.units == .mgdL ? "160" : 160.formattedAsMmol ?? "160") \(state.units.rawValue)"
+                        )
+                        .bold()
                         Text(
                             "The Half Basal Exercise Target allows you to scale down your basal insulin during exercise or scale up your basal insulin when eating soon when a temporary glucose target is set."
                         )
                         Text(
-                            "For example, at a temp target of 160 mg/dL, your basal is reduced to 50%, but this scales depending on the target (e.g., 75% at 120 mg/dL, 60% at 140 mg/dL)."
+                            "For example, at a temp target of \(state.units == .mgdL ? "160" : 160.formattedAsMmol ?? "160") \(state.units.rawValue), your basal is reduced to 50%, but this scales depending on the target (e.g., 75% at \(state.units == .mgdL ? "120" : 120.formattedAsMmol ?? "120") \(state.units.rawValue), 60% at \(state.units == .mgdL ? "140" : 140.formattedAsMmol ?? "140") \(state.units.rawValue))."
                         )
                         Text(
                             "Note: This setting is only utilized if the settings \"Low Temp Target Lowers Sensitivity\" OR \"High Temp Target Raises Sensitivity\" are enabled."

+ 0 - 1
FreeAPS/Sources/Modules/UserInterfaceSettings/UserInterfaceSettingsStateModel.swift

@@ -5,7 +5,6 @@ extension UserInterfaceSettings {
         @Published var overrideHbA1cUnit = false
         @Published var low: Decimal = 70
         @Published var high: Decimal = 180
-        @Published var hours: Decimal = 6
         @Published var xGridLines = false
         @Published var yGridLines: Bool = false
         @Published var oneDimensionalGraph = false

Разница между файлами не показана из-за своего большого размера
+ 80 - 57
FreeAPS/Sources/Modules/UserInterfaceSettings/View/UserInterfaceSettingsRootView.swift


+ 3 - 3
FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigAppleWatchView.swift

@@ -48,7 +48,7 @@ struct WatchConfigAppleWatchView: View {
                             }
                         }.padding(.top)
 
-                        HStack(alignment: .top) {
+                        HStack(alignment: .center) {
                             Text(
                                 "Show the choosen dataitem on your Apple Watch."
                             )
@@ -88,7 +88,7 @@ struct WatchConfigAppleWatchView: View {
                 units: state.units,
                 type: .boolean,
                 label: "Show Protein and Fat",
-                miniHint: "Show protein and fat on the Apple Watch",
+                miniHint: "Show protein and fat on the Apple Watch.",
                 verboseHint: Text("When enabled, protein and fat will show in the carb entry screen of the Apple Watch")
             )
 
@@ -106,7 +106,7 @@ struct WatchConfigAppleWatchView: View {
                 units: state.units,
                 type: .boolean,
                 label: "Confirm Bolus Faster",
-                miniHint: "Removes validation for boluses sent from the paired apple watch",
+                miniHint: "Removes validation for boluses sent from the paired apple watch.",
                 verboseHint: Text(
                     "Enabling this feature removes the confirmation / validation step to initiate a bolus faster from the watch."
                 )

+ 2 - 2
FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigGarminView.swift

@@ -48,9 +48,9 @@ struct WatchConfigGarminView: View {
                             .frame(maxWidth: .infinity, alignment: .center)
                             .buttonStyle(.bordered)
 
-                        HStack(alignment: .top) {
+                        HStack(alignment: .center) {
                             Text(
-                                "Add a Garmin Device to Trio"
+                                "Add a Garmin Device to Trio."
                             )
                             .font(.footnote)
                             .foregroundColor(.secondary)

+ 1 - 1
FreeAPS/Sources/Views/SettingInputSection.swift

@@ -236,7 +236,7 @@ struct SettingInputSection<VerboseHint: View>: View {
     }
 
     private func hintSection(miniHint: String, shouldDisplayHint: Binding<Bool>, verboseHint: VerboseHint) -> some View {
-        HStack(alignment: .top) {
+        HStack(alignment: .center) {
             Text(miniHint)
                 .font(.footnote)
                 .foregroundColor(.secondary)