UNPKG

@ariakit/react-core

Version:

Ariakit React core

117 lines (95 loc) 4.23 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _6F6SPO63cjs = require('./6F6SPO63.cjs'); var _YUGKYIYYcjs = require('./YUGKYIYY.cjs'); var _WULEED4Qcjs = require('./WULEED4Q.cjs'); var _OZM4QA2Vcjs = require('./OZM4QA2V.cjs'); var _7EQBAZ46cjs = require('./7EQBAZ46.cjs'); // src/hovercard/hovercard-anchor.tsx var _events = require('@ariakit/core/utils/events'); var _misc = require('@ariakit/core/utils/misc'); var _react = require('react'); var TagName = "a"; var useHovercardAnchor = _WULEED4Qcjs.createHook.call(void 0, function useHovercardAnchor2(_a) { var _b = _a, { store, showOnHover = true } = _b, props = _7EQBAZ46cjs.__objRest.call(void 0, _b, ["store", "showOnHover"]); const context = _6F6SPO63cjs.useHovercardProviderContext.call(void 0, ); store = store || context; _misc.invariant.call(void 0, store, process.env.NODE_ENV !== "production" && "HovercardAnchor must receive a `store` prop or be wrapped in a HovercardProvider component." ); const disabled = _misc.disabledFromProps.call(void 0, props); const showTimeoutRef = _react.useRef.call(void 0, 0); _react.useEffect.call(void 0, () => () => window.clearTimeout(showTimeoutRef.current), []); _react.useEffect.call(void 0, () => { const onMouseLeave = (event) => { if (!store) return; const { anchorElement } = store.getState(); if (!anchorElement) return; if (event.target !== anchorElement) return; window.clearTimeout(showTimeoutRef.current); showTimeoutRef.current = 0; }; return _events.addGlobalEventListener.call(void 0, "mouseleave", onMouseLeave, true); }, [store]); const onMouseMoveProp = props.onMouseMove; const showOnHoverProp = _OZM4QA2Vcjs.useBooleanEvent.call(void 0, showOnHover); const isMouseMoving = _OZM4QA2Vcjs.useIsMouseMoving.call(void 0, ); const onMouseMove = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => { onMouseMoveProp == null ? void 0 : onMouseMoveProp(event); if (disabled) return; if (!store) return; if (event.defaultPrevented) return; if (showTimeoutRef.current) return; if (!isMouseMoving()) return; if (!showOnHoverProp(event)) return; const element = event.currentTarget; store.setAnchorElement(element); store.setDisclosureElement(element); const { showTimeout, timeout } = store.getState(); const showHovercard = () => { showTimeoutRef.current = 0; if (!isMouseMoving()) return; store == null ? void 0 : store.setAnchorElement(element); store == null ? void 0 : store.show(); queueMicrotask(() => { store == null ? void 0 : store.setDisclosureElement(element); }); }; const timeoutMs = showTimeout != null ? showTimeout : timeout; if (timeoutMs === 0) { showHovercard(); } else { showTimeoutRef.current = window.setTimeout(showHovercard, timeoutMs); } }); const onClickProp = props.onClick; const onClick = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => { onClickProp == null ? void 0 : onClickProp(event); if (!store) return; window.clearTimeout(showTimeoutRef.current); showTimeoutRef.current = 0; }); const ref = _react.useCallback.call(void 0, (element) => { if (!store) return; const { anchorElement } = store.getState(); if (anchorElement == null ? void 0 : anchorElement.isConnected) return; store.setAnchorElement(element); }, [store] ); props = _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, {}, props), { ref: _OZM4QA2Vcjs.useMergeRefs.call(void 0, ref, props.ref), onMouseMove, onClick }); props = _YUGKYIYYcjs.useFocusable.call(void 0, props); return props; } ); var HovercardAnchor = _WULEED4Qcjs.forwardRef.call(void 0, function HovercardAnchor2(props) { const htmlProps = useHovercardAnchor(props); return _WULEED4Qcjs.createElement.call(void 0, TagName, htmlProps); }); exports.useHovercardAnchor = useHovercardAnchor; exports.HovercardAnchor = HovercardAnchor;