UNPKG

@ariakit/react-core

Version:

Ariakit React core

82 lines (60 loc) 3.04 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _KVXNVDJKcjs = require('./KVXNVDJK.cjs'); var _F4ZQFU26cjs = require('./F4ZQFU26.cjs'); var _WULEED4Qcjs = require('./WULEED4Q.cjs'); var _OZM4QA2Vcjs = require('./OZM4QA2V.cjs'); var _7EQBAZ46cjs = require('./7EQBAZ46.cjs'); // src/disclosure/disclosure.tsx var _misc = require('@ariakit/core/utils/misc'); var _react = require('react'); var TagName = "button"; var symbol = Symbol("disclosure"); var useDisclosure = _WULEED4Qcjs.createHook.call(void 0, function useDisclosure2(_a) { var _b = _a, { store, toggleOnClick = true } = _b, props = _7EQBAZ46cjs.__objRest.call(void 0, _b, ["store", "toggleOnClick"]); const context = _KVXNVDJKcjs.useDisclosureProviderContext.call(void 0, ); store = store || context; _misc.invariant.call(void 0, store, process.env.NODE_ENV !== "production" && "Disclosure must receive a `store` prop or be wrapped in a DisclosureProvider component." ); const ref = _react.useRef.call(void 0, null); const [expanded, setExpanded] = _react.useState.call(void 0, false); const disclosureElement = store.useState("disclosureElement"); const open = store.useState("open"); _react.useEffect.call(void 0, () => { let isCurrentDisclosure = disclosureElement === ref.current; if (!(disclosureElement == null ? void 0 : disclosureElement.isConnected)) { store == null ? void 0 : store.setDisclosureElement(ref.current); isCurrentDisclosure = true; } setExpanded(open && isCurrentDisclosure); }, [disclosureElement, store, open]); const onClickProp = props.onClick; const toggleOnClickProp = _OZM4QA2Vcjs.useBooleanEvent.call(void 0, toggleOnClick); const [isDuplicate, metadataProps] = _OZM4QA2Vcjs.useMetadataProps.call(void 0, props, symbol, true); const onClick = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => { onClickProp == null ? void 0 : onClickProp(event); if (event.defaultPrevented) return; if (isDuplicate) return; if (!toggleOnClickProp(event)) return; store == null ? void 0 : store.setDisclosureElement(event.currentTarget); store == null ? void 0 : store.toggle(); }); const contentElement = store.useState("contentElement"); props = _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, { "aria-expanded": expanded, "aria-controls": contentElement == null ? void 0 : contentElement.id }, metadataProps), props), { ref: _OZM4QA2Vcjs.useMergeRefs.call(void 0, ref, props.ref), onClick }); props = _F4ZQFU26cjs.useButton.call(void 0, props); return props; } ); var Disclosure = _WULEED4Qcjs.forwardRef.call(void 0, function Disclosure2(props) { const htmlProps = useDisclosure(props); return _WULEED4Qcjs.createElement.call(void 0, TagName, htmlProps); }); exports.useDisclosure = useDisclosure; exports.Disclosure = Disclosure;