Hover Card
A hover card component allows displaying content when the user hovers over it.
 @zag_js         
          
  Zag JS
@zag_js
UI components powered by Finite State Machines.
  2 Following 
  4,000 Followers 
 ---
---
<div x-cloak x-data x-hover-card>  <a x-hover-card:trigger href="https://twitter.com/zag_js" target="_blank">@zag_js</a>
  <template x-teleport="body">    <div x-hover-card:positioner>      <div x-hover-card:content>        <div x-hover-card:arrow>          <div x-hover-card:arrow-tip></div>        </div>
        <div class="flex flex-col gap-2">          <div class="flex items-center gap-4">            <img              class="w-12 h-12 rounded-full"              src="https://zagjs.com/favicon/apple-touch-icon.png"              alt="zag.js logo"            />            <div class="flex flex-col justify-between">              <h2 class="text-lg text-zinc-700 font-semibold">Zag JS</h2>              <span class="text-zinc-500">@zag_js</span>            </div>          </div>          <div class="text-zinc-700 leading-normal">            UI components powered by Finite State Machines.          </div>          <div class="flex items-center gap-4">            <div>              <span class="text-zinc-700 font-semibold">2</span>              <span class="text-zinc-500">Following</span>            </div>            <div>              <span class="text-zinc-700 font-semibold">4,000</span>              <span class="text-zinc-500">Followers</span>            </div>          </div>        </div>      </div>    </div>  </template></div>
<style>  a:visited {    color: inherit;  }
  [data-part="trigger"] {    @apply font-medium;  }
  [data-part="content"] {    @apply relative bg-white max-w-72 border border-zinc-200/60 p-4 rounded-md shadow-md;  }
  @keyframes fadeIn {    from {      opacity: 0;      transform: scale(0.95) translateY(-10px);    }    to {      opacity: 1;      transform: scale(1) translateY(0);    }  }
  @keyframes fadeOut {    from {      opacity: 1;      transform: scale(1) translateY(0);    }    to {      opacity: 0;      transform: scale(0.95) translateY(-10px);    }  }
  [data-part="content"][data-state="open"] {    animation: fadeIn 0.2s ease-out;  }
  [data-part="content"][data-state="closed"] {    animation: fadeOut 0.2s ease-out;  }
  [data-part="arrow"] {    --arrow-background: white;    --arrow-size: 12px;  }
  [data-part="arrow-tip"] {    @apply border-l border-t border-zinc-200/60;  }</style>