From 61f2fdbca19c56d73c0ea4f4890c7b62be394a48 Mon Sep 17 00:00:00 2001 From: Konnor Rogers Date: Fri, 4 Oct 2024 16:21:56 -0400 Subject: [PATCH] Fix textarea resizing bug (#2182) * fix textarea resizing issue * add changelog entry * prettier * remove unnecessary aria-hidden * prettier --- docs/pages/resources/changelog.md | 1 + src/components/textarea/textarea.component.ts | 5 +++++ src/components/textarea/textarea.styles.ts | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/pages/resources/changelog.md b/docs/pages/resources/changelog.md index 8782e49964..66eac0ebc0 100644 --- a/docs/pages/resources/changelog.md +++ b/docs/pages/resources/changelog.md @@ -14,6 +14,7 @@ New versions of Shoelace are released as-needed and generally occur when a criti ## Next +- Fixed a bug in `` causing scroll jumping when using `resize="auto"` [#2182] - Fixed a bug in `` where the title attribute would show with redundant info [#2184] ## 2.17.1 diff --git a/src/components/textarea/textarea.component.ts b/src/components/textarea/textarea.component.ts index 9a176df250..51fbfdfbc7 100644 --- a/src/components/textarea/textarea.component.ts +++ b/src/components/textarea/textarea.component.ts @@ -46,6 +46,7 @@ export default class SlTextarea extends ShoelaceElement implements ShoelaceFormC private resizeObserver: ResizeObserver; @query('.textarea__control') input: HTMLTextAreaElement; + @query('.textarea__size-adjuster') sizeAdjuster: HTMLTextAreaElement; @state() private hasFocus = false; @property() title = ''; // make reactive to pass through @@ -196,6 +197,8 @@ export default class SlTextarea extends ShoelaceElement implements ShoelaceFormC private setTextareaHeight() { if (this.resize === 'auto') { + // This prevents layout shifts. We use `clientHeight` instead of `scrollHeight` to account for if the ` + +
diff --git a/src/components/textarea/textarea.styles.ts b/src/components/textarea/textarea.styles.ts index 3bcdb9ce29..9de7ec209c 100644 --- a/src/components/textarea/textarea.styles.ts +++ b/src/components/textarea/textarea.styles.ts @@ -6,7 +6,7 @@ export default css` } .textarea { - display: flex; + display: grid; align-items: center; position: relative; width: 100%; @@ -55,6 +55,17 @@ export default css` cursor: not-allowed; } + .textarea__control, + .textarea__size-adjuster { + grid-area: 1 / 1 / 2 / 2; + } + + .textarea__size-adjuster { + visibility: hidden; + pointer-events: none; + opacity: 0; + } + .textarea--standard.textarea--disabled .textarea__control { color: var(--sl-input-color-disabled); } @@ -87,7 +98,6 @@ export default css` } .textarea__control { - flex: 1 1 auto; font-family: inherit; font-size: inherit; font-weight: inherit;