skillgrid 0.0.36-dev-40511-42085-40506-alert-placeholder-modal-fix.1241652 → 0.0.38
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/Alert/Alert.type.d.ts +5 -10
- package/dist/components/Dialog/Dialog.d.ts +3 -12
- package/dist/components/Dialog/Dialog.type.d.ts +12 -44
- package/dist/components/Dialog/lib/index.d.ts +0 -1
- package/dist/components/Dialog/lib/use-dialog.d.ts +9 -17
- package/dist/components/Modal/Modal.d.ts +1 -1
- package/dist/components/Modal/Modal.type.d.ts +12 -28
- package/dist/components/Placeholder/Placeholder.type.d.ts +5 -8
- 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/Tabs/Tabs.type.d.ts +1 -1
- 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 +2745 -2353
- package/package.json +2 -2
- package/dist/components/Dialog/lib/use-dialog-draggable.d.ts +0 -42
- package/dist/components/Modal/assets/CrossIcon.d.ts +0 -2
- package/dist/components/Modal/assets/LeftChevronIcon.d.ts +0 -2
- package/dist/components/Modal/assets/index.d.ts +0 -2
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { DialogProps } from '../Dialog';
|
|
2
|
-
import {
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
3
|
import { AvatarProps } from '../Avatar';
|
|
4
4
|
export type AlertVariant = 'info' | 'success' | 'warning' | 'error' | 'dialog' | 'avatar';
|
|
5
|
-
|
|
6
|
-
type AlertFields = 'title' | 'subTitle' | 'iconSlot' | 'children' | 'textBlock' | 'container' | 'dialog';
|
|
7
|
-
export interface AlertProps extends Omit<DialogProps, 'style' | 'className'> {
|
|
5
|
+
export interface AlertProps extends Pick<DialogProps, 'placement' | 'open' | 'onOpenChange' | 'children'> {
|
|
8
6
|
/**
|
|
9
7
|
* Вариант отображения Alert. Определяет иконку и цветовую схему.
|
|
10
8
|
* Вариант `avatar` позволяет отобразить кастомный аватар.
|
|
@@ -21,10 +19,7 @@ export interface AlertProps extends Omit<DialogProps, 'style' | 'className'> {
|
|
|
21
19
|
/** Заголовок Alert. */
|
|
22
20
|
title: ReactNode;
|
|
23
21
|
/** Основной контент/описание Alert. */
|
|
24
|
-
description
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
/** CSS-классы для отдельных частей Alert. */
|
|
28
|
-
classNames?: Partial<Record<AlertFields, HTMLProps<HTMLDivElement>['className']>>;
|
|
22
|
+
description: ReactNode;
|
|
23
|
+
/** ID для тестирования. */
|
|
24
|
+
'data-testid'?: string;
|
|
29
25
|
}
|
|
30
|
-
export {};
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import { DialogProps } from './Dialog.type';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Он использует `Floating UI` для позиционирования, управляет фокусом внутри себя,
|
|
7
|
-
* блокирует прокрутку основного контента и предоставляет анимации открытия/закрытия.
|
|
8
|
-
*
|
|
9
|
-
* Это полностью контролируемый компонент: его видимостью нужно управлять через пропсы `open` и `onOpenChange`.
|
|
10
|
-
* Поддерживает различные варианты размещения на экране, закрытие перетаскиванием и другие возможности кастомизации.
|
|
11
|
-
*
|
|
12
|
-
* @param {DialogProps} props - Пропсы компонента.
|
|
13
|
-
* @param {React.Ref<HTMLDivElement>} outerRef - Внешний ref, который будет перенаправлен на корневой DOM-элемент диалога.
|
|
14
|
-
* @returns {JSX.Element | null} Рендерит диалог или `null`, если он закрыт (и анимация закрытия завершена).
|
|
3
|
+
* Базовый компонент диалогового окна.
|
|
4
|
+
* Обеспечивает управление состоянием, фокусом и позиционированием.
|
|
5
|
+
* Является основой для более сложных компонентов, таких как Modal.
|
|
15
6
|
*/
|
|
16
7
|
declare const Dialog: import('react').ForwardRefExoticComponent<DialogProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
17
8
|
export { Dialog };
|
|
@@ -1,61 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Определяет вариант расположения диалогового окна на экране.
|
|
5
|
-
* - `default`: Вверху экрана с вертикальными и горизонтальными отступами.
|
|
6
|
-
* - `default-stretched`: Вверху экрана, растянуто по ширине.
|
|
7
|
-
* - `center`: Строго по центру экрана.
|
|
8
|
-
* - `center-stretched`: По центру экрана, растянуто по ширине.
|
|
9
|
-
* - `bottom-sheet`: Внизу экрана (адаптивный вариант для мобильных устройств).
|
|
10
|
-
* - `right-drawer`: У правого края экрана (похоже на "шторку" или "сайдбар").
|
|
11
|
-
* - `left-drawer`: У левого края экрана.
|
|
12
|
-
*/
|
|
13
|
-
export type DialogPlacement = 'default' | 'center' | 'bottom-sheet' | 'bottom-left' | 'bottom-right' | 'right-drawer' | 'left-drawer';
|
|
1
|
+
import { HTMLProps } from 'react';
|
|
2
|
+
/** Тип позиционирования диалогового окна. */
|
|
3
|
+
export type DialogPlacement = 'default' | 'default-stretched' | 'center' | 'center-stretched' | 'mobile' | 'right-drawer' | 'left-drawer';
|
|
14
4
|
/** Пропсы для компонента Dialog. */
|
|
15
5
|
export interface DialogProps extends Pick<HTMLProps<HTMLDivElement>, 'className' | 'style' | 'children'> {
|
|
16
|
-
/**
|
|
6
|
+
/** Контролируемое состояние открытия. */
|
|
17
7
|
open: boolean;
|
|
18
|
-
/**
|
|
8
|
+
/** Callback при изменении состояния. */
|
|
19
9
|
onOpenChange: (open: boolean) => void;
|
|
20
10
|
/**
|
|
21
|
-
*
|
|
22
|
-
* @default '
|
|
11
|
+
* Позиционирование диалога.
|
|
12
|
+
* @default 'top'
|
|
23
13
|
*/
|
|
24
14
|
placement?: DialogPlacement;
|
|
25
15
|
/**
|
|
26
|
-
*
|
|
16
|
+
* Отключить закрытие по клику вне диалога.
|
|
27
17
|
* @default false
|
|
28
18
|
*/
|
|
29
19
|
disableOutsideClick?: boolean;
|
|
30
20
|
/**
|
|
31
|
-
*
|
|
21
|
+
* Отключить закрытие по Escape.
|
|
32
22
|
* @default false
|
|
33
23
|
*/
|
|
34
24
|
disableEscapeKey?: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Если `true`, полупрозрачный фон (оверлей) не будет отображаться.
|
|
37
|
-
* @default false
|
|
38
|
-
* */
|
|
39
|
-
disableOverlay?: boolean;
|
|
40
|
-
/** Позволяет закрывать диалог перетаскиванием. Принимает объект с настройками. */
|
|
41
|
-
closeOnDrag?: {
|
|
42
|
-
/** Минимальное смещение в пикселях, необходимое для закрытия диалога. @default 80 */
|
|
43
|
-
threshold: number;
|
|
44
|
-
/** Направление, в котором нужно 'смахнуть' диалог для закрытия. */
|
|
45
|
-
direction: 'top' | 'left' | 'right' | 'bottom';
|
|
46
|
-
};
|
|
47
|
-
/** Идентификатор для использования в автоматизированных тестах. */
|
|
25
|
+
/** testId для тестирования. */
|
|
48
26
|
'data-testid'?: string;
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Дополнительные пропсы для `FloatingPortal`, который используется для рендеринга диалога.
|
|
53
|
-
* @extends https://floating-ui.com/docs/FloatingPortal
|
|
54
|
-
* */
|
|
55
|
-
portalProps?: Partial<FloatingPortalProps>;
|
|
56
|
-
/**
|
|
57
|
-
* Дополнительные пропсы для `FloatingFocusManager`, который используется для рендеринга диалога.
|
|
58
|
-
* @extends https://floating-ui.com/docs/floatingfocusmanager
|
|
59
|
-
* */
|
|
60
|
-
focusManagement?: Partial<FloatingFocusManagerProps>;
|
|
27
|
+
/** Класс для оверлея. */
|
|
28
|
+
overlayClassName?: HTMLProps<HTMLDivElement>['className'];
|
|
61
29
|
}
|
|
@@ -2,24 +2,16 @@ import { Placement } from '@floating-ui/react';
|
|
|
2
2
|
import { DialogProps } from '../Dialog.type';
|
|
3
3
|
type UseDialogOptions = Pick<DialogProps, 'placement' | 'open' | 'disableOutsideClick' | 'disableEscapeKey' | 'onOpenChange'>;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Не включает логику перетаскивания.
|
|
9
|
-
*
|
|
10
|
-
* @returns Объект с данными и пропсами для `Floating UI`.
|
|
11
|
-
* - `isMounted`: Флаг для условного рендеринга с поддержкой анимации закрытия.
|
|
12
|
-
* - `transitionStyles`: CSS-стили для анимации.
|
|
13
|
-
* - `context`: Контекст `Floating UI`.
|
|
14
|
-
* - `refs`: Ссылки на DOM-элементы для `Floating UI`.
|
|
15
|
-
* - `getFloatingProps`: Функция для получения пропсов, которые нужно передать на элемент диалога.
|
|
5
|
+
* Хук для управления состоянием и взаимодействиями диалогового окна.
|
|
6
|
+
* Инкапсулирует логику Floating UI для позиционирования, анимаций и закрытия.
|
|
7
|
+
* @returns {object} Объект со свойствами и хендлерами для управления диалогом.
|
|
16
8
|
*/
|
|
17
|
-
export declare function useDialog({ open, onOpenChange, placement, disableEscapeKey, }: UseDialogOptions): {
|
|
18
|
-
/**
|
|
9
|
+
export declare function useDialog({ open, onOpenChange, placement, disableOutsideClick, disableEscapeKey, }: UseDialogOptions): {
|
|
10
|
+
/** Состояние для условного рендеринга с поддержкой анимации закрытия. */
|
|
19
11
|
isMounted: boolean;
|
|
20
|
-
/**
|
|
12
|
+
/** Стили для CSS-переходов (анимации). */
|
|
21
13
|
transitionStyles: import('react').CSSProperties;
|
|
22
|
-
/**
|
|
14
|
+
/** Контекст Floating UI. */
|
|
23
15
|
context: {
|
|
24
16
|
x: number;
|
|
25
17
|
y: number;
|
|
@@ -38,14 +30,14 @@ export declare function useDialog({ open, onOpenChange, placement, disableEscape
|
|
|
38
30
|
refs: import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
39
31
|
elements: import('@floating-ui/react').ExtendedElements<import('@floating-ui/react').ReferenceType>;
|
|
40
32
|
};
|
|
41
|
-
/**
|
|
33
|
+
/** Ссылки на элементы для Floating UI. */
|
|
42
34
|
refs: {
|
|
43
35
|
reference: import('react').MutableRefObject<import('@floating-ui/react-dom').ReferenceType | null>;
|
|
44
36
|
floating: React.MutableRefObject<HTMLElement | null>;
|
|
45
37
|
setReference: (node: import('@floating-ui/react-dom').ReferenceType | null) => void;
|
|
46
38
|
setFloating: (node: HTMLElement | null) => void;
|
|
47
39
|
} & import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
48
|
-
/**
|
|
40
|
+
/** Пропсы для плавающего элемента. */
|
|
49
41
|
getFloatingProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>;
|
|
50
42
|
};
|
|
51
43
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ModalProps } from './Modal.type';
|
|
2
2
|
/**
|
|
3
3
|
* Компонент модального окна.
|
|
4
|
-
* Построен на основе Dialog и добавляет
|
|
4
|
+
* Построен на основе Dialog и добавляет с��андартную разметку (шапка, контент, футер).
|
|
5
5
|
*/
|
|
6
6
|
declare const Modal: import('react').ForwardRefExoticComponent<ModalProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
7
7
|
export { Modal };
|
|
@@ -2,46 +2,30 @@ import { DialogProps } from '../Dialog';
|
|
|
2
2
|
import { FC, HTMLProps, PropsWithChildren, ReactNode } from 'react';
|
|
3
3
|
import { ButtonProps } from '../Button';
|
|
4
4
|
/** Поля модального окна для стилизации. */
|
|
5
|
-
type ModalFields = '
|
|
6
|
-
export type ModalActionButtonProps = {
|
|
7
|
-
/** Пропсы кнопки действия; можно обернуть кнопку через wrapper. */
|
|
8
|
-
props?: ButtonProps;
|
|
9
|
-
/** Обёрточный компонент для кнопки действия. */
|
|
10
|
-
wrapper?: FC<PropsWithChildren>;
|
|
11
|
-
};
|
|
5
|
+
type ModalFields = 'container' | 'title' | 'subTitle' | 'content' | 'footer';
|
|
12
6
|
/** Пропсы компонента Modal. @extends DialogProps */
|
|
13
|
-
export interface ModalProps extends
|
|
7
|
+
export interface ModalProps extends DialogProps {
|
|
14
8
|
/** Заголовок модального окна. */
|
|
15
9
|
title?: ReactNode;
|
|
10
|
+
/** Слот для элементов в правом верхнем углу (рядом с кнопкой закрытия). */
|
|
11
|
+
actions?: ReactNode;
|
|
16
12
|
/** Подзаголовок под основным заголовком. */
|
|
17
13
|
subTitle?: ReactNode;
|
|
18
14
|
/** Содержимое футера (например, кнопки). */
|
|
19
15
|
footer?: ReactNode;
|
|
20
|
-
/** Ширина модального окна в px. */
|
|
16
|
+
/** Ширина модального окна в px (допустимо: 480, 620, 800). */
|
|
21
17
|
size?: 480 | 620 | 800;
|
|
22
18
|
/** Inline-стили для отдельных частей модального окна. */
|
|
23
19
|
styles?: Partial<Record<ModalFields, HTMLProps<HTMLDivElement>['style']>>;
|
|
24
20
|
/** CSS-классы для отдельных частей модального окна. */
|
|
25
21
|
classNames?: Partial<Record<ModalFields, HTMLProps<HTMLDivElement>['className']>>;
|
|
26
|
-
/**
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
* Показывать кнопку закрытия.
|
|
34
|
-
* @default true */
|
|
35
|
-
show: boolean;
|
|
36
|
-
} & ModalActionButtonProps;
|
|
37
|
-
/** Пропсы для кнопки "назад" в левом верхнем углу */
|
|
38
|
-
backButton?: {
|
|
39
|
-
/** Показывать кнопку 'назад'.
|
|
40
|
-
* @default true */
|
|
41
|
-
show: boolean;
|
|
42
|
-
} & ModalActionButtonProps;
|
|
43
|
-
/** Шаблон расположения элементов в шапке модального окна. */
|
|
44
|
-
headerTemplate?: 'title-actions-actions' | 'actions-title-actions';
|
|
22
|
+
/** Показывать кнопку закрытия в шапке. @default true */
|
|
23
|
+
showCloseButton?: boolean;
|
|
24
|
+
/** Пропсы кнопки закрытия; можно обернуть кнопку через wrapper. */
|
|
25
|
+
closeButtonProps?: ButtonProps & {
|
|
26
|
+
/** Обёрточный компонент для кнопки закрытия. */
|
|
27
|
+
wrapper?: FC<PropsWithChildren>;
|
|
28
|
+
};
|
|
45
29
|
/** Скрыть разделитель в шапке. */
|
|
46
30
|
hideHeaderDivider?: boolean;
|
|
47
31
|
/** Скрыть разделитель в футере. */
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { HTMLProps, ReactNode } from 'react';
|
|
2
2
|
/** Размеры плейсхолдера */
|
|
3
3
|
export type PlaceholderSize = 'm' | 'l';
|
|
4
|
-
/** Поля плейсхолдера для стилизации. */
|
|
5
|
-
type PlaceholderFields = 'title' | 'subTitle' | 'iconSlot' | 'children' | 'textBlock' | 'container';
|
|
6
4
|
/** Свойства компонента Placeholder */
|
|
7
|
-
export interface PlaceholderProps extends Pick<HTMLProps<HTMLDivElement>, 'children'> {
|
|
5
|
+
export interface PlaceholderProps extends Pick<HTMLProps<HTMLDivElement>, 'className' | 'style' | 'children'> {
|
|
8
6
|
/** Размер плейсхолдера */
|
|
9
7
|
size?: PlaceholderSize;
|
|
10
8
|
/** Иконка плейсхолдера */
|
|
@@ -13,11 +11,10 @@ export interface PlaceholderProps extends Pick<HTMLProps<HTMLDivElement>, 'child
|
|
|
13
11
|
title?: ReactNode;
|
|
14
12
|
/** Подзаголовок плейсхолдера */
|
|
15
13
|
subTitle?: ReactNode;
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
|
|
14
|
+
/** Дополнительные свойства для подзаголовка */
|
|
15
|
+
subTitleProps?: Pick<HTMLProps<HTMLParagraphElement>, 'className' | 'style'>;
|
|
16
|
+
/** Дополнительные свойства для заголовка */
|
|
17
|
+
titleProps?: Pick<HTMLProps<HTMLParagraphElement>, 'className' | 'style'>;
|
|
20
18
|
/** Идентификатор для тестирования */
|
|
21
19
|
'data-testid'?: string;
|
|
22
20
|
}
|
|
23
|
-
export {};
|
|
@@ -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;
|