1import { Avatar, AvatarFallback, AvatarImage } from "~/components/ui/avatar";2import { Button } from "~/components/ui/button";3import {4 HoverCard,5 HoverCardContent,6 HoverCardTrigger,7} from "~/components/ui/hover-card";8
9export default function HoverCardDemo() {10 return (11 <HoverCard>12 <HoverCardTrigger as={Button<"button">} variant="link">13 solid-js14 </HoverCardTrigger>15 <HoverCardContent class="w-80">16 <div class="flex justify-between gap-4">17 <Avatar>18 <AvatarImage src="https://github.com/solidjs.png" />19 <AvatarFallback>Solid.js</AvatarFallback>20 </Avatar>21 <div class="space-y-1">22 <h4 class="text-sm font-semibold">@solidjs</h4>23 <p class="text-sm">24 The SolidJS framework is a declarative, fast, and efficient25 JavaScript library for building user interfaces.26 </p>27 <div class="text-xs text-muted-foreground">Joined June 2021</div>28 </div>29 </div>30 </HoverCardContent>31 </HoverCard>32 );33}
npx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/hover-card.json
yarn shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/hover-card.json
pnpm dlx shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/hover-card.json
bunx --bun shadcn@latest add https://solid-ui-neobrutalism.vercel.app/r/hover-card.json
Install the following dependencies
npm install @kobalte/core
yarn add @kobalte/core
pnpm add @kobalte/core
bun add @kobalte/core
Copy and paste the following code into your project
1import type { PolymorphicProps } from "@kobalte/core/polymorphic";2import type { Component, ValidComponent } from "solid-js";3
4import { splitProps } from "solid-js";5import * as HoverCardPrimitive from "@kobalte/core/hover-card";6
7import { cn } from "~/lib/utils";8
9const HoverCardTrigger = <T extends ValidComponent = "a">(10 props: PolymorphicProps<T, HoverCardPrimitive.HoverCardTriggerProps<T>>,11) => {12 return (13 <HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />14 );15};16
17const HoverCard: Component<HoverCardPrimitive.HoverCardRootProps> = (props) => {18 return (19 <HoverCardPrimitive.Root data-slot="hover-card" gutter={4} {...props} />20 );21};22
23type HoverCardContentProps<T extends ValidComponent = "div"> =24 HoverCardPrimitive.HoverCardContentProps<T> & {25 class?: string | undefined;26 };27
28const HoverCardContent = <T extends ValidComponent = "div">(29 props: PolymorphicProps<T, HoverCardContentProps<T>>,30) => {31 const [local, others] = splitProps(props as HoverCardContentProps, ["class"]);32 return (33 <HoverCardPrimitive.Portal>34 <HoverCardPrimitive.Content35 data-slot="hover-card-content"36 class={cn(37 "z-50 w-64 rounded-base border-2 border-border bg-background p-4 text-foreground shadow-shadow outline-none data-[side=bottom]:slide-in-from-top-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 ui-opened:animate-in ui-opened:fade-in-0 ui-opened:zoom-in-95 ui-closed:animate-out ui-closed:fade-out-0 ui-closed:zoom-out-95",38 local.class,39 )}40 {...others}41 />42 </HoverCardPrimitive.Portal>43 );44};45
46export { HoverCard, HoverCardTrigger, HoverCardContent };
Update the import paths to match your project setup.
1import {2 HoverCard,3 HoverCardContent,4 HoverCardTrigger,5} from "~/components/ui/hover-card";
1<HoverCard>2 <HoverCardTrigger>Hover over me</HoverCardTrigger>3 <HoverCardContent>This is the content of the hover card.</HoverCardContent>4</HoverCard>