diff --git a/packages/calcite-components/src/components/text-area/resources.ts b/packages/calcite-components/src/components/text-area/resources.ts index 4a1d7ec5564..144d4c7db54 100644 --- a/packages/calcite-components/src/components/text-area/resources.ts +++ b/packages/calcite-components/src/components/text-area/resources.ts @@ -15,6 +15,7 @@ export const CSS = { footerEndSlotOnly: "footer--end-only", textArea: "text-area", textAreaOnly: "text-area--only", + wrapper: "wrapper", }; export const IDS = { 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 e7197e58836..97d3cb1862f 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 @@ -290,6 +290,18 @@ describe("calcite-text-area", () => { shadowSelector: `.${CSS.textArea}::placeholder`, targetProp: "color", }, + "--calcite-text-area-corner-radius": { + shadowSelector: `.${CSS.wrapper}`, + targetProp: "borderRadius", + }, + "--calcite-text-area-shadow": { + shadowSelector: `.${CSS.wrapper}`, + targetProp: "boxShadow", + }, + "--calcite-text-area-footer-background-color": { + shadowSelector: `.${CSS.footer}`, + targetProp: "backgroundColor", + }, }); }); diff --git a/packages/calcite-components/src/components/text-area/text-area.scss b/packages/calcite-components/src/components/text-area/text-area.scss index 16093ebde8c..9c76d25322d 100644 --- a/packages/calcite-components/src/components/text-area/text-area.scss +++ b/packages/calcite-components/src/components/text-area/text-area.scss @@ -14,16 +14,28 @@ * @prop --calcite-text-area-min-width: Specifies the component's text area minimum width. * @prop --calcite-text-area-text-color: Specifies the component's text color. * @prop --calcite-text-area-footer-border-color: Specifies the footer's border color. + * @prop --calcite-text-area-corner-radius: Specifies component's corner radius. + * @prop --calcite-text-area-shadow: Specifies the component's shadow. + * @prop --calcite-text-area-footer-background-color: Specifies the footer's background color. + */ :host { @apply inline-block relative w-full h-full box-border; - --calcite-internal-text-area-border-color: var(--calcite-text-area-border-color, var(--calcite-color-border-input)); --calcite-internal-text-area-footer-border-color: var( --calcite-text-area-footer-border-color, var(--calcite-internal-text-area-border-color) ); + --calcite-internal-text-area-corner-radius: var( + --calcite-text-area-corner-radius, + var(--calcite-corner-radius-default) + ); + --calcite-internal-text-area-shadow: var(--calcite-text-area-shadow, var(--calcite-shadow-none)); + --calcite-internal-text-area-footer-background-color: var( + --calcite-text-area-footer-background-color, + var(--calcite-text-area-background-color, var(--calcite-color-foreground-1)) + ); // avoids host to shrink beyond the textarea min-block-size: var( @@ -33,19 +45,27 @@ min-inline-size: var(--calcite-text-area-min-width, theme("spacing.48")); } +.wrapper { + @apply h-full w-full box-border; + box-shadow: var(--calcite-internal-text-area-shadow); + border-radius: var(--calcite-internal-text-area-corner-radius); +} + .text-area, .footer { font-size: var(--calcite-text-area-font-size, var(--calcite-font-size--1)); - background-color: var(--calcite-text-area-background-color, var(--calcite-color-foreground-1)); padding-block: var(--calcite-internal-text-area-padding-block); padding-inline: var(--calcite-internal-text-area-padding-inline); } +.footer { + background-color: var(--calcite-internal-text-area-footer-background-color); + border-radius: 0 0 var(--calcite-internal-text-area-corner-radius) var(--calcite-internal-text-area-corner-radius); +} + .text-area { @apply relative font-sans block box-border w-full m-0; - --calcite-internal-text-area-border-block-end-color: var(--calcite-internal-text-area-border-color); - border: var(--calcite-border-width-sm) solid var(--calcite-internal-text-area-border-color); border-block-end-color: var(--calcite-internal-text-area-border-block-end-color); color: var(--calcite-text-area-text-color, var(--calcite-color-text-1)); @@ -57,7 +77,8 @@ ); max-inline-size: var(--calcite-text-area-max-width); min-inline-size: var(--calcite-text-area-min-width, theme("spacing.48")); - + background-color: var(--calcite-text-area-background-color, var(--calcite-color-foreground-1)); + border-radius: var(--calcite-internal-text-area-corner-radius) var(--calcite-internal-text-area-corner-radius) 0 0; &::placeholder { @apply font-normal; } @@ -82,6 +103,10 @@ min-inline-size: theme("spacing.72"); } + &.text-area--only { + border-radius: var(--calcite-internal-text-area-corner-radius); + } + &:not(.text-area--only, .text-area--invalid) { --calcite-internal-text-area-border-block-end-color: var( --calcite-text-area-divider-color, @@ -112,10 +137,14 @@ } .readonly { - background-color: var(--calcite-color-background); + background-color: var(--calcite-text-area-background-color, var(--calcite-color-background)); font-weight: var(--calcite-font-weight-medium); } +.footer.readonly { + background-color: var(--calcite-internal-text-area-footer-background-color, var(--calcite-color-background)); +} + .content, .hide { @apply hidden; 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 49e8ae7e738..8f31d5f4fe4 100644 --- a/packages/calcite-components/src/components/text-area/text-area.tsx +++ b/packages/calcite-components/src/components/text-area/text-area.tsx @@ -468,82 +468,84 @@ export class TextArea const hasFooter = this.startSlotHasElements || this.endSlotHasElements || !!this.maxLength; return ( -