@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
143 lines (142 loc) • 6.65 kB
TypeScript
import { ElementProps, ExtendComponent, Factory, MantineRadius, MantineShadow, StylesApiProps } from '../../core';
import { ArrowPosition, FloatingAxesOffsets, FloatingPosition, FloatingStrategy } from '../../utils/Floating';
import { OverlayProps } from '../Overlay';
import { BasePortalProps } from '../Portal';
import { TransitionOverride } from '../Transition';
import { PopoverContextValue } from './Popover.context';
import { PopoverMiddlewares, PopoverWidth } from './Popover.types';
import { PopoverDropdownProps } from './PopoverDropdown/PopoverDropdown';
import { PopoverTargetProps } from './PopoverTarget/PopoverTarget';
export type PopoverStylesNames = 'dropdown' | 'arrow' | 'overlay';
export type PopoverCssVariables = {
dropdown: '--popover-radius' | '--popover-shadow';
};
export interface __PopoverProps {
/** Dropdown position relative to the target element @default 'bottom' */
position?: FloatingPosition;
/** Offset of the dropdown element @default 8 */
offset?: number | FloatingAxesOffsets;
/** Called when dropdown position changes */
onPositionChange?: (position: FloatingPosition) => void;
/** Called when dropdown closes */
onClose?: () => void;
/** Called when the popover is dismissed by clicking outside or by pressing escape */
onDismiss?: () => void;
/** Called when dropdown opens */
onOpen?: () => void;
/** If set, the dropdown is not unmounted from the DOM when hidden. `display: none` styles are added instead. */
keepMounted?: boolean;
/** Props passed down to the `Transition` component. Use to configure duration and animation type. @default { duration: 150, transition: 'fade' } */
transitionProps?: TransitionOverride;
/** Called when exit transition ends */
onExitTransitionEnd?: () => void;
/** Called when enter transition ends */
onEnterTransitionEnd?: () => void;
/** Dropdown width, or `'target'` to make dropdown width the same as target element @default 'max-content' */
width?: PopoverWidth;
/** Floating ui middlewares to configure position handling @default { flip: true, shift: true, inline: false } */
middlewares?: PopoverMiddlewares;
/** Determines whether component should have an arrow @default false */
withArrow?: boolean;
/** Determines whether the overlay should be displayed when the dropdown is opened @default false */
withOverlay?: boolean;
/** Props passed down to `Overlay` component */
overlayProps?: OverlayProps & ElementProps<'div'>;
/** Arrow size in px @default 7 */
arrowSize?: number;
/** Arrow offset in px @default 5 */
arrowOffset?: number;
/** Arrow `border-radius` in px @default 0 */
arrowRadius?: number;
/** Arrow position */
arrowPosition?: ArrowPosition;
/** Determines whether dropdown should be rendered within the `Portal` @default true */
withinPortal?: boolean;
/** Props to pass down to the `Portal` when `withinPortal` is true */
portalProps?: BasePortalProps;
/** Dropdown `z-index` @default 300 */
zIndex?: string | number;
/** Key of `theme.radius` or any valid CSS value to set border-radius @default theme.defaultRadius */
radius?: MantineRadius;
/** Key of `theme.shadows` or any other valid CSS `box-shadow` value */
shadow?: MantineShadow;
/** If set, popover dropdown will not be rendered */
disabled?: boolean;
/** Determines whether focus should be automatically returned to control when dropdown closes @default false */
returnFocus?: boolean;
/** Changes floating ui [position strategy](https://floating-ui.com/docs/usefloating#strategy) @default 'absolute' */
floatingStrategy?: FloatingStrategy;
/** If set, the dropdown is hidden when the element is hidden with styles or not visible on the screen @default true */
hideDetached?: boolean;
/** Prevents popover from flipping/shifting when it the dropdown is visible */
preventPositionChangeWhenVisible?: boolean;
}
export interface PopoverProps extends __PopoverProps, StylesApiProps<PopoverFactory> {
__staticSelector?: string;
/** `Popover.Target` and `Popover.Dropdown` components */
children?: React.ReactNode;
/** Initial opened state for uncontrolled component */
defaultOpened?: boolean;
/** Controlled dropdown opened state */
opened?: boolean;
/** Called with current state when dropdown opens or closes */
onChange?: (opened: boolean) => void;
/** Determines whether dropdown should be closed on outside clicks @default true */
closeOnClickOutside?: boolean;
/** Events that trigger outside clicks */
clickOutsideEvents?: string[];
/** Determines whether focus should be trapped within dropdown @default false */
trapFocus?: boolean;
/** Determines whether dropdown should be closed when `Escape` key is pressed @default true */
closeOnEscape?: boolean;
/** Id base to create accessibility connections */
id?: string;
/** Determines whether dropdown and target elements should have accessible roles @default true */
withRoles?: boolean;
}
export type PopoverFactory = Factory<{
props: PopoverProps;
stylesNames: PopoverStylesNames;
vars: PopoverCssVariables;
}>;
export declare function Popover(_props: PopoverProps): import("react/jsx-runtime").JSX.Element;
export declare namespace Popover {
var Target: import("../..").MantineComponent<{
props: PopoverTargetProps;
ref: HTMLElement;
compound: true;
}>;
var Dropdown: import("../..").MantineComponent<{
props: PopoverDropdownProps;
ref: HTMLDivElement;
stylesNames: PopoverStylesNames;
compound: true;
}>;
var varsResolver: import("../..").VarsResolver<{
props: PopoverProps;
stylesNames: PopoverStylesNames;
vars: PopoverCssVariables;
}>;
var displayName: string;
var extend: (input: ExtendComponent<PopoverFactory>) => import("../../core/factory/factory").ExtendsRootComponent<{
props: PopoverProps;
stylesNames: PopoverStylesNames;
vars: PopoverCssVariables;
}>;
}
export declare namespace Popover {
type Props = PopoverProps;
type __Props = __PopoverProps;
type Factory = PopoverFactory;
type StylesNames = PopoverStylesNames;
type TargetProps = PopoverTargetProps;
type DropdownProps = PopoverDropdownProps;
type Width = PopoverWidth;
type ContextValue = PopoverContextValue;
namespace Target {
type Props = PopoverTargetProps;
}
namespace Dropdown {
type Props = PopoverDropdownProps;
}
}