import * as React from 'react';
import PopoverElement from './PopoverElement';
import PopoverTrigger from './PopoverTrigger';
import {PopoverContext} from './usePopoverContext';
import usePopover, {PopoverPlacement, PopoverRole} from './usePopover';
export type PopoverPropsType = {
/**
* Popover content which consists of popover element and popover trigger.
* @example
Here's my popover
*/
children?: React.ReactNode;
/**
* Popover id.
*/
id?: string;
/**
* Popover alignment.
*/
placement?: PopoverPlacement;
/**
* Set if Popover should be displayed by default.
*/
defaultOpen?: boolean;
/**
* Only controlled component. Set Popover open state.
*/
open?: boolean;
role?: PopoverRole;
/**
* Determine if hover should affect popover visibility.
* @default true
*/
useHover?: boolean;
/**
* Determine if click should affect popover visibility.
* @default true
*/
useClick?: boolean;
/**
* Determine if focus should affect popover visibility.
* @default true
*/
useFocus?: boolean;
/**
* Only controlled component. Handle Popover open state change.
*/
onOpenChange?: (arg0: boolean) => void;
} & Omit<
React.AllHTMLAttributes,
'children' | 'className' | 'placement'
>;
const Popover = ({
children,
placement,
id,
useHover,
useClick,
useFocus,
defaultOpen = false,
open,
role,
onOpenChange,
}: PopoverPropsType) => {
const popover = usePopover({
placement,
customId: id,
defaultOpen,
open,
onOpenChange,
useHover,
useClick,
useFocus,
role,
});
return (
{children}
);
};
Popover.Trigger = PopoverTrigger;
Popover.Element = PopoverElement;
export default Popover;