forked from mantinedev/mantine
/
Popover.context.ts
43 lines (41 loc) · 1.28 KB
/
Popover.context.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { ReferenceType } from '@floating-ui/react-dom-interactions';
import { createSafeContext } from '@mantine/utils';
import { MantineNumberSize, MantineShadow } from '@mantine/styles';
import { FloatingPosition } from '../Floating';
import { MantineTransition } from '../Transition';
import { POPOVER_ERRORS } from './Popover.errors';
import { PopoverWidth } from './Popover.types';
interface PopoverContext {
x: number;
y: number;
arrowX: number;
arrowY: number;
arrowRef: React.RefObject<HTMLDivElement>;
opened: boolean;
transition: MantineTransition;
transitionDuration: number;
exitTransitionDuration: number;
reference: (node: ReferenceType) => void;
floating: (node: HTMLElement) => void;
width?: PopoverWidth;
withArrow: boolean;
arrowSize: number;
arrowOffset: number;
trapFocus: boolean;
placement: FloatingPosition;
withinPortal: boolean;
closeOnEscape: boolean;
zIndex: React.CSSProperties['zIndex'];
radius?: MantineNumberSize;
shadow?: MantineShadow;
onClose?(): void;
getDropdownId(): string;
getTargetId(): string;
controlled: boolean;
onToggle(): void;
withRoles: boolean;
targetProps: Record<string, any>;
}
export const [PopoverContextProvider, usePopoverContext] = createSafeContext<PopoverContext>(
POPOVER_ERRORS.context
);