diff --git a/packages/calcite-components/src/components/text-area/text-area.e2e.ts b/packages/calcite-components/src/components/text-area/text-area.e2e.ts index 56aa1d3aa63..855b1213f57 100644 --- a/packages/calcite-components/src/components/text-area/text-area.e2e.ts +++ b/packages/calcite-components/src/components/text-area/text-area.e2e.ts @@ -24,8 +24,8 @@ describe("calcite-text-area", () => { describe("defaults", () => { defaults("calcite-text-area", [ { - propertyName: "wrap", - defaultValue: "soft", + propertyName: "limitText", + defaultValue: false, }, { propertyName: "scale", @@ -43,6 +43,10 @@ describe("calcite-text-area", () => { propertyName: "validationMessage", defaultValue: undefined, }, + { + propertyName: "wrap", + defaultValue: "soft", + }, ]); }); @@ -64,6 +68,10 @@ describe("calcite-text-area", () => { propertyName: "columns", value: "10", }, + { + propertyName: "limitText", + value: true, + }, { propertyName: "rows", value: "50", @@ -147,21 +155,27 @@ describe("calcite-text-area", () => { expect(inputEventSpy).not.toHaveReceivedEvent(); }); - it("should be able to enter characters beyond max-length", async () => { - const page = await newE2EPage(); - await page.setContent(""); + describe("max-length", () => { + const inputText = "rocky mountains"; + async function testMaxLength(pageContent: string, inputText: string, expectedValue: string): Promise { + const page = await newE2EPage(); + await page.setContent(pageContent); + const element = await page.find("calcite-text-area"); - const element = await page.find("calcite-text-area"); - element.setAttribute("max-length", "5"); - await page.waitForChanges(); + await element.callMethod("setFocus"); + await page.keyboard.type(inputText); + await page.waitForChanges(); - await page.keyboard.press("Tab"); - await page.waitForChanges(); + expect(await element.getProperty("value")).toBe(expectedValue); + } - await page.keyboard.type("rocky mountains"); - await page.waitForChanges(); + it("should be able to enter characters beyond max-length by default", async () => { + await testMaxLength("", inputText, inputText); + }); - expect(await element.getProperty("value")).toBe("rocky mountains"); + it("can follow native max-length behavior and restrict input", async () => { + await testMaxLength("", inputText, "rocky"); + }); }); it("should have footer--slotted class when slotted at both start and end", async () => { diff --git a/packages/calcite-components/src/components/text-area/text-area.tsx b/packages/calcite-components/src/components/text-area/text-area.tsx index 2bb6404cbbb..9e4b79db6da 100644 --- a/packages/calcite-components/src/components/text-area/text-area.tsx +++ b/packages/calcite-components/src/components/text-area/text-area.tsx @@ -161,6 +161,11 @@ export class TextArea /** Accessible name for the component. */ @property() label: string; + /** + * When `true`, prevents input beyond the maximum length, mimicking native `