UNPKG

@hitachivantara/uikit-react-core

Version:
27 lines (26 loc) 791 B
import { useControlled } from "./useControlled.js"; import { useCallback, useId } from "react"; //#region src/hooks/useExpandable.ts /** expandable hook that handles a11y & open state for accordions, etc. */ function useExpandable({ disabled, expanded, defaultExpanded }) { const [isOpen, setIsOpen] = useControlled(expanded, Boolean(defaultExpanded)); const buttonId = useId(); const regionId = useId(); return { isOpen, toggleOpen: useCallback((newOpen) => setIsOpen((o) => newOpen ?? !o), [setIsOpen]), buttonProps: { id: buttonId, "aria-disabled": disabled, "aria-expanded": isOpen, "aria-controls": isOpen ? regionId : void 0 }, regionProps: { id: regionId, role: "region", "aria-labelledby": buttonId } }; } //#endregion export { useExpandable };