skillgrid 0.0.21 → 0.0.22-dev-31782-avatar.1141064
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/dist/components/Avatar/Avatar.type.d.ts +5 -2
- package/dist/components/Avatar/lib/get-avatar-border-radius-by-size-and-shape.d.ts +5 -0
- package/dist/components/Button/Button.d.ts +2 -3
- package/dist/components/Checkbox/Checkbox.d.ts +18 -0
- package/dist/components/Checkbox/Checkbox.type.d.ts +90 -0
- package/dist/components/Checkbox/assets/CheckIcon.d.ts +16 -0
- package/dist/components/Checkbox/assets/LineIcon.d.ts +16 -0
- package/dist/components/Checkbox/index.d.ts +2 -0
- package/dist/components/Helper/Helper.d.ts +7 -0
- package/dist/components/Helper/Helper.type.d.ts +17 -0
- package/dist/components/Helper/index.d.ts +2 -0
- package/dist/components/InputBase/Input.d.ts +9 -0
- package/dist/components/InputBase/Input.type.d.ts +138 -0
- package/dist/components/InputBase/InputBase.d.ts +6 -0
- package/dist/components/InputBase/InputBase.type.d.ts +110 -0
- package/dist/components/InputBase/assets/GripIcon.d.ts +8 -0
- package/dist/components/InputBase/assets/SearchIcon.d.ts +17 -0
- package/dist/components/InputBase/assets/XIcon.d.ts +18 -0
- package/dist/components/InputBase/assets/index.d.ts +3 -0
- package/dist/components/InputBase/index.d.ts +3 -0
- package/dist/components/InputBase/lib/constants.d.ts +4 -0
- package/dist/components/InputBase/lib/index.d.ts +4 -0
- package/dist/components/InputBase/lib/useGripResize.d.ts +11 -0
- package/dist/components/InputBase/lib/useInputSync.d.ts +11 -0
- package/dist/components/InputBase/lib/useTextareaResize.d.ts +9 -0
- package/dist/components/List/List.d.ts +5 -0
- package/dist/components/List/List.type.d.ts +34 -0
- package/dist/components/List/ListItem/ListItem.d.ts +9 -0
- package/dist/components/List/index.d.ts +2 -0
- package/dist/components/TextArea/TextArea.d.ts +6 -0
- package/dist/components/TextArea/TextArea.type.d.ts +66 -0
- package/dist/components/TextArea/index.d.ts +2 -0
- package/dist/components/TextArea/lib/constants.d.ts +65 -0
- package/dist/components/TextArea/lib/getters.d.ts +38 -0
- package/dist/components/TextArea/lib/index.d.ts +2 -0
- package/dist/components/TextInput/TextInput.d.ts +6 -0
- package/dist/components/TextInput/TextInput.type.d.ts +72 -0
- package/dist/components/TextInput/index.d.ts +2 -0
- package/dist/components/TextInput/lib/constants.d.ts +9 -0
- package/dist/components/TextInput/lib/getters.d.ts +38 -0
- package/dist/components/TextInput/lib/index.d.ts +2 -0
- package/dist/components/Typography/Typography.constants.d.ts +2 -0
- package/dist/components/Typography/Typography.d.ts +21 -0
- package/dist/components/Typography/Typography.type.d.ts +68 -0
- package/dist/components/Typography/index.d.ts +1 -0
- package/dist/index.cjs.js +11 -11
- package/dist/index.css +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.es.js +1208 -886
- package/dist/utils/other.d.ts +8 -0
- package/package.json +3 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentPropsWithoutRef, CSSProperties, FC, HTMLProps, MouseEvent } from 'react';
|
|
1
|
+
import { ComponentPropsWithoutRef, CSSProperties, FC, HTMLProps, MouseEvent, PropsWithChildren } from 'react';
|
|
2
2
|
/** Типы режимов отображения аватара */
|
|
3
3
|
export type AvatarModeType = 'image' | 'icon' | 'name' | 'placeholder';
|
|
4
4
|
type CommonEventsType = 'onClick' | 'onFocus' | 'onBlur' | 'onPointerDown' | 'onPointerUp' | 'onPointerEnter' | 'onPointerLeave' | 'onPointerCancel' | 'onPointerOut' | 'onPointerOver';
|
|
@@ -67,12 +67,15 @@ export interface AvatarProps extends Pick<HTMLProps<HTMLSpanElement>, 'className
|
|
|
67
67
|
*/
|
|
68
68
|
'data-testid'?: string;
|
|
69
69
|
}
|
|
70
|
+
interface AvatarGroupItem extends Omit<AvatarProps, 'size' | 'shape'> {
|
|
71
|
+
wrapper?: FC<PropsWithChildren>;
|
|
72
|
+
}
|
|
70
73
|
/**
|
|
71
74
|
* Пропсы компонента AvatarGroup
|
|
72
75
|
*/
|
|
73
76
|
export interface AvatarGroupProps {
|
|
74
77
|
/** Массив аватаров для отображения */
|
|
75
|
-
avatars:
|
|
78
|
+
avatars: AvatarGroupItem[];
|
|
76
79
|
/** Размер аватаров в группе */
|
|
77
80
|
size?: AvatarProps['size'];
|
|
78
81
|
/** Форма аватаров */
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { AvatarProps } from '../Avatar.type';
|
|
2
|
+
/**
|
|
3
|
+
* NOTE: This logic is duplicated from Avatar.module.css.
|
|
4
|
+
* If you change the border-radius there, change it here too.
|
|
5
|
+
* This is necessary for calculating the clipPath in AvatarGroup.
|
|
6
|
+
*/
|
|
2
7
|
declare function getAvatarBorderRadiusBySizeAndShape(size: number, shape: AvatarProps['shape']): number;
|
|
3
8
|
export { getAvatarBorderRadiusBySizeAndShape };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { default as React } from 'react';
|
|
2
1
|
import { ButtonProps } from './Button.type';
|
|
3
2
|
/**
|
|
4
3
|
* Button component for user interactions
|
|
@@ -9,6 +8,6 @@ import { ButtonProps } from './Button.type';
|
|
|
9
8
|
* <Button mode="primary" size="medium" buttonStyle="accent">Click me</Button>
|
|
10
9
|
* ```
|
|
11
10
|
*/
|
|
12
|
-
export declare const Button:
|
|
11
|
+
export declare const Button: import('react').ForwardRefExoticComponent<(ButtonProps & {
|
|
13
12
|
style?: React.CSSProperties;
|
|
14
|
-
}) &
|
|
13
|
+
}) & import('react').RefAttributes<HTMLButtonElement | HTMLAnchorElement>>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { CheckboxProps } from './Checkbox.type';
|
|
2
|
+
/**
|
|
3
|
+
* Checkbox компонент для user interactions
|
|
4
|
+
*
|
|
5
|
+
* @component
|
|
6
|
+
* @example
|
|
7
|
+
* ```tsx
|
|
8
|
+
* <Checkbox
|
|
9
|
+
* name="agree"
|
|
10
|
+
* value={checked}
|
|
11
|
+
* onChange={setChecked}
|
|
12
|
+
* size="medium"
|
|
13
|
+
* >
|
|
14
|
+
* Я согласен с условиями
|
|
15
|
+
* </Checkbox>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare const Checkbox: import('react').ForwardRefExoticComponent<CheckboxProps & import('react').RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ChangeEvent, CSSProperties, ReactNode } from 'react';
|
|
2
|
+
export interface CheckboxIconProps {
|
|
3
|
+
/** Имя чекбокса для идентификации */
|
|
4
|
+
name: string;
|
|
5
|
+
/** Размер иконки чекбокса */
|
|
6
|
+
size: 'medium' | 'large';
|
|
7
|
+
/** Состояние - выбран ли чекбокс */
|
|
8
|
+
isChecked: boolean;
|
|
9
|
+
/** Состояние - заблокирован ли чекбокс */
|
|
10
|
+
isDisabled: boolean;
|
|
11
|
+
/** Состояние - неопределенное состояние чекбокса */
|
|
12
|
+
indeterminate: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface CheckboxProps {
|
|
15
|
+
/**
|
|
16
|
+
* Уникальное имя чекбокса, значение для id тэга input
|
|
17
|
+
*/
|
|
18
|
+
name: string;
|
|
19
|
+
/**
|
|
20
|
+
* Текущее значение чекбокса
|
|
21
|
+
* - true - отмеченный чекбокс
|
|
22
|
+
* - false - не отмеченный чекбокс
|
|
23
|
+
* Если не передан, используется внутреннее состояние
|
|
24
|
+
*/
|
|
25
|
+
value?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Размер чекбокса
|
|
28
|
+
* @default 'medium'
|
|
29
|
+
*/
|
|
30
|
+
size?: 'medium' | 'large';
|
|
31
|
+
/**
|
|
32
|
+
* Неопределенный вариант (показывает line-icon вместо check-icon)
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
indeterminate?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Загрузка (чекбокс становится неактивным)
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
loading?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Сообщение об ошибке
|
|
43
|
+
*/
|
|
44
|
+
error?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Дизейбл чекбокса
|
|
47
|
+
* @default false
|
|
48
|
+
*/
|
|
49
|
+
disabled?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Дополнительные CSS классы для контейнера
|
|
52
|
+
*/
|
|
53
|
+
containerClassName?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Дополнительные CSS классы для чекбокса
|
|
56
|
+
*/
|
|
57
|
+
className?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Дополнительные CSS стили для контейнера
|
|
60
|
+
*/
|
|
61
|
+
containerStyle?: CSSProperties;
|
|
62
|
+
/**
|
|
63
|
+
* Дополнительные CSS стили для чекбокса
|
|
64
|
+
*/
|
|
65
|
+
style?: CSSProperties;
|
|
66
|
+
/**
|
|
67
|
+
* Вложенный компонент справа от чекбокса (label)
|
|
68
|
+
*/
|
|
69
|
+
children?: ReactNode;
|
|
70
|
+
/**
|
|
71
|
+
* Делать ли весь элемент (включая label) кликабельным
|
|
72
|
+
* @default true
|
|
73
|
+
*/
|
|
74
|
+
clickableLabel?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Tab index для навигации
|
|
77
|
+
*/
|
|
78
|
+
tabIndex?: number;
|
|
79
|
+
/**
|
|
80
|
+
* Обработчик изменения состояния чекбокса
|
|
81
|
+
* @param checked - boolean, текущее состояние чекбокса
|
|
82
|
+
* @param e - ChangeEvent<HTMLInputElement>, ивент нажатия на инпут
|
|
83
|
+
* Если не передан, используется внутреннее состояние
|
|
84
|
+
*/
|
|
85
|
+
onChange?: (checked: boolean, e?: ChangeEvent<HTMLInputElement>) => void;
|
|
86
|
+
/**
|
|
87
|
+
* Идентификатор для тестирования
|
|
88
|
+
*/
|
|
89
|
+
'data-testid'?: string;
|
|
90
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface IconProps {
|
|
2
|
+
/** Ширина иконки */
|
|
3
|
+
width?: number;
|
|
4
|
+
/** Высота иконки */
|
|
5
|
+
height?: number;
|
|
6
|
+
/** Дополнительные CSS классы */
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Цвет иконки */
|
|
9
|
+
color?: string;
|
|
10
|
+
/** Дополнительные пропсы */
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Компонент иконки CheckIcon для чекбокса
|
|
15
|
+
*/
|
|
16
|
+
export declare const CheckIcon: React.FC<IconProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface IconProps {
|
|
2
|
+
/** Ширина иконки */
|
|
3
|
+
width?: number;
|
|
4
|
+
/** Высота иконки */
|
|
5
|
+
height?: number;
|
|
6
|
+
/** Дополнительные CSS классы */
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Цвет иконки */
|
|
9
|
+
color?: string;
|
|
10
|
+
/** Дополнительные пропсы */
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Компонент иконки LineIcon для indeterminate состояния чекбокса
|
|
15
|
+
*/
|
|
16
|
+
export declare const LineIcon: React.FC<IconProps>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { HelperProps } from './Helper.type';
|
|
2
|
+
/**
|
|
3
|
+
* Компонент Helper для отображения вспомогательного текста
|
|
4
|
+
* Может использоваться как самостоятельно, так и в составе других компонентов или групп компонентов
|
|
5
|
+
* При наличии ошибки отображается текст error, иначе отображается title
|
|
6
|
+
*/
|
|
7
|
+
export declare const Helper: React.FC<HelperProps>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface HelperProps {
|
|
2
|
+
/** Заголовок/описание (обязательный) */
|
|
3
|
+
title: string;
|
|
4
|
+
/** Сообщение об ошибке (опциональный) */
|
|
5
|
+
error?: string;
|
|
6
|
+
/** Дополнительные CSS классы */
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Дополнительные стили */
|
|
9
|
+
style?: React.CSSProperties;
|
|
10
|
+
/** Заблокированное состояние */
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
/** ID для тестирования */
|
|
13
|
+
'data-testid'?: string;
|
|
14
|
+
/** ARIA-атрибуты */
|
|
15
|
+
'aria-label'?: string;
|
|
16
|
+
'aria-describedby'?: string;
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InputProps, InputWrapperProps } from './Input.type';
|
|
2
|
+
/**
|
|
3
|
+
* Compound компонент Input
|
|
4
|
+
* ! ВНИМАНИЕ: Это внутренний компонент, используемый только в InputBase.
|
|
5
|
+
* Не предназначен для прямого использования в приложениях.
|
|
6
|
+
*/
|
|
7
|
+
export declare const Input: import('react').ForwardRefExoticComponent<Omit<InputProps, "ref"> & import('react').RefAttributes<HTMLInputElement | HTMLTextAreaElement>> & {
|
|
8
|
+
Wrapper: import('react').ForwardRefExoticComponent<InputWrapperProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
9
|
+
};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Тип компонента для Input
|
|
4
|
+
*/
|
|
5
|
+
export type InputComponent = 'input' | 'textarea';
|
|
6
|
+
/**
|
|
7
|
+
* Размер компонента Input
|
|
8
|
+
*/
|
|
9
|
+
export type InputSize = 'small' | 'medium' | 'large';
|
|
10
|
+
/**
|
|
11
|
+
* Размер компонента InputWrapper
|
|
12
|
+
*/
|
|
13
|
+
export type InputWrapperSize = 'small' | 'medium' | 'large';
|
|
14
|
+
/**
|
|
15
|
+
* Пропсы для компонента Input
|
|
16
|
+
*/
|
|
17
|
+
export interface InputProps {
|
|
18
|
+
/** Тип компонента (input или textarea) */
|
|
19
|
+
component?: InputComponent;
|
|
20
|
+
/** Размер компонента */
|
|
21
|
+
size?: InputSize;
|
|
22
|
+
/** Значение поля */
|
|
23
|
+
value?: string;
|
|
24
|
+
/** Плейсхолдер */
|
|
25
|
+
placeholder?: string;
|
|
26
|
+
/** Отключенное состояние */
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
/** Состояние загрузки */
|
|
29
|
+
loading?: boolean;
|
|
30
|
+
/** Обработчик фокуса */
|
|
31
|
+
onFocus?: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
32
|
+
/** Обработчик потери фокуса */
|
|
33
|
+
onBlur?: (e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
34
|
+
/** Обработчик изменения */
|
|
35
|
+
onChange?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
36
|
+
/** Обработчик нажатия клавиши */
|
|
37
|
+
onKeyUp?: (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
38
|
+
/** Максимальная длина */
|
|
39
|
+
maxLength?: number;
|
|
40
|
+
/** CSS классы */
|
|
41
|
+
className?: string;
|
|
42
|
+
/** Инлайн стили */
|
|
43
|
+
style?: React.CSSProperties;
|
|
44
|
+
/** Включить обрезку текста */
|
|
45
|
+
truncate?: boolean;
|
|
46
|
+
/** Показывать ли плавающий лейбл */
|
|
47
|
+
shouldShowFloatingLabelClass?: boolean;
|
|
48
|
+
/** Состояние ошибки для accessibility */
|
|
49
|
+
'aria-invalid'?: boolean;
|
|
50
|
+
/** ID элемента с сообщением об ошибке для accessibility */
|
|
51
|
+
'aria-errormessage'?: string;
|
|
52
|
+
/** ID элемента */
|
|
53
|
+
id?: string;
|
|
54
|
+
/** Тип изменения размера для textarea */
|
|
55
|
+
resize?: 'fill' | 'hug' | 'fixed';
|
|
56
|
+
/** Показывать ли grip для изменения размера */
|
|
57
|
+
showGrip?: boolean;
|
|
58
|
+
/** Дополнительные пропсы для input */
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Пропсы для компонента InputWrapper
|
|
63
|
+
*/
|
|
64
|
+
export interface InputWrapperProps extends Omit<HTMLAttributes<HTMLDivElement>, 'prefix'> {
|
|
65
|
+
/** Дочерние элементы (Input компонент) */
|
|
66
|
+
children?: React.ReactNode;
|
|
67
|
+
/** Размер компонента */
|
|
68
|
+
size?: InputWrapperSize;
|
|
69
|
+
/** Состояние ошибки */
|
|
70
|
+
error?: boolean;
|
|
71
|
+
/** Отключенное состояние */
|
|
72
|
+
disabled?: boolean;
|
|
73
|
+
/** Состояние загрузки */
|
|
74
|
+
loading?: boolean;
|
|
75
|
+
/** CSS классы */
|
|
76
|
+
className?: string;
|
|
77
|
+
/** Пропсы для обертки */
|
|
78
|
+
wrapperProps?: HTMLAttributes<HTMLDivElement>;
|
|
79
|
+
/** Стили для обертки */
|
|
80
|
+
wrapperStyles?: React.CSSProperties;
|
|
81
|
+
/** Стили для плавающей метки */
|
|
82
|
+
floatingLabelStyles?: React.CSSProperties;
|
|
83
|
+
/** Стили для префикса */
|
|
84
|
+
prefixStyles?: React.CSSProperties;
|
|
85
|
+
/** Стили для суффикса */
|
|
86
|
+
suffixStyles?: React.CSSProperties;
|
|
87
|
+
/** Пропсы для метки */
|
|
88
|
+
labelProps?: HTMLAttributes<HTMLLabelElement>;
|
|
89
|
+
/** Пропсы для вспомогательного текста */
|
|
90
|
+
helperProps?: HTMLAttributes<HTMLDivElement>;
|
|
91
|
+
/** Показывать ли счетчик символов */
|
|
92
|
+
showLimit?: boolean;
|
|
93
|
+
/** Максимальная длина */
|
|
94
|
+
maxLength?: number;
|
|
95
|
+
/** Подсказка внутри поля ввода */
|
|
96
|
+
hint?: string;
|
|
97
|
+
/** Показывать ли подсказку */
|
|
98
|
+
showHint?: boolean;
|
|
99
|
+
/** Показывать подсказку когда значение пустое */
|
|
100
|
+
showHintOnEmpty?: boolean;
|
|
101
|
+
/** Префикс (иконка слева) */
|
|
102
|
+
prefix?: React.ReactNode;
|
|
103
|
+
/** Суффикс (иконка справа) */
|
|
104
|
+
suffix?: React.ReactNode;
|
|
105
|
+
/** Плейсхолдер для поля */
|
|
106
|
+
placeholder?: string;
|
|
107
|
+
/** Показывать ли метку */
|
|
108
|
+
showLabel?: boolean;
|
|
109
|
+
/** CSS классы для плавающей метки */
|
|
110
|
+
labelClassName?: string;
|
|
111
|
+
/** Есть ли значение в поле */
|
|
112
|
+
hasValue?: boolean;
|
|
113
|
+
/** Вспомогательный текст под полем */
|
|
114
|
+
helper?: string;
|
|
115
|
+
/** ID компонента */
|
|
116
|
+
id?: string;
|
|
117
|
+
/** Значение поля (для подсчета символов) */
|
|
118
|
+
value?: string;
|
|
119
|
+
/** Состояние ошибки для accessibility */
|
|
120
|
+
'aria-invalid'?: boolean;
|
|
121
|
+
/** ID элемента с сообщением об ошибке для accessibility */
|
|
122
|
+
'aria-errormessage'?: string;
|
|
123
|
+
/** Тип изменения размера для textarea */
|
|
124
|
+
resize?: 'fill' | 'hug' | 'fixed';
|
|
125
|
+
/** Показывать ли grip для изменения размера */
|
|
126
|
+
showGrip?: boolean;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Типы для Input compound компонента
|
|
130
|
+
*/
|
|
131
|
+
export type InputComponentType = InputComponent;
|
|
132
|
+
export type InputSizeType = InputSize;
|
|
133
|
+
export type InputPropsType = InputProps;
|
|
134
|
+
/**
|
|
135
|
+
* Типы для Input.Wrapper
|
|
136
|
+
*/
|
|
137
|
+
export type InputWrapperSizeType = InputWrapperSize;
|
|
138
|
+
export type InputWrapperPropsType = InputWrapperProps;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InputBaseProps } from './InputBase.type';
|
|
2
|
+
/**
|
|
3
|
+
* Универсальная обертка для полей ввода
|
|
4
|
+
* Предоставляет общую логику: метки, описания, ошибки, секции, состояния
|
|
5
|
+
*/
|
|
6
|
+
export declare const InputBase: import('react').ForwardRefExoticComponent<InputBaseProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ReactNode, InputHTMLAttributes, TextareaHTMLAttributes, HTMLAttributes } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Размеры для компонента InputBase
|
|
4
|
+
*/
|
|
5
|
+
export type InputBaseSize = 'small' | 'medium' | 'large';
|
|
6
|
+
/**
|
|
7
|
+
* Типы компонентов для InputBase
|
|
8
|
+
*/
|
|
9
|
+
export type InputBaseComponent = 'input' | 'textarea';
|
|
10
|
+
/**
|
|
11
|
+
* Базовые пропсы для компонента InputBase
|
|
12
|
+
*/
|
|
13
|
+
export interface InputBaseProps {
|
|
14
|
+
/** Тип компонента (input или textarea) */
|
|
15
|
+
component?: InputBaseComponent;
|
|
16
|
+
/** Размер компонента */
|
|
17
|
+
size?: InputBaseSize;
|
|
18
|
+
/** Содержимое компонента (устаревший способ) */
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
/** Дополнительные CSS классы */
|
|
21
|
+
className?: string;
|
|
22
|
+
/** Состояние ошибки */
|
|
23
|
+
error?: boolean;
|
|
24
|
+
/** Плейсхолдер для поля */
|
|
25
|
+
placeholder?: string;
|
|
26
|
+
/** Отключенное состояние */
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
/** Состояние загрузки */
|
|
29
|
+
loading?: boolean;
|
|
30
|
+
/** Показывать ли метку (по умолчанию: true) */
|
|
31
|
+
showLabel?: boolean;
|
|
32
|
+
/** CSS классы для плавающей метки */
|
|
33
|
+
labelClassName?: string;
|
|
34
|
+
/** Вспомогательный текст под полем */
|
|
35
|
+
helper?: string;
|
|
36
|
+
/** Префикс (иконка слева) */
|
|
37
|
+
prefix?: ReactNode;
|
|
38
|
+
/** Суффикс (иконка справа) */
|
|
39
|
+
suffix?: ReactNode;
|
|
40
|
+
/** ID компонента */
|
|
41
|
+
id?: string;
|
|
42
|
+
/** Обработчик фокуса */
|
|
43
|
+
onFocus?: () => void;
|
|
44
|
+
/** Обработчик потери фокуса */
|
|
45
|
+
onBlur?: () => void;
|
|
46
|
+
/** Обработчик изменения значения */
|
|
47
|
+
onChange?: (value: string) => void;
|
|
48
|
+
/** Текущее значение */
|
|
49
|
+
value?: string;
|
|
50
|
+
/** Стили для обертки */
|
|
51
|
+
wrapperProps?: HTMLAttributes<HTMLDivElement>;
|
|
52
|
+
/** Стили для метки */
|
|
53
|
+
labelProps?: HTMLAttributes<HTMLLabelElement>;
|
|
54
|
+
/** Стили для вспомогательного текста */
|
|
55
|
+
helperProps?: HTMLAttributes<HTMLDivElement>;
|
|
56
|
+
/** Дополнительные стили для обертки (высота, отступы) */
|
|
57
|
+
wrapperStyles?: React.CSSProperties;
|
|
58
|
+
/** Дополнительные стили для плавающей метки */
|
|
59
|
+
floatingLabelStyles?: React.CSSProperties;
|
|
60
|
+
/** Дополнительные стили для префикса */
|
|
61
|
+
prefixStyles?: React.CSSProperties;
|
|
62
|
+
/** Дополнительные стили для суффикса */
|
|
63
|
+
suffixStyles?: React.CSSProperties;
|
|
64
|
+
/** Стили для textarea элемента */
|
|
65
|
+
textareaStyles?: React.CSSProperties;
|
|
66
|
+
/** Показывать ли счетчик символов */
|
|
67
|
+
showLimit?: boolean;
|
|
68
|
+
/** Максимальная длина */
|
|
69
|
+
maxLength?: number;
|
|
70
|
+
/** Пропсы для встроенного input/textarea */
|
|
71
|
+
inputProps?: InputHTMLAttributes<HTMLInputElement> | TextareaHTMLAttributes<HTMLTextAreaElement>;
|
|
72
|
+
/** Подсказка внутри поля ввода */
|
|
73
|
+
hint?: string;
|
|
74
|
+
/** Показывать ли подсказку */
|
|
75
|
+
showHint?: boolean;
|
|
76
|
+
/** Показывать подсказку когда значение пустое */
|
|
77
|
+
showHintOnEmpty?: boolean;
|
|
78
|
+
/** Включить обрезку текста с многоточием */
|
|
79
|
+
truncate?: boolean;
|
|
80
|
+
/** Состояние ошибки для accessibility */
|
|
81
|
+
'aria-invalid'?: boolean;
|
|
82
|
+
/** ID элемента с сообщением об ошибке для accessibility */
|
|
83
|
+
'aria-errormessage'?: string;
|
|
84
|
+
/** Тип изменения размера для textarea */
|
|
85
|
+
resize?: 'fill' | 'hug' | 'fixed';
|
|
86
|
+
/** Показывать ли grip для изменения размера */
|
|
87
|
+
showGrip?: boolean;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Пропсы для встроенного input элемента
|
|
91
|
+
*/
|
|
92
|
+
export interface InputBaseInputProps extends InputHTMLAttributes<HTMLInputElement> {
|
|
93
|
+
/** Состояние ошибки */
|
|
94
|
+
error?: boolean;
|
|
95
|
+
/** Отключенное состояние */
|
|
96
|
+
disabled?: boolean;
|
|
97
|
+
/** Состояние загрузки */
|
|
98
|
+
loading?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Пропсы для встроенного textarea элемента
|
|
102
|
+
*/
|
|
103
|
+
export interface InputBaseTextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
104
|
+
/** Состояние ошибки */
|
|
105
|
+
error?: boolean;
|
|
106
|
+
/** Отключенное состояние */
|
|
107
|
+
disabled?: boolean;
|
|
108
|
+
/** Состояние загрузки */
|
|
109
|
+
loading?: boolean;
|
|
110
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface SearchIconProps {
|
|
2
|
+
/** Дополнительные CSS классы */
|
|
3
|
+
className?: string;
|
|
4
|
+
/** Инлайн стили */
|
|
5
|
+
style?: React.CSSProperties;
|
|
6
|
+
/** Размер иконки */
|
|
7
|
+
size?: 'xxxs' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg';
|
|
8
|
+
/** Цвет иконки */
|
|
9
|
+
color?: string;
|
|
10
|
+
/** Дополнительные пропсы */
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Компонент иконки поиска
|
|
15
|
+
* Принимает className и style для кастомизации
|
|
16
|
+
*/
|
|
17
|
+
export declare const SearchIcon: React.FC<SearchIconProps>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface XIconProps {
|
|
2
|
+
/** Дополнительные CSS классы */
|
|
3
|
+
className?: string;
|
|
4
|
+
/** Инлайн стили */
|
|
5
|
+
style?: React.CSSProperties;
|
|
6
|
+
/** Размер иконки */
|
|
7
|
+
size?: 'xxxs' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg';
|
|
8
|
+
/** Цвет иконки */
|
|
9
|
+
color?: string;
|
|
10
|
+
/** Обработчик клика */
|
|
11
|
+
onClick?: () => void;
|
|
12
|
+
/** Дополнительные пропсы */
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Компонент иконки X
|
|
17
|
+
*/
|
|
18
|
+
export declare const XIcon: React.FC<XIconProps>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Хук для обработки resize через grip
|
|
3
|
+
* @param showGrip - показывать ли grip
|
|
4
|
+
* @param disabled - отключен ли компонент
|
|
5
|
+
* @param loading - состояние загрузки
|
|
6
|
+
* @param resize - режим изменения размера
|
|
7
|
+
* @returns обработчик mousedown для grip
|
|
8
|
+
*/
|
|
9
|
+
export declare const useGripResize: (showGrip: boolean | undefined, disabled: boolean | undefined, loading: boolean | undefined, resize: string | undefined) => {
|
|
10
|
+
handleGripMouseDown: (e: React.MouseEvent) => void;
|
|
11
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Хук для синхронизации состояния HTML элемента с внешним состоянием
|
|
3
|
+
* @param value - внешнее значение
|
|
4
|
+
* @param component - тип компонента ('input' | 'textarea')
|
|
5
|
+
* @returns refs для input и textarea элементов
|
|
6
|
+
*/
|
|
7
|
+
export declare const useInputSync: (value: string, component: "input" | "textarea") => {
|
|
8
|
+
textareaRef: import('react').RefObject<HTMLTextAreaElement>;
|
|
9
|
+
inputRef: import('react').RefObject<HTMLInputElement>;
|
|
10
|
+
currentRef: import('react').RefObject<HTMLInputElement> | import('react').RefObject<HTMLTextAreaElement>;
|
|
11
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Хук для автоматического изменения размера textarea
|
|
3
|
+
* @param value - значение textarea
|
|
4
|
+
* @param resize - режим изменения размера
|
|
5
|
+
* @param textareaRef - ref для textarea элемента
|
|
6
|
+
*/
|
|
7
|
+
export declare const useTextareaResize: (value: string, resize: string | undefined, textareaRef: React.RefObject<HTMLTextAreaElement>) => {
|
|
8
|
+
resizeTextArea: () => void;
|
|
9
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { ListProps } from './List.type';
|
|
3
|
+
export declare const List: React.ForwardRefExoticComponent<ListProps & React.RefAttributes<HTMLOListElement | HTMLUListElement>> & {
|
|
4
|
+
Item: React.FC<import('./ListItem/ListItem').ListItemProps>;
|
|
5
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Базовые пропсы для списка (используются и для `<ul>`, и для `<ol>`).
|
|
3
|
+
*/
|
|
4
|
+
interface BaseListProps {
|
|
5
|
+
/** Дополнительный CSS-класс для списка */
|
|
6
|
+
className?: string;
|
|
7
|
+
/** Дочерние элементы списка (`<List.Item>` или `<li>`) */
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
/** Размер списка, влияет на отступы и размер шрифта */
|
|
10
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
11
|
+
/** Атрибут для тестирования */
|
|
12
|
+
'data-testid'?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Пропсы для маркированного списка (`<ul>`).
|
|
16
|
+
* Атрибут `start` запрещён.
|
|
17
|
+
*/
|
|
18
|
+
interface UnorderedListProps extends BaseListProps {
|
|
19
|
+
/** Тип списка — маркированный (по умолчанию) */
|
|
20
|
+
variant?: 'unordered';
|
|
21
|
+
/** Невозможен для `<ul>` */
|
|
22
|
+
start?: never;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Пропсы для нумерованного списка (`<ol>`).
|
|
26
|
+
*/
|
|
27
|
+
interface OrderedListProps extends BaseListProps {
|
|
28
|
+
/** Тип списка — нумерованный */
|
|
29
|
+
variant: 'ordered';
|
|
30
|
+
/** Начальный номер для `<ol>` */
|
|
31
|
+
start?: number;
|
|
32
|
+
}
|
|
33
|
+
export type ListProps = UnorderedListProps | OrderedListProps;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ListItemProps {
|
|
2
|
+
/** Дополнительный CSS-класс для списка */
|
|
3
|
+
className?: string;
|
|
4
|
+
/** Дочерние элементы */
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/** Атрибут для тестирования */
|
|
7
|
+
'data-testid'?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const ListItem: React.FC<ListItemProps>;
|