From f14a984ad451436bdf6c260cd9e148bb16a7a3a7 Mon Sep 17 00:00:00 2001 From: didimmova Date: Thu, 30 Oct 2025 17:07:48 +0200 Subject: [PATCH 1/6] fix(textarea): update sass themes --- .../themes/shared/textarea.bootstrap.scss | 14 ++++---- .../themes/shared/textarea.common.scss | 32 +++++++++++++++++++ .../themes/shared/textarea.fluent.scss | 10 ++++++ .../themes/shared/textarea.indigo.scss | 16 +--------- .../themes/shared/textarea.material.scss | 19 +++++------ 5 files changed, 61 insertions(+), 30 deletions(-) diff --git a/src/components/textarea/themes/shared/textarea.bootstrap.scss b/src/components/textarea/themes/shared/textarea.bootstrap.scss index 405c77b4d..c5ac34d35 100644 --- a/src/components/textarea/themes/shared/textarea.bootstrap.scss +++ b/src/components/textarea/themes/shared/textarea.bootstrap.scss @@ -38,10 +38,11 @@ $theme: $bootstrap; [part~='prefixed'] { [part~='prefix'] { border-block-width: rem(1px); + border-inline-start-width: rem(1px); + border-inline-end-width: 0; border-style: solid; border-color: var-get($theme, 'border-color'); overflow: hidden; - border-inline-width: 0; border: { start: { start-radius: var-get($theme, 'border-border-radius'); @@ -67,10 +68,11 @@ $theme: $bootstrap; [part~='suffixed'] { [part~='suffix'] { border-block-width: rem(1px); + border-inline-start-width: 0; + border-inline-end-width: rem(1px); border-style: solid; border-color: var-get($theme, 'border-color'); overflow: hidden; - border-inline-width: 0; border: { start: { end-radius: var-get($theme, 'border-border-radius'); @@ -164,22 +166,22 @@ textarea { box-shadow: none; } - ::slotted([slot='suffix']) { + ::slotted([slot='suffix']):not(:last-child) { border-inline-end: rem(1px) solid var(--disabled-border-color); } - ::slotted([slot='prefix']) { + ::slotted([slot='prefix']):not(:first-child) { border-inline-start: rem(1px) solid var(--disabled-border-color); } } :host(:not([disabled])), :host(:not(:disabled)) { - ::slotted([slot='suffix']) { + ::slotted([slot='suffix']):not(:last-child) { border-inline-end: rem(1px) solid var(--border-color); } - ::slotted([slot='prefix']) { + ::slotted([slot='prefix']):not(:first-child) { border-inline-start: rem(1px) solid var(--border-color); } } diff --git a/src/components/textarea/themes/shared/textarea.common.scss b/src/components/textarea/themes/shared/textarea.common.scss index 6e20e38bc..cfcb119c5 100644 --- a/src/components/textarea/themes/shared/textarea.common.scss +++ b/src/components/textarea/themes/shared/textarea.common.scss @@ -17,6 +17,10 @@ $theme: $base; } } +[part~='input'] { + color: var-get($theme, 'idle-text-color'); +} + [part~='filled'] { [part~='input'] { color: var-get($theme, 'filled-text-color'); @@ -69,6 +73,34 @@ textarea { } } +:host(:not([readonly]):hover) { + [part~='filled'] { + [part~='input'] { + color: var-get($theme, 'filled-text-hover-color'); + } + } +} + +:host(:not([readonly]):focus-within) { + [part~='prefix'], + [part~='filled'][part~='prefix'] { + color: var-get($theme, 'input-prefix-color--focused'); + background: var-get($theme, 'input-prefix-background--focused'); + } + + [part~='suffix'], + [part~='filled'][part~='suffix'] { + color: var-get($theme, 'input-suffix-color--focused'); + background: var-get($theme, 'input-suffix-background--focused'); + } + + [part~='filled'] { + [part~='input'] { + color: var-get($theme, 'focused-text-color'); + } + } +} + :host(:not([disabled],[readonly]):state(ig-invalid)), :host(:not(:disabled,[readonly]):state(ig-invalid)) { ::part(helper-text) { diff --git a/src/components/textarea/themes/shared/textarea.fluent.scss b/src/components/textarea/themes/shared/textarea.fluent.scss index 326cb85fe..fe5e380fe 100644 --- a/src/components/textarea/themes/shared/textarea.fluent.scss +++ b/src/components/textarea/themes/shared/textarea.fluent.scss @@ -48,6 +48,16 @@ $border-size: rem(1px); pointer-events: none; z-index: 1; } + + [part='prefix']:first-child { + border-start-start-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + border-end-start-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + } + + [part='suffix']:last-child { + border-start-end-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + border-end-end-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + } } diff --git a/src/components/textarea/themes/shared/textarea.indigo.scss b/src/components/textarea/themes/shared/textarea.indigo.scss index a2cb812a8..931fab9b6 100644 --- a/src/components/textarea/themes/shared/textarea.indigo.scss +++ b/src/components/textarea/themes/shared/textarea.indigo.scss @@ -29,10 +29,6 @@ $theme: $indigo; border-color: var-get($theme, 'hover-bottom-line-color'); } } - - textarea { - color: var-get($theme, 'filled-text-hover-color'); - } } :host(:focus-within), @@ -42,7 +38,7 @@ $theme: $indigo; } [part~='container'] { - background: var-get($theme, 'box-background-hover'); + background: var-get($theme, 'box-background-focus'); caret-color: var-get($theme, 'focused-bottom-line-color'); &::after { @@ -50,10 +46,6 @@ $theme: $indigo; transition: all .25s $out-cubic; } } - - textarea { - color: var-get($theme, 'focused-text-color'); - } } [part~='label'] { @@ -97,12 +89,6 @@ textarea { } } -[part~='filled'] { - [part~='input'] { - color: var-get($theme, 'filled-text-color'); - } -} - [part~='prefixed'] textarea { padding-inline-start: 0; } diff --git a/src/components/textarea/themes/shared/textarea.material.scss b/src/components/textarea/themes/shared/textarea.material.scss index 5e6ef65df..afb6e47d5 100644 --- a/src/components/textarea/themes/shared/textarea.material.scss +++ b/src/components/textarea/themes/shared/textarea.material.scss @@ -81,7 +81,14 @@ textarea { border-start-start-radius: var-get($theme, 'box-border-radius'); border-start-end-radius: var-get($theme, 'box-border-radius'); background: var-get($theme, 'box-background'); - padding-inline-end: pad-inline(rem(1px)); + + &:not([part~='suffixed']) { + padding-inline-end: pad-inline(rem(1px)); + + textarea { + grid-area: 1 / 2 / span 1 / span 3; + } + } &::after { content: ''; @@ -97,12 +104,6 @@ textarea { } } - [part~='container']:not([part~='suffixed']) { - textarea { - grid-area: 1 / 2 / span 1 / span 3; - } - } - [part~='placeholder'] [part='label'], [part~='filled'] [part='label'] { @extend %label-filled; @@ -245,11 +246,11 @@ textarea { align-items: initial; padding: 0; box-shadow: none; - border-radius: var-get($theme, 'border-border-radius'); - background: var-get($theme, 'border-background'); overflow: initial; [part~='container'] { + border-radius: var-get($theme, 'border-border-radius'); + background: var-get($theme, 'border-background'); grid-template-columns: auto auto 1fr auto; display: grid; } From 3041f990defd7b4487dc54476f05aa6650063cbf Mon Sep 17 00:00:00 2001 From: didimmova Date: Fri, 31 Oct 2025 16:14:28 +0200 Subject: [PATCH 2/6] fix(input): add updates for input theme --- .../input/themes/shared/input.bootstrap.scss | 1 - .../input/themes/shared/input.common.scss | 33 +++++++++++++++++-- .../input/themes/shared/input.fluent.scss | 10 ++++++ .../input/themes/shared/input.indigo.scss | 23 ++----------- .../input/themes/shared/input.material.scss | 9 +++-- .../themes/shared/textarea.bootstrap.scss | 22 ++++++------- .../themes/shared/textarea.indigo.scss | 4 +-- 7 files changed, 62 insertions(+), 40 deletions(-) diff --git a/src/components/input/themes/shared/input.bootstrap.scss b/src/components/input/themes/shared/input.bootstrap.scss index 1bb352ae8..66ca9b6de 100644 --- a/src/components/input/themes/shared/input.bootstrap.scss +++ b/src/components/input/themes/shared/input.bootstrap.scss @@ -43,7 +43,6 @@ $theme: $bootstrap; border-radius: var-get($theme, 'border-border-radius'); padding-inline: pad-inline(8px, 10px, 14px); padding-block: pad-block(4px, 6px, 8px); - color: var-get($theme, 'idle-text-color'); background: transparent; box-shadow: none; z-index: 1; diff --git a/src/components/input/themes/shared/input.common.scss b/src/components/input/themes/shared/input.common.scss index 2e9c04968..ada0d29d0 100644 --- a/src/components/input/themes/shared/input.common.scss +++ b/src/components/input/themes/shared/input.common.scss @@ -3,6 +3,10 @@ $theme: $base; +[part~='input'] { + color: var-get($theme, 'idle-text-color'); +} + [part='prefix'] { color: var-get($theme, 'input-prefix-color'); background: var-get($theme, 'input-prefix-background'); @@ -14,6 +18,10 @@ $theme: $base; } [part~='filled'] { + [part~='input'] { + color: var-get($theme, 'filled-text-color'); + } + [part='prefix'] { color: var-get($theme, 'input-prefix-color--filled'); background: var-get($theme, 'input-prefix-background--filled'); @@ -43,6 +51,22 @@ $theme: $base; } } +:host(:not([readonly],[disabled]):hover) { + [part~='filled'] { + [part~='input'] { + color: var-get($theme, 'filled-text-hover-color'); + } + } +} + +:host(:not([readonly],[disabled]):focus-within) { + [part~='filled'] { + [part~='input'] { + color: var-get($theme, 'focused-text-color'); + } + } +} + :host(:focus-within) { [part='prefix'] { color: var-get($theme, 'input-prefix-color--focused'); @@ -81,7 +105,12 @@ $theme: $base; :host(:disabled), :host([disabled]) { [part~='input']::placeholder { - color: var-get($theme, 'disabled-text-color'); + color: var-get($theme, 'disabled-placeholder-color'); + } + + [part='prefix'], + [part='suffix'] { + background: inherit; } } @@ -98,4 +127,4 @@ $theme: $base; ::slotted([slot='prefix']) { padding-inline: var(--affix-padding); } -} \ No newline at end of file +} diff --git a/src/components/input/themes/shared/input.fluent.scss b/src/components/input/themes/shared/input.fluent.scss index f2945564c..c0f4578c9 100644 --- a/src/components/input/themes/shared/input.fluent.scss +++ b/src/components/input/themes/shared/input.fluent.scss @@ -77,6 +77,16 @@ $theme: $fluent; pointer-events: none; z-index: 1; } + + [part='prefix']:first-child { + border-start-start-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + border-end-start-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + } + + [part='suffix']:last-child { + border-start-end-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + border-end-end-radius: calc(var-get($theme, 'border-border-radius') - rem(1px)); + } } [part~='input'] { diff --git a/src/components/input/themes/shared/input.indigo.scss b/src/components/input/themes/shared/input.indigo.scss index 1016f38c3..133a58430 100644 --- a/src/components/input/themes/shared/input.indigo.scss +++ b/src/components/input/themes/shared/input.indigo.scss @@ -40,7 +40,7 @@ $transition-duration: .25s; } [part='prefix'] { - border-start-start-radius: var-get($theme, 'border-border-radius'); + border-start-start-radius: var-get($theme, 'box-border-radius'); grid-area: 1 / 1; ::slotted(*) { @@ -49,7 +49,7 @@ $transition-duration: .25s; } [part='suffix'] { - border-start-end-radius: var-get($theme, 'border-border-radius'); + border-start-end-radius: var-get($theme, 'box-border-radius'); grid-area: 1 / 3; ::slotted(*) { @@ -91,7 +91,6 @@ $transition-duration: .25s; [part~='input'] { @include type-style('body-2'); - color: var-get($theme, 'idle-text-color'); font-size: rem(12px); line-height: rem(16px); background: initial; @@ -115,20 +114,8 @@ $transition-duration: .25s; } } -[part~='filled'] { - [part~='input'] { - color: var-get($theme, 'filled-text-color'); - } -} - :host(:not([disabled],[readonly]):hover), :host(:not([disabled])[readonly][role='combobox']:hover) { - [part~='filled'] { - [part~='input'] { - color: var-get($theme, 'filled-text-hover-color'); - } - } - [part^='container'] { background: var-get($theme, 'box-background-hover'); border-color: var-get($theme, 'hover-bottom-line-color'); @@ -155,12 +142,6 @@ $transition-duration: .25s; [part='label'] { color: var-get($theme, 'focused-secondary-color'); } - - [part~='filled'] { - [part~='input'] { - color: var-get($theme, 'focused-text-color'); - } - } } :host(:not([aria-haspopup='dialog'],[role='combobox'],[disabled])[readonly]) { diff --git a/src/components/input/themes/shared/input.material.scss b/src/components/input/themes/shared/input.material.scss index adf5a0db9..18f3d7727 100644 --- a/src/components/input/themes/shared/input.material.scss +++ b/src/components/input/themes/shared/input.material.scss @@ -82,7 +82,7 @@ input:placeholder-shown + [part='notch'] [part='label'], } [part='start'] { - border-start-start-radius: var-get($theme, 'border-border-radius'); + border-start-start-radius: var-get($theme, 'box-border-radius'); justify-content: flex-start; grid-area: 1 / 1; @@ -113,7 +113,7 @@ input:placeholder-shown + [part='notch'] [part='label'], } [part='end'] { - border-start-end-radius: var-get($theme, 'border-border-radius'); + border-start-end-radius: var-get($theme, 'box-border-radius'); justify-content: flex-end; grid-area: 1 / 4; @@ -282,6 +282,7 @@ input:placeholder-shown + [part='notch'] [part='label'], [part~='container'] { background: var-get($theme, 'box-disabled-background'); border-color: var-get($theme, 'disabled-border-color'); + border-block-end-color: var-get( $theme, 'disabled-bottom-line-color'); border-bottom-style: dashed; } } @@ -610,6 +611,10 @@ input:placeholder-shown + [part='notch'] [part='label'], border-color: var-get($theme, 'disabled-border-color'); } + [part~='container'] { + background: var-get($theme, 'border-disabled-background'); + } + input:placeholder-shown + [part='notch'], [part~='filled'] + [part='notch'] { @extend %floated-styles; diff --git a/src/components/textarea/themes/shared/textarea.bootstrap.scss b/src/components/textarea/themes/shared/textarea.bootstrap.scss index c5ac34d35..f92f084d0 100644 --- a/src/components/textarea/themes/shared/textarea.bootstrap.scss +++ b/src/components/textarea/themes/shared/textarea.bootstrap.scss @@ -38,8 +38,7 @@ $theme: $bootstrap; [part~='prefixed'] { [part~='prefix'] { border-block-width: rem(1px); - border-inline-start-width: rem(1px); - border-inline-end-width: 0; + border-inline-width: 0; border-style: solid; border-color: var-get($theme, 'border-color'); overflow: hidden; @@ -68,8 +67,7 @@ $theme: $bootstrap; [part~='suffixed'] { [part~='suffix'] { border-block-width: rem(1px); - border-inline-start-width: 0; - border-inline-end-width: rem(1px); + border-inline-width: 0; border-style: solid; border-color: var-get($theme, 'border-color'); overflow: hidden; @@ -166,22 +164,22 @@ textarea { box-shadow: none; } - ::slotted([slot='suffix']):not(:last-child) { - border-inline-end: rem(1px) solid var(--disabled-border-color); + ::slotted([slot='prefix']) { + border-inline-start: rem(1px) solid var(--disabled-border-color); } - ::slotted([slot='prefix']):not(:first-child) { - border-inline-start: rem(1px) solid var(--disabled-border-color); + ::slotted([slot='suffix']) { + border-inline-end: rem(1px) solid var(--disabled-border-color); } } :host(:not([disabled])), :host(:not(:disabled)) { - ::slotted([slot='suffix']):not(:last-child) { - border-inline-end: rem(1px) solid var(--border-color); + ::slotted([slot='prefix']) { + border-inline-start: rem(1px) solid var(--border-color); } - ::slotted([slot='prefix']):not(:first-child) { - border-inline-start: rem(1px) solid var(--border-color); + ::slotted([slot='suffix']) { + border-inline-end: rem(1px) solid var(--border-color); } } diff --git a/src/components/textarea/themes/shared/textarea.indigo.scss b/src/components/textarea/themes/shared/textarea.indigo.scss index 931fab9b6..2610c78d7 100644 --- a/src/components/textarea/themes/shared/textarea.indigo.scss +++ b/src/components/textarea/themes/shared/textarea.indigo.scss @@ -99,13 +99,13 @@ textarea { [part~='prefixed'] { [part~='prefix'] { - border-start-start-radius: var-get($theme, 'border-border-radius'); + border-start-start-radius: var-get($theme, 'box-border-radius'); } } [part~='suffixed'] { [part~='suffix'] { - border-start-end-radius: var-get($theme, 'border-border-radius'); + border-start-end-radius: var-get($theme, 'box-border-radius'); } } From a58203f341fa8b99ddbc8634460f379ca18b89bb Mon Sep 17 00:00:00 2001 From: didimmova Date: Wed, 12 Nov 2025 16:14:24 +0200 Subject: [PATCH 3/6] refactor(input/validator): use input theme for validator and address latest input comments --- .../input/themes/shared/input.bootstrap.scss | 18 ++++--- .../input/themes/shared/input.common.scss | 4 ++ .../input/themes/shared/input.fluent.scss | 1 - .../input/themes/shared/input.indigo.scss | 20 ++++++- .../input/themes/shared/input.material.scss | 8 ++- .../themes/dark/_themes.scss | 7 --- .../themes/dark/validator.bootstrap.scss | 9 ---- .../themes/dark/validator.fluent.scss | 9 ---- .../themes/dark/validator.indigo.scss | 9 ---- .../themes/dark/validator.material.scss | 9 ---- .../themes/light/_themes.scss | 8 --- .../themes/light/validator.bootstrap.scss | 8 --- .../themes/light/validator.fluent.scss | 8 --- .../themes/light/validator.indigo.scss | 8 --- .../themes/light/validator.material.scss | 8 --- .../themes/light/validator.shared.scss | 8 --- .../themes/shared/validator.common.scss | 10 ++-- .../validation-container/themes/themes.ts | 52 ------------------- .../validation-container.ts | 7 --- 19 files changed, 46 insertions(+), 165 deletions(-) delete mode 100644 src/components/validation-container/themes/dark/_themes.scss delete mode 100644 src/components/validation-container/themes/dark/validator.bootstrap.scss delete mode 100644 src/components/validation-container/themes/dark/validator.fluent.scss delete mode 100644 src/components/validation-container/themes/dark/validator.indigo.scss delete mode 100644 src/components/validation-container/themes/dark/validator.material.scss delete mode 100644 src/components/validation-container/themes/light/_themes.scss delete mode 100644 src/components/validation-container/themes/light/validator.bootstrap.scss delete mode 100644 src/components/validation-container/themes/light/validator.fluent.scss delete mode 100644 src/components/validation-container/themes/light/validator.indigo.scss delete mode 100644 src/components/validation-container/themes/light/validator.material.scss delete mode 100644 src/components/validation-container/themes/light/validator.shared.scss delete mode 100644 src/components/validation-container/themes/themes.ts diff --git a/src/components/input/themes/shared/input.bootstrap.scss b/src/components/input/themes/shared/input.bootstrap.scss index 66ca9b6de..e482c7796 100644 --- a/src/components/input/themes/shared/input.bootstrap.scss +++ b/src/components/input/themes/shared/input.bootstrap.scss @@ -155,12 +155,6 @@ $theme: $bootstrap; } } -[part~='filled'] { - [part~='input'] { - color: var-get($theme, 'input-prefix-color--filled'); - } -} - [part~='prefixed'] [part='prefix'], [part~='suffixed'] [part='suffix'] { ::slotted(*) { @@ -190,6 +184,18 @@ $theme: $bootstrap; } } +:host([type='search']) { + [part^='container'] { + background: var-get($theme, 'search-background'); + box-shadow: var-get($theme, 'search-resting-elevation'); + border-radius: var-get($theme, 'search-border-radius'); + + &:focus-within { + background: var-get($theme, 'search-background'); + } + } +} + :host(:disabled), :host([disabled]) { [part='prefix'], diff --git a/src/components/input/themes/shared/input.common.scss b/src/components/input/themes/shared/input.common.scss index ada0d29d0..17c321509 100644 --- a/src/components/input/themes/shared/input.common.scss +++ b/src/components/input/themes/shared/input.common.scss @@ -68,6 +68,10 @@ $theme: $base; } :host(:focus-within) { + [part^='container'] { + caret-color: var-get($theme, 'focused-text-color'); + } + [part='prefix'] { color: var-get($theme, 'input-prefix-color--focused'); background: var-get($theme, 'input-prefix-background--focused'); diff --git a/src/components/input/themes/shared/input.fluent.scss b/src/components/input/themes/shared/input.fluent.scss index c0f4578c9..421bf7660 100644 --- a/src/components/input/themes/shared/input.fluent.scss +++ b/src/components/input/themes/shared/input.fluent.scss @@ -90,7 +90,6 @@ $theme: $fluent; } [part~='input'] { - color: var-get($theme, 'idle-text-color'); background: initial; font-size: rem(14px); padding-inline: pad-inline(rem(8px)); diff --git a/src/components/input/themes/shared/input.indigo.scss b/src/components/input/themes/shared/input.indigo.scss index 133a58430..ba1ab614b 100644 --- a/src/components/input/themes/shared/input.indigo.scss +++ b/src/components/input/themes/shared/input.indigo.scss @@ -167,7 +167,25 @@ $transition-duration: .25s; } } -:host([type='search']) { +:host([type='search']:not([disabled])) { + [part^='container'] { + background: var-get($theme, 'search-background'); + box-shadow: var-get($theme, 'search-resting-elevation'); + border-radius: var-get($theme, 'search-border-radius'); + + &:focus-within, + &:focus-within:hover { + background: var-get($theme, 'box-background-focus'); + } + } + + &:focus-within, + &:focus-within:hover { + [part^='container'] { + background: var-get($theme, 'box-background-focus'); + } + } + %suffix-preffix { padding-inline: pad-inline(rem(6px), rem(8px), rem(10px)); } diff --git a/src/components/input/themes/shared/input.material.scss b/src/components/input/themes/shared/input.material.scss index 18f3d7727..43fa53e06 100644 --- a/src/components/input/themes/shared/input.material.scss +++ b/src/components/input/themes/shared/input.material.scss @@ -281,8 +281,7 @@ input:placeholder-shown + [part='notch'] [part='label'], :host(:not([outlined]):disabled) { [part~='container'] { background: var-get($theme, 'box-disabled-background'); - border-color: var-get($theme, 'disabled-border-color'); - border-block-end-color: var-get( $theme, 'disabled-bottom-line-color'); + border-block-end-color: var-get($theme, 'disabled-bottom-line-color'); border-bottom-style: dashed; } } @@ -303,6 +302,11 @@ input:placeholder-shown + [part='notch'] [part='label'], } } } + + [part='prefix'], + [part='suffix'] { + max-height: 100%; + } } :host(:not([readonly])[type='search']:hover), diff --git a/src/components/validation-container/themes/dark/_themes.scss b/src/components/validation-container/themes/dark/_themes.scss deleted file mode 100644 index 92df9410c..000000000 --- a/src/components/validation-container/themes/dark/_themes.scss +++ /dev/null @@ -1,7 +0,0 @@ -@use 'styles/utilities' as *; -@use 'igniteui-theming/sass/themes/schemas/components/dark/validator' as *; - -$material: digest-schema($dark-material-validator); -$bootstrap: digest-schema($dark-bootstrap-validator); -$fluent: digest-schema($dark-fluent-validator); -$indigo: digest-schema($dark-indigo-validator); diff --git a/src/components/validation-container/themes/dark/validator.bootstrap.scss b/src/components/validation-container/themes/dark/validator.bootstrap.scss deleted file mode 100644 index 0ead798a8..000000000 --- a/src/components/validation-container/themes/dark/validator.bootstrap.scss +++ /dev/null @@ -1,9 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; -@use '../light/themes' as light; - -$theme: $bootstrap; - -:host { - @include css-vars-from-theme(diff(light.$base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/dark/validator.fluent.scss b/src/components/validation-container/themes/dark/validator.fluent.scss deleted file mode 100644 index ca0159937..000000000 --- a/src/components/validation-container/themes/dark/validator.fluent.scss +++ /dev/null @@ -1,9 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; -@use '../light/themes' as light; - -$theme: $fluent; - -:host { - @include css-vars-from-theme(diff(light.$base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/dark/validator.indigo.scss b/src/components/validation-container/themes/dark/validator.indigo.scss deleted file mode 100644 index 605a4de55..000000000 --- a/src/components/validation-container/themes/dark/validator.indigo.scss +++ /dev/null @@ -1,9 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; -@use '../light/themes' as light; - -$theme: $indigo; - -:host { - @include css-vars-from-theme(diff(light.$base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/dark/validator.material.scss b/src/components/validation-container/themes/dark/validator.material.scss deleted file mode 100644 index 6c2e13686..000000000 --- a/src/components/validation-container/themes/dark/validator.material.scss +++ /dev/null @@ -1,9 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; -@use '../light/themes' as light; - -$theme: $material; - -:host { - @include css-vars-from-theme(diff(light.$base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/light/_themes.scss b/src/components/validation-container/themes/light/_themes.scss deleted file mode 100644 index 7d979b029..000000000 --- a/src/components/validation-container/themes/light/_themes.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use 'styles/utilities' as *; -@use 'igniteui-theming/sass/themes/schemas/components/light/validator' as *; - -$base: digest-schema($light-validator); -$material: digest-schema($material-validator); -$bootstrap: digest-schema($bootstrap-validator); -$fluent: digest-schema($fluent-validator); -$indigo: digest-schema($indigo-validator); diff --git a/src/components/validation-container/themes/light/validator.bootstrap.scss b/src/components/validation-container/themes/light/validator.bootstrap.scss deleted file mode 100644 index a62c3fc62..000000000 --- a/src/components/validation-container/themes/light/validator.bootstrap.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; - -$theme: $bootstrap; - -:host { - @include css-vars-from-theme(diff($base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/light/validator.fluent.scss b/src/components/validation-container/themes/light/validator.fluent.scss deleted file mode 100644 index 09c3b54b4..000000000 --- a/src/components/validation-container/themes/light/validator.fluent.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; - -$theme: $fluent; - -:host { - @include css-vars-from-theme(diff($base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/light/validator.indigo.scss b/src/components/validation-container/themes/light/validator.indigo.scss deleted file mode 100644 index 333ece89f..000000000 --- a/src/components/validation-container/themes/light/validator.indigo.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; - -$theme: $indigo; - -:host { - @include css-vars-from-theme(diff($base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/light/validator.material.scss b/src/components/validation-container/themes/light/validator.material.scss deleted file mode 100644 index 4788e9123..000000000 --- a/src/components/validation-container/themes/light/validator.material.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; - -$theme: $material; - -:host { - @include css-vars-from-theme(diff($base, $theme), 'ig-validator'); -} diff --git a/src/components/validation-container/themes/light/validator.shared.scss b/src/components/validation-container/themes/light/validator.shared.scss deleted file mode 100644 index b734b3e56..000000000 --- a/src/components/validation-container/themes/light/validator.shared.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use 'styles/utilities' as *; -@use 'themes' as *; - -$theme: $base; - -:host { - @include css-vars-from-theme($theme, 'ig-validator'); -} diff --git a/src/components/validation-container/themes/shared/validator.common.scss b/src/components/validation-container/themes/shared/validator.common.scss index d3452aa48..eb10347db 100644 --- a/src/components/validation-container/themes/shared/validator.common.scss +++ b/src/components/validation-container/themes/shared/validator.common.scss @@ -1,18 +1,18 @@ @use 'styles/utilities' as *; -@use '../light/themes' as *; +@use '../../../input/themes/light/themes' as input-theme; -$theme: $material; +$input-theme: input-theme.$base; [part~='helper-text'] { - color: var-get($theme, 'helper-text-color'); + color: var-get($input-theme, 'helper-text-color'); row-gap: rem(8px); } [part~='validation-icon'] { - color: var-get($theme, 'icon-error-color'); + color: var-get($input-theme, 'icon-error-color'); } [part~='validation-message'] { gap: rem(4px); - color: var-get($theme, 'text-error-color') + color: var-get($input-theme, 'text-error-color') } diff --git a/src/components/validation-container/themes/themes.ts b/src/components/validation-container/themes/themes.ts deleted file mode 100644 index 37520909a..000000000 --- a/src/components/validation-container/themes/themes.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { css } from 'lit'; - -import type { Themes } from '../../../theming/types.js'; -// Dark Overrides -import { styles as bootstrapDark } from './dark/validator.bootstrap.css.js'; -import { styles as fluentDark } from './dark/validator.fluent.css.js'; -import { styles as indigoDark } from './dark/validator.indigo.css.js'; -import { styles as materialDark } from './dark/validator.material.css.js'; -// Light Overrides -import { styles as bootstrapLight } from './light/validator.bootstrap.css.js'; -import { styles as fluentLight } from './light/validator.fluent.css.js'; -import { styles as indigoLight } from './light/validator.indigo.css.js'; -import { styles as materialLight } from './light/validator.material.css.js'; -import { styles as shared } from './light/validator.shared.css.js'; - -const light = { - shared: css` - ${shared} - `, - bootstrap: css` - ${bootstrapLight} - `, - material: css` - ${materialLight} - `, - fluent: css` - ${fluentLight} - `, - indigo: css` - ${indigoLight} - `, -}; - -const dark = { - shared: css` - ${shared} - `, - bootstrap: css` - ${bootstrapDark} - `, - material: css` - ${materialDark} - `, - fluent: css` - ${fluentDark} - `, - indigo: css` - ${indigoDark} - `, -}; - -export const all: Themes = { light, dark }; diff --git a/src/components/validation-container/validation-container.ts b/src/components/validation-container/validation-container.ts index 9a5ed7953..37d7e2c2c 100644 --- a/src/components/validation-container/validation-container.ts +++ b/src/components/validation-container/validation-container.ts @@ -2,7 +2,6 @@ import { html, LitElement, nothing, type TemplateResult } from 'lit'; import { property, state } from 'lit/decorators.js'; import { cache } from 'lit/directives/cache.js'; import { ifDefined } from 'lit/directives/if-defined.js'; -import { addThemingController } from '../../theming/theming-controller.js'; import { createAbortHandle } from '../common/abort-handler.js'; import { registerComponent } from '../common/definitions/register.js'; import { @@ -14,7 +13,6 @@ import { partMap } from '../common/part-map.js'; import { isEmpty, toKebabCase } from '../common/util.js'; import IgcIconComponent from '../icon/icon.js'; import { styles as shared } from './themes/shared/validator.common.css.js'; -import { all } from './themes/themes.js'; import { styles } from './themes/validator.base.css.js'; /** Configuration for the validation container. */ @@ -140,11 +138,6 @@ export default class IgcValidationContainerComponent extends LitElement { return this._target; } - constructor() { - super(); - addThemingController(this, all); - } - protected override createRenderRoot(): HTMLElement | DocumentFragment { const root = super.createRenderRoot(); root.addEventListener('slotchange', this); From 4e5212d5b8c70322d3207e0ceab8afa5a2e186d9 Mon Sep 17 00:00:00 2001 From: didimmova Date: Thu, 13 Nov 2025 11:34:23 +0200 Subject: [PATCH 4/6] fix(input/textarea): fix indigo search hover and textarea caret color --- src/components/input/themes/shared/input.indigo.scss | 6 ++++++ src/components/textarea/themes/shared/textarea.common.scss | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/components/input/themes/shared/input.indigo.scss b/src/components/input/themes/shared/input.indigo.scss index ba1ab614b..5feb669d4 100644 --- a/src/components/input/themes/shared/input.indigo.scss +++ b/src/components/input/themes/shared/input.indigo.scss @@ -179,6 +179,12 @@ $transition-duration: .25s; } } + &:hover { + [part^='container'] { + background: var-get($theme, 'box-background-hover'); + } + } + &:focus-within, &:focus-within:hover { [part^='container'] { diff --git a/src/components/textarea/themes/shared/textarea.common.scss b/src/components/textarea/themes/shared/textarea.common.scss index cfcb119c5..ba4e1b135 100644 --- a/src/components/textarea/themes/shared/textarea.common.scss +++ b/src/components/textarea/themes/shared/textarea.common.scss @@ -57,6 +57,12 @@ textarea { } } +:host(:focus-within) { + [part~='container'] { + caret-color: var-get($theme, 'focused-text-color'); + } +} + :host([readonly]) { [part='prefix'], [part='suffix'] { From 580b32b13aed87cfc742f8f8535693b1b503e46e Mon Sep 17 00:00:00 2001 From: didimmova Date: Thu, 13 Nov 2025 16:31:55 +0200 Subject: [PATCH 5/6] fix(input): fix indigo search hover and search border radius --- .../input/themes/shared/input.bootstrap.scss | 1 - .../input/themes/shared/input.indigo.scss | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/input/themes/shared/input.bootstrap.scss b/src/components/input/themes/shared/input.bootstrap.scss index e482c7796..9a3faed0f 100644 --- a/src/components/input/themes/shared/input.bootstrap.scss +++ b/src/components/input/themes/shared/input.bootstrap.scss @@ -188,7 +188,6 @@ $theme: $bootstrap; [part^='container'] { background: var-get($theme, 'search-background'); box-shadow: var-get($theme, 'search-resting-elevation'); - border-radius: var-get($theme, 'search-border-radius'); &:focus-within { background: var-get($theme, 'search-background'); diff --git a/src/components/input/themes/shared/input.indigo.scss b/src/components/input/themes/shared/input.indigo.scss index 5feb669d4..995182c1e 100644 --- a/src/components/input/themes/shared/input.indigo.scss +++ b/src/components/input/themes/shared/input.indigo.scss @@ -171,7 +171,6 @@ $transition-duration: .25s; [part^='container'] { background: var-get($theme, 'search-background'); box-shadow: var-get($theme, 'search-resting-elevation'); - border-radius: var-get($theme, 'search-border-radius'); &:focus-within, &:focus-within:hover { @@ -179,12 +178,6 @@ $transition-duration: .25s; } } - &:hover { - [part^='container'] { - background: var-get($theme, 'box-background-hover'); - } - } - &:focus-within, &:focus-within:hover { [part^='container'] { @@ -209,6 +202,13 @@ $transition-duration: .25s; } } +:host([type='search']:not([disabled],[readonly]):hover), +:host([type='search']:not([disabled])[readonly][role='combobox']:hover) { + [part^='container'] { + background: var-get($theme, 'box-background-hover'); + } +} + :host(:disabled), :host([disabled]) { [part^='container'] { From ef9332a66952be547760478ed47317d05517e3d6 Mon Sep 17 00:00:00 2001 From: didimmova Date: Thu, 13 Nov 2025 17:06:51 +0200 Subject: [PATCH 6/6] fix(input): fix latest indigo problems --- .../input/themes/shared/input.indigo.scss | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/components/input/themes/shared/input.indigo.scss b/src/components/input/themes/shared/input.indigo.scss index 995182c1e..df26b7c9c 100644 --- a/src/components/input/themes/shared/input.indigo.scss +++ b/src/components/input/themes/shared/input.indigo.scss @@ -122,6 +122,14 @@ $transition-duration: .25s; } } +:host(:not([disabled],[readonly]):focus-within), +:host(:not([disabled])[readonly][role='combobox']:focus-within) { + [part^='container'] { + background: var-get($theme, 'box-background-focus'); + caret-color: var-get($theme, 'focused-bottom-line-color'); + } +} + :host(:focus-within) { [part='prefix'], [part='suffix'] { @@ -131,9 +139,6 @@ $transition-duration: .25s; } [part^='container'] { - background: var-get($theme, 'box-background-focus'); - caret-color: var-get($theme, 'focused-bottom-line-color'); - &::after { transform: scaleY(1); } @@ -172,6 +177,10 @@ $transition-duration: .25s; background: var-get($theme, 'search-background'); box-shadow: var-get($theme, 'search-resting-elevation'); + &:hover { + background: var-get($theme, 'box-background-hover'); + } + &:focus-within, &:focus-within:hover { background: var-get($theme, 'box-background-focus'); @@ -202,13 +211,6 @@ $transition-duration: .25s; } } -:host([type='search']:not([disabled],[readonly]):hover), -:host([type='search']:not([disabled])[readonly][role='combobox']:hover) { - [part^='container'] { - background: var-get($theme, 'box-background-hover'); - } -} - :host(:disabled), :host([disabled]) { [part^='container'] {