UNPKG

@modern-kit/react

Version:
38 lines (34 loc) 1.2 kB
'use strict'; var React = require('react'); var utils = require('@modern-kit/utils'); var hooksUseEventListener = require('../useEventListener/index.cjs'); require('../usePreservedCallback/index.cjs'); require('../useIsomorphicLayoutEffect/index.cjs'); function useOutsidePointerDown(callback, options) { const { excludeRefs } = options ?? {}; const targetRef = React.useRef(null); const eventType = React.useMemo( () => utils.isMobile() ? "touchstart" : "mousedown", [] ); const handleOutsidePointerDown = ({ target }) => { if (!targetRef.current) return; const targetElement = targetRef.current; const isInExcluded = excludeRefs?.some( (excludeRef) => excludeRef.current?.contains(target) ); const isOutside = !targetElement.contains(target); const shouldTriggerCallback = isOutside && !isInExcluded; if (shouldTriggerCallback) { callback(targetElement); } }; hooksUseEventListener.useEventListener( typeof document !== "undefined" ? document : null, eventType, handleOutsidePointerDown ); return { ref: targetRef }; } exports.useOutsidePointerDown = useOutsidePointerDown; //# sourceMappingURL=index.cjs.map