skillgrid 0.0.34-dev-40511-42085-40506-alert-placeholder-modal-fix.1210374 → 0.0.34-dev-40511-42085-40506-alert-placeholder-modal-fix.1217629
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/Dialog/Dialog.d.ts +12 -3
- package/dist/components/Dialog/Dialog.type.d.ts +29 -11
- 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 +18 -8
- package/dist/components/Modal/Modal.type.d.ts +1 -1
- package/dist/index.cjs.js +11 -11
- package/dist/index.css +1 -1
- package/dist/index.es.js +1934 -1797
- package/package.json +1 -1
|
@@ -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,35 +1,53 @@
|
|
|
1
1
|
import { ComponentProps, HTMLProps } from 'react';
|
|
2
|
-
import { FloatingOverlay } from '@floating-ui/react';
|
|
3
|
-
/**
|
|
4
|
-
|
|
2
|
+
import { 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' | 'default-stretched' | 'center' | 'center-stretched' | 'bottom-sheet' | 'bottom-left' | 'bottom-right' | 'right-drawer' | 'left-drawer';
|
|
5
14
|
/** Пропсы для компонента Dialog. */
|
|
6
15
|
export interface DialogProps extends Pick<HTMLProps<HTMLDivElement>, 'className' | 'style' | 'children'> {
|
|
7
|
-
/**
|
|
16
|
+
/** Определяет, открыт ли диалог. Компонент является полностью контролируемым. */
|
|
8
17
|
open: boolean;
|
|
9
|
-
/**
|
|
18
|
+
/** Функция обратного вызова, вызываемая при попытке закрытия диалога (клик на оверлей, Escape). */
|
|
10
19
|
onOpenChange: (open: boolean) => void;
|
|
11
20
|
/**
|
|
12
|
-
*
|
|
21
|
+
* Определяет, где на экране будет отображаться диалог.
|
|
13
22
|
* @default 'default'
|
|
14
23
|
*/
|
|
15
24
|
placement?: DialogPlacement;
|
|
16
25
|
/**
|
|
17
|
-
*
|
|
26
|
+
* Если `true`, клик за пределами диалога не будет его закрывать.
|
|
18
27
|
* @default false
|
|
19
28
|
*/
|
|
20
29
|
disableOutsideClick?: boolean;
|
|
21
30
|
/**
|
|
22
|
-
*
|
|
31
|
+
* Если `true`, нажатие клавиши Escape не будет закрывать диалог.
|
|
23
32
|
* @default false
|
|
24
33
|
*/
|
|
25
34
|
disableEscapeKey?: boolean;
|
|
26
35
|
/**
|
|
27
|
-
*
|
|
36
|
+
* Если `true`, полупрозрачный фон (оверлей) не будет отображаться.
|
|
28
37
|
* @default false
|
|
29
38
|
* */
|
|
30
39
|
disableOverlay?: boolean;
|
|
31
|
-
/**
|
|
40
|
+
/** Позволяет закрывать диалог перетаскиванием. Принимает объект с настройками. */
|
|
41
|
+
closeOnDrag?: {
|
|
42
|
+
/** Минимальное смещение в пикселях, необходимое для закрытия диалога. @default 80 */
|
|
43
|
+
threshold: number;
|
|
44
|
+
/** Направление, в котором нужно 'смахнуть' диалог для закрытия. */
|
|
45
|
+
direction: 'top' | 'left' | 'right' | 'bottom';
|
|
46
|
+
};
|
|
47
|
+
/** Идентификатор для использования в автоматизированных тестах. */
|
|
32
48
|
'data-testid'?: string;
|
|
33
|
-
/**
|
|
49
|
+
/** Дополнительные пропсы для кастомизации оверлея (фона). */
|
|
34
50
|
overlayProps?: Pick<ComponentProps<typeof FloatingOverlay>, 'lockScroll' | 'className' | 'style'>;
|
|
51
|
+
/** Дополнительные пропсы для `FloatingPortal`, который используется для рендеринга диалога. */
|
|
52
|
+
portalProps?: FloatingPortalProps;
|
|
35
53
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DialogProps } from '../Dialog.type';
|
|
2
|
+
import { CSSProperties } from 'react';
|
|
3
|
+
type UseDialogDraggableOptions = Required<Pick<DialogProps, 'placement' | 'open' | 'disableOutsideClick' | '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, disableOutsideClick, 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: <T extends object>(userProps: T) => Record<string, unknown>;
|
|
41
|
+
};
|
|
42
|
+
export {};
|
|
@@ -2,16 +2,28 @@ 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
|
+
* @param {UseDialogOptions} options - Опции для конфигурации хука.
|
|
11
|
+
* @returns {{
|
|
12
|
+
* isMounted: boolean;
|
|
13
|
+
* transitionStyles: import('react').CSSProperties;
|
|
14
|
+
* context: any;
|
|
15
|
+
* refs: any;
|
|
16
|
+
* getFloatingProps: <T extends object>(userProps: T) => T;
|
|
17
|
+
* }} Объект с данными и пропсами для `Floating UI`.
|
|
18
|
+
* - `isMounted`: Флаг для условного рендеринга с поддержкой анимации закрытия.
|
|
19
|
+
* - `transitionStyles`: CSS-стили для анимации.
|
|
20
|
+
* - `context`: Контекст `Floating UI`.
|
|
21
|
+
* - `refs`: Ссылки на DOM-элементы для `Floating UI`.
|
|
22
|
+
* - `getFloatingProps`: Функция для получения пропсов, которые нужно передать на элемент диалога.
|
|
8
23
|
*/
|
|
9
24
|
export declare function useDialog({ open, onOpenChange, placement, disableOutsideClick, disableEscapeKey, }: UseDialogOptions): {
|
|
10
|
-
/** Состояние для условного рендеринга с поддержкой анимации закрытия. */
|
|
11
25
|
isMounted: boolean;
|
|
12
|
-
/** Стили для CSS-переходов (анимации). */
|
|
13
26
|
transitionStyles: import('react').CSSProperties;
|
|
14
|
-
/** Контекст Floating UI. */
|
|
15
27
|
context: {
|
|
16
28
|
x: number;
|
|
17
29
|
y: number;
|
|
@@ -30,14 +42,12 @@ export declare function useDialog({ open, onOpenChange, placement, disableOutsid
|
|
|
30
42
|
refs: import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
31
43
|
elements: import('@floating-ui/react').ExtendedElements<import('@floating-ui/react').ReferenceType>;
|
|
32
44
|
};
|
|
33
|
-
/** Ссылки на элементы для Floating UI. */
|
|
34
45
|
refs: {
|
|
35
46
|
reference: import('react').MutableRefObject<import('@floating-ui/react-dom').ReferenceType | null>;
|
|
36
47
|
floating: React.MutableRefObject<HTMLElement | null>;
|
|
37
48
|
setReference: (node: import('@floating-ui/react-dom').ReferenceType | null) => void;
|
|
38
49
|
setFloating: (node: HTMLElement | null) => void;
|
|
39
50
|
} & import('@floating-ui/react').ExtendedRefs<import('@floating-ui/react').ReferenceType>;
|
|
40
|
-
/** Пропсы для плавающего элемента. */
|
|
41
51
|
getFloatingProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>;
|
|
42
52
|
};
|
|
43
53
|
export {};
|
|
@@ -2,7 +2,7 @@ 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' | 'header';
|
|
5
|
+
type ModalFields = 'container' | 'title' | 'subTitle' | 'content' | 'footer' | 'header' | 'grabber';
|
|
6
6
|
/** Пропсы компонента Modal. @extends DialogProps */
|
|
7
7
|
export interface ModalProps extends DialogProps {
|
|
8
8
|
/** Заголовок модального окна. */
|