@ariakit/react-core
Version:
Ariakit React core
117 lines (95 loc) • 4.23 kB
JavaScript
;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;