@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 +10 -0
- package/README.md +282 -70
- package/package.json +12 -12
- /package/dist/cjs/components/ChipChoiceRow/{__tests__ → __unit__}/helpers.spec.d.ts +0 -0
- /package/dist/cjs/components/ChipChoiceRow/{__tests__ → __unit__}/helpers.spec.js +0 -0
- /package/dist/esm/components/ChipChoiceRow/{__tests__ → __unit__}/helpers.spec.d.ts +0 -0
- /package/dist/esm/components/ChipChoiceRow/{__tests__ → __unit__}/helpers.spec.js +0 -0
- /package/src/components/ChipChoiceRow/{__tests__ → __unit__}/helpers.spec.ts +0 -0
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
|
-
##
|
|
9
|
+
## Description
|
|
10
10
|
|
|
11
|
-
- `
|
|
11
|
+
- Пакет `@snack-uikit/chips` предоставляет набор компонентов для создания интерактивных чипов: простые кнопки-чипы (`ChipAssist`), переключатели с состоянием (`ChipToggle`), чипы с выпадающими списками для выбора значений (`ChipChoice` с различными вариантами) и контейнер для группировки фильтров (`ChipChoiceRow`).
|
|
12
|
+
- Компоненты поддерживают различные размеры, состояния загрузки и отключения, работу с иконками и длинными текстами с автоматическим обрезанием.
|
|
13
|
+
- Чипы используются для фильтрации, выбора значений, переключения состояний и навигации в интерфейсе.
|
|
12
14
|
|
|
13
|
-
##
|
|
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
|
-
|
|
16
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
/>
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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.
|
|
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.
|
|
40
|
-
"@snack-uikit/calendar": "0.13.
|
|
41
|
-
"@snack-uikit/divider": "3.2.
|
|
42
|
-
"@snack-uikit/dropdown": "0.5.
|
|
43
|
-
"@snack-uikit/icons": "0.27.
|
|
44
|
-
"@snack-uikit/list": "0.32.
|
|
45
|
-
"@snack-uikit/loaders": "0.9.
|
|
46
|
-
"@snack-uikit/tooltip": "0.18.
|
|
47
|
-
"@snack-uikit/truncate-string": "0.7.
|
|
48
|
-
"@snack-uikit/utils": "4.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": "
|
|
60
|
+
"gitHead": "84371bbf91915f650a852df849cd71d416c5b7b2"
|
|
61
61
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|