@salutejs/plasma-new-hope 0.242.0-canary.1709.12829247465.0 → 0.242.0-dev.0

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 (84) hide show
  1. package/cjs/components/Combobox/ComboboxNew/ui/Inner/Inner.js +1 -1
  2. package/cjs/components/Combobox/ComboboxNew/ui/Inner/Inner.js.map +1 -1
  3. package/cjs/components/DatePicker/RangeDate/RangeDate.js +66 -21
  4. package/cjs/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  5. package/cjs/components/Dropdown/ui/DropdownInner/DropdownInner.js +1 -2
  6. package/cjs/components/Dropdown/ui/DropdownInner/DropdownInner.js.map +1 -1
  7. package/cjs/components/Select/ui/Inner/Inner.js +1 -1
  8. package/cjs/components/Select/ui/Inner/Inner.js.map +1 -1
  9. package/emotion/cjs/components/Combobox/Combobox.template-doc.mdx +0 -5
  10. package/emotion/cjs/components/Combobox/ComboboxNew/ui/Inner/Inner.js +1 -1
  11. package/emotion/cjs/components/DatePicker/RangeDate/RangeDate.js +66 -21
  12. package/emotion/cjs/components/Dropdown/Dropdown.template-doc.mdx +0 -4
  13. package/emotion/cjs/components/Dropdown/ui/DropdownInner/DropdownInner.js +1 -2
  14. package/emotion/cjs/components/Select/ui/Inner/Inner.js +1 -1
  15. package/emotion/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -7
  16. package/emotion/cjs/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +3 -7
  17. package/emotion/es/components/Combobox/Combobox.template-doc.mdx +0 -5
  18. package/emotion/es/components/Combobox/ComboboxNew/ui/Inner/Inner.js +1 -1
  19. package/emotion/es/components/DatePicker/RangeDate/RangeDate.js +66 -21
  20. package/emotion/es/components/Dropdown/Dropdown.template-doc.mdx +0 -4
  21. package/emotion/es/components/Dropdown/ui/DropdownInner/DropdownInner.js +1 -2
  22. package/emotion/es/components/Select/ui/Inner/Inner.js +1 -1
  23. package/emotion/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -7
  24. package/emotion/es/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +3 -7
  25. package/es/components/Combobox/ComboboxNew/ui/Inner/Inner.js +1 -1
  26. package/es/components/Combobox/ComboboxNew/ui/Inner/Inner.js.map +1 -1
  27. package/es/components/DatePicker/RangeDate/RangeDate.js +66 -21
  28. package/es/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  29. package/es/components/Dropdown/ui/DropdownInner/DropdownInner.js +1 -2
  30. package/es/components/Dropdown/ui/DropdownInner/DropdownInner.js.map +1 -1
  31. package/es/components/Select/ui/Inner/Inner.js +1 -1
  32. package/es/components/Select/ui/Inner/Inner.js.map +1 -1
  33. package/package.json +2 -2
  34. package/styled-components/cjs/components/Combobox/Combobox.template-doc.mdx +0 -5
  35. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/Inner/Inner.js +1 -1
  36. package/styled-components/cjs/components/DatePicker/RangeDate/RangeDate.js +66 -21
  37. package/styled-components/cjs/components/Dropdown/Dropdown.template-doc.mdx +0 -4
  38. package/styled-components/cjs/components/Dropdown/ui/DropdownInner/DropdownInner.js +1 -2
  39. package/styled-components/cjs/components/Select/ui/Inner/Inner.js +1 -1
  40. package/styled-components/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -7
  41. package/styled-components/cjs/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +3 -7
  42. package/styled-components/es/components/Combobox/Combobox.template-doc.mdx +0 -5
  43. package/styled-components/es/components/Combobox/ComboboxNew/ui/Inner/Inner.js +1 -1
  44. package/styled-components/es/components/DatePicker/RangeDate/RangeDate.js +66 -21
  45. package/styled-components/es/components/Dropdown/Dropdown.template-doc.mdx +0 -4
  46. package/styled-components/es/components/Dropdown/ui/DropdownInner/DropdownInner.js +1 -2
  47. package/styled-components/es/components/Select/ui/Inner/Inner.js +1 -1
  48. package/styled-components/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -7
  49. package/styled-components/es/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +3 -7
  50. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +1 -1
  51. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
  52. package/types/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.types.d.ts +0 -6
  53. package/types/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.types.d.ts.map +1 -1
  54. package/types/components/DatePicker/RangeDate/RangeDate.d.ts +10 -8
  55. package/types/components/DatePicker/RangeDate/RangeDate.d.ts.map +1 -1
  56. package/types/components/DatePicker/RangeDate/RangeDate.styles.d.ts +12 -12
  57. package/types/components/DatePicker/RangeDate/RangeDate.types.d.ts +4 -0
  58. package/types/components/DatePicker/RangeDate/RangeDate.types.d.ts.map +1 -1
  59. package/types/components/DatePicker/SingleDate/SingleDate.types.d.ts +1 -1
  60. package/types/components/DatePicker/SingleDate/SingleDate.types.d.ts.map +1 -1
  61. package/types/components/Dropdown/ui/DropdownInner/DropdownInner.d.ts.map +1 -1
  62. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.type.d.ts +0 -5
  63. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.type.d.ts.map +1 -1
  64. package/types/components/Pagination/ui/PaginationSelectPerPage/PaginationSelectPerPage.styles.d.ts +4 -4
  65. package/types/components/Range/Range.types.d.ts +5 -5
  66. package/types/components/Range/Range.types.d.ts.map +1 -1
  67. package/types/components/Select/Select.types.d.ts +2 -2
  68. package/types/components/Select/Select.types.d.ts.map +1 -1
  69. package/types/components/Select/ui/Inner/ui/Item/Item.types.d.ts +0 -11
  70. package/types/components/Select/ui/Inner/ui/Item/Item.types.d.ts.map +1 -1
  71. package/types/examples/plasma_b2c/components/Combobox/Combobox.d.ts +24 -24
  72. package/types/examples/plasma_b2c/components/DatePicker/DatePicker.d.ts +5 -4
  73. package/types/examples/plasma_b2c/components/DatePicker/DatePicker.d.ts.map +1 -1
  74. package/types/examples/plasma_b2c/components/Range/Range.d.ts +12 -12
  75. package/types/examples/plasma_b2c/components/Select/Select.d.ts +4 -4
  76. package/types/examples/plasma_web/components/Combobox/Combobox.d.ts +24 -24
  77. package/types/examples/plasma_web/components/DatePicker/DatePicker.d.ts +5 -4
  78. package/types/examples/plasma_web/components/DatePicker/DatePicker.d.ts.map +1 -1
  79. package/types/examples/plasma_web/components/Range/Range.d.ts +12 -12
  80. package/types/examples/plasma_web/components/Select/Select.d.ts +4 -4
  81. package/emotion/cjs/components/Select/Select.template-doc.mdx +0 -441
  82. package/emotion/es/components/Select/Select.template-doc.mdx +0 -441
  83. package/styled-components/cjs/components/Select/Select.template-doc.mdx +0 -441
  84. package/styled-components/es/components/Select/Select.template-doc.mdx +0 -441
@@ -1,441 +0,0 @@
1
- ---
2
- id: select
3
- title: Select
4
- ---
5
-
6
- import { PropsTable, Description, StorybookLink } from '@site/src/components';
7
- import Tabs from '@theme/Tabs';
8
- import TabItem from '@theme/TabItem';
9
-
10
- # Select
11
-
12
- <Description name="Select" />
13
- <PropsTable name="Select" />
14
-
15
- ## Использование
16
- Обязательным параметром являются: `items`, `value` и `onChange`. Внутри items может быть такой же вложенный массив items. Формат следующий:
17
-
18
- ```tsx
19
- type Items = Array<{
20
- /**
21
- * Значение у item
22
- */
23
- value: string;
24
- /**
25
- * Метка-подпись к item
26
- */
27
- label: string;
28
- /**
29
- * Сторона открытия вложенного дропдауна относительно текущего элемента;
30
- */
31
- placement: SelectPlacement | Array<SelectPlacementBasic>;
32
- /**
33
- * Список дочерних items.
34
- */
35
- items?: Array<ItemOption>;
36
- /**
37
- * Item не активен
38
- */
39
- disabled?: boolean;
40
- /**
41
- * Слот для контента слева
42
- */
43
- contentLeft?: ReactNode;
44
- /**
45
- * Слот для контента справа
46
- */
47
- contentRight?: ReactNode;
48
- /**
49
- * Выбранный item.
50
- * @deprecated
51
- */
52
- isActive?: boolean;
53
- /**
54
- * Кастомный цвет текста
55
- * @deprecated
56
- */
57
- color?: string;
58
- /**
59
- * Айтем не активен
60
- * @deprecated использовать disabled
61
- */
62
- isDisabled?: boolean;
63
- }>;
64
- ```
65
-
66
- Тип выбора селекта - одиночный или множественный зависит от типа `value` и `onChange`. В одиночном value - `string`, в множественном - `Array<string>`.
67
- Select может выглядеть как Button и как Textfield. За это отвечает пропс - `target`.\
68
- Есть возможность прокидывать компонент `EmptyState` в пропс `renderList` для изменения содержимого выпадающего окна.\
69
- Это нужно в случаях, когда произошла ошибка при загрузке `items`, либо когда `items` пустой. Более подробно в примерах.
70
-
71
- ## Примеры
72
-
73
- <Tabs>
74
- <TabItem value="textfield" label="Textfield" default>
75
- В режиме `textfield` доступны только следующие варианты `view`: `default`, `warning`, `positive` и `negative`.
76
-
77
- ```tsx live
78
- import React from 'react';
79
- import { Select } from '@salutejs/{{ package }}';
80
-
81
- export function App() {
82
- const [singleValue, setSingleValue] = useState('');
83
- const [multipleValue, setMultipleValue] = useState([]);
84
-
85
- const items = [
86
- {
87
- value: 'north_america',
88
- label: 'Северная Америка',
89
- },
90
- {
91
- value: 'south_america',
92
- label: 'Южная Америка',
93
- items: [
94
- {
95
- value: 'brazil',
96
- label: 'Бразилия',
97
- },
98
- {
99
- value: 'argentina',
100
- label: 'Аргентина',
101
- },
102
- ],
103
- },
104
- ];
105
-
106
- return (
107
- <div style=\{{ display: 'flex', gap: '30px', height: '300px' }}>
108
- <div style=\{{width: '300px'}}>
109
- <Select items={items} value={singleValue} onChange={setSingleValue} label="Label" placeholder="Placeholder" helperText="Helper text" />
110
- </div>
111
-
112
- <div style=\{{width: '300px'}}>
113
- <Select multiselect items={items} value={multipleValue} onChange={setMultipleValue} label="Label" placeholder="Placeholder" helperText="Helper text" />
114
- </div>
115
- </div>
116
- );
117
- }
118
- ```
119
- </TabItem>
120
- <TabItem value="button" label="Button">
121
- В режиме `button` недоступны следующие пропсы: `contentLeft`, `label`, `labelPlacement`, `placeholder` и `helperText`.
122
-
123
- ```tsx live
124
- import React from 'react';
125
- import { Select } from '@salutejs/{{ package }}';
126
-
127
- export function App() {
128
- const [singleValue, setSingleValue] = useState('');
129
- const [multipleValue, setMultipleValue] = useState([]);
130
-
131
- const items = [
132
- {
133
- value: 'north_america',
134
- label: 'Северная Америка',
135
- },
136
- {
137
- value: 'south_america',
138
- label: 'Южная Америка',
139
- items: [
140
- {
141
- value: 'brazil',
142
- label: 'Бразилия',
143
- },
144
- {
145
- value: 'argentina',
146
- label: 'Аргентина',
147
- },
148
- ],
149
- },
150
- ];
151
-
152
- return (
153
- <div style=\{{ display: 'flex', gap: '30px', height: '300px' }}>
154
- <div style=\{{width: '300px'}}>
155
- <Select items={items} label="Single" target="button-like" value={singleValue} onChange={setSingleValue} />
156
- </div>
157
-
158
- <div style=\{{width: '300px'}}>
159
- <Select multiselect items={items} label="Multiple" target="button-like" value={multipleValue} onChange={setMultipleValue} />
160
- </div>
161
- </div>
162
- );
163
- }
164
- ```
165
- </TabItem>
166
- <TabItem value="predefined" label="Predefined">
167
- Есть возможность задать значения по дефолту (главное, чтобы они находились в `items`). Также можно управлять состоянием снаружи селекта.
168
-
169
- ```tsx live
170
- import React from 'react';
171
- import { Select, Button } from '@salutejs/{{ package }}';
172
-
173
- export function App() {
174
- const [multipleValue, setMultipleValue] = useState(['brazil', 'north_america']);
175
-
176
- const items = [
177
- {
178
- value: 'north_america',
179
- label: 'Северная Америка',
180
- },
181
- {
182
- value: 'south_america',
183
- label: 'Южная Америка',
184
- items: [
185
- {
186
- value: 'brazil',
187
- label: 'Бразилия',
188
- },
189
- {
190
- value: 'argentina',
191
- label: 'Аргентина',
192
- },
193
- ],
194
- },
195
- ];
196
-
197
- return (
198
- <div style=\{{ display: 'flex', gap: '30px', height: '300px' }}>
199
- <div style=\{{width: '300px'}}>
200
- <Select multiselect items={items} label="Label" placeholder="Placeholder" value={multipleValue} onChange={setMultipleValue} />
201
- </div>
202
-
203
- <Button onClick={() => setMultipleValue([])}>Очистить</Button>
204
- </div>
205
- );
206
- }
207
- ```
208
- </TabItem>
209
- <TabItem value="renderValue" label="Render value">
210
- Пропс `renderValue` для кастомной настройки `value` внутри таргета. Принимает коллбэк с двумя параметрами: `value` и `label`.
211
-
212
- ```tsx live
213
- import React from 'react';
214
- import { Select } from '@salutejs/{{ package }}';
215
-
216
- export function App() {
217
- const [singleValue, setSingleValue] = useState('');
218
-
219
- const items = [
220
- {
221
- value: 'north_america',
222
- label: 'Северная Америка',
223
- },
224
- {
225
- value: 'south_america',
226
- label: 'Южная Америка',
227
- items: [
228
- {
229
- value: 'brazil',
230
- label: 'Бразилия',
231
- },
232
- {
233
- value: 'argentina',
234
- label: 'Аргентина',
235
- },
236
- ],
237
- },
238
- ];
239
-
240
- const renderValue = (itemData): string => {
241
- if (!Array.isArray(itemData)) {
242
- return `${itemData.value} - ${itemData.label}`;
243
- }
244
-
245
- return '';
246
- };
247
-
248
- return (
249
- <div style=\{{ height: '300px' }}>
250
- <div style=\{{ width: '300px' }}>
251
- <Select
252
- items={items}
253
- label="Label"
254
- placeholder="Placeholder"
255
- value={singleValue}
256
- onChange={setSingleValue}
257
- renderValue={renderValue}
258
- />
259
- </div>
260
- </div>
261
- );
262
- }
263
- ```
264
- </TabItem>
265
- <TabItem value="renderItem" label="Render item">
266
- `renderTarget` - для кастомной настройки таргета в Select. Принимает коллбэк с один параметром: `value`.
267
- Пропс `renderItem` для кастомной настройки айтема в выпадающем списке. Принимает коллбэк с двумя параметрами: `value` и `label`.
268
- В примере использован другой наш компонент - Cell.
269
-
270
- ```tsx live
271
- import React from 'react';
272
- import { Select, Cell } from '@salutejs/{{ package }}';
273
-
274
- export function App() {
275
- const [multipleValue, setMultipleValue] = useState([]);
276
-
277
- const items = [
278
- {
279
- value: 'north_america',
280
- label: 'Северная Америка',
281
- },
282
- {
283
- value: 'south_america',
284
- label: 'Южная Америка',
285
- },
286
- ];
287
-
288
- const renderTarget = (itemData) => {
289
- if (Array.isArray(itemData)) {
290
- if (itemData.length === 0) {
291
- return (
292
- <div style=\{{ padding: '0.5rem 0' }}>
293
- <Cell
294
- view="default"
295
- title="Выберите страну"
296
- subtitle="Subtitle"
297
- label="Label"
298
- />
299
- </div>
300
- );
301
- }
302
-
303
- const title = itemData.map((item) => item.label).join(', ');
304
-
305
- return (
306
- <div style=\{{ padding: '0.5rem 0.75rem' }}>
307
- <Cell view="default" title={title} subtitle="Subtitle" label="Label" />
308
- </div>
309
- );
310
- }
311
- }
312
-
313
- const renderItem = ({ value, label }) => (
314
- <Cell
315
- view="default"
316
- title={label}
317
- label="Top left"
318
- contentRight={<Cell view="default" title="Bottom right" label="Top right" />}
319
- />
320
- )
321
-
322
- return (
323
- <div style=\{{ height: '300px' }}>
324
- <div style=\{{ width: '400px' }}>
325
- <Select
326
- items={items}
327
- value={multipleValue}
328
- onChange={setMultipleValue}
329
- multiselect
330
- renderTarget={renderTarget}
331
- renderItem={renderItem}
332
- />
333
- </div>
334
- </div>
335
- );
336
- }
337
- ```
338
- </TabItem>
339
- <TabItem value="portal" label="Portal">
340
- Иногда возникает необходимость вынесения выпадающего списка на уровни выше в DOM. К примеру, когда у родительского блока имеется скролл, и список будет обрезаться, чего хотелось бы избежать.\
341
- Для такой реализации имеется пропс `portal`, который принимает либо `ref` либо `id` html-тега.\
342
- Также нужно прокинуть проп `listWidth`, чтобы явно задать ширину списку. Если этого не сделать, то будет взята ширина 100% от блока, на который ведет ссылка портала.
343
-
344
- ```tsx live
345
- import React, { useRef } from 'react';
346
- import { Select } from '@salutejs/{{ package }}';
347
-
348
- export function App() {
349
- const [value, setValue] = useState('');
350
-
351
- const items = [
352
- {
353
- value: 'north_america',
354
- label: 'Северная Америка',
355
- },
356
- {
357
- value: 'south_america',
358
- label: 'Южная Америка',
359
- items: [
360
- {
361
- value: 'brazil',
362
- label: 'Бразилия',
363
- },
364
- {
365
- value: 'argentina',
366
- label: 'Аргентина',
367
- },
368
- ],
369
- },
370
- ];
371
-
372
- const ref = useRef(null)
373
-
374
- return (
375
- <div style=\{{ position: "relative", height: "300px" }} ref={ref}>
376
- <div style=\{{width: '300px'}}>
377
- <Select items={items} label="Label" placeholder="Placeholder" value={value} onChange={setValue} portal={ref} listWidth="300px" />
378
- </div>
379
- </div>
380
- );
381
- }
382
- ```
383
- </TabItem>
384
- <TabItem value="uncontrolled" label="Uncontrolled">
385
- `value` и `onChange` - опциональные параметры. Если вы хотите `uncontrolled` вариант компонента - их пробрасывать необязательно.
386
-
387
- ```tsx live
388
- import React from 'react';
389
- import { Select } from '@salutejs/{{ package }}';
390
-
391
- export function App() {
392
- const items = [
393
- {
394
- value: 'north_america',
395
- label: 'Северная Америка',
396
- },
397
- {
398
- value: 'south_america',
399
- label: 'Южная Америка',
400
- items: [
401
- {
402
- value: 'brazil',
403
- label: 'Бразилия',
404
- },
405
- {
406
- value: 'argentina',
407
- label: 'Аргентина',
408
- },
409
- ],
410
- },
411
- ];
412
-
413
- return (
414
- <div style=\{{ height: '300px' }}>
415
- <div style=\{{width: '300px'}}>
416
- <Select items={items} label="Label" placeholder="Placeholder" />
417
- </div>
418
- </div>
419
- );
420
- }
421
- ```
422
- </TabItem>
423
- </Tabs>
424
-
425
- ## Клавиатурная навигация
426
-
427
- Данный компонент соответствует требования W3C: [Combobox](https://www.w3.org/WAI/ARIA/apg/patterns/combobox/) и частично [TreeView](https://www.w3.org/WAI/ARIA/apg/patterns/treeview/).
428
-
429
- - `Tab` - закрывает дропдаун. Перемещает фокус на следующий элемент на странице;
430
- - `Enter` - открывает/закрывает дропдаун. Если на элементе - выбирает его. Если у элемента есть дочерний дропдаун - открывает его, выбор элемента не происходит;
431
- - `Space` - открывает/закрывает дропдаун. Если на элементе - выбирает его и все дочерние элементы.
432
- - `Home` - открывает дропдаун и перемещает фокус на первый элемент;
433
- - `End` - открывает дропдаун и перемещает фокус на последний элемент;
434
- - `PageUp` - перемещает фокус на 10 элементов выше либо в начало списка;
435
- - `PageDown` - перемещает фокус на 10 элементов ниже либо в конце списка;
436
- - `ArrowUp` - открывает дропдаун и перемещает фокус на первый элемент. Перемещает фокус на один элемент выше;
437
- - `ArrowDown` - открывает дропдаун и перемещает фокус на первый элемент. Перемещает фокус на один элемент ниже;
438
- - `ArrowRight` - если фокус на элементе вложенного списка - открывает его и перемещает фокус на первый элемент; Если фокус на таргете - переходит в режим выбора чипа.
439
- - `ArrowLeft` - закрывает текущий список и перемещает фокус на предыдущий; Если фокус на таргете - переходит в режим выбора чипа.
440
- - `Backspace` - только если фокус на чипе - снимает выбор с текущего значения;
441
-