Hover Card
จาก shadcnการ์ดข้อมูลย่อที่เด้งขึ้นเมื่อชี้ที่ตัวเร่ง เหมาะกับการดูภาพรวมของคนหรือรายการโดยไม่ต้องเปิดหน้าใหม่
ติดตั้ง
Terminal
pnpm dlx shadcn@latest add @whereui/hover-cardต้องผูก registry และติดตั้ง @whereui/theme นำหน้าเสมอเมื่อติดตั้งครั้งแรก
การใช้งาน
import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card"<HoverCard> <HoverCardTrigger render={<button />}>ดูโปรไฟล์</HoverCardTrigger> <HoverCardContent>ข้อมูลย่อ</HoverCardContent></HoverCard>ข้อควรรู้
- เปิดด้วยการชี้เมาส์เท่านั้น บนอุปกรณ์สัมผัสควรมีทางเลือกอื่น เช่น ปุ่มเปิด popover
- กำหนด side และ align บน HoverCardContent ได้เมื่อพื้นที่ชนขอบจอ
ซอร์สโค้ด
components/ui/hover-card.tsx
"use client"import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card"import { cn } from "cn"function HoverCard({ ...props }: PreviewCardPrimitive.Root.Props) { return <PreviewCardPrimitive.Root data-slot="hover-card" {...props} />}function HoverCardTrigger({ ...props }: PreviewCardPrimitive.Trigger.Props) { return ( <PreviewCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} /> )}function HoverCardContent({ className, side = "bottom", sideOffset = 4, align = "center", alignOffset = 4, ...props}: PreviewCardPrimitive.Popup.Props & Pick< PreviewCardPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset" >) { return ( <PreviewCardPrimitive.Portal data-slot="hover-card-portal"> <PreviewCardPrimitive.Positioner align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset} className="isolate z-50" > <PreviewCardPrimitive.Popup data-slot="hover-card-content" className={cn( "z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className )} {...props} /> </PreviewCardPrimitive.Positioner> </PreviewCardPrimitive.Portal> )}export { HoverCard, HoverCardTrigger, HoverCardContent }