@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.
40 lines (39 loc) • 1.2 kB
JavaScript
'use client';
import * as React from 'react';
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
import { useStableCallback } from '@base-ui/utils/useStableCallback';
import { jsx as _jsx } from "react/jsx-runtime";
const ClosePartContext = /*#__PURE__*/React.createContext(undefined);
if (process.env.NODE_ENV !== "production") ClosePartContext.displayName = "ClosePartContext";
export function useClosePartCount() {
const [closePartCount, setClosePartCount] = React.useState(0);
const register = useStableCallback(() => {
setClosePartCount(count => count + 1);
return () => {
setClosePartCount(count => Math.max(0, count - 1));
};
});
const context = React.useMemo(() => ({
register
}), [register]);
return {
context,
hasClosePart: closePartCount > 0
};
}
export function ClosePartProvider(props) {
const {
value,
children
} = props;
return /*#__PURE__*/_jsx(ClosePartContext.Provider, {
value: value,
children: children
});
}
export function useClosePartRegistration() {
const context = React.useContext(ClosePartContext);
useIsoLayoutEffect(() => {
return context?.register();
}, [context]);
}