diff --git a/docs/pages/resources/changelog.md b/docs/pages/resources/changelog.md index 8782e4996..66eac0ebc 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 9a176df25..51fbfdfbc 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 3bcdb9ce2..9de7ec209 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;