@cloud-ru/ds-toggles 1.1.5-preview-d90ac2be.0 → 1.1.5
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.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/components/Checkbox/Checkbox.js +1 -1
- package/dist/cjs/components/Checkbox/styles.module.css +34 -22
- package/dist/cjs/components/Favourite/Favourite.js +1 -1
- package/dist/cjs/components/Favourite/styles.module.css +30 -18
- package/dist/cjs/components/Radio/Radio.js +1 -1
- package/dist/cjs/components/Radio/styles.module.css +31 -19
- package/dist/cjs/components/Switch/styles.module.css +34 -27
- package/dist/cjs/components/ToggleGroup/ToggleGroup.js +1 -4
- package/dist/cjs/style.css +129 -86
- package/dist/esm/components/Checkbox/Checkbox.js +1 -1
- package/dist/esm/components/Checkbox/styles.module.css +34 -22
- package/dist/esm/components/Favourite/Favourite.js +1 -1
- package/dist/esm/components/Favourite/styles.module.css +30 -18
- package/dist/esm/components/Radio/Radio.js +1 -1
- package/dist/esm/components/Radio/styles.module.css +31 -19
- package/dist/esm/components/Switch/styles.module.css +34 -27
- package/dist/esm/components/ToggleGroup/ToggleGroup.js +2 -5
- package/dist/esm/style.css +129 -86
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/components/Checkbox/Checkbox.tsx +1 -1
- package/src/components/Checkbox/styles.module.scss +15 -1
- package/src/components/Favourite/Favourite.tsx +1 -1
- package/src/components/Favourite/styles.module.scss +16 -2
- package/src/components/Radio/Radio.tsx +1 -1
- package/src/components/Radio/styles.module.scss +15 -1
- package/src/components/Switch/styles.module.scss +8 -7
- package/src/components/ToggleGroup/ToggleGroup.tsx +4 -6
|
@@ -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:
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useUncontrolledProp } from '@cloud-ru/ds-utils';
|
|
2
|
-
import { PropsWithChildren, useCallback
|
|
2
|
+
import { PropsWithChildren, useCallback } from 'react';
|
|
3
3
|
|
|
4
4
|
import { SELECTION_MODE } from '../../constants';
|
|
5
5
|
import { ToggleGroupContext } from '../../context';
|
|
@@ -65,9 +65,7 @@ export function ToggleGroup({
|
|
|
65
65
|
[selectionMode, setValue],
|
|
66
66
|
);
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return <ToggleGroupContext.Provider value={contextValue}>{children}</ToggleGroupContext.Provider>;
|
|
68
|
+
return (
|
|
69
|
+
<ToggleGroupContext.Provider value={{ value, onChange, selectionMode }}>{children}</ToggleGroupContext.Provider>
|
|
70
|
+
);
|
|
73
71
|
}
|