19
19
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
20
// THE SOFTWARE.
21
21
//
22
-
22
+ @use ' sass:list' ;
23
+ @use ' sass:math' ;
24
+ @use ' sass:meta' ;
23
25
@use ' @material/feature-targeting/feature-targeting' ;
24
26
@use ' @material/rtl/rtl' ;
25
27
@use ' @material/dom/dom' ;
@@ -33,7 +35,8 @@ $container-outer-padding-default: 2px !default;
33
35
34
36
/// Styles applied to the component's inner focus ring element.
35
37
///
36
- /// @param $ring-radius [$ring-radius-default] - Focus ring radius.
38
+ /// @param $ring-radius [$ring-radius-default] - Focus ring radius, either a
39
+ /// single value or a list of radius values to apply.
37
40
/// @param $inner-ring-width [$inner-ring-width-default] - Inner focus ring width.
38
41
/// @param $inner-ring-color [$inner-ring-color-default] - Inner focus ring color.
39
42
/// @param $outer-ring-width [$outer-ring-width-default] - Outer focus ring width.
@@ -62,7 +65,7 @@ $container-outer-padding-default: 2px !default;
62
65
@include feature-targeting .targets ($feat-structure ) {
63
66
pointer-events : none ;
64
67
border : $inner-ring-width solid $inner-ring-color ;
65
- border-radius : calc ($ring-radius - $outer-ring-width );
68
+ border-radius : _inner-ring-radius ($ring-radius , $outer-ring-width );
66
69
box-sizing : content-box ;
67
70
position : absolute ;
68
71
top : 50% ;
@@ -159,7 +162,8 @@ $container-outer-padding-default: 2px !default;
159
162
160
163
/// Customizes the border radius of the button focus ring.
161
164
///
162
- /// @param {Number} $ring-radius - The border radius of the focus ring.
165
+ /// @param {Number|List} $ring-radius - The border radius of the focus ring,
166
+ /// . either a single value or a list of radius values to apply.
163
167
/// @param {Number} $outer-ring-width [$outer-ring-width] - Width of the outer
164
168
/// ring, required to compute the radius for the inner ring.
165
169
@mixin focus-ring-radius (
@@ -170,10 +174,34 @@ $container-outer-padding-default: 2px !default;
170
174
$feat-structure : feature-targeting .create-target ($query , structure );
171
175
172
176
@include feature-targeting .targets ($feat-structure ) {
173
- border-radius : calc ($ring-radius - $outer-ring-width );
174
-
177
+ border-radius : _inner-ring-radius ($ring-radius , $outer-ring-width );
175
178
& ::after {
176
179
border-radius : $ring-radius ;
177
180
}
178
181
}
179
182
}
183
+
184
+ /// Returns the inner focus ring's border radius given the outer ring's radius.
185
+ ///
186
+ /// @param {Number|List} $ring-radius - The border radius of the focus ring,
187
+ /// . either a single value or a list of radius values to apply.
188
+ /// @param {Number} $outer-ring-width [$outer-ring-width] - Width of the outer
189
+ /// ring, required to compute the radius for the inner ring.
190
+ /// @return {Number|List} the inner focus ring's border radius.
191
+ @function _inner-ring-radius ($ring-radius , $outer-ring-width ) {
192
+ $inner-ring-radius : null;
193
+ @if (meta .type-of ($ring-radius ) == ' list' ) {
194
+ $inner-ring-radius : ();
195
+ @each $radius in $ring-radius {
196
+ $inner-radius : math .max ($radius - $outer-ring-width , 0 );
197
+ $inner-ring-radius : list .append (
198
+ $inner-ring-radius ,
199
+ $inner-radius ,
200
+ $separator : space
201
+ );
202
+ }
203
+ } @else {
204
+ $inner-ring-radius : calc ($ring-radius - $outer-ring-width );
205
+ }
206
+ @return $inner-ring-radius ;
207
+ }
0 commit comments