skillgrid 0.0.36 → 0.0.39
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/Snackbar/Provider/SnackbarProvider.d.ts +9 -0
- package/dist/components/Snackbar/Provider/SnackbarProvider.type.d.ts +69 -0
- package/dist/components/Snackbar/Provider/index.d.ts +2 -0
- package/dist/components/Snackbar/Snackbar.d.ts +2 -0
- package/dist/components/Snackbar/Snackbar.type.d.ts +74 -0
- package/dist/components/Snackbar/assets/close.d.ts +1 -0
- package/dist/components/Snackbar/assets/error.d.ts +3 -0
- package/dist/components/Snackbar/assets/index.d.ts +4 -0
- package/dist/components/Snackbar/assets/info.d.ts +3 -0
- package/dist/components/Snackbar/assets/success.d.ts +3 -0
- package/dist/components/Snackbar/index.d.ts +2 -0
- package/dist/components/Snackbar/lib/constants.d.ts +6 -0
- package/dist/components/Snackbar/lib/index.d.ts +4 -0
- package/dist/components/Snackbar/lib/snackbarReducer/index.d.ts +1 -0
- package/dist/components/Snackbar/lib/snackbarReducer/snackbarReducer.d.ts +2 -0
- package/dist/components/Snackbar/lib/useSnackbar.d.ts +3 -0
- package/dist/components/Snackbar/lib/useSwipe.d.ts +52 -0
- package/dist/components/Trigger/Trigger.d.ts +5 -0
- package/dist/components/Trigger/Trigger.type.d.ts +98 -0
- package/dist/components/Trigger/assets/ChevronIcon.d.ts +16 -0
- package/dist/components/Trigger/assets/index.d.ts +1 -0
- package/dist/components/Trigger/index.d.ts +1 -0
- package/dist/components/Trigger/lib/utils.d.ts +29 -0
- package/dist/components/Trigger/lib/utils.test.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 +3002 -2363
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC, default as React } from 'react';
|
|
2
|
+
interface SnackbarProviderProps {
|
|
3
|
+
/** Дочерние элементы */
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
/** Тестовый id по умолчанию для обертки Snackbar */
|
|
6
|
+
dataTestId?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const SnackbarProvider: FC<SnackbarProviderProps>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SnackbarProps } from '../Snackbar.type';
|
|
2
|
+
/**
|
|
3
|
+
* Параметры, которые можно передать в метод `show()` для отображения Snackbar.
|
|
4
|
+
* Наследует все пропсы Snackbar, кроме управляемых провайдером (`open`, `onClose`).
|
|
5
|
+
*/
|
|
6
|
+
export type ShowSnackbarProps = Omit<SnackbarProps, 'open' | 'onClose' | 'isStack'> & {
|
|
7
|
+
/**
|
|
8
|
+
* Контейнер, в котором Snackbar будет показан (по умолчанию — `document.body`).
|
|
9
|
+
*/
|
|
10
|
+
parent?: HTMLElement;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Внутреннее представление Snackbar, используемое внутри провайдера.
|
|
14
|
+
* Содержит служебные поля состояния (`id`, `open`, `exiting`).
|
|
15
|
+
*/
|
|
16
|
+
export interface InternalSnackbar extends ShowSnackbarProps {
|
|
17
|
+
/** Уникальный идентификатор Snackbar. Генерируется автоматически. */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Флаг отображения Snackbar. */
|
|
20
|
+
open: boolean;
|
|
21
|
+
/** Флаг завершения анимации (используется при скрытии). */
|
|
22
|
+
exiting?: boolean;
|
|
23
|
+
/** Флаг, указывающий, что Snackbar когда-либо находился в стеке */
|
|
24
|
+
wasInStack?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Интерфейс контекста Snackbar-провайдера.
|
|
28
|
+
* Позволяет вызывать отображение Snackbar из любого места приложения.
|
|
29
|
+
*/
|
|
30
|
+
export interface SnackbarManagerContextProps {
|
|
31
|
+
/**
|
|
32
|
+
* Отображает Snackbar с указанными параметрами.
|
|
33
|
+
* @param options Параметры Snackbar (контент, тип, autoHideDuration и т.д.)
|
|
34
|
+
*/
|
|
35
|
+
show: (options: ShowSnackbarProps) => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Состояние Snackbar-провайдера.
|
|
39
|
+
* Хранит список видимых Snackbar и очередь ожидающих.
|
|
40
|
+
*/
|
|
41
|
+
export type State = {
|
|
42
|
+
/** Snackbar, которые сейчас отображаются. */
|
|
43
|
+
visible: InternalSnackbar[];
|
|
44
|
+
/** Snackbar, ожидающие своей очереди для показа. */
|
|
45
|
+
queue: InternalSnackbar[];
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Действия, обрабатываемые редьюсером Snackbar-провайдера.
|
|
49
|
+
*/
|
|
50
|
+
export type Action =
|
|
51
|
+
/** Добавляет новый Snackbar в очередь. */
|
|
52
|
+
{
|
|
53
|
+
type: 'ENQUEUE';
|
|
54
|
+
snack: InternalSnackbar;
|
|
55
|
+
}
|
|
56
|
+
/** Перемещает следующий Snackbar из очереди в список видимых. */
|
|
57
|
+
| {
|
|
58
|
+
type: 'SHOW_NEXT';
|
|
59
|
+
}
|
|
60
|
+
/** Начинает анимацию скрытия Snackbar с указанным `id`. */
|
|
61
|
+
| {
|
|
62
|
+
type: 'START_EXIT';
|
|
63
|
+
id: string;
|
|
64
|
+
}
|
|
65
|
+
/** Полностью удаляет Snackbar из списка видимых. */
|
|
66
|
+
| {
|
|
67
|
+
type: 'REMOVE';
|
|
68
|
+
id: string;
|
|
69
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export type Reason = 'timeout' | 'close' | 'escape' | 'swipe';
|
|
2
|
+
/**
|
|
3
|
+
* Свойства компонента Snackbar.
|
|
4
|
+
* Определяют внешний вид, поведение и содержимое уведомления.
|
|
5
|
+
*/
|
|
6
|
+
export type SnackbarProps = {
|
|
7
|
+
/**
|
|
8
|
+
* Флаг видимости Snackbar.
|
|
9
|
+
* Управляется извне (обычно провайдером).
|
|
10
|
+
*/
|
|
11
|
+
open: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Вариант отображения, определяющий цвет и иконку уведомления.
|
|
14
|
+
* @default 'info'
|
|
15
|
+
*/
|
|
16
|
+
variant?: 'info' | 'error' | 'success' | 'loading';
|
|
17
|
+
/**
|
|
18
|
+
* Режим отображения Snackbar:
|
|
19
|
+
* - `fix` — фиксированная ширина,
|
|
20
|
+
* - `fill` — растягивается на всю доступную ширину,
|
|
21
|
+
* - `hug` — подстраивается под контент.
|
|
22
|
+
* @default 'fix'
|
|
23
|
+
*/
|
|
24
|
+
mode?: 'fix' | 'fill' | 'hug';
|
|
25
|
+
/**
|
|
26
|
+
* Колбэк, вызываемый при закрытии Snackbar (например, по кнопке или таймеру).
|
|
27
|
+
*/
|
|
28
|
+
onClose?: () => void;
|
|
29
|
+
/**
|
|
30
|
+
* Время автозакрытия Snackbar (в миллисекундах).
|
|
31
|
+
* Если не указано — Snackbar не скрывается автоматически.
|
|
32
|
+
*/
|
|
33
|
+
autoHideDuration?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Контент уведомления.
|
|
36
|
+
* Может быть текстом, JSX-элементом или компонентом.
|
|
37
|
+
*/
|
|
38
|
+
content: React.ReactNode;
|
|
39
|
+
/**
|
|
40
|
+
* Отключает автоматическое скрытие Snackbar.
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
disableAutoHide?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Отображать ли кнопку закрытия (например, крестик).
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
48
|
+
showButtonClose?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Показывать ли иконку в Snackbar (в зависимости от варианта).
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
showIcon?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Класс для корневого элемента Snackbar (для кастомной стилизации).
|
|
56
|
+
*/
|
|
57
|
+
classNameSnackbarRoot?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Кастомная иконка, заменяющая стандартную для выбранного варианта.
|
|
60
|
+
*/
|
|
61
|
+
icon?: React.ReactNode;
|
|
62
|
+
/**
|
|
63
|
+
* testId для тестирования
|
|
64
|
+
*/
|
|
65
|
+
'data-testid'?: string;
|
|
66
|
+
/**
|
|
67
|
+
* Несколько ли снекбаров в стеке
|
|
68
|
+
*/
|
|
69
|
+
isStack?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Если true — Snackbar начнёт анимацию закрытия извне
|
|
72
|
+
*/
|
|
73
|
+
forceClose?: boolean;
|
|
74
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CloseIcon: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { default as styles } from '../Snackbar.module.css';
|
|
2
|
+
import { Reason } from '../Snackbar.type';
|
|
3
|
+
export declare const animationMap: Record<Reason, keyof typeof styles>;
|
|
4
|
+
export declare const durationMap: Record<Reason, number>;
|
|
5
|
+
export declare const stackDurationMap: Record<Reason, number>;
|
|
6
|
+
export declare const MAX_VISIBLE = 3;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { snackbarReducer } from './snackbarReducer';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { Reason } from '../Snackbar.type';
|
|
3
|
+
interface ISwipeParams {
|
|
4
|
+
/**
|
|
5
|
+
* Реф на DOM-элемент Snackbar.
|
|
6
|
+
*/
|
|
7
|
+
ref: MutableRefObject<HTMLDivElement | null>;
|
|
8
|
+
/**
|
|
9
|
+
* Флаг, показывающий открыт ли Snackbar.
|
|
10
|
+
*/
|
|
11
|
+
open: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Колбэк вызывается при закрытии Snackbar.
|
|
14
|
+
* @param reason - причина закрытия: 'swipe', 'close', 'timeout' или 'escape'.
|
|
15
|
+
*/
|
|
16
|
+
onClose: (reason: Reason) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Функция для управления состоянием выхода (анимации).
|
|
19
|
+
* @param value - true, если Snackbar начинает выходить, иначе false.
|
|
20
|
+
*/
|
|
21
|
+
setExiting: (value: boolean) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Функция для установки причины закрытия.
|
|
24
|
+
* @param reason - причина закрытия: 'swipe', 'close', 'timeout' или 'escape'.
|
|
25
|
+
*/
|
|
26
|
+
setExitReason: (reason?: Reason) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Реф-флаг, показывающий, что сейчас выполняется свайп.
|
|
29
|
+
*/
|
|
30
|
+
swiping: MutableRefObject<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Реф для хранения стартовой X координаты касания.
|
|
33
|
+
*/
|
|
34
|
+
startX: MutableRefObject<number>;
|
|
35
|
+
/**
|
|
36
|
+
* Реф для хранения стартовой Y координаты касания.
|
|
37
|
+
*/
|
|
38
|
+
startY: MutableRefObject<number>;
|
|
39
|
+
/**
|
|
40
|
+
* Реф для хранения текущей X координаты пальца.
|
|
41
|
+
*/
|
|
42
|
+
currentX: MutableRefObject<number>;
|
|
43
|
+
/**
|
|
44
|
+
* Реф для хранения текущей Y координаты пальца.
|
|
45
|
+
*/
|
|
46
|
+
currentY: MutableRefObject<number>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Хук useSwipe добавляет обработку свайпов
|
|
50
|
+
*/
|
|
51
|
+
export declare const useSwipe: ({ ref, open, onClose, setExiting, setExitReason, swiping, startX, startY, currentX, currentY, }: ISwipeParams) => void;
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TriggerCommonProps } from './Trigger.type';
|
|
2
|
+
/**
|
|
3
|
+
Component Trigger
|
|
4
|
+
*/
|
|
5
|
+
export declare const Trigger: ({ content, size, description, label, stretched, selectionStyle, clearable, error, prefixIcon, postfixTitle, disabled, open, onClear, classNames, styles, }: TriggerCommonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { ReactNode, CSSProperties } from 'react';
|
|
2
|
+
export type TriggerSize = 'XL' | 'L' | 'M' | 'S' | 'XS';
|
|
3
|
+
/**
|
|
4
|
+
* Состояния отображения label в компоненте Trigger
|
|
5
|
+
*/
|
|
6
|
+
export declare enum LabelState {
|
|
7
|
+
/** Обычное отображение label */
|
|
8
|
+
NORMAL = "normal",
|
|
9
|
+
/** Floating label (для XL размера с контентом) */
|
|
10
|
+
FLOATING = "floating",
|
|
11
|
+
/** Скрытый label (для не-XL размеров с контентом) */
|
|
12
|
+
HIDDEN = "hidden"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Основные пропсы компонента Trigger
|
|
16
|
+
*/
|
|
17
|
+
export type TriggerCommonProps = {
|
|
18
|
+
/** Состояние триггера */
|
|
19
|
+
open: boolean;
|
|
20
|
+
/** Контент, отображаемый в триггере */
|
|
21
|
+
content?: string;
|
|
22
|
+
/** Заголовок label */
|
|
23
|
+
label?: string;
|
|
24
|
+
/** Размер компонента */
|
|
25
|
+
size?: TriggerSize;
|
|
26
|
+
/** Описание под компонентом */
|
|
27
|
+
description?: string;
|
|
28
|
+
/** Растянуть компонент на всю ширину */
|
|
29
|
+
stretched?: boolean;
|
|
30
|
+
/** Стиль выделения: 'selected' - обычное состояние, 'applied' - применённое с возможностью очистки */
|
|
31
|
+
selectionStyle?: 'selected' | 'applied';
|
|
32
|
+
/** Показывать ли иконку очистки (XIcon) при selectionStyle = 'selected' */
|
|
33
|
+
clearable?: boolean;
|
|
34
|
+
/** Иконка перед контентом */
|
|
35
|
+
prefixIcon?: ReactNode;
|
|
36
|
+
/** Текст после контента */
|
|
37
|
+
postfixTitle?: string;
|
|
38
|
+
/** Текст ошибки */
|
|
39
|
+
error?: string;
|
|
40
|
+
/** Дизейбл компонент */
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
/** Обработчик очистки поля (вызывается при клике на X-иконку в режиме 'applied') */
|
|
43
|
+
onClear?: () => void;
|
|
44
|
+
/**
|
|
45
|
+
* Дополнительные классы для:
|
|
46
|
+
* @wrapper для обертки
|
|
47
|
+
* @triggerContainer для контейнера триггера
|
|
48
|
+
* @chevronIcon для иконки состояния открытия
|
|
49
|
+
* @prefixIconContainer для контейнера префиксной иконки
|
|
50
|
+
* @clearIcon для иконки очистки
|
|
51
|
+
* @triggerContent для контейнера контента
|
|
52
|
+
* @content для контента
|
|
53
|
+
* @label для лейбла
|
|
54
|
+
* @postfixTitle для постфикса
|
|
55
|
+
* @description для описания
|
|
56
|
+
* @error для ошибки
|
|
57
|
+
*/
|
|
58
|
+
classNames?: {
|
|
59
|
+
wrapper?: string;
|
|
60
|
+
triggerContainer?: string;
|
|
61
|
+
chevronIcon?: string;
|
|
62
|
+
prefixIconContainer?: string;
|
|
63
|
+
clearIcon?: string;
|
|
64
|
+
triggerContent?: string;
|
|
65
|
+
content?: string;
|
|
66
|
+
label?: string;
|
|
67
|
+
postfixTitle?: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
error?: string;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Дополнительные стили для:
|
|
73
|
+
* @wrapper для обертки
|
|
74
|
+
* @triggerContainer для контейнера триггера
|
|
75
|
+
* @chevronIcon для иконки состояния открытия
|
|
76
|
+
* @prefixIconContainer для контейнера префиксной иконки
|
|
77
|
+
* @clearIcon для иконки очистки
|
|
78
|
+
* @triggerContent для контейнера контента
|
|
79
|
+
* @content для контента
|
|
80
|
+
* @label для лейбла
|
|
81
|
+
* @postfixTitle для постфикса
|
|
82
|
+
* @description для описания
|
|
83
|
+
* @error для ошибки
|
|
84
|
+
*/
|
|
85
|
+
styles?: {
|
|
86
|
+
wrapper?: CSSProperties;
|
|
87
|
+
triggerContainer?: CSSProperties;
|
|
88
|
+
chevronIcon?: CSSProperties;
|
|
89
|
+
prefixIconContainer?: CSSProperties;
|
|
90
|
+
clearIcon?: CSSProperties;
|
|
91
|
+
triggerContent?: CSSProperties;
|
|
92
|
+
content?: CSSProperties;
|
|
93
|
+
label?: CSSProperties;
|
|
94
|
+
postfixTitle?: CSSProperties;
|
|
95
|
+
description?: CSSProperties;
|
|
96
|
+
error?: CSSProperties;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ChevronIconProps {
|
|
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
|
+
*/
|
|
16
|
+
export declare const ChevronIcon: React.FC<ChevronIconProps>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ChevronIcon } from './ChevronIcon';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Trigger } from './Trigger';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TypographySize } from '../../Typography/Typography.type';
|
|
2
|
+
import { LabelState, TriggerSize } from '../Trigger.type';
|
|
3
|
+
/**
|
|
4
|
+
* Определяет состояние label на основе параметров компонента
|
|
5
|
+
*
|
|
6
|
+
* @param size - размер компонента
|
|
7
|
+
* @param hasContent - есть ли контент в триггере
|
|
8
|
+
* @returns состояние label
|
|
9
|
+
*/
|
|
10
|
+
export declare const getLabelState: (size: TriggerSize, hasContent: boolean) => LabelState;
|
|
11
|
+
/**
|
|
12
|
+
* Определяет размер типографики для label в зависимости от размера компонента
|
|
13
|
+
*/
|
|
14
|
+
export declare const getLabelTypographySize: (size: TriggerSize, isFloating: boolean) => TypographySize;
|
|
15
|
+
/**
|
|
16
|
+
* Определяет размер типографики для контента в зависимости от размера компонента
|
|
17
|
+
*/
|
|
18
|
+
export declare const getContentTypographySize: (size: TriggerSize) => TypographySize;
|
|
19
|
+
/**
|
|
20
|
+
* Определяет размер иконки в зависимости от размера компонента
|
|
21
|
+
*/
|
|
22
|
+
export declare const getIconSize: (size: TriggerSize) => "xs" | "sm";
|
|
23
|
+
/**
|
|
24
|
+
* Обрезает текст content если он превышает 30 символов
|
|
25
|
+
*
|
|
26
|
+
* @param content - текст для обрезки
|
|
27
|
+
* @returns обрезанный текст с многоточием или исходный текст
|
|
28
|
+
*/
|
|
29
|
+
export declare const truncateContent: (content: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|