diff --git a/docs/api/checkbox.md b/docs/api/checkbox.md
index 900f827e237..a7b733f201d 100644
--- a/docs/api/checkbox.md
+++ b/docs/api/checkbox.md
@@ -74,6 +74,16 @@ import LabelLink from '@site/static/usage/v8/checkbox/label-link/index.md';
+## Helper & Error Text
+
+Helper and error text can be used inside of a checkbox with the `helperText` and `errorText` property. The error text will not be displayed unless the `ion-invalid` and `ion-touched` classes are added to the `ion-checkbox`. This ensures errors are not shown before the user has a chance to enter data.
+
+In Angular, this is done automatically through form validation. In JavaScript, React and Vue, the class needs to be manually added based on your own validation.
+
+import HelperError from '@site/static/usage/v8/checkbox/helper-error/index.md';
+
+
+
## Theming
### CSS Custom Properties
diff --git a/docs/api/modal.md b/docs/api/modal.md
index d8fb298ded3..1249e2a813b 100644
--- a/docs/api/modal.md
+++ b/docs/api/modal.md
@@ -157,6 +157,14 @@ import SheetHandleBehaviorExample from '@site/static/usage/v8/modal/sheet/handle
+### Scrolling content at all breakpoints
+
+Sheet modals can be configured to allow scrolling content at all breakpoints, making them ideal for displaying content larger than the viewport. By setting the `expandToScroll` property to `false`, the content remains scrollable at every breakpoint. Otherwise, by default, scrolling is only enabled when the sheet modal is fully expanded.
+
+import SheetScrollingContentExample from '@site/static/usage/v8/modal/sheet/expand-to-scroll/index.md';
+
+
+
## Styling
Modals are presented at the root of your application so they overlay your entire app. This behavior applies to both inline modals and modals presented from a controller. As a result, custom modal styles can not be scoped to a particular component as they will not apply to the modal. Instead, styles must be applied globally. For most developers, placing the custom styles in `global.css` is sufficient.
diff --git a/docs/api/radio.md b/docs/api/radio.md
index c22b839f24e..fb717c14835 100644
--- a/docs/api/radio.md
+++ b/docs/api/radio.md
@@ -76,6 +76,16 @@ import EmptySelection from '@site/static/usage/v8/radio/empty-selection/index.md
+## Helper & Error Text
+
+Helper and error text can be used inside of a radio group with the `helperText` and `errorText` property. The error text will not be displayed unless the `ion-invalid` and `ion-touched` classes are added to the `ion-radio-group`. This ensures errors are not shown before the user has a chance to enter data.
+
+In Angular, this is done automatically through form validation. In JavaScript, React and Vue, the class needs to be manually added based on your own validation.
+
+import HelperError from '@site/static/usage/v8/radio/helper-error/index.md';
+
+
+
## Theming
diff --git a/docs/api/select.md b/docs/api/select.md
index 8a310608fce..0642c6e701d 100644
--- a/docs/api/select.md
+++ b/docs/api/select.md
@@ -253,6 +253,16 @@ import TypeaheadExample from '@site/static/usage/v8/select/typeahead/index.md';
+## Helper & Error Text
+
+Helper and error text can be used inside of a select with the `helperText` and `errorText` property. The error text will not be displayed unless the `ion-invalid` and `ion-touched` classes are added to the `ion-select`. This ensures errors are not shown before the user has a chance to enter data.
+
+In Angular, this is done automatically through form validation. In JavaScript, React and Vue, the class needs to be manually added based on your own validation.
+
+import HelperError from '@site/static/usage/v8/select/helper-error/index.md';
+
+
+
## Interfaces
### SelectChangeEventDetail
diff --git a/docs/api/toggle.md b/docs/api/toggle.md
index b5a489705ce..c0b7445b2ac 100644
--- a/docs/api/toggle.md
+++ b/docs/api/toggle.md
@@ -73,6 +73,16 @@ import Justify from '@site/static/usage/v8/toggle/justify/index.md';
+## Helper & Error Text
+
+Helper and error text can be used inside of a toggle with the `helperText` and `errorText` property. The error text will not be displayed unless the `ion-invalid` and `ion-touched` classes are added to the `ion-toggle`. This ensures errors are not shown before the user has a chance to enter data.
+
+In Angular, this is done automatically through form validation. In JavaScript, React and Vue, the class needs to be manually added based on your own validation.
+
+import HelperError from '@site/static/usage/v8/toggle/helper-error/index.md';
+
+
+
## Theming
### Colors
diff --git a/docs/developing/config.md b/docs/developing/config.md
index 02ac03567e2..0f70b8da46d 100644
--- a/docs/developing/config.md
+++ b/docs/developing/config.md
@@ -178,6 +178,7 @@ Below are the config options that Ionic uses.
| `loadingEnter` | `AnimationBuilder` | Provides a custom enter animation for all `ion-loading`, overriding the default "animation". |
| `loadingLeave` | `AnimationBuilder` | Provides a custom leave animation for all `ion-loading`, overriding the default "animation". |
| `loadingSpinner` | `SpinnerTypes` | Overrides the default spinner for all `ion-loading` overlays. |
+| `logLevel` | `'OFF' \| 'ERROR' \| 'WARN'` | Configures the logging level for Ionic Framework. If `'OFF'`, no errors or warnings are logged. If `'ERROR'`, only errors are logged. If `'WARN'`, errors and warnings are logged. |
| `menuIcon` | `string` | Overrides the default icon in all `` components. |
| `menuType` | `string` | Overrides the default menu type for all `` components. |
| `modalEnter` | `AnimationBuilder` | Provides a custom enter animation for all `ion-modal`, overriding the default "animation". |
diff --git a/static/usage/v8/checkbox/helper-error/angular/example_component_html.md b/static/usage/v8/checkbox/helper-error/angular/example_component_html.md
new file mode 100644
index 00000000000..7153841ac36
--- /dev/null
+++ b/static/usage/v8/checkbox/helper-error/angular/example_component_html.md
@@ -0,0 +1,15 @@
+```html
+
+```
diff --git a/static/usage/v8/checkbox/helper-error/angular/example_component_ts.md b/static/usage/v8/checkbox/helper-error/angular/example_component_ts.md
new file mode 100644
index 00000000000..d8611d00de6
--- /dev/null
+++ b/static/usage/v8/checkbox/helper-error/angular/example_component_ts.md
@@ -0,0 +1,29 @@
+```ts
+import { Component } from '@angular/core';
+import { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';
+import { IonCheckbox, IonButton } from '@ionic/angular/standalone';
+
+@Component({
+ selector: 'app-example',
+ standalone: true,
+ imports: [IonCheckbox, IonButton, ReactiveFormsModule],
+ templateUrl: './example.component.html',
+ styleUrl: './example.component.css',
+})
+export class ExampleComponent {
+ myForm: FormGroup;
+
+ constructor(private fb: FormBuilder) {
+ this.myForm = this.fb.group({
+ agree: [false, Validators.requiredTrue],
+ });
+ }
+
+ onSubmit() {
+ // Mark the control as touched to trigger the error message.
+ // This is needed if the user submits the form without interacting
+ // with the checkbox.
+ this.myForm.get('agree')!.markAsTouched();
+ }
+}
+```
diff --git a/static/usage/v8/checkbox/helper-error/demo.html b/static/usage/v8/checkbox/helper-error/demo.html
new file mode 100644
index 00000000000..f16fd9b8503
--- /dev/null
+++ b/static/usage/v8/checkbox/helper-error/demo.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+ Input
+
+
+
+
+
+
+
+