diff --git a/src/components/input/themes/shared/input.indigo.scss b/src/components/input/themes/shared/input.indigo.scss index 3d84cc057..fd99e9169 100644 --- a/src/components/input/themes/shared/input.indigo.scss +++ b/src/components/input/themes/shared/input.indigo.scss @@ -167,7 +167,7 @@ $transition-duration: .25s; } } -:host(:not([aria-haspopup='dialog'],[role='combobox'])[readonly]) { +:host(:not([aria-haspopup='dialog'],[role='combobox'],[disabled])[readonly]) { [part^='container'] { border-color: var-get($theme, 'disabled-text-color'); } diff --git a/src/components/textarea/themes/shared/textarea.bootstrap.scss b/src/components/textarea/themes/shared/textarea.bootstrap.scss index 206ddf27a..8fd04066c 100644 --- a/src/components/textarea/themes/shared/textarea.bootstrap.scss +++ b/src/components/textarea/themes/shared/textarea.bootstrap.scss @@ -117,6 +117,19 @@ textarea { } } +:host([readonly]) { + [part~='prefix'], + [part~='suffix'], + textarea { + background: var-get($theme, 'border-disabled-background'); + } + + [part~='prefix'], + [part~='suffix'] { + color: var-get($theme, 'disabled-text-color'); + } +} + :host([invalid]:not(:disabled)), :host([invalid]:not([disabled])) { textarea { diff --git a/src/components/textarea/themes/shared/textarea.common.scss b/src/components/textarea/themes/shared/textarea.common.scss index 548cec03e..abccc2bb8 100644 --- a/src/components/textarea/themes/shared/textarea.common.scss +++ b/src/components/textarea/themes/shared/textarea.common.scss @@ -46,7 +46,14 @@ textarea { } } -:host(:hover), +:host([readonly]) { + [part='prefix'], + [part='suffix'] { + color: var-get($theme, 'disabled-text-color'); + } +} + +:host(:not([readonly]):hover), :host(:focus) { textarea { &::placeholder { diff --git a/src/components/textarea/themes/shared/textarea.fluent.scss b/src/components/textarea/themes/shared/textarea.fluent.scss index e4e75b855..dff1e7ee7 100644 --- a/src/components/textarea/themes/shared/textarea.fluent.scss +++ b/src/components/textarea/themes/shared/textarea.fluent.scss @@ -71,6 +71,13 @@ $border-size: rem(1px); } } +:host([readonly]) { + [part='prefix'], + [part='suffix'] { + background: transparent; + } +} + :host([invalid]) { [part~='label'] { color: var-get($theme, 'idle-text-color'); diff --git a/src/components/textarea/themes/shared/textarea.indigo.scss b/src/components/textarea/themes/shared/textarea.indigo.scss index 9ecb9c306..3962144f3 100644 --- a/src/components/textarea/themes/shared/textarea.indigo.scss +++ b/src/components/textarea/themes/shared/textarea.indigo.scss @@ -24,7 +24,7 @@ $theme: $indigo; } -:host(:hover) { +:host(:not([readonly], :focus-within):hover) { [part~='container'] { background: var-get($theme, 'box-background-hover'); @@ -38,7 +38,8 @@ $theme: $indigo; } } -:host(:focus-within) { +:host(:focus-within), +:host([readonly]:focus-within) { [part~='label'] { color: var-get($theme, 'focused-secondary-color'); } @@ -135,6 +136,12 @@ textarea { height: calc(100% - #{rem(1px)}); } +:host([readonly]) { + [part~='container']::after { + border-block-end-color: var-get($theme, 'disabled-text-color'); + } +} + :host([invalid]:not(:disabled)), :host([invalid]:not([disabled])) { ::part(validation-icon) { diff --git a/src/components/textarea/themes/shared/textarea.material.scss b/src/components/textarea/themes/shared/textarea.material.scss index dc933b888..b1d83f8fc 100644 --- a/src/components/textarea/themes/shared/textarea.material.scss +++ b/src/components/textarea/themes/shared/textarea.material.scss @@ -95,7 +95,7 @@ textarea { } } -:host(:not([outlined]):hover) { +:host(:not([outlined], [readonly]):hover) { [part~='container'] { background: var-get($theme, 'box-background-hover'); @@ -138,10 +138,14 @@ textarea { } } -:host(:focus-within) { +:host(:not([readonly]):focus-within) { [part~='label'] { @extend %label-filled; + } +} +:host(:focus-within) { + [part~='label'] { color: var-get($theme, 'focused-secondary-color'); } } @@ -160,7 +164,9 @@ textarea { ); } } +} +:host(:not([outlined], [readonly]):focus-within) { [part~='prefix'] { color: var-get($theme, 'input-prefix-color--focused'); background: var-get($theme, 'input-prefix-background--focused'); @@ -172,6 +178,12 @@ textarea { } } +:host(:not([outlined], [disabled])[readonly]) { + [part~='container'] { + background: var-get($theme, 'box-background-focus'); + } +} + :host([invalid]:not([outlined]):focus-within) { [part~='container'] { &::after { @@ -335,7 +347,7 @@ textarea { } } -:host([outlined]:hover) { +:host(:not([readonly], :focus-within)[outlined]:hover) { [part='notch'], [part='start'], [part='end'], @@ -351,14 +363,57 @@ textarea { } } -:host([outlined]:focus-within) { - [part='filler'], +:host(:not([readonly])[outlined]:focus-within) { + [part='label'] { + @extend %label-outlined-filled; + } + [part='notch'] { - border-block-width: rem(2px); + border-block-start-color: transparent; } +} +:host([readonly][outlined]) { + [part~='container'][part~='filled'], + [part~='container'][part~='placeholder'] { + [part='label'] { + @extend %label-outlined-filled; + } + + [part='notch'] { + border-block-start-color: transparent; + } + } +} + +:host([readonly][outlined]:focus-within) { [part='label'] { - @extend %label-outlined-filled; + inset-block-start: calc($input-top-padding - #{rem(3px)}); + } + + [part='notch'] { + border-block-start-color: var-get($theme, 'focused-border-color'); + } +} + +:host(:not(:disabled)[readonly][outlined][invalid]:focus-within), +:host(:not([disabled])[readonly][outlined][invalid]:focus-within) { + [part='notch'] { + border-block-start-color: var-get($theme, 'error-secondary-color'); + } + + [part~='container'][part~='filled'], + [part~='container'][part~='placeholder'] { + [part='notch'] { + border-block-start-color: transparent; + } + } +} + +:host([outlined]:focus-within) { + [part='filler'], + [part='notch'] { + border-block-width: rem(2px); } [part='filler'] { @@ -366,7 +421,6 @@ textarea { } [part='notch'] { - border-block-start-color: transparent; border-block-end-color: var-get($theme, 'focused-border-color'); } diff --git a/stories/textarea.stories.ts b/stories/textarea.stories.ts index a61702e75..d6289a349 100644 --- a/stories/textarea.stories.ts +++ b/stories/textarea.stories.ts @@ -261,13 +261,16 @@ export const Default: Story = { ?invalid=${args.invalid} ?validate-only=${args.validateOnly} ?spellcheck=${args.spellcheck} - > + > + + + `, }; export const ProjectContent: Story = { render: ( - { rows, resize, required, disabled, outlined }, + { rows, resize, required, disabled, outlined, readOnly }, { globals: { direction } } ) => { return html` @@ -276,6 +279,7 @@ export const ProjectContent: Story = { dir=${direction} spellcheck="false" .outlined=${outlined} + ?readonly=${readOnly} autofocus label="Leave your comment" .rows=${rows}