diff --git a/src/material/core/m2/_theming.scss b/src/material/core/m2/_theming.scss index 75ec69198da6..e3bcad47d5d5 100644 --- a/src/material/core/m2/_theming.scss +++ b/src/material/core/m2/_theming.scss @@ -117,10 +117,13 @@ $system: ( primary: map.get($primary, default), on-primary: map.get($primary, default-contrast), + inverse-primary: map.get($primary, if($is-dark, 600, 300)), secondary: map.get($accent, default), on-secondary: map.get($accent, default-contrast), + inverse-secondary: map.get($accent, if($is-dark, 600, 300)), error: map.get($warn, default), on-error: map.get($warn, default-contrast), + inverse-error: map.get($warn, if($is-dark, 600, 300)), shadow: black, hover-state-layer-opacity: 0.04, focus-state-layer-opacity: 0.12, diff --git a/src/material/core/tokens/_m3-utils.scss b/src/material/core/tokens/_m3-utils.scss index 0d096e151c7f..e60ebd65f979 100644 --- a/src/material/core/tokens/_m3-utils.scss +++ b/src/material/core/tokens/_m3-utils.scss @@ -8,6 +8,7 @@ $system: map.set($system, on-#{$color}-container, map.get($system, on-#{$variant}-container)); $system: map.set($system, #{$color}, map.get($system, #{$variant})); $system: map.set($system, #{$color}-container, map.get($system, #{$variant}-container)); + $system: map.set($system, inverse-#{$color}, map.get($system, inverse-#{$variant})); @return $system; } diff --git a/src/material/slide-toggle/_m2-slide-toggle.scss b/src/material/slide-toggle/_m2-slide-toggle.scss index e0c2e265cadc..151a1c6155fb 100644 --- a/src/material/slide-toggle/_m2-slide-toggle.scss +++ b/src/material/slide-toggle/_m2-slide-toggle.scss @@ -3,6 +3,7 @@ @use '../core/theming/theming'; @use 'sass:map'; @use '../core/tokens/m2-utils'; +@use '../core/tokens/m3-utils'; // Tokens that can't be configured through Angular Material's current theming API, // but may be in a future version of the theming API. @@ -17,7 +18,7 @@ // The m2 slide-toggle uses transforms to hide & show the tracks while // the m3 slide-toggle uses opacity. @return ( - slide-toggle-disabled-handle-opacity: null, + slide-toggle-disabled-handle-opacity: 0.38, slide-toggle-disabled-selected-handle-opacity: 0.38, slide-toggle-disabled-selected-icon-opacity: 0.38, slide-toggle-disabled-track-opacity: 0.12, @@ -65,68 +66,53 @@ @function get-color-tokens($theme) { $system: m2-utils.get-system($theme); - $is-dark: inspection.get-theme-type($theme) == dark; - $on-surface: if($is-dark, #f5f5f5, #424242); - $hairline: if($is-dark, #616161, #e0e0e0); - $on-surface-variant: if($is-dark, #9e9e9e, #616161); - $on-surface-state-content: if($is-dark, #fafafa, #212121); - $disabled-handle-color: if($is-dark, #000, #424242); - $icon-color: if($is-dark, #212121, #fff); - - // The default for tokens that rely on the theme will use the primary palette - $theme-color-tokens: private-get-color-palette-color-tokens($theme, primary); - - // TODO(crisbeto): `handle-surface-color` was hardcoded to `var(--mat-surface-color, #fff)` - // which made it basically hardcoded to #fff. Should it be based on the theme? @return map.merge( - $theme-color-tokens, + private-get-color-palette-color-tokens($theme, primary), ( slide-toggle-disabled-handle-elevation-shadow: elevation.get-box-shadow(0), - slide-toggle-disabled-selected-handle-color: $disabled-handle-color, - slide-toggle-disabled-selected-icon-color: $icon-color, - slide-toggle-disabled-selected-track-color: $on-surface, - slide-toggle-disabled-unselected-handle-color: $disabled-handle-color, - slide-toggle-disabled-unselected-icon-color: $icon-color, - slide-toggle-disabled-unselected-track-color: $on-surface, + slide-toggle-disabled-selected-handle-color: map.get($system, on-surface), + slide-toggle-disabled-selected-track-color: map.get($system, on-surface), + slide-toggle-disabled-unselected-handle-color: map.get($system, on-surface), + slide-toggle-disabled-unselected-icon-color: map.get($system, surface-variant), + slide-toggle-disabled-unselected-track-color: map.get($system, on-surface), slide-toggle-handle-elevation-shadow: elevation.get-box-shadow(1), - slide-toggle-handle-surface-color: #fff, + slide-toggle-handle-surface-color: map.get($system, surface), slide-toggle-label-text-color: map.get($system, on-surface), - slide-toggle-selected-icon-color: $icon-color, - slide-toggle-unselected-hover-handle-color: $on-surface-state-content, - slide-toggle-unselected-focus-handle-color: $on-surface-state-content, - slide-toggle-unselected-focus-state-layer-color: $on-surface, - slide-toggle-unselected-focus-track-color: $hairline, - slide-toggle-unselected-icon-color: $icon-color, - slide-toggle-unselected-handle-color: $on-surface-variant, - slide-toggle-unselected-hover-state-layer-color: $on-surface, - slide-toggle-unselected-hover-track-color: $hairline, - slide-toggle-unselected-pressed-handle-color: $on-surface-state-content, - slide-toggle-unselected-pressed-track-color: $hairline, - slide-toggle-unselected-pressed-state-layer-color: $on-surface, - slide-toggle-unselected-track-color: $hairline, + slide-toggle-unselected-hover-handle-color: map.get($system, inverse-surface), + slide-toggle-unselected-focus-handle-color: map.get($system, inverse-surface), + slide-toggle-unselected-focus-state-layer-color: map.get($system, on-surface), + slide-toggle-unselected-focus-track-color: map.get($system, outline), + slide-toggle-unselected-icon-color: map.get($system, surface-variant), + slide-toggle-unselected-handle-color: map.get($system, on-surface-variant), + slide-toggle-unselected-hover-state-layer-color: map.get($system, on-surface), + slide-toggle-unselected-hover-track-color: map.get($system, outline), + slide-toggle-unselected-pressed-handle-color: map.get($system, inverse-surface), + slide-toggle-unselected-pressed-track-color: map.get($system, outline), + slide-toggle-unselected-pressed-state-layer-color: map.get($system, on-surface), + slide-toggle-unselected-track-color: map.get($system, outline), ) ); } // Generates the mapping for the properties that change based on the slide toggle color. -@function private-get-color-palette-color-tokens($theme, $palette-name) { - $is-dark: inspection.get-theme-type($theme) == dark; - $palette-color: inspection.get-theme-color($theme, $palette-name, if($is-dark, 300, 600)); - $state-content: inspection.get-theme-color($theme, $palette-name, if($is-dark, 200, 900)); - $inverse: inspection.get-theme-color($theme, $palette-name, if($is-dark, 600, 300)); +@function private-get-color-palette-color-tokens($theme, $color-variant) { + $system: m2-utils.get-system($theme); + $system: m3-utils.replace-colors-with-variant($system, primary, $color-variant); @return ( - slide-toggle-selected-focus-state-layer-color: $palette-color, - slide-toggle-selected-handle-color: $palette-color, - slide-toggle-selected-hover-state-layer-color: $palette-color, - slide-toggle-selected-pressed-state-layer-color: $palette-color, - slide-toggle-selected-focus-handle-color: $state-content, - slide-toggle-selected-hover-handle-color: $state-content, - slide-toggle-selected-pressed-handle-color: $state-content, - slide-toggle-selected-focus-track-color: $inverse, - slide-toggle-selected-hover-track-color: $inverse, - slide-toggle-selected-pressed-track-color: $inverse, - slide-toggle-selected-track-color: $inverse, + slide-toggle-selected-icon-color: map.get($system, on-primary), + slide-toggle-disabled-selected-icon-color: map.get($system, on-primary), + slide-toggle-selected-focus-state-layer-color: map.get($system, primary), + slide-toggle-selected-handle-color: map.get($system, primary), + slide-toggle-selected-hover-state-layer-color: map.get($system, primary), + slide-toggle-selected-pressed-state-layer-color: map.get($system, primary), + slide-toggle-selected-focus-handle-color: map.get($system, primary), + slide-toggle-selected-hover-handle-color: map.get($system, primary), + slide-toggle-selected-pressed-handle-color: map.get($system, primary), + slide-toggle-selected-focus-track-color: map.get($system, inverse-primary), + slide-toggle-selected-hover-track-color: map.get($system, inverse-primary), + slide-toggle-selected-pressed-track-color: map.get($system, inverse-primary), + slide-toggle-selected-track-color: map.get($system, inverse-primary), ); } diff --git a/src/material/slide-toggle/_slide-toggle-theme.scss b/src/material/slide-toggle/_slide-toggle-theme.scss index 183c5c01c1cb..2058e14399fc 100644 --- a/src/material/slide-toggle/_slide-toggle-theme.scss +++ b/src/material/slide-toggle/_slide-toggle-theme.scss @@ -6,6 +6,8 @@ @use '../core/typography/typography'; @use './m2-slide-toggle'; @use './m3-slide-toggle'; +@use '../core/tokens/m2-utils'; +@use '../core/tokens/m3-utils'; /// Outputs base theme styles (styles not dependent on the color, typography, or density settings) /// for the mat-slide-toggle. @@ -39,40 +41,27 @@ // Add values for MDC slide toggles tokens @include sass-utils.current-selector-or-root() { @include token-utils.create-token-values-mixed(m2-slide-toggle.get-color-tokens($theme)); + $system: m2-utils.get-system($theme); & { - // TODO(andrewjs): Remove this once all tokens are migrated to - // mat internally. - --mdc-slide-toggle-disabled-label-text-color: #{inspection.get-theme-color( - $theme, - foreground, - disabled-text - )}; // TODO(wagnermaciel): Use our token system to define this css variable. - --mat-slide-toggle-disabled-label-text-color: #{inspection.get-theme-color( - $theme, - foreground, - disabled-text - )}; + --mat-slide-toggle-disabled-label-text-color: #{ + m3-utils.color-with-opacity(map.get($system, on-surface), 38%)}; } .mat-mdc-slide-toggle { // TODO(wagnermaciel): Use our token system to define this css variable. - --mat-slide-toggle-label-text-color: #{inspection.get-theme-color( - $theme, - foreground, - text - )}; + --mat-slide-toggle-label-text-color: #{map.get($system, on-surface)}; // Change the color palette related tokens to accent or warn if applicable &.mat-accent { @include token-utils.create-token-values-mixed( - m2-slide-toggle.private-get-color-palette-color-tokens($theme, accent)); + m2-slide-toggle.private-get-color-palette-color-tokens($theme, secondary)); } &.mat-warn { @include token-utils.create-token-values-mixed( - m2-slide-toggle.private-get-color-palette-color-tokens($theme, warn)); + m2-slide-toggle.private-get-color-palette-color-tokens($theme, error)); } } }