@salutejs/plasma-new-hope 0.67.0-canary.1148.8444175533.0 → 0.67.0-canary.1148.8449317874.0
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/components/Cell/Cell.js +3 -0
- package/cjs/components/Cell/Cell.js.map +1 -1
- package/cjs/components/Cell/Cell.tokens.js +2 -3
- package/cjs/components/Cell/Cell.tokens.js.map +1 -1
- package/es/components/Cell/Cell.js +3 -0
- package/es/components/Cell/Cell.js.map +1 -1
- package/es/components/Cell/Cell.tokens.js +2 -3
- package/es/components/Cell/Cell.tokens.js.map +1 -1
- package/package.json +2 -2
- package/styled-components/cjs/components/Avatar/Avatar.template-doc.mdx +97 -0
- package/styled-components/cjs/components/AvatarGroup/AvatarGroup.template-doc.mdx +29 -0
- package/styled-components/cjs/components/Badge/Badge.template-doc.mdx +131 -0
- package/styled-components/cjs/components/Button/Button.template-doc.mdx +162 -0
- package/styled-components/cjs/components/ButtonGroup/ButtonGroup.template-doc.mdx +123 -0
- package/styled-components/cjs/components/Calendar/Calendar.template-doc.mdx +208 -0
- package/styled-components/cjs/components/Cell/Cell.js +3 -0
- package/styled-components/cjs/components/Cell/Cell.tokens.js +2 -3
- package/styled-components/cjs/components/Checkbox/Checkbox.template-doc.mdx +44 -0
- package/styled-components/cjs/components/Chip/Chip.template-doc.mdx +90 -0
- package/styled-components/cjs/components/Combobox/Combobox.template-doc.mdx +237 -0
- package/styled-components/cjs/components/Counter/Counter.template-doc.mdx +76 -0
- package/styled-components/cjs/components/Drawer/Drawer.template-doc.mdx +170 -0
- package/styled-components/cjs/components/Dropdown/Dropdown.template-doc.mdx +80 -0
- package/styled-components/cjs/components/Grid/Grid.template-doc.mdx +142 -0
- package/styled-components/cjs/components/Image/Image.template-doc.mdx +26 -0
- package/styled-components/cjs/components/Indicator/Indicator.template-doc.mdx +76 -0
- package/styled-components/cjs/components/Link/Link.template-doc.mdx +23 -0
- package/styled-components/cjs/components/Modal/Modal.template-doc.mdx +56 -0
- package/styled-components/cjs/components/Notification/Notification.template-doc.mdx +59 -0
- package/styled-components/cjs/components/Overlay/Overlay.template-doc.mdx +10 -0
- package/styled-components/cjs/components/Popover/Popover.template-doc.mdx +72 -0
- package/styled-components/cjs/components/Popup/Popup.template-doc.mdx +209 -0
- package/styled-components/cjs/components/Radiobox/Radiobox.template-doc.mdx +38 -0
- package/styled-components/cjs/components/Segment/Segment.template-doc.mdx +61 -0
- package/styled-components/cjs/components/Select/Select.template-doc.mdx +115 -0
- package/styled-components/cjs/components/Skeleton/Skeleton.template-doc.mdx +103 -0
- package/styled-components/cjs/components/Spinner/Spinner.template-doc.mdx +21 -0
- package/styled-components/cjs/components/Switch/Switch.template-doc.mdx +24 -0
- package/styled-components/cjs/components/Tabs/Tabs.template-doc.mdx +94 -0
- package/styled-components/cjs/components/TextArea/TextArea.template-doc.mdx +88 -0
- package/styled-components/cjs/components/TextField/TextField.template-doc.mdx +112 -0
- package/styled-components/cjs/components/Toast/Toast.template-doc.mdx +153 -0
- package/styled-components/cjs/components/Tooltip/Tooltip.template-doc.mdx +30 -0
- package/styled-components/cjs/components/Typography/Typography.template-doc.mdx +127 -0
- package/styled-components/cjs/examples/plasma_b2c/components/Cell/Cell.config.js +5 -5
- package/styled-components/cjs/examples/plasma_b2c/components/Cell/Cell.stories.tsx +16 -19
- package/styled-components/cjs/examples/plasma_web/components/Cell/Cell.config.js +5 -5
- package/styled-components/cjs/examples/plasma_web/components/Cell/Cell.stories.tsx +16 -19
- package/styled-components/es/components/Avatar/Avatar.template-doc.mdx +97 -0
- package/styled-components/es/components/AvatarGroup/AvatarGroup.template-doc.mdx +29 -0
- package/styled-components/es/components/Badge/Badge.template-doc.mdx +131 -0
- package/styled-components/es/components/Button/Button.template-doc.mdx +162 -0
- package/styled-components/es/components/ButtonGroup/ButtonGroup.template-doc.mdx +123 -0
- package/styled-components/es/components/Calendar/Calendar.template-doc.mdx +208 -0
- package/styled-components/es/components/Cell/Cell.js +3 -0
- package/styled-components/es/components/Cell/Cell.tokens.js +2 -3
- package/styled-components/es/components/Checkbox/Checkbox.template-doc.mdx +44 -0
- package/styled-components/es/components/Chip/Chip.template-doc.mdx +90 -0
- package/styled-components/es/components/Combobox/Combobox.template-doc.mdx +237 -0
- package/styled-components/es/components/Counter/Counter.template-doc.mdx +76 -0
- package/styled-components/es/components/Drawer/Drawer.template-doc.mdx +170 -0
- package/styled-components/es/components/Dropdown/Dropdown.template-doc.mdx +80 -0
- package/styled-components/es/components/Grid/Grid.template-doc.mdx +142 -0
- package/styled-components/es/components/Image/Image.template-doc.mdx +26 -0
- package/styled-components/es/components/Indicator/Indicator.template-doc.mdx +76 -0
- package/styled-components/es/components/Link/Link.template-doc.mdx +23 -0
- package/styled-components/es/components/Modal/Modal.template-doc.mdx +56 -0
- package/styled-components/es/components/Notification/Notification.template-doc.mdx +59 -0
- package/styled-components/es/components/Overlay/Overlay.template-doc.mdx +10 -0
- package/styled-components/es/components/Popover/Popover.template-doc.mdx +72 -0
- package/styled-components/es/components/Popup/Popup.template-doc.mdx +209 -0
- package/styled-components/es/components/Radiobox/Radiobox.template-doc.mdx +38 -0
- package/styled-components/es/components/Segment/Segment.template-doc.mdx +61 -0
- package/styled-components/es/components/Select/Select.template-doc.mdx +115 -0
- package/styled-components/es/components/Skeleton/Skeleton.template-doc.mdx +103 -0
- package/styled-components/es/components/Spinner/Spinner.template-doc.mdx +21 -0
- package/styled-components/es/components/Switch/Switch.template-doc.mdx +24 -0
- package/styled-components/es/components/Tabs/Tabs.template-doc.mdx +94 -0
- package/styled-components/es/components/TextArea/TextArea.template-doc.mdx +88 -0
- package/styled-components/es/components/TextField/TextField.template-doc.mdx +112 -0
- package/styled-components/es/components/Toast/Toast.template-doc.mdx +153 -0
- package/styled-components/es/components/Tooltip/Tooltip.template-doc.mdx +30 -0
- package/styled-components/es/components/Typography/Typography.template-doc.mdx +127 -0
- package/styled-components/es/examples/plasma_b2c/components/Cell/Cell.config.js +5 -5
- package/styled-components/es/examples/plasma_b2c/components/Cell/Cell.stories.tsx +16 -19
- package/styled-components/es/examples/plasma_web/components/Cell/Cell.config.js +5 -5
- package/styled-components/es/examples/plasma_web/components/Cell/Cell.stories.tsx +16 -19
- package/types/components/Cell/Cell.d.ts +4 -2
- package/types/components/Cell/Cell.d.ts.map +1 -1
- package/types/components/Cell/Cell.tokens.d.ts +0 -1
- package/types/components/Cell/Cell.tokens.d.ts.map +1 -1
- package/types/components/Cell/Cell.types.d.ts +5 -2
- package/types/components/Cell/Cell.types.d.ts.map +1 -1
- package/types/examples/plasma_b2c/components/Cell/Cell.d.ts +2 -1
- package/types/examples/plasma_b2c/components/Cell/Cell.d.ts.map +1 -1
- package/types/examples/plasma_web/components/Cell/Cell.d.ts +2 -1
- package/types/examples/plasma_web/components/Cell/Cell.d.ts.map +1 -1
@@ -0,0 +1,38 @@
|
|
1
|
+
---
|
2
|
+
id: radiobox
|
3
|
+
title: Radiobox
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# Radiobox
|
9
|
+
<Description name="Radiobox" />
|
10
|
+
<PropsTable name="Radiobox" exclude={['css', 'focused']} />
|
11
|
+
|
12
|
+
## Использование
|
13
|
+
Компонент `Radiobox` может содержать лейбл и описание.
|
14
|
+
|
15
|
+
По умолчанию, контент внутри лейбла и описания многострочный.
|
16
|
+
|
17
|
+
Для того чтобы стал однострочным, необходимо использовать свойство `singleLine`(по умолчанию `false`).
|
18
|
+
|
19
|
+
```tsx live
|
20
|
+
import React from 'react';
|
21
|
+
import { Radiobox } from '@salutejs/{{ package }}';
|
22
|
+
|
23
|
+
export function App() {
|
24
|
+
return (
|
25
|
+
<Radiobox label="Радиокнопка" description="Описание" defaultChecked />
|
26
|
+
);
|
27
|
+
}
|
28
|
+
```
|
29
|
+
|
30
|
+
## Группа радиокнопок
|
31
|
+
Компоненты `Radiobox` следует объединять в `RadioGroup`
|
32
|
+
```tsx live
|
33
|
+
<RadioGroup aria-labelledby="radiogroup-title-id">
|
34
|
+
<H3 id="radiogroup-title-id">Заголовок</H3>
|
35
|
+
<Radiobox name="radio-1" label="Радиокнопка 1" description="Описание 1" defaultChecked />
|
36
|
+
<Radiobox name="radio-1" label="Радиокнопка 2" description="Описание 2" />
|
37
|
+
</RadioGroup>
|
38
|
+
```
|
@@ -0,0 +1,61 @@
|
|
1
|
+
---
|
2
|
+
id: segment
|
3
|
+
title: Segment
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# Segment
|
9
|
+
Набор компонентов для создания группы сегментов.
|
10
|
+
Структура для сегментов похожа на структуру маркированных списков.
|
11
|
+
|
12
|
+
## SegmentGroup
|
13
|
+
|
14
|
+
<Description name="SegmentGroup" />
|
15
|
+
<PropsTable name="SegmentGroup" exclude={['css', 'selectedView']} />
|
16
|
+
|
17
|
+
## SegmentItem
|
18
|
+
|
19
|
+
<Description name="SegmentItem" />
|
20
|
+
<PropsTable name="SegmentItem" exclude={['css', 'filledBackground', 'disabled']} />
|
21
|
+
|
22
|
+
### Провайдер контекста
|
23
|
+
|
24
|
+
Оберните в `SegmentProvider` компонент, в котором будут использованы SegmentGroup с SegmentItem.
|
25
|
+
Внутри данного провайдера есть доступ к хуку `useSegment`.
|
26
|
+
|
27
|
+
```tsx live
|
28
|
+
import React, { useState } from 'react';
|
29
|
+
import { SegmentGroup, SegmentItem, SegmentProvider } from '@salutejs/{{ package }}';
|
30
|
+
|
31
|
+
export function App() {
|
32
|
+
const items = Array(8).fill(0);
|
33
|
+
|
34
|
+
const SegmentTemplate = () => {
|
35
|
+
const {selectedSegmentItems} = useSegment();
|
36
|
+
|
37
|
+
return (
|
38
|
+
<>
|
39
|
+
<div>Выбранные элементы: {selectedSegmentItems.join(', ')}</div>
|
40
|
+
<SegmentGroup view='filled' selectionMode='multiple' filledBackground pilled>
|
41
|
+
{items.map((_, i) => (
|
42
|
+
<SegmentItem
|
43
|
+
label={`Label ${i}`}
|
44
|
+
value={`label_${i}`}
|
45
|
+
key={`label_${i}`}
|
46
|
+
view='default'
|
47
|
+
pilled
|
48
|
+
/>
|
49
|
+
))}
|
50
|
+
</SegmentGroup>
|
51
|
+
</>
|
52
|
+
)
|
53
|
+
}
|
54
|
+
|
55
|
+
return (
|
56
|
+
<SegmentProvider>
|
57
|
+
<SegmentTemplate/>
|
58
|
+
</SegmentProvider>
|
59
|
+
);
|
60
|
+
}
|
61
|
+
```
|
@@ -0,0 +1,115 @@
|
|
1
|
+
---
|
2
|
+
id: select
|
3
|
+
title: Select
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# Select
|
9
|
+
<Description name="Select" />
|
10
|
+
<PropsTable name="Select" />
|
11
|
+
|
12
|
+
```tsx live
|
13
|
+
import React, { useState } from 'react';
|
14
|
+
import { Select } from '@salutejs/{{ package }}';
|
15
|
+
|
16
|
+
export function App() {
|
17
|
+
const items = [
|
18
|
+
{ value: 'each', label: 'Каждый' },
|
19
|
+
{ value: 'hunter', label: 'Охотник', isDisabled: true },
|
20
|
+
{ value: 'wants', label: 'Желает' },
|
21
|
+
{
|
22
|
+
value: 'toKnow',
|
23
|
+
label: 'Знать',
|
24
|
+
items: [
|
25
|
+
{ value: '_fullText', label: 'Каждый охотник желает знать, где сидит фазан' },
|
26
|
+
{ value: '_thePheasant', label: 'Фазан' },
|
27
|
+
{ value: '_is', label: 'Сидит' },
|
28
|
+
],
|
29
|
+
},
|
30
|
+
{ value: 'where', label: 'Где' },
|
31
|
+
{ value: 'is', label: 'Сидит' },
|
32
|
+
{ value: 'thePheasant', label: 'Фазан' },
|
33
|
+
{ value: 'fullText', label: 'Каждый охотник желает знать, где сидит фазан' },
|
34
|
+
];
|
35
|
+
|
36
|
+
const [value, setValue] = useState(null);
|
37
|
+
|
38
|
+
return (
|
39
|
+
<div style=\{{ maxWidth: '20rem' }}>
|
40
|
+
<div style=\{{ marginBottom: '1rem' }}>
|
41
|
+
<Select
|
42
|
+
value={value}
|
43
|
+
items={items}
|
44
|
+
onChange={(v) => {
|
45
|
+
setValue(v);
|
46
|
+
}}
|
47
|
+
placeholder="Выберите пример"
|
48
|
+
helperText="Заполните пример"
|
49
|
+
status="success"
|
50
|
+
/>
|
51
|
+
</div>
|
52
|
+
<div>
|
53
|
+
<Select value={null} items={[]} placeholder="Another select" />
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
);
|
57
|
+
}
|
58
|
+
```
|
59
|
+
|
60
|
+
### Управление высотой выпадающего меню
|
61
|
+
Что бы задать высоту и `scroll` для выпадающего меню можно использовать **props** для компонента `Select`:
|
62
|
+
- **listOverflow**
|
63
|
+
- **listHeight**
|
64
|
+
|
65
|
+
> Эти **props** необязательные, если их не указать будет использовано значение - [initial](https://developer.mozilla.org/en-US/docs/Web/CSS/initial)
|
66
|
+
|
67
|
+
```tsx live
|
68
|
+
import React, { useState, useCallback } from 'react';
|
69
|
+
import { Select, Modal, ModalsProvider, H3, Button } from '@salutejs/{{ package }}';
|
70
|
+
|
71
|
+
export function App() {
|
72
|
+
const [value, setValue] = useState(null);
|
73
|
+
const [isOpenA, setIsOpenA] = useState(false);
|
74
|
+
|
75
|
+
const onCloseA = useCallback(() => setIsOpenA(false), []);
|
76
|
+
|
77
|
+
const items = [
|
78
|
+
{ value: 'each', label: 'Каждый' },
|
79
|
+
{ value: 'hunter', label: 'Охотник', isDisabled: true },
|
80
|
+
{ value: 'wants', label: 'Желает' },
|
81
|
+
{
|
82
|
+
value: 'toKnow',
|
83
|
+
label: 'Знать',
|
84
|
+
items: [
|
85
|
+
{ value: '_fullText', label: 'Каждый охотник желает знать, где сидит фазан' },
|
86
|
+
{ value: '_thePheasant', label: 'Фазан' },
|
87
|
+
{ value: '_is', label: 'Сидит' },
|
88
|
+
],
|
89
|
+
},
|
90
|
+
{ value: 'where', label: 'Где' },
|
91
|
+
{ value: 'is', label: 'Сидит' },
|
92
|
+
{ value: 'thePheasant', label: 'Фазан' },
|
93
|
+
{ value: 'fullText', label: 'Каждый охотник желает знать, где сидит фазан' },
|
94
|
+
];
|
95
|
+
|
96
|
+
return (
|
97
|
+
<section>
|
98
|
+
<ModalsProvider>
|
99
|
+
<Button text="Open modal" onClick={() => setIsOpenA(true)} />
|
100
|
+
|
101
|
+
<Modal style=\{{ "height": "20rem" }} id="modalA" isOpen={isOpenA} onClose={onCloseA}>
|
102
|
+
<H3>Фильтр</H3>
|
103
|
+
<Select
|
104
|
+
value={value}
|
105
|
+
onChange={setValue}
|
106
|
+
items={items}
|
107
|
+
listHeight={11}
|
108
|
+
listOverflow="scroll"
|
109
|
+
/>
|
110
|
+
</Modal>
|
111
|
+
</ModalsProvider>
|
112
|
+
</section>
|
113
|
+
);
|
114
|
+
}
|
115
|
+
```
|
@@ -0,0 +1,103 @@
|
|
1
|
+
---
|
2
|
+
id: skeleton
|
3
|
+
title: Skeleton
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# Skeleton
|
9
|
+
Набор компонентов для создания скелетов загрузки (плейсхолдеров).
|
10
|
+
|
11
|
+
## LineSkeleton
|
12
|
+
<Description name="LineSkeleton" />
|
13
|
+
<PropsTable name="LineSkeleton" />
|
14
|
+
|
15
|
+
```tsx live
|
16
|
+
import React from 'react';
|
17
|
+
import { LineSkeleton } from '@salutejs/{{ package }}';
|
18
|
+
|
19
|
+
export function App() {
|
20
|
+
return (
|
21
|
+
<LineSkeleton size="headline3" />
|
22
|
+
);
|
23
|
+
}
|
24
|
+
```
|
25
|
+
|
26
|
+
## RectSkeleton
|
27
|
+
<Description name="RectSkeleton" />
|
28
|
+
<PropsTable name="RectSkeleton" />
|
29
|
+
|
30
|
+
```tsx live
|
31
|
+
import React from 'react';
|
32
|
+
import { RectSkeleton } from '@salutejs/{{ package }}';
|
33
|
+
|
34
|
+
export function App() {
|
35
|
+
return (
|
36
|
+
<RectSkeleton width="12rem" height="8rem" />
|
37
|
+
);
|
38
|
+
}
|
39
|
+
```
|
40
|
+
|
41
|
+
## TextSkeleton
|
42
|
+
<Description name="TextSkeleton" />
|
43
|
+
<PropsTable name="TextSkeleton" />
|
44
|
+
|
45
|
+
```tsx live
|
46
|
+
import React from 'react';
|
47
|
+
import { TextSkeleton } from '@salutejs/{{ package }}';
|
48
|
+
|
49
|
+
export function App() {
|
50
|
+
return (
|
51
|
+
<TextSkeleton size="paragraph1" lines={4} />
|
52
|
+
);
|
53
|
+
}
|
54
|
+
```
|
55
|
+
## На примере карточки
|
56
|
+
|
57
|
+
```tsx live
|
58
|
+
import React from 'react';
|
59
|
+
import { Button, withSkeleton } from '@salutejs/{{ package }}';
|
60
|
+
|
61
|
+
export function App() {
|
62
|
+
const ButtonSkeleton = withSkeleton(Button);
|
63
|
+
|
64
|
+
return (
|
65
|
+
<ButtonSkeleton
|
66
|
+
fullWidth
|
67
|
+
text="Загрузка..."
|
68
|
+
view="primary"
|
69
|
+
size="s"
|
70
|
+
scaleOnInteraction={false}
|
71
|
+
outlined={false}
|
72
|
+
skeleton={true}
|
73
|
+
tabIndex={-1}
|
74
|
+
/>
|
75
|
+
);
|
76
|
+
}
|
77
|
+
```
|
78
|
+
|
79
|
+
## Доступность
|
80
|
+
При использование хока `withSkeleton` необходимо воспользоваться атрибутами WAI ARIA. Пример с кнопкой:
|
81
|
+
|
82
|
+
```tsx
|
83
|
+
import React, { useState } from 'react';
|
84
|
+
import { Button } from '@salutejs/{{ package }}';
|
85
|
+
|
86
|
+
const ButtonSkeleton = withSkeleton<ButtonProps & WithSkeletonProps>(BasicButton);
|
87
|
+
|
88
|
+
export default function App () {
|
89
|
+
const [skeleton, setSkeleton] = useState(false);
|
90
|
+
|
91
|
+
return (
|
92
|
+
<ButtonSkeleton
|
93
|
+
type="button"
|
94
|
+
text={skeleton ? 'Загрузка' : 'Нажмите'}
|
95
|
+
skeleton={skeleton}
|
96
|
+
aria-busy={skeleton}
|
97
|
+
onClick={() => setSkeleton((prevValue) => !prevValue)}
|
98
|
+
/>
|
99
|
+
);
|
100
|
+
}
|
101
|
+
```
|
102
|
+
|
103
|
+
Таким образом, при `skeleton=true` и `aria-busy=true` скринридер будет оповещать о соответствующем статусе компонента.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
id: spinner
|
3
|
+
title: Spinner
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# Spinner
|
9
|
+
<Description name="Spinner" />
|
10
|
+
<PropsTable name="Spinner" exclude={['css', 'focused']}/>
|
11
|
+
|
12
|
+
```tsx live
|
13
|
+
import React from 'react';
|
14
|
+
import { Spinner } from '@salutejs/{{ package }}';
|
15
|
+
|
16
|
+
export function App() {
|
17
|
+
return (
|
18
|
+
<Spinner size={32} />
|
19
|
+
);
|
20
|
+
}
|
21
|
+
```
|
@@ -0,0 +1,24 @@
|
|
1
|
+
---
|
2
|
+
id: switch
|
3
|
+
title: Switch
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# Switch
|
9
|
+
<Description name="Switch" />
|
10
|
+
<PropsTable name="Switch" />
|
11
|
+
|
12
|
+
## Использование
|
13
|
+
Компонент `Switch` может содержать лейбл.
|
14
|
+
|
15
|
+
```tsx live
|
16
|
+
import React from 'react';
|
17
|
+
import { Switch } from '@salutejs/{{ package }}';
|
18
|
+
|
19
|
+
export function App() {
|
20
|
+
return (
|
21
|
+
<Switch label="Переключатель" defaultChecked />
|
22
|
+
);
|
23
|
+
}
|
24
|
+
```
|
@@ -0,0 +1,94 @@
|
|
1
|
+
---
|
2
|
+
id: tabs
|
3
|
+
title: Tabs
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# Tabs
|
9
|
+
Набор компонентов для создания вкладок.
|
10
|
+
Структура для вкладок похожа на структуру маркированных списков.
|
11
|
+
|
12
|
+
## TabsController
|
13
|
+
|
14
|
+
<Description name="TabsController" />
|
15
|
+
<PropsTable name="TabsController" />
|
16
|
+
|
17
|
+
## Tabs
|
18
|
+
|
19
|
+
<Description name="Tabs" />
|
20
|
+
<PropsTable name="Tabs" />
|
21
|
+
|
22
|
+
## TabItem
|
23
|
+
|
24
|
+
<Description name="TabItem" />
|
25
|
+
<PropsTable name="TabItem" />
|
26
|
+
|
27
|
+
|
28
|
+
## Использование
|
29
|
+
|
30
|
+
### Cтандартное подключение, без клавиатурной навигации
|
31
|
+
|
32
|
+
```tsx live
|
33
|
+
import React, { useState } from 'react';
|
34
|
+
import { Tabs, TabItem } from '@salutejs/{{ package }}';
|
35
|
+
import { IconClock } from '@salutejs/plasma-icons';
|
36
|
+
|
37
|
+
export function App() {
|
38
|
+
const items = Array(4).fill(0);
|
39
|
+
const [index, setIndex] = useState(0);
|
40
|
+
|
41
|
+
return (
|
42
|
+
<Tabs view="filled" stretch size="xs">
|
43
|
+
{items.map((_, i) => (
|
44
|
+
<TabItem
|
45
|
+
view="secondary"
|
46
|
+
key={`item:${i}`}
|
47
|
+
size="xs"
|
48
|
+
selected={i === index}
|
49
|
+
tabIndex={0}
|
50
|
+
contentLeft={<IconClock size="xs" color="inherit" />}
|
51
|
+
onClick={() => setIndex(i)}
|
52
|
+
>
|
53
|
+
Label
|
54
|
+
</TabItem>
|
55
|
+
))}
|
56
|
+
</Tabs>
|
57
|
+
);
|
58
|
+
}
|
59
|
+
```
|
60
|
+
|
61
|
+
### Подключение клавиатурной навигации
|
62
|
+
Для этого необходимо дополнительно прокинуть свойства `index, itemIndex, onIndexChange`.
|
63
|
+
Клавиши ArrowLeft, ArrowRight, Home, End для навигации по вкладкам.
|
64
|
+
|
65
|
+
```tsx live
|
66
|
+
import React, { useState } from 'react';
|
67
|
+
import { Tabs, TabItem } from '@salutejs/{{ package }}';
|
68
|
+
import { IconClock } from '@salutejs/plasma-icons';
|
69
|
+
|
70
|
+
export function App() {
|
71
|
+
const items = Array(4).fill(0);
|
72
|
+
const [index, setIndex] = useState(0);
|
73
|
+
|
74
|
+
return (
|
75
|
+
<Tabs view="filled" stretch size="xs" index={index}>
|
76
|
+
{items.map((_, i) => (
|
77
|
+
<TabItem
|
78
|
+
view="secondary"
|
79
|
+
key={`item:${i}`}
|
80
|
+
size="xs"
|
81
|
+
itemIndex={i}
|
82
|
+
onIndexChange={(i) => setIndex(i)}
|
83
|
+
selected={i === index}
|
84
|
+
tabIndex={0}
|
85
|
+
contentLeft={<IconClock size="xs" color="inherit" />}
|
86
|
+
onClick={() => setIndex(i)}
|
87
|
+
>
|
88
|
+
Label
|
89
|
+
</TabItem>
|
90
|
+
))}
|
91
|
+
</Tabs>
|
92
|
+
);
|
93
|
+
}
|
94
|
+
```
|
@@ -0,0 +1,88 @@
|
|
1
|
+
---
|
2
|
+
id: textarea
|
3
|
+
title: TextArea
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# TextArea
|
9
|
+
<Description name="TextArea" />
|
10
|
+
<PropsTable name="TextArea" exclude={['$isFocused']} />
|
11
|
+
|
12
|
+
## Использование
|
13
|
+
Компонент `TextArea` может содержать иконку (или кнопку) справа.
|
14
|
+
Для этого используйте свойство и `contentRight`:
|
15
|
+
|
16
|
+
```tsx live
|
17
|
+
import React from 'react';
|
18
|
+
import { TextArea } from '@salutejs/{{ package }}';
|
19
|
+
import { IconDownload } from '@salutejs/plasma-icons';
|
20
|
+
|
21
|
+
export function App() {
|
22
|
+
return (
|
23
|
+
<div>
|
24
|
+
<TextArea
|
25
|
+
placeholder="Положение иконки"
|
26
|
+
defaultValue="Справа"
|
27
|
+
contentRight={<IconDownload />}
|
28
|
+
/>
|
29
|
+
</div>
|
30
|
+
);
|
31
|
+
}
|
32
|
+
```
|
33
|
+
|
34
|
+
Также можно регулировать высоту и ширину, используя свойства `height` и `width`,
|
35
|
+
указав значения в `rem` или соответствующие свойствам css значения.
|
36
|
+
|
37
|
+
## Autoresize
|
38
|
+
Также можно включить автоматическое регулирование высоты поля ввода по длине контента внутри (параметра `value`).
|
39
|
+
Для этого необходимо использовать свойство `autoResize`.
|
40
|
+
При этом, если пользователь вручную регулирует высоту(`resize`), то она так и остается пользовательской.
|
41
|
+
|
42
|
+
В этом режиме можно указать крайние значения высоты поля ввода, используя свойства `autoMin`, `autoMax`,
|
43
|
+
указав их в `rem`.
|
44
|
+
|
45
|
+
```tsx live
|
46
|
+
import React from 'react';
|
47
|
+
import { TextArea } from '@salutejs/{{ package }}';
|
48
|
+
|
49
|
+
export function App() {
|
50
|
+
const [value, setValue] = React.useState('Значение');
|
51
|
+
|
52
|
+
return (
|
53
|
+
<div>
|
54
|
+
<TextArea
|
55
|
+
placeholder="Введите значение"
|
56
|
+
value={value}
|
57
|
+
onChange={(e) => {
|
58
|
+
setValue(e.target.value);
|
59
|
+
}}
|
60
|
+
autoResize
|
61
|
+
minAuto={3}
|
62
|
+
maxAuto={5}
|
63
|
+
/>
|
64
|
+
</div>
|
65
|
+
);
|
66
|
+
}
|
67
|
+
```
|
68
|
+
|
69
|
+
### Подсказка
|
70
|
+
Для вывода подсказки снизу от поля используйте свойство `leftHelper` и/или `rightHelper`.
|
71
|
+
|
72
|
+
```tsx live
|
73
|
+
import React from 'react';
|
74
|
+
import { TextArea } from '@salutejs/{{ package }}';
|
75
|
+
|
76
|
+
export function App() {
|
77
|
+
return (
|
78
|
+
<div>
|
79
|
+
<TextArea
|
80
|
+
placeholder="Введите значение"
|
81
|
+
defaultValue="Значение"
|
82
|
+
leftHelper="Подсказка снизу слева"
|
83
|
+
rightHelper="Подсказка снизу справа"
|
84
|
+
/>
|
85
|
+
</div>
|
86
|
+
);
|
87
|
+
}
|
88
|
+
```
|
@@ -0,0 +1,112 @@
|
|
1
|
+
---
|
2
|
+
id: textfield
|
3
|
+
title: TextField
|
4
|
+
---
|
5
|
+
|
6
|
+
import { PropsTable, Description } from '@site/src/components';
|
7
|
+
|
8
|
+
# TextField
|
9
|
+
<Description name="TextField" />
|
10
|
+
<PropsTable name="TextField" exclude={['$isFocused']} />
|
11
|
+
|
12
|
+
## Использование
|
13
|
+
Компонент `TextField` может содержать иконку (или кнопку) слева и справа.
|
14
|
+
Для этого используйте свойства `contentLeft` и `contentRight`:
|
15
|
+
|
16
|
+
```tsx live
|
17
|
+
import React from 'react';
|
18
|
+
import { TextField } from '@salutejs/{{ package }}';
|
19
|
+
import { IconDownload } from '@salutejs/plasma-icons';
|
20
|
+
|
21
|
+
export function App() {
|
22
|
+
return (
|
23
|
+
<div>
|
24
|
+
<TextField
|
25
|
+
placeholder="Положение иконки"
|
26
|
+
defaultValue="Слева"
|
27
|
+
contentLeft={<IconDownload />}
|
28
|
+
/>
|
29
|
+
<TextField
|
30
|
+
placeholder="Положение иконки"
|
31
|
+
defaultValue="Справа"
|
32
|
+
contentRight={<IconDownload />}
|
33
|
+
/>
|
34
|
+
</div>
|
35
|
+
);
|
36
|
+
}
|
37
|
+
```
|
38
|
+
|
39
|
+
### Размер поля
|
40
|
+
Размер поля задаётся с помощью свойства `size`. Свойство принимает значения `"l"` и `"m"`:
|
41
|
+
|
42
|
+
```tsx live
|
43
|
+
import React from 'react';
|
44
|
+
import { TextField } from '@salutejs/{{ package }}';
|
45
|
+
|
46
|
+
export function App() {
|
47
|
+
return (
|
48
|
+
<div>
|
49
|
+
<TextField
|
50
|
+
placeholder="Размер"
|
51
|
+
size="l"
|
52
|
+
defaultValue="L56"
|
53
|
+
/>
|
54
|
+
<TextField
|
55
|
+
placeholder="Размер"
|
56
|
+
size="m"
|
57
|
+
defaultValue="M48"
|
58
|
+
/>
|
59
|
+
</div>
|
60
|
+
);
|
61
|
+
}
|
62
|
+
```
|
63
|
+
|
64
|
+
### Статус поля
|
65
|
+
Статус поля задается с помощью свойства `status`. Возможные значения свойства: `success`, `warning` и `error`:
|
66
|
+
|
67
|
+
```tsx live
|
68
|
+
import React from 'react';
|
69
|
+
import { TextField } from '@salutejs/{{ package }}';
|
70
|
+
|
71
|
+
export function App() {
|
72
|
+
return (
|
73
|
+
<div>
|
74
|
+
<TextField
|
75
|
+
placeholder="Статус"
|
76
|
+
status="success"
|
77
|
+
defaultValue="Успех"
|
78
|
+
/>
|
79
|
+
<TextField
|
80
|
+
placeholder="Статус"
|
81
|
+
status="warning"
|
82
|
+
defaultValue="Успех"
|
83
|
+
/>
|
84
|
+
<TextField
|
85
|
+
placeholder="Статус"
|
86
|
+
status="error"
|
87
|
+
defaultValue="Ошибка"
|
88
|
+
/>
|
89
|
+
</div>
|
90
|
+
);
|
91
|
+
}
|
92
|
+
```
|
93
|
+
|
94
|
+
### Подсказка
|
95
|
+
Для вывода подсказки снизу от поля используйте свойство `helperText`:
|
96
|
+
|
97
|
+
```tsx live
|
98
|
+
import React from 'react';
|
99
|
+
import { TextField } from '@salutejs/{{ package }}';
|
100
|
+
|
101
|
+
export function App() {
|
102
|
+
return (
|
103
|
+
<div>
|
104
|
+
<TextField
|
105
|
+
placeholder="Введите значение"
|
106
|
+
defaultValue="Значение"
|
107
|
+
helperText="Подсказка снизу"
|
108
|
+
/>
|
109
|
+
</div>
|
110
|
+
);
|
111
|
+
}
|
112
|
+
```
|