@snack-uikit/toggles 0.13.23 → 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.
Files changed (3) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/README.md +188 -42
  3. 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
- **Note:** Version bump only for package @snack-uikit/toggles
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
- ## хук useToggleGroup
10
- Хук для элементов внутри группы переключателей.
8
+ ## Description
11
9
 
12
- ### Аргументы
10
+ - Пакет `@snack-uikit/toggles` предоставляет набор компонентов для реализации различных типов переключателей в интерфейсе.
11
+ - Компоненты поддерживают контролируемый и неконтролируемый режимы работы, состояния disabled, различные размеры и интеграцию с формами через стандартные HTML-атрибуты.
12
+ - Все компоненты переключателей построены на единой архитектуре и обеспечивают согласованное поведение и визуальный стиль.
13
13
 
14
- #### **`value: string`**
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
- function ToggleCard(props: ToggleCardProps) {
20
- const { isChecked, handleClick, multipleSelection } = useToggleGroup(props.id);
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
- return (
23
- <Card {...props} checked={isChecked} onClick={handleClick} multipleSelection={multipleSelection}/>
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
- #### ToggleGroup
31
- ```typescript jsx
52
+ ### Description
32
53
 
33
- const [value, setValue] = useState<string | undefined>(undefined);
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
- function ToggleCard(props: ToggleCardProps) {
36
- const { isChecked, handleClick, multipleSelection } = useToggleGroup(id);
59
+ ### Example
37
60
 
38
- return (
39
- <Card {...props} checked={isChecked} onClick={handleClick} multipleSelection={multipleSelection}/>
40
- );
41
- }
61
+ ```tsx
62
+ import { useState } from 'react';
63
+ import { Radio } from '@snack-uikit/toggles';
42
64
 
43
- // ITEMS -some array with ToggleCardProps
44
-
45
- // ...
65
+ function Example() {
66
+ const [value, setValue] = useState('option1');
46
67
 
47
68
  return (
48
- <ToggleGroup selectionMode='single' value={value} onChange={setValue}>
49
- {ITEMS.map(props => (
50
- <ToggleCard key={props.id} {...props} />
51
- ))}
52
- </ToggleGroup>
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
- return (
58
- <>
59
- {items.map(({ checked, setChecked, data }) =>
60
- <CustomRadioButton
61
- // повторяет нативное поведение радиогруппы: по клику можно выбрать, но нельзя снять выбор
62
- onClick={() => setChecked(true)}
63
- checked={checked}
64
- data={data}
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.23",
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.4",
40
- "@snack-uikit/utils": "4.0.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": "91625fbce83c16e08a282388ad11a0ccd8d8efad"
45
+ "gitHead": "84371bbf91915f650a852df849cd71d416c5b7b2"
46
46
  }