@wordpress/components
Version:
UI components for WordPress.
208 lines • 7.55 kB
TypeScript
/**
* External dependencies
*/
import type { ReactNode, MutableRefObject, SyntheticEvent } from 'react';
import type { Placement } from '@floating-ui/react-dom';
type PositionYAxis = 'top' | 'middle' | 'bottom';
type PositionXAxis = 'left' | 'center' | 'right';
type PositionCorner = 'top' | 'right' | 'bottom' | 'left';
type DomRectWithOwnerDocument = DOMRect & {
ownerDocument?: Document;
};
type PopoverPlacement = Placement | 'overlay';
export type PopoverAnchorRefReference = MutableRefObject<Element | null | undefined>;
export type PopoverAnchorRefTopBottom = {
top: Element;
bottom: Element;
};
export type VirtualElement = Pick<Element, 'getBoundingClientRect'> & {
ownerDocument?: Document;
};
export type PopoverProps = {
/**
* The name of the Slot in which the popover should be rendered. It should
* be also passed to the corresponding `PopoverSlot` component.
*
* @default 'Popover'
*/
__unstableSlotName?: string;
/**
* The element that should be used by the popover as its anchor. It can either
* be an `Element` or, alternatively, a `VirtualElement` — ie. an object with
* the `getBoundingClientRect()` and the `ownerDocument` properties defined.
*
* **The anchor element should be stored in local state** rather than a
* plain React ref to ensure reactive updating when it changes.
*/
anchor?: Element | VirtualElement | null;
/**
* Whether the popover should animate when opening.
*
* @default true
*/
animate?: boolean;
/**
* The `children` elements rendered as the popover's content.
*/
children: ReactNode;
/**
* Show the popover fullscreen on mobile viewports.
*/
expandOnMobile?: boolean;
/**
* Specifies whether the popover should flip across its axis if there isn't
* space for it in the normal placement.
* When the using a 'top' placement, the popover will switch to a 'bottom'
* placement. When using a 'left' placement, the popover will switch to a
* `right' placement.
* The popover will retain its alignment of 'start' or 'end' when flipping.
*
* @default true
*/
flip?: boolean;
/**
* Determines whether tabbing is constrained to within the popover,
* preventing keyboard focus from leaving the popover content without
* explicit focus elswhere, or whether the popover remains part of the wider
* tab order. If no value is passed, it will be derived from `focusOnMount`.
*
* @default `focusOnMount` !== false
*/
constrainTabbing?: boolean;
/**
* By default, the _first tabbable element_ in the popover will receive focus
* when it mounts. This is the same as setting this prop to `"firstElement"`.
* Specifying a `false` value disables the focus handling entirely (this
* should only be done when an appropriately accessible substitute behavior
* exists).
*
* @default 'firstElement'
*/
focusOnMount?: 'firstElement' | boolean;
/**
* A callback invoked when the focus leaves the opened popover. This should
* only be provided in advanced use-cases when a popover should close under
* specific circumstances (for example, if the new `document.activeElement`
* is content of or otherwise controlling popover visibility).
*
* When not provided, the `onClose` callback will be called instead.
*/
onFocusOutside?: (event: SyntheticEvent) => void;
/**
* Used to customize the header text shown when the popover is toggled to
* fullscreen on mobile viewports (see the `expandOnMobile` prop).
*/
headerTitle?: string;
/**
* Used to show/hide the arrow that points at the popover's anchor.
*
* @default true
*/
noArrow?: boolean;
/**
* The distance (in px) between the anchor and the popover.
*/
offset?: number;
/**
* A callback invoked when the popover should be closed.
*/
onClose?: () => void;
/**
* Used to specify the popover's position with respect to its anchor.
*
* @default 'bottom-start'
*/
placement?: PopoverPlacement;
/**
* Legacy way to specify the popover's position with respect to its anchor.
* _Note: this prop is deprecated. Use the `placement` prop instead._
*/
position?: `${PositionYAxis}` | `${PositionYAxis} ${PositionXAxis}` | `${PositionYAxis} ${PositionXAxis} ${PositionCorner}`;
/**
* Adjusts the size of the popover to prevent its contents from going out of
* view when meeting the viewport edges.
* _Note: The `resize` and `shift` props are not intended to be used together.
* Enabling both can cause unexpected behavior._
*
* @default true
*/
resize?: boolean;
/**
* Enables the `Popover` to shift in order to stay in view when meeting the
* viewport edges.
* _Note: The `resize` and `shift` props are not intended to be used together.
* Enabling both can cause unexpected behavior._
*
* @default false
*/
shift?: boolean;
/**
* Specifies the popover's style.
*
* Leave undefined for the default style. Other values are:
* - 'unstyled': The popover is essentially without any visible style, it
* has no background, border, outline or drop shadow, but
* the popover contents are still displayed.
* - 'toolbar': A style that has no elevation, but a high contrast with
* other elements. This is matches the style of the
* `Toolbar` component.
*
* @default undefined
*/
variant?: 'unstyled' | 'toolbar';
/**
* Whether to render the popover inline or within the slot.
*
* @default false
*/
inline?: boolean;
/**
* Prevent the popover from flipping and resizing when meeting the viewport
* edges. _Note: this prop is deprecated. Instead, provide use the individual
* `flip` and `resize` props._
*
* @deprecated
*/
__unstableForcePosition?: boolean;
/**
* An object extending a `DOMRect` with an additional optional `ownerDocument`
* property, used to specify a fixed popover position.
*
* @deprecated
*/
anchorRect?: DomRectWithOwnerDocument;
/**
* Used to specify a fixed popover position. It can be an `Element`, a React
* reference to an `element`, an object with a `top` and a `bottom` properties
* (both pointing to elements), or a `range`.
*
* @deprecated
*/
anchorRef?: Element | PopoverAnchorRefReference | PopoverAnchorRefTopBottom | Range;
/**
* A function returning the same value as the one expected by the `anchorRect`
* prop, used to specify a dynamic popover position.
*
* @deprecated
*/
getAnchorRect?: (fallbackReferenceElement: Element | null) => DomRectWithOwnerDocument;
/**
* Used to enable a different visual style for the popover.
* _Note: this prop is deprecated. Use the `variant` prop with the
* 'toolbar' value instead._
*
* @deprecated
*/
isAlternate?: boolean;
};
export type PopoverSlotProps = {
/**
* The name of the Slot in which the popover should be rendered. It should
* be also passed to the corresponding `PopoverSlot` component.
*
* @default 'Popover'
*/
name?: string;
};
export {};
//# sourceMappingURL=types.d.ts.map