UNPKG

@ariakit/react-core

Version:

Ariakit React core

143 lines (121 loc) 5.07 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _SCVBAQZ5cjs = require('../__chunks/SCVBAQZ5.cjs'); var _4EED5SUUcjs = require('../__chunks/4EED5SUU.cjs'); require('../__chunks/6F6SPO63.cjs'); require('../__chunks/ZVJRPAXY.cjs'); require('../__chunks/YDPERDKF.cjs'); require('../__chunks/KVXNVDJK.cjs'); require('../__chunks/YUGKYIYY.cjs'); require('../__chunks/T3QB4FR3.cjs'); var _WULEED4Qcjs = require('../__chunks/WULEED4Q.cjs'); var _OZM4QA2Vcjs = require('../__chunks/OZM4QA2V.cjs'); require('../__chunks/FDRJDQ5Y.cjs'); var _7EQBAZ46cjs = require('../__chunks/7EQBAZ46.cjs'); // src/tooltip/tooltip-anchor.tsx var _misc = require('@ariakit/core/utils/misc'); var _store = require('@ariakit/core/utils/store'); var _react = require('react'); var TagName = "div"; var globalStore = _store.createStore.call(void 0, { activeStore: null }); function createRemoveStoreCallback(store) { return () => { const { activeStore } = globalStore.getState(); if (activeStore !== store) return; globalStore.setState("activeStore", null); }; } var useTooltipAnchor = _WULEED4Qcjs.createHook.call(void 0, function useTooltipAnchor2(_a) { var _b = _a, { store, showOnHover = true } = _b, props = _7EQBAZ46cjs.__objRest.call(void 0, _b, ["store", "showOnHover"]); const context = _SCVBAQZ5cjs.useTooltipProviderContext.call(void 0, ); store = store || context; _misc.invariant.call(void 0, store, process.env.NODE_ENV !== "production" && "TooltipAnchor must receive a `store` prop or be wrapped in a TooltipProvider component." ); const canShowOnHoverRef = _react.useRef.call(void 0, false); _react.useEffect.call(void 0, () => { return _store.sync.call(void 0, store, ["mounted"], (state) => { if (state.mounted) return; canShowOnHoverRef.current = false; }); }, [store]); _react.useEffect.call(void 0, () => { if (!store) return; return _misc.chain.call(void 0, // Immediately remove the current store from the global store when // the component unmounts. This is useful, for example, to avoid // showing tooltips immediately on serial tests. createRemoveStoreCallback(store), _store.sync.call(void 0, store, ["mounted", "skipTimeout"], (state) => { if (!store) return; if (state.mounted) { const { activeStore } = globalStore.getState(); if (activeStore !== store) { activeStore == null ? void 0 : activeStore.hide(); } return globalStore.setState("activeStore", store); } const id = setTimeout( createRemoveStoreCallback(store), state.skipTimeout ); return () => clearTimeout(id); }) ); }, [store]); const onMouseEnterProp = props.onMouseEnter; const onMouseEnter = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => { onMouseEnterProp == null ? void 0 : onMouseEnterProp(event); canShowOnHoverRef.current = true; }); const onFocusVisibleProp = props.onFocusVisible; const onFocusVisible = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => { onFocusVisibleProp == null ? void 0 : onFocusVisibleProp(event); if (event.defaultPrevented) return; store == null ? void 0 : store.setAnchorElement(event.currentTarget); store == null ? void 0 : store.show(); }); const onBlurProp = props.onBlur; const onBlur = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => { onBlurProp == null ? void 0 : onBlurProp(event); if (event.defaultPrevented) return; const { activeStore } = globalStore.getState(); canShowOnHoverRef.current = false; if (activeStore === store) { globalStore.setState("activeStore", null); } }); const type = store.useState("type"); const contentId = store.useState((state) => { var _a2; return (_a2 = state.contentElement) == null ? void 0 : _a2.id; }); props = _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, { "aria-labelledby": type === "label" ? contentId : void 0 }, props), { onMouseEnter, onFocusVisible, onBlur }); props = _4EED5SUUcjs.useHovercardAnchor.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, { store, showOnHover(event) { if (!canShowOnHoverRef.current) return false; if (_misc.isFalsyBooleanCallback.call(void 0, showOnHover, event)) return false; const { activeStore } = globalStore.getState(); if (!activeStore) return true; store == null ? void 0 : store.show(); return false; } }, props)); return props; } ); var TooltipAnchor = _WULEED4Qcjs.forwardRef.call(void 0, function TooltipAnchor2(props) { const htmlProps = useTooltipAnchor(props); return _WULEED4Qcjs.createElement.call(void 0, TagName, htmlProps); }); exports.TooltipAnchor = TooltipAnchor; exports.useTooltipAnchor = useTooltipAnchor;