Popover

A floating content panel that appears relative to a trigger element

Default Variant

Standard popover style with medium shadow and border.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script>
6
7<Popover>
8	<PopoverTrigger variant="button">Open Popover</PopoverTrigger>
9	<PopoverContent>
10		<div class="space-y-2">
11			<h4 class="font-medium leading-none">Default Style</h4>
12			<p class="text-sm text-muted-foreground">
13				This is the standard popover appearance with balanced shadow and border.
14			</p>
15		</div>
16	</PopoverContent>
17</Popover>

Bordered Variant

Emphasized border with lighter shadow for a more defined look.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script>
6
7<Popover>
8	<PopoverTrigger variant="outline">Bordered Popover</PopoverTrigger>
9	<PopoverContent variant="bordered">
10		<div class="space-y-2">
11			<h4 class="font-medium leading-none">Bordered Style</h4>
12			<p class="text-sm text-muted-foreground">
13				Features a prominent border with lighter shadow for clear definition.
14			</p>
15		</div>
16	</PopoverContent>
17</Popover>

Elevated Variant

Floating appearance with larger shadow and no border.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script>
6<Popover>
7	<PopoverTrigger variant="button">Elevated Popover</PopoverTrigger>
8	<PopoverContent variant="elevated">
9		<div class="space-y-2">
10			<h4 class="font-medium leading-none">Elevated Style</h4>
11			<p class="text-sm text-muted-foreground">
12				Creates a floating effect with enhanced shadow and no border.
13			</p>
14		</div>
15	</PopoverContent>
16</Popover>

Minimal Variant

Subtle appearance with light border and small shadow.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script>
6
7<Popover>
8	<PopoverTrigger variant="ghost">Minimal Popover</PopoverTrigger>
9	<PopoverContent variant="minimal">
10		<div class="space-y-2">
11			<h4 class="font-medium leading-none">Minimal Style</h4>
12			<p class="text-sm text-muted-foreground">
13				Understated design with subtle border and shadow.
14			</p>
15		</div>
16	</PopoverContent>
17</Popover>

Ghost Variant

Transparent background for complete custom styling.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script>
6
7<Popover>
8	<PopoverTrigger variant="button">Custom Styled</PopoverTrigger>
9	<PopoverContent
10		variant="ghost"
11		class="bg-gradient-to-r from-purple-500 to-pink-500 text-white"
12	>
13		<div class="space-y-2">
14			<h4 class="font-medium leading-none">Custom Style</h4>
15			<p class="text-sm">
16				Ghost variant allows complete custom styling with gradients and colors.
17			</p>
18		</div>
19	</PopoverContent>
20</Popover>

Size Variants

Small, default, and large sizes for different content amounts.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script> 
6
7<div class="flex flex-wrap gap-4">
8	<Popover>
9		<PopoverTrigger variant="button" size="sm">Small</PopoverTrigger>
10		<PopoverContent size="sm">
11			<p class="text-sm">Compact popover for brief content.</p>
12		</PopoverContent>
13	</Popover>
14
15	<Popover>
16		<PopoverTrigger variant="button">Default</PopoverTrigger>
17		<PopoverContent>
18			<div class="space-y-2">
19				<h4 class="font-medium">Default Size</h4>
20				<p class="text-sm text-muted-foreground">Standard size for most use cases.</p>
21			</div>
22		</PopoverContent>
23	</Popover>
24
25	<Popover>
26		<PopoverTrigger variant="button" size="lg">Large</PopoverTrigger>
27		<PopoverContent size="lg">
28			<div class="space-y-3">
29				<h3 class="text-lg font-semibold">Large Popover</h3>
30				<p class="text-sm text-muted-foreground">
31					Spacious layout for detailed content and complex interactions.
32				</p>
33				<div class="flex gap-2 pt-2">
34					<Button size="sm">Confirm</Button>
35					<Button variant="outline" size="sm">Cancel</Button>
36				</div>
37			</div>
38		</PopoverContent>
39	</Popover>
40
41	<Popover>
42		<PopoverTrigger variant="outline">Auto Width</PopoverTrigger>
43		<PopoverContent size="auto" class="w-auto">
44			<p>Content determines width</p>
45		</PopoverContent>
46	</Popover>
47</div>

Animation Variants

Different entry and exit animations for visual variety.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script> 
6
7<div class="flex flex-wrap gap-4">
8	<Popover>
9		<PopoverTrigger variant="button">Default (Combined)</PopoverTrigger>
10		<PopoverContent animation="default">
11			<p class="text-sm">Fade, zoom, and slide combined</p>
12		</PopoverContent>
13	</Popover>
14
15	<Popover>
16		<PopoverTrigger variant="button">Fade</PopoverTrigger>
17		<PopoverContent animation="fade">
18			<p class="text-sm">Simple fade in/out effect</p>
19		</PopoverContent>
20	</Popover>
21
22	<Popover>
23		<PopoverTrigger variant="button">Scale</PopoverTrigger>
24		<PopoverContent animation="scale">
25			<p class="text-sm">Zoom in/out effect</p>
26		</PopoverContent>
27	</Popover>
28
29	<Popover>
30		<PopoverTrigger variant="button">Slide</PopoverTrigger>
31		<PopoverContent animation="slide">
32			<p class="text-sm">Slide from placement direction</p>
33		</PopoverContent>
34	</Popover>
35
36	<Popover>
37		<PopoverTrigger variant="button">None</PopoverTrigger>
38		<PopoverContent animation="none">
39			<p class="text-sm">Instant show/hide</p>
40		</PopoverContent>
41	</Popover>
42</div>

Placement Options

Position popover on any side of the trigger element.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script> 
6
7<div class="flex flex-wrap gap-4 items-center justify-center min-h-[200px]">
8	<Popover>
9		<PopoverTrigger variant="outline">Top</PopoverTrigger>
10		<PopoverContent side="top">
11			<p class="text-sm">Positioned above trigger</p>
12		</PopoverContent>
13	</Popover>
14
15	<Popover>
16		<PopoverTrigger variant="outline">Right</PopoverTrigger>
17		<PopoverContent side="right">
18			<p class="text-sm">Positioned to the right</p>
19		</PopoverContent>
20	</Popover>
21
22	<Popover>
23		<PopoverTrigger variant="outline">Bottom</PopoverTrigger>
24		<PopoverContent side="bottom">
25			<p class="text-sm">Positioned below trigger</p>
26		</PopoverContent>
27	</Popover>
28
29	<Popover>
30		<PopoverTrigger variant="outline">Left</PopoverTrigger>
31		<PopoverContent side="left">
32			<p class="text-sm">Positioned to the left</p>
33		</PopoverContent>
34	</Popover>
35</div>

Alignment Options

Align popover to start, center, or end of trigger.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script> 
6
7<div class="flex flex-wrap gap-4">
8	<Popover>
9		<PopoverTrigger variant="outline">Align Start</PopoverTrigger>
10		<PopoverContent align="start">
11			<p class="text-sm">Aligned to start of trigger</p>
12		</PopoverContent>
13	</Popover>
14
15	<Popover>
16		<PopoverTrigger variant="outline">Align Center</PopoverTrigger>
17		<PopoverContent align="center">
18			<p class="text-sm">Aligned to center (default)</p>
19		</PopoverContent>
20	</Popover>
21
22	<Popover>
23		<PopoverTrigger variant="outline">Align End</PopoverTrigger>
24		<PopoverContent align="end">
25			<p class="text-sm">Aligned to end of trigger</p>
26		</PopoverContent>
27	</Popover>
28</div>

Trigger Variants

Different trigger styles for various use cases.


Code Svelte
1
2<script lang="ts">
3	import { PopoverPrimitives } from "@kareyes/aether";
4	const { Popover, PopoverTrigger, PopoverContent } = PopoverPrimitives;
5</script>
6
7<div class="flex flex-wrap gap-4">
8	<Popover>
9		<PopoverTrigger variant="button">Button Style</PopoverTrigger>
10		<PopoverContent>
11			<p class="text-sm">Primary button trigger</p>
12		</PopoverContent>
13	</Popover>
14
15	<Popover>
16		<PopoverTrigger variant="outline">Outline Style</PopoverTrigger>
17		<PopoverContent>
18			<p class="text-sm">Outlined button trigger</p>
19		</PopoverContent>
20	</Popover>
21
22	<Popover>
23		<PopoverTrigger variant="ghost">Ghost Style</PopoverTrigger>
24		<PopoverContent>
25			<p class="text-sm">Ghost button trigger</p>
26		</PopoverContent>
27	</Popover>
28
29	<Popover>
30		<PopoverTrigger variant="link">Link Style</PopoverTrigger>
31		<PopoverContent>
32			<p class="text-sm">Link-style trigger</p>
33		</PopoverContent>
34	</Popover>
35
36	<Popover>
37		<PopoverTrigger variant="default" class="rounded-full p-2 hover:bg-accent">
38			<Info class="h-4 w-4" />
39		</PopoverTrigger>
40		<PopoverContent size="sm">
41			<p class="text-sm">Custom icon trigger</p>
42		</PopoverContent>
43	</Popover>
44</div>

With Arrow Indicator

Add a visual arrow pointing to the trigger element.


Code Svelte
1
2
3<script lang="ts">
4	import { PopoverPrimitives } from "@kareyes/aether";
5	const { Popover, PopoverTrigger, PopoverContent, PopoverArrow } = PopoverPrimitives;
6</script>
7
8<div class="flex flex-wrap gap-4">
9	<Popover>
10		<PopoverTrigger variant="button">With Arrow</PopoverTrigger>
11		<PopoverContent>
12			<PopoverArrow class="fill-popover" />
13			<div class="space-y-2">
14				<h4 class="font-medium leading-none">Arrow Indicator</h4>
15				<p class="text-sm text-muted-foreground">
16					The arrow clearly points to the trigger element.
17				</p>
18			</div>
19		</PopoverContent>
20	</Popover>
21
22	<Popover>
23		<PopoverTrigger variant="outline">Arrow Top</PopoverTrigger>
24		<PopoverContent side="top">
25			<PopoverArrow class="fill-popover" />
26			<p class="text-sm">Arrow on the bottom when placed on top</p>
27		</PopoverContent>
28	</Popover>
29</div>

Advanced Examples

Real-world use cases with complex content and interactions.

Form in Popover

User Profile Popover

Action Menu

With Close Button

Contextual Help

Advanced Settings

Multiple Popovers


Code Svelte
1
2<script lang="ts">
3	import { Card, Button, Input, Label, PopoverPrimitives } from "@kareyes/aether";
4	import { Settings, User, MoreVertical, HelpCircle, Calendar, Bell, Share2 } from "@kareyes/aether/icons";
5	const { Popover, PopoverTrigger, PopoverContent, PopoverClose } = PopoverPrimitives;
6</script>
7
8<!-- Form in Popover -->
9<Popover>
10	<PopoverTrigger variant="button">
11		<Settings class="mr-2 h-4 w-4" />
12		Dimensions
13	</PopoverTrigger>
14	<PopoverContent class="w-80">
15		<div class="grid gap-4">
16			<div class="space-y-2">
17				<h4 class="font-medium leading-none">Dimensions</h4>
18				<p class="text-sm text-muted-foreground">Set the dimensions for the layer.</p>
19			</div>
20			<div class="grid gap-2">
21				<div class="grid grid-cols-3 items-center gap-4">
22					<Label for="width">Width</Label>
23					<Input id="width" value="100%" class="col-span-2 h-8" />
24				</div>
25				<div class="grid grid-cols-3 items-center gap-4">
26					<Label for="height">Height</Label>
27					<Input id="height" value="25px" class="col-span-2 h-8" />
28				</div>
29			</div>
30		</div>
31	</PopoverContent>
32</Popover>
33
34<!-- User Profile Popover -->
35<Popover>
36	<PopoverTrigger variant="default" class="rounded-full">
37		<div class="flex items-center gap-2 px-3 py-2 rounded-full hover:bg-accent">
38			<User class="h-5 w-5" />
39			<span class="text-sm font-medium">John Doe</span>
40		</div>
41	</PopoverTrigger>
42	<PopoverContent variant="elevated" size="sm" align="start">
43		<div class="flex flex-col gap-3">
44			<div class="flex items-center gap-3">
45				<div class="flex h-10 w-10 items-center justify-center rounded-full bg-primary text-primary-foreground">
46					<User class="h-5 w-5" />
47				</div>
48				<div>
49					<p class="font-medium">John Doe</p>
50					<p class="text-sm text-muted-foreground">john@example.com</p>
51				</div>
52			</div>
53			<div class="flex flex-col gap-1">
54				<Button variant="ghost" size="sm" class="justify-start">Profile</Button>
55				<Button variant="ghost" size="sm" class="justify-start">Settings</Button>
56				<Button variant="ghost" size="sm" class="justify-start">Sign out</Button>
57			</div>
58		</div>
59	</PopoverContent>
60</Popover>
61
62<!-- With Close Button -->
63<Popover>
64	<PopoverTrigger variant="button">Open</PopoverTrigger>
65	<PopoverContent>
66		<div class="space-y-4">
67			<div class="space-y-2">
68				<h4 class="font-medium leading-none">Confirmation</h4>
69				<p class="text-sm text-muted-foreground">Are you sure you want to proceed?</p>
70			</div>
71			<div class="flex gap-2">
72				<PopoverClose class="flex-1">
73					<Button variant="outline" size="sm" class="w-full">Cancel</Button>
74				</PopoverClose>
75				<PopoverClose class="flex-1">
76					<Button size="sm" class="w-full">Confirm</Button>
77				</PopoverClose>
78			</div>
79		</div>
80	</PopoverContent>
81</Popover>