UNPKG

@base-ui-components/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.

41 lines (40 loc) 1.12 kB
'use client'; import * as React from 'react'; import { useControlled } from '../../utils/useControlled.js'; import { useEventCallback } from '../../utils/useEventCallback.js'; import { useTransitionStatus } from '../../utils/useTransitionStatus.js'; import { useBaseUiId } from '../../utils/useBaseUiId.js'; export function useCollapsibleRoot(parameters) { const { open: openParam, defaultOpen, onOpenChange, disabled } = parameters; const [open, setOpenState] = useControlled({ controlled: openParam, default: defaultOpen, name: 'Collapsible', state: 'open' }); const { mounted, setMounted, transitionStatus } = useTransitionStatus(open, true); const [panelId, setPanelId] = React.useState(useBaseUiId()); const setOpen = useEventCallback(nextOpen => { onOpenChange?.(nextOpen); setOpenState(nextOpen); }); return React.useMemo(() => ({ panelId, disabled, mounted, open, setPanelId, setMounted, setOpen, transitionStatus }), [panelId, disabled, mounted, open, setPanelId, setMounted, setOpen, transitionStatus]); }