@salutejs/plasma-new-hope 0.67.0-canary.1148.8444175533.0 → 0.67.0-canary.1148.8449780048.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. package/cjs/components/Cell/Cell.js +3 -0
  2. package/cjs/components/Cell/Cell.js.map +1 -1
  3. package/cjs/components/Cell/Cell.tokens.js +2 -3
  4. package/cjs/components/Cell/Cell.tokens.js.map +1 -1
  5. package/es/components/Cell/Cell.js +3 -0
  6. package/es/components/Cell/Cell.js.map +1 -1
  7. package/es/components/Cell/Cell.tokens.js +2 -3
  8. package/es/components/Cell/Cell.tokens.js.map +1 -1
  9. package/package.json +2 -2
  10. package/styled-components/cjs/components/Avatar/Avatar.template-doc.mdx +97 -0
  11. package/styled-components/cjs/components/AvatarGroup/AvatarGroup.template-doc.mdx +29 -0
  12. package/styled-components/cjs/components/Badge/Badge.template-doc.mdx +131 -0
  13. package/styled-components/cjs/components/Button/Button.template-doc.mdx +162 -0
  14. package/styled-components/cjs/components/ButtonGroup/ButtonGroup.template-doc.mdx +123 -0
  15. package/styled-components/cjs/components/Calendar/Calendar.template-doc.mdx +208 -0
  16. package/styled-components/cjs/components/Cell/Cell.js +3 -0
  17. package/styled-components/cjs/components/Cell/Cell.tokens.js +2 -3
  18. package/styled-components/cjs/components/Checkbox/Checkbox.template-doc.mdx +44 -0
  19. package/styled-components/cjs/components/Chip/Chip.template-doc.mdx +90 -0
  20. package/styled-components/cjs/components/Combobox/Combobox.template-doc.mdx +237 -0
  21. package/styled-components/cjs/components/Counter/Counter.template-doc.mdx +76 -0
  22. package/styled-components/cjs/components/Drawer/Drawer.template-doc.mdx +170 -0
  23. package/styled-components/cjs/components/Dropdown/Dropdown.template-doc.mdx +80 -0
  24. package/styled-components/cjs/components/Grid/Grid.template-doc.mdx +142 -0
  25. package/styled-components/cjs/components/Image/Image.template-doc.mdx +26 -0
  26. package/styled-components/cjs/components/Indicator/Indicator.template-doc.mdx +76 -0
  27. package/styled-components/cjs/components/Link/Link.template-doc.mdx +23 -0
  28. package/styled-components/cjs/components/Modal/Modal.template-doc.mdx +56 -0
  29. package/styled-components/cjs/components/Notification/Notification.template-doc.mdx +59 -0
  30. package/styled-components/cjs/components/Overlay/Overlay.template-doc.mdx +10 -0
  31. package/styled-components/cjs/components/Popover/Popover.template-doc.mdx +72 -0
  32. package/styled-components/cjs/components/Popup/Popup.template-doc.mdx +209 -0
  33. package/styled-components/cjs/components/Radiobox/Radiobox.template-doc.mdx +38 -0
  34. package/styled-components/cjs/components/Segment/Segment.template-doc.mdx +61 -0
  35. package/styled-components/cjs/components/Select/Select.template-doc.mdx +115 -0
  36. package/styled-components/cjs/components/Skeleton/Skeleton.template-doc.mdx +103 -0
  37. package/styled-components/cjs/components/Spinner/Spinner.template-doc.mdx +21 -0
  38. package/styled-components/cjs/components/Switch/Switch.template-doc.mdx +24 -0
  39. package/styled-components/cjs/components/Tabs/Tabs.template-doc.mdx +94 -0
  40. package/styled-components/cjs/components/TextArea/TextArea.template-doc.mdx +88 -0
  41. package/styled-components/cjs/components/TextField/TextField.template-doc.mdx +112 -0
  42. package/styled-components/cjs/components/Toast/Toast.template-doc.mdx +153 -0
  43. package/styled-components/cjs/components/Tooltip/Tooltip.template-doc.mdx +30 -0
  44. package/styled-components/cjs/components/Typography/Typography.template-doc.mdx +127 -0
  45. package/styled-components/cjs/examples/plasma_b2c/components/Cell/Cell.config.js +5 -5
  46. package/styled-components/cjs/examples/plasma_b2c/components/Cell/Cell.stories.tsx +16 -19
  47. package/styled-components/cjs/examples/plasma_web/components/Cell/Cell.config.js +5 -5
  48. package/styled-components/cjs/examples/plasma_web/components/Cell/Cell.stories.tsx +16 -19
  49. package/styled-components/es/components/Avatar/Avatar.template-doc.mdx +97 -0
  50. package/styled-components/es/components/AvatarGroup/AvatarGroup.template-doc.mdx +29 -0
  51. package/styled-components/es/components/Badge/Badge.template-doc.mdx +131 -0
  52. package/styled-components/es/components/Button/Button.template-doc.mdx +162 -0
  53. package/styled-components/es/components/ButtonGroup/ButtonGroup.template-doc.mdx +123 -0
  54. package/styled-components/es/components/Calendar/Calendar.template-doc.mdx +208 -0
  55. package/styled-components/es/components/Cell/Cell.js +3 -0
  56. package/styled-components/es/components/Cell/Cell.tokens.js +2 -3
  57. package/styled-components/es/components/Checkbox/Checkbox.template-doc.mdx +44 -0
  58. package/styled-components/es/components/Chip/Chip.template-doc.mdx +90 -0
  59. package/styled-components/es/components/Combobox/Combobox.template-doc.mdx +237 -0
  60. package/styled-components/es/components/Counter/Counter.template-doc.mdx +76 -0
  61. package/styled-components/es/components/Drawer/Drawer.template-doc.mdx +170 -0
  62. package/styled-components/es/components/Dropdown/Dropdown.template-doc.mdx +80 -0
  63. package/styled-components/es/components/Grid/Grid.template-doc.mdx +142 -0
  64. package/styled-components/es/components/Image/Image.template-doc.mdx +26 -0
  65. package/styled-components/es/components/Indicator/Indicator.template-doc.mdx +76 -0
  66. package/styled-components/es/components/Link/Link.template-doc.mdx +23 -0
  67. package/styled-components/es/components/Modal/Modal.template-doc.mdx +56 -0
  68. package/styled-components/es/components/Notification/Notification.template-doc.mdx +59 -0
  69. package/styled-components/es/components/Overlay/Overlay.template-doc.mdx +10 -0
  70. package/styled-components/es/components/Popover/Popover.template-doc.mdx +72 -0
  71. package/styled-components/es/components/Popup/Popup.template-doc.mdx +209 -0
  72. package/styled-components/es/components/Radiobox/Radiobox.template-doc.mdx +38 -0
  73. package/styled-components/es/components/Segment/Segment.template-doc.mdx +61 -0
  74. package/styled-components/es/components/Select/Select.template-doc.mdx +115 -0
  75. package/styled-components/es/components/Skeleton/Skeleton.template-doc.mdx +103 -0
  76. package/styled-components/es/components/Spinner/Spinner.template-doc.mdx +21 -0
  77. package/styled-components/es/components/Switch/Switch.template-doc.mdx +24 -0
  78. package/styled-components/es/components/Tabs/Tabs.template-doc.mdx +94 -0
  79. package/styled-components/es/components/TextArea/TextArea.template-doc.mdx +88 -0
  80. package/styled-components/es/components/TextField/TextField.template-doc.mdx +112 -0
  81. package/styled-components/es/components/Toast/Toast.template-doc.mdx +153 -0
  82. package/styled-components/es/components/Tooltip/Tooltip.template-doc.mdx +30 -0
  83. package/styled-components/es/components/Typography/Typography.template-doc.mdx +127 -0
  84. package/styled-components/es/examples/plasma_b2c/components/Cell/Cell.config.js +5 -5
  85. package/styled-components/es/examples/plasma_b2c/components/Cell/Cell.stories.tsx +16 -19
  86. package/styled-components/es/examples/plasma_web/components/Cell/Cell.config.js +5 -5
  87. package/styled-components/es/examples/plasma_web/components/Cell/Cell.stories.tsx +16 -19
  88. package/types/components/Cell/Cell.d.ts +4 -2
  89. package/types/components/Cell/Cell.d.ts.map +1 -1
  90. package/types/components/Cell/Cell.tokens.d.ts +0 -1
  91. package/types/components/Cell/Cell.tokens.d.ts.map +1 -1
  92. package/types/components/Cell/Cell.types.d.ts +5 -2
  93. package/types/components/Cell/Cell.types.d.ts.map +1 -1
  94. package/types/examples/plasma_b2c/components/Cell/Cell.d.ts +2 -1
  95. package/types/examples/plasma_b2c/components/Cell/Cell.d.ts.map +1 -1
  96. package/types/examples/plasma_web/components/Cell/Cell.d.ts +2 -1
  97. package/types/examples/plasma_web/components/Cell/Cell.d.ts.map +1 -1
@@ -0,0 +1,208 @@
1
+ ---
2
+ id: calendar
3
+ title: Calendar
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Calendar
9
+ Компоненты календарей для выбора даты или диапазона дат.
10
+
11
+ ## Calendar
12
+
13
+ <Description name="Calendar" />
14
+ <PropsTable name="Calendar" />
15
+
16
+ Представляет собой универсальный компонент `Calendar`, в котором можно настроить любое доступное представление: базовый, двойной, базовый с диапазоном, двойной с диапазоном.
17
+
18
+ ```tsx live
19
+ import React from 'react';
20
+ import { Calendar } from '@salutejs/{{ package }}';
21
+
22
+ export function App() {
23
+ const isRange = false;
24
+ const isDouble = false;
25
+ const min = new Date(2022, 4, 0);
26
+ const max = new Date(2022, 6, 15);
27
+ const date = {
28
+ day: 6,
29
+ monthIndex: 5,
30
+ year: 2022,
31
+ }
32
+
33
+ const [value, setValue] = React.useState(new Date(2022, 5, 6));
34
+ const [valueRange, setValueRange] = React.useState([new Date(2022, 5, 6), new Date(2022, 5, 10)]);
35
+
36
+ const handleOnChange = React.useCallback((newValue) => {
37
+ setValue(newValue);
38
+ }, []);
39
+ const handleOnRangeChange = React.useCallback((newValue) => {
40
+ setValueRange(newValue);
41
+ }, []);
42
+
43
+ const baseEvents = [
44
+ {
45
+ date: new Date(2022, 5, 6),
46
+ },
47
+ {
48
+ date: new Date(2022, 5, 10),
49
+ color: 'red',
50
+ },
51
+ {
52
+ date: new Date(2022, 5, 10),
53
+ color: 'green',
54
+ },
55
+ {
56
+ date: new Date(2022, 5, 10),
57
+ color: 'blue',
58
+ },
59
+ ];
60
+
61
+ const eventsRange = Array.from(Array(10),((_, day) => ({
62
+ date: new Date(2022, 5, 15 + day),
63
+ color: 'purple',
64
+ })));
65
+
66
+ const disabledDays = Array.from(Array(5),((_, day) => ({
67
+ date: new Date(2022, 5, 11 + day),
68
+
69
+ })));
70
+
71
+ return (
72
+ <div>
73
+ <Calendar
74
+ isRange={isRange}
75
+ isDouble={isDouble}
76
+ value={(isRange ? valueRange : value)}
77
+ eventList={[...baseEvents, ...eventsRange]}
78
+ disabledList={disabledDays}
79
+ date={date}
80
+ min={min}
81
+ max={max}
82
+ onChangeValue={(isRange ? handleOnRangeChange : handleOnChange)}
83
+ />
84
+ </div>
85
+ );
86
+ }
87
+ ```
88
+
89
+ ## CalendarBase
90
+ <Description name="CalendarBase" />
91
+ <PropsTable name="CalendarBase" />
92
+
93
+ ```tsx live
94
+ import React from 'react';
95
+ import { CalendarBase } from '@salutejs/{{ package }}';
96
+
97
+ export function App() {
98
+ const min = new Date(2022, 4, 0);
99
+ const max = new Date(2022, 7, 15);
100
+
101
+ const [value, setValue] = React.useState(new Date(2022, 5, 6));
102
+ const handleOnChange = React.useCallback((newValue) => {
103
+ setValue(newValue);
104
+ }, []);
105
+
106
+ return (
107
+ <div>
108
+ <CalendarBase
109
+ value={value}
110
+ min={min}
111
+ max={max}
112
+ onChangeValue={handleOnChange}
113
+ />
114
+ </div>
115
+ );
116
+ }
117
+ ```
118
+
119
+ ## CalendarDouble
120
+ <Description name="CalendarDouble" />
121
+ <PropsTable name="CalendarDouble" />
122
+
123
+ ```tsx live
124
+ import React from 'react';
125
+ import { CalendarDouble } from '@salutejs/{{ package }}';
126
+
127
+ export function App() {
128
+ const min = new Date(2022, 4, 0);
129
+ const max = new Date(2022, 7, 15);
130
+
131
+ const [value, setValue] = React.useState(new Date(2022, 5, 6));
132
+ const handleOnChange = React.useCallback((newValue) => {
133
+ setValue(newValue);
134
+ }, []);
135
+
136
+ return (
137
+ <div>
138
+ <CalendarDouble
139
+ value={value}
140
+ min={min}
141
+ max={max}
142
+ onChangeValue={handleOnChange}
143
+ />
144
+ </div>
145
+ );
146
+ }
147
+ ```
148
+
149
+ ## CalendarBaseRange
150
+ <Description name="CalendarBaseRange" />
151
+ <PropsTable name="CalendarBaseRange" />
152
+
153
+ ```tsx live
154
+ import React from 'react';
155
+ import { CalendarBaseRange } from '@salutejs/{{ package }}';
156
+
157
+ export function App() {
158
+ const min = new Date(2022, 4, 0);
159
+ const max = new Date(2022, 7, 15);
160
+
161
+ const [value, setValue] = React.useState([new Date(2022, 5, 6), new Date(2022, 5, 16)]);
162
+ const handleOnChange = React.useCallback((newValue) => {
163
+ setValue(newValue);
164
+ }, []);
165
+
166
+ return (
167
+ <div>
168
+ <CalendarBaseRange
169
+ value={value}
170
+ min={min}
171
+ max={max}
172
+ onChangeValue={handleOnChange}
173
+ />
174
+ </div>
175
+ );
176
+ }
177
+ ```
178
+
179
+ ## CalendarDoubleRange
180
+ <Description name="CalendarDoubleRange" />
181
+ <PropsTable name="CalendarDoubleRange" />
182
+
183
+ ```tsx live
184
+ import React from 'react';
185
+ import { CalendarDoubleRange } from '@salutejs/{{ package }}';
186
+
187
+ export function App() {
188
+ const min = new Date(2022, 4, 0);
189
+ const max = new Date(2022, 7, 15);
190
+
191
+ const [value, setValue] = React.useState([new Date(2022, 5, 6), new Date(2022, 6, 16)]);
192
+ const handleOnChange = React.useCallback((newValue) => {
193
+ setValue(newValue);
194
+ }, []);
195
+
196
+ return (
197
+ <div>
198
+ <CalendarDoubleRange
199
+ value={value}
200
+ min={min}
201
+ max={max}
202
+ onChangeValue={handleOnChange}
203
+ />
204
+ </div>
205
+ );
206
+ }
207
+ ```
208
+
@@ -13,6 +13,8 @@ export var cellRoot = function cellRoot(Root) {
13
13
  return /*#__PURE__*/forwardRef(function (props, outerRootRef) {
14
14
  var _props$size = props.size,
15
15
  size = _props$size === void 0 ? 'm' : _props$size,
16
+ _props$view = props.view,
17
+ view = _props$view === void 0 ? 'default' : _props$view,
16
18
  left = props.contentLeft,
17
19
  right = props.contentRight,
18
20
  _props$alignLeft = props.alignLeft,
@@ -29,6 +31,7 @@ export var cellRoot = function cellRoot(Root) {
29
31
  return /*#__PURE__*/React.createElement(Root, {
30
32
  ref: outerRootRef,
31
33
  size: size,
34
+ view: view,
32
35
  className: cx(stretchingClass)
33
36
  }, /*#__PURE__*/React.createElement(CellRoot, {
34
37
  className: classes.cellRoot
@@ -1,9 +1,9 @@
1
1
  export var tokens = {
2
2
  cellColor: '--plasma-cell-color',
3
3
  cellBackgroundColor: '--plasma-cell-background-color',
4
- cellPadding: '--plasma-cell-padding',
4
+ cellPadding: '--plasma-cell-content-padding',
5
5
  cellPaddingLeftContent: '--plasma-cell-left-padding',
6
- cellPaddingContent: '--plasma-cell-padding',
6
+ cellPaddingContent: '--plasma-cell-content-padding',
7
7
  cellPaddingRightContent: '--plasma-cell-right-padding',
8
8
  cellTextboxGap: '--plasma-cell-textbox-gap',
9
9
  cellGap: '--plasma-cell-gap',
@@ -31,7 +31,6 @@ export var tokens = {
31
31
  cellSubtitleLineHeight: '--plasma-cell-subtitle-line-height'
32
32
  };
33
33
  export var classes = {
34
- cellStretch: 'cell-stretch',
35
34
  autoStretching: 'cell-stretching-auto',
36
35
  filledStretching: 'cell-stretching-filled',
37
36
  fixedStretching: 'cell-stretching-fixed',
@@ -0,0 +1,44 @@
1
+ ---
2
+ id: checkbox
3
+ title: Checkbox
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Checkbox
9
+ <Description name="Checkbox" />
10
+ <PropsTable name="Checkbox" exclude={['css', 'focused']} />
11
+
12
+ ## Использование
13
+ Компонент `Checkbox` может содержать лейбл и описание.
14
+
15
+ ```tsx live
16
+ import React from 'react';
17
+ import { Checkbox } from '@salutejs/s{{package}}';
18
+
19
+ export function App() {
20
+ return (
21
+ <Checkbox label="Чекбокс" description="Описание" defaultChecked />
22
+ );
23
+ }
24
+ ```
25
+
26
+ Свойства `description` и `label` могут принимать JSX элементы.
27
+
28
+ По умолчанию, контент внутри лейбла и описания многострочный.
29
+
30
+ Для того чтобы стал однострочным, необходимо использовать свойство `singleLine`(по умолчанию `false`).
31
+
32
+ ```tsx live
33
+ import React from 'react';
34
+ import { Checkbox } from '@salutejs/s{{package}}';
35
+
36
+ export function App() {
37
+ return (
38
+ <Checkbox
39
+ label={<div>Чекбокс со <a href="/#">ссылкой</a></div>}
40
+ description={<div>Описание чекбокса со <a href="/#">ссылкой</a></div>}
41
+ />
42
+ );
43
+ }
44
+ ```
@@ -0,0 +1,90 @@
1
+ ---
2
+ id: chip
3
+ title: Chip
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Chip
9
+ Chips могут отображаться в нескольких размерах и цветах, могут содержать текст и/или иконку.
10
+
11
+ ## Chip
12
+ <Description name="Chip" />
13
+ <PropsTable name="Chip" exclude={['css', 'focused']} />
14
+
15
+ ## Использование
16
+ Компонент `Chip` может содержать текст, который указывается в
17
+ свойстве `text`, или любой контент напрямую через `children`.
18
+
19
+ Свойство `text` можно использовать вместе со свойствами `contentLeft` и `contentRight`.
20
+ С их помощью можно размещать **иконку** слева или справа от текста.
21
+
22
+ Так же есть свойство `contentClearButton`, которое позволяет прокинуть custom **иконку**.
23
+
24
+ ```tsx live
25
+ import React from 'react';
26
+ import { Chip } from '@salutejs/{{ package }}';
27
+ import { IconDownload } from '@salutejs/plasma-icons';
28
+
29
+ export function App() {
30
+ return (
31
+ <div>
32
+ <Chip text="Текст" />
33
+
34
+ <Chip text="Текст" contentLeft={<IconDownload color="inherit" />} />
35
+
36
+ <Chip contentLeft={<IconDownload color="inherit" />} />
37
+
38
+ <Chip text="Текст" />
39
+
40
+ <Chip text="Текст" contentLeft={<IconDownload color="inherit" />} />
41
+
42
+ <Chip>
43
+ Текст
44
+ </Chip>
45
+ </div>
46
+ );
47
+ }
48
+ ```
49
+
50
+ ## Примеры
51
+
52
+ ### Размер Chip
53
+ Размер Chip задается с помощью свойства `size`. Возможные значения свойства: `"l"`, `"m"`, `"s"` или `"xs"`:
54
+
55
+ ```tsx live
56
+ import React from 'react';
57
+ import { Chip } from '@salutejs/{{ package }}';
58
+
59
+ export function App() {
60
+ return (
61
+ <div>
62
+ <Chip text="Chip" size="l" />
63
+ <Chip text="Chip" size="m" />
64
+ <Chip text="Chip" size="s" />
65
+ <Chip text="Chip" size="xs" />
66
+ </div>
67
+ );
68
+ }
69
+ ```
70
+
71
+ ### Вид Chip
72
+ Вид Chip задается с помощью свойства `view`. Возможные значения свойства `view`:
73
+ + `"default"` – основная;
74
+ + `"secondary"` – вторичная;
75
+ + `"positive"` – успешное завершение;
76
+
77
+ ```tsx live
78
+ import React from 'react';
79
+ import { Chip } from '@salutejs/{{ package }}';
80
+
81
+ export function App() {
82
+ return (
83
+ <div>
84
+ <Chip text="Chip" size="m" view="default" />
85
+ <Chip text="Chip" size="m" view="secondary" />
86
+ <Chip text="Chip" size="m" view="positive" />
87
+ </div>
88
+ );
89
+ }
90
+ ```
@@ -0,0 +1,237 @@
1
+ ---
2
+ id: combobox
3
+ title: Combobox
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Combobox
9
+ Компонент, отвечающий за выпадающий список с возможностью фильтрации элементов и их выбора.
10
+ Доступен в двух режимах: единичный и множественный выбор.
11
+
12
+ ## Combobox
13
+ <Description name="Combobox" />
14
+ <PropsTable name="Combobox" exclude={['css', 'focused']} />
15
+
16
+ ## Использование
17
+ Компонент `Combobox` должен содержать компоненты из следующего списка: `ComboboxDivider`, `ComboboxFooter`, `ComboboxGroup`, `ComboboxHeader`, `ComboboxItem`.
18
+ Для управления режимом, необходимо установить свойство `valueType = 'single'` для единичного выбора и `valueType='multiple'` для множественного.
19
+ Так же для выбора отображения множественного режима свойство `enumerationType = 'comma'` для перечисления выбранных значений через запятую,
20
+ и `enumerationType = 'chip'` для перечисления выбранных значений с помощью компонента `Chip`.
21
+
22
+ ## Клавиатурная навигация
23
+
24
+ Данный компонент может полностью управляться с помощью клавиатуры, используя следующие клавиши:
25
+ - `Tab` - переход на таргет (инпут)
26
+ - `Shift` + `tab` - выход с него (теряем фокус)
27
+ - `Стрелка вверх` / `стрелка вниз` - открыть выпадающий список и переместиться на первый элемент
28
+ - `Стрелка вверх` / `стрелка вниз` ходим по элементам с зацикливанием
29
+ - `Enter` - выбираем элемент, закрываем выпадающий список и переходим фокусом снова на таргет (инпут)
30
+ - Если мы ходим по селекту и нажимаем `Tab` - выпадающий список закрывается и теряем фокус
31
+ - Если мы ходим по селекту и нажимаем `Escape` - выпадающий список закрывается и фокусом остаёмся на таргете
32
+ - В мультиселекте то же самое кроме закрытия выпадающего списка при выборе элемента
33
+ - Когда находимся на первом чипе, нажимаем `стрелку влево` / `стрелку вправо` - переходим по чипам
34
+ - Когда оказываемся на последнем чипе и нажимаем `стрелку вправо` - переходим на таргет (инпут)
35
+ - Когда находимся на таргете (инпуте) и нажимаем `Backspace` - удаляется последний чип
36
+ - Когда находимся на таргете (инпуте) и нажимаем `стрелку влево` - переходим на последний чип
37
+ - Нажимаем `Backspace` - удаляем выбранный чип и переходим на предыдущий
38
+ - Если удалили последний чип, то фокусируемся на таргете
39
+ - Если находимся в выборе элемента из выпадающего списка и нажимаем `стрелку влево` / `стрелку вправо` - попадаем на самый последний чип
40
+ - Если находимся в режиме выбора элемента и нажимаем `стрелку вниз` / `стрелку вверх` находясь на последнем / первом элементе, то перескакиваем в начало / в конец
41
+ - Если находимся в режиме выбора элемента и нажимаем любую клавишу **кроме** `стрелки вниз` / `вверх` / `влево` / `вправо` / `Escape` / `Tab` / `Enter`, то переходим на таргет (инпут) и вводим значения
42
+ - Ввод значение в таргет (инпут) приводит к фильтрации элементов в выпадающем списке. Если значение не соответствует ни одному элементу, то отобразится сообщение "Элементы не найдены"
43
+
44
+ ### Single
45
+
46
+ ```tsx live
47
+ import React from 'react';
48
+ import { Combobox, ComboboxItem } from '@salutejs/{{ package }}';
49
+ import { IconDone } from '@salutejs/plasma-icons';
50
+
51
+ export function App() {
52
+ const [value, setValue] = React.useState(undefined);
53
+ const handleOnChange = React.useCallback((newValue) => {
54
+ setValue(newValue);
55
+ }, []);
56
+
57
+ return (
58
+ <div>
59
+ <Combobox value={value} onChangeValue={handleOnChange} frame="document" usePortal placeholder="Placeholder">
60
+ <ComboboxItem value={undefined} text="Clear" />
61
+ <ComboboxItem
62
+ value="item_0"
63
+ text="item 0"
64
+ contentLeft={"item_0" === value ? <IconDone size="s" color="inherit" /> : undefined}
65
+ />
66
+ <ComboboxItem
67
+ value="item_1"
68
+ text="item 1"
69
+ contentLeft={"item_1" === value ? <IconDone size="s" color="inherit" /> : undefined}
70
+ />
71
+ <ComboboxItem
72
+ value="extra_item_0"
73
+ text="extra item 0"
74
+ contentLeft={"extra_item_0" === value ? <IconDone size="s" color="inherit" /> : undefined}
75
+ />
76
+ <ComboboxItem
77
+ value="extra_item_1"
78
+ text="extra item 1"
79
+ contentLeft={"extra_item_1" === value ? <IconDone size="s" color="inherit" /> : undefined}
80
+ />
81
+ <ComboboxItem
82
+ value="extra_item_2"
83
+ text="extra item 2"
84
+ contentLeft={"extra_item_2" === value ? <IconDone size="s" color="inherit" /> : undefined}
85
+ />
86
+ </Combobox>
87
+ </div>
88
+ );
89
+ }
90
+ ```
91
+
92
+ ### Multiple
93
+
94
+ ```tsx live
95
+ import React from 'react';
96
+ import { Combobox, ComboboxItem, Checkbox } from '@salutejs/{{ package }}';
97
+
98
+ export function App() {
99
+ const [value, setValue] = React.useState(['item_0']);
100
+ const handleOnChange = React.useCallback((newValue) => {
101
+ setValue(newValue);
102
+ }, []);
103
+
104
+ return (
105
+ <div>
106
+ <Combobox
107
+ value={value}
108
+ onChangeValue={handleOnChange}
109
+ frame="document"
110
+ usePortal
111
+ valueType="multiple"
112
+ enumerationType="chip"
113
+ label="Label">
114
+ <ComboboxItem value={undefined} text="Clear" />
115
+ <ComboboxItem
116
+ value="item_0"
117
+ text="item 0"
118
+ contentLeft={Checkbox}
119
+ />
120
+ <ComboboxItem
121
+ value="item_1"
122
+ text="item 1"
123
+ contentLeft={Checkbox}
124
+ />
125
+ <ComboboxItem
126
+ value="extra_item_0"
127
+ text="extra item 0"
128
+ contentLeft={Checkbox}
129
+ />
130
+ <ComboboxItem
131
+ value="extra_item_1"
132
+ text="extra item 1"
133
+ contentLeft={Checkbox}
134
+ />
135
+ <ComboboxItem
136
+ value="extra_item_2"
137
+ text="extra item 2"
138
+ contentLeft={Checkbox}
139
+ />
140
+ </Combobox>
141
+ </div>
142
+ );
143
+ }
144
+ ```
145
+
146
+ ## Примеры
147
+
148
+ ### Размер Combobox
149
+ Размер `Combobox` задается с помощью свойства `size`.
150
+ Возможные значения свойства: `"l"`, `"m"`, `"s"` или `"xs"`, а также соответствующие размеры компонент `Checkbox` и `IconDone`:
151
+
152
+ Для иконок верно такое соответствие размеров (`Icon = Combobox`):
153
+ - xs = xs,
154
+ - s = s,
155
+ - m = s,
156
+ - l = s,
157
+
158
+ Для `Checkbox` / `Radiobox` верно такое соответствие размеров (`Checkbox / Radiobox = Combobox`):
159
+ - xs = s,
160
+ - s = m,
161
+ - m = m,
162
+ - l = m,
163
+
164
+ ```tsx live
165
+ import React from 'react';
166
+ import { Combobox } from '@salutejs/{{ package }}';
167
+
168
+ export function App() {
169
+ return (
170
+ <div style=\{{flexDirection: 'column'}}>
171
+ <Combobox usePortal frame="document" label="Label" size="xs" />
172
+ <Combobox usePortal frame="document" label="Label" size="s" />
173
+ <Combobox usePortal frame="document" label="Label" size="m" />
174
+ <Combobox usePortal frame="document" label="Label" size="l" />
175
+ </div>
176
+ );
177
+ }
178
+ ```
179
+
180
+ ### Применение пользовательского фильтра
181
+ `Combobox` поддерживает возможность создавать собственные правила для фильтрации списка элементов с помощью функции колбэка `filterFunction`,
182
+ которая срабатывает на каждый элемент и если возвращает `true`, то элемент рендерится, иначе нет.
183
+
184
+ ```tsx live
185
+ import React from 'react';
186
+ import { Combobox } from '@salutejs/{{ package }}';
187
+
188
+ export function App() {
189
+ const [value, setValue] = React.useState(['item_0']);
190
+ const handleOnChange = React.useCallback((newValue) => {
191
+ setValue(newValue);
192
+ }, []);
193
+
194
+ const customFilterFunction = React.useCallback((childText, filterValue) => {
195
+ return childText.startWith(filterValue);
196
+ }, []);
197
+
198
+ return (
199
+ <div style=\{{flexDirection: 'column'}}>
200
+ <Combobox
201
+ value={value}
202
+ onChangeValue={handleOnChange}
203
+ frame="document"
204
+ usePortal
205
+ valueType="multiple"
206
+ label="Label">
207
+ <ComboboxItem value={undefined} text="Clear" />
208
+ <ComboboxItem
209
+ value="item_0"
210
+ text="item 0"
211
+ contentLeft={Checkbox}
212
+ />
213
+ <ComboboxItem
214
+ value="item_1"
215
+ text="item 1"
216
+ contentLeft={Checkbox}
217
+ />
218
+ <ComboboxItem
219
+ value="extra_item_0"
220
+ text="extra item 0"
221
+ contentLeft={Checkbox}
222
+ />
223
+ <ComboboxItem
224
+ value="extra_item_1"
225
+ text="extra item 1"
226
+ contentLeft={Checkbox}
227
+ />
228
+ <ComboboxItem
229
+ value="extra_item_2"
230
+ text="extra item 2"
231
+ contentLeft={Checkbox}
232
+ />
233
+ </Combobox>
234
+ </div>
235
+ );
236
+ }
237
+ ```
@@ -0,0 +1,76 @@
1
+ ---
2
+ id: counter
3
+ title: Counter
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Counter
9
+ <Description name="Counter" />
10
+ <PropsTable name="Counter" exclude={['css']} />
11
+
12
+ ## Примеры
13
+
14
+ ### Максимальное значение числового бейджа
15
+ Задается с помощью свойства `maxCount`.
16
+
17
+ ```tsx live
18
+ import React from 'react';
19
+ import { Counter } from '@salutejs/{{ package }}';
20
+
21
+ export function App() {
22
+ return (
23
+ <div>
24
+ <Counter count={10} maxCount={9} />
25
+ <Counter count={100} maxCount={99} />
26
+ </div>
27
+ );
28
+ }
29
+ ```
30
+
31
+ ### Размер числового бейджа
32
+ Размер задается с помощью свойства `size`. Возможные значения свойства: `"xs"` или `"xxs"`.
33
+
34
+ ```tsx live
35
+ import React from 'react';
36
+ import { Counter } from '@salutejs/{{ package }}';
37
+
38
+ export function App() {
39
+ return (
40
+ <div>
41
+ <Counter count={10} size="xs" />
42
+ <Counter count={10} size="xxs" />
43
+ </div>
44
+ );
45
+ }
46
+ ```
47
+
48
+ ### Вид числового бейджа
49
+ Вид задается с помощью свойства `view`. Возможные значения свойства `view`:
50
+
51
+ + `"primary"` – основной бейдж;
52
+ + `"accent"` – бейдж акцентного цвета;
53
+ + `"positive"` – успешное завершение;
54
+ + `"warning"` – предупреждение;
55
+ + `"negative"` – ошибка;
56
+ + `"dark"` – темный бэйдж;
57
+ + `"light"` – светлый бэйдж.
58
+
59
+ ```tsx live
60
+ import React from 'react';
61
+ import { Counter } from '@salutejs/{{ package }}';
62
+
63
+ export function App() {
64
+ return (
65
+ <div>
66
+ <Counter count={10} view="primary" />
67
+ <Counter count={10} view="accent" />
68
+ <Counter count={10} view="positive" />
69
+ <Counter count={10} view="warning" />
70
+ <Counter count={10} view="negative" />
71
+ <Counter count={10} view="dark" />
72
+ <Counter count={10} view="light" />
73
+ </div>
74
+ );
75
+ }
76
+ ```