UNPKG

@stimulus-library/mixins

Version:

A library of useful controllers for Stimulus

18 lines (17 loc) 632 B
import { isElementInViewport } from "@stimulus-library/utilities"; import { useEventListener } from "./use_event_listener"; import { useMixin } from "./use_mixin"; export function useClickOutside(controller, element, callback) { callback = callback.bind(controller); const handler = (event) => { if (element.contains(event.target) || (!isElementInViewport(element))) { return; } callback(event); }; const { teardown } = useEventListener(controller, window, ["click", "touchend"], handler); useMixin(controller, () => void 0, teardown); return { teardown, }; }