| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- //
- // Copyright 2021 Google Inc.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- // copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- // THE SOFTWARE.
- //
- @use '@material/feature-targeting/feature-targeting';
- @use '@material/rtl/rtl';
- @use '@material/dom/dom';
- $ring-radius-default: 8px !default;
- $inner-ring-width-default: 2px !default;
- $inner-ring-color-default: transparent !default;
- $outer-ring-width-default: 2px !default;
- $outer-ring-color-default: transparent !default;
- $container-outer-padding-default: 2px !default;
- /// Styles applied to the component's inner focus ring element.
- ///
- /// @param $ring-radius [$ring-radius-default] - Focus ring radius.
- /// @param $inner-ring-width [$inner-ring-width-default] - Inner focus ring width.
- /// @param $inner-ring-color [$inner-ring-color-default] - Inner focus ring color.
- /// @param $outer-ring-width [$outer-ring-width-default] - Outer focus ring width.
- /// @param $outer-ring-color [$outer-ring-color-default] - Outer focus ring color.
- /// @param $container-outer-padding [$container-outer-padding-default] - The
- /// distance between the focus ring and the container.
- @mixin focus-ring(
- $query: feature-targeting.all(),
- $ring-radius: $ring-radius-default,
- $inner-ring-width: $inner-ring-width-default,
- $inner-ring-color: $inner-ring-color-default,
- $outer-ring-width: $outer-ring-width-default,
- $outer-ring-color: $outer-ring-color-default,
- $container-outer-padding-vertical: $container-outer-padding-default,
- $container-outer-padding-horizontal: $container-outer-padding-default
- ) {
- $feat-structure: feature-targeting.create-target($query, structure);
- $container-size-vertical: 100%;
- @if $container-outer-padding-vertical != 0 {
- $container-size-vertical: calc(
- 100% + #{$container-outer-padding-vertical * 2}
- );
- }
- $container-size-horizontal: 100%;
- @if $container-outer-padding-horizontal != 0 {
- $container-size-horizontal: calc(
- 100% + #{$container-outer-padding-horizontal * 2}
- );
- }
- $outer-ring-size: 100%;
- @if $outer-ring-width > 0 {
- $outer-ring-size: calc(100% + #{$outer-ring-width * 2});
- }
- @include feature-targeting.targets($feat-structure) {
- pointer-events: none;
- border: $inner-ring-width solid $inner-ring-color;
- border-radius: $ring-radius - $outer-ring-width;
- box-sizing: content-box;
- position: absolute;
- top: 50%;
- @include rtl.ignore-next-line();
- left: 50%;
- @include rtl.ignore-next-line();
- transform: translate(-50%, -50%);
- height: $container-size-vertical;
- width: $container-size-horizontal;
- @include dom.forced-colors-mode($exclude-ie11: true) {
- border-color: CanvasText;
- }
- &::after {
- content: '';
- border: $outer-ring-width solid $outer-ring-color;
- border-radius: $ring-radius;
- display: block;
- position: absolute;
- top: 50%;
- @include rtl.ignore-next-line();
- left: 50%;
- @include rtl.ignore-next-line();
- transform: translate(-50%, -50%);
- height: $outer-ring-size;
- width: $outer-ring-size;
- @include dom.forced-colors-mode($exclude-ie11: true) {
- border-color: CanvasText;
- }
- }
- }
- }
- /// Customizes the color of the button focus ring.
- ///
- /// @param $inner-ring-color [$inner-ring-color-default] - Inner focus ring color.
- /// @param $outer-ring-width [$outer-ring-width-default] - Outer focus ring width.
- @mixin focus-ring-color(
- $inner-ring-color: $inner-ring-color-default,
- $outer-ring-color: $outer-ring-color-default
- ) {
- border-color: $inner-ring-color;
- &::after {
- border-color: $outer-ring-color;
- }
- }
- /// Customizes the border radius of the button focus ring.
- ///
- /// @param {Number} $ring-radius - The border radius of the focus ring.
- /// @param {Number} $outer-ring-width [$outer-ring-width] - Width of the outer
- /// ring, required to compute the radius for the inner ring.
- @mixin focus-ring-radius(
- $ring-radius,
- $outer-ring-width: $outer-ring-width-default,
- $query: feature-targeting.all()
- ) {
- $feat-structure: feature-targeting.create-target($query, structure);
- @include feature-targeting.targets($feat-structure) {
- border-radius: $ring-radius - $outer-ring-width;
- &::after {
- border-radius: $ring-radius;
- }
- }
- }
|