skillgrid 0.0.34-dev-40511-42085-40506-alert-placeholder-modal-fix.1213385 → 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.
@@ -1,8 +1,17 @@
1
1
  import { DialogProps } from './Dialog.type';
2
2
  /**
3
- * Базовый компонент диалогового окна.
4
- * Обеспечивает управление состоянием, фокусом и позиционированием.
5
- * Является основой для более сложных компонентов, таких как Modal.
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,37 +1,53 @@
1
1
  import { ComponentProps, HTMLProps } from 'react';
2
2
  import { FloatingOverlay, FloatingPortalProps } from '@floating-ui/react';
3
- /** Тип позиционирования диалогового окна. */
4
- export type DialogPlacement = 'default' | 'default-stretched' | 'center' | 'center-stretched' | 'mobile' | 'right-drawer' | 'left-drawer';
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
- /** Callback при изменении состояния. */
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
- * Отключить закрытие по Escape.
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
- /** testId для тестирования. */
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'>;
35
- /** Пропсы для портала */
51
+ /** Дополнительные пропсы для `FloatingPortal`, который используется для рендеринга диалога. */
36
52
  portalProps?: FloatingPortalProps;
37
53
  }
@@ -1 +1,2 @@
1
1
  export { useDialog } from './use-dialog';
2
+ export { useDialogDraggable } from './use-dialog-draggable';
@@ -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
- * Инкапсулирует логику Floating UI для позиционирования, анимаций и закрытия.
7
- * @returns {object} Объект со свойствами и хендлерами для управления диалогом.
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
  /** Заголовок модального окна. */