diff --git a/packages/main/cypress/specs/TextArea.cy.tsx b/packages/main/cypress/specs/TextArea.cy.tsx index bc64d6ad268f..ecb931be9ddb 100644 --- a/packages/main/cypress/specs/TextArea.cy.tsx +++ b/packages/main/cypress/specs/TextArea.cy.tsx @@ -397,8 +397,31 @@ describe("TextArea general interaction", () => { .should("be.equal", initialTextareaSize); }); }); + + it("should grow correctly when typing symbols (&)", () => { + cy.mount(); + + cy.get("[ui5-textarea]") + .as("textarea"); + + cy.get("@textarea") + .realClick(); + + cy.get("@textarea") + .then(textarea => { + const initialTextareaSize = textarea.height(); + + cy.focused() + .realType("&"); + + cy.get("@textarea") + .invoke("height") + .should("be.equal", initialTextareaSize); + }); + }); }); + describe("When having max length set", () => { it("prevents input when max is reached", () => { cy.mount(); diff --git a/packages/main/src/TextArea.ts b/packages/main/src/TextArea.ts index 22a8e552beaa..614ff77f2eef 100644 --- a/packages/main/src/TextArea.ts +++ b/packages/main/src/TextArea.ts @@ -492,14 +492,10 @@ class TextArea extends UI5Element implements IFormInputElement { } _tokenizeText(value: string) { - const tokenizedText = value.replace(/&/gm, "&").replace(/"/gm, """).replace(/'/gm, "'").replace(//gm, ">") .split("\n"); - if (tokenizedText.length < this.rows) { - return this._mapTokenizedTextToObject([...tokenizedText, ...Array(this.rows - tokenizedText.length).fill("")] as TokenizedText); - } - return this._mapTokenizedTextToObject(tokenizedText); } diff --git a/packages/main/src/themes/TextArea.css b/packages/main/src/themes/TextArea.css index 74491d68efa5..3dcda765992b 100644 --- a/packages/main/src/themes/TextArea.css +++ b/packages/main/src/themes/TextArea.css @@ -140,22 +140,25 @@ :host([growing]) .ui5-textarea-inner { box-sizing: border-box; - height: 100%; - position: absolute; - top: 0; - left: 0; + height: calc(100% - (2 * var(--_ui5_textarea_wrapper_padding))); + width: calc(100% - (2 * var(--_ui5_textarea_wrapper_padding))); + position: absolute; +} + +:host([growing]:not([growing-max-rows])) .ui5-textarea-inner { + overflow: hidden; } + .ui5-textarea-mirror { box-sizing: border-box; line-height: var(--_ui5_textarea_line_height); visibility: hidden; width: 100%; max-height: 94vh; + word-break: break-word; min-height: calc((var(--_textarea_rows) * var(--_ui5_textarea_line_height)) * var(--sapFontSize) + var(--_ui5_textarea_padding_top) + var(--_ui5_textarea_padding_bottom)); - word-break: break-all; - padding-top: var(--_ui5_textarea_padding_top); - padding-bottom: var(--_ui5_textarea_padding_bottom); + padding: var(--_ui5_textarea_padding_top) var(--_ui5_textarea_padding_right_and_left) var(--_ui5_textarea_padding_bottom); font-size: var(--sapFontSize); font-family: "72override", var(--sapFontFamily); white-space: pre-wrap;