UNPKG

@base-ui/react

Version:

Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.

48 lines (47 loc) 1.59 kB
"use strict"; 'use client'; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.ClosePartProvider = ClosePartProvider; exports.useClosePartCount = useClosePartCount; exports.useClosePartRegistration = useClosePartRegistration; var React = _interopRequireWildcard(require("react")); var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect"); var _useStableCallback = require("@base-ui/utils/useStableCallback"); var _jsxRuntime = require("react/jsx-runtime"); const ClosePartContext = /*#__PURE__*/React.createContext(undefined); if (process.env.NODE_ENV !== "production") ClosePartContext.displayName = "ClosePartContext"; function useClosePartCount() { const [closePartCount, setClosePartCount] = React.useState(0); const register = (0, _useStableCallback.useStableCallback)(() => { setClosePartCount(count => count + 1); return () => { setClosePartCount(count => Math.max(0, count - 1)); }; }); const context = React.useMemo(() => ({ register }), [register]); return { context, hasClosePart: closePartCount > 0 }; } function ClosePartProvider(props) { const { value, children } = props; return /*#__PURE__*/(0, _jsxRuntime.jsx)(ClosePartContext.Provider, { value: value, children: children }); } function useClosePartRegistration() { const context = React.useContext(ClosePartContext); (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => { return context?.register(); }, [context]); }