@snack-uikit/toggles 0.13.24-preview-d1ce0cc3.0 → 0.13.24
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 +13 -1
- package/README.md +188 -42
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## <small>0.13.24 (2026-01-19)</small>
|
|
7
|
+
|
|
8
|
+
* chore(FF-6693): migrate tests from TestCafe to Playwright ([f32aff8](https://github.com/cloud-ru-tech/snack-uikit/commit/f32aff8))
|
|
9
|
+
* chore(FF-6693): tune test configs ([d194f4d](https://github.com/cloud-ru-tech/snack-uikit/commit/d194f4d))
|
|
10
|
+
* docs(FF-7788): readme update ([e3142b8](https://github.com/cloud-ru-tech/snack-uikit/commit/e3142b8))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
6
16
|
## <small>0.13.23 (2025-11-28)</small>
|
|
7
17
|
|
|
8
18
|
### Only dependencies have been changed
|
|
@@ -151,7 +161,9 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
151
161
|
|
|
152
162
|
## 0.13.4 (2025-01-20)
|
|
153
163
|
|
|
154
|
-
|
|
164
|
+
### Only dependencies have been changed
|
|
165
|
+
* [@snack-uikit/icons@0.27.5](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/icons/CHANGELOG.md)
|
|
166
|
+
* [@snack-uikit/utils@4.0.1](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/utils/CHANGELOG.md)
|
|
155
167
|
|
|
156
168
|
## 0.13.3 (2024-12-26)
|
|
157
169
|
|
package/README.md
CHANGED
|
@@ -1,71 +1,217 @@
|
|
|
1
1
|
# Checkbox, Radio, Switch и Favorite
|
|
2
|
-
Компоненты, реализующие переключатели.
|
|
3
2
|
|
|
4
3
|
## Installation
|
|
5
4
|
`npm i @snack-uikit/toggles`
|
|
6
5
|
|
|
7
6
|
[Changelog](../../../CHANGELOG.md)
|
|
8
7
|
|
|
9
|
-
##
|
|
10
|
-
Хук для элементов внутри группы переключателей.
|
|
8
|
+
## Description
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
- Пакет `@snack-uikit/toggles` предоставляет набор компонентов для реализации различных типов переключателей в интерфейсе.
|
|
11
|
+
- Компоненты поддерживают контролируемый и неконтролируемый режимы работы, состояния disabled, различные размеры и интеграцию с формами через стандартные HTML-атрибуты.
|
|
12
|
+
- Все компоненты переключателей построены на единой архитектуре и обеспечивают согласованное поведение и визуальный стиль.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
## Checkbox
|
|
15
|
+
|
|
16
|
+
### Description
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
- `Checkbox` — компонент чекбокса для множественного выбора опций в формах, списках и фильтрах.
|
|
19
|
+
- Поддерживает стандартные состояния: выбран (`checked`), не выбран и частично выбран (`indeterminate`), что удобно для иерархических списков, где родительский элемент может быть частично выбран при выборе только части дочерних элементов.
|
|
20
|
+
- Работает в контролируемом и неконтролируемом режимах, поддерживает размеры `s` и `m`, состояние `disabled` и все стандартные HTML-атрибуты для интеграции с формами.
|
|
21
|
+
- Figma: [`Checkbox`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=2%3A4&mode=design).
|
|
22
|
+
|
|
23
|
+
### Example
|
|
17
24
|
|
|
18
25
|
```tsx
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
import { useState } from 'react';
|
|
27
|
+
import { Checkbox } from '@snack-uikit/toggles';
|
|
28
|
+
|
|
29
|
+
function Example() {
|
|
30
|
+
const [checked, setChecked] = useState(false);
|
|
31
|
+
const [indeterminate, setIndeterminate] = useState(false);
|
|
21
32
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
return (
|
|
34
|
+
<>
|
|
35
|
+
<Checkbox
|
|
36
|
+
checked={checked}
|
|
37
|
+
onChange={setChecked}
|
|
38
|
+
size="m"
|
|
39
|
+
/>
|
|
40
|
+
<Checkbox
|
|
41
|
+
indeterminate={indeterminate}
|
|
42
|
+
onChange={() => setIndeterminate(false)}
|
|
43
|
+
size="s"
|
|
44
|
+
/>
|
|
45
|
+
</>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
26
48
|
```
|
|
27
49
|
|
|
28
|
-
|
|
50
|
+
## Radio
|
|
29
51
|
|
|
30
|
-
|
|
31
|
-
```typescript jsx
|
|
52
|
+
### Description
|
|
32
53
|
|
|
33
|
-
|
|
54
|
+
- `Radio` — компонент радиокнопки для выбора одной опции из группы взаимоисключающих вариантов.
|
|
55
|
+
- Используется в радиогруппах, где выбор одного элемента автоматически снимает выбор с других элементов группы.
|
|
56
|
+
- Поддерживает размеры `s` и `m`, состояние `disabled`, работает в контролируемом и неконтролируемом режимах и интегрируется с нативными HTML-радиогруппами через атрибут `name`.
|
|
57
|
+
- Figma: [`Radio`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=2%3A4&mode=design).
|
|
34
58
|
|
|
35
|
-
|
|
36
|
-
const { isChecked, handleClick, multipleSelection } = useToggleGroup(id);
|
|
59
|
+
### Example
|
|
37
60
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
61
|
+
```tsx
|
|
62
|
+
import { useState } from 'react';
|
|
63
|
+
import { Radio } from '@snack-uikit/toggles';
|
|
42
64
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// ...
|
|
65
|
+
function Example() {
|
|
66
|
+
const [value, setValue] = useState('option1');
|
|
46
67
|
|
|
47
68
|
return (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
69
|
+
<>
|
|
70
|
+
<Radio
|
|
71
|
+
name="options"
|
|
72
|
+
value="option1"
|
|
73
|
+
checked={value === 'option1'}
|
|
74
|
+
onChange={() => setValue('option1')}
|
|
75
|
+
size="m"
|
|
76
|
+
/>
|
|
77
|
+
<Radio
|
|
78
|
+
name="options"
|
|
79
|
+
value="option2"
|
|
80
|
+
checked={value === 'option2'}
|
|
81
|
+
onChange={() => setValue('option2')}
|
|
82
|
+
size="m"
|
|
83
|
+
/>
|
|
84
|
+
</>
|
|
53
85
|
);
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Switch
|
|
54
90
|
|
|
55
|
-
|
|
91
|
+
### Description
|
|
56
92
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
93
|
+
- `Switch` — компонент переключателя для быстрого включения/выключения опций, настроек и функций интерфейса.
|
|
94
|
+
- Визуально отличается от чекбокса и радиокнопки: представляет собой ползунок, который перемещается между двумя позициями (включено/выключено).
|
|
95
|
+
- Поддерживает опциональное отображение иконок (`showIcon`) в состояниях включено/выключено и состояние загрузки (`loading`) с индикатором спиннера.
|
|
96
|
+
- Работает в контролируемом и неконтролируемом режимах, поддерживает размеры `s` и `m`, состояние `disabled`.
|
|
97
|
+
- Figma: [`Switch`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=2%3A4&mode=design).
|
|
98
|
+
|
|
99
|
+
### Example
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
import { useState } from 'react';
|
|
103
|
+
import { Switch } from '@snack-uikit/toggles';
|
|
104
|
+
|
|
105
|
+
function Example() {
|
|
106
|
+
const [enabled, setEnabled] = useState(false);
|
|
107
|
+
const [loading, setLoading] = useState(false);
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
<>
|
|
111
|
+
<Switch
|
|
112
|
+
checked={enabled}
|
|
113
|
+
onChange={setEnabled}
|
|
114
|
+
size="m"
|
|
65
115
|
/>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
116
|
+
<Switch
|
|
117
|
+
checked={enabled}
|
|
118
|
+
onChange={setEnabled}
|
|
119
|
+
showIcon
|
|
120
|
+
loading={loading}
|
|
121
|
+
size="m"
|
|
122
|
+
/>
|
|
123
|
+
</>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Favorite
|
|
129
|
+
|
|
130
|
+
### Description
|
|
131
|
+
|
|
132
|
+
- `Favorite` — компонент для добавления элементов в избранное или пометки их как любимых через иконку (звезда или сердце).
|
|
133
|
+
- Визуально представляет собой иконку, которая меняет свой вид при переключении состояния: незаполненная иконка для невыбранного состояния и заполненная — для выбранного.
|
|
134
|
+
- Поддерживает два типа иконок: `star` (звезда) и `heart` (сердце), которые можно выбрать через проп `icon`.
|
|
135
|
+
- Работает в контролируемом и неконтролируемом режимах, поддерживает размеры `s` и `m`, состояние `disabled` и обработчик нажатия клавиш клавиатуры (`onKeyUp`).
|
|
136
|
+
- Figma: [`Favorite`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=2%3A4&mode=design).
|
|
137
|
+
|
|
138
|
+
### Example
|
|
139
|
+
|
|
140
|
+
```tsx
|
|
141
|
+
import { useState } from 'react';
|
|
142
|
+
import { Favorite } from '@snack-uikit/toggles';
|
|
143
|
+
|
|
144
|
+
function Example() {
|
|
145
|
+
const [favorited, setFavorited] = useState(false);
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<>
|
|
149
|
+
<Favorite
|
|
150
|
+
checked={favorited}
|
|
151
|
+
onChange={setFavorited}
|
|
152
|
+
icon="heart"
|
|
153
|
+
size="m"
|
|
154
|
+
/>
|
|
155
|
+
<Favorite
|
|
156
|
+
checked={favorited}
|
|
157
|
+
onChange={setFavorited}
|
|
158
|
+
icon="star"
|
|
159
|
+
size="m"
|
|
160
|
+
/>
|
|
161
|
+
</>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## ToggleGroup
|
|
167
|
+
|
|
168
|
+
### Description
|
|
169
|
+
|
|
170
|
+
- `ToggleGroup` — компонент-контейнер для управления группами переключателей с единым состоянием выбора.
|
|
171
|
+
- Поддерживает два режима выбора: одиночный (`selectionMode="single"`) для выбора одного элемента из группы и множественный (`selectionMode="multiple"`) для выбора нескольких элементов одновременно.
|
|
172
|
+
- Работает через контекст React, предоставляя дочерним элементам доступ к состоянию группы через хук `useToggleGroup`.
|
|
173
|
+
- Работает в контролируемом и неконтролируемом режимах, позволяя управлять выбранными значениями извне или использовать внутреннее состояние.
|
|
174
|
+
- Используется вместе с хуком `useToggleGroup`, который предоставляет дочерним компонентам информацию о том, выбран ли элемент (`isChecked`), обработчик клика (`handleClick`) и режим множественного выбора (`multipleSelection`).
|
|
175
|
+
|
|
176
|
+
### Example
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
import { ToggleGroup, useToggleGroup } from '@snack-uikit/toggles';
|
|
180
|
+
import { useState } from 'react';
|
|
181
|
+
|
|
182
|
+
function ToggleCard({ id, label }: { id: string; label: string }) {
|
|
183
|
+
const { isChecked, handleClick } = useToggleGroup({ value: id });
|
|
184
|
+
|
|
185
|
+
return (
|
|
186
|
+
<button
|
|
187
|
+
onClick={handleClick}
|
|
188
|
+
style={{
|
|
189
|
+
padding: '8px 16px',
|
|
190
|
+
border: isChecked ? '2px solid blue' : '1px solid gray',
|
|
191
|
+
backgroundColor: isChecked ? 'lightblue' : 'white',
|
|
192
|
+
}}
|
|
193
|
+
>
|
|
194
|
+
{label}
|
|
195
|
+
</button>
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function Example() {
|
|
200
|
+
const [value, setValue] = useState<string | undefined>(undefined);
|
|
201
|
+
const items = [
|
|
202
|
+
{ id: '1', label: 'Первый элемент' },
|
|
203
|
+
{ id: '2', label: 'Второй элемент' },
|
|
204
|
+
{ id: '3', label: 'Третий элемент' },
|
|
205
|
+
];
|
|
206
|
+
|
|
207
|
+
return (
|
|
208
|
+
<ToggleGroup selectionMode="single" value={value} onChange={setValue}>
|
|
209
|
+
{items.map(item => (
|
|
210
|
+
<ToggleCard key={item.id} id={item.id} label={item.label} />
|
|
211
|
+
))}
|
|
212
|
+
</ToggleGroup>
|
|
213
|
+
);
|
|
214
|
+
}
|
|
69
215
|
```
|
|
70
216
|
|
|
71
217
|
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"title": "Toggles",
|
|
7
|
-
"version": "0.13.24
|
|
7
|
+
"version": "0.13.24",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"license": "Apache-2.0",
|
|
37
37
|
"scripts": {},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@snack-uikit/icons": "0.27.5
|
|
40
|
-
"@snack-uikit/utils": "4.0.
|
|
39
|
+
"@snack-uikit/icons": "0.27.5",
|
|
40
|
+
"@snack-uikit/utils": "4.0.1",
|
|
41
41
|
"classnames": "2.5.1",
|
|
42
42
|
"merge-refs": "1.3.0",
|
|
43
43
|
"uncontrollable": "8.0.4"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "84371bbf91915f650a852df849cd71d416c5b7b2"
|
|
46
46
|
}
|