UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

1 lines 1.93 kB
{"version":3,"file":"use-disclosure.mjs","names":[],"sources":["../../src/use-disclosure/use-disclosure.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nexport interface UseDisclosureOptions {\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface UseDisclosureHandlers {\n set: (value: boolean) => void;\n open: () => void;\n close: () => void;\n toggle: () => void;\n}\n\nexport type UseDisclosureReturnValue = [boolean, UseDisclosureHandlers];\n\nexport function useDisclosure(\n initialState = false,\n options: UseDisclosureOptions = {}\n): UseDisclosureReturnValue {\n const [opened, setOpened] = useState(initialState);\n\n const open = useCallback(() => {\n setOpened((isOpened) => {\n if (!isOpened) {\n options.onOpen?.();\n return true;\n }\n return isOpened;\n });\n }, [options.onOpen]);\n\n const close = useCallback(() => {\n setOpened((isOpened) => {\n if (isOpened) {\n options.onClose?.();\n return false;\n }\n return isOpened;\n });\n }, [options.onClose]);\n\n const toggle = useCallback(() => {\n opened ? close() : open();\n }, [close, open, opened]);\n\n return [opened, { open, close, toggle, set: setOpened }];\n}\n\nexport namespace useDisclosure {\n export type Options = UseDisclosureOptions;\n export type Handlers = UseDisclosureHandlers;\n export type ReturnValue = UseDisclosureReturnValue;\n}\n"],"mappings":";;;AAgBA,SAAgB,cACd,eAAe,OACf,UAAgC,EAAE,EACR;CAC1B,MAAM,CAAC,QAAQ,aAAa,SAAS,aAAa;CAElD,MAAM,OAAO,kBAAkB;AAC7B,aAAW,aAAa;AACtB,OAAI,CAAC,UAAU;AACb,YAAQ,UAAU;AAClB,WAAO;;AAET,UAAO;IACP;IACD,CAAC,QAAQ,OAAO,CAAC;CAEpB,MAAM,QAAQ,kBAAkB;AAC9B,aAAW,aAAa;AACtB,OAAI,UAAU;AACZ,YAAQ,WAAW;AACnB,WAAO;;AAET,UAAO;IACP;IACD,CAAC,QAAQ,QAAQ,CAAC;AAMrB,QAAO,CAAC,QAAQ;EAAE;EAAM;EAAO,QAJhB,kBAAkB;AAC/B,YAAS,OAAO,GAAG,MAAM;KACxB;GAAC;GAAO;GAAM;GAAO,CAAC;EAEc,KAAK;EAAW,CAAC"}