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.
Files changed (65) hide show
  1. package/docs/BaseActionCard.md +24 -0
  2. package/docs/BaseDialog.md +109 -0
  3. package/docs/BigContainer.md +81 -0
  4. package/docs/BottomSheetsUi.md +55 -0
  5. package/docs/Button.md +48 -0
  6. package/docs/Card.md +130 -0
  7. package/docs/Checkbox.md +65 -0
  8. package/docs/Chip.md +54 -0
  9. package/docs/ColorField.md +89 -0
  10. package/docs/ColumnLayout.md +77 -0
  11. package/docs/ContentBox.md +122 -0
  12. package/docs/CopyButton.md +45 -0
  13. package/docs/DateField.md +59 -0
  14. package/docs/DayOfWeekField.md +94 -0
  15. package/docs/FAB.md +96 -0
  16. package/docs/GridLayout.md +67 -0
  17. package/docs/IconButton.md +55 -0
  18. package/docs/List.md +82 -0
  19. package/docs/Menu.md +161 -0
  20. package/docs/ModalTemplate.md +43 -0
  21. package/docs/MoreText.md +66 -0
  22. package/docs/NumberField.md +74 -0
  23. package/docs/Panel.md +46 -0
  24. package/docs/RadioButton.md +83 -0
  25. package/docs/ScrollContainer.md +43 -0
  26. package/docs/SegmentedButton.md +78 -0
  27. package/docs/SelectField.md +115 -0
  28. package/docs/SelectionDialog.md +121 -0
  29. package/docs/Slider.md +100 -0
  30. package/docs/Switch.md +90 -0
  31. package/docs/Tabs.md +74 -0
  32. package/docs/Text.md +118 -0
  33. package/docs/TextDialog.md +108 -0
  34. package/docs/TextInput.md +152 -0
  35. package/docs/TimeField.md +75 -0
  36. package/docs/img/BaseActionCard.png +0 -0
  37. package/docs/img/BaseDialog.png +0 -0
  38. package/docs/img/BottomSheetsUi.png +0 -0
  39. package/docs/img/Button.png +0 -0
  40. package/docs/img/Card.png +0 -0
  41. package/docs/img/Checkbox.png +0 -0
  42. package/docs/img/Chip.png +0 -0
  43. package/docs/img/ColorField.png +0 -0
  44. package/docs/img/ContentBox.png +0 -0
  45. package/docs/img/CopyButton.png +0 -0
  46. package/docs/img/DateField.png +0 -0
  47. package/docs/img/DayOfWeekField.png +0 -0
  48. package/docs/img/FAB.png +0 -0
  49. package/docs/img/IconButton.png +0 -0
  50. package/docs/img/List.png +0 -0
  51. package/docs/img/Menu.png +0 -0
  52. package/docs/img/MoreText.png +0 -0
  53. package/docs/img/NumberField.png +0 -0
  54. package/docs/img/Panel.png +0 -0
  55. package/docs/img/RadioButton.png +0 -0
  56. package/docs/img/SegmentedButton.png +0 -0
  57. package/docs/img/SelectField.png +0 -0
  58. package/docs/img/SelectionDialog.png +0 -0
  59. package/docs/img/Slider.png +0 -0
  60. package/docs/img/Switch.png +0 -0
  61. package/docs/img/Tabs.png +0 -0
  62. package/docs/img/TextDialog.png +0 -0
  63. package/docs/img/TextInput.png +0 -0
  64. package/docs/img/TimeField.png +0 -0
  65. package/package.json +4 -2
@@ -0,0 +1,24 @@
1
+ # Компонент BaseActionCard (Legacy)
2
+
3
+ Базовый компонент-контейнер для размещения действий (кнопок, ссылок и других интерактивных элементов).
4
+
5
+ ## Внешний вид
6
+
7
+ ![BaseActionCard](img/BaseActionCard.png)
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
+ ![BaseDialog](img/BaseDialog.png)
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
+ ![BottomSheetsUi](img/BottomSheetsUi.png)
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
+ ![Botton](img/Button.png)
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
+ ![Card](img/Card.png)
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-переменные для сохранения дизайн-системы
@@ -0,0 +1,65 @@
1
+ Вот документация для компонента `Checkbox`. Сохрани её в `Checkbox.md`:
2
+
3
+ ---
4
+
5
+ # Checkbox
6
+
7
+ `Checkbox` — это компонент для отображения чекбокса с поддержкой кастомных иконок, размеров и состояния.
8
+
9
+ ## Внешний вид
10
+
11
+ ![Checkbox](img/Checkbox.png)
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
+ ![Chips](img/Chip.png)
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
+ ![ColorField](img/ColorField.png)
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. **Учитывайте доступность** при выборе цветов по умолчанию