@hitachivantara/uikit-react-core
Version:
UI Kit Core React components.
27 lines (26 loc) • 791 B
JavaScript
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 };