HoverCard
Sighted preview of what's behind a link — a floating card on hover.
Rest the pointer on a trigger and a content card floats in on the portal
layer. Unlike Tooltip (inverted chrome, a string label), HoverCard is a
BgPanel card with arbitrary content and stays open while the pointer is over the
card itself. Web composition (HoverCardTrigger/HoverCardContent) is
"from the web": Go's Layout(th, gtx, content, trigger) wraps both. RTL layout is
not yet supported by the underlying toolkit.
Installation
Use the module import (the default), or own the source: lotusui add
vendors the component into your app and lotusui update keeps the copy mergeable —
see Registry.
go get github.com/ikaito-com/lotusui
# or vendor the source into your app:
go run github.com/ikaito-com/lotusui/cmd/lotusui add hover-card
Usage
var tip lotusui.HoverCard
tip.Layout(th, gtx, cardBody,
lotusui.Button(th, &btn, "Hover", lotusui.ButtonProps{Variant: lotusui.ButtonLink}))
Composition
On the web the family splits into HoverCard /
HoverCardTrigger / HoverCardContent. In Go one struct owns the state;
Layout takes the card body and the trigger as widgets.
Trigger delays
OpenDelay and CloseDelay control when the card
opens and closes. Zero keeps the Radix defaults (700ms open, 300ms close) — long enough not to
flicker, short enough that the pointer can travel the gap onto the card.
tip := lotusui.HoverCard{
OpenDelay: 100 * time.Millisecond,
CloseDelay: 200 * time.Millisecond,
}
Positioning
Side floats the card above, below, or beside the trigger;
Align (PopoverStart / Center / End) slides
it along that side.
tip := lotusui.HoverCard{
Side: lotusui.HoverCardTop,
Align: lotusui.PopoverStart,
}
Basic
The shadcn profile preview: a link trigger and a card with handle, blurb, and join date.
tip.Layout(th, gtx,
lotusui.VStack(th.Space.XS,
lotusui.LabelBody(th, "@nextjs").Layout,
lotusui.LabelMeta(th, "The React Framework – created and maintained by @vercel.").Layout,
lotusui.LabelCaption(th, "Joined December 2021").Layout,
),
lotusui.Button(th, &btn, "@nextjs", lotusui.ButtonProps{Variant: lotusui.ButtonLink}),
)
Sides
tip.Side = lotusui.HoverCardLeft // Top / Bottom / Right
RTL
RTL layout is "from the web" — not yet supported by the underlying toolkit.
API
| Option | Type | Description |
|---|---|---|
Layout(th, gtx, content, trigger) | method | Wrap any trigger; content is the card body. Opens after OpenDelay; stays up while the pointer is over trigger or card. |
Side | HoverCardSide | HoverCardBottom (default), HoverCardTop, HoverCardLeft, HoverCardRight. |
Align | PopoverAlign | PopoverStart (default), PopoverCenter, PopoverEnd along the side. |
OpenDelay / CloseDelay | time.Duration | Zero uses 700ms / 300ms (Radix defaults). |
Width | unit.Dp | Card width; zero means 320dp (shadcn w-80). |
Disabled | bool | Prevents opening (chakra). |