气泡浮层

New

粘性气泡浮层,面板通过 SVG 果冻滤镜(goo filter)从触发器中渗出——如液态颈部先拉伸后收缩,清晰内容随后淡入;另提供 Morph 变体,面板从触发器一角以裁剪动画展开。支持点击或悬停触发,可受控也可非受控。

果冻气泡浮层

popover.tsx

由 Popover、PopoverTrigger、PopoverContent 组成的可组合原语;面板通过 SVG 果冻滤镜从触发器中渗出,呈液态颈部效果,清晰内容随后淡入。支持点击或悬停触发,可受控也可非受控。

安装

$ bunx --bun shadcn add @uilab/popover

API 参考

Popover

open?
boolean

Controlled open state.

defaultOpen?
boolean

Uncontrolled initial open state.

false
onOpenChange?
((open: boolean) => void)
trigger?
"click" | "hover"

How the popover is summoned. Default "click".

click
side?
"bottom" | "top"

Which side of the trigger the panel oozes out of. Default "bottom".

bottom
align?
"end" | "start" | "center"

Alignment along the trigger's edge. Default "center".

center
sideOffset?
number

Gap between trigger and panel, in px — the length of the gooey neck. Default 14.

14
panelRadius?
number

Corner radius of the open panel, in px. Default 16.

16
gooStrength?
number

Blur radius feeding the goo filter — higher melts more. Default 8.

8
className?
string

PopoverTrigger

children
ReactElement<unknown, string | JSXElementConstructor<any>>

A single focusable element (e.g. a Button) that opens the popover.

PopoverContent

className?
string
role?
"dialog" | "menu"
dialog
aria-label?
string
onKeyDown?
KeyboardEventHandler<HTMLDivElement>

变形气泡浮层

popover-morph.tsx

由 MorphPopover、MorphPopoverTrigger、MorphPopoverContent 组成;面板始终按完整尺寸布局,但被裁剪固定在离触发器最近的一角,再整体展开为一整块表面,阴影随形状贴合。支持感知方位对齐,可受控也可非受控。

安装

$ bunx --bun shadcn add @uilab/popover-morph

API 参考

MorphPopover

open?
boolean

Controlled open state.

defaultOpen?
boolean

Uncontrolled initial open state.

false
onOpenChange?
((open: boolean) => void)
className?
string

MorphPopoverContent

side?
"bottom" | "top"
bottom
align?
"end" | "start"
end
sideOffset?
number

Gap between trigger and panel, in px. Default 8.

8
radius?
number

Panel corner radius, in px. Default 16.

16
className?
string

Keep in mind

Some components on this site are inspired by or recreated from existing work across the web. I'm not here to take credit; just to learn, experiment, and sometimes push things a bit further. If something looks familiar and I forgot to mention you, reach out and I'll fix that right away.