diff --git a/src/material-experimental/theming/_custom-tokens.scss b/src/material-experimental/theming/_custom-tokens.scss index ba0bdbbe129d..4cd241255df7 100644 --- a/src/material-experimental/theming/_custom-tokens.scss +++ b/src/material-experimental/theming/_custom-tokens.scss @@ -1110,6 +1110,16 @@ unselected-handle-horizontal-margin: 0 8px, unselected-with-icon-handle-horizontal-margin: 0 4px, unselected-pressed-handle-horizontal-margin: 0 2px, + // The hidden and visible track represent whichever track is visible or + // hidden in the ui. This could be the .mdc-switch__track :before or + // :after depending on whether the switch is selected or unselected. + // + // The m2 slide-toggle uses transforms to hide & show the tracks while + // the m3 slide-toggle uses opacity. + visible-track-opacity: 1, + hidden-track-opacity: 0, + visible-track-transition: opacity 75ms, + hidden-track-transition: opacity 75ms, ), ()); } diff --git a/src/material/core/tokens/m2/mat/_switch.scss b/src/material/core/tokens/m2/mat/_switch.scss index c43ac181b7f6..6b95cf7c2e2a 100644 --- a/src/material/core/tokens/m2/mat/_switch.scss +++ b/src/material/core/tokens/m2/mat/_switch.scss @@ -19,6 +19,18 @@ $prefix: (mat, switch); unselected-handle-horizontal-margin: 0, unselected-with-icon-handle-horizontal-margin: 0, unselected-pressed-handle-horizontal-margin: 0, + + // The hidden and visible track represent whichever track is visible or + // hidden in the ui. This could be the .mdc-switch__track :before or + // :after depending on whether the switch is selected or unselected. + // + // The m2 slide-toggle uses transforms to hide & show the tracks while + // the m3 slide-toggle uses opacity. + + visible-track-opacity: 1, + hidden-track-opacity: 1, + visible-track-transition: transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1), + hidden-track-transition: transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1), ); } diff --git a/src/material/slide-toggle/slide-toggle.scss b/src/material/slide-toggle/slide-toggle.scss index 592aa54613ac..e5b4217f2131 100644 --- a/src/material/slide-toggle/slide-toggle.scss +++ b/src/material/slide-toggle/slide-toggle.scss @@ -127,6 +127,37 @@ margin 75ms cubic-bezier(0.4, 0, 0.2, 1); } +// The hidden and visible track represent whichever track is visible or +// hidden in the ui. This could be the .mdc-switch__track :before or +// :after depending on whether the switch is selected or unselected. +// +// The m2 slide-toggle uses transforms to hide & show the tracks while +// the m3 slide-toggle uses opacity. + +@include token-utils.use-tokens(m2-mat-switch.$prefix, m2-mat-switch.get-token-slots()) { + .mdc-switch--selected .mdc-switch__track { + &::before { + @include token-utils.create-token-slot(opacity, hidden-track-opacity); + @include token-utils.create-token-slot(transition, hidden-track-transition); + } + &::after { + @include token-utils.create-token-slot(opacity, visible-track-opacity); + @include token-utils.create-token-slot(transition, visible-track-transition); + } + } + + .mdc-switch--unselected .mdc-switch__track { + &::before { + @include token-utils.create-token-slot(opacity, visible-track-opacity); + @include token-utils.create-token-slot(transition, visible-track-transition); + } + &::after { + @include token-utils.create-token-slot(opacity, hidden-track-opacity); + @include token-utils.create-token-slot(transition, hidden-track-transition); + } + } +} + @include token-utils.use-tokens(m2-mat-switch.$prefix, m2-mat-switch.get-token-slots()) { .mat-mdc-slide-toggle { .mdc-switch--unselected .mdc-switch__handle {