@ariakit/react-core
Version:
Ariakit React core
112 lines (94 loc) • 4.01 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _TPPZG3JZcjs = require('./TPPZG3JZ.cjs');
var _YAKNSXYIcjs = require('./YAKNSXYI.cjs');
var _WBFXWJUHcjs = require('./WBFXWJUH.cjs');
var _MZ2HG624cjs = require('./MZ2HG624.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 = _WBFXWJUHcjs.createHook.call(void 0,
function useHovercardAnchor2({ store, showOnHover = true, ...props }) {
const context = _TPPZG3JZcjs.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 = _MZ2HG624cjs.useBooleanEvent.call(void 0, showOnHover);
const isMouseMoving = _MZ2HG624cjs.useIsMouseMoving.call(void 0, );
const onMouseMove = _MZ2HG624cjs.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 = _MZ2HG624cjs.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 = {
...props,
ref: _MZ2HG624cjs.useMergeRefs.call(void 0, ref, props.ref),
onMouseMove,
onClick
};
props = _YAKNSXYIcjs.useFocusable.call(void 0, props);
return props;
}
);
var HovercardAnchor = _WBFXWJUHcjs.forwardRef.call(void 0, function HovercardAnchor2(props) {
const htmlProps = useHovercardAnchor(props);
return _WBFXWJUHcjs.createElement.call(void 0, TagName, htmlProps);
});
exports.useHovercardAnchor = useHovercardAnchor; exports.HovercardAnchor = HovercardAnchor;