diff --git a/core/src/components.d.ts b/core/src/components.d.ts index c9cb5d4fefe..29796644f05 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -2987,7 +2987,7 @@ export namespace Components { */ "inputmode"?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'; /** - * The visible label associated with the textarea. + * The visible label associated with the textarea. Use this if you need to render a plaintext label. The `label` property will take priority over the `label` slot if both are used. */ "label"?: string; /** @@ -7083,7 +7083,7 @@ declare namespace LocalJSX { */ "inputmode"?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'; /** - * The visible label associated with the textarea. + * The visible label associated with the textarea. Use this if you need to render a plaintext label. The `label` property will take priority over the `label` slot if both are used. */ "label"?: string; /** diff --git a/core/src/components/textarea/test/a11y/index.html b/core/src/components/textarea/test/a11y/index.html index 08c3feebf2e..f210a9e08c6 100644 --- a/core/src/components/textarea/test/a11y/index.html +++ b/core/src/components/textarea/test/a11y/index.html @@ -15,6 +15,7 @@

Textarea - a11y

+
Slotted Label



diff --git a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Chrome-linux.png index 0792e3e01fc..35787b7817b 100644 Binary files a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Chrome-linux.png and b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Firefox-linux.png index 3743984b7d9..81eb3ac5cd2 100644 Binary files a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Firefox-linux.png and b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Safari-linux.png index 4a1e2cad311..8fed0f36bb4 100644 Binary files a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Safari-linux.png and b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-ios-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Chrome-linux.png index e805bd9d7cb..ceb201c3020 100644 Binary files a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Chrome-linux.png and b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Firefox-linux.png index aaedb9db7d2..3b1c5f54eaa 100644 Binary files a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Firefox-linux.png and b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Safari-linux.png index 84e3c0abebb..f4eae273104 100644 Binary files a/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Safari-linux.png and b/core/src/components/textarea/test/autogrow/textarea.e2e.ts-snapshots/textarea-autogrow-word-break-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/textarea/test/fill/textarea.e2e.ts b/core/src/components/textarea/test/fill/textarea.e2e.ts index d517fd41302..933806b9482 100644 --- a/core/src/components/textarea/test/fill/textarea.e2e.ts +++ b/core/src/components/textarea/test/fill/textarea.e2e.ts @@ -180,3 +180,19 @@ configs({ modes: ['md'] }).forEach(({ title, screenshot, config }) => { }); }); }); + +configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('textarea: notch cutout'), () => { + test('notch cutout should be hidden when no label is passed', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const notchCutout = page.locator('ion-textarea .textarea-outline-notch'); + await expect(notchCutout).toBeHidden(); + }); + }); +}); diff --git a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Chrome-linux.png index 04256c0c46f..72b85b2f660 100644 Binary files a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Chrome-linux.png and b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Firefox-linux.png index 30edbc417fb..41fe31ef235 100644 Binary files a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Firefox-linux.png and b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Safari-linux.png index 54813924769..b93dda953ef 100644 Binary files a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Safari-linux.png and b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Chrome-linux.png b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Chrome-linux.png index 4840ab7475e..dde66277fc3 100644 Binary files a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Chrome-linux.png and b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Chrome-linux.png differ diff --git a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Firefox-linux.png b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Firefox-linux.png index 8e0e574d132..ee850d070e0 100644 Binary files a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Firefox-linux.png and b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Firefox-linux.png differ diff --git a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Safari-linux.png b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Safari-linux.png index 669f898b1f5..e75266ed780 100644 Binary files a/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Safari-linux.png and b/core/src/components/textarea/test/fill/textarea.e2e.ts-snapshots/textarea-fill-solid-md-rtl-Mobile-Safari-linux.png differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts b/core/src/components/textarea/test/label-placement/textarea.e2e.ts index affa8f1489f..da18852c18b 100644 --- a/core/src/components/textarea/test/label-placement/textarea.e2e.ts +++ b/core/src/components/textarea/test/label-placement/textarea.e2e.ts @@ -25,18 +25,6 @@ configs().forEach(({ title, screenshot, config }) => { const textarea = page.locator('ion-textarea'); expect(await textarea.screenshot()).toMatchSnapshot(screenshot(`textarea-placement-start-multi-line-value`)); }); - - test('label should be truncated', async ({ page }) => { - await page.setContent( - ` - - `, - config - ); - - const textarea = page.locator('ion-textarea'); - expect(await textarea.screenshot()).toMatchSnapshot(screenshot(`textarea-placement-start-label-truncated`)); - }); }); test.describe(title('textarea: label placement end'), () => { test('label should appear on the ending side of the textarea', async ({ page }) => { @@ -61,17 +49,6 @@ configs().forEach(({ title, screenshot, config }) => { const textarea = page.locator('ion-textarea'); expect(await textarea.screenshot()).toMatchSnapshot(screenshot(`textarea-placement-end-multi-line-value`)); }); - test('label should be truncated', async ({ page }) => { - await page.setContent( - ` - - `, - config - ); - - const textarea = page.locator('ion-textarea'); - expect(await textarea.screenshot()).toMatchSnapshot(screenshot(`textarea-placement-end-label-truncated`)); - }); }); test.describe(title('textarea: label placement fixed'), () => { test('label should appear on the starting side of the textarea and have a fixed width', async ({ page }) => { @@ -234,3 +211,32 @@ configs().forEach(({ title, screenshot, config }) => { }); }); }); + +configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => { + test.describe(title('textarea: label overflow'), () => { + test('label property should be truncated with an ellipsis', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const textarea = page.locator('ion-textarea'); + expect(await textarea.screenshot()).toMatchSnapshot(screenshot(`textarea-label-truncate`)); + }); + test('label slot should be truncated with an ellipsis', async ({ page }) => { + await page.setContent( + ` + +
Label Label Label Label Label
+
+ `, + config + ); + + const textarea = page.locator('ion-textarea'); + expect(await textarea.screenshot()).toMatchSnapshot(screenshot(`textarea-label-slot-truncate`)); + }); + }); +}); diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..66dd43ce953 Binary files /dev/null and b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..e7261b9bd2b Binary files /dev/null and b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..69a1cf03b14 Binary files /dev/null and b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-slot-truncate-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..66dd43ce953 Binary files /dev/null and b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..e7261b9bd2b Binary files /dev/null and b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..69a1cf03b14 Binary files /dev/null and b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-label-truncate-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Chrome-linux.png deleted file mode 100644 index 8e43de9926e..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Chrome-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Firefox-linux.png deleted file mode 100644 index c47cb7377d9..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Safari-linux.png deleted file mode 100644 index 4e97e53f01d..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-ltr-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Chrome-linux.png deleted file mode 100644 index 37d814c00fa..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Chrome-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Firefox-linux.png deleted file mode 100644 index a941fd73703..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Safari-linux.png deleted file mode 100644 index 5556873995e..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-ios-rtl-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Chrome-linux.png deleted file mode 100644 index d06d5e9c004..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Chrome-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Firefox-linux.png deleted file mode 100644 index 0454ad47e1d..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Safari-linux.png deleted file mode 100644 index 77ea4b7d957..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-ltr-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Chrome-linux.png deleted file mode 100644 index aed82958dad..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Chrome-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Firefox-linux.png deleted file mode 100644 index fe925fce089..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Safari-linux.png deleted file mode 100644 index 07b615c6856..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-end-label-truncated-md-rtl-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-ltr-Mobile-Firefox-linux.png deleted file mode 100644 index d2517156488..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-ltr-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-ltr-Mobile-Safari-linux.png deleted file mode 100644 index 1e5ad6437ea..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-ltr-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Chrome-linux.png deleted file mode 100644 index 79eea33c1a3..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Chrome-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Firefox-linux.png deleted file mode 100644 index e408677f702..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Safari-linux.png deleted file mode 100644 index 01adc317620..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-ios-rtl-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Chrome-linux.png deleted file mode 100644 index a1b9e90d50f..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Chrome-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Firefox-linux.png deleted file mode 100644 index d49375f8ac4..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Safari-linux.png deleted file mode 100644 index 7bd2e6794c3..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-ltr-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Chrome-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Chrome-linux.png deleted file mode 100644 index 106f2264a0d..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Chrome-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Firefox-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Firefox-linux.png deleted file mode 100644 index 78867da9813..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Firefox-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Safari-linux.png b/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Safari-linux.png deleted file mode 100644 index fb5bf13aede..00000000000 Binary files a/core/src/components/textarea/test/label-placement/textarea.e2e.ts-snapshots/textarea-placement-start-label-truncated-md-rtl-Mobile-Safari-linux.png and /dev/null differ diff --git a/core/src/components/textarea/test/slot/index.html b/core/src/components/textarea/test/slot/index.html new file mode 100644 index 00000000000..224cf127606 --- /dev/null +++ b/core/src/components/textarea/test/slot/index.html @@ -0,0 +1,98 @@ + + + + + Textarea - Slot + + + + + + + + + + + + + + Textarea - Slot + + + + +
+
+

No Fill / Start

+ +
Email *
+
+
+ +
+

Solid / Start

+ +
Email *
+
+
+ +
+

Outline / Start

+ +
Email *
+
+
+ +
+

No Fill / Floating

+ +
Email *
+
+
+ +
+

Solid / Floating

+ +
Email *
+
+
+ +
+

Outline / Floating

+ +
Email *
+
+
+
+
+
+ + diff --git a/core/src/components/textarea/test/textarea.spec.ts b/core/src/components/textarea/test/textarea.spec.ts index a3e8a7ec131..890d53e544b 100644 --- a/core/src/components/textarea/test/textarea.spec.ts +++ b/core/src/components/textarea/test/textarea.spec.ts @@ -12,3 +12,57 @@ it('should inherit attributes', async () => { expect(nativeEl.getAttribute('tabindex')).toBe('-1'); expect(nativeEl.getAttribute('data-form-type')).toBe('password'); }); + +/** + * Textarea uses emulated slots, so the internal + * behavior will not exactly match IonSelect's slots. + * For example, Textarea does not render an actual `` element + * internally, so we do not check for that here. Instead, + * we check to see which label text is being used. + * If Textarea is updated to use Shadow DOM (and therefore native slots), + * then we can update these tests to more closely match the Select tests. + **/ +describe('textarea: label rendering', () => { + it('should render label prop if only prop provided', async () => { + const page = await newSpecPage({ + components: [Textarea], + html: ` + + `, + }); + + const textarea = page.body.querySelector('ion-textarea'); + + const labelText = textarea.querySelector('.label-text-wrapper'); + + expect(labelText.textContent).toBe('Label Prop Text'); + }); + it('should render label slot if only slot provided', async () => { + const page = await newSpecPage({ + components: [Textarea], + html: ` +
Label Prop Slot
+ `, + }); + + const textarea = page.body.querySelector('ion-textarea'); + + const labelText = textarea.querySelector('.label-text-wrapper'); + + expect(labelText.textContent).toBe('Label Prop Slot'); + }); + it('should render label prop if both prop and slot provided', async () => { + const page = await newSpecPage({ + components: [Textarea], + html: ` +
Label Prop Slot
+ `, + }); + + const textarea = page.body.querySelector('ion-textarea'); + + const labelText = textarea.querySelector('.label-text-wrapper'); + + expect(labelText.textContent).toBe('Label Prop Text'); + }); +}); diff --git a/core/src/components/textarea/textarea.scss b/core/src/components/textarea/textarea.scss index df0cf470b39..e9878dffa47 100644 --- a/core/src/components/textarea/textarea.scss +++ b/core/src/components/textarea/textarea.scss @@ -62,8 +62,6 @@ font-family: $font-family-base; - white-space: pre-wrap; - z-index: $z-index-item-input; box-sizing: border-box; @@ -74,6 +72,8 @@ flex: 1; background: var(--background); + + white-space: pre-wrap; } // TODO: FW-2876 - Remove this selector @@ -131,9 +131,8 @@ outline: none; background: transparent; - box-sizing: border-box; - resize: none; - appearance: none; + + white-space: pre-wrap; /** * This ensures the textarea @@ -145,6 +144,9 @@ * contrast of the textarea. */ z-index: 1; + box-sizing: border-box; + resize: none; + appearance: none; &::placeholder { @include padding(0); @@ -159,6 +161,11 @@ } } +// TODO: FW-2876 - Remove this selector +:host(.legacy-textarea) .native-textarea { + white-space: inherit; +} + // TODO: FW-2876 - Remove this selector :host(.legacy-textarea) .native-textarea, :host(.legacy-textarea) .textarea-legacy-wrapper::after { @@ -455,7 +462,8 @@ * works on block-level elements. A flex item is * considered blockified (https://www.w3.org/TR/css-display-3/#blockify). */ -.label-text { +.label-text, +::slotted([slot="label"]) { text-overflow: ellipsis; white-space: nowrap; @@ -463,6 +471,16 @@ overflow: hidden; } +/** + * If no label text is placed into the slot + * then the element should be hidden otherwise + * there will be additional margins added. + */ +.label-text-wrapper-hidden, +.textarea-outline-notch-hidden { + display: none; +} + .textarea-wrapper textarea { /** * When the floating label appears on top of the diff --git a/core/src/components/textarea/textarea.tsx b/core/src/components/textarea/textarea.tsx index 0087813d542..3948b2daf7b 100644 --- a/core/src/components/textarea/textarea.tsx +++ b/core/src/components/textarea/textarea.tsx @@ -15,6 +15,8 @@ import type { TextareaChangeEventDetail, TextareaInputEventDetail } from './text /** * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use. + * + * @slot label - The label text to associate with the textarea. Use the `labelPlacement` property to control where the label is placed relative to the textarea. Use this if you need to render a label with custom HTML. (EXPERIMENTAL) */ @Component({ tag: 'ion-textarea', @@ -205,6 +207,10 @@ export class Textarea implements ComponentInterface { /** * The visible label associated with the textarea. + * + * Use this if you need to render a plaintext label. + * + * The `label` property will take priority over the `label` slot if both are used. */ @Prop() label?: string; @@ -530,17 +536,37 @@ Developers can use the "legacy" property to continue using the legacy form marku private renderLabel() { const { label } = this; - if (label === undefined) { - return; - } return ( -
-
{this.label}
+
+ {label === undefined ? :
{label}
}
); } + /** + * Gets any content passed into the `label` slot, + * not the definition. + */ + private get labelSlot() { + return this.el.querySelector('[slot="label"]'); + } + + /** + * Returns `true` if label content is provided + * either by a prop or a content. If you want + * to get the plaintext value of the label use + * the `labelText` getter instead. + */ + private get hasLabel() { + return this.label !== undefined || this.labelSlot !== null; + } + /** * Renders the border container when fill="outline". */ @@ -559,7 +585,12 @@ Developers can use the "legacy" property to continue using the legacy form marku return [
-
+