@snack-uikit/fields 0.51.13 → 0.51.15
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 +18 -0
- package/README.md +347 -1
- package/dist/cjs/components/FieldSelect/FieldSelectMultiple.js +3 -1
- package/dist/cjs/components/FieldSelect/styles.module.css +6 -0
- package/dist/esm/components/FieldSelect/FieldSelectMultiple.js +1 -1
- package/dist/esm/components/FieldSelect/styles.module.css +6 -0
- package/package.json +17 -17
- package/src/components/FieldSelect/FieldSelectMultiple.tsx +2 -0
- package/src/components/FieldSelect/styles.module.scss +12 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
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.51.15 (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
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## <small>0.51.14 (2025-12-23)</small>
|
|
16
|
+
|
|
17
|
+
* fix(PDS-3335): FieldSelect disabled tag background-color ([7b207c0](https://github.com/cloud-ru-tech/snack-uikit/commit/7b207c0))
|
|
18
|
+
* docs(FF-7788): readme update ([e3142b8](https://github.com/cloud-ru-tech/snack-uikit/commit/e3142b8))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
6
24
|
## <small>0.51.13 (2025-12-06)</small>
|
|
7
25
|
|
|
8
26
|
* 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
|
@@ -12,7 +12,353 @@
|
|
|
12
12
|
|
|
13
13
|
[Changelog](./CHANGELOG.md)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
## Description
|
|
16
|
+
|
|
17
|
+
- Пакет `@snack-uikit/fields` предоставляет набор унифицированных полей для форм: текстовое и многострочное поле, селект, поля для даты и времени, числовые поля со степпером и слайдером, поле выбора цвета и обёртку-декоратор для произвольного контрола.
|
|
18
|
+
- Компоненты оформлены в едином визуальном стиле Snack UI Kit и поддерживают общие возможности: размеры (`size`), состояния `disabled`/`readonly`, подписи (`label`, `caption`, `hint`), отображение статуса валидации (`validationState`) и кнопку копирования значения (там, где это релевантно).
|
|
19
|
+
- Поля работают в контролируемом режиме, дружелюбны к e2e‑тестам (для `FieldSelect` дополнительно доступен Snack API для чтения/установки значения) и подходят для построения сложных форм с произвольной валидацией.
|
|
20
|
+
|
|
21
|
+
## FieldText
|
|
22
|
+
|
|
23
|
+
### Description
|
|
24
|
+
|
|
25
|
+
- `FieldText` — однострочное текстовое поле для ввода коротких значений (логин, заголовок, ID и т.п.) с поддержкой ограничений по длине и базовой валидацией.
|
|
26
|
+
- Поддерживает иконку‑префикс, произвольный префикс/постфикс и встроенную кнопку (`button`) с выпадающим списком действий и поиском по ним — удобно для быстрых операций над введённым значением.
|
|
27
|
+
- Может показывать кнопку очистки и кнопку копирования, работать в режимах `readonly`/`disabled`, а также управляться извне через контролируемые `value`/`onChange`.
|
|
28
|
+
- Figma: [`FieldText`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-2.0.0?type=design&node-id=41%3A38747&mode=design&t=8dDi5X6Lfgs6Cxji-1).
|
|
29
|
+
|
|
30
|
+
### Example
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { useState } from 'react';
|
|
34
|
+
import { FieldText } from '@snack-uikit/fields';
|
|
35
|
+
|
|
36
|
+
export function FieldTextExample() {
|
|
37
|
+
const [value, setValue] = useState('');
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<FieldText
|
|
41
|
+
id='field-text'
|
|
42
|
+
label='Label text'
|
|
43
|
+
placeholder='Placeholder'
|
|
44
|
+
value={value}
|
|
45
|
+
onChange={setValue}
|
|
46
|
+
showCopyButton
|
|
47
|
+
hint='Hint text'
|
|
48
|
+
validationState='default'
|
|
49
|
+
size='s'
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## FieldTextArea
|
|
56
|
+
|
|
57
|
+
### Description
|
|
58
|
+
|
|
59
|
+
- `FieldTextArea` — многострочное поле ввода для длинных текстов (комментарии, описания, адреса) с авто‑изменением высоты или ручным ресайзом.
|
|
60
|
+
- Поддерживает управление минимальным и максимальным количеством строк, ограничение по длине, кнопку очистки и копирования, а также слот `footer` для размещения вспомогательных действий (кнопок, тулбаров).
|
|
61
|
+
- Подходит для сценариев, где важно сохранить общий паттерн полей формы и при этом дать пользователю достаточно места для ввода.
|
|
62
|
+
- Figma: [`FieldTextArea`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=402%3A202402&mode=design).
|
|
63
|
+
|
|
64
|
+
### Example
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
import { useState } from 'react';
|
|
68
|
+
import { FieldTextArea } from '@snack-uikit/fields';
|
|
69
|
+
|
|
70
|
+
export function FieldTextAreaExample() {
|
|
71
|
+
const [value, setValue] = useState('');
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<FieldTextArea
|
|
75
|
+
id='field-textarea'
|
|
76
|
+
label='Comment'
|
|
77
|
+
placeholder='Введите комментарий'
|
|
78
|
+
value={value}
|
|
79
|
+
onChange={setValue}
|
|
80
|
+
minRows={3}
|
|
81
|
+
maxRows={8}
|
|
82
|
+
resizable={false}
|
|
83
|
+
showCopyButton
|
|
84
|
+
hint='Подсказка по вводу'
|
|
85
|
+
size='s'
|
|
86
|
+
/>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## FieldSelect
|
|
92
|
+
|
|
93
|
+
### Description
|
|
94
|
+
|
|
95
|
+
- `FieldSelect` — поле выбора значения из списка с поддержкой одиночного (`selection="single"`) и множественного (`selection="multiple"`) выбора.
|
|
96
|
+
- Позволяет отображать группы, иконки, теги и произвольный контент в опциях, а также использовать поиск (включая нечеткий), виртуализацию большого списка и готовые состояния «нет данных», «нет результатов», «ошибка».
|
|
97
|
+
- Компонент работает в контролируемом режиме, поддерживает кнопку очистки, кнопку копирования для `readonly`‑режима и единый набор полевых атрибутов (`label`, `hint`, `validationState`, размеры и т.д.).
|
|
98
|
+
- Figma: [`FieldSelect`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-2.0.0?type=design&node-id=41%3A38747&mode=design&t=8dDi5X6Lfgs6Cxji-1).
|
|
99
|
+
|
|
100
|
+
### Example
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
import { useState } from 'react';
|
|
104
|
+
import { FieldSelect } from '@snack-uikit/fields';
|
|
105
|
+
|
|
106
|
+
const OPTIONS = [
|
|
107
|
+
{ value: 'op1', option: 'Option 1' },
|
|
108
|
+
{ value: 'op2', option: 'Option 2' },
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
export function FieldSelectExample() {
|
|
112
|
+
const [value, setValue] = useState<string | undefined>();
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<FieldSelect
|
|
116
|
+
id='field-select'
|
|
117
|
+
label='Select option'
|
|
118
|
+
placeholder='Выберите значение'
|
|
119
|
+
selection='single'
|
|
120
|
+
options={OPTIONS}
|
|
121
|
+
value={value}
|
|
122
|
+
onChange={setValue}
|
|
123
|
+
searchable
|
|
124
|
+
showCopyButton
|
|
125
|
+
size='s'
|
|
126
|
+
/>
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## FieldSecure
|
|
132
|
+
|
|
133
|
+
### Description
|
|
134
|
+
|
|
135
|
+
- `FieldSecure` — поле для ввода чувствительных данных (пароли, токены, ключи), в котором значение может быть замаскировано и раскрыто по требованию.
|
|
136
|
+
- Поддерживает кнопку копирования, ограничение по длине, асинхронную подгрузку значения по требованию (`asyncValueGetter`) и стандартные для полей состояния (`validationState`, `disabled`, `readonly`).
|
|
137
|
+
- Подходит для сценариев, где важно не показывать секреты постоянно, но при этом дать пользователю возможность временно посмотреть или загрузить значение.
|
|
138
|
+
- Figma: [`FieldSecure`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-2.0.0?type=design&node-id=41%3A38747&mode=design&t=8dDi5X6Lfgs6Cxji-1).
|
|
139
|
+
|
|
140
|
+
### Example
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
import { useState } from 'react';
|
|
144
|
+
import { FieldSecure } from '@snack-uikit/fields';
|
|
145
|
+
|
|
146
|
+
export function FieldSecureExample() {
|
|
147
|
+
const [value, setValue] = useState('');
|
|
148
|
+
const [hidden, setHidden] = useState(true);
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
<FieldSecure
|
|
152
|
+
id='field-secure'
|
|
153
|
+
label='Password'
|
|
154
|
+
placeholder='Введите пароль'
|
|
155
|
+
value={value}
|
|
156
|
+
onChange={setValue}
|
|
157
|
+
hidden={hidden}
|
|
158
|
+
onHiddenChange={setHidden}
|
|
159
|
+
showCopyButton
|
|
160
|
+
size='s'
|
|
161
|
+
/>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## FieldDate
|
|
167
|
+
|
|
168
|
+
### Description
|
|
169
|
+
|
|
170
|
+
- `FieldDate` — поле ввода даты или даты‑времени с выпадающим календарём и поддержкой различных режимов (`mode="date"` или `mode="date-time"`).
|
|
171
|
+
- Позволяет кастомизировать доступность и оформление дней через `buildCellProps`, подсвечивать невалидные даты и управлять подсказками/ошибками в зависимости от выбранного значения.
|
|
172
|
+
- Удобно для выбора дат в формах фильтрации, создания/редактирования сущностей и любых сценариев, где требуется компактный date‑picker, встроенный в поле.
|
|
173
|
+
- Figma: [`FieldDate`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=402%3A202402&mode=design).
|
|
174
|
+
|
|
175
|
+
### Example
|
|
176
|
+
|
|
177
|
+
```tsx
|
|
178
|
+
import { useState } from 'react';
|
|
179
|
+
import { FieldDate } from '@snack-uikit/fields';
|
|
180
|
+
|
|
181
|
+
export function FieldDateExample() {
|
|
182
|
+
const [value, setValue] = useState<Date | undefined>();
|
|
183
|
+
|
|
184
|
+
return (
|
|
185
|
+
<FieldDate
|
|
186
|
+
id='field-date'
|
|
187
|
+
label='Дата'
|
|
188
|
+
mode='date'
|
|
189
|
+
value={value}
|
|
190
|
+
onChange={setValue}
|
|
191
|
+
showCopyButton
|
|
192
|
+
showClearButton
|
|
193
|
+
hint='Выберите подходящую дату'
|
|
194
|
+
size='s'
|
|
195
|
+
/>
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## FieldTime
|
|
201
|
+
|
|
202
|
+
### Description
|
|
203
|
+
|
|
204
|
+
- `FieldTime` — поле для ввода времени с выпадающим time‑picker’ом и возможностью управлять показом секунд.
|
|
205
|
+
- Поддерживает копирование значения, очистку, контроль состояний `disabled`/`readonly`, а также стандартные полевые подписи и размеры.
|
|
206
|
+
- Используется там, где нужно задать время отдельно от даты или в дополнение к полю `FieldDate`.
|
|
207
|
+
- Figma: [`FieldTime`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-1.1.0?node-id=402%3A202402&mode=design).
|
|
208
|
+
|
|
209
|
+
### Example
|
|
210
|
+
|
|
211
|
+
```tsx
|
|
212
|
+
import { useState } from 'react';
|
|
213
|
+
import { FieldTime } from '@snack-uikit/fields';
|
|
214
|
+
|
|
215
|
+
export function FieldTimeExample() {
|
|
216
|
+
const [value, setValue] = useState<FieldTime['props']['value']>();
|
|
217
|
+
|
|
218
|
+
return (
|
|
219
|
+
<FieldTime
|
|
220
|
+
id='field-time'
|
|
221
|
+
label='Время'
|
|
222
|
+
value={value}
|
|
223
|
+
onChange={setValue}
|
|
224
|
+
showSeconds
|
|
225
|
+
showCopyButton
|
|
226
|
+
showClearButton
|
|
227
|
+
size='s'
|
|
228
|
+
/>
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## FieldSlider
|
|
234
|
+
|
|
235
|
+
### Description
|
|
236
|
+
|
|
237
|
+
- `FieldSlider` — числовое поле с линейкой и ползунком, позволяющее выбирать значение или диапазон значений внутри заданных границ.
|
|
238
|
+
- Поддерживает линейные и нелинейные метки (`marks`), работу в режимах одиночного и диапазонного значения (`range`), форматирование отображаемого значения и настройку шагов.
|
|
239
|
+
- Подходит для выбора диапазонов и настроек (например, объём ресурса или проценты), при этом остаётся единым полем формы со всеми стандартными атрибутами (`label`, `hint`, `validationState`).
|
|
240
|
+
- Figma: [`FieldSlider`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-2.0.0?type=design&node-id=41%3A38747&mode=design&t=8dDi5X6Lfgs6Cxji-1).
|
|
241
|
+
|
|
242
|
+
### Example
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
import { useState } from 'react';
|
|
246
|
+
import { FieldSlider } from '@snack-uikit/fields';
|
|
247
|
+
|
|
248
|
+
export function FieldSliderExample() {
|
|
249
|
+
const [value, setValue] = useState(10);
|
|
250
|
+
|
|
251
|
+
return (
|
|
252
|
+
<FieldSlider
|
|
253
|
+
id='field-slider'
|
|
254
|
+
label='Диапазон'
|
|
255
|
+
value={value}
|
|
256
|
+
onChange={setValue}
|
|
257
|
+
min={10}
|
|
258
|
+
max={50}
|
|
259
|
+
step={1}
|
|
260
|
+
showScaleBar
|
|
261
|
+
size='s'
|
|
262
|
+
/>
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## FieldStepper
|
|
268
|
+
|
|
269
|
+
### Description
|
|
270
|
+
|
|
271
|
+
- `FieldStepper` — числовое поле со стрелками увеличения/уменьшения значения, удобно для небольших целых чисел (количество, шаги, приоритеты).
|
|
272
|
+
- Компонент поддерживает задание минимального/максимального значения, шага, отображение подсказок над кнопками и режим, разрешающий выходить за пределы мин/макс при вводе с клавиатуры (`allowMoreThanLimits`).
|
|
273
|
+
- Позволяет использовать префикс/постфикс и стандартные текстовые подписи, сохраняя привычный для поля UX.
|
|
274
|
+
- Figma: [`FieldStepper`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-2.0.0?type=design&node-id=41%3A38747&mode=design&t=8dDi5X6Lfgs6Cxji-1).
|
|
275
|
+
|
|
276
|
+
### Example
|
|
277
|
+
|
|
278
|
+
```tsx
|
|
279
|
+
import { useState } from 'react';
|
|
280
|
+
import { FieldStepper } from '@snack-uikit/fields';
|
|
281
|
+
|
|
282
|
+
export function FieldStepperExample() {
|
|
283
|
+
const [value, setValue] = useState(1);
|
|
284
|
+
|
|
285
|
+
return (
|
|
286
|
+
<FieldStepper
|
|
287
|
+
id='field-stepper'
|
|
288
|
+
label='Количество'
|
|
289
|
+
value={value}
|
|
290
|
+
onChange={setValue}
|
|
291
|
+
min={0}
|
|
292
|
+
max={10}
|
|
293
|
+
step={1}
|
|
294
|
+
size='s'
|
|
295
|
+
/>
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## FieldColor
|
|
301
|
+
|
|
302
|
+
### Description
|
|
303
|
+
|
|
304
|
+
- `FieldColor` — поле выбора цвета с интегрированным color‑picker’ом, в котором значение отображается и редактируется в текстовом виде.
|
|
305
|
+
- Поддерживает выбор цвета с альфаканалом (`withAlpha`), авто‑применение изменений или применение по кнопке, а также кнопку копирования, очистку и стандартные полевые подписи.
|
|
306
|
+
- Используется для настройки цветовых параметров (брендинг, темы, маркеры) в тех же формах, где применяются остальные поля пакета.
|
|
307
|
+
- Figma: [`FieldColor`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-2.0.0?type=design&node-id=41%3A38747&mode=design&t=8dDi5X6Lfgs6Cxji-1).
|
|
308
|
+
|
|
309
|
+
### Example
|
|
310
|
+
|
|
311
|
+
```tsx
|
|
312
|
+
import { useState } from 'react';
|
|
313
|
+
import { FieldColor } from '@snack-uikit/fields';
|
|
314
|
+
|
|
315
|
+
export function FieldColorExample() {
|
|
316
|
+
const [value, setValue] = useState('#794ed3');
|
|
317
|
+
|
|
318
|
+
return (
|
|
319
|
+
<FieldColor
|
|
320
|
+
id='field-color'
|
|
321
|
+
label='Цвет'
|
|
322
|
+
placeholder='#f5f5f5'
|
|
323
|
+
value={value}
|
|
324
|
+
onChange={setValue}
|
|
325
|
+
withAlpha
|
|
326
|
+
showCopyButton
|
|
327
|
+
showClearButton
|
|
328
|
+
size='s'
|
|
329
|
+
/>
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## FieldDecorator
|
|
335
|
+
|
|
336
|
+
### Description
|
|
337
|
+
|
|
338
|
+
- `FieldDecorator` — обёртка‑декоратор для произвольного контрола, которая добавляет к нему общий для всех полей визуальный каркас: label, caption, hint, индикацию ошибки и состояния `disabled`/`readonly`.
|
|
339
|
+
- Позволяет показывать счётчик длины (`length`), размещать всплывающую подсказку у лейбла и управлять размером компонента, не навязывая конкретный тип поля ввода.
|
|
340
|
+
- Удобен, когда в форме используется нестандартный или составной контрол, который всё равно должен выглядеть и вести себя как поле ввода из дизайн‑системы.
|
|
341
|
+
- Figma: [`FieldDecorator`](https://www.figma.com/file/jtGxAPvFJOMir7V0eQFukN/Snack-UI-Kit-2.0.0?type=design&node-id=41%3A38747&mode=design&t=8dDi5X6Lfgs6Cxji-1).
|
|
342
|
+
|
|
343
|
+
### Example
|
|
344
|
+
|
|
345
|
+
```tsx
|
|
346
|
+
import { FieldDecorator } from '@snack-uikit/fields';
|
|
347
|
+
|
|
348
|
+
export function FieldDecoratorExample() {
|
|
349
|
+
return (
|
|
350
|
+
<FieldDecorator
|
|
351
|
+
label='Custom control'
|
|
352
|
+
caption='Дополнительная подпись'
|
|
353
|
+
hint='Подсказка по полю'
|
|
354
|
+
size='s'
|
|
355
|
+
>
|
|
356
|
+
{/* Любой пользовательский контент, который должен выглядеть как поле формы */}
|
|
357
|
+
<div>Custom content</div>
|
|
358
|
+
</FieldDecorator>
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
```
|
|
16
362
|
|
|
17
363
|
## Snack API для работы с внутренним стейтом
|
|
18
364
|
|
|
@@ -278,7 +278,9 @@ exports.FieldSelectMultiple = (0, react_1.forwardRef)((props, ref) => {
|
|
|
278
278
|
tabIndex: -1,
|
|
279
279
|
label: selectedOptionFormatter(option),
|
|
280
280
|
appearance: (_a = option.appearance) !== null && _a !== void 0 ? _a : 'neutral',
|
|
281
|
-
onDelete: !option.disabled && !disabled && !readonly ? handleItemDelete(option) : undefined
|
|
281
|
+
onDelete: !option.disabled && !disabled && !readonly ? handleItemDelete(option) : undefined,
|
|
282
|
+
className: styles_module_scss_1.default.tag,
|
|
283
|
+
"data-disabled": disabled || undefined
|
|
282
284
|
}, option.id);
|
|
283
285
|
}), (0, jsx_runtime_1.jsx)("div", {
|
|
284
286
|
className: styles_module_scss_1.default.inputWrapper,
|
|
@@ -53,6 +53,12 @@
|
|
|
53
53
|
.tagContainer[data-size=l] .contentWrapper{
|
|
54
54
|
gap:var(--space-fields-single-line-container-l-gap, 8px);
|
|
55
55
|
}
|
|
56
|
+
.tagContainer[data-disabled] .tag[data-disabled]{
|
|
57
|
+
background-color:var(--sys-neutral-decor-default, #dde0ea);
|
|
58
|
+
}
|
|
59
|
+
.tagContainer[data-disabled] .tag[data-disabled] *{
|
|
60
|
+
background-color:inherit;
|
|
61
|
+
}
|
|
56
62
|
|
|
57
63
|
.container{
|
|
58
64
|
position:relative;
|
|
@@ -154,7 +154,7 @@ export const FieldSelectMultiple = forwardRef((props, ref) => {
|
|
|
154
154
|
return (_jsx(FieldContainerPrivate, { className: cn(styles.container, styles.tagContainer), validationState: fieldValidationState, disabled: disabled, readonly: readonly, focused: open, variant: 'single-line-container', inputRef: localRef, size: size, prefix: (prefixIcon || prefixSettings.show) && (_jsxs(_Fragment, { children: [prefixIcon, prefixSettings.show && prefixSettings.render({ key: prefixSettings.id })] })), children: _jsxs(_Fragment, { children: [_jsxs("div", { className: styles.contentWrapper, ref: contentRef, children: [selectedItems &&
|
|
155
155
|
selectedItems.map(option => {
|
|
156
156
|
var _a;
|
|
157
|
-
return (_jsx(Tag, { size: size === 'l' ? 's' : 'xs', tabIndex: -1, label: selectedOptionFormatter(option), appearance: (_a = option.appearance) !== null && _a !== void 0 ? _a : 'neutral', onDelete: !option.disabled && !disabled && !readonly ? handleItemDelete(option) : undefined }, option.id));
|
|
157
|
+
return (_jsx(Tag, { size: size === 'l' ? 's' : 'xs', tabIndex: -1, label: selectedOptionFormatter(option), appearance: (_a = option.appearance) !== null && _a !== void 0 ? _a : 'neutral', onDelete: !option.disabled && !disabled && !readonly ? handleItemDelete(option) : undefined, className: styles.tag, "data-disabled": disabled || undefined }, option.id));
|
|
158
158
|
}), _jsx("div", { className: styles.inputWrapper, style: {
|
|
159
159
|
minWidth: value
|
|
160
160
|
? Math.min((_b = (_a = contentRef.current) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : BASE_MIN_WIDTH, (_d = (_c = inputPlugRef.current) === null || _c === void 0 ? void 0 : _c.clientWidth) !== null && _d !== void 0 ? _d : BASE_MIN_WIDTH)
|
|
@@ -53,6 +53,12 @@
|
|
|
53
53
|
.tagContainer[data-size=l] .contentWrapper{
|
|
54
54
|
gap:var(--space-fields-single-line-container-l-gap, 8px);
|
|
55
55
|
}
|
|
56
|
+
.tagContainer[data-disabled] .tag[data-disabled]{
|
|
57
|
+
background-color:var(--sys-neutral-decor-default, #dde0ea);
|
|
58
|
+
}
|
|
59
|
+
.tagContainer[data-disabled] .tag[data-disabled] *{
|
|
60
|
+
background-color:inherit;
|
|
61
|
+
}
|
|
56
62
|
|
|
57
63
|
.container{
|
|
58
64
|
position:relative;
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"title": "Fields",
|
|
7
|
-
"version": "0.51.
|
|
7
|
+
"version": "0.51.15",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -36,21 +36,21 @@
|
|
|
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/color-picker": "0.3.
|
|
42
|
-
"@snack-uikit/divider": "3.2.
|
|
43
|
-
"@snack-uikit/dropdown": "0.5.
|
|
44
|
-
"@snack-uikit/icons": "0.27.
|
|
45
|
-
"@snack-uikit/input-private": "4.8.
|
|
46
|
-
"@snack-uikit/list": "0.32.
|
|
47
|
-
"@snack-uikit/scroll": "0.10.
|
|
48
|
-
"@snack-uikit/skeleton": "0.6.
|
|
49
|
-
"@snack-uikit/slider": "0.3.
|
|
50
|
-
"@snack-uikit/tag": "0.15.
|
|
51
|
-
"@snack-uikit/tooltip": "0.18.
|
|
52
|
-
"@snack-uikit/truncate-string": "0.7.
|
|
53
|
-
"@snack-uikit/utils": "4.0.
|
|
39
|
+
"@snack-uikit/button": "0.19.17",
|
|
40
|
+
"@snack-uikit/calendar": "0.13.13",
|
|
41
|
+
"@snack-uikit/color-picker": "0.3.51",
|
|
42
|
+
"@snack-uikit/divider": "3.2.11",
|
|
43
|
+
"@snack-uikit/dropdown": "0.5.4",
|
|
44
|
+
"@snack-uikit/icons": "0.27.5",
|
|
45
|
+
"@snack-uikit/input-private": "4.8.6",
|
|
46
|
+
"@snack-uikit/list": "0.32.12",
|
|
47
|
+
"@snack-uikit/scroll": "0.10.6",
|
|
48
|
+
"@snack-uikit/skeleton": "0.6.10",
|
|
49
|
+
"@snack-uikit/slider": "0.3.31",
|
|
50
|
+
"@snack-uikit/tag": "0.15.13",
|
|
51
|
+
"@snack-uikit/tooltip": "0.18.8",
|
|
52
|
+
"@snack-uikit/truncate-string": "0.7.7",
|
|
53
|
+
"@snack-uikit/utils": "4.0.1",
|
|
54
54
|
"classnames": "2.5.1",
|
|
55
55
|
"copy-to-clipboard": "3.3.3",
|
|
56
56
|
"decimal.js": "10.6.0",
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"peerDependencies": {
|
|
67
67
|
"@snack-uikit/locale": "*"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "84371bbf91915f650a852df849cd71d416c5b7b2"
|
|
70
70
|
}
|
|
@@ -252,6 +252,8 @@ export const FieldSelectMultiple = forwardRef<HTMLInputElement, FieldSelectMulti
|
|
|
252
252
|
key={option.id}
|
|
253
253
|
appearance={option.appearance ?? 'neutral'}
|
|
254
254
|
onDelete={!option.disabled && !disabled && !readonly ? handleItemDelete(option) : undefined}
|
|
255
|
+
className={styles.tag}
|
|
256
|
+
data-disabled={disabled || undefined}
|
|
255
257
|
/>
|
|
256
258
|
))}
|
|
257
259
|
|
|
@@ -40,6 +40,18 @@ $base-min-width: 4px;
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
&[data-disabled] {
|
|
45
|
+
.tag {
|
|
46
|
+
&[data-disabled] {
|
|
47
|
+
background-color: styles-tokens-fields.simple-var(styles-tokens-fields.$sys-neutral-decor-default);
|
|
48
|
+
|
|
49
|
+
* {
|
|
50
|
+
background-color: inherit;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
43
55
|
}
|
|
44
56
|
|
|
45
57
|
.container {
|