UNPKG

@chakra-ui/react-use-disclosure

Version:

A Quick description of the component

1 lines 3.46 kB
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { useCallbackRef } from \"@chakra-ui/react-use-callback-ref\"\nimport React, { useCallback, useState, useId } from \"react\"\n\nexport interface UseDisclosureProps {\n isOpen?: boolean\n defaultIsOpen?: boolean\n onClose?(): void\n onOpen?(): void\n id?: string\n}\n\ntype HTMLProps = React.HTMLAttributes<HTMLElement>\n\n/**\n * `useDisclosure` is a custom hook used to help handle common open, close, or toggle scenarios.\n * It can be used to control feedback component such as `Modal`, `AlertDialog`, `Drawer`, etc.\n *\n * @see Docs https://chakra-ui.com/docs/hooks/use-disclosure\n */\nexport function useDisclosure(props: UseDisclosureProps = {}) {\n const {\n onClose: onCloseProp,\n onOpen: onOpenProp,\n isOpen: isOpenProp,\n id: idProp,\n } = props\n\n const handleOpen = useCallbackRef(onOpenProp)\n const handleClose = useCallbackRef(onCloseProp)\n\n const [isOpenState, setIsOpen] = useState(props.defaultIsOpen || false)\n\n const isOpen = isOpenProp !== undefined ? isOpenProp : isOpenState\n\n const isControlled = isOpenProp !== undefined\n\n const uid = useId()\n const id = idProp ?? `disclosure-${uid}`\n\n const onClose = useCallback(() => {\n if (!isControlled) {\n setIsOpen(false)\n }\n handleClose?.()\n }, [isControlled, handleClose])\n\n const onOpen = useCallback(() => {\n if (!isControlled) {\n setIsOpen(true)\n }\n handleOpen?.()\n }, [isControlled, handleOpen])\n\n const onToggle = useCallback(() => {\n if (isOpen) {\n onClose()\n } else {\n onOpen()\n }\n }, [isOpen, onOpen, onClose])\n\n function getButtonProps(props: HTMLProps = {}): HTMLProps {\n return {\n ...props,\n \"aria-expanded\": isOpen,\n \"aria-controls\": id,\n onClick(event) {\n props.onClick?.(event)\n onToggle()\n },\n }\n }\n\n function getDisclosureProps(props: HTMLProps = {}): HTMLProps {\n return {\n ...props,\n hidden: !isOpen,\n id,\n }\n }\n\n return {\n isOpen,\n onOpen,\n onClose,\n onToggle,\n isControlled,\n getButtonProps,\n getDisclosureProps,\n }\n}\n\nexport type UseDisclosureReturn = ReturnType<typeof useDisclosure>\n"],"mappings":";;;AAAA,SAAS,sBAAsB;AAC/B,SAAgB,aAAa,UAAU,aAAa;AAkB7C,SAAS,cAAc,QAA4B,CAAC,GAAG;AAC5D,QAAM;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,IAAI;AAAA,EACN,IAAI;AAEJ,QAAM,aAAa,eAAe,UAAU;AAC5C,QAAM,cAAc,eAAe,WAAW;AAE9C,QAAM,CAAC,aAAa,SAAS,IAAI,SAAS,MAAM,iBAAiB,KAAK;AAEtE,QAAM,SAAS,eAAe,SAAY,aAAa;AAEvD,QAAM,eAAe,eAAe;AAEpC,QAAM,MAAM,MAAM;AAClB,QAAM,KAAK,0BAAU,cAAc;AAEnC,QAAM,UAAU,YAAY,MAAM;AAChC,QAAI,CAAC,cAAc;AACjB,gBAAU,KAAK;AAAA,IACjB;AACA;AAAA,EACF,GAAG,CAAC,cAAc,WAAW,CAAC;AAE9B,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,CAAC,cAAc;AACjB,gBAAU,IAAI;AAAA,IAChB;AACA;AAAA,EACF,GAAG,CAAC,cAAc,UAAU,CAAC;AAE7B,QAAM,WAAW,YAAY,MAAM;AACjC,QAAI,QAAQ;AACV,cAAQ;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,OAAO,CAAC;AAE5B,WAAS,eAAeA,SAAmB,CAAC,GAAc;AACxD,WAAO;AAAA,MACL,GAAGA;AAAA,MACH,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,QAAQ,OAAO;AAlErB;AAmEQ,cAAAA,OAAM,YAAN,wBAAAA,QAAgB;AAChB,iBAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,WAAS,mBAAmBA,SAAmB,CAAC,GAAc;AAC5D,WAAO;AAAA,MACL,GAAGA;AAAA,MACH,QAAQ,CAAC;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["props"]}