@lobehub/ui 5.31.0 → 5.31.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/base-ui/Input/style.d.mts +1 -1
- package/es/base-ui/Popover/PopoverGroup.mjs +3 -2
- package/es/base-ui/Popover/PopoverGroup.mjs.map +1 -1
- package/es/base-ui/Popover/PopoverInGroup.mjs +3 -1
- package/es/base-ui/Popover/PopoverInGroup.mjs.map +1 -1
- package/es/base-ui/Popover/hoverOnlyPress.mjs +12 -1
- package/es/base-ui/Popover/hoverOnlyPress.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -24,7 +24,7 @@ declare const styles: {
|
|
|
24
24
|
declare const rootVariants: (props?: ({
|
|
25
25
|
shadow?: boolean | null | undefined;
|
|
26
26
|
size?: "large" | "middle" | "small" | null | undefined;
|
|
27
|
-
variant?: "filled" | "
|
|
27
|
+
variant?: "filled" | "borderless" | "outlined" | null | undefined;
|
|
28
28
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
29
29
|
//#endregion
|
|
30
30
|
export { rootVariants, styles };
|
|
@@ -7,7 +7,7 @@ import { usePopoverPortalContainer } from "./PopoverPortal.mjs";
|
|
|
7
7
|
import { PopoverArrow, PopoverPopup, PopoverPortal, PopoverPositioner, PopoverViewport } from "./atoms.mjs";
|
|
8
8
|
import { PopoverProvider } from "./context.mjs";
|
|
9
9
|
import { PopoverGroupHandleContext, PopoverGroupPropsContext } from "./groupContext.mjs";
|
|
10
|
-
import { shouldCancelHoverOnlyPressOpen } from "./hoverOnlyPress.mjs";
|
|
10
|
+
import { isHoverOnlyTriggerElement, shouldCancelHoverOnlyPressOpen } from "./hoverOnlyPress.mjs";
|
|
11
11
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
12
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { Popover } from "@base-ui/react/popover";
|
|
@@ -31,7 +31,8 @@ const PopoverGroup = ({ children, contentLayoutAnimation = false, disableDestroy
|
|
|
31
31
|
const contextValue = useMemo(() => ({ close }), [close]);
|
|
32
32
|
const handleOpenChange = useCallback((nextOpen, eventDetails) => {
|
|
33
33
|
const item = activeItemRef.current;
|
|
34
|
-
const
|
|
34
|
+
const hoverOnlyTrigger = isHoverOnlyTriggerElement(eventDetails?.trigger);
|
|
35
|
+
const openOnClick = hoverOnlyTrigger === null ? parseTrigger(item?.trigger ?? "hover").openOnClick : !hoverOnlyTrigger;
|
|
35
36
|
if (shouldCancelHoverOnlyPressOpen(openOnClick, nextOpen, eventDetails?.reason)) {
|
|
36
37
|
eventDetails?.cancel?.();
|
|
37
38
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopoverGroup.mjs","names":["BasePopover"],"sources":["../../../src/base-ui/Popover/PopoverGroup.tsx"],"sourcesContent":["'use client';\n\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport { type FC, type ReactNode, useCallback, useMemo, useRef, useState } from 'react';\n\nimport {\n useDestroyOnInvalidActiveTriggerElement,\n useHidePopupWhenPositionerAtOrigin,\n} from '@/utils/destroyOnInvalidActiveTriggerElement';\nimport { parseTrigger } from '@/utils/parseTrigger';\nimport { placementMap } from '@/utils/placement';\n\nimport { PopoverArrowIcon } from './ArrowIcon';\nimport {\n PopoverArrow,\n PopoverPopup,\n PopoverPortal,\n PopoverPositioner,\n PopoverViewport,\n} from './atoms';\nimport { PopoverProvider } from './context';\nimport {\n PopoverGroupHandleContext,\n type PopoverGroupItem,\n PopoverGroupPropsContext,\n type PopoverGroupSharedProps,\n} from './groupContext';\nimport { shouldCancelHoverOnlyPressOpen } from './hoverOnlyPress';\nimport { usePopoverPortalContainer } from './PopoverPortal';\n\ntype PopoverGroupProps = PopoverGroupSharedProps & {\n children: ReactNode;\n};\n\nconst PopoverGroup: FC<PopoverGroupProps> = ({\n children,\n contentLayoutAnimation = false,\n disableDestroyOnInvalidTrigger = false,\n disableZeroOriginGuard = false,\n ...sharedProps\n}) => {\n const [{ handle, key }, setHandleState] = useState(() => ({\n handle: BasePopover.createHandle<PopoverGroupItem>(),\n key: 0,\n }));\n const activeItemRef = useRef<PopoverGroupItem | null>(null);\n const destroy = useCallback(() => {\n activeItemRef.current = null;\n setHandleState(({ key }) => ({\n handle: BasePopover.createHandle<PopoverGroupItem>(),\n key: key + 1,\n }));\n }, []);\n const close = useCallback(() => {\n handle.close();\n }, [handle]);\n const contextValue = useMemo(() => ({ close }), [close]);\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean
|
|
1
|
+
{"version":3,"file":"PopoverGroup.mjs","names":["BasePopover"],"sources":["../../../src/base-ui/Popover/PopoverGroup.tsx"],"sourcesContent":["'use client';\n\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport { type FC, type ReactNode, useCallback, useMemo, useRef, useState } from 'react';\n\nimport {\n useDestroyOnInvalidActiveTriggerElement,\n useHidePopupWhenPositionerAtOrigin,\n} from '@/utils/destroyOnInvalidActiveTriggerElement';\nimport { parseTrigger } from '@/utils/parseTrigger';\nimport { placementMap } from '@/utils/placement';\n\nimport { PopoverArrowIcon } from './ArrowIcon';\nimport {\n PopoverArrow,\n PopoverPopup,\n PopoverPortal,\n PopoverPositioner,\n PopoverViewport,\n} from './atoms';\nimport { PopoverProvider } from './context';\nimport {\n PopoverGroupHandleContext,\n type PopoverGroupItem,\n PopoverGroupPropsContext,\n type PopoverGroupSharedProps,\n} from './groupContext';\nimport { isHoverOnlyTriggerElement, shouldCancelHoverOnlyPressOpen } from './hoverOnlyPress';\nimport { usePopoverPortalContainer } from './PopoverPortal';\n\ntype PopoverGroupProps = PopoverGroupSharedProps & {\n children: ReactNode;\n};\n\nconst PopoverGroup: FC<PopoverGroupProps> = ({\n children,\n contentLayoutAnimation = false,\n disableDestroyOnInvalidTrigger = false,\n disableZeroOriginGuard = false,\n ...sharedProps\n}) => {\n const [{ handle, key }, setHandleState] = useState(() => ({\n handle: BasePopover.createHandle<PopoverGroupItem>(),\n key: 0,\n }));\n const activeItemRef = useRef<PopoverGroupItem | null>(null);\n const destroy = useCallback(() => {\n activeItemRef.current = null;\n setHandleState(({ key }) => ({\n handle: BasePopover.createHandle<PopoverGroupItem>(),\n key: key + 1,\n }));\n }, []);\n const close = useCallback(() => {\n handle.close();\n }, [handle]);\n const contextValue = useMemo(() => ({ close }), [close]);\n\n const handleOpenChange = useCallback(\n (\n nextOpen: boolean,\n eventDetails?: { cancel?: () => void; reason?: string; trigger?: unknown },\n ) => {\n const item = activeItemRef.current;\n // The press belongs to the trigger that fired it, which is not necessarily\n // the member currently showing — judging by `activeItemRef` cancels every\n // click member's first press, since the active one is a hover member (or\n // none, which also reads as hover-only).\n const hoverOnlyTrigger = isHoverOnlyTriggerElement(eventDetails?.trigger);\n const openOnClick =\n hoverOnlyTrigger === null\n ? parseTrigger(item?.trigger ?? 'hover').openOnClick\n : !hoverOnlyTrigger;\n\n if (shouldCancelHoverOnlyPressOpen(openOnClick, nextOpen, eventDetails?.reason)) {\n eventDetails?.cancel?.();\n return;\n }\n\n item?.onOpenChange?.(nextOpen);\n },\n [],\n );\n\n useDestroyOnInvalidActiveTriggerElement(handle.store, destroy, {\n enabled: !disableDestroyOnInvalidTrigger,\n });\n useHidePopupWhenPositionerAtOrigin(handle.store, { enabled: !disableZeroOriginGuard });\n\n const portalContainer = usePopoverPortalContainer();\n\n return (\n <PopoverGroupHandleContext value={handle}>\n <PopoverGroupPropsContext value={sharedProps}>\n {children}\n <BasePopover.Root handle={handle} key={key} onOpenChange={handleOpenChange}>\n {({ payload }) => {\n const item = (payload as PopoverGroupItem | null) ?? null;\n activeItemRef.current = item;\n\n if (!item?.content) return null;\n\n const arrow = item.arrow ?? false;\n const placement = item.placement ?? 'top';\n const { openOnHover } = parseTrigger(item.trigger ?? 'hover');\n\n const placementConfig = placementMap[placement] ?? placementMap.top;\n const resolvedSideOffset = arrow ? 10 : 6;\n\n const resolvedClassNames = {\n arrow: item.classNames?.arrow,\n popup: item.className,\n positioner: item.classNames?.root,\n viewport: item.classNames?.content,\n };\n\n const resolvedStyles = {\n arrow: item.styles?.arrow,\n positioner: {\n ...item.styles?.root,\n ...(item.zIndex !== undefined ? { zIndex: item.zIndex } : {}),\n },\n viewport: item.styles?.content,\n };\n\n const contentNode = (\n <PopoverProvider value={contextValue}>{item.content}</PopoverProvider>\n );\n\n const popup = (\n <PopoverPositioner\n align={placementConfig.align}\n className={resolvedClassNames.positioner}\n data-layout-animation={contentLayoutAnimation || undefined}\n hoverTrigger={openOnHover}\n placement={placement}\n side={placementConfig.side}\n sideOffset={resolvedSideOffset}\n style={resolvedStyles.positioner}\n {...item.positionerProps}\n >\n <PopoverPopup\n className={resolvedClassNames.popup}\n data-layout-animation={contentLayoutAnimation || undefined}\n {...item.popupProps}\n >\n {arrow && (\n <PopoverArrow className={resolvedClassNames.arrow} style={resolvedStyles.arrow}>\n {PopoverArrowIcon}\n </PopoverArrow>\n )}\n <PopoverViewport\n className={resolvedClassNames.viewport}\n style={resolvedStyles.viewport}\n >\n {contentNode}\n </PopoverViewport>\n </PopoverPopup>\n </PopoverPositioner>\n );\n\n return portalContainer ? (\n <PopoverPortal container={portalContainer}>{popup}</PopoverPortal>\n ) : null;\n }}\n </BasePopover.Root>\n </PopoverGroupPropsContext>\n </PopoverGroupHandleContext>\n );\n};\n\nPopoverGroup.displayName = 'PopoverGroup';\n\nexport default PopoverGroup;\n"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { useNativeButton } from "../../hooks/useNativeButton.mjs";
|
|
3
3
|
import { parseTrigger } from "../../utils/parseTrigger.mjs";
|
|
4
4
|
import { PopoverGroupHandleContext } from "./groupContext.mjs";
|
|
5
|
+
import { HOVER_ONLY_TRIGGER_ATTR } from "./hoverOnlyPress.mjs";
|
|
5
6
|
import { useMergedPopoverProps } from "./useMergedPopoverProps.mjs";
|
|
6
7
|
import { cloneElement, isValidElement, use, useMemo } from "react";
|
|
7
8
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -13,7 +14,7 @@ import { Popover } from "@base-ui/react/popover";
|
|
|
13
14
|
const PopoverInGroup = ({ children, ref: refProp, ...props }) => {
|
|
14
15
|
const group = use(PopoverGroupHandleContext);
|
|
15
16
|
const item = useMergedPopoverProps(props);
|
|
16
|
-
const { openOnHover } = useMemo(() => parseTrigger(item.trigger ?? "hover"), [item.trigger]);
|
|
17
|
+
const { openOnClick, openOnHover } = useMemo(() => parseTrigger(item.trigger ?? "hover"), [item.trigger]);
|
|
17
18
|
const resolvedOpenDelay = item.openDelay ?? (item.mouseEnterDelay ?? .1) * 1e3;
|
|
18
19
|
const resolvedCloseDelay = item.closeDelay ?? (item.mouseLeaveDelay ?? .1) * 1e3;
|
|
19
20
|
const disabled = Boolean(item.disabled);
|
|
@@ -23,6 +24,7 @@ const PopoverInGroup = ({ children, ref: refProp, ...props }) => {
|
|
|
23
24
|
});
|
|
24
25
|
if (!item.content) return children;
|
|
25
26
|
const triggerProps = {
|
|
27
|
+
[HOVER_ONLY_TRIGGER_ATTR]: openOnClick ? void 0 : "",
|
|
26
28
|
closeDelay: resolvedCloseDelay,
|
|
27
29
|
delay: resolvedOpenDelay,
|
|
28
30
|
disabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopoverInGroup.mjs","names":["BasePopover"],"sources":["../../../src/base-ui/Popover/PopoverInGroup.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport { cx } from 'antd-style';\nimport { cloneElement, type FC, isValidElement, useMemo } from 'react';\nimport { use } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { useNativeButton } from '@/hooks/useNativeButton';\nimport { parseTrigger } from '@/utils/parseTrigger';\n\nimport { PopoverGroupHandleContext } from './groupContext';\nimport { type PopoverProps } from './type';\nimport { useMergedPopoverProps } from './useMergedPopoverProps';\n\nexport const PopoverInGroup: FC<PopoverProps> = ({ children, ref: refProp, ...props }) => {\n const group = use(PopoverGroupHandleContext);\n const item = useMergedPopoverProps(props);\n\n const { openOnHover } = useMemo(() => parseTrigger(item.trigger ?? 'hover')
|
|
1
|
+
{"version":3,"file":"PopoverInGroup.mjs","names":["BasePopover"],"sources":["../../../src/base-ui/Popover/PopoverInGroup.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport { cx } from 'antd-style';\nimport { cloneElement, type FC, isValidElement, useMemo } from 'react';\nimport { use } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { useNativeButton } from '@/hooks/useNativeButton';\nimport { parseTrigger } from '@/utils/parseTrigger';\n\nimport { PopoverGroupHandleContext } from './groupContext';\nimport { HOVER_ONLY_TRIGGER_ATTR } from './hoverOnlyPress';\nimport { type PopoverProps } from './type';\nimport { useMergedPopoverProps } from './useMergedPopoverProps';\n\nexport const PopoverInGroup: FC<PopoverProps> = ({ children, ref: refProp, ...props }) => {\n const group = use(PopoverGroupHandleContext);\n const item = useMergedPopoverProps(props);\n\n const { openOnClick, openOnHover } = useMemo(\n () => parseTrigger(item.trigger ?? 'hover'),\n [item.trigger],\n );\n\n const resolvedOpenDelay = item.openDelay ?? (item.mouseEnterDelay ?? 0.1) * 1000;\n const resolvedCloseDelay = item.closeDelay ?? (item.mouseLeaveDelay ?? 0.1) * 1000;\n const disabled = Boolean(item.disabled);\n\n const { isNativeButtonTriggerElement, resolvedNativeButton } = useNativeButton({\n children,\n nativeButton: item.nativeButton,\n });\n\n // Don't render trigger behavior if no content\n if (!item.content) {\n return children as any;\n }\n\n const triggerProps = {\n [HOVER_ONLY_TRIGGER_ATTR]: openOnClick ? undefined : '',\n closeDelay: resolvedCloseDelay,\n delay: resolvedOpenDelay,\n disabled,\n openOnHover: openOnHover && !disabled,\n ...item.triggerProps,\n payload: item,\n };\n\n const triggerClassName = item.classNames?.trigger;\n\n if (isValidElement(children)) {\n return (\n <BasePopover.Trigger\n handle={group ?? undefined}\n {...triggerProps}\n nativeButton={resolvedNativeButton}\n render={(renderProps) => {\n // Base UI's trigger props include `type=\"button\"` by default.\n // If we render into a non-<button> element, that prop is invalid and can warn.\n const resolvedProps = (() => {\n if (isNativeButtonTriggerElement) return renderProps as any;\n // eslint-disable-next-line unused-imports/no-unused-vars\n const { type, ref: triggerRef, ...restProps } = renderProps as any;\n return restProps;\n })();\n\n const mergedProps = mergeProps((children as any).props, resolvedProps);\n return cloneElement(children as any, {\n ...mergedProps,\n className: cx(mergedProps.className, triggerClassName),\n ref: mergeRefs([(children as any).ref, (renderProps as any).ref, refProp]),\n });\n }}\n />\n );\n }\n\n return (\n <BasePopover.Trigger\n handle={group ?? undefined}\n {...triggerProps}\n className={triggerClassName}\n nativeButton={resolvedNativeButton}\n ref={refProp}\n >\n {children}\n </BasePopover.Trigger>\n );\n};\n\nPopoverInGroup.displayName = 'PopoverInGroup';\n"],"mappings":";;;;;;;;;;;;;AAiBA,MAAa,kBAAoC,EAAE,UAAU,KAAK,SAAS,GAAG,YAAY;CACxF,MAAM,QAAQ,IAAI,yBAAyB;CAC3C,MAAM,OAAO,sBAAsB,KAAK;CAExC,MAAM,EAAE,aAAa,gBAAgB,cAC7B,aAAa,KAAK,WAAW,OAAO,GAC1C,CAAC,KAAK,OAAO,CACf;CAEA,MAAM,oBAAoB,KAAK,cAAc,KAAK,mBAAmB,MAAO;CAC5E,MAAM,qBAAqB,KAAK,eAAe,KAAK,mBAAmB,MAAO;CAC9E,MAAM,WAAW,QAAQ,KAAK,QAAQ;CAEtC,MAAM,EAAE,8BAA8B,yBAAyB,gBAAgB;EAC7E;EACA,cAAc,KAAK;CACrB,CAAC;CAGD,IAAI,CAAC,KAAK,SACR,OAAO;CAGT,MAAM,eAAe;GAClB,0BAA0B,cAAc,KAAA,IAAY;EACrD,YAAY;EACZ,OAAO;EACP;EACA,aAAa,eAAe,CAAC;EAC7B,GAAG,KAAK;EACR,SAAS;CACX;CAEA,MAAM,mBAAmB,KAAK,YAAY;CAE1C,IAAI,eAAe,QAAQ,GACzB,OACE,oBAACA,QAAY,SAAb;EACE,QAAQ,SAAS,KAAA;EACjB,GAAI;EACJ,cAAc;EACd,SAAS,gBAAgB;GAGvB,MAAM,uBAAuB;IAC3B,IAAI,8BAA8B,OAAO;IAEzC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,cAAc;IAChD,OAAO;GACT,EAAA,CAAG;GAEH,MAAM,cAAc,WAAY,SAAiB,OAAO,aAAa;GACrE,OAAO,aAAa,UAAiB;IACnC,GAAG;IACH,WAAW,GAAG,YAAY,WAAW,gBAAgB;IACrD,KAAK,UAAU;KAAE,SAAiB;KAAM,YAAoB;KAAK;IAAO,CAAC;GAC3E,CAAC;EACH;CACD,CAAA;CAIL,OACE,oBAACA,QAAY,SAAb;EACE,QAAQ,SAAS,KAAA;EACjB,GAAI;EACJ,WAAW;EACX,cAAc;EACd,KAAK;EAEJ;CACkB,CAAA;AAEzB;AAEA,eAAe,cAAc"}
|
|
@@ -8,7 +8,18 @@
|
|
|
8
8
|
function shouldCancelHoverOnlyPressOpen(openOnClick, nextOpen, reason) {
|
|
9
9
|
return !openOnClick && nextOpen && reason === "trigger-press";
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Stamped on a grouped trigger that only opens on hover. The group arbitrates
|
|
13
|
+
* open changes for every member from one handler, and the event only carries the
|
|
14
|
+
* trigger element — without this it cannot tell which member the press belongs to
|
|
15
|
+
* and would judge it by whichever member happens to be active.
|
|
16
|
+
*/
|
|
17
|
+
const HOVER_ONLY_TRIGGER_ATTR = "data-hover-only-trigger";
|
|
18
|
+
function isHoverOnlyTriggerElement(trigger) {
|
|
19
|
+
if (typeof Element === "undefined" || !(trigger instanceof Element)) return null;
|
|
20
|
+
return trigger.hasAttribute(HOVER_ONLY_TRIGGER_ATTR);
|
|
21
|
+
}
|
|
11
22
|
//#endregion
|
|
12
|
-
export { shouldCancelHoverOnlyPressOpen };
|
|
23
|
+
export { HOVER_ONLY_TRIGGER_ATTR, isHoverOnlyTriggerElement, shouldCancelHoverOnlyPressOpen };
|
|
13
24
|
|
|
14
25
|
//# sourceMappingURL=hoverOnlyPress.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hoverOnlyPress.mjs","names":[],"sources":["../../../src/base-ui/Popover/hoverOnlyPress.ts"],"sourcesContent":["/**\n * Base UI Popover.Trigger always wires useClick. With openOnHover, a press while\n * the popup is hover-open can re-open with reason `trigger-press` (stickIfOpen),\n * which disables mouseleave dismiss. Hover-only triggers must cancel press-driven\n * opens so antd-compatible `trigger=\"hover\"` keeps hover close semantics.\n */\nexport function shouldCancelHoverOnlyPressOpen(\n openOnClick: boolean,\n nextOpen: boolean,\n reason: string | undefined,\n): boolean {\n return !openOnClick && nextOpen && reason === 'trigger-press';\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,+BACd,aACA,UACA,QACS;CACT,OAAO,CAAC,eAAe,YAAY,WAAW;AAChD"}
|
|
1
|
+
{"version":3,"file":"hoverOnlyPress.mjs","names":[],"sources":["../../../src/base-ui/Popover/hoverOnlyPress.ts"],"sourcesContent":["/**\n * Base UI Popover.Trigger always wires useClick. With openOnHover, a press while\n * the popup is hover-open can re-open with reason `trigger-press` (stickIfOpen),\n * which disables mouseleave dismiss. Hover-only triggers must cancel press-driven\n * opens so antd-compatible `trigger=\"hover\"` keeps hover close semantics.\n */\nexport function shouldCancelHoverOnlyPressOpen(\n openOnClick: boolean,\n nextOpen: boolean,\n reason: string | undefined,\n): boolean {\n return !openOnClick && nextOpen && reason === 'trigger-press';\n}\n\n/**\n * Stamped on a grouped trigger that only opens on hover. The group arbitrates\n * open changes for every member from one handler, and the event only carries the\n * trigger element — without this it cannot tell which member the press belongs to\n * and would judge it by whichever member happens to be active.\n */\nexport const HOVER_ONLY_TRIGGER_ATTR = 'data-hover-only-trigger';\n\nexport function isHoverOnlyTriggerElement(trigger: unknown): boolean | null {\n if (typeof Element === 'undefined' || !(trigger instanceof Element)) return null;\n\n return trigger.hasAttribute(HOVER_ONLY_TRIGGER_ATTR);\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,+BACd,aACA,UACA,QACS;CACT,OAAO,CAAC,eAAe,YAAY,WAAW;AAChD;;;;;;;AAQA,MAAa,0BAA0B;AAEvC,SAAgB,0BAA0B,SAAkC;CAC1E,IAAI,OAAO,YAAY,eAAe,EAAE,mBAAmB,UAAU,OAAO;CAE5E,OAAO,QAAQ,aAAa,uBAAuB;AACrD"}
|