@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
33 lines (32 loc) • 808 B
JavaScript
import { setId } from "../utils/setId.js";
import { useControlled } from "./useControlled.js";
import { useUniqueId } from "./useUniqueId.js";
function useExpandable({
id: idProp,
disabled,
expanded,
defaultExpanded
}) {
const [isOpen, setIsOpen] = useControlled(expanded, Boolean(defaultExpanded));
const id = useUniqueId(idProp);
const buttonId = setId(id, "button");
const regionId = setId(id, "container");
return {
isOpen,
toggleOpen: (newOpen) => setIsOpen((o) => newOpen ?? !o),
buttonProps: {
id: buttonId,
"aria-disabled": disabled,
"aria-expanded": isOpen,
"aria-controls": isOpen ? regionId : void 0
},
regionProps: {
id: regionId,
role: "region",
"aria-labelledby": buttonId
}
};
}
export {
useExpandable
};