Files
NapCatQQ/.pnpm-store/v3/files/23/87ee31fdfbef3bfad688fdba3ee1062fd59b0889e4266cb73aa95042ae5786fb89424da0648baeb963d0213f2e585623c1c367c365bc2c89ac14641cea2f84
T
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

60 lines
1.7 KiB
Plaintext

// src/index.ts
import { chain } from "@react-aria/utils";
import { useControlledState } from "@react-stately/utils";
import { useCallbackRef } from "@heroui/use-callback-ref";
import { useCallback, useId } from "react";
function useDisclosure(props = {}) {
const {
id: idProp,
defaultOpen,
isOpen: isOpenProp,
onClose: onCloseProp,
onOpen: onOpenProp,
onChange = () => {
}
} = props;
const onOpenPropCallbackRef = useCallbackRef(onOpenProp);
const onClosePropCallbackRef = useCallbackRef(onCloseProp);
const [isOpen, setIsOpen] = useControlledState(isOpenProp, defaultOpen || false, onChange);
const reactId = useId();
const id = idProp || reactId;
const isControlled = isOpenProp !== void 0;
const onClose = useCallback(() => {
if (!isControlled) {
setIsOpen(false);
}
onClosePropCallbackRef == null ? void 0 : onClosePropCallbackRef();
}, [isControlled, onClosePropCallbackRef]);
const onOpen = useCallback(() => {
if (!isControlled) {
setIsOpen(true);
}
onOpenPropCallbackRef == null ? void 0 : onOpenPropCallbackRef();
}, [isControlled, onOpenPropCallbackRef]);
const onOpenChange = useCallback(() => {
const action = isOpen ? onClose : onOpen;
action();
}, [isOpen, onOpen, onClose]);
return {
isOpen: !!isOpen,
onOpen,
onClose,
onOpenChange,
isControlled,
getButtonProps: (props2 = {}) => ({
...props2,
"aria-expanded": isOpen,
"aria-controls": id,
onClick: chain(props2.onClick, onOpenChange)
}),
getDisclosureProps: (props2 = {}) => ({
...props2,
hidden: !isOpen,
id
})
};
}
export {
useDisclosure
};