alex-evo-sh-ui-kit 1.1.2 → 1.1.3
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/docs/BaseActionCard.md +24 -0
- package/docs/BaseDialog.md +109 -0
- package/docs/BigContainer.md +81 -0
- package/docs/BottomSheetsUi.md +55 -0
- package/docs/Button.md +48 -0
- package/docs/Card.md +130 -0
- package/docs/Checkbox.md +65 -0
- package/docs/Chip.md +54 -0
- package/docs/ColorField.md +89 -0
- package/docs/ColumnLayout.md +77 -0
- package/docs/ContentBox.md +122 -0
- package/docs/CopyButton.md +45 -0
- package/docs/DateField.md +59 -0
- package/docs/DayOfWeekField.md +94 -0
- package/docs/FAB.md +96 -0
- package/docs/GridLayout.md +67 -0
- package/docs/IconButton.md +55 -0
- package/docs/List.md +82 -0
- package/docs/Menu.md +161 -0
- package/docs/ModalTemplate.md +43 -0
- package/docs/MoreText.md +66 -0
- package/docs/NumberField.md +74 -0
- package/docs/Panel.md +46 -0
- package/docs/RadioButton.md +83 -0
- package/docs/ScrollContainer.md +43 -0
- package/docs/SegmentedButton.md +78 -0
- package/docs/SelectField.md +115 -0
- package/docs/SelectionDialog.md +121 -0
- package/docs/Slider.md +100 -0
- package/docs/Switch.md +90 -0
- package/docs/Tabs.md +74 -0
- package/docs/Text.md +118 -0
- package/docs/TextDialog.md +108 -0
- package/docs/TextInput.md +152 -0
- package/docs/TimeField.md +75 -0
- package/docs/img/BaseActionCard.png +0 -0
- package/docs/img/BaseDialog.png +0 -0
- package/docs/img/BottomSheetsUi.png +0 -0
- package/docs/img/Button.png +0 -0
- package/docs/img/Card.png +0 -0
- package/docs/img/Checkbox.png +0 -0
- package/docs/img/Chip.png +0 -0
- package/docs/img/ColorField.png +0 -0
- package/docs/img/ContentBox.png +0 -0
- package/docs/img/CopyButton.png +0 -0
- package/docs/img/DateField.png +0 -0
- package/docs/img/DayOfWeekField.png +0 -0
- package/docs/img/FAB.png +0 -0
- package/docs/img/IconButton.png +0 -0
- package/docs/img/List.png +0 -0
- package/docs/img/Menu.png +0 -0
- package/docs/img/MoreText.png +0 -0
- package/docs/img/NumberField.png +0 -0
- package/docs/img/Panel.png +0 -0
- package/docs/img/RadioButton.png +0 -0
- package/docs/img/SegmentedButton.png +0 -0
- package/docs/img/SelectField.png +0 -0
- package/docs/img/SelectionDialog.png +0 -0
- package/docs/img/Slider.png +0 -0
- package/docs/img/Switch.png +0 -0
- package/docs/img/Tabs.png +0 -0
- package/docs/img/TextDialog.png +0 -0
- package/docs/img/TextInput.png +0 -0
- package/docs/img/TimeField.png +0 -0
- package/package.json +4 -2
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Компонент BaseActionCard (Legacy)
|
|
2
|
+
|
|
3
|
+
Базовый компонент-контейнер для размещения действий (кнопок, ссылок и других интерактивных элементов).
|
|
4
|
+
|
|
5
|
+
## Внешний вид
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Props (Свойства)
|
|
10
|
+
|
|
11
|
+
| Свойство | Тип | Описание | По умолчанию |
|
|
12
|
+
|----------|-----|----------|--------------|
|
|
13
|
+
| `children` | `React.ReactNode` | Дочерние элементы (обычно кнопки или другие интерактивные элементы) | - |
|
|
14
|
+
| `className` | `string` | Дополнительные CSS-классы для кастомизации | - |
|
|
15
|
+
|
|
16
|
+
## Пример использования
|
|
17
|
+
|
|
18
|
+
```jsx
|
|
19
|
+
<BaseActionCard className="custom-actions">
|
|
20
|
+
<Button>Сохранить</Button>
|
|
21
|
+
<Button variant="outlined">Отмена</Button>
|
|
22
|
+
<Link href="/help">Помощь</Link>
|
|
23
|
+
</BaseActionCard>
|
|
24
|
+
```
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Документация компонента BaseDialog
|
|
2
|
+
|
|
3
|
+
## Обзор
|
|
4
|
+
`BaseDialog` - это универсальный диалоговый компонент для отображения подтверждений, уведомлений и произвольного контента. Поддерживает стандартные и кастомные кнопки действий.
|
|
5
|
+
|
|
6
|
+
## Внешний вид
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
## Пропсы
|
|
11
|
+
|
|
12
|
+
### Основные пропсы
|
|
13
|
+
| Проп | Тип | По умолчанию | Описание |
|
|
14
|
+
|----------------------|-------------------------|--------------|-------------------------------------------------------------------------|
|
|
15
|
+
| `text` | string | - | Текст сообщения в диалоге |
|
|
16
|
+
| `header` | string | - | Заголовок диалога |
|
|
17
|
+
| `actionText` | string | "OK" | Текст на кнопке действия |
|
|
18
|
+
| `cancelText` | string | "Отмена" | Текст на кнопке отмены |
|
|
19
|
+
| `onSuccess` | function | - | Колбек при подтверждении |
|
|
20
|
+
| `onCancel` | function | - | Колбек при отмене |
|
|
21
|
+
| `onHide` | function | - | Колбек при закрытии (вызывается всегда) |
|
|
22
|
+
| `styleContainer` | React.CSSProperties | - | Стили контейнера диалога |
|
|
23
|
+
| `children` | React.ReactNode | - | Дополнительный контент вместо текста |
|
|
24
|
+
| `disableDefaultButtons` | boolean | false | Отключить стандартные кнопки |
|
|
25
|
+
| `customActions` | React.ReactNode | - | Кастомные кнопки действий |
|
|
26
|
+
|
|
27
|
+
## Примеры использования
|
|
28
|
+
|
|
29
|
+
### Простой диалог подтверждения
|
|
30
|
+
```jsx
|
|
31
|
+
<BaseDialog
|
|
32
|
+
header="Подтверждение удаления"
|
|
33
|
+
text="Вы уверены, что хотите удалить этот элемент?"
|
|
34
|
+
actionText="Удалить"
|
|
35
|
+
cancelText="Отменить"
|
|
36
|
+
onSuccess={handleDelete}
|
|
37
|
+
onCancel={handleCancel}
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Диалог с кастомным контентом
|
|
42
|
+
```jsx
|
|
43
|
+
<BaseDialog
|
|
44
|
+
header="Настройки"
|
|
45
|
+
onHide={closeDialog}
|
|
46
|
+
>
|
|
47
|
+
<div className="custom-content">
|
|
48
|
+
{/* Кастомный контент */}
|
|
49
|
+
</div>
|
|
50
|
+
</BaseDialog>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Диалог с кастомными кнопками
|
|
54
|
+
```jsx
|
|
55
|
+
<BaseDialog
|
|
56
|
+
header="Специальные действия"
|
|
57
|
+
text="Выберите действие:"
|
|
58
|
+
disableDefaultButtons
|
|
59
|
+
customActions={
|
|
60
|
+
<div className="custom-actions">
|
|
61
|
+
<Button onClick={action1}>Действие 1</Button>
|
|
62
|
+
<Button onClick={action2}>Действие 2</Button>
|
|
63
|
+
</div>
|
|
64
|
+
}
|
|
65
|
+
/>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Особенности работы
|
|
69
|
+
|
|
70
|
+
1. **Обработка событий**:
|
|
71
|
+
- `onSuccess` вызывается при подтверждении (клик по action кнопке)
|
|
72
|
+
- `onCancel` вызывается при отмене (клик по cancel кнопке)
|
|
73
|
+
- `onHide` вызывается в любом случае при закрытии диалога
|
|
74
|
+
|
|
75
|
+
2. **Кастомизация**:
|
|
76
|
+
- Можно полностью заменить стандартные кнопки через `customActions`
|
|
77
|
+
- Можно отключить стандартные кнопки (`disableDefaultButtons`)
|
|
78
|
+
- Поддерживается как простой текст (`text`), так и сложный контент (`children`)
|
|
79
|
+
|
|
80
|
+
3. **Композиция**:
|
|
81
|
+
- Использует `BasicTemplateDialog` как базовый шаблон
|
|
82
|
+
- Кнопки реализованы как отдельный компонент `BaseDialogButton`
|
|
83
|
+
|
|
84
|
+
## Рекомендации по использованию
|
|
85
|
+
|
|
86
|
+
1. Для простых подтверждений используйте пропсы `text`, `actionText`, `cancelText`
|
|
87
|
+
2. Для сложных сценариев используйте `children` и `customActions`
|
|
88
|
+
3. Всегда обрабатывайте `onHide` для корректного закрытия диалога
|
|
89
|
+
4. Для управления состоянием диалога используйте внешний стейт
|
|
90
|
+
|
|
91
|
+
```jsx
|
|
92
|
+
// Пример управления видимостью
|
|
93
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
94
|
+
|
|
95
|
+
const handleClose = () => setIsOpen(false);
|
|
96
|
+
|
|
97
|
+
return (
|
|
98
|
+
<>
|
|
99
|
+
<Button onClick={() => setIsOpen(true)}>Открыть диалог</Button>
|
|
100
|
+
{isOpen && (
|
|
101
|
+
<BaseDialog
|
|
102
|
+
header="Пример"
|
|
103
|
+
text="Пример сообщения"
|
|
104
|
+
onHide={handleClose}
|
|
105
|
+
/>
|
|
106
|
+
)}
|
|
107
|
+
</>
|
|
108
|
+
);
|
|
109
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Документация BigContainer
|
|
2
|
+
|
|
3
|
+
## Обзор
|
|
4
|
+
|
|
5
|
+
Компонент `BigContainer` представляет собой контейнер с возможностью перетаскивания содержимого с помощью средней кнопки мыши (обычно нажатие колесика).
|
|
6
|
+
|
|
7
|
+
## Основные возможности
|
|
8
|
+
|
|
9
|
+
- Перетаскивание содержимого средней кнопкой мыши
|
|
10
|
+
- Настраиваемые размеры контейнера
|
|
11
|
+
- Управление позицией через пропсы
|
|
12
|
+
- Опциональное отключение перетаскивания
|
|
13
|
+
|
|
14
|
+
## Пропсы
|
|
15
|
+
|
|
16
|
+
| Пропс | Тип | По умолчанию | Описание |
|
|
17
|
+
|-------|-----|-------------|-----------|
|
|
18
|
+
| `children` | `React.ReactNode` | - | Дочерние элементы для отображения внутри контейнера |
|
|
19
|
+
| `className` | `string` | `''` | Дополнительный CSS-класс для контейнера |
|
|
20
|
+
| `height` | `string` | `'100%'` | Высота контейнера |
|
|
21
|
+
| `width` | `string` | `'100%'` | Ширина контейнера |
|
|
22
|
+
| `id` | `string` | - | HTML-атрибут ID для контейнера |
|
|
23
|
+
| `pozMove` | `IPoint` | `{x:0,y:0}` | Начальная/управляемая позиция содержимого (координаты x, y) |
|
|
24
|
+
| `draggable` | `boolean` | `true` | Включает/отключает возможность перетаскивания |
|
|
25
|
+
|
|
26
|
+
## Типы
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
interface IPoint {
|
|
30
|
+
x: number; // координата по горизонтали
|
|
31
|
+
y: number; // координата по вертикали
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Примеры использования
|
|
36
|
+
|
|
37
|
+
### Базовое использование
|
|
38
|
+
|
|
39
|
+
```jsx
|
|
40
|
+
<BigContainer height="300px" width="500px">
|
|
41
|
+
<div style={{ padding: '20px' }}>
|
|
42
|
+
Содержимое, которое можно перетаскивать средней кнопкой мыши
|
|
43
|
+
</div>
|
|
44
|
+
</BigContainer>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### С начальной позицией
|
|
48
|
+
|
|
49
|
+
```jsx
|
|
50
|
+
<BigContainer
|
|
51
|
+
height="400px"
|
|
52
|
+
width="600px"
|
|
53
|
+
pozMove={{ x: 50, y: 50 }}
|
|
54
|
+
>
|
|
55
|
+
<div style={{ padding: '20px', backgroundColor: '#f0f0f0' }}>
|
|
56
|
+
Содержимое начинается с позиции (50, 50)
|
|
57
|
+
</div>
|
|
58
|
+
</BigContainer>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Без возможности перетаскивания
|
|
62
|
+
|
|
63
|
+
```jsx
|
|
64
|
+
<BigContainer
|
|
65
|
+
height="300px"
|
|
66
|
+
width="500px"
|
|
67
|
+
draggable={false}
|
|
68
|
+
>
|
|
69
|
+
<div style={{ padding: '20px' }}>
|
|
70
|
+
Это содержимое нельзя перетаскивать
|
|
71
|
+
</div>
|
|
72
|
+
</BigContainer>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Поведение компонента
|
|
76
|
+
|
|
77
|
+
- Отслеживает нажатие средней кнопки мыши (код кнопки 1)
|
|
78
|
+
- При начале перетаскивания курсор меняется на 'move'
|
|
79
|
+
- После окончания перетаскивания курсор возвращается в стандартное состояние
|
|
80
|
+
- Позиция содержимого может управляться извне через пропс `pozMove`
|
|
81
|
+
- Перетаскивание можно полностью отключить пропсом `draggable`
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# BottomSheetsUi
|
|
5
|
+
|
|
6
|
+
`BottomSheetsUi` — это компонент, реализующий выезжающее снизу модальное окно (Bottom Sheet) с возможностью закрытия через свайп или клик.
|
|
7
|
+
|
|
8
|
+
## Внешний вид
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
## Свойства
|
|
13
|
+
|
|
14
|
+
| Свойство | Тип | Описание |
|
|
15
|
+
|-----------|------------------------|------------------------------------------------------------------------------------------------------------|
|
|
16
|
+
| `onHide` | `() => void` | Колбэк, вызываемый при закрытии Bottom Sheet. |
|
|
17
|
+
| `visible` | `boolean` | Определяет, отображается ли Bottom Sheet. |
|
|
18
|
+
| `children` | `React.ReactNode` (необяз.) | Контент, который будет внутри Bottom Sheet. |
|
|
19
|
+
| `bottom` | `number` (необяз.) | Отступ снизу (по умолчанию `0`). |
|
|
20
|
+
|
|
21
|
+
## Использование
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { BottomSheetsUi } from "./BottomSheetsUi";
|
|
25
|
+
import { useState } from "react";
|
|
26
|
+
|
|
27
|
+
const App = () => {
|
|
28
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div>
|
|
32
|
+
<button onClick={() => setIsOpen(true)}>Открыть Bottom Sheet</button>
|
|
33
|
+
<BottomSheetsUi visible={isOpen} onHide={() => setIsOpen(false)}>
|
|
34
|
+
<div className="bottom-sheet-content">
|
|
35
|
+
<h2>Пример Bottom Sheet</h2>
|
|
36
|
+
<button onClick={() => setIsOpen(false)}>Закрыть</button>
|
|
37
|
+
</div>
|
|
38
|
+
</BottomSheetsUi>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default App;
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Описание логики
|
|
47
|
+
|
|
48
|
+
- **Закрытие Bottom Sheet**:
|
|
49
|
+
- При свайпе вниз (по `touchMove` или `mouseMove`).
|
|
50
|
+
- При переданном `onHide`, который вызывается с задержкой `200ms`.
|
|
51
|
+
- При изменении `visible` в `false`.
|
|
52
|
+
|
|
53
|
+
- **Анимация скрытия**:
|
|
54
|
+
- Класс `hide` применяется к `bottom-sheets`, плавно скрывая его.
|
|
55
|
+
|
package/docs/Button.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
# Button
|
|
4
|
+
|
|
5
|
+
`Button` — это универсальный компонент кнопки с поддержкой различных стилей.
|
|
6
|
+
|
|
7
|
+
## Внешний вид
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
## Свойства
|
|
12
|
+
|
|
13
|
+
| Свойство | Тип | Описание |
|
|
14
|
+
|-------------|----------------------------------|------------------------------------------------------------------------------------------------|
|
|
15
|
+
| `styleType` | `"outline" \| "text" \| "filledTotal" \| "filled" \| "base"` (необяз.) | Определяет стиль кнопки. По умолчанию `"base"`. |
|
|
16
|
+
| `...props` | `React.ButtonHTMLAttributes<HTMLButtonElement>` | Любые стандартные свойства кнопки (`onClick`, `disabled`, `className` и т. д.). |
|
|
17
|
+
|
|
18
|
+
## Использование
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { Button } from "./Button";
|
|
22
|
+
|
|
23
|
+
const App = () => (
|
|
24
|
+
<div>
|
|
25
|
+
<Button onClick={() => alert("Нажата базовая кнопка")}>Базовая</Button>
|
|
26
|
+
<Button styleType="outline">Обводка</Button>
|
|
27
|
+
<Button styleType="text">Текст</Button>
|
|
28
|
+
<Button styleType="filledTotal">Заливка (Total)</Button>
|
|
29
|
+
<Button styleType="filled">Заливка</Button>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export default App;
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Описание логики
|
|
37
|
+
|
|
38
|
+
- **Ripple-эффект:** При клике создается эффект волны (`btn-overlay`).
|
|
39
|
+
- **Различные стили кнопки:**
|
|
40
|
+
- `"base"` — стандартная кнопка.
|
|
41
|
+
- `"outline"` — с обводкой.
|
|
42
|
+
- `"text"` — текстовая кнопка без фона.
|
|
43
|
+
- `"filledTotal"` — залитая кнопка с другим цветом.
|
|
44
|
+
- `"filled"` — залитая кнопка основного цвета.
|
|
45
|
+
- **Обработчик `onClick`**:
|
|
46
|
+
- Добавляет `span.btn-overlay` для эффекта.
|
|
47
|
+
- Удаляет его через `500ms`.
|
|
48
|
+
|
package/docs/Card.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Документация компонента Card
|
|
2
|
+
|
|
3
|
+
## Обзор
|
|
4
|
+
|
|
5
|
+
Компонент `Card` представляет собой универсальную карточку с поддержкой различных вариантов отображения контента, состояний и взаимодействий.
|
|
6
|
+
|
|
7
|
+
## Внешний вид
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
## Пропсы
|
|
12
|
+
|
|
13
|
+
| Пропс | Тип | По умолчанию | Описание |
|
|
14
|
+
|------------------|-------------------------|---------------|----------|
|
|
15
|
+
| `action` | `React.ReactNode` | - | Элементы действий (кнопки и т.д.) |
|
|
16
|
+
| `imgSrc` | `string` | - | URL изображения |
|
|
17
|
+
| `alt` | `string` | - | Альтернативный текст изображения |
|
|
18
|
+
| `header` | `string` | - | Основной заголовок |
|
|
19
|
+
| `subhead` | `string` | - | Подзаголовок |
|
|
20
|
+
| `text` | `string` | - | Основной текст |
|
|
21
|
+
| `children` | `React.ReactNode` | - | Дочерние элементы |
|
|
22
|
+
| `iconButtonCell`| `React.ReactNode` | - | Иконка/кнопка в заголовке |
|
|
23
|
+
| `variant` | `'elevated'`, `'filled'`, `'outlined'` | `'elevated'` | Вариант стиля |
|
|
24
|
+
| `loading` | `boolean` | `false` | Состояние загрузки |
|
|
25
|
+
| `screenSize` | `ScreenSize` | - | Размер экрана для адаптации |
|
|
26
|
+
| `rootApp` | `string` | `'#root'` | CSS-селектор корневого элемента |
|
|
27
|
+
| `className` | `string` | - | Дополнительные классы |
|
|
28
|
+
| `onClick` | `(e: React.MouseEvent<HTMLDivElement>) => void` | - | Обработчик клика |
|
|
29
|
+
|
|
30
|
+
## Примеры использования
|
|
31
|
+
|
|
32
|
+
### Базовая карточка
|
|
33
|
+
|
|
34
|
+
```jsx
|
|
35
|
+
<Card
|
|
36
|
+
header="Заголовок"
|
|
37
|
+
text="Основное содержимое карточки"
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Карточка с изображением
|
|
42
|
+
|
|
43
|
+
```jsx
|
|
44
|
+
<Card
|
|
45
|
+
imgSrc="/path/to/image.jpg"
|
|
46
|
+
alt="Описание изображения"
|
|
47
|
+
header="Заголовок"
|
|
48
|
+
subhead="Подзаголовок"
|
|
49
|
+
text="Текст карточки"
|
|
50
|
+
variant="elevated"
|
|
51
|
+
/>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Карточка с действиями
|
|
55
|
+
|
|
56
|
+
```jsx
|
|
57
|
+
<Card
|
|
58
|
+
header="Карточка с действиями"
|
|
59
|
+
text="Выберите действие:"
|
|
60
|
+
action={
|
|
61
|
+
<>
|
|
62
|
+
<Button variant="text">Отмена</Button>
|
|
63
|
+
<Button>Подтвердить</Button>
|
|
64
|
+
</>
|
|
65
|
+
}
|
|
66
|
+
/>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Карточка в состоянии загрузки
|
|
70
|
+
|
|
71
|
+
```jsx
|
|
72
|
+
<Card
|
|
73
|
+
header="Загрузка данных"
|
|
74
|
+
loading={true}
|
|
75
|
+
/>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Кастомная карточка
|
|
79
|
+
|
|
80
|
+
```jsx
|
|
81
|
+
<Card variant="outlined">
|
|
82
|
+
<CustomChart />
|
|
83
|
+
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
84
|
+
<Typography type="body">Статистика</Typography>
|
|
85
|
+
<Button icon="refresh" variant="icon" />
|
|
86
|
+
</div>
|
|
87
|
+
</Card>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Варианты стилей
|
|
91
|
+
|
|
92
|
+
Компонент поддерживает три визуальных варианта:
|
|
93
|
+
|
|
94
|
+
1. **Elevated** (по умолчанию) - с тенью
|
|
95
|
+
```jsx
|
|
96
|
+
<Card variant="elevated" />
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
2. **Filled** - с заполненным фоном
|
|
100
|
+
```jsx
|
|
101
|
+
<Card variant="filled" />
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
3. **Outlined** - с границей
|
|
105
|
+
```jsx
|
|
106
|
+
<Card variant="outlined" />
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Состояние загрузки
|
|
110
|
+
|
|
111
|
+
При установке пропса `loading={true}` карточка отображает индикатор загрузки:
|
|
112
|
+
|
|
113
|
+
```jsx
|
|
114
|
+
<Card loading={true} header="Загрузка..." />
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Особенности работы
|
|
118
|
+
|
|
119
|
+
1. **Ripple-эффект**: При клике на карточку появляется анимация волны.
|
|
120
|
+
2. **Адаптивность**: Автоматически адаптируется к разным размерам экрана.
|
|
121
|
+
3. **Оптимизация**: Изображения загружаются с атрибутом `loading="lazy"`.
|
|
122
|
+
4. **Доступность**: Поддерживает правильную семантику и ARIA-атрибуты.
|
|
123
|
+
|
|
124
|
+
## Рекомендации
|
|
125
|
+
|
|
126
|
+
1. Всегда указывайте `alt` текст для изображений
|
|
127
|
+
2. Для групп карточек используйте одинаковый `variant`
|
|
128
|
+
3. Сочетайте с компонентом `Typography` для единообразия текстов
|
|
129
|
+
4. Используйте состояние `loading` при асинхронной загрузке данных
|
|
130
|
+
5. Кастомизируйте через CSS-переменные для сохранения дизайн-системы
|
package/docs/Checkbox.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
Вот документация для компонента `Checkbox`. Сохрани её в `Checkbox.md`:
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Checkbox
|
|
6
|
+
|
|
7
|
+
`Checkbox` — это компонент для отображения чекбокса с поддержкой кастомных иконок, размеров и состояния.
|
|
8
|
+
|
|
9
|
+
## Внешний вид
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## Свойства
|
|
14
|
+
|
|
15
|
+
| Свойство | Тип | Описание |
|
|
16
|
+
|-----------------|---------------------------------------|---------------------------------------------------------------------------------------------------|
|
|
17
|
+
| `checkIcon` | `React.ReactNode` (необяз.) | Кастомная иконка для отмеченного состояния (по умолчанию используется стандартная иконка `Check`). |
|
|
18
|
+
| `size` | `'small' | 'medium' | 'large'` (необяз.) | Размер чекбокса. По умолчанию `'medium'`. |
|
|
19
|
+
| `name` | `string` (необяз.) | Имя чекбокса, которое будет использоваться для передачи значения при отправке формы. |
|
|
20
|
+
| `checked` | `boolean` (необяз.) | Определяет, отмечен ли чекбокс. |
|
|
21
|
+
| `onChange` | `(e: React.ChangeEvent<HTMLInputElement>) => void` (необяз.) | Колбэк, вызываемый при изменении состояния чекбокса. |
|
|
22
|
+
| `readOnly` | `boolean` (необяз.) | Если `true`, чекбокс не может быть изменен. |
|
|
23
|
+
| `disabled` | `boolean` (необяз.) | Если `true`, чекбокс будет заблокирован. |
|
|
24
|
+
| `className` | `string` (необяз.) | Дополнительные классы для кастомизации стилей. |
|
|
25
|
+
|
|
26
|
+
## Использование
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { Checkbox } from "./Checkbox";
|
|
30
|
+
|
|
31
|
+
const App = () => {
|
|
32
|
+
const [checked, setChecked] = useState(false);
|
|
33
|
+
|
|
34
|
+
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
35
|
+
setChecked(e.target.checked);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<div>
|
|
40
|
+
<Checkbox
|
|
41
|
+
checked={checked}
|
|
42
|
+
onChange={handleChange}
|
|
43
|
+
size="large"
|
|
44
|
+
checkIcon={<CustomCheckIcon />}
|
|
45
|
+
/>
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Описание логики
|
|
52
|
+
|
|
53
|
+
- **Кастомная иконка:** Вы можете передать свою иконку для отмеченного состояния через свойство `checkIcon`.
|
|
54
|
+
- **Размер:** Чекбокс поддерживает 3 размера: `small`, `medium` и `large` (по умолчанию `medium`).
|
|
55
|
+
- **Состояние:** Чекбокс может быть в одном из следующих состояний:
|
|
56
|
+
- Отмечен (с помощью свойства `checked`).
|
|
57
|
+
- Заблокирован (с помощью свойства `disabled`).
|
|
58
|
+
- Только для чтения (с помощью свойства `readOnly`).
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
## Примечания
|
|
62
|
+
|
|
63
|
+
- Чекбокс использует `React.forwardRef` для передачи ссылки на элемент `input`, что позволяет работать с ним в родительских компонентах.
|
|
64
|
+
- Чекбокс поддерживает кастомные иконки для состояния "отмечено", и это поведение можно легко заменить.
|
|
65
|
+
|
package/docs/Chip.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
# Chips
|
|
3
|
+
|
|
4
|
+
`Chips` — это компонент для отображения чипсов (вкладок), с возможностью клика и удаления. Чипсы могут быть разных размеров и адаптироваться к различным экранам.
|
|
5
|
+
|
|
6
|
+
## Внешний вид
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
## Свойства
|
|
11
|
+
|
|
12
|
+
| Свойство | Тип | Описание |
|
|
13
|
+
|-----------------|-----------------------------------------|---------------------------------------------------------------------------------------------------|
|
|
14
|
+
| `text` | `string` | Текст, который будет отображаться внутри чипса. |
|
|
15
|
+
| `onClick` | `(e: React.MouseEvent<HTMLDivElement>) => void` (необяз.) | Обработчик клика по чипсу. |
|
|
16
|
+
| `onDelete` | `(e: React.MouseEvent<HTMLButtonElement>) => void` (необяз.) | Обработчик удаления чипса (появляется только если передан). |
|
|
17
|
+
| `big` | `boolean` (необяз.) | Если `true`, чипс будет большого размера. |
|
|
18
|
+
| `screenSize` | `ScreenSize` (необяз.) | Размер экрана для адаптивного отображения (например, для мобильных устройств). |
|
|
19
|
+
| `className` | `string` (необяз.) | Дополнительные классы для кастомизации стилей. |
|
|
20
|
+
|
|
21
|
+
## Использование
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { Chips } from "./Chips";
|
|
25
|
+
|
|
26
|
+
const App = () => {
|
|
27
|
+
const handleChipClick = () => {
|
|
28
|
+
console.log("Chip clicked");
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const handleDelete = () => {
|
|
32
|
+
console.log("Chip deleted");
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div>
|
|
37
|
+
<Chips
|
|
38
|
+
text="Example Chip"
|
|
39
|
+
onClick={handleChipClick}
|
|
40
|
+
onDelete={handleDelete}
|
|
41
|
+
big
|
|
42
|
+
/>
|
|
43
|
+
</div>
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Описание логики
|
|
49
|
+
|
|
50
|
+
- **Удаление чипса:** Когда чипс имеет обработчик `onDelete`, появляется кнопка для удаления. Клик по кнопке вызовет переданный колбэк.
|
|
51
|
+
- **Клик по чипсу:** Если передан `onClick`, чипс можно кликать. Он будет вести себя как кнопка и использовать роль `button` для доступности.
|
|
52
|
+
- **Размер чипса:** Чипсы поддерживают два размера: маленький и большой. Если передано свойство `big`, чипс будет отображаться в увеличенном размере.
|
|
53
|
+
- **Адаптивность:** Чипсы поддерживают изменение внешнего вида в зависимости от размера экрана, используя свойство `screenSize`.
|
|
54
|
+
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Документация компонента ColorField
|
|
2
|
+
|
|
3
|
+
## Обзор
|
|
4
|
+
|
|
5
|
+
Компонент `ColorField` представляет собой поле выбора цвета, которое позволяет пользователям:
|
|
6
|
+
- Просматривать текущий цвет
|
|
7
|
+
- Открывать диалоговое окно выбора цвета
|
|
8
|
+
- Выбирать из предустановленных цветов
|
|
9
|
+
- Добавлять новые цвета в свою палитру
|
|
10
|
+
|
|
11
|
+
## Внешний вид
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
## Пропсы
|
|
16
|
+
|
|
17
|
+
| Пропс | Тип | По умолчанию | Описание |
|
|
18
|
+
|-------|-----|--------------|----------|
|
|
19
|
+
| `value` | `string` | `"#f00"` | Текущее значение цвета в HEX-формате |
|
|
20
|
+
| `onChange` | `(value: string) => void` | - | Колбек при изменении цвета |
|
|
21
|
+
| `border` | `boolean` | `false` | Отображать рамку вокруг поля |
|
|
22
|
+
| `className` | `string` | `""` | Дополнительные CSS-классы |
|
|
23
|
+
| `container` | `HTMLElement \| null` | - | DOM-элемент для портала пикера цветов |
|
|
24
|
+
| `transparent` | `boolean` | `false` | Прозрачный фон поля |
|
|
25
|
+
| `placeholder` | `string` | - | Текст-заполнитель при отсутствии цвета |
|
|
26
|
+
| `userColors` | `string[]` | `[]` | Массив пользовательских цветов |
|
|
27
|
+
| `onAddColor` | `(colors: string[]) => void` | - | Колбек при добавлении нового цвета |
|
|
28
|
+
| `defaultColor` | `string` | - | Цвет по умолчанию в пикере |
|
|
29
|
+
|
|
30
|
+
## Примеры использования
|
|
31
|
+
|
|
32
|
+
### Базовое использование
|
|
33
|
+
|
|
34
|
+
```jsx
|
|
35
|
+
<ColorField
|
|
36
|
+
value="#3a86ff"
|
|
37
|
+
onChange={(color) => console.log(color)}
|
|
38
|
+
placeholder="Выберите цвет"
|
|
39
|
+
/>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### С рамкой и пользовательской палитрой
|
|
43
|
+
|
|
44
|
+
```jsx
|
|
45
|
+
<ColorField
|
|
46
|
+
border
|
|
47
|
+
userColors={['#ff0000', '#00ff00', '#0000ff']}
|
|
48
|
+
onAddColor={(colors) => saveColors(colors)}
|
|
49
|
+
/>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### С прозрачным фоном
|
|
53
|
+
|
|
54
|
+
```jsx
|
|
55
|
+
<ColorField
|
|
56
|
+
transparent
|
|
57
|
+
value="#ffffff"
|
|
58
|
+
onChange={handleColorChange}
|
|
59
|
+
/>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Поведение
|
|
63
|
+
|
|
64
|
+
1. **Отображение цвета**:
|
|
65
|
+
- Показывает текущий цвет в виде кружка
|
|
66
|
+
- Отображает HEX-значение рядом
|
|
67
|
+
|
|
68
|
+
2. **Пикер цвета**:
|
|
69
|
+
- Открывается по клику на любое место поля
|
|
70
|
+
- Использует портал для рендеринга вне текущей иерархии DOM
|
|
71
|
+
- Включает палитру пользовательских цветов (если предоставлена)
|
|
72
|
+
|
|
73
|
+
3. **Пользовательские цвета**:
|
|
74
|
+
- При наличии `userColors` показывает их для быстрого выбора
|
|
75
|
+
- При наличии `onAddColor` позволяет сохранять новые цвета
|
|
76
|
+
|
|
77
|
+
## Доступность
|
|
78
|
+
|
|
79
|
+
- Кружок цвета имеет `aria-label="Current color"`
|
|
80
|
+
- Иконка палитры имеет `aria-label="Open color picker"`
|
|
81
|
+
- Цвет текста автоматически контрастирует через хелпер `getTextColor`
|
|
82
|
+
|
|
83
|
+
## Рекомендации
|
|
84
|
+
|
|
85
|
+
1. **Указывайте цвет по умолчанию** для необязательных полей
|
|
86
|
+
2. **Используйте пропс container** для правильного позиционирования в модальных окнах
|
|
87
|
+
3. **Реализуйте onAddColor** для сохранения пользовательских цветов
|
|
88
|
+
4. **Добавляйте placeholder** для лучшего UX
|
|
89
|
+
5. **Учитывайте доступность** при выборе цветов по умолчанию
|