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