skillgrid 0.0.39 → 0.0.40
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 +10 -5
- package/dist/components/Dialog/Dialog.d.ts +12 -3
- package/dist/components/Dialog/Dialog.type.d.ts +44 -12
- package/dist/components/Dialog/lib/index.d.ts +1 -0
- package/dist/components/Dialog/lib/use-dialog-draggable.d.ts +42 -0
- package/dist/components/Dialog/lib/use-dialog.d.ts +17 -9
- package/dist/components/Modal/Modal.d.ts +1 -1
- package/dist/components/Modal/Modal.type.d.ts +28 -12
- package/dist/components/Modal/assets/CrossIcon.d.ts +2 -0
- package/dist/components/Modal/assets/LeftChevronIcon.d.ts +2 -0
- package/dist/components/Modal/assets/index.d.ts +2 -0
- package/dist/components/Placeholder/Placeholder.type.d.ts +8 -5
- package/dist/components/Tabs/Tabs.type.d.ts +1 -1
- package/dist/index.cjs.js +11 -11
- package/dist/index.css +1 -1
- package/dist/index.es.js +2651 -2420
- package/package.json +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { DialogProps } from '../Dialog';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
2
|
+
import { HTMLProps, ReactNode } from 'react';
|
|
3
3
|
import { AvatarProps } from '../Avatar';
|
|
4
4
|
export type AlertVariant = 'info' | 'success' | 'warning' | 'error' | 'dialog' | 'avatar';
|
|
5
|
-
|
|
5
|
+
/** Поля плейсхолдера для стилизации. */
|
|
6
|
+
type AlertFields = 'title' | 'subTitle' | 'iconSlot' | 'children' | 'textBlock' | 'container' | 'dialog';
|
|
7
|
+
export interface AlertProps extends Omit<DialogProps, 'style' | 'className'> {
|
|
6
8
|
/**
|
|
7
9
|
* Вариант отображения Alert. Определяет иконку и цветовую схему.
|
|
8
10
|
* Вариант `avatar` позволяет отобразить кастомный аватар.
|
|
@@ -19,7 +21,10 @@ export interface AlertProps extends Pick<DialogProps, 'placement' | 'open' | 'on
|
|
|
19
21
|
/** Заголовок Alert. */
|
|
20
22
|
title: ReactNode;
|
|
21
23
|
/** Основной контент/описание Alert. */
|
|
22
|
-
description
|
|
23
|
-
/**
|
|
24
|
-
'
|
|
24
|
+
description?: ReactNode;
|
|
25
|
+
/** Inline-стили для отдельных частей Alert. */
|
|
26
|
+
styles?: Partial<Record<AlertFields, HTMLProps<HTMLDivElement>['style']>>;
|
|
27
|
+
/** CSS-классы для отдельных частей Alert. */
|
|
28
|
+
classNames?: Partial<Record<AlertFields, HTMLProps<HTMLDivElement>['className']>>;
|
|
25
29
|
}
|
|
30
|
+
export {};
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { DialogProps } from './Dialog.type';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Компонент `Dialog` представляет собой модальное окно, которое можно использовать для
|
|
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`, если он закрыт (и анимация закрытия завершена).
|
|
6
15
|
*/
|
|
7
16
|
declare const Dialog: import('react').ForwardRefExoticComponent<DialogProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
8
17
|
export { Dialog };
|
|
@@ -1,29 +1,61 @@
|
|
|
1
|
-
import { HTMLProps } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { ComponentProps, HTMLProps } from 'react';
|
|
2
|
+
import { FloatingFocusManagerProps, FloatingOverlay, FloatingPortalProps } from '@floating-ui/react';
|
|
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';
|
|
4
14
|
/** Пропсы для компонента Dialog. */
|
|
5
15
|
export interface DialogProps extends Pick<HTMLProps<HTMLDivElement>, 'className' | 'style' | 'children'> {
|
|
6
|
-
/**
|
|
16
|
+
/** Определяет, открыт ли диалог. Компонент является полностью контролируемым. */
|
|
7
17
|
open: boolean;
|
|
8
|
-
/**
|
|
18
|
+
/** Функция обратного вызова, вызываемая при попытке закрытия диалога (клик на оверлей, Escape). */
|
|
9
19
|
onOpenChange: (open: boolean) => void;
|
|
10
20
|
/**
|
|
11
|
-
*
|
|
12
|
-
* @default '
|
|
21
|
+
* Определяет, где на экране будет отображаться диалог.
|
|
22
|
+
* @default 'default'
|
|
13
23
|
*/
|
|
14
24
|
placement?: DialogPlacement;
|
|
15
25
|
/**
|
|
16
|
-
*
|
|
26
|
+
* Если `true`, клик по OVERLAY диалога не будет его закрывать.
|
|
17
27
|
* @default false
|
|
18
28
|
*/
|
|
19
29
|
disableOutsideClick?: boolean;
|
|
20
30
|
/**
|
|
21
|
-
*
|
|
31
|
+
* Если `true`, нажатие клавиши Escape не будет закрывать диалог.
|
|
22
32
|
* @default false
|
|
23
33
|
*/
|
|
24
34
|
disableEscapeKey?: boolean;
|
|
25
|
-
/**
|
|
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
|
+
/** Идентификатор для использования в автоматизированных тестах. */
|
|
26
48
|
'data-testid'?: string;
|
|
27
|
-
/**
|
|
28
|
-
|
|
49
|
+
/** Дополнительные пропсы для кастомизации оверлея (фона). */
|
|
50
|
+
overlayProps?: Pick<ComponentProps<typeof FloatingOverlay>, 'lockScroll' | 'className' | 'style'>;
|
|
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>;
|
|
29
61
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DialogProps } from '../Dialog.type';
|
|
2
|
+
import { CSSProperties, HTMLProps } from 'react';
|
|
3
|
+
type UseDialogDraggableOptions = Pick<DialogProps, 'placement' | 'open' | 'disableEscapeKey' | 'onOpenChange' | 'closeOnDrag'>;
|
|
4
|
+
/**
|
|
5
|
+
* Хук для управления диалогом с возможностью закрытия через 'смахивание' (drag-to-close).
|
|
6
|
+
* Оборачивает `useDialog` и добавляет обработчики событий указателя (`PointerEvents`)
|
|
7
|
+
* для отслеживания перетаскивания и закрытия диалога при превышении порога.
|
|
8
|
+
*
|
|
9
|
+
* @param {UseDialogDraggableOptions} options - Опции для конфигурации хука.
|
|
10
|
+
* @returns Возвращает объект с данными и пропсами, аналогичный `useDialog`,
|
|
11
|
+
* но с модифицированными `transitionStyles` и `getFloatingProps` для поддержки перетаскивания.
|
|
12
|
+
*/
|
|
13
|
+
export declare function useDialogDraggable({ open, onOpenChange, placement, disableEscapeKey, closeOnDrag, }: UseDialogDraggableOptions): {
|
|
14
|
+
isMounted: boolean;
|
|
15
|
+
context: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
placement: import('@floating-ui/utils').Placement;
|
|
19
|
+
strategy: import('@floating-ui/utils').Strategy;
|
|
20
|
+
middlewareData: import('@floating-ui/core').MiddlewareData;
|
|
21
|
+
isPositioned: boolean;
|
|
22
|
+
update: () => void;
|
|
23
|
+
floatingStyles: React.CSSProperties;
|
|
24
|
+
open: boolean;
|
|
25
|
+
onOpenChange: (open: boolean, event?: Event, reason?: import('@floating-ui/react').OpenChangeReason) => void;
|
|
26
|
+
events: import('@floating-ui/react').FloatingEvents;
|
|
27
|
+
dataRef: React.MutableRefObject<import('@floating-ui/react').ContextData>;
|
|
28
|
+
nodeId: string | undefined;
|
|
29
|
+
floatingId: string | undefined;
|
|
30
|
+
refs: import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
31
|
+
elements: import('@floating-ui/react').ExtendedElements<import('@floating-ui/react').ReferenceType>;
|
|
32
|
+
};
|
|
33
|
+
refs: {
|
|
34
|
+
reference: import('react').MutableRefObject<import('@floating-ui/react-dom').ReferenceType | null>;
|
|
35
|
+
floating: React.MutableRefObject<HTMLElement | null>;
|
|
36
|
+
setReference: (node: import('@floating-ui/react-dom').ReferenceType | null) => void;
|
|
37
|
+
setFloating: (node: HTMLElement | null) => void;
|
|
38
|
+
} & import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
39
|
+
transitionStyles: CSSProperties;
|
|
40
|
+
getFloatingProps: (userProps: HTMLProps<HTMLElement>) => Record<string, unknown>;
|
|
41
|
+
};
|
|
42
|
+
export {};
|
|
@@ -2,16 +2,24 @@ 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
|
-
*
|
|
5
|
+
* Базовый хук для управления состоянием и поведением диалога.
|
|
6
|
+
* Отвечает за логику открытия/закрытия, позиционирование с помощью `Floating UI`,
|
|
7
|
+
* применение анимаций перехода и обработку событий закрытия (клик снаружи, Escape).
|
|
8
|
+
* Не включает логику перетаскивания.
|
|
9
|
+
*
|
|
10
|
+
* @returns Объект с данными и пропсами для `Floating UI`.
|
|
11
|
+
* - `isMounted`: Флаг для условного рендеринга с поддержкой анимации закрытия.
|
|
12
|
+
* - `transitionStyles`: CSS-стили для анимации.
|
|
13
|
+
* - `context`: Контекст `Floating UI`.
|
|
14
|
+
* - `refs`: Ссылки на DOM-элементы для `Floating UI`.
|
|
15
|
+
* - `getFloatingProps`: Функция для получения пропсов, которые нужно передать на элемент диалога.
|
|
8
16
|
*/
|
|
9
|
-
export declare function useDialog({ open, onOpenChange, placement,
|
|
10
|
-
/**
|
|
17
|
+
export declare function useDialog({ open, onOpenChange, placement, disableEscapeKey, }: UseDialogOptions): {
|
|
18
|
+
/** `isMounted`: Флаг для условного рендеринга с поддержкой анимации закрытия. */
|
|
11
19
|
isMounted: boolean;
|
|
12
|
-
/**
|
|
20
|
+
/** `transitionStyles`: CSS-стили для анимации. */
|
|
13
21
|
transitionStyles: import('react').CSSProperties;
|
|
14
|
-
/** Контекст Floating UI
|
|
22
|
+
/** `context`: Контекст `Floating UI`. */
|
|
15
23
|
context: {
|
|
16
24
|
x: number;
|
|
17
25
|
y: number;
|
|
@@ -30,14 +38,14 @@ export declare function useDialog({ open, onOpenChange, placement, disableOutsid
|
|
|
30
38
|
refs: import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
31
39
|
elements: import('@floating-ui/react').ExtendedElements<import('@floating-ui/react').ReferenceType>;
|
|
32
40
|
};
|
|
33
|
-
/** Ссылки на
|
|
41
|
+
/** `refs`: Ссылки на DOM-элементы для `Floating UI`. */
|
|
34
42
|
refs: {
|
|
35
43
|
reference: import('react').MutableRefObject<import('@floating-ui/react-dom').ReferenceType | null>;
|
|
36
44
|
floating: React.MutableRefObject<HTMLElement | null>;
|
|
37
45
|
setReference: (node: import('@floating-ui/react-dom').ReferenceType | null) => void;
|
|
38
46
|
setFloating: (node: HTMLElement | null) => void;
|
|
39
47
|
} & import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
40
|
-
/**
|
|
48
|
+
/** `getFloatingProps`: Функция для получения пропсов, которые нужно передать на элемент диалога. */
|
|
41
49
|
getFloatingProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>;
|
|
42
50
|
};
|
|
43
51
|
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,30 +2,46 @@ import { DialogProps } from '../Dialog';
|
|
|
2
2
|
import { FC, HTMLProps, PropsWithChildren, ReactNode } from 'react';
|
|
3
3
|
import { ButtonProps } from '../Button';
|
|
4
4
|
/** Поля модального окна для стилизации. */
|
|
5
|
-
type ModalFields = 'container' | 'title' | 'subTitle' | 'content' | 'footer';
|
|
5
|
+
type ModalFields = 'dialog' | 'container' | 'leftActionsStack' | 'rightActionsStack' | 'title' | 'subTitle' | 'content' | 'footer' | 'header' | 'grabber';
|
|
6
|
+
export type ModalActionButtonProps = {
|
|
7
|
+
/** Пропсы кнопки действия; можно обернуть кнопку через wrapper. */
|
|
8
|
+
props?: ButtonProps;
|
|
9
|
+
/** Обёрточный компонент для кнопки действия. */
|
|
10
|
+
wrapper?: FC<PropsWithChildren>;
|
|
11
|
+
};
|
|
6
12
|
/** Пропсы компонента Modal. @extends DialogProps */
|
|
7
|
-
export interface ModalProps extends DialogProps {
|
|
13
|
+
export interface ModalProps extends Omit<DialogProps, 'style' | 'className'> {
|
|
8
14
|
/** Заголовок модального окна. */
|
|
9
15
|
title?: ReactNode;
|
|
10
|
-
/** Слот для элементов в правом верхнем углу (рядом с кнопкой закрытия). */
|
|
11
|
-
actions?: ReactNode;
|
|
12
16
|
/** Подзаголовок под основным заголовком. */
|
|
13
17
|
subTitle?: ReactNode;
|
|
14
18
|
/** Содержимое футера (например, кнопки). */
|
|
15
19
|
footer?: ReactNode;
|
|
16
|
-
/** Ширина модального окна в px
|
|
20
|
+
/** Ширина модального окна в px. */
|
|
17
21
|
size?: 480 | 620 | 800;
|
|
18
22
|
/** Inline-стили для отдельных частей модального окна. */
|
|
19
23
|
styles?: Partial<Record<ModalFields, HTMLProps<HTMLDivElement>['style']>>;
|
|
20
24
|
/** CSS-классы для отдельных частей модального окна. */
|
|
21
25
|
classNames?: Partial<Record<ModalFields, HTMLProps<HTMLDivElement>['className']>>;
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
/** Слот для элементов в правом верхнем углу (рядом с кнопкой закрытия). */
|
|
27
|
+
rightActionsSlot?: ReactNode[];
|
|
28
|
+
/** Слот для элементов в правом верхнем углу (рядом с кнопкой закрытия). */
|
|
29
|
+
leftActionsSlot?: ReactNode[];
|
|
30
|
+
/** Пропсы для кнопки закрытия в правом верхнем углу */
|
|
31
|
+
closeButton?: {
|
|
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';
|
|
29
45
|
/** Скрыть разделитель в шапке. */
|
|
30
46
|
hideHeaderDivider?: boolean;
|
|
31
47
|
/** Скрыть разделитель в футере. */
|
|
@@ -1,8 +1,10 @@
|
|
|
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';
|
|
4
6
|
/** Свойства компонента Placeholder */
|
|
5
|
-
export interface PlaceholderProps extends Pick<HTMLProps<HTMLDivElement>, '
|
|
7
|
+
export interface PlaceholderProps extends Pick<HTMLProps<HTMLDivElement>, 'children'> {
|
|
6
8
|
/** Размер плейсхолдера */
|
|
7
9
|
size?: PlaceholderSize;
|
|
8
10
|
/** Иконка плейсхолдера */
|
|
@@ -11,10 +13,11 @@ export interface PlaceholderProps extends Pick<HTMLProps<HTMLDivElement>, 'class
|
|
|
11
13
|
title?: ReactNode;
|
|
12
14
|
/** Подзаголовок плейсхолдера */
|
|
13
15
|
subTitle?: ReactNode;
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
|
|
16
|
+
/** Inline-стили для отдельных частей плейсхолдера. */
|
|
17
|
+
styles?: Partial<Record<PlaceholderFields, HTMLProps<HTMLDivElement>['style']>>;
|
|
18
|
+
/** CSS-классы для отдельных частей плейсхолдера. */
|
|
19
|
+
classNames?: Partial<Record<PlaceholderFields, HTMLProps<HTMLDivElement>['className']>>;
|
|
18
20
|
/** Идентификатор для тестирования */
|
|
19
21
|
'data-testid'?: string;
|
|
20
22
|
}
|
|
23
|
+
export {};
|