Browse Source

Rework default text alignments and cleanup

Deniz Cengiz 1 year ago
parent
commit
965df47c31
18 changed files with 474 additions and 522 deletions
  1. 84 94
      FreeAPS/Sources/Modules/AlgorithmAdvancedSettings/View/AlgorithmAdvancedSettingsRootView.swift
  2. 23 25
      FreeAPS/Sources/Modules/AutosensSettings/View/AutosensSettingsRootView.swift
  3. 5 6
      FreeAPS/Sources/Modules/AutotuneConfig/View/AutotuneConfigRootView.swift
  4. 37 40
      FreeAPS/Sources/Modules/BolusCalculatorConfig/View/BolusCalculatorConfigRootView.swift
  5. 13 14
      FreeAPS/Sources/Modules/CGM/View/CGMRootView.swift
  6. 14 15
      FreeAPS/Sources/Modules/CalendarEventSettings/View/CalendarEventSettingsRootView.swift
  7. 101 107
      FreeAPS/Sources/Modules/DynamicSettings/View/DynamicSettingsRootView.swift
  8. 29 34
      FreeAPS/Sources/Modules/GeneralSettings/View/UnitsLimitsSettingsRootView.swift
  9. 4 4
      FreeAPS/Sources/Modules/GlucoseNotificationSettings/View/GlucoseNotificationSettingsRootView.swift
  10. 4 5
      FreeAPS/Sources/Modules/HealthKit/View/AppleHealthKitRootView.swift
  11. 2 2
      FreeAPS/Sources/Modules/LiveActivitySettings/View/LiveActivitySettingsRootView.swift
  12. 30 33
      FreeAPS/Sources/Modules/MealSettings/View/MealSettingsRootView.swift
  13. 2 2
      FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutFetchView.swift
  14. 12 13
      FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutUploadView.swift
  15. 6 7
      FreeAPS/Sources/Modules/NightscoutConfig/View/ProfileImport/ReviewInsulinActionView.swift
  16. 78 88
      FreeAPS/Sources/Modules/SMBSettings/View/SMBSettingsRootView.swift
  17. 1 1
      FreeAPS/Sources/Modules/ShortcutsConfig/View/ShortcutsConfigView.swift
  18. 29 32
      FreeAPS/Sources/Modules/TargetBehavoir/View/TargetBehavoirRootView.swift

+ 84 - 94
FreeAPS/Sources/Modules/AlgorithmAdvancedSettings/View/AlgorithmAdvancedSettingsRootView.swift

@@ -61,15 +61,14 @@ extension AlgorithmAdvancedSettings {
                     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",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 300%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "This setting restricts the maximum temporary basal rate Trio can set. At the default of 300%, it caps it at 3 times your highest programmed basal rate."
-                            )
-                            Text("It serves as a safety limit, ensuring no temporary basal rates exceed safe levels.")
-                            Text("Warning: Increasing this setting is not advised.").bold()
-                        }
+                        Text(
+                            "This setting restricts the maximum temporary basal rate Trio can set. At the default of 300%, it caps it at 3 times your highest programmed basal rate."
+                        )
+                        Text("It serves as a safety limit, ensuring no temporary basal rates exceed safe levels.")
+                        Text("Warning: Increasing this setting is not advised.").bold()
                     }
                 )
 
@@ -91,17 +90,16 @@ extension AlgorithmAdvancedSettings {
                     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",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 400%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "This limits the automatic adjustment of the temporary basal rate to this percentage of the current hourly profile basal rate at the time of the loop cycle."
-                            )
-                            Text(
-                                "This prevents excessive dosing, especially during times of variable insulin sensitivity, enhancing safety."
-                            )
-                            Text("Warning: Increasing this setting is not advised.").bold()
-                        }
+                        Text(
+                            "This limits the automatic adjustment of the temporary basal rate to this percentage of the current hourly profile basal rate at the time of the loop cycle."
+                        )
+                        Text(
+                            "This prevents excessive dosing, especially during times of variable insulin sensitivity, enhancing safety."
+                        )
+                        Text("Warning: Increasing this setting is not advised.").bold()
                     }
                 )
 
@@ -120,20 +118,19 @@ extension AlgorithmAdvancedSettings {
                     type: .decimal("dia"),
                     label: "Duration of Insulin Action",
                     miniHint: "Number of hours insulin is active in your body",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 6 hours").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "The Duration of Insulin Action (DIA) defines how long your insulin continues to lower glucose readings after a dose."
-                            )
-                            Text(
-                                "This helps the system accurately track Insulin on Board (IOB), avoiding over- or under-corrections by considering the tail end of insulin's effect"
-                            )
-                            Text(
-                                "Tip: It is better to use Custom Peak Time rather than adjust your Duration of Insulin Action (DIA)"
-                            )
-                            Text("Warning: Decreasing this setting is not advised.").bold()
-                        }
+                        Text(
+                            "The Duration of Insulin Action (DIA) defines how long your insulin continues to lower glucose readings after a dose."
+                        )
+                        Text(
+                            "This helps the system accurately track Insulin on Board (IOB), avoiding over- or under-corrections by considering the tail end of insulin's effect"
+                        )
+                        Text(
+                            "Tip: It is better to use Custom Peak Time rather than adjust your Duration of Insulin Action (DIA)"
+                        )
+                        Text("Warning: Decreasing this setting is not advised.").bold()
                     }
                 )
 
@@ -153,19 +150,18 @@ extension AlgorithmAdvancedSettings {
                     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",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: Set by Insulin Type").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Insulin Peak Time defines when insulin is most effective in lowering glucose, set in minutes after dosing."
-                            )
-                            Text(
-                                "This peak informs the system when to expect the most potent glucose-lowering effect, helping it predict glucose trends more accurately."
-                            )
-                            Text("System-Determined Defaults:").bold()
-                            Text("Ultra-Rapid: 55 minutes (permitted range 35-100 minutes)")
-                            Text("Rapid-Acting: 75 minutes (permitted range 50-120 minutes)")
-                        }
+                        Text(
+                            "Insulin Peak Time defines when insulin is most effective in lowering glucose, set in minutes after dosing."
+                        )
+                        Text(
+                            "This peak informs the system when to expect the most potent glucose-lowering effect, helping it predict glucose trends more accurately."
+                        )
+                        Text("System-Determined Defaults:").bold()
+                        Text("Ultra-Rapid: 55 minutes (permitted range 35-100 minutes)")
+                        Text("Rapid-Acting: 75 minutes (permitted range 50-120 minutes)")
                     }
                 )
 
@@ -184,14 +180,13 @@ extension AlgorithmAdvancedSettings {
                     type: .boolean,
                     label: NSLocalizedString("Skip Neutral Temps", comment: "Skip Neutral Temps"),
                     miniHint: "Skip neutral temporary basal rates to reduce pump alerts",
-                    verboseHint: VStack {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "When Skip Neutral Temps is enabled, Trio will not set neutral basal rates, minimizing hourly pump alerts. This can help light sleepers avoid alerts but may delay basal adjustments if the pump loses connection."
-                            )
-                            Text("For most users, leaving this OFF is recommended to ensure consistent basal delivery.")
-                        }
+                        Text(
+                            "When Skip Neutral Temps is enabled, Trio will not set neutral basal rates, minimizing hourly pump alerts. This can help light sleepers avoid alerts but may delay basal adjustments if the pump loses connection."
+                        )
+                        Text("For most users, leaving this OFF is recommended to ensure consistent basal delivery.")
                     }
                 )
 
@@ -210,14 +205,13 @@ extension AlgorithmAdvancedSettings {
                     type: .boolean,
                     label: NSLocalizedString("Unsuspend If No Temp", comment: "Unsuspend If No Temp"),
                     miniHint: "Automatically resumes pump after suspension",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Enabling Unsuspend If No Temp allows Trio to resume your pump if you forget, as long as a zero temp basal was set first. This feature ensures insulin delivery restarts if you forget to manually unsuspend, adding a safeguard for pump reconnections."
-                            )
-                            Text("Note: Applies only to pumps with on-pump suspend options")
-                        }
+                        Text(
+                            "Enabling Unsuspend If No Temp allows Trio to resume your pump if you forget, as long as a zero temp basal was set first. This feature ensures insulin delivery restarts if you forget to manually unsuspend, adding a safeguard for pump reconnections."
+                        )
+                        Text("Note: Applies only to pumps with on-pump suspend options")
                     }
                 )
 
@@ -236,17 +230,16 @@ extension AlgorithmAdvancedSettings {
                     type: .boolean,
                     label: NSLocalizedString("Suspend Zeros IOB", comment: "Suspend Zeros IOB"),
                     miniHint: "Clears temporary basal rates and resets IOB when suspended",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "When Suspend Zeros IOB is enabled, any active temporary basal rates during a pump suspension are reset, with new 0 U/hr temporary basal rates added to counteract those done during suspension."
-                            )
-                            Text(
-                                "This prevents lingering insulin effects when your pump is suspended, ensuring safer management of insulin on board."
-                            )
-                            Text("Note: Applies to only to pumps with on-pump suspend options")
-                        }
+                        Text(
+                            "When Suspend Zeros IOB is enabled, any active temporary basal rates during a pump suspension are reset, with new 0 U/hr temporary basal rates added to counteract those done during suspension."
+                        )
+                        Text(
+                            "This prevents lingering insulin effects when your pump is suspended, ensuring safer management of insulin on board."
+                        )
+                        Text("Note: Applies to only to pumps with on-pump suspend options")
                     }
                 )
 
@@ -324,16 +317,15 @@ extension AlgorithmAdvancedSettings {
                     type: .decimal("remainingCarbsFraction"),
                     label: NSLocalizedString("Remaining Carbs Percentage", comment: "Remaining Carbs Percentage"),
                     miniHint: "% of carbs still available if no absorption is detected",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 100%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Remaining Carbs Percentage estimates carbs still absorbing over 4 hours if glucose data doesn't show clear absorption."
-                            )
-                            Text(
-                                "This fallback setting prevents under-dosing by spreading a portion of the entered carbs over time, balancing insulin needs with undetected carb impact."
-                            )
-                        }
+                        Text(
+                            "Remaining Carbs Percentage estimates carbs still absorbing over 4 hours if glucose data doesn't show clear absorption."
+                        )
+                        Text(
+                            "This fallback setting prevents under-dosing by spreading a portion of the entered carbs over time, balancing insulin needs with undetected carb impact."
+                        )
                     }
                 )
 
@@ -352,16 +344,15 @@ extension AlgorithmAdvancedSettings {
                     type: .decimal("remainingCarbsCap"),
                     label: NSLocalizedString("Remaining Carbs Cap", comment: "Remaining Carbs Cap"),
                     miniHint: "Maximum amount of carbs still available if no absorption is detected",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 90g").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "The Remaining Carbs Cap defines the upper limit for how many carbs the system will assume are absorbing over 4 hours, even when there's no clear sign of absorption from your glucose readings."
-                            )
-                            Text(
-                                "This cap prevents the system from overestimating how much insulin is needed when carb absorption isn't visible, offering a safeguard for accurate dosing."
-                            )
-                        }
+                        Text(
+                            "The Remaining Carbs Cap defines the upper limit for how many carbs the system will assume are absorbing over 4 hours, even when there's no clear sign of absorption from your glucose readings."
+                        )
+                        Text(
+                            "This cap prevents the system from overestimating how much insulin is needed when carb absorption isn't visible, offering a safeguard for accurate dosing."
+                        )
                     }
                 )
 
@@ -380,16 +371,15 @@ extension AlgorithmAdvancedSettings {
                     type: .decimal("noisyCGMTargetMultiplier"),
                     label: NSLocalizedString("Noisy CGM Target Increase", comment: "Noisy CGM Target Increase"),
                     miniHint: "Increase glucose target when noisy CGM data detected%",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 130%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "The Noisy CGM Target Multiplier increases your glucose target when the system detects noisy or raw CGM data. By default, the target is increased by 130% to account for the less reliable glucose readings."
-                            )
-                            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(
+                            "The Noisy CGM Target Multiplier increases your glucose target when the system detects noisy or raw CGM data. By default, the target is increased by 130% to account for the less reliable glucose readings."
+                        )
+                        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."
+                        )
                     }
                 )
             }

+ 23 - 25
FreeAPS/Sources/Modules/AutosensSettings/View/AutosensSettingsRootView.swift

@@ -49,19 +49,18 @@ extension AutosensSettings {
                     type: .decimal("autosensMax"),
                     label: NSLocalizedString("Autosens Max", comment: "Autosens Max"),
                     miniHint: "The higher limit of the Autosens Ratio",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 120%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Autosens Max sets the maximum Autosens Ratio used by Autosens, Dynamic ISF, or Sigmoid Formula"
-                            )
-                            Text(
-                                "The Autosens Ratio is used to calculate the amount of adjustment needed to basal rates, ISF, and CR."
-                            )
-                            Text(
-                                "Tip: Increasing this value allows automatic adjustments of basal rates to be higher, ISF to be lower, and CR to be lower."
-                            )
-                        }
+                        Text(
+                            "Autosens Max sets the maximum Autosens Ratio used by Autosens, Dynamic ISF, or Sigmoid Formula"
+                        )
+                        Text(
+                            "The Autosens Ratio is used to calculate the amount of adjustment needed to basal rates, ISF, and CR."
+                        )
+                        Text(
+                            "Tip: Increasing this value allows automatic adjustments of basal rates to be higher, ISF to be lower, and CR to be lower."
+                        )
                     },
                     headerText: "Glucose Deviations Algorithm"
                 )
@@ -81,19 +80,18 @@ extension AutosensSettings {
                     type: .decimal("autosensMin"),
                     label: NSLocalizedString("Autosens Min", comment: "Autosens Min"),
                     miniHint: "The lower limit of the Autosens Ratio",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 80%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Autosens Min sets the minimum Autosens Ratio used by Autosens, Dynamic ISF, or Sigmoid Formula."
-                            )
-                            Text(
-                                "The Autosens Ratio is used to calculate the amount of adjustment needed to basal rates, ISF, and CR."
-                            )
-                            Text(
-                                "Tip: Decreasing this value allows automatic adjustments of basal rates to be lower, ISF to be higher, and CR to be higher."
-                            )
-                        }
+                        Text(
+                            "Autosens Min sets the minimum Autosens Ratio used by Autosens, Dynamic ISF, or Sigmoid Formula."
+                        )
+                        Text(
+                            "The Autosens Ratio is used to calculate the amount of adjustment needed to basal rates, ISF, and CR."
+                        )
+                        Text(
+                            "Tip: Decreasing this value allows automatic adjustments of basal rates to be lower, ISF to be higher, and CR to be higher."
+                        )
                     }
                 )
 
@@ -112,7 +110,7 @@ extension AutosensSettings {
                     type: .boolean,
                     label: NSLocalizedString("Rewind Resets Autosens", comment: "Rewind Resets Autosens"),
                     miniHint: "Pump rewind initiates a reset in Autosens Ratio",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: ON").bold()
                         Text("Medtronic Users Only").bold()
                         VStack(alignment: .leading, spacing: 10) {

+ 5 - 6
FreeAPS/Sources/Modules/AutotuneConfig/View/AutotuneConfigRootView.swift

@@ -71,12 +71,11 @@ extension AutotuneConfig {
                     type: .boolean,
                     label: "Use Autotune",
                     miniHint: "It is not advised to use Autotune with Trio",
-                    verboseHint: VStack(spacing: 10) {
-                        Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text("It is not advised to use Autotune with Trio").bold()
-                            Text("Autotune is not designed to work with Trio. It is best to keep Autotune off and do not use it.")
-                        }
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
+                        Text("It is not advised to use Autotune with Trio").bold()
+                        Text("Autotune is not designed to work with Trio. It is best to keep Autotune off and do not use it.")
+
                     },
                     headerText: "Data-driven Adjustments"
                 )

+ 37 - 40
FreeAPS/Sources/Modules/BolusCalculatorConfig/View/BolusCalculatorConfigRootView.swift

@@ -63,7 +63,7 @@ extension BolusCalculatorConfig {
                     type: .boolean,
                     label: "Display Meal Presets",
                     miniHint: "Allows you to create and save preset meals",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("Enabling this feature allows you to create and save preset meals.")
                     }
@@ -84,19 +84,18 @@ extension BolusCalculatorConfig {
                     type: .decimal("overrideFactor"),
                     label: "Recommended Bolus Percentage",
                     miniHint: "Percent of bolus used in bolus calculator",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 70%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Recommended Bolus Percentage is a safety feature built into Trio. Trio first calculates an insulin required value, which is the full dosage. That dosage is then multiplied by your Recommended Bolus Percentage to display your suggested insulin dose in the bolus calculator."
-                            )
-                            Text(
-                                "Because Trio utilizes SMBs and UAM SMBs to help you reach your target glucose, this is initially set to below the full calculated amount (<100%) because other AID systems do not bolus for COB the same way Trio does. When SMBs and UAM SMBs are enabled, you may find your current CR results in lows and needs to be increased before you increase this setting closer to or at 100%."
-                            )
-                            Text(
-                                "Tip: If you are a new Trio user, it is not advised to set this to 100% until you have verified that your core settings (basal rates, ISF, and CR) do not need adjusting."
-                            )
-                        }
+                        Text(
+                            "Recommended Bolus Percentage is a safety feature built into Trio. Trio first calculates an insulin required value, which is the full dosage. That dosage is then multiplied by your Recommended Bolus Percentage to display your suggested insulin dose in the bolus calculator."
+                        )
+                        Text(
+                            "Because Trio utilizes SMBs and UAM SMBs to help you reach your target glucose, this is initially set to below the full calculated amount (<100%) because other AID systems do not bolus for COB the same way Trio does. When SMBs and UAM SMBs are enabled, you may find your current CR results in lows and needs to be increased before you increase this setting closer to or at 100%."
+                        )
+                        Text(
+                            "Tip: If you are a new Trio user, it is not advised to set this to 100% until you have verified that your core settings (basal rates, ISF, and CR) do not need adjusting."
+                        )
                     },
                     headerText: "Calculator Configuration"
                 )
@@ -117,21 +116,20 @@ extension BolusCalculatorConfig {
                     label: "Enable Fatty Meal Option",
                     conditionalLabel: "Fatty Meal Bolus Percentage",
                     miniHint: "\"Fatty Meal\" option appears in the bolus calculator",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("Default Percent: 70%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text("Do not enable this feature until you have optimized your CR (carb ratio) setting.").bold()
-                            Text(
-                                "Enabling this setting adds a \"Fatty Meal\" option to the bolus calculator. Once this feature is enabled, a percentage setting will appear below this for you to select."
-                            )
-                            Text(
-                                "When you use a Fatty Meal Bolus, the percentage you select for this setting will replace the Recommended Bolus Percentage setting used in that bolus calculation."
-                            )
-                            Text(
-                                "Tip: This setting should be ↓LOWER↓ than your Recommended Bolus Percentage setting to enable the bolus calculator the ability to give less than the calculated amount to prevent lows due to carbs absorbing very slowly. This could be useful when eating meals like pizza."
-                            )
-                        }
+                        Text("Do not enable this feature until you have optimized your CR (carb ratio) setting.").bold()
+                        Text(
+                            "Enabling this setting adds a \"Fatty Meal\" option to the bolus calculator. Once this feature is enabled, a percentage setting will appear below this for you to select."
+                        )
+                        Text(
+                            "When you use a Fatty Meal Bolus, the percentage you select for this setting will replace the Recommended Bolus Percentage setting used in that bolus calculation."
+                        )
+                        Text(
+                            "Tip: This setting should be ↓LOWER↓ than your Recommended Bolus Percentage setting to enable the bolus calculator the ability to give less than the calculated amount to prevent lows due to carbs absorbing very slowly. This could be useful when eating meals like pizza."
+                        )
                     }
                 )
 
@@ -151,22 +149,21 @@ extension BolusCalculatorConfig {
                     label: "Enable Super Bolus Option",
                     conditionalLabel: "Super Bolus Percentage",
                     miniHint: "\"Super Bolus\" option appears in the bolus calculator",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("Default Percent: 200%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text("Do not enable this feature until you have optimized your CR (carb ratio) setting.").bold()
-                            Text(
-                                "Enabling this setting adds a \"Super Bolus\" option to the bolus calculator. Once this feature is enabled, a percentage setting will appear below this for you to select."
-                            )
-                            Text(
-                                "When you use a Super Bolus, the percentage you select for this setting will replace the Recommended Bolus Percentage setting used in that bolus calculation."
-                            )
-                            Text("The Super Bolus is a useful option for sweet or fast meals.")
-                            Text(
-                                "Tip: This setting should be ↑HIGHER↑ than your Recommended Bolus Percentage setting to enable the bolus calculator the ability to give above the calculated amount to address carbs that absorb very quickly. This could be useful when eating sweets."
-                            )
-                        }
+                        Text("Do not enable this feature until you have optimized your CR (carb ratio) setting.").bold()
+                        Text(
+                            "Enabling this setting adds a \"Super Bolus\" option to the bolus calculator. Once this feature is enabled, a percentage setting will appear below this for you to select."
+                        )
+                        Text(
+                            "When you use a Super Bolus, the percentage you select for this setting will replace the Recommended Bolus Percentage setting used in that bolus calculation."
+                        )
+                        Text("The Super Bolus is a useful option for sweet or fast meals.")
+                        Text(
+                            "Tip: This setting should be ↑HIGHER↑ than your Recommended Bolus Percentage setting to enable the bolus calculator the ability to give above the calculated amount to address carbs that absorb very quickly. This could be useful when eating sweets."
+                        )
                     }
                 )
             }

+ 13 - 14
FreeAPS/Sources/Modules/CGM/View/CGMRootView.swift

@@ -216,19 +216,18 @@ extension CGM {
                         type: .boolean,
                         label: "Smooth Glucose Value",
                         miniHint: "Smooth CGM readings using Savitzky-Golay filtering",
-                        verboseHint: VStack {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "This filter looks at small groups of nearby readings and fits them to a simple mathematical curve. This process doesn't change the overall pattern of your glucose data but helps smooth out the \"noise\" or irregular fluctuations that could lead to false highs or lows."
-                                )
-                                Text(
-                                    "Because your glucose readings are taken at regular intervals, the filter can use a set of pre-calculated \"weights\" to adjust each group of readings, making the calculations fast and efficient. It's designed to keep the important trends in your data while minimizing those small, misleading variations, giving you and Trio a clearer sense of where your blood sugar is really headed."
-                                )
-                                Text(
-                                    "This type of filtering is useful in Trio, as it can help prevent over-corrections based on inaccurate glucose readings. This can help reduce the impact of sudden spikes or dips that might not reflect your true blood glucose levels."
-                                )
-                            }
+                            Text(
+                                "This filter looks at small groups of nearby readings and fits them to a simple mathematical curve. This process doesn't change the overall pattern of your glucose data but helps smooth out the \"noise\" or irregular fluctuations that could lead to false highs or lows."
+                            )
+                            Text(
+                                "Because your glucose readings are taken at regular intervals, the filter can use a set of pre-calculated \"weights\" to adjust each group of readings, making the calculations fast and efficient. It's designed to keep the important trends in your data while minimizing those small, misleading variations, giving you and Trio a clearer sense of where your blood sugar is really headed."
+                            )
+                            Text(
+                                "This type of filtering is useful in Trio, as it can help prevent over-corrections based on inaccurate glucose readings. This can help reduce the impact of sudden spikes or dips that might not reflect your true blood glucose levels."
+                            )
                         }
                     )
                 }
@@ -268,10 +267,10 @@ extension CGM {
                         )
                     }
                 }
-                .onChange(of: setupCGM) { setupCGM in
+                .onChange(of: setupCGM) {
                     state.setupCGM = setupCGM
                 }
-                .onChange(of: state.setupCGM) { setupCGM in
+                .onChange(of: state.setupCGM) {
                     self.setupCGM = setupCGM
                 }
                 .screenNavigation(self)

+ 14 - 15
FreeAPS/Sources/Modules/CalendarEventSettings/View/CalendarEventSettingsRootView.swift

@@ -49,20 +49,19 @@ extension CalendarEventSettings {
                     type: .boolean,
                     label: "Create Events in Calendar",
                     miniHint: "Uses calendar events to display current data",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "When enabled, Trio will create a customizable calendar event to keep you notified of your current glucose reading with every successful loop cycle."
-                            )
-                            Text(
-                                "This is useful if you use CarPlay or a variety of other external services that limit the view of most apps, but allows the calendar app"
-                            )
-                            Text(
-                                "Once enabled, the available customizations will appear. You can customize with the calendar of your choosing, use of emoji labels, and the inclusion of IOB & COB data."
-                            )
-                            Text("Note: Once a new calendar event is created, the previous event will be deleted.")
-                        }
+                        Text(
+                            "When enabled, Trio will create a customizable calendar event to keep you notified of your current glucose reading with every successful loop cycle."
+                        )
+                        Text(
+                            "This is useful if you use CarPlay or a variety of other external services that limit the view of most apps, but allows the calendar app"
+                        )
+                        Text(
+                            "Once enabled, the available customizations will appear. You can customize with the calendar of your choosing, use of emoji labels, and the inclusion of IOB & COB data."
+                        )
+                        Text("Note: Once a new calendar event is created, the previous event will be deleted.")
                     },
                     headerText: "Diabetes Data as Calendar Event"
                 )
@@ -93,7 +92,7 @@ extension CalendarEventSettings {
                         type: .boolean,
                         label: "Display Emojis as Labels",
                         miniHint: "Emojis used instead of text for data labels",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
                             VStack(alignment: .leading, spacing: 5) {
                                 Text(
@@ -128,7 +127,7 @@ extension CalendarEventSettings {
                         type: .boolean,
                         label: "Display IOB and COB",
                         miniHint: "Include IOB & COB in the calendar event data",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
                             Text(
                                 "When enabled, Trio will include the current IOB and COB values, along with the current glucose reading, in each calendar event created."

+ 101 - 107
FreeAPS/Sources/Modules/DynamicSettings/View/DynamicSettingsRootView.swift

@@ -70,24 +70,23 @@ extension DynamicSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Activate Dynamic ISF",
-                    miniHint: "Adjusts ISF dynamically based on multiple data points \n See hint for more info",
-                    verboseHint: VStack(spacing: 10) {
+                    miniHint: "Adjusts ISF dynamically based on multiple data points.",
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Enabling this feature allows Trio to calculate a new Insulin Sensitivity Factor with each loop cycle by considering your current glucose, the weighted total daily dose of insulin, the set adjustment factor, and a few other data points. This helps tailor your insulin response more accurately in real-time."
-                            )
-                            Text(
-                                "Dynamic ISF produces a Dynamic Ratio, replacing the Autosens Ratio, determining how much your profile ISF will be adjusted every loop cycle, ensuring it stays within safe limits set by your Autosens Min/Max settings. It provides more precise insulin dosing by responding to changes in insulin needs throughout the day."
-                            )
-                            Text(
-                                "You can influence the adjustments made by Dynamic ISF primarily by adjusting Autosens Max, Autosens Min, and Adjustment Factor. Other settings also influence Dynamic ISF's response, such as Target Glucose, Profile ISF, Peak Insulin Time, and Weighted Average of TDD."
-                            )
-                            Text(
-                                "Warning: Before adjusting these settings, make sure you are fully aware of the impact those changes will have."
-                            )
-                            .bold()
-                        }
+                        Text(
+                            "Enabling this feature allows Trio to calculate a new Insulin Sensitivity Factor with each loop cycle by considering your current glucose, the weighted total daily dose of insulin, the set adjustment factor, and a few other data points. This helps tailor your insulin response more accurately in real-time."
+                        )
+                        Text(
+                            "Dynamic ISF produces a Dynamic Ratio, replacing the Autosens Ratio, determining how much your profile ISF will be adjusted every loop cycle, ensuring it stays within safe limits set by your Autosens Min/Max settings. It provides more precise insulin dosing by responding to changes in insulin needs throughout the day."
+                        )
+                        Text(
+                            "You can influence the adjustments made by Dynamic ISF primarily by adjusting Autosens Max, Autosens Min, and Adjustment Factor. Other settings also influence Dynamic ISF's response, such as Target Glucose, Profile ISF, Peak Insulin Time, and Weighted Average of TDD."
+                        )
+                        Text(
+                            "Warning: Before adjusting these settings, make sure you are fully aware of the impact those changes will have."
+                        )
+                        .bold()
                     },
                     headerText: "Dynamic Settings"
                 )
@@ -108,22 +107,22 @@ extension DynamicSettings {
                         type: .boolean,
                         label: "Activate Dynamic CR (Carb Ratio)",
                         miniHint: "Dynamically adjusts your Carb Ratio (CR)",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "Dynamic CR adjusts your carb ratio based on your Dynamic Ratio, adapting automatically to changes in insulin sensitivity."
-                                )
-                                Text(
-                                    "When Dynamic Ratio increases, indicating you need more insulin, the carb ratio is adjusted to make your insulin dosing more effective."
-                                )
-                                Text(
-                                    "When Dynamic Ratio decreases, indicating you need less insulin, the carb ratio is scaled back to avoid over-delivery."
-                                )
-                                Text(
-                                    "Note: It's recommended not to use this feature with a high Insulin Fraction (>2), as it can cause insulin dosing to become too aggressive."
-                                )
-                            }
+                            Text(
+                                "Dynamic CR adjusts your carb ratio based on your Dynamic Ratio, adapting automatically to changes in insulin sensitivity."
+                            )
+                            Text(
+                                "When Dynamic Ratio increases, indicating you need more insulin, the carb ratio is adjusted to make your insulin dosing more effective."
+                            )
+                            Text(
+                                "When Dynamic Ratio decreases, indicating you need less insulin, the carb ratio is scaled back to avoid over-delivery."
+                            )
+                            Text(
+                                "Note: It's recommended not to use this feature with a high Insulin Fraction (>2), as it can cause insulin dosing to become too aggressive."
+                            )
                         }
                     )
 
@@ -142,24 +141,23 @@ extension DynamicSettings {
                         type: .boolean,
                         label: "Use Sigmoid Formula",
                         miniHint: "Adjusts ISF using a sigmoid-shaped curve",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "Turning on the Sigmoid Formula setting alters how your Dynamic Ratio, and thus your New ISF and New Carb Ratio, are calculated using a sigmoid curve rather than the default logarithmic function."
-                                )
-                                Text(
-                                    "The curve's steepness is influenced by the Adjustment Factor, while the Autosens Min/Max settings determine the limits of the ratio adjustment, which can also influence the steepness of the sigmoid curve."
-                                )
-                                Text(
-                                    "When using the Sigmoid Formula, the weighted Total Daily Dose has a much lower impact on the dynamic adjustments to sensitivity."
-                                )
-                                Text("Careful tuning is essential to avoid overly aggressive insulin changes.")
-                                Text("It is not recommended to set Autosens Max above 150% to maintain safe insulin dosing.")
-                                Text(
-                                    "There has been no empirical data analysis to support the use of the Sigmoid Formula for dynamic sensitivity determination."
-                                ).bold()
-                            }
+                            Text(
+                                "Turning on the Sigmoid Formula setting alters how your Dynamic Ratio, and thus your New ISF and New Carb Ratio, are calculated using a sigmoid curve rather than the default logarithmic function."
+                            )
+                            Text(
+                                "The curve's steepness is influenced by the Adjustment Factor, while the Autosens Min/Max settings determine the limits of the ratio adjustment, which can also influence the steepness of the sigmoid curve."
+                            )
+                            Text(
+                                "When using the Sigmoid Formula, the weighted Total Daily Dose has a much lower impact on the dynamic adjustments to sensitivity."
+                            )
+                            Text("Careful tuning is essential to avoid overly aggressive insulin changes.")
+                            Text("It is not recommended to set Autosens Max above 150% to maintain safe insulin dosing.")
+                            Text(
+                                "There has been no empirical data analysis to support the use of the Sigmoid Formula for dynamic sensitivity determination."
+                            ).bold()
                         }
                     )
 
@@ -180,19 +178,18 @@ extension DynamicSettings {
                             type: .decimal("adjustmentFactor"),
                             label: "Adjustment Factor (AF)",
                             miniHint: "Influences the rate of Dynamic ISF (Sensitivity) adjustments",
-                            verboseHint: VStack(spacing: 10) {
+                            verboseHint:
+                            VStack(alignment: .leading, spacing: 10) {
                                 Text("Default: 80%").bold()
-                                VStack(alignment: .leading, spacing: 10) {
-                                    Text(
-                                        "The Adjustment Factor (AF) allows you to control how quickly and effectively Dynamic ISF responds to changes in glucose levels."
-                                    )
-                                    Text(
-                                        "Adjusting this value not only can adjust how quickly your sensitivity will respond to changing glucose readings, but also at what glucose readings you reach your Autosens Max/Min limits."
-                                    )
-                                    Text(
-                                        "Increasing this setting can make ISF adjustments quicker, but will also change the glucose value that coincides with the ISF used at your Autosens Max and Autosens Min limits. Likewise, decreasing this settings can make ISF adjustments slower, but will also change the glucose value that coincides with the ISF used at your Autosens Max and Autosens Min limits. It is best to utilize the Desmos graphs from the Trio Docs to optimize all Dynamic Settings."
-                                    )
-                                }
+                                Text(
+                                    "The Adjustment Factor (AF) allows you to control how quickly and effectively Dynamic ISF responds to changes in glucose levels."
+                                )
+                                Text(
+                                    "Adjusting this value not only can adjust how quickly your sensitivity will respond to changing glucose readings, but also at what glucose readings you reach your Autosens Max/Min limits."
+                                )
+                                Text(
+                                    "Increasing this setting can make ISF adjustments quicker, but will also change the glucose value that coincides with the ISF used at your Autosens Max and Autosens Min limits. Likewise, decreasing this settings can make ISF adjustments slower, but will also change the glucose value that coincides with the ISF used at your Autosens Max and Autosens Min limits. It is best to utilize the Desmos graphs from the Trio Docs to optimize all Dynamic Settings."
+                                )
                             }
                         )
                     } else {
@@ -211,22 +208,21 @@ extension DynamicSettings {
                             type: .decimal("adjustmentFactorSigmoid"),
                             label: "Sigmoid Adjustment Factor",
                             miniHint: "Influences the rate of dynamic sensitivity adjustments for Sigmoid",
-                            verboseHint: VStack(spacing: 10) {
+                            verboseHint:
+                            VStack(alignment: .leading, spacing: 10) {
                                 Text("Default: 50%").bold()
-                                VStack(alignment: .leading, spacing: 10) {
-                                    Text(
-                                        "The Sigmoid Adjustment Factor (AF) allows you to control how quickly Sigmoid Dynamic ISF responds to changes in glucose levels and at what glucose value you will reach your Autosens Max and Autosens Min limits."
-                                    )
-                                    Text(
-                                        "Sigmoid Adjustment Factor influences both how fast your ISF values will change and how quickly you will reach your Autosens Max and Min limits set. Increasing Sigmoid Adjustment Factor increases the rate of change of your ISF and reduces the range of glucose values between your Autosens Max and Min limits."
-                                    )
-                                    Text(
-                                        "This setting allows for a more responsive system, but the effects are restricted by the Autosens Min/Max settings."
-                                    )
-                                    Text(
-                                        "Due to how the curve is calculated when using the Sigmoid Formula, increasing this setting has a different impact on the steepness of the curve than in the standard logarithmic Dynamic ISF calculation. Use caution when adjusting this setting."
-                                    )
-                                }
+                                Text(
+                                    "The Sigmoid Adjustment Factor (AF) allows you to control how quickly Sigmoid Dynamic ISF responds to changes in glucose levels and at what glucose value you will reach your Autosens Max and Autosens Min limits."
+                                )
+                                Text(
+                                    "Sigmoid Adjustment Factor influences both how fast your ISF values will change and how quickly you will reach your Autosens Max and Min limits set. Increasing Sigmoid Adjustment Factor increases the rate of change of your ISF and reduces the range of glucose values between your Autosens Max and Min limits."
+                                )
+                                Text(
+                                    "This setting allows for a more responsive system, but the effects are restricted by the Autosens Min/Max settings."
+                                )
+                                Text(
+                                    "Due to how the curve is calculated when using the Sigmoid Formula, increasing this setting has a different impact on the steepness of the curve than in the standard logarithmic Dynamic ISF calculation. Use caution when adjusting this setting."
+                                )
                             }
                         )
                     }
@@ -246,18 +242,17 @@ extension DynamicSettings {
                         type: .decimal("weightPercentage"),
                         label: "Weighted Average of TDD",
                         miniHint: "Weight of 24-hr TDD against 10-day TDD",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 65%").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "This setting adjusts how much weight is given to your recent total daily insulin dose when calculating Dynamic ISF and Dynamic CR."
-                                )
-                                Text(
-                                    "At the default setting, 65% of the calculation is based on the last 24 hours of insulin use, with the remaining 35% considering the last 10 days of data."
-                                )
-                                Text("Setting this to 100% means only the past 24 hours will be used.")
-                                Text("A lower value smooths out these variations for more stability.")
-                            }
+                            Text(
+                                "This setting adjusts how much weight is given to your recent total daily insulin dose when calculating Dynamic ISF and Dynamic CR."
+                            )
+                            Text(
+                                "At the default setting, 65% of the calculation is based on the last 24 hours of insulin use, with the remaining 35% considering the last 10 days of data."
+                            )
+                            Text("Setting this to 100% means only the past 24 hours will be used.")
+                            Text("A lower value smooths out these variations for more stability.")
                         }
                     )
 
@@ -306,31 +301,30 @@ extension DynamicSettings {
                         type: .decimal("threshold_setting"),
                         label: "Minimum Safety Threshold",
                         miniHint: "Increase the safety threshold used to suspend insulin delivery",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: Set by Algorithm").bold()
+                            Text(
+                                "Minimum Threshold Setting is, by default, determined by your set Target Glucose. This threshold automatically suspends insulin delivery if your glucose levels are forecasted to fall below this value. It’s designed to protect against hypoglycemia, particularly during sleep or other vulnerable times."
+                            )
+                            Text(
+                                "Trio will use the larger of the default setting calculation below and the value entered here."
+                            )
                             VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "Minimum Threshold Setting is, by default, determined by your set Target Glucose. This threshold automatically suspends insulin delivery if your glucose levels are forecasted to fall below this value. It’s designed to protect against hypoglycemia, particularly during sleep or other vulnerable times."
-                                )
-                                Text(
-                                    "Trio will use the larger of the default setting calculation below and the value entered here."
-                                )
-                                VStack(alignment: .leading, spacing: 10) {
-                                    VStack(alignment: .leading, spacing: 5) {
-                                        Text("The default setting is based on this calculation:").bold()
-                                        Text("Target Glucose - 0.5 × (Target Glucose - 40)")
-                                    }
-                                    VStack(alignment: .leading, spacing: 5) {
-                                        Text(
-                                            "If your glucose target is 110 mg/dL, Trio will use a safety threshold of 75 mg/dL, unless you set Minimum Safety Threshold (mg/dL) to something > 75."
-                                        )
-                                        Text("110 - 0.5 × (110 - 40) = 75")
-                                    }
-                                    Text("This setting is limited to values between 60 - 120 mg/dL (3.3 - 6.6 mmol/L)")
+                                VStack(alignment: .leading, spacing: 5) {
+                                    Text("The default setting is based on this calculation:").bold()
+                                    Text("Target Glucose - 0.5 × (Target Glucose - 40)")
+                                }
+                                VStack(alignment: .leading, spacing: 5) {
                                     Text(
-                                        "Note: Basal may be resumed if there is negative IOB and glucose is rising faster than the forecast."
+                                        "If your glucose target is 110 mg/dL, Trio will use a safety threshold of 75 mg/dL, unless you set Minimum Safety Threshold (mg/dL) to something > 75."
                                     )
+                                    Text("110 - 0.5 × (110 - 40) = 75")
                                 }
+                                Text("This setting is limited to values between 60 - 120 mg/dL (3.3 - 6.6 mmol/L)")
+                                Text(
+                                    "Note: Basal may be resumed if there is negative IOB and glucose is rising faster than the forecast."
+                                )
                             }
                         }
                     )

+ 29 - 34
FreeAPS/Sources/Modules/GeneralSettings/View/UnitsLimitsSettingsRootView.swift

@@ -59,23 +59,21 @@ extension UnitsLimitsSettings {
                     type: .decimal("maxIOB"),
                     label: NSLocalizedString("Max IOB", comment: "Max IOB"),
                     miniHint: "Maximum units of insulin allowed active at any given time",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 0 units").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Warning: This must be greater than 0 for any automatic temporary basal rates or SMBs to be given."
-                            )
-                            .bold()
-                            Text(
-                                "The maximum amount of Insulin On Board (IOB) above profile basal rates from all sources - positive temporary basal rates, manual or meal boluses, and SMBs - that Trio is allowed to accumulate to address a higher-than-target glucose."
-                            )
-                            Text(
-                                "If a calculated amount exceeds this limit, the suggested and/or delivered amount will be reduced so that active insulin on board (IOB) will not exceed this safety limit."
-                            )
-                            Text(
-                                "Note: You can still manually bolus above this limit, but the suggested bolus amount will never exceed this in the bolus calculator."
-                            )
-                        }
+                        Text(
+                            "Warning: This must be greater than 0 for any automatic temporary basal rates or SMBs to be given."
+                        ).bold()
+                        Text(
+                            "The maximum amount of Insulin On Board (IOB) above profile basal rates from all sources - positive temporary basal rates, manual or meal boluses, and SMBs - that Trio is allowed to accumulate to address a higher-than-target glucose."
+                        )
+                        Text(
+                            "If a calculated amount exceeds this limit, the suggested and/or delivered amount will be reduced so that active insulin on board (IOB) will not exceed this safety limit."
+                        )
+                        Text(
+                            "Note: You can still manually bolus above this limit, but the suggested bolus amount will never exceed this in the bolus calculator."
+                        )
                     }
                 )
 
@@ -94,13 +92,12 @@ extension UnitsLimitsSettings {
                     type: .decimal("maxBolus"),
                     label: "Max Bolus",
                     miniHint: "Largest bolus of insulin allowed",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 10 units").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text("The maximum bolus allowed to be delivered at one time. This limits manual and automatic bolus.")
-                            Text("Most set this to their largest meal bolus. Then, adjust if needed.")
-                            Text("If you attempt to request a bolus larger than this, the bolus will not be accepted.")
-                        }
+                        Text("The maximum bolus allowed to be delivered at one time. This limits manual and automatic bolus.")
+                        Text("Most set this to their largest meal bolus. Then, adjust if needed.")
+                        Text("If you attempt to request a bolus larger than this, the bolus will not be accepted.")
                     }
                 )
 
@@ -119,12 +116,11 @@ extension UnitsLimitsSettings {
                     type: .decimal("maxBasal"),
                     label: "Max Basal",
                     miniHint: "Largest basal rate allowed",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 2.0 units").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text("The maximum basal rate allowed to be set or scheduled.")
-                            Text("This applies to both automatic or manual basal rates.")
-                        }
+                        Text("The maximum basal rate allowed to be set or scheduled.")
+                        Text("This applies to both automatic or manual basal rates.")
                     }
                 )
 
@@ -143,14 +139,13 @@ extension UnitsLimitsSettings {
                     type: .decimal("maxCOB"),
                     label: NSLocalizedString("Max COB", comment: "Max COB"),
                     miniHint: "Max carbs Trio can use in dosing calculations",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 120 carbs").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Maximum Carbs On Board (COB) allowed. If more carbs are entered than allowed by this limit, Trio will cap the current COB in calculations to Max COB and remain at max until all remaining carbs have shown to be absorbed."
-                            )
-                            Text("This is an important limit when UAM is ON.")
-                        }
+                        Text(
+                            "Maximum Carbs On Board (COB) allowed. If more carbs are entered than allowed by this limit, Trio will cap the current COB in calculations to Max COB and remain at max until all remaining carbs have shown to be absorbed."
+                        )
+                        Text("This is an important limit when UAM is ON.")
                     }
                 )
             }

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

@@ -71,7 +71,7 @@ extension GlucoseNotificationSettings {
                     type: .boolean,
                     label: "Show Glucose App Badge",
                     miniHint: "Show your current glucose on Trio app icon",
-                    verboseHint: VStack(spacing: 10) {
+                    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.")
                     },
@@ -93,7 +93,7 @@ extension GlucoseNotificationSettings {
                     type: .boolean,
                     label: "Always Notify Glucose",
                     miniHint: "Trigger a notification every time your glucose is updated",
-                    verboseHint: VStack {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("A notification will be triggered every time your glucose is updated in Trio.")
                     }
@@ -114,7 +114,7 @@ extension GlucoseNotificationSettings {
                     type: .boolean,
                     label: "Play Alarm Sound",
                     miniHint: "Alarm with every Trio notification",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("This will cause a sound to be triggered by every Trio notification.")
                     }
@@ -135,7 +135,7 @@ extension GlucoseNotificationSettings {
                     type: .boolean,
                     label: "Add Glucose Source to Alarm",
                     miniHint: "Source of the glucose reading will be added to the notification",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("The source of the glucose reading will be added to the notification.")
                     }

+ 4 - 5
FreeAPS/Sources/Modules/HealthKit/View/AppleHealthKitRootView.swift

@@ -48,12 +48,11 @@ extension AppleHealthKit {
                     type: .boolean,
                     label: "Connect to Apple Health",
                     miniHint: "Allow Trio to read from and write to Apple Health",
-                    verboseHint: VStack {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text("This allows Trio to read from and write to Apple Health.")
-                            Text("Warning: You must also give permissions in iOS System Settings for the Health app.").bold()
-                        }
+                        Text("This allows Trio to read from and write to Apple Health.")
+                        Text("Warning: You must also give permissions in iOS System Settings for the Health app.").bold()
                     },
                     headerText: "Apple Health Integration"
                 )

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

@@ -76,7 +76,7 @@ extension LiveActivitySettings {
                         type: .boolean,
                         label: "Enable Live Activity",
                         miniHint: "Display customizable data on Lock Screen and Dynamic Island",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
                             VStack(alignment: .leading, spacing: 10) {
                                 Text(
@@ -122,7 +122,7 @@ extension LiveActivitySettings {
                                             hintLabel = "Lock Screen Widget Style"
                                             selectedVerboseHint =
                                                 AnyView(
-                                                    VStack(spacing: 10) {
+                                                    VStack(alignment: .leading, spacing: 10) {
                                                         Text("Default: Simple").bold()
                                                         VStack(alignment: .leading, spacing: 10) {
                                                             Text("Simple:").bold()

+ 30 - 33
FreeAPS/Sources/Modules/MealSettings/View/MealSettingsRootView.swift

@@ -209,7 +209,7 @@ extension MealSettings {
                     type: .boolean,
                     label: "Enable Fat and Protein Entries",
                     miniHint: "Allows you to add fat and protein macros to meals",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         VStack(alignment: .leading, spacing: 10) {
                             Text(
@@ -264,16 +264,15 @@ extension MealSettings {
                         type: .decimal("delay"),
                         label: "Fat and Protein Delay",
                         miniHint: "Delay between fat & protein entry and first FPU entry",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 60 min").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "The Fat Protein Delay setting defines the time between when you log fat and protein and when the system starts delivering insulin for the Fat-Protein Unit Carb Equivalents (FPUs)."
-                                )
-                                Text(
-                                    "This delay accounts for the slower absorption of fat and protein, as calculated by the Warsaw Method, ensuring insulin delivery is properly timed to manage glucose spikes caused by high-fat, high-protein meals."
-                                )
-                            }
+                            Text(
+                                "The Fat Protein Delay setting defines the time between when you log fat and protein and when the system starts delivering insulin for the Fat-Protein Unit Carb Equivalents (FPUs)."
+                            )
+                            Text(
+                                "This delay accounts for the slower absorption of fat and protein, as calculated by the Warsaw Method, ensuring insulin delivery is properly timed to manage glucose spikes caused by high-fat, high-protein meals."
+                            )
                         }
                     )
 
@@ -292,19 +291,18 @@ extension MealSettings {
                         type: .decimal("timeCap"),
                         label: "Maximum Duration",
                         miniHint: "Set the maximum timeframe to extend FPUs",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 8 hours").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "This sets the maximum length of time that Fat and Protein Carb Equivalents (FPUs) will be extended over from a single Fat and/or Protein bolus calcultor entry."
-                                )
-                                Text(
-                                    "It is one factor used in combination with the Fat and Protein Delay, Spread Interval, and Fat and Protein Factor to create the FPU entries."
-                                )
-                                Text("Increasing this setting may result in more FPU entries with smaller carb values.")
-                                Text("Decreasing this setting may result in fewer FPU entries with larger carb values.")
-                                Text("Note: Accepted range for this setting is 5 - 12 hours.")
-                            }
+                            Text(
+                                "This sets the maximum length of time that Fat and Protein Carb Equivalents (FPUs) will be extended over from a single Fat and/or Protein bolus calcultor entry."
+                            )
+                            Text(
+                                "It is one factor used in combination with the Fat and Protein Delay, Spread Interval, and Fat and Protein Factor to create the FPU entries."
+                            )
+                            Text("Increasing this setting may result in more FPU entries with smaller carb values.")
+                            Text("Decreasing this setting may result in fewer FPU entries with larger carb values.")
+                            Text("Note: Accepted range for this setting is 5 - 12 hours.")
                         }
                     )
 
@@ -323,17 +321,16 @@ extension MealSettings {
                         type: .decimal("minuteInterval"),
                         label: "Spread Interval",
                         miniHint: "Time interval between FPUs",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 30 minutes").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "This determines how many minutes will be between individual Fat-Protein Unit Carb Equivalent (FPU) entries from a single Fat and/or Protein bolus calculator entry."
-                                )
-                                Text("The shorter the interval, the smoother the correlating dosing result.")
-                                Text("Increasing this setting may result in fewer FPU entries with larger carb values.")
-                                Text("Decreasing this setting may result in more FPU entries with smaller carb values.")
-                                Text("Accepted range for this setting is 5 - 60 minutes.")
-                            }
+                            Text(
+                                "This determines how many minutes will be between individual Fat-Protein Unit Carb Equivalent (FPU) entries from a single Fat and/or Protein bolus calculator entry."
+                            )
+                            Text("The shorter the interval, the smoother the correlating dosing result.")
+                            Text("Increasing this setting may result in fewer FPU entries with larger carb values.")
+                            Text("Decreasing this setting may result in more FPU entries with smaller carb values.")
+                            Text("Accepted range for this setting is 5 - 60 minutes.")
                         }
                     )
 
@@ -352,7 +349,7 @@ extension MealSettings {
                         type: .decimal("individualAdjustmentFactor"),
                         label: "Fat and Protein Percentage",
                         miniHint: "Influences the conversion rate used in the Warsaw Method",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint: VStack(alignment: .leading, spacing: 10) {
                             Text("Default: 50%").bold()
                             VStack(spacing: 10) {
                                 Text("This setting changes how much effect the fat and protein entry has on FPUs.")

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

@@ -46,7 +46,7 @@ struct NightscoutFetchView: View {
                 type: .boolean,
                 label: "Allow Fetching from Nightscout",
                 miniHint: "Enable fetching of selected data sets from Nightscout",
-                verboseHint: VStack(spacing: 10) {
+                verboseHint: VStack(alignment: .leading, spacing: 10) {
                     Text("Default: OFF").bold()
                     Text(
                         "The Fetch Treatments toggle enables fetching of carbs and temp targets entered in Careportal or by another uploading device than Trio from Nightscout."
@@ -71,7 +71,7 @@ struct NightscoutFetchView: View {
                     type: .boolean,
                     label: "Allow Remote Control of Trio",
                     miniHint: "Enables selected remote control capabilities via Nightscout",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("When enabled you allow the following remote functions through announcements from Nightscout:")
                         VStack(alignment: .leading) {

+ 12 - 13
FreeAPS/Sources/Modules/NightscoutConfig/View/NightscoutUploadView.swift

@@ -46,19 +46,18 @@ struct NightscoutUploadView: View {
                 type: .boolean,
                 label: "Allow Uploading to Nightscout",
                 miniHint: "Enables upload of selected data sets to Nightscout",
-                verboseHint: VStack(spacing: 10) {
+                verboseHint:
+                VStack(alignment: .leading, spacing: 10) {
                     Text("Default: OFF").bold()
-                    VStack(alignment: .leading, spacing: 10) {
-                        Text(
-                            "The Upload Treatments toggle enables uploading of the following data sets to your connected Nightscout URL:"
-                        )
-                        VStack(alignment: .leading, spacing: 5) {
-                            Text("• Carbs")
-                            Text("• Temp Targets")
-                            Text("• Device Status")
-                            Text("• Preferences")
-                            Text("• Settings")
-                        }
+                    Text(
+                        "The Upload Treatments toggle enables uploading of the following data sets to your connected Nightscout URL:"
+                    )
+                    VStack(alignment: .leading, spacing: 5) {
+                        Text("• Carbs")
+                        Text("• Temp Targets")
+                        Text("• Device Status")
+                        Text("• Preferences")
+                        Text("• Settings")
                     }
                 }
             )
@@ -80,7 +79,7 @@ struct NightscoutUploadView: View {
                     type: .boolean,
                     label: "Upload Glucose",
                     miniHint: "Enables uploading of CGM readings to Nightscout",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text("Enabling this setting allows CGM readings from Trio to be used in Nightscout.")
                     }

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

@@ -50,14 +50,13 @@ struct ReviewInsulinActionView: BaseView {
                 type: .decimal("dia"),
                 label: "Duration of Insulin Action",
                 miniHint: "Number of hours insulin is active in your body",
-                verboseHint: VStack(spacing: 10) {
+                verboseHint:
+                VStack(alignment: .leading, spacing: 10) {
                     Text("Default: 6 hours").bold()
-                    VStack(alignment: .leading, spacing: 10) {
-                        Text("Number of hours insulin will contribute to IOB after dosing.")
-                        Text(
-                            "Tip: It is better to use Custom Peak Timing rather than use a Duration of Insulin Action (DIA) other than the default of 6 hours."
-                        )
-                    }
+                    Text("Number of hours insulin will contribute to IOB after dosing.")
+                    Text(
+                        "Tip: It is better to use Custom Peak Timing rather than use a Duration of Insulin Action (DIA) other than the default of 6 hours."
+                    )
                 },
                 headerText: "Review imported DIA"
             )

+ 78 - 88
FreeAPS/Sources/Modules/SMBSettings/View/SMBSettingsRootView.swift

@@ -49,7 +49,7 @@ extension SMBSettings {
                     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",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         Text(
                             "When enabled, Super Micro Boluses (SMBs) will always be allowed if dosing calculations determine insulin is needed via the SMB delivery method, except in instances where a high Temp Target is set."
@@ -74,16 +74,15 @@ extension SMBSettings {
                         type: .boolean,
                         label: NSLocalizedString("Enable SMB With COB", comment: "Enable SMB With COB"),
                         miniHint: "Allow SMB when carbs are on board",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "When the carb on board (COB) forecast line is active, enabling this feature allows Trio to use Super Micro Boluses (SMB) to deliver the insulin required."
-                                )
-                                Text(
-                                    "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
-                                )
-                            }
+                            Text(
+                                "When the carb on board (COB) forecast line is active, enabling this feature allows Trio to use Super Micro Boluses (SMB) to deliver the insulin required."
+                            )
+                            Text(
+                                "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
+                            )
                         }
                     )
 
@@ -102,16 +101,15 @@ extension SMBSettings {
                         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)",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                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."
-                                )
-                                Text(
-                                    "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
-                                )
-                            }
+                            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."
+                            )
+                            Text(
+                                "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
+                            )
                         }
                     )
 
@@ -130,16 +128,15 @@ extension SMBSettings {
                         type: .boolean,
                         label: NSLocalizedString("Enable SMB After Carbs", comment: "Enable SMB After Carbs"),
                         miniHint: "Allow SMB for 6 hrs after carbs are logged",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) for 6 hours after a carb entry, regardless of whether there are active carbs on board (COB)."
-                                )
-                                Text(
-                                    "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
-                                )
-                            }
+                            Text(
+                                "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) for 6 hours after a carb entry, regardless of whether there are active carbs on board (COB)."
+                            )
+                            Text(
+                                "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
+                            )
                         }
                     )
 
@@ -159,16 +156,15 @@ extension SMBSettings {
                         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",
-                        verboseHint: VStack(spacing: 10) {
+                        verboseHint:
+                        VStack(alignment: .leading, spacing: 10) {
                             Text("Default: OFF").bold()
-                            VStack(alignment: .leading, spacing: 10) {
-                                Text(
-                                    "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when glucose reading is above the value set as High BG Target."
-                                )
-                                Text(
-                                    "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
-                                )
-                            }
+                            Text(
+                                "Enabling this feature allows Trio to deliver insulin required using Super Micro Boluses (SMB) when glucose reading is above the value set as High BG Target."
+                            )
+                            Text(
+                                "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
+                            )
                         }
                     )
                 }
@@ -194,20 +190,18 @@ extension SMBSettings {
                         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)",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            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."
-                            )
-                            Text(
-                                "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
-                            )
-                            Text(
-                                "Warning: High Temp Targets are often set when recovering from lows. If you use High Temp Targets for that purpose, this feature should remain disabled."
-                            )
-                            .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."
+                        )
+                        Text(
+                            "Note: If this is enabled and the criteria is met, SMBs could be utilized regardless of other SMB settings being enabled or not."
+                        )
+                        Text(
+                            "Warning: High Temp Targets are often set when recovering from lows. If you use High Temp Targets for that purpose, this feature should remain disabled."
+                        ).bold()
                     }
                 )
 
@@ -226,19 +220,18 @@ extension SMBSettings {
                     type: .boolean,
                     label: NSLocalizedString("Enable UAM", comment: "Enable UAM"),
                     miniHint: "Automatically adjust insulin delivery when carbs are not announced or miscalculated",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Enabling the UAM (Unannounced Meals) feature allows the system to detect and respond to unexpected rises in glucose readings caused by unannounced or miscalculated carbs, meals high in fat or protein, or other factors like adrenaline."
-                            )
-                            Text(
-                                "It uses the SMB (Super Micro Bolus) algorithm to deliver insulin in small amounts to correct glucose spikes. UAM also works in reverse, reducing or stopping SMBs if glucose levels drop unexpectedly."
-                            )
-                            Text(
-                                "This feature ensures more accurate insulin adjustments even when carb entries are missing or incorrect."
-                            )
-                        }
+                        Text(
+                            "Enabling the UAM (Unannounced Meals) feature allows the system to detect and respond to unexpected rises in glucose readings caused by unannounced or miscalculated carbs, meals high in fat or protein, or other factors like adrenaline."
+                        )
+                        Text(
+                            "It uses the SMB (Super Micro Bolus) algorithm to deliver insulin in small amounts to correct glucose spikes. UAM also works in reverse, reducing or stopping SMBs if glucose levels drop unexpectedly."
+                        )
+                        Text(
+                            "This feature ensures more accurate insulin adjustments even when carb entries are missing or incorrect."
+                        )
                     }
                 )
 
@@ -258,7 +251,7 @@ extension SMBSettings {
                     label: NSLocalizedString("Max SMB Basal Minutes", comment: "Max SMB Basal Minutes"),
                     miniHint: "Limits the size of a single Super Micro Bolus (SMB) dose",
                     verboseHint: VStack(spacing: 10) {
-                        VStack(alignment: .center, spacing: 1) {
+                        VStack(alignment: .leading, spacing: 1) {
                             Text("Default: 30 minutes").bold()
                             Text("(50% current basal rate)").bold()
                         }
@@ -301,7 +294,7 @@ extension SMBSettings {
                     label: NSLocalizedString("Max UAM Basal Minutes", comment: "Max UAM Basal Minutes"),
                     miniHint: "Limits the size of a single Unannounced Meal (UAM) SMB dose",
                     verboseHint: VStack(spacing: 10) {
-                        VStack(alignment: .center, spacing: 1) {
+                        VStack(alignment: .leading, spacing: 1) {
                             Text("Default: 30 minutes").bold()
                             Text("(50% current basal rate)").bold()
                         }
@@ -343,14 +336,13 @@ extension SMBSettings {
                     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",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 20% increase").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Maximum allowed positive percentual change in glucose level to permit SMBs. If the difference in glucose is greater than this, Trio will disable SMBs."
-                            )
-                            Text("Note: This setting has a hard-coded cap of 40%")
-                        }
+                        Text(
+                            "Maximum allowed positive percentual change in glucose level to permit SMBs. If the difference in glucose is greater than this, Trio will disable SMBs."
+                        )
+                        Text("Note: This setting has a hard-coded cap of 40%")
                     }
                 )
 
@@ -369,17 +361,16 @@ extension SMBSettings {
                     type: .decimal("smbDeliveryRatio"),
                     label: NSLocalizedString("SMB DeliveryRatio", comment: "SMB DeliveryRatio"),
                     miniHint: "Limits % of total insulin required that can be given as SMB",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 50%").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "Once the total insulin required is calculated, this safety limit specifies what share of the total insulin required can be delivered as an SMB."
-                            )
-                            Text(
-                                "Due to SMBs occurring every 5 minutes, it is important to set this value to a reasonable level that allows Trio to safely zero temp should dosing needs suddenly change. Increase this value with caution."
-                            )
-                            Text("Note: Limited to a range of 30 - 70%")
-                        }
+                        Text(
+                            "Once the total insulin required is calculated, this safety limit specifies what share of the total insulin required can be delivered as an SMB."
+                        )
+                        Text(
+                            "Due to SMBs occurring every 5 minutes, it is important to set this value to a reasonable level that allows Trio to safely zero temp should dosing needs suddenly change. Increase this value with caution."
+                        )
+                        Text("Note: Limited to a range of 30 - 70%")
                     }
                 )
 
@@ -398,14 +389,13 @@ extension SMBSettings {
                     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",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 3 min").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            Text(
-                                "This is the minimum number of minutes since the last SMB or manual bolus before Trio will permit an automated SMB."
-                            )
-                            Text("Note: For Omnipod Dash, minimum value is 3 min. For Omnipod Eros, minimum value is 5 min.")
-                        }
+                        Text(
+                            "This is the minimum number of minutes since the last SMB or manual bolus before Trio will permit an automated SMB."
+                        )
+                        Text("Note: For Omnipod Dash, minimum value is 3 min. For Omnipod Eros, minimum value is 5 min.")
                     }
                 )
             }

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

@@ -71,7 +71,7 @@ extension ShortcutsConfig {
                     type: .boolean,
                     label: "Allow Bolusing with Shortcuts",
                     miniHint: "Automate boluses using the Shortcuts App",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint: VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
                         VStack(alignment: .leading, spacing: 10) {
                             Text("Enabling this setting allows the iOS Shortcuts App to send bolus commands to Trio.")

+ 29 - 32
FreeAPS/Sources/Modules/TargetBehavoir/View/TargetBehavoirRootView.swift

@@ -55,17 +55,16 @@ extension TargetBehavoir {
                         comment: "High Temp Target Raises Sensitivity"
                     ),
                     miniHint: "A Temp Target > 110 mg/dL increases sensitivity when glucose is above target",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            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."
-                            )
-                            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."
-                            )
-                            Text("Note: The effect of this can be adjusted with the Half Basal Exercise Target")
-                        }
+                        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."
+                        )
+                        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."
+                        )
+                        Text("Note: The effect of this can be adjusted with the Half Basal Exercise Target")
                     },
                     headerText: "Algorithmic Target Settings"
                 )
@@ -91,17 +90,16 @@ extension TargetBehavoir {
                         comment: "Low Temp Target Lowers Sensitivity"
                     ),
                     miniHint: "Temp Target < 100 mg/dL decreases sensitivity when glucose is below target",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: OFF").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            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."
-                            )
-                            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."
-                            )
-                            Text("Note: The effect of this can be adjusted with the Half Basal Exercise Target")
-                        }
+                        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."
+                        )
+                        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."
+                        )
+                        Text("Note: The effect of this can be adjusted with the Half Basal Exercise Target")
                     }
                 )
 
@@ -164,19 +162,18 @@ extension TargetBehavoir {
                     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",
-                    verboseHint: VStack(spacing: 10) {
+                    verboseHint:
+                    VStack(alignment: .leading, spacing: 10) {
                         Text("Default: 160 mg/dL (8.9 mmol/L)").bold()
-                        VStack(alignment: .leading, spacing: 10) {
-                            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)."
-                            )
-                            Text(
-                                "Note: This setting is only utilized if the settings \"Low Temp Target Lowers Sensitivity\" OR \"High Temp Target Raises Sensitivity\" are enabled."
-                            )
-                        }
+                        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)."
+                        )
+                        Text(
+                            "Note: This setting is only utilized if the settings \"Low Temp Target Lowers Sensitivity\" OR \"High Temp Target Raises Sensitivity\" are enabled."
+                        )
                     }
                 )
             }