@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.
29 lines (28 loc) • 960 B
JavaScript
'use client';
import * as React from 'react';
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
import { useStableCallback } from '@base-ui/utils/useStableCallback';
export 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 useClosePartRegistration() {
const context = React.useContext(ClosePartContext);
useIsoLayoutEffect(() => {
return context?.register();
}, [context]);
}