Explorar el Código

Update Settings

tmhastings hace 1 año
padre
commit
14327bafaf

+ 123 - 124
FreeAPS/Sources/Modules/DynamicSettings/View/DynamicSettingsRootView.swift

@@ -69,27 +69,24 @@ extension DynamicSettings {
                     ),
                     units: state.units,
                     type: .boolean,
-                    label: "Activate Dynamic ISF (Sensitivity)",
-                    miniHint: """
-                    When enabled, Trio adjusts your Insulin Sensitivity Factor (ISF) automatically based on blood glucose, insulin use, and an adjustment factor
-                    Default: OFF
-                    """,
-                    verboseHint: VStack {
+                    label: "Activate Dynamic ISF",
+                    miniHint: "Adjusts ISF dynamically based on recent BG and insulin \nDefault: OFF",
+                    verboseHint: VStack(spacing: 10) {
                         Text("Default: OFF").bold()
-                        Text("""
-
-                        Dynamic ISF allows Trio to calculate a new ISF with each loop cycle by considering your current blood glucose (BG), total daily dose (TDD) of insulin, and adjustment factor (AF). This helps tailor your insulin response more accurately in real-time. 
-
-                        Dynamic ISF calculates a Dynamic 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("""
-
-                         Dynamic Ratio = (Profile ISF) × AF × TDD × (log(BG ÷ (Insulin Factor) + 1)) ÷ 1800
-
-                         New ISF = (Profile ISF) ÷ (Dynamic Ratio)
-
-                         Insulin Factor = 120 - (Insulin Peak Time)
-                        """).italic()
+                        VStack(alignment: .leading, spacing: 10) {
+                            Text(
+                                "Enabling this feature allows Trio to calculate a new Insulin Sensitivity Factor (ISF) with each loop cycle by considering your current glucose (BG), total daily dose (TDD) of insulin, and adjustment factor (AF). 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."
+                            )
+                            VStack(alignment: .leading, spacing: 10) {
+                                Text("New ISF = (Profile ISF) ÷ (Dynamic Ratio)").italic()
+                                Text("Dynamic Ratio = (Profile ISF) × AF × TDD × (log(BG ÷ (Insulin Factor) + 1)) ÷ 1800")
+                                    .italic()
+                                Text("Insulin Factor = 120 - (Insulin Peak Time)").italic()
+                            }
+                        }
                     },
                     headerText: "Dynamic Settings"
                 )
@@ -109,21 +106,24 @@ extension DynamicSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Activate Dynamic CR (Carb Ratio)",
-                        miniHint: """
-                        Automatically adjust your carb ratio (CR) based on insulin sensitivity and glucose levels
-                        Default: OFF
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Dynamically adjusts carb ratio (CR)\nDefault: OFF",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: OFF").bold()
-                            Text("""
-
-                            Dynamic CR adjusts your carb ratio (CR) in real-time, depending on your Dynamic Ratio. When this ratio increases (indicating you need more insulin), the CR is adjusted to make your insulin dosing more effective. When the ratio decreases (indicating you need less insulin), the carb ratio is scaled back to avoid over-delivery.
-
-                            """)
-                            Text(
-                                "It’s recommended not to use this feature with a high Insulin Fraction (>2), as it can cause insulin dosing to become too aggressive."
-                            )
-                            .italic()
+                            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."
+                                )
+                                .italic()
+                            }
                         }
                     )
 
@@ -141,30 +141,24 @@ extension DynamicSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Use Sigmoid Formula",
-                        miniHint: """
-                        Alternative formula for Dynamic ISF (Sensitivity), that adjusts ISF based on distance from target BG using a sigmoid-shaped curve
-                        Default: OFF
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Adjusts ISF using a sigmoid-shaped curve \nDefault: OFF",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: OFF").bold()
-                            Text("""
-
-                            Turning on the Sigmoid Formula setting changes 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. The curve's steepness is adjusted by the Adjustment Factor (AF), while the Autosens Min/Max settings determine the limits of the ratio adjustment. 
-
-                            When using the Sigmoid Formula, TDD has a much lower impact on the dynamic adjustments to sensitivity.
-
-                            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.
-
-                            """).italic()
-                            Text(
-                                "There has been no empirical data analysis to support the use of the Sigmoid Formula for dynamic sensitivity determination."
-                            )
-                            .italic()
-                            .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. The curve's steepness is influenced by the Adjustment Factor (AF), 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, TDD 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.")
+                                    .italic()
+                                Text(
+                                    "There has been no empirical data analysis to support the use of the Sigmoid Formula for dynamic sensitivity determination."
+                                )
+                                .italic().bold()
+                            }
                         }
                     )
 
@@ -183,20 +177,21 @@ extension DynamicSettings {
                             units: state.units,
                             type: .decimal("adjustmentFactor"),
                             label: "Adjustment Factor (AF)",
-                            miniHint: """
-                            Fine-tune how aggressively your ISF changes in response to glucose fluctuations when using Dynamic ISF (logarithmic formula)
-                            Default: 80%
-                            """,
-                            verboseHint: VStack {
+                            miniHint: "Influences the rate of dynamic sensitivity adjustments \nDefault: 80%",
+                            verboseHint: VStack(spacing: 10) {
                                 Text("Default: 80%").bold()
-                                Text("""
-
-                                The Adjustment Factor (AF) allows you to control how aggressively your dynamic ISF responds to changes in blood glucose levels. 
-
-                                A higher value means a stronger correction, increasing or decreasing the sensitivity of your insulin delivery to highs and lows in your glucose readings.
-
-                                """)
-                                Text("The maximum effect of this setting is limited by the Autosens Min/Max values.").italic()
+                                VStack(alignment: .leading, spacing: 10) {
+                                    Text(
+                                        "The Adjustment Factor (AF) allows you to control how quickly and effectively Dynamic ISF responds to changes in blood 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(
+                                        "Warning: Increasing this setting too high can result in a much lower ISF used at your target glucose than your profile ISF. Decreasing this setting too low can result in a much higher ISF used at your target glucose. It is best to utilize the Desmos graphs from the Trio Docs to optimize all Dynamic Settings."
+                                    )
+                                    .bold().italic()
+                                }
                             }
                         )
                     } else {
@@ -214,25 +209,24 @@ extension DynamicSettings {
                             units: state.units,
                             type: .decimal("adjustmentFactorSigmoid"),
                             label: "Sigmoid Adjustment Factor",
-                            miniHint: """
-                            Fine-tune how aggressively your ISF changes in response to glucose fluctuations when using Sigmoid Formula for Dynamic ISF
-                            Default: 50%
-                            """,
-                            verboseHint: VStack {
+                            miniHint: "Influences the rate of dynamic sensitivity adjustments for Sigmoid \nDefault: 50%",
+                            verboseHint: VStack(spacing: 10) {
                                 Text("Default: 50%").bold()
-                                Text("""
-
-                                The Sigmoid Adjustment Factor (AF) allows you to control how aggressively your Dynamic ISF using the Sigmoid Formula responds to changes in blood glucose levels. 
-
-                                Higher values lead to stronger corrections for high or low blood glucose levels, making the curve steeper. 
-
-                                This setting allows for a more responsive system, but like other dynamic settings, its effect is capped by the Autosens Min/Max limits.
-
-                                """)
-                                Text(
-                                    "Due to how the curve is calculated when using the Sigmoid Formula, increasing this setting has a greater impact on the steepness of the curve than in the standard logarithmic Dynamic ISF calculation. Use caution when adjusting this setting."
-                                )
-                                .italic()
+                                VStack(alignment: .leading, spacing: 10) {
+                                    Text(
+                                        "The Sigmoid Adjustment Factor (AF) allows you to control how quickly Dynamic ISF using Sigmoid Formula responds to changes in blood glucose levels."
+                                    )
+                                    Text(
+                                        "Higher values lead to quicker adjustment responses for high or low blood glucose levels by making the sigmoid-shaped adjustment curve steeper."
+                                    )
+                                    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."
+                                    )
+                                    .italic()
+                                }
                             }
                         )
                     }
@@ -251,22 +245,19 @@ extension DynamicSettings {
                         units: state.units,
                         type: .decimal("weightPercentage"),
                         label: "Weighted Average of TDD",
-                        miniHint: """
-                        The weight of the last 24 hours of total daily insulin dose (TDD) to calculate the Autosens Ratio used in Dynamic ISF and Dynamic CR
-                        Default: 65%
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Weight of 24-hr TDD against 10-day TDD \nDefault: 65%",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: 65%").bold()
-                            Text("""
-
-                            This setting adjusts how much weight is given to your recent total daily insulin dose (TDD) when calculating Dynamic ISF and Dynamic CR. 
-
-                            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. 
-
-                            Setting this to 100% means only the past 24 hours will be used. 
-
-                            A lower value smooths out these variations for more stability.
-                            """)
+                            VStack(alignment: .leading, spacing: 10) {
+                                Text(
+                                    "This setting adjusts how much weight is given to your recent total daily insulin dose (TDD) 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.")
+                            }
                         }
                     )
 
@@ -284,11 +275,8 @@ extension DynamicSettings {
                         units: state.units,
                         type: .boolean,
                         label: "Adjust Basal",
-                        miniHint: """
-                        Replaces Autosens’s formula for adjusting basal rates, with a formula dependent on total daily dose (TDD) of insulin.
-                        Default: OFF
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Use Dynamic Ratio to adjust basal rates \nDefault: OFF",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: OFF").bold()
                             Text("""
 
@@ -325,23 +313,34 @@ extension DynamicSettings {
                         units: state.units,
                         type: .decimal("threshold_setting"),
                         label: "Minimum Safety Threshold",
-                        miniHint: """
-                        This gives you the ability to increase the threshold in which insulin delivery stops.
-                        Default: (Set by Algorithm)
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Increase the safety threshold used to suspend insulin delivery \nDefault: 60 (Set by Algorithm)",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: Set by Algorithm").bold()
-                            Text("""
-
-                            Minimum Threshold Setting is 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.
-
-                            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.
-
-                            If you leave Minimum Safety Threshold at the default, then it will use the safety threshold calculated by the algorithm that depends on your target. The lower you set your target, the lower the safety threshold will get set. If you don't want to allow it to set your safety threshold below a certain value, you can raise Minimum Safety Threshold to a higher value using this setting.
-
-                            """)
-                            Text("Basal may be resumed if there's negative IOB and glucose is rising faster than the forecast.")
-                                .italic()
+                            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 BG - 0.5 × (Target BG - 40)").italic()
+                                    }
+                                    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").italic()
+                                    }
+                                    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's negative IOB and glucose is rising faster than the forecast."
+                                    )
+                                    .italic()
+                                }
+                            }
                         }
                     )
                 }

+ 37 - 51
FreeAPS/Sources/Modules/GeneralSettings/View/UnitsLimitsSettingsRootView.swift

@@ -58,23 +58,23 @@ extension UnitsLimitsSettings {
                     units: state.units,
                     type: .decimal("maxIOB"),
                     label: NSLocalizedString("Max IOB", comment: "Max IOB"),
-                    miniHint: """
-                    The highest amount of insulin Trio can allow to be active at any given time.
-                    Default: 0 units
-                    """,
-                    verboseHint: VStack {
+                    miniHint: "Maximum units of insulin allowed active at any given time \nDefault: 0 units",
+                    verboseHint: VStack(spacing: 10) {
                         Text("Default: 0 units").bold()
-                        Text("""
-
-                        This must be greater than 0 for any automatic temp basals or SMBs to be given.
-                        """).bold().italic()
-                        Text("""
-
-                        The maximum amount of Insulin On Board (IOB) from all sources - both basal and bolus - that Trio is allowed to accumulate to treat higher-than-target glucose.
-
-                        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("Manually entered bolus amounts are not restricted by this limit.").italic()
+                        VStack(alignment: .leading, spacing: 10) {
+                            Text("Warning: This must be greater than 0 for any automatic temp basals or SMBs to be given.").bold()
+                                .italic()
+                            Text(
+                                "The maximum amount of Insulin On Board (IOB) above profile basals from all sources - positive temp basals, 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."
+                            )
+                            .italic()
+                        }
                     }
                 )
 
@@ -92,20 +92,14 @@ extension UnitsLimitsSettings {
                     units: state.units,
                     type: .decimal("maxBolus"),
                     label: "Max Bolus",
-                    miniHint: """
-                    Largest bolus of insulin allowed
-                    Default: 10 units
-                    """,
-                    verboseHint: VStack {
+                    miniHint: "Largest bolus of insulin allowed \nDefault: 10 units",
+                    verboseHint: VStack(spacing: 10) {
                         Text("Default: 10 units").bold()
-                        Text("""
-
-                        The maximum bolus allowed to be delivered at one time. This limits manual and automatic bolus.
-
-                        Most set this to their largest meal bolus. Then, adjust if needed.
-
-                        If you attempt to request a bolus larger than this, the bolus will not be accepted.
-                        """)
+                        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.")
+                        }
                     }
                 )
 
@@ -123,18 +117,13 @@ extension UnitsLimitsSettings {
                     units: state.units,
                     type: .decimal("maxBasal"),
                     label: "Max Basal",
-                    miniHint: """
-                    Largest basal rate allowed
-                    Default: 2.0 units
-                    """,
-                    verboseHint: VStack {
+                    miniHint: "Largest basal rate allowed \nDefault: 2.0 units",
+                    verboseHint: VStack(spacing: 10) {
                         Text("Default: 2.0 units").bold()
-                        Text("""
-
-                        The maximum basal rate allowed to be set or scheduled.
-
-                        This applies to both automatic or manual basal rates.
-                        """)
+                        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.")
+                        }
                     }
                 )
 
@@ -152,18 +141,15 @@ extension UnitsLimitsSettings {
                     units: state.units,
                     type: .decimal("maxCOB"),
                     label: NSLocalizedString("Max COB", comment: "Max COB"),
-                    miniHint: """
-                    The highest amount of carbs Trio can use in dosing calculations.
-                    Default: 120 carbs
-                    """,
-                    verboseHint: VStack {
+                    miniHint: "Max carbs Trio can use in dosing calculations /nDefault: 120 carbs",
+                    verboseHint: VStack(spacing: 10) {
                         Text("Default: 120 carbs").bold()
-                        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 maxCOB and remain at max until remaining carbs have shown to be absorbed.
-
-                        """)
-                        Text("This is an important limit when UAM is ON.").italic()
+                        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.").italic()
+                        }
                     }
                 )
             }

+ 21 - 43
FreeAPS/Sources/Modules/GlucoseNotificationSettings/View/GlucoseNotificationSettingsRootView.swift

@@ -70,16 +70,10 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Show Glucose App Badge",
-                    miniHint: """
-                    Show your current glucose reading at the top of the Trio app icon
-                    Default: OFF
-                    """,
-                    verboseHint: VStack {
+                    miniHint: "Show your current glucose on Trio app icon \nDefault: OFF",
+                    verboseHint: VStack(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.
-                        """)
+                        Text("This will add your current glucose on the top right of your Trio icon as a red notification badge.")
                     },
                     headerText: "Various Glucose Notifications"
                 )
@@ -98,16 +92,10 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Always Notify Glucose",
-                    miniHint: """
-                    A notification will be triggered every time your glucose is updated in Trio
-                    Default: OFF
-                    """,
+                    miniHint: "Trigger a notification every time your glucose is updated \nDefault: OFF",
                     verboseHint: VStack {
                         Text("Default: OFF").bold()
-                        Text("""
-
-                        A notification will be triggered every time your glucose is updated in Trio.
-                        """)
+                        Text("A notification will be triggered every time your glucose is updated in Trio.")
                     }
                 )
 
@@ -125,16 +113,10 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Play Alarm Sound",
-                    miniHint: """
-                    This will cause a sound to be triggered by every Trio notification
-                    Default: OFF
-                    """,
-                    verboseHint: VStack {
+                    miniHint: "Alarm with every Trio notification \nDefault: OFF",
+                    verboseHint: VStack(spacing: 10) {
                         Text("Default: OFF").bold()
-                        Text("""
-
-                        This will cause a sound to be triggered by every Trio notification.
-                        """)
+                        Text("This will cause a sound to be triggered by every Trio notification.")
                     }
                 )
 
@@ -152,16 +134,10 @@ extension GlucoseNotificationSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Add Glucose Source to Alarm",
-                    miniHint: """
-                    The source of the glucose reading will be added to the notification
-                    Default: OFF
-                    """,
-                    verboseHint: VStack {
+                    miniHint: "Source of the glucose reading will be added to the notification \nDefault: OFF",
+                    verboseHint: VStack(spacing: 10) {
                         Text("Default: OFF").bold()
-                        Text("""
-
-                        The source of the glucose reading will be added to the notification.
-                        """)
+                        Text("The source of the glucose reading will be added to the notification.")
                     }
                 )
 
@@ -260,7 +236,7 @@ extension GlucoseNotificationSettings {
 
                     HStack(alignment: .top) {
                         Text(
-                            "Set the lower and upper limit for glucose alarms. See hint for more details."
+                            "Sets the lower and upper limit for glucose alarms"
                         )
                         .lineLimit(nil)
                         .font(.footnote)
@@ -270,15 +246,17 @@ extension GlucoseNotificationSettings {
                             action: {
                                 hintLabel = "Low and High Glucose Alarm Limits"
                                 selectedVerboseHint =
-                                    AnyView(VStack {
+                                    AnyView(VStack(spacing: 10) {
                                         Text("Low Default: 70 mg/dL").bold()
                                         Text("High Default: 180 mg/dL").bold()
-                                        Text("""
-
-                                        These two settings determine the range outside of which you will be notified via push notifications. 
-
-                                        If your CGM readings are below the Low value or above the High value, you will receive a glucose alarm.
-                                        """)
+                                        VStack(alignment: .leading, spacing: 10) {
+                                            Text(
+                                                "These two settings determine the range outside of which you will be notified via push notifications."
+                                            )
+                                            Text(
+                                                "If your CGM readings are below the Low value or above the High value, you will receive a glucose alarm."
+                                            )
+                                        }
                                     })
                                 shouldDisplayHint.toggle()
                             },

+ 13 - 17
FreeAPS/Sources/Modules/HealthKit/View/AppleHealthKitRootView.swift

@@ -47,18 +47,14 @@ extension AppleHealthKit {
                     units: state.units,
                     type: .boolean,
                     label: "Connect to Apple Health",
-                    miniHint: """
-                    Allows Trio to read from and write to Apple Health
-                    Default: OFF
-                    """,
+                    miniHint: "Allow Trio to read from and write to Apple Health \nDefault: OFF",
                     verboseHint: VStack {
                         Text("Default: OFF").bold()
-                        Text("""
-
-                        This allows Trio to read from and write to Apple Health.
-
-                        """)
-                        Text("You must also give permissions in iOS System Settings for the Health app.").bold().italic()
+                        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()
+                                .italic()
+                        }
                     },
                     headerText: "Apple Health Integration"
                 )
@@ -70,13 +66,13 @@ extension AppleHealthKit {
                                 Image(systemName: "exclamationmark.circle.fill")
                                 Text("Give Apple Health Write Permissions")
                             }.padding(.bottom)
-                            Text("""
-                            1. Open the Settings app on your iOS device
-                            2. Scroll down or type "Health" in the settings search bar and select the "Health" app
-                            3. Tap on "Data Access & Devices"
-                            4. Find and select "Trio" from the list of apps
-                            5. Ensure that the "Write Data" option is enabled for the desired health metrics
-                            """).font(.footnote)
+                            VStack(alignment: .leading, spacing: 5) {
+                                Text("1. Open the Settings app on your iOS device")
+                                Text("2. Scroll down or type \"Health\" in the settings search bar and select the \"Health\" app")
+                                Text("3. Tap on \"Data Access & Devices\"")
+                                Text("4. Find and select \"Trio\" from the list of apps")
+                                Text("5. Ensure that the \"Write Data\" option is enabled for the desired health metrics")
+                            }.font(.footnote)
                         }
                         .padding(.vertical)
                         .foregroundColor(Color.secondary)

+ 31 - 25
FreeAPS/Sources/Modules/LiveActivitySettings/View/LiveActivitySettingsRootView.swift

@@ -47,7 +47,7 @@ extension LiveActivitySettings {
                     Section(
                         header: Text("Display Live Data From Trio"),
                         content: {
-                            Text("Live Activities must be enabled under iOS Settings to allow Trio to display live data.")
+                            Text("Live Activities must be enabled under iOS Settings to allow Trio to display live data")
                         }
                     ).listRowBackground(Color.chart)
 
@@ -75,25 +75,24 @@ extension LiveActivitySettings {
                         units: state.units,
                         type: .boolean,
                         label: "Enable Live Activity",
-                        miniHint: """
-                        Live Activities display Trio's glucose readings and other current data on the iPhone Lock Screen and in the Dynamic Island
-                        Default: OFF
-                        """,
+                        miniHint: "Display customizable data on Lock Screen and Dynamic Island \nDefault: OFF",
                         verboseHint: VStack(spacing: 10) {
                             Text("Default: OFF").bold()
-                            Text(
-                                "With Live Activities, Trio displays your choice of the following current data on your iPhone's Lock Screen and in the Dynamic Island:"
-                            )
-                            VStack(alignment: .leading) {
-                                Text("• Current Glucose Reading")
-                                Text("• IOB: Insulin On Board")
-                                Text("• COB: Carbohydrates On Board")
-                                Text("• Last Updated: Time of Last Loop Cycle")
-                                Text("• Glucose Trend Chart")
+                            VStack(alignment: .leading, spacing: 10) {
+                                Text(
+                                    "With Live Activities enabled, Trio displays your choice of the following current data on your iPhone's Lock Screen and in the Dynamic Island:"
+                                )
+                                VStack(alignment: .leading) {
+                                    Text("• Current Glucose Reading")
+                                    Text("• IOB: Insulin On Board")
+                                    Text("• COB: Carbohydrates On Board")
+                                    Text("• Last Updated: Time of Last Loop Cycle")
+                                    Text("• Glucose Trend Chart")
+                                }.font(.footnote)
+                                Text(
+                                    "It allows you to refer to live information at a glance and perform quick actions in your diabetes management."
+                                )
                             }
-                            Text(
-                                "It allows you to refer to live information at a glance and perform quick actions in your diabetes management."
-                            )
                         },
                         headerText: "Display Live Data From Trio"
                     )
@@ -112,7 +111,7 @@ extension LiveActivitySettings {
 
                                 HStack(alignment: .top) {
                                     Text(
-                                        "Trio Live Activities can be simplistic or detailed in their information display. See hint for more details."
+                                        "Choose between simple or detailed style \nDefault: Simple"
                                     )
                                     .font(.footnote)
                                     .foregroundColor(.secondary)
@@ -124,18 +123,25 @@ extension LiveActivitySettings {
                                             selectedVerboseHint =
                                                 AnyView(
                                                     VStack(spacing: 10) {
-                                                        Text(
-                                                            "Trio's Simple Lock Screen Widget only display current glucose reading, trend arrow, delta and the timestamp of the current reading."
-                                                        )
-                                                        Text(
-                                                            "The Detailed Lock Screen Widget offers users a glucose chart as well as the ability to customize the information provided in the Detailed Widget using the following options:"
-                                                        )
+                                                        Text("Default: Simple").bold()
+                                                        VStack(alignment: .leading, spacing: 10) {
+                                                            Text("Simple:").bold()
+                                                            Text(
+                                                                "Trio's Simple Lock Screen Widget displays current glucose reading, trend arrow, delta and the timestamp of the current reading."
+                                                            )
+                                                        }
+                                                        VStack(alignment: .leading, spacing: 10) {
+                                                            Text("Detailed:").bold()
+                                                            Text(
+                                                                "The Detailed Lock Screen Widget offers users a glucose chart as well as the ability to customize the information provided in the Detailed Widget using the following options:"
+                                                            )
+                                                        }
                                                         VStack(alignment: .leading) {
                                                             Text("• Current Glucose Reading")
                                                             Text("• IOB: Insulin On Board")
                                                             Text("• COB: Carbohydrates On Board")
                                                             Text("• Last Updated: Time of Last Loop Cycle")
-                                                        }
+                                                        }.font(.footnote)
                                                     }
                                                 )
                                             shouldDisplayHint.toggle()

+ 89 - 103
FreeAPS/Sources/Modules/MealSettings/View/MealSettingsRootView.swift

@@ -174,13 +174,13 @@ extension MealSettings {
                                     action: {
                                         hintLabel = "Limits per Entry"
                                         selectedVerboseHint =
-                                            AnyView(Text("""
-                                            Max Carbs = Enter the largest carbohydrate value allowed per meal entry
-
-                                            Max Fat = Enter the largest fat value allowed per meal entry
-
-                                            Max Protein = Enter the largest protein value allowed per meal entry
-                                            """))
+                                            AnyView(
+                                                VStack(spacing: 10) {
+                                                    Text("Max Carbs: Enter the largest carbohydrate value allowed per meal entry")
+                                                    Text("Max Fat: Enter the largest fat value allowed per meal entry")
+                                                    Text("Max Protein: Enter the largest protein value allowed per meal entry")
+                                                }
+                                            )
                                         shouldDisplayHint.toggle()
                                     },
                                     label: {
@@ -208,42 +208,40 @@ extension MealSettings {
                     units: state.units,
                     type: .boolean,
                     label: "Enable Fat and Protein Entries",
-                    miniHint: """
-                    Allows you to add fat and protein macros to meals
-                    Default: OFF
-                    """,
+                    miniHint: "Allows you to add fat and protein macros to meals \nDefault: OFF",
                     verboseHint: VStack(spacing: 10) {
                         Text("Default: OFF").bold()
-                        Text("""
-
-                        Enabling this setting allows you to log fat and protein, which are then converted into future carb equivalents using the Warsaw Method.
-
-                        The Warsaw Method helps account for the delayed glucose spikes caused by fat and protein in meals. It uses Fat-Protein Units (FPU) to calculate the carb effect from fat and protein. The system spreads insulin delivery over several hours to mimic natural insulin release, helping to manage post-meal glucose spikes.
-
-                        """)
-                        Text("Fat Conversion").bold()
-                        Text("𝑭 = fat(g) × 90%").italic()
-                        Text("""
-
-                        Protein Conversion
-                        """).bold()
-                        Text("𝑷 = protein(g) × 40%").italic()
-                        Text("""
-
-                        FPU Conversion
-                        """).bold()
-                        Text("𝑭 + 𝑷 = g CHO").italic()
-                        Text(
-                            """
-
-                            You can personalize the conversion calculation by adjusting the following settings that will appear when this option is enabled:
-                            """
-                        )
-                        VStack(alignment: .leading) {
-                            Text("• Fat and Protein Delay")
-                            Text("• Maximum Duration")
-                            Text("• Spread Interval")
-                            Text("• Fat and Protein Percentage")
+                        VStack(alignment: .leading, spacing: 10) {
+                            Text(
+                                "Enabling this setting allows you to log fat and protein, which are then converted into future carb equivalents using the Warsaw Method."
+                            )
+                            VStack(alignment: .leading, spacing: 5) {
+                                Text("Warsaw Method").bold()
+                                Text(
+                                    "The Warsaw Method helps account for the delayed glucose spikes caused by fat and protein in meals. It uses Fat-Protein Units (FPU) to calculate the carb effect from fat and protein. The system spreads insulin delivery over several hours to mimic natural insulin release, helping to manage post-meal glucose spikes."
+                                )
+                            }
+                            VStack(alignment: .center) {
+                                Text("Fat Conversion").bold()
+                                Text("𝑭 = fat(g) × 90%")
+                            }
+                            VStack(alignment: .center) {
+                                Text("Protein Conversion").bold()
+                                Text("𝑷 = protein(g) × 40%")
+                            }
+                            VStack(alignment: .center) {
+                                Text("FPU Conversion").bold()
+                                Text("𝑭 + 𝑷 = g CHO")
+                            }
+                            Text(
+                                "You can personalize the conversion calculation by adjusting the following settings that will appear when this option is enabled:"
+                            ).italic()
+                            VStack(alignment: .leading) {
+                                Text("• Fat and Protein Delay")
+                                Text("• Maximum Duration")
+                                Text("• Spread Interval")
+                                Text("• Fat and Protein Percentage")
+                            }
                         }
                     },
                     headerText: "Fat and Protein"
@@ -263,18 +261,17 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("delay"),
                         label: "Fat and Protein Delay",
-                        miniHint: """
-                        Set the delay between fat & protein entry in the bolus calculator and the first FPU entry
-                        Default: 60 min
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Delay between fat & protein entry and first FPU entry \nDefault: 60 min",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: 60 min").bold()
-                            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). 
-
-                            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.
-                            """)
+                            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."
+                                )
+                            }
                         }
                     )
 
@@ -292,24 +289,20 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("timeCap"),
                         label: "Maximum Duration",
-                        miniHint: """
-                        Set the maximum timeframe to extend FPUs
-                        Default: 8 hours
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Set the maximum timeframe to extend FPUs \nDefault: 8 hours",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: 8 hours").bold()
-                            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.
-
-                            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
-
-                            Increasing this setting may result in more FPU entries with smaller carb values.
-
-                            Decreasing this setting may result in fewer FPU entries with larger carb values.
-
-                            """)
-                            Text("Accepted range for this setting is 5 - 12 hours.").italic()
+                            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.").italic()
+                            }
                         }
                     )
 
@@ -327,24 +320,18 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("minuteInterval"),
                         label: "Spread Interval",
-                        miniHint: """
-                        Set the time interval between FPUs
-                        Default: 30 minutes
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Time interval between FPUs \nDefault: 30 minutes",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: 30 minutes").bold()
-                            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.
-
-                            The shorter the interval, the smoother the correlating dosing result.
-
-                            Increasing this setting may result in fewer FPU entries with larger carb values.
-
-                            Decreasing this setting may result in more FPU entries with smaller carb values.
-
-                            """)
-                            Text("Accepted range for this setting is 5 - 60 minutes.").italic()
+                            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.").italic()
+                            }
                         }
                     )
 
@@ -362,24 +349,23 @@ extension MealSettings {
                         units: state.units,
                         type: .decimal("individualAdjustmentFactor"),
                         label: "Fat and Protein Percentage",
-                        miniHint: """
-                        Influences the conversion rate used in the Warsaw Method
-                        Default: 50%
-                        """,
-                        verboseHint: VStack {
+                        miniHint: "Influences the conversion rate used in the Warsaw Method \nDefault: 50%",
+                        verboseHint: VStack(spacing: 10) {
                             Text("Default: 50%").bold()
-                            Text("This setting changes how much effect the fat and protein entry has on FPUs.")
-                            VStack(alignment: .center) {
-                                Text("50% is half effect:").bold()
-                                Text("(Fat × 45%) + (Protein × 20%)")
-                                Text("100% is full effect:").bold()
-                                Text("(Fat × 90%) + (Protein × 40%)")
-                                Text("200% is double effect:").bold()
-                                Text("(Fat × 180%) + (Protein x 80%)")
-                                Text("""
-
-                                You may find that your normal carb ratio needs to increase to a larger number when you begin adding fat and protein entries. For this reason, it is best to start with a factor of about 50% to ease into it.
-                                """).italic()
+                            VStack(alignment: .leading, spacing: 10) {
+                                Text("This setting changes how much effect the fat and protein entry has on FPUs.")
+                                VStack(alignment: .center) {
+                                    Text("50% is half effect:").bold()
+                                    Text("(Fat × 45%) + (Protein × 20%)")
+                                    Text("100% is full effect:").bold()
+                                    Text("(Fat × 90%) + (Protein × 40%)")
+                                    Text("200% is double effect:").bold()
+                                    Text("(Fat × 180%) + (Protein x 80%)")
+                                }
+                                Text(
+                                    "Tip: You may find that your normal carb ratio needs to increase to a larger number when you begin adding fat and protein entries. For this reason, it is best to start with a factor of about 50% to ease"
+                                )
+                                .italic()
                             }
                         }
                     )

+ 51 - 46
FreeAPS/Sources/Modules/UserInterfaceSettings/View/UserInterfaceSettingsRootView.swift

@@ -81,12 +81,12 @@ extension UserInterfaceSettings {
                                         hintLabel = "Color Scheme Preference"
                                         selectedVerboseHint =
                                             AnyView(Text("""
-                                                Set the app color scheme using the following options
-                                                
-                                                System Default: Follows the phone's current color scheme setting at that time
-                                                Light: Always in Light mode
-                                                Dark: Always in Dark mode
-                                                """))
+                                            Set the app color scheme using the following options
+
+                                            System Default: Follows the phone's current color scheme setting at that time
+                                            Light: Always in Light mode
+                                            Dark: Always in Dark mode
+                                            """))
                                         shouldDisplayHint.toggle()
                                     },
                                     label: {
@@ -124,9 +124,10 @@ extension UserInterfaceSettings {
                                     hintLabel = "Glucose Color Scheme"
                                     selectedVerboseHint =
                                         AnyView(
-                                            Text("""
+                                            Text(
+                                                """
                                                 Set the color scheme for glucose readings on the main glucose graph, live activities, and bolus calculatorusing the following options:
-                                                
+
                                                 Static: Below-Range Target readings will be in RED, In-Range will be GREEN, Above-Range will be YELLOW
                                                 Dynamic: Readings on Target will be GREEN. As readings approach and exceed below target, they become more RED. As readings approach and exceed above targer, they become more PURPLE.
                                                 """
@@ -164,8 +165,8 @@ extension UserInterfaceSettings {
                                         hintLabel = "Show Main Chart X- and Y-Axis Grid Lines"
                                         selectedVerboseHint =
                                             AnyView(Text("""
-                                                Choose whether or not to display one or both X- and Y-Axis grid lines.
-                                                """))
+                                            Choose whether or not to display one or both X- and Y-Axis grid lines.
+                                            """))
                                         shouldDisplayHint.toggle()
                                     },
                                     label: {
@@ -195,10 +196,10 @@ extension UserInterfaceSettings {
                     label: "Show Low and High Thresholds",
                     miniHint: "Display the Low and High glucose Thresholds set below",
                     verboseHint: Text("""
-                        This setting displays the upper and lower values for your glucose target range.
-                        
-                        This range is for display and statistical purposes only and does not influence insulin dosing.
-                        """)
+                    This setting displays the upper and lower values for your glucose target range.
+
+                    This range is for display and statistical purposes only and does not influence insulin dosing.
+                    """)
                 )
 
                 if state.rulerMarks {
@@ -274,7 +275,8 @@ extension UserInterfaceSettings {
                             }
 
                             HStack(alignment: .top) {
-                                Text("""
+                                Text(
+                                    """
                                     Set low and high glucose values for the main screen glucose graph and statistics
                                     Low Default: 70
                                     High Default: 180
@@ -290,12 +292,12 @@ extension UserInterfaceSettings {
                                         hintLabel = "Low and High Thresholds"
                                         selectedVerboseHint =
                                             AnyView(Text("""
-                                                Default values are based on internationally accepted Time in Range values of 70-180 mg/dL (5.5-10 mmol/L)
-                                                
-                                                Set the values used in the main screen glucose graph and to determine Time in Range for Statistics.
-                                                
-                                                Note: These values are not used to calculate insulin dosing.
-                                                """))
+                                            Default values are based on internationally accepted Time in Range values of 70-180 mg/dL (5.5-10 mmol/L)
+
+                                            Set the values used in the main screen glucose graph and to determine Time in Range for Statistics.
+
+                                            Note: These values are not used to calculate insulin dosing.
+                                            """))
                                         shouldDisplayHint.toggle()
                                     },
                                     label: {
@@ -321,7 +323,8 @@ extension UserInterfaceSettings {
                         }.padding(.top)
 
                         HStack(alignment: .top) {
-                            Text("""
+                            Text(
+                                """
                                 Choose between the OpenAPS colored "Lines" or the "Cone" of Uncertainty for the Forecast Lines
                                 Default: Cone
                                 """
@@ -335,13 +338,13 @@ extension UserInterfaceSettings {
                                     hintLabel = "Forecast Display Type"
                                     selectedVerboseHint =
                                         AnyView(Text("""
-                                            Default: Cone
-                                            
-                                            This setting allows you to choose between the following two options for the Forecast lines (previously: Prediction Lines).
-                                            
-                                            Lines: Uses the IOB, COB, UAM, and ZT forecast lines from OpenAPS
-                                            Cone: Uses a combined range of all possible forecasts from the OpenAPS lines and provides you with a range of possible forecasts. This option has shown to reduce confusion and stress around algorithm forecasts by providing a less concerning visual representation.
-                                            """))
+                                        Default: Cone
+
+                                        This setting allows you to choose between the following two options for the Forecast lines (previously: Prediction Lines).
+
+                                        Lines: Uses the IOB, COB, UAM, and ZT forecast lines from OpenAPS
+                                        Cone: Uses a combined range of all possible forecasts from the OpenAPS lines and provides you with a range of possible forecasts. This option has shown to reduce confusion and stress around algorithm forecasts by providing a less concerning visual representation.
+                                        """))
                                     shouldDisplayHint.toggle()
                                 },
                                 label: {
@@ -370,16 +373,16 @@ extension UserInterfaceSettings {
                     label: "X-Axis Interval Step",
                     miniHint: "Determines how many hours are shown in the main graph",
                     verboseHint: Text("""
-                        Default: 6 hours
-                        
-                        This setting determines how many hours are shown in each view of the main graph.
-                        
-                        The default setting of 6 hours uses 2, 4, 6, 12, and 24 hour views.
-                        
-                        A setting of 4 would use 1.3, 2, 4, 8, and 16 hour views.
-                        
-                        A setting of 9 would use 3, 4.5, 9, 18, and 36 hour views.
-                        """)
+                    Default: 6 hours
+
+                    This setting determines how many hours are shown in each view of the main graph.
+
+                    The default setting of 6 hours uses 2, 4, 6, 12, and 24 hour views.
+
+                    A setting of 4 would use 1.3, 2, 4, 8, and 16 hour views.
+
+                    A setting of 9 would use 3, 4.5, 9, 18, and 36 hour views.
+                    """)
                 )
 
                 Section {
@@ -406,12 +409,12 @@ extension UserInterfaceSettings {
                                     hintLabel = "Total Insulin Display Type"
                                     selectedVerboseHint =
                                         AnyView(Text("""
-                                            Choose between Total Daily Dose (TDD) or Total Insulin in Scope (TINS) to be displayed above the main glucose graph.
-                                            
-                                            Total Daily Dose: Displays the last 24 hours of total insulin administered, both basal and bolus.
-                                            
-                                            Total Insulin in Scope: Displays the total insulin administered since midnight, both basal and bolus.
-                                            """))
+                                        Choose between Total Daily Dose (TDD) or Total Insulin in Scope (TINS) to be displayed above the main glucose graph.
+
+                                        Total Daily Dose: Displays the last 24 hours of total insulin administered, both basal and bolus.
+
+                                        Total Insulin in Scope: Displays the total insulin administered since midnight, both basal and bolus.
+                                        """))
                                     shouldDisplayHint.toggle()
                                 },
                                 label: {
@@ -440,7 +443,9 @@ extension UserInterfaceSettings {
                     type: .boolean,
                     label: "Override HbA1c Unit",
                     miniHint: "Display HbA1c in mmol/mol or %",
-                    verboseHint: Text("Choose between displaying the HbA1c value in the statistics view as a percentage (Target of <6.5%) or mmol/mol (Target of <48 mmol/mol)"),
+                    verboseHint: Text(
+                        "Choose between displaying the HbA1c value in the statistics view as a percentage (Target of <6.5%) or mmol/mol (Target of <48 mmol/mol)"
+                    ),
                     headerText: "Trio Statistics"
                 )