refactor(textarea): remove legacy property and support for legacy syntax (#28993)
Issue number: internal --------- ## What is the current behavior? In Ionic Framework v7, we [simplified the textarea syntax](https://ionic.io/blog/ionic-7-is-here#simplified-form-control-syntax) so that it was no longer required to be placed inside of an `ion-item`. We maintained backwards compatibility by adding a `legacy` property which allowed it to continue to be styled properly when written in the following way: ```html <ion-item> <ion-label>Label</ion-label> <ion-textarea></ion-textarea> </ion-item> ``` While this was supported in v7, console warnings were logged to notify developers that they needed to update this syntax for the best accessibility experience. ## What is the new behavior? - Removes the `legacy` property and support for the legacy syntax. Developers should follow the [migration guide](https://ionicframework.com/docs/api/textarea#migrating-from-legacy-textarea-syntax) in the textarea documentation to update their apps. The new syntax requires a `label` or `aria-label` on `ion-textarea`: ```html <ion-item> <ion-textarea label="Label"></ion-textarea> </ion-item> ``` - Removes the legacy tests under `textarea/test/legacy/` and all related screenshots - Removes the textarea usage in `input/test/legacy/spec`, `item/test/disabled`, `item/test/legacy/disabled` and `item/test/legacy/fill` ## Does this introduce a breaking change? - [x] Yes - [ ] No 1. Developers have had console warnings when using the legacy syntax since the v7 release. The migration guide for the new textarea syntax is outlined in the [Textarea documentation](https://ionicframework.com/docs/api/textarea#migrating-from-legacy-textarea-syntax). 2. This change has been documented in the Breaking Changes document with a link to the migration guide. BREAKING CHANGE: The `legacy` property and support for the legacy syntax, which involved placing an `ion-textarea` inside of an `ion-item` with an `ion-label`, have been removed from textarea. For more information on migrating from the legacy textarea syntax, refer to the [Textarea documentation](https://ionicframework.com/docs/api/textarea#migrating-from-legacy-textarea-syntax). --------- Co-authored-by: ionitron <hi@ionicframework.com>
@ -55,10 +55,6 @@
|
||||
<ion-input label="Disabled Input" placeholder="Disabled" disabled></ion-input>
|
||||
</ion-item>
|
||||
|
||||
<ion-item>
|
||||
<ion-textarea label="Disabled Textarea" placeholder="Disabled" disabled></ion-textarea>
|
||||
</ion-item>
|
||||
|
||||
<ion-item>
|
||||
<ion-toggle disabled checked> Disabled Toggle </ion-toggle>
|
||||
</ion-item>
|
||||
|
||||
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 65 KiB |
@ -57,11 +57,6 @@
|
||||
<ion-input placeholder="Disabled" disabled legacy="true"></ion-input>
|
||||
</ion-item>
|
||||
|
||||
<ion-item>
|
||||
<ion-label>Disabled Textarea</ion-label>
|
||||
<ion-textarea placeholder="Disabled" disabled legacy="true"></ion-textarea>
|
||||
</ion-item>
|
||||
|
||||
<ion-item>
|
||||
<ion-label>Disabled Toggle</ion-label>
|
||||
<ion-toggle disabled checked slot="end" legacy="true"></ion-toggle>
|
||||
|
||||
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 65 KiB |
@ -502,111 +502,6 @@
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
<ion-row>
|
||||
<ion-col>
|
||||
<ion-item disabled fill="solid" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item disabled fill="outline" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea value="Has Initial Value" maxlength="100"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item disabled fill="outline" shape="round" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid>
|
||||
|
||||
<p>Textarea</p>
|
||||
<ion-grid>
|
||||
<ion-row>
|
||||
<ion-col>
|
||||
<ion-item fill="solid">
|
||||
<ion-textarea legacy="true"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item fill="outline">
|
||||
<ion-textarea value="Has Initial Value" legacy="true"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item fill="outline" shape="round">
|
||||
<ion-textarea legacy="true"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
<ion-row>
|
||||
<ion-col>
|
||||
<ion-item fill="solid" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item fill="outline" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100" value="Has Initial Value"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item fill="outline" shape="round" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
<ion-row>
|
||||
<ion-col>
|
||||
<ion-item class="ion-invalid" fill="solid" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item class="ion-invalid" fill="outline" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100" value="Has Initial Value"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
<ion-col>
|
||||
<ion-item class="ion-invalid" fill="outline" shape="round" counter="true">
|
||||
<ion-label position="floating">Standard</ion-label>
|
||||
<ion-textarea maxlength="100"></ion-textarea>
|
||||
<ion-note slot="helper">Helper Text</ion-note>
|
||||
<ion-note slot="error">Error Text</ion-note>
|
||||
</ion-item>
|
||||
</ion-col>
|
||||
</ion-row>
|
||||
</ion-grid>
|
||||
|
||||
<p>Custom Styles</p>
|
||||
|
||||
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 234 KiB After Width: | Height: | Size: 193 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 171 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 140 KiB |