diff --git a/docs/updating/9-0.md b/docs/updating/9-0.md
index 37e18ebd30..1bab1177eb 100644
--- a/docs/updating/9-0.md
+++ b/docs/updating/9-0.md
@@ -340,10 +340,10 @@ For more information on migrating from React Router v5 to v6, refer to the [Reac
### Vue
-1. Ionic 9 supports Vue 3.5+ and Vue Router 5. Update Vue and Vue Router:
+1. Ionic 9 supports Vue 3.5+. Update to the latest version of Vue:
```shell
-npm install vue@latest vue-router@latest
+npm install vue@latest
```
2. Update to the latest version of Ionic 9:
@@ -352,21 +352,18 @@ npm install vue@latest vue-router@latest
npm install @ionic/vue@latest @ionic/vue-router@latest
```
-#### Vue Router 5 Migration
+### Vue Router
-`@ionic/vue-router` now requires Vue Router v5. Vue Router v4 is no longer supported. Vue Router v5 also raises its peer requirement on Vue itself, so the minimum supported Vue version moves to `3.5.0`.
-
-Vue Router v5 is a transition release that ships no runtime breaking changes for Vue Router v4 consumers, so no application code changes are required for routes, navigation guards, or `IonRouterOutlet`. Bump the dep ranges in your app's `package.json`:
+1. Ionic 9 supports Vue Router 5. Update to the latest version of Vue Router:
-```diff
- "dependencies": {
-- "vue": "^3.4.0",
-- "vue-router": "^4.0.0"
-+ "vue": "^3.5.0",
-+ "vue-router": "^5.0.0"
- }
+```shell
+npm install vue-router@latest
```
+`@ionic/vue-router` now requires Vue Router v5. Vue Router v4 is no longer supported. Vue Router v5 also raises its peer requirement on Vue itself, so the minimum supported Vue version moves to `3.5.0`.
+
+Vue Router v5 is a transition release that ships no runtime breaking changes for Vue Router v4 consumers, so no application code changes are required for routes, navigation guards, or `IonRouterOutlet`.
+
#### Deprecation Warning for `next()` in Navigation Guards
Vue Router v5 prints a deprecation warning when `next()` is called inside `beforeRouteLeave`, `beforeRouteEnter`, `beforeRouteUpdate`, or `router.beforeEach`. The callback form still works, but Vue Router v6 will remove it. Migrate to the return-value pattern:
@@ -442,18 +439,6 @@ Ionic 9 officially supports Capacitor 7 and later. Native platform detection no
If your app is still on Capacitor 2, it will no longer be detected as running on a native platform, so `isPlatform('capacitor')`, `isPlatform('hybrid')`, and `getPlatforms()` will report `web` instead of native. Upgrade to Capacitor 7 or later by following the [Capacitor updating guides](https://capacitorjs.com/docs/updating/7-0).
-### Legacy Picker
-
-1. Remove any usages of the `ion-picker-legacy` and `ion-picker-legacy-column` components. These components have been removed in Ionic 9. The recommended path forward is to use `ion-picker` inside a modal. Review the [Picker in Modal documentation](../api/picker.md#picker-in-modal) for more information.
-2. Remove any usages of `pickerController`. If using React, remove any usages of the `useIonPicker` hook. These controller-based APIs have been removed in Ionic 9. Use the [Picker](../api/picker.md) component instead.
-3. Remove any usages of the `PickerOptions`, `PickerButton`, `PickerColumn`, and `PickerColumnOption` type exports. These types were associated with the legacy picker and have been removed in Ionic 9.
-
-### Select
-
-The `ionChange` event on `ion-select` now only fires when the value changes. Previously, the `alert` and `action-sheet` interfaces emitted `ionChange` whenever the overlay was confirmed, even if the user picked the option that was already selected. This matches the documented behavior and the existing behavior of the `popover` and `modal` interfaces.
-
-If your code relied on `ionChange` firing on every confirmation (for example, to detect that the user closed the overlay without changing anything), listen for `ionDismiss` instead, or use the `didDismiss` event on the underlying alert or action sheet.
-
### Img
`ion-img` is deprecated and will be removed in Ionic 10. The component was created to lazy-load images before browsers supported lazy loading natively. Modern browsers now support the [`loading="lazy"`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/img#loading) attribute on the native `` element, so the component is no longer needed.
@@ -492,20 +477,49 @@ The native `
` element does not emit Ionic's custom events. Use the standard
### Input
+#### `autocorrect` Property Type Changed to Boolean
+
The `autocorrect` property on `ion-input` is now a `boolean` (default `false`) instead of `'on' | 'off'`. Because the attribute coerces to `true` for any value other than the string `"false"`, `autocorrect="off"` now enables autocorrect.
- Remove the attribute to keep autocorrect disabled (the default).
- Use a property binding to enable it: `[autocorrect]="true"` (Angular), `autocorrect={true}` (React), or `:autocorrect="true"` (Vue).
-### Searchbar
+#### Internal DOM Structure Changes
-The `autocorrect` property on `ion-searchbar` is now a `boolean` (default `false`) instead of `'on' | 'off'`. Because the attribute coerces to `true` for any value other than the string `"false"`, `autocorrect="off"` now enables autocorrect.
+New wrapper elements have been added to the component's internal DOM structure to support floating labels with slotted start and end content. Additionally, the structure of the component has been reorganized, with some elements now grouped differently than before. This may introduce breaking changes for developers who rely on the component's internal DOM structure or apply custom styling to internal elements.
-- Remove the attribute to keep autocorrect disabled (the default).
-- Use a property binding to enable it: `[autocorrect]="true"` (Angular), `autocorrect={true}` (React), or `:autocorrect="true"` (Vue).
+The following internal wrapper elements have been added:
+
+- Added: `