@cloud-ru/ds-toggles 1.1.5-preview-d50a3da1.0 → 1.1.5-preview-e30f4f90.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.
- package/dist/cjs/components/Checkbox/Checkbox.js +1 -1
- package/dist/cjs/components/Checkbox/styles.module.css +22 -34
- package/dist/cjs/components/Favourite/Favourite.js +1 -1
- package/dist/cjs/components/Favourite/styles.module.css +18 -30
- package/dist/cjs/components/Radio/Radio.js +1 -1
- package/dist/cjs/components/Radio/styles.module.css +19 -31
- package/dist/cjs/components/Switch/styles.module.css +27 -34
- package/dist/cjs/components/ToggleGroup/ToggleGroup.js +4 -1
- package/dist/cjs/style.css +86 -129
- package/dist/esm/components/Checkbox/Checkbox.js +1 -1
- package/dist/esm/components/Checkbox/styles.module.css +22 -34
- package/dist/esm/components/Favourite/Favourite.js +1 -1
- package/dist/esm/components/Favourite/styles.module.css +18 -30
- package/dist/esm/components/Radio/Radio.js +1 -1
- package/dist/esm/components/Radio/styles.module.css +19 -31
- package/dist/esm/components/Switch/styles.module.css +27 -34
- package/dist/esm/components/ToggleGroup/ToggleGroup.js +5 -2
- package/dist/esm/style.css +86 -129
- 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 +1 -15
- package/src/components/Favourite/Favourite.tsx +1 -1
- package/src/components/Favourite/styles.module.scss +2 -16
- package/src/components/Radio/Radio.tsx +1 -1
- package/src/components/Radio/styles.module.scss +1 -15
- package/src/components/Switch/styles.module.scss +7 -8
- package/src/components/ToggleGroup/ToggleGroup.tsx +6 -4
|
@@ -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: $outlineWidth;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
|
@@ -115,13 +115,6 @@ $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
|
-
|
|
125
118
|
width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-width');
|
|
126
119
|
height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-height');
|
|
127
120
|
|
|
@@ -129,13 +122,6 @@ $sizes: 'xs', 's';
|
|
|
129
122
|
@include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing');
|
|
130
123
|
}
|
|
131
124
|
|
|
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
|
-
|
|
139
125
|
.flag {
|
|
140
126
|
@include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'flag');
|
|
141
127
|
}
|
|
@@ -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]} />;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
const iconSize = getIconSize(size);
|
|
@@ -96,24 +96,10 @@ $sizes: 'xs', 's';
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
.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);
|
|
99
|
+
@include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing');
|
|
105
100
|
|
|
106
101
|
width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'checkbox', 'framing', 'min-width');
|
|
107
102
|
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');
|
|
117
103
|
}
|
|
118
104
|
|
|
119
105
|
.flag {
|
|
@@ -146,7 +132,7 @@ $sizes: 'xs', 's';
|
|
|
146
132
|
&[data-focusvisible='true'] {
|
|
147
133
|
.framing {
|
|
148
134
|
outline: base.$sn-primitive-strokeWeight-strokeSemiBold solid base.$sn-theme-color-available-complementary;
|
|
149
|
-
outline-offset:
|
|
135
|
+
outline-offset: base.$sn-primitive-strokeWeight-strokeSemiBold;
|
|
150
136
|
}
|
|
151
137
|
}
|
|
152
138
|
}
|
|
@@ -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]} />
|
|
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: $outlineWidth;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -112,13 +112,6 @@ $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
|
-
|
|
122
115
|
width: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'min-width');
|
|
123
116
|
height: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'min-height');
|
|
124
117
|
|
|
@@ -126,13 +119,6 @@ $sizes: 'xs', 's';
|
|
|
126
119
|
@include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing');
|
|
127
120
|
}
|
|
128
121
|
|
|
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
|
-
|
|
136
122
|
.flag {
|
|
137
123
|
@include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'radio', 'framing', 'flag')
|
|
138
124
|
}
|
|
@@ -7,7 +7,8 @@ $switchAnimationDuration: 0.1s;
|
|
|
7
7
|
$iconRevealEasing: cubic-bezier(0.33, 1, 0.68, 1);
|
|
8
8
|
|
|
9
9
|
.spinner {
|
|
10
|
-
//
|
|
10
|
+
// По макету спиннер шире ползунка (24 на surface 16) и выходит за его границы,
|
|
11
|
+
// поэтому flex-контейнер не должен его ужимать.
|
|
11
12
|
flex-shrink: 0;
|
|
12
13
|
}
|
|
13
14
|
|
|
@@ -190,12 +191,6 @@ $iconRevealEasing: cubic-bezier(0.33, 1, 0.68, 1);
|
|
|
190
191
|
@include base.composite-var(toggles.$toggles, 'anatomy', 'size', $size, 'switch', 'framing', 'flag');
|
|
191
192
|
}
|
|
192
193
|
|
|
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
|
-
|
|
199
194
|
.framing[data-checked="true"] .flag {
|
|
200
195
|
$flagTrackWidth: base.simple-var(
|
|
201
196
|
toggles.$toggles,
|
|
@@ -213,9 +208,13 @@ $iconRevealEasing: cubic-bezier(0.33, 1, 0.68, 1);
|
|
|
213
208
|
|
|
214
209
|
&[data-focusvisible="true"] {
|
|
215
210
|
.container {
|
|
216
|
-
//
|
|
211
|
+
// Real offset
|
|
217
212
|
$offsetWidth: base.$sn-primitive-strokeWeight-strokeSemiBold;
|
|
218
213
|
|
|
214
|
+
@if ($size == 'xs') {
|
|
215
|
+
outline-offset: $offsetWidth;
|
|
216
|
+
}
|
|
217
|
+
|
|
219
218
|
border-radius: base.simple-var(toggles.$toggles, 'anatomy', 'size', $size, 'switch', 'framing', 'border-radius');
|
|
220
219
|
outline: $offsetWidth solid base.$sn-theme-color-available-complementary;
|
|
221
220
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useUncontrolledProp } from '@cloud-ru/ds-utils';
|
|
2
|
-
import { PropsWithChildren, useCallback } from 'react';
|
|
2
|
+
import { PropsWithChildren, useCallback, useMemo } from 'react';
|
|
3
3
|
|
|
4
4
|
import { SELECTION_MODE } from '../../constants';
|
|
5
5
|
import { ToggleGroupContext } from '../../context';
|
|
@@ -65,7 +65,9 @@ export function ToggleGroup({
|
|
|
65
65
|
[selectionMode, setValue],
|
|
66
66
|
);
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
);
|
|
68
|
+
// Значение провайдера стабильно, пока не меняется состояние: иначе каждый рендер группы
|
|
69
|
+
// перерисовывает всех потребителей контекста (например, все блоки аккордеона).
|
|
70
|
+
const contextValue = useMemo(() => ({ value, onChange, selectionMode }), [value, onChange, selectionMode]);
|
|
71
|
+
|
|
72
|
+
return <ToggleGroupContext.Provider value={contextValue}>{children}</ToggleGroupContext.Provider>;
|
|
71
73
|
}
|