@use '../core/tokens/m2/mat/radio' as tokens-mat-radio; @use '../core/tokens/m2/mdc/radio' as tokens-mdc-radio; @use '../core/tokens/token-utils'; @use '../core/style/layout-common'; @use './radio-common'; .mat-mdc-radio-button { -webkit-tap-highlight-color: transparent; @include radio-common.radio-structure(true); @include radio-common.radio-noop-animations(); @include token-utils.use-tokens(tokens-mat-radio.$prefix, tokens-mat-radio.get-token-slots()) { .mdc-radio__background::before { @include token-utils.create-token-slot(background-color, ripple-color); } &.mat-mdc-radio-checked { .mat-ripple-element, .mdc-radio__background::before { @include token-utils.create-token-slot(background-color, checked-ripple-color); } } &.mat-mdc-radio-disabled-interactive .mdc-radio--disabled { .mat-ripple-element, .mdc-radio__background::before { @include token-utils.create-token-slot(background-color, ripple-color); } } .mat-internal-form-field { @include token-utils.create-token-slot(color, label-text-color); @include token-utils.create-token-slot(font-family, label-text-font); @include token-utils.create-token-slot(line-height, label-text-line-height); @include token-utils.create-token-slot(font-size, label-text-size); @include token-utils.create-token-slot(letter-spacing, label-text-tracking); @include token-utils.create-token-slot(font-weight, label-text-weight); } .mdc-radio--disabled + label { @include token-utils.create-token-slot(color, disabled-label-color); } } // This is necessary because we do not depend on MDC's ripple, but have our own that should be // positioned correctly. This can be removed once we start using MDC's ripple implementation. .mat-radio-ripple { @include layout-common.fill; pointer-events: none; border-radius: 50%; .mat-ripple-element { opacity: 0.14; } &::before { border-radius: 50%; } } // We don't inherit the border focus style from MDC since we don't use their ripple. // Instead we need to replicate it here. @include token-utils.use-tokens(tokens-mdc-radio.$prefix, tokens-mdc-radio.get-token-slots()) { .mdc-radio .mdc-radio__native-control:focus:enabled:not(:checked) { & ~ .mdc-radio__background .mdc-radio__outer-circle { @include token-utils.create-token-slot(border-color, unselected-focus-icon-color); } } } // For radios render the focus indicator when we know // the hidden input is focused (slightly different for each control). &.cdk-focused .mat-focus-indicator::before { content: ''; } } .mat-mdc-radio-disabled { cursor: default; pointer-events: none; &.mat-mdc-radio-disabled-interactive { pointer-events: auto; } } // Element used to provide a larger tap target for users on touch devices. .mat-mdc-radio-touch-target { position: absolute; top: 50%; left: 50%; height: 48px; width: 48px; transform: translate(-50%, -50%); @include token-utils.use-tokens(tokens-mat-radio.$prefix, tokens-mat-radio.get-token-slots()) { @include token-utils.create-token-slot(display, touch-target-display); } [dir='rtl'] & { left: auto; right: 50%; transform: translate(50%, -50%); } }