Hover Card
For sighted users to preview content available behind a link.
Installation
bash npx @moe/cli add hover-card Install the following dependency:
npx expo install @rn-primitives/hover-cardCopy/paste the following code to @/components/ui/hover-card.tsx
import * as HoverCardPrimitive from "@rn-primitives/hover-card";
import * as React from "react";
import { Platform, StyleSheet } from "react-native";
import Animated, { FadeIn, FadeOut } from "react-native-reanimated";
import { cn } from "@/lib/utils";
import { TextClassContext } from "@/components/ui/text";
const HoverCard = HoverCardPrimitive.Root;
const HoverCardTrigger = HoverCardPrimitive.Trigger;
const HoverCardContent = React.forwardRef<
React.ElementRef<typeof HoverCardPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>
>(({ className, align = "center", sideOffset = 4, ...props }, ref) => {
const { open } = HoverCardPrimitive.useRootContext();
return (
<HoverCardPrimitive.Portal>
<HoverCardPrimitive.Overlay
style={Platform.OS !== "web" ? StyleSheet.absoluteFill : undefined}
>
<Animated.View entering={FadeIn} exiting={FadeOut}>
<TextClassContext.Provider value="text-popover-foreground">
<HoverCardPrimitive.Content
ref={ref}
align={align}
sideOffset={sideOffset}
className={cn(
"z-50 w-64 rounded-md border border-border bg-popover p-4 shadow-md shadow-foreground/5 web:outline-none web:cursor-auto",
className,
)}
{...props}
/>
</TextClassContext.Provider>
</Animated.View>
</HoverCardPrimitive.Overlay>
</HoverCardPrimitive.Portal>
);
});
HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
export { HoverCard, HoverCardContent, HoverCardTrigger };Usage