@snack-uikit/chips 0.28.12 → 0.28.13

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 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.28.13 (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.28.12 (2025-12-06)</small>
7
17
 
8
18
  * chore(FF-7187): update typescript to 5.9.3 & some eslint deps ([b84df17](https://github.com/cloud-ru-tech/snack-uikit/commit/b84df17))
package/README.md CHANGED
@@ -6,81 +6,293 @@
6
6
 
7
7
  [Changelog](./CHANGELOG.md)
8
8
 
9
- ## TODO
9
+ ## Description
10
10
 
11
- - `droplist` и выбор значений в `FilterChip`
11
+ - Пакет `@snack-uikit/chips` предоставляет набор компонентов для создания интерактивных чипов: простые кнопки-чипы (`ChipAssist`), переключатели с состоянием (`ChipToggle`), чипы с выпадающими списками для выбора значений (`ChipChoice` с различными вариантами) и контейнер для группировки фильтров (`ChipChoiceRow`).
12
+ - Компоненты поддерживают различные размеры, состояния загрузки и отключения, работу с иконками и длинными текстами с автоматическим обрезанием.
13
+ - Чипы используются для фильтрации, выбора значений, переключения состояний и навигации в интерфейсе.
12
14
 
13
- ## Example
15
+ ## ChipAssist
16
+
17
+ ### Description
18
+
19
+ - `ChipAssist` — простой чип-кнопка с лейблом, предназначенный для выполнения действий или навигации.
20
+ - Поддерживает опциональную иконку, состояния загрузки и отключения, а также различные размеры.
21
+ - При клике вызывает переданный обработчик `onClick`.
22
+ - Figma: [`ChipAssist`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A146809&mode=design).
23
+
24
+ ### Example
25
+
26
+ ```tsx
27
+ import { ChipAssist } from '@snack-uikit/chips';
28
+ import { PlaceholderSVG } from '@snack-uikit/icons';
29
+
30
+ function Example() {
31
+ return (
32
+ <ChipAssist
33
+ label='Label'
34
+ icon={<PlaceholderSVG />}
35
+ size='s'
36
+ disabled={false}
37
+ loading={false}
38
+ onClick={() => console.log('Clicked')}
39
+ />
40
+ );
41
+ }
42
+ ```
43
+
44
+ ## ChipToggle
14
45
 
15
- ```typescript jsx
16
- import { ChipAssist, ChipChoice, ChipToggle } from '@snack-uikit/chips';
46
+ ### Description
47
+
48
+ - `ChipToggle` — чип-переключатель с состоянием выбран/не выбран, работающий как чекбокс.
49
+ - Поддерживает контролируемое состояние через проп `checked` и обработчик `onChange`.
50
+ - Может отображать иконку, состояние загрузки и работать в отключённом режиме.
51
+ - Figma: [`ChipToggle`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A152239&mode=design).
52
+
53
+ ### Example
54
+
55
+ ```tsx
56
+ import { useState } from 'react';
57
+ import { ChipToggle } from '@snack-uikit/chips';
17
58
  import { PlaceholderSVG } from '@snack-uikit/icons';
18
59
 
19
- <ChipAssist
20
- label='Label'
21
- icon={<PlaceholderSVG />}
22
- size='s'
23
- disabled={false}
24
- loading={false}
25
- onClick={doSomething}
26
- className='className'
27
- tabIndex={1}
28
- />
29
-
30
- <ChipToggle
31
- label='Label'
32
- icon={<PlaceholderSVG />}
33
- size='s'
34
- selected={false}
35
- disabled={false}
36
- loading={false}
37
- onChange={handleChange}
38
- className='className'
39
- tabIndex={1}
40
- />
41
-
42
- <ChipChoice.Single
43
- label='Label'
44
- value='value'
45
- icon={<PlaceholderSVG />}
46
- size='s'
47
- disabled={false}
48
- loading={false}
49
- options={[]}
50
- onClick={doSomething}
51
- />
52
-
53
- <ChipChoice.Multi
54
- label='Label'
55
- value={['value1', 'value2']}
56
- onChangeValue={onChange}
57
- size='m'
58
- options={[]}
59
- valueFormatter={formatter}
60
- />
61
-
62
- <ChipChoice.Date
63
- label='Label'
64
- value={new Date()}
65
- onChangeValue={onChange}
66
- size='m'
67
- valueFormatter={formatter}
68
- />
69
-
70
- <ChipChoice.DateRange
71
- label='Label'
72
- value={[new Date(), new Date()]}
73
- onChangeValue={onChange}
74
- size='m'
75
- valueFormatter={formatter}
76
- />
77
-
78
- <ChipChoice.Custom
79
- label='Label'
80
- value='value'
81
- valueToRender='Selected'
82
- size='m'
83
- />
60
+ function Example() {
61
+ const [checked, setChecked] = useState(false);
62
+
63
+ return (
64
+ <ChipToggle
65
+ label='Label'
66
+ icon={<PlaceholderSVG />}
67
+ size='s'
68
+ checked={checked}
69
+ onChange={setChecked}
70
+ />
71
+ );
72
+ }
73
+ ```
74
+
75
+ ## ChipChoice
76
+
77
+ ### Description
78
+
79
+ - `ChipChoice` — семейство чипов с выпадающими списками для выбора значений различных типов: одиночный выбор из списка (`Single`), множественный выбор (`Multiple`), выбор даты (`Date`), выбор диапазона дат (`DateRange`), выбор времени (`Time`) и кастомный вариант с произвольным контентом (`Custom`).
80
+ - Все варианты поддерживают лейбл, иконку, состояние загрузки, кнопку очистки значения и настройку позиционирования выпадающего меню.
81
+ - Компоненты работают в контролируемом и неконтролируемом режимах, поддерживают виртуализацию для больших списков и кастомизацию отображения значений.
82
+
83
+ ## ChipChoice.Single
84
+
85
+ ### Description
86
+
87
+ - `ChipChoice.Single` — чип для одиночного выбора значения из списка опций.
88
+ - Отображает выбранное значение в чипе и открывает выпадающий список с опциями при клике.
89
+ - Поддерживает поиск по опциям, виртуализацию для больших списков, кастомное отображение элементов списка и автоматическое применение выбранного значения.
90
+ - Figma: [`ChipChoice.Single`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A148671&mode=design).
91
+
92
+ ### Example
93
+
94
+ ```tsx
95
+ import { ChipChoice } from '@snack-uikit/chips';
96
+
97
+ function Example() {
98
+ const options = [
99
+ { label: 'Option 1', value: 'option1' },
100
+ { label: 'Option 2', value: 'option2' },
101
+ ];
102
+
103
+ return (
104
+ <ChipChoice.Single
105
+ label='Label'
106
+ value='option1'
107
+ options={options}
108
+ onChange={(value) => console.log(value)}
109
+ />
110
+ );
111
+ }
112
+ ```
113
+
114
+ ## ChipChoice.Multiple
115
+
116
+ ### Description
117
+
118
+ - `ChipChoice.Multiple` — чип для множественного выбора значений из списка опций.
119
+ - Позволяет выбрать несколько элементов одновременно, отображая выбранные значения в чипе.
120
+ - Поддерживает поиск, виртуализацию, кастомное отображение элементов и автоматическое применение выбранных значений.
121
+ - Figma: [`ChipChoice.Multiple`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A147240&mode=design).
122
+
123
+ ### Example
124
+
125
+ ```tsx
126
+ import { ChipChoice } from '@snack-uikit/chips';
127
+
128
+ function Example() {
129
+ const options = [
130
+ { label: 'Option 1', value: 'option1' },
131
+ { label: 'Option 2', value: 'option2' },
132
+ ];
133
+
134
+ return (
135
+ <ChipChoice.Multiple
136
+ label='Label'
137
+ value={['option1', 'option2']}
138
+ options={options}
139
+ onChange={(value) => console.log(value)}
140
+ />
141
+ );
142
+ }
143
+ ```
144
+
145
+ ## ChipChoice.Date
146
+
147
+ ### Description
148
+
149
+ - `ChipChoice.Date` — чип для выбора даты с встроенным календарём.
150
+ - Поддерживает различные режимы выбора: дата (`date`), месяц (`month`), год (`year`) и дата со временем (`date-time`).
151
+ - Позволяет настроить отображение выбранной даты через `valueRender` и управлять доступностью ячеек календаря через `buildCalendarCellProps`.
152
+ - Figma: [`ChipChoice.Date`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A150102&mode=design).
153
+
154
+ ### Example
155
+
156
+ ```tsx
157
+ import { ChipChoice } from '@snack-uikit/chips';
158
+
159
+ function Example() {
160
+ return (
161
+ <ChipChoice.Date
162
+ label='Label'
163
+ value={new Date()}
164
+ onChange={(value) => console.log(value)}
165
+ mode='date'
166
+ />
167
+ );
168
+ }
169
+ ```
170
+
171
+ ## ChipChoice.DateRange
172
+
173
+ ### Description
174
+
175
+ - `ChipChoice.DateRange` — чип для выбора диапазона дат с календарём.
176
+ - Позволяет выбрать начальную и конечную дату диапазона, отображая выбранный период в чипе.
177
+ - Поддерживает кастомное форматирование диапазона через `valueRender` и управление доступностью ячеек календаря.
178
+ - Figma: [`ChipChoice.DateRange`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A151169&mode=design).
179
+
180
+ ### Example
181
+
182
+ ```tsx
183
+ import { ChipChoice } from '@snack-uikit/chips';
184
+
185
+ function Example() {
186
+ return (
187
+ <ChipChoice.DateRange
188
+ label='Label'
189
+ value={[new Date('2022-10-15'), new Date('2023-10-15')]}
190
+ onChange={(value) => console.log(value)}
191
+ />
192
+ );
193
+ }
194
+ ```
195
+
196
+ ## ChipChoice.Time
197
+
198
+ ### Description
199
+
200
+ - `ChipChoice.Time` — чип для выбора времени (часы, минуты, секунды).
201
+ - Отображает выбранное время в чипе и открывает интерфейс выбора времени при клике.
202
+ - Поддерживает отображение секунд через проп `showSeconds` и кастомное форматирование времени через `valueRender`.
203
+ - Figma: [`ChipChoice.Time`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A150102&mode=design).
204
+
205
+ ### Example
206
+
207
+ ```tsx
208
+ import { ChipChoice } from '@snack-uikit/chips';
209
+
210
+ function Example() {
211
+ return (
212
+ <ChipChoice.Time
213
+ label='Label'
214
+ value={{ hours: 20, minutes: 15, seconds: 30 }}
215
+ onChange={(value) => console.log(value)}
216
+ showSeconds
217
+ />
218
+ );
219
+ }
220
+ ```
221
+
222
+ ## ChipChoice.Custom
223
+
224
+ ### Description
225
+
226
+ - `ChipChoice.Custom` — чип с произвольным контентом в выпадающем меню.
227
+ - Позволяет полностью кастомизировать содержимое выпадающего списка через проп `content`, который может быть React-элементом или функцией, получающей методы управления дроплистом.
228
+ - Подходит для создания сложных интерфейсов выбора, не укладывающихся в стандартные варианты `ChipChoice`.
229
+ - Figma: [`ChipChoice.Custom`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A148671&mode=design).
230
+
231
+ ### Example
232
+
233
+ ```tsx
234
+ import { useState } from 'react';
235
+ import { ChipChoice } from '@snack-uikit/chips';
236
+
237
+ function Example() {
238
+ const [value, setValue] = useState<string>();
239
+
240
+ return (
241
+ <ChipChoice.Custom
242
+ label='Label'
243
+ value={value}
244
+ onChange={setValue}
245
+ valueRender={() => value}
246
+ content={({ closeDroplist }) => (
247
+ <button onClick={() => { setValue('custom'); closeDroplist(); }}>
248
+ Select custom value
249
+ </button>
250
+ )}
251
+ />
252
+ );
253
+ }
254
+ ```
255
+
256
+ ## ChipChoiceRow
257
+
258
+ ### Description
259
+
260
+ - `ChipChoiceRow` — контейнер для группировки нескольких чипов-фильтров в одну строку.
261
+ - Управляет состоянием всех фильтров, отображает кнопку очистки всех фильтров и кнопку добавления новых фильтров.
262
+ - Поддерживает управление видимостью фильтров через `visibleFilters` и `onVisibleFiltersChange`, позволяя скрывать и показывать отдельные чипы.
263
+ - Работает с любыми вариантами `ChipChoice` и другими чипами, переданными в массиве `filters`.
264
+ - Figma: [`ChipChoiceRow`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=41%3A152236&mode=design).
265
+
266
+ ### Example
267
+
268
+ ```tsx
269
+ import { useState } from 'react';
270
+ import { ChipChoiceRow, ChipChoice } from '@snack-uikit/chips';
271
+
272
+ function Example() {
273
+ const [filters, setFilters] = useState({});
274
+
275
+ const filterConfig = [
276
+ {
277
+ id: 'status',
278
+ label: 'Status',
279
+ component: ChipChoice.Single,
280
+ options: [
281
+ { label: 'Active', value: 'active' },
282
+ { label: 'Inactive', value: 'inactive' },
283
+ ],
284
+ },
285
+ ];
286
+
287
+ return (
288
+ <ChipChoiceRow
289
+ filters={filterConfig}
290
+ value={filters}
291
+ onChange={setFilters}
292
+ size='s'
293
+ />
294
+ );
295
+ }
84
296
  ```
85
297
 
86
298
  [//]: DOCUMENTATION_SECTION_START
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Chips",
7
- "version": "0.28.12",
7
+ "version": "0.28.13",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -36,16 +36,16 @@
36
36
  "license": "Apache-2.0",
37
37
  "scripts": {},
38
38
  "dependencies": {
39
- "@snack-uikit/button": "0.19.16",
40
- "@snack-uikit/calendar": "0.13.12",
41
- "@snack-uikit/divider": "3.2.10",
42
- "@snack-uikit/dropdown": "0.5.3",
43
- "@snack-uikit/icons": "0.27.4",
44
- "@snack-uikit/list": "0.32.11",
45
- "@snack-uikit/loaders": "0.9.9",
46
- "@snack-uikit/tooltip": "0.18.7",
47
- "@snack-uikit/truncate-string": "0.7.6",
48
- "@snack-uikit/utils": "4.0.0",
39
+ "@snack-uikit/button": "0.19.17",
40
+ "@snack-uikit/calendar": "0.13.13",
41
+ "@snack-uikit/divider": "3.2.11",
42
+ "@snack-uikit/dropdown": "0.5.4",
43
+ "@snack-uikit/icons": "0.27.5",
44
+ "@snack-uikit/list": "0.32.12",
45
+ "@snack-uikit/loaders": "0.9.10",
46
+ "@snack-uikit/tooltip": "0.18.8",
47
+ "@snack-uikit/truncate-string": "0.7.7",
48
+ "@snack-uikit/utils": "4.0.1",
49
49
  "classnames": "2.5.1",
50
50
  "fuzzy-search": "3.2.1",
51
51
  "merge-refs": "1.3.0",
@@ -57,5 +57,5 @@
57
57
  "peerDependencies": {
58
58
  "@snack-uikit/locale": "*"
59
59
  },
60
- "gitHead": "78bb9c9dd3a49941fa39bde71d838e9bf036e65d"
60
+ "gitHead": "84371bbf91915f650a852df849cd71d416c5b7b2"
61
61
  }