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 `