@cloud-ru/ds-toggles 1.1.4 → 1.1.5-preview-a2208aeb.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -65,7 +65,7 @@ $sizes: 'xs', 's';
65
65
  $outlineWidth: base.$sn-primitive-strokeWeight-strokeSemiBold;
66
66
 
67
67
  outline: $outlineWidth solid base.$sn-theme-color-available-complementary;
68
- outline-offset: $outlineWidth;
68
+ outline-offset: var(--focus-offset);
69
69
  }
70
70
  }
71
71
  }
@@ -115,6 +115,13 @@ $sizes: 'xs', 's';
115
115
  }
116
116
 
117
117
  .framing {
118
+
119
+ // Кольцо фокуса по границе контейнера (Figma `focusedFrame/regular/outside`).
120
+ $containerWidth: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'container', 'min-width');
121
+ $framingWidth: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-width');
122
+
123
+ --focus-offset: calc((#{$containerWidth} - #{$framingWidth}) / 2);
124
+
118
125
  width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-width');
119
126
  height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-height');
120
127
 
@@ -122,6 +129,13 @@ $sizes: 'xs', 's';
122
129
  @include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing');
123
130
  }
124
131
 
132
+ // Размер спиннера — токен toggles, а не `density.icon.*` из @cloud-ru/ds-loader; по макету шире рамки, не ужимается.
133
+ .spinner {
134
+ flex-shrink: 0;
135
+ width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'flag', 'surface', 'loaderSpinner', 'width');
136
+ height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'flag', 'surface', 'loaderSpinner', 'height');
137
+ }
138
+
125
139
  .flag {
126
140
  @include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'flag');
127
141
  }
@@ -34,7 +34,7 @@ function Icon({
34
34
  disabled,
35
35
  }: Required<Pick<FavouriteProps, 'checked' | 'loading' | 'size' | 'disabled'>> & { variant: FavouriteIcon }) {
36
36
  if (loading) {
37
- return <Spinner size={SPINNER_SIZE_MAP[size]} />;
37
+ return <Spinner size={SPINNER_SIZE_MAP[size]} className={styles.spinner} />;
38
38
  }
39
39
 
40
40
  const iconSize = getIconSize(size);
@@ -96,10 +96,24 @@ $sizes: 'xs', 's';
96
96
  }
97
97
 
98
98
  .framing {
99
- @include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing');
99
+
100
+ // Кольцо фокуса по границе контейнера (Figma `focusedFrame/regular/outside`).
101
+ $containerWidth: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'container', 'min-width');
102
+ $framingWidth: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-width');
103
+
104
+ --focus-offset: calc((#{$containerWidth} - #{$framingWidth}) / 2);
100
105
 
101
106
  width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-width');
102
107
  height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-height');
108
+
109
+ @include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing');
110
+ }
111
+
112
+ // Размер спиннера — токен toggles, а не `density.icon.*` из @cloud-ru/ds-loader; по макету шире рамки, не ужимается.
113
+ .spinner {
114
+ flex-shrink: 0;
115
+ width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'flag', 'surface', 'loaderSpinner', 'width');
116
+ height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'flag', 'surface', 'loaderSpinner', 'height');
103
117
  }
104
118
 
105
119
  .flag {
@@ -132,7 +146,7 @@ $sizes: 'xs', 's';
132
146
  &[data-focusvisible='true'] {
133
147
  .framing {
134
148
  outline: base.$sn-primitive-strokeWeight-strokeSemiBold solid base.$sn-theme-color-available-complementary;
135
- outline-offset: base.$sn-primitive-strokeWeight-strokeSemiBold;
149
+ outline-offset: var(--focus-offset);
136
150
  }
137
151
  }
138
152
  }
@@ -51,7 +51,7 @@ export function Radio({
51
51
  <div className={styles.backgroundStateLayer} data-state='emptyNeutralOnBackground' />
52
52
  <div className={styles.flag}>
53
53
  {loading ? (
54
- <Spinner size={SPINNER_SIZE_MAP[size]} />
54
+ <Spinner size={SPINNER_SIZE_MAP[size]} className={styles.spinner} />
55
55
  ) : (
56
56
  <div className={styles.surface} {...stateDataAttributes} data-text-opacity={checked || undefined} />
57
57
  )}
@@ -57,7 +57,7 @@ $sizes: 'xs', 's';
57
57
  $outlineWidth: base.$sn-primitive-strokeWeight-strokeSemiBold;
58
58
 
59
59
  outline: $outlineWidth solid base.$sn-theme-color-available-complementary;
60
- outline-offset: $outlineWidth;
60
+ outline-offset: var(--focus-offset);
61
61
  }
62
62
  }
63
63
  }
@@ -112,6 +112,13 @@ $sizes: 'xs', 's';
112
112
  }
113
113
 
114
114
  .framing {
115
+
116
+ // Кольцо фокуса по границе контейнера (Figma `focusedFrame/regular/outside`).
117
+ $containerWidth: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'container', 'min-width');
118
+ $framingWidth: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'min-width');
119
+
120
+ --focus-offset: calc((#{$containerWidth} - #{$framingWidth}) / 2);
121
+
115
122
  width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'min-width');
116
123
  height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'min-height');
117
124
 
@@ -119,6 +126,13 @@ $sizes: 'xs', 's';
119
126
  @include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing');
120
127
  }
121
128
 
129
+ // Размер спиннера — токен toggles, а не `density.icon.*` из @cloud-ru/ds-loader; по макету шире рамки, не ужимается.
130
+ .spinner {
131
+ flex-shrink: 0;
132
+ width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'flag', 'surface', 'loaderSpinner', 'width');
133
+ height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'flag', 'surface', 'loaderSpinner', 'height');
134
+ }
135
+
122
136
  .flag {
123
137
  @include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'flag')
124
138
  }
@@ -7,8 +7,7 @@ $switchAnimationDuration: 0.1s;
7
7
  $iconRevealEasing: cubic-bezier(0.33, 1, 0.68, 1);
8
8
 
9
9
  .spinner {
10
- // По макету спиннер шире ползунка (24 на surface 16) и выходит за его границы,
11
- // поэтому flex-контейнер не должен его ужимать.
10
+ // Спиннер шире ползунка и выходит за его границы — flex-контейнер не должен его ужимать.
12
11
  flex-shrink: 0;
13
12
  }
14
13
 
@@ -191,6 +190,12 @@ $iconRevealEasing: cubic-bezier(0.33, 1, 0.68, 1);
191
190
  @include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'switch', 'framing', 'flag');
192
191
  }
193
192
 
193
+ // Размер спиннера — токен toggles, а не `density.icon.*` из @cloud-ru/ds-loader.
194
+ .spinner {
195
+ width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'switch', 'framing', 'flag', 'surface', 'loaderSpinner', 'width');
196
+ height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'switch', 'framing', 'flag', 'surface', 'loaderSpinner', 'height');
197
+ }
198
+
194
199
  .framing[data-checked="true"] .flag {
195
200
  $flagTrackWidth: base.simple-var(
196
201
  toggles.$toggles,
@@ -208,13 +213,9 @@ $iconRevealEasing: cubic-bezier(0.33, 1, 0.68, 1);
208
213
 
209
214
  &[data-focusvisible="true"] {
210
215
  .container {
211
- // Real offset
216
+ // Кольцо фокуса по границе контейнера (Figma `focusedFrame/regular/outside`).
212
217
  $offsetWidth: base.$sn-primitive-strokeWeight-strokeSemiBold;
213
218
 
214
- @if ($size == 'xs') {
215
- outline-offset: $offsetWidth;
216
- }
217
-
218
219
  border-radius: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'switch', 'framing', 'border-radius');
219
220
  outline: $offsetWidth solid base.$sn-theme-color-available-complementary;
220
221
  }