pouncejs
Version:
A collection of UI components from Panther labs
49 lines (44 loc) • 1.35 kB
JavaScript
import React from 'react';
import useDisclosure from '../../utils/useDisclosure';
import { useId } from '@reach/auto-id';
// @ts-ignore
var PopoverContext = /*#__PURE__*/React.createContext(undefined);
var usePopoverContext = function usePopoverContext() {
return React.useContext(PopoverContext);
};
var Popover = function Popover(_ref) {
var isInitiallyOpen = _ref.isOpen,
id = _ref.id,
children = _ref.children;
var _useDisclosure = useDisclosure({
isOpen: isInitiallyOpen
}),
isOpen = _useDisclosure.isOpen,
close = _useDisclosure.close,
open = _useDisclosure.open,
toggle = _useDisclosure.toggle;
var triggerRef = React.useRef(null);
var popoverRef = React.useRef(null);
var popoverId = useId(id);
var contextValue = React.useMemo(function () {
return {
popoverId: popoverId,
triggerRef: triggerRef,
popoverRef: popoverRef,
open: open,
close: close,
toggle: toggle,
isOpen: isOpen
};
}, [popoverId, triggerRef, popoverRef, close, toggle, isOpen]);
return /*#__PURE__*/React.createElement(PopoverContext.Provider, {
value: contextValue
}, typeof children === 'function' ? children({
isOpen: isOpen,
open: open,
close: close,
toggle: toggle
}) : children);
};
export { usePopoverContext };
export default Popover;