@trellixio/roaster-coffee
Version:
Beans' product component library
45 lines (42 loc) • 1.21 kB
JavaScript
import { useFloating, offset, flip, shift, autoUpdate, useClick, useDismiss, useRole, useInteractions } from '@floating-ui/react';
import React__default from 'react';
function useDropdown({
placement = "bottom-end",
open: controlledOpen,
onOpenChange: setControlledOpen
} = {}) {
const [uncontrolledOpen, setUncontrolledOpen] = React__default.useState(false);
const open = controlledOpen ?? uncontrolledOpen;
const setOpen = setControlledOpen ?? setUncontrolledOpen;
const data = useFloating({
placement,
open,
onOpenChange: setOpen,
whileElementsMounted: autoUpdate,
middleware: [
offset(5),
flip({
fallbackAxisSideDirection: "end"
}),
shift({ padding: 5 })
]
});
const { context } = data;
const click = useClick(context, {
enabled: controlledOpen == null
});
const dismiss = useDismiss(context);
const role = useRole(context);
const interactions = useInteractions([click, dismiss, role]);
return React__default.useMemo(
() => ({
open,
setOpen,
...interactions,
...data
}),
[open, setOpen, interactions, data]
);
}
export { useDropdown };
//# sourceMappingURL=useDropdown.js.map