@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
1 lines • 4.65 kB
Source Map (JSON)
{"version":3,"file":"use-hover-card.cjs","names":["HoverCardGroupContext"],"sources":["../../../src/components/HoverCard/use-hover-card.ts"],"sourcesContent":["import { use, useCallback, useEffect, useRef, useState } from 'react';\nimport {\n useDelayGroup,\n useDismiss,\n useFloating,\n useHover,\n useInteractions,\n useRole,\n} from '@floating-ui/react';\nimport { useId } from '@mantine/hooks';\nimport { HoverCardGroupContext } from './HoverCardGroup/HoverCardGroup';\n\ninterface UseHoverCard {\n openDelay?: number;\n closeDelay?: number;\n opened?: boolean;\n defaultOpened?: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport function useHoverCard(settings: UseHoverCard) {\n const [uncontrolledOpened, setUncontrolledOpened] = useState(settings.defaultOpened);\n const controlled = typeof settings.opened === 'boolean';\n const opened = controlled ? settings.opened : uncontrolledOpened;\n const withinGroup = use(HoverCardGroupContext).withinGroup;\n const uid = useId();\n\n const openTimeout = useRef(-1);\n const closeTimeout = useRef(-1);\n\n const clearTimeouts = useCallback(() => {\n window.clearTimeout(openTimeout.current);\n window.clearTimeout(closeTimeout.current);\n }, []);\n\n const onChange = useCallback(\n (_opened: boolean) => {\n setUncontrolledOpened(_opened);\n\n if (_opened) {\n setCurrentId(uid);\n settings.onOpen?.();\n } else {\n settings.onClose?.();\n }\n },\n [uid, settings.onOpen, settings.onClose]\n );\n\n const { context, refs } = useFloating({\n open: opened,\n onOpenChange: onChange,\n });\n\n const { delay: groupDelay, setCurrentId } = useDelayGroup(context, { id: uid });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useHover(context, {\n enabled: true,\n delay: withinGroup ? groupDelay : { open: settings.openDelay, close: settings.closeDelay },\n }),\n useRole(context, { role: 'dialog' }),\n useDismiss(context, { enabled: withinGroup }),\n ]);\n\n const openDropdown = useCallback(() => {\n if (withinGroup) {\n return; // Group mode handles this automatically\n }\n\n clearTimeouts();\n if (settings.openDelay === 0 || settings.openDelay === undefined) {\n onChange(true);\n } else {\n openTimeout.current = window.setTimeout(() => onChange(true), settings.openDelay);\n }\n }, [withinGroup, clearTimeouts, settings.openDelay, onChange]);\n\n const closeDropdown = useCallback(() => {\n if (withinGroup) {\n return; // Group mode handles this automatically\n }\n\n clearTimeouts();\n if (settings.closeDelay === 0 || settings.closeDelay === undefined) {\n onChange(false);\n } else {\n closeTimeout.current = window.setTimeout(() => onChange(false), settings.closeDelay);\n }\n }, [withinGroup, clearTimeouts, settings.closeDelay, onChange]);\n\n useEffect(() => () => clearTimeouts(), [clearTimeouts]);\n\n return {\n opened,\n reference: refs.setReference,\n floating: refs.setFloating,\n getReferenceProps,\n getFloatingProps,\n openDropdown,\n closeDropdown,\n };\n}\n"],"mappings":";;;;;;;AAqBA,SAAgB,aAAa,UAAwB;CACnD,MAAM,CAAC,oBAAoB,0BAAA,GAAA,MAAA,UAAkC,SAAS,cAAc;CAEpF,MAAM,SADa,OAAO,SAAS,WAAW,YAClB,SAAS,SAAS;CAC9C,MAAM,eAAA,GAAA,MAAA,KAAkBA,uBAAAA,sBAAsB,CAAC;CAC/C,MAAM,OAAA,GAAA,eAAA,QAAa;CAEnB,MAAM,eAAA,GAAA,MAAA,QAAqB,GAAG;CAC9B,MAAM,gBAAA,GAAA,MAAA,QAAsB,GAAG;CAE/B,MAAM,iBAAA,GAAA,MAAA,mBAAkC;AACtC,SAAO,aAAa,YAAY,QAAQ;AACxC,SAAO,aAAa,aAAa,QAAQ;IACxC,EAAE,CAAC;CAEN,MAAM,YAAA,GAAA,MAAA,cACH,YAAqB;AACpB,wBAAsB,QAAQ;AAE9B,MAAI,SAAS;AACX,gBAAa,IAAI;AACjB,YAAS,UAAU;QAEnB,UAAS,WAAW;IAGxB;EAAC;EAAK,SAAS;EAAQ,SAAS;EAAQ,CACzC;CAED,MAAM,EAAE,SAAS,UAAA,GAAA,mBAAA,aAAqB;EACpC,MAAM;EACN,cAAc;EACf,CAAC;CAEF,MAAM,EAAE,OAAO,YAAY,kBAAA,GAAA,mBAAA,eAA+B,SAAS,EAAE,IAAI,KAAK,CAAC;CAE/E,MAAM,EAAE,mBAAmB,sBAAA,GAAA,mBAAA,iBAAqC;mCACrD,SAAS;GAChB,SAAS;GACT,OAAO,cAAc,aAAa;IAAE,MAAM,SAAS;IAAW,OAAO,SAAS;IAAY;GAC3F,CAAC;kCACM,SAAS,EAAE,MAAM,UAAU,CAAC;qCACzB,SAAS,EAAE,SAAS,aAAa,CAAC;EAC9C,CAAC;CAEF,MAAM,gBAAA,GAAA,MAAA,mBAAiC;AACrC,MAAI,YACF;AAGF,iBAAe;AACf,MAAI,SAAS,cAAc,KAAK,SAAS,cAAc,KAAA,EACrD,UAAS,KAAK;MAEd,aAAY,UAAU,OAAO,iBAAiB,SAAS,KAAK,EAAE,SAAS,UAAU;IAElF;EAAC;EAAa;EAAe,SAAS;EAAW;EAAS,CAAC;CAE9D,MAAM,iBAAA,GAAA,MAAA,mBAAkC;AACtC,MAAI,YACF;AAGF,iBAAe;AACf,MAAI,SAAS,eAAe,KAAK,SAAS,eAAe,KAAA,EACvD,UAAS,MAAM;MAEf,cAAa,UAAU,OAAO,iBAAiB,SAAS,MAAM,EAAE,SAAS,WAAW;IAErF;EAAC;EAAa;EAAe,SAAS;EAAY;EAAS,CAAC;AAE/D,EAAA,GAAA,MAAA,uBAAsB,eAAe,EAAE,CAAC,cAAc,CAAC;AAEvD,QAAO;EACL;EACA,WAAW,KAAK;EAChB,UAAU,KAAK;EACf;EACA;EACA;EACA;EACD"}