useDismiss
Dismisses on outside click or Escape, with a list of refs that do not count as outside.
Signature
useDismiss calls a handler on outside pointer presses and Escape. ignoreRefs lists elements excluded from outside presses. Include both the trigger and the panel to prevent trigger presses from dismissing the overlay.
function useDismiss(options: {
enabled: boolean;
/** Clicks inside any of these do not dismiss — include the trigger, not just the panel. */
ignoreRefs: { current: HTMLElement | null }[];
onDismiss: () => void;
}): void;Usage
import { useRef, useState } from "react";
import { useDismiss } from "@solarius/onset";
function Menu() {
const triggerRef = useRef<HTMLButtonElement>(null);
const panelRef = useRef<HTMLDivElement>(null);
const [open, setOpen] = useState(false);
useDismiss({
enabled: open,
ignoreRefs: [triggerRef, panelRef],
onDismiss: () => setOpen(false),
});
return (
<>
<button ref={triggerRef} onClick={() => setOpen((v) => !v)}>
Open
</button>
{open ? <div ref={panelRef}>…</div> : null}
</>
);
}