UNPKG

@grafana/ui

Version:
1 lines 2.05 kB
{"version":3,"file":"PopoverController.cjs","sources":["../../../../src/components/Tooltip/PopoverController.tsx"],"sourcesContent":["import { type Placement } from '@popperjs/core';\nimport { useState, useRef, useCallback, type JSX } from 'react';\n\nimport { type PopoverContent } from './types';\n\ntype PopperControllerRenderProp = (\n showPopper: () => void,\n hidePopper: () => void,\n popperProps: {\n show: boolean;\n placement: Placement;\n content: PopoverContent;\n }\n) => JSX.Element;\n\ninterface Props {\n placement?: Placement;\n content: PopoverContent;\n className?: string;\n children: PopperControllerRenderProp;\n hideAfter?: number;\n}\n\nconst PopoverController = ({ placement = 'auto', content, children, hideAfter }: Props) => {\n const [show, setShow] = useState(false);\n const hideTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const showPopper = useCallback(() => {\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current);\n }\n setShow(true);\n }, []);\n\n const hidePopper = useCallback(() => {\n hideTimeoutRef.current = setTimeout(() => {\n setShow(false);\n }, hideAfter);\n }, [hideAfter]);\n\n return children(showPopper, hidePopper, {\n show,\n placement,\n content,\n });\n};\n\nexport { PopoverController };\n"],"names":["useState","useRef","useCallback"],"mappings":";;;;;;;AAuBA,MAAM,iBAAA,GAAoB,CAAC,EAAE,SAAA,GAAY,QAAQ,OAAA,EAAS,QAAA,EAAU,WAAU,KAAa;AACzF,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,cAAA,GAAiBC,aAA6C,IAAI,CAAA;AAExE,EAAA,MAAM,UAAA,GAAaC,kBAAY,MAAM;AACnC,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,YAAA,CAAa,eAAe,OAAO,CAAA;AAAA,IACrC;AACA,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,kBAAY,MAAM;AACnC,IAAA,cAAA,CAAe,OAAA,GAAU,WAAW,MAAM;AACxC,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,GAAG,SAAS,CAAA;AAAA,EACd,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,OAAO,QAAA,CAAS,YAAY,UAAA,EAAY;AAAA,IACtC,IAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;;;;"}