This component no longer exists. It was in ruixen-ui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-12 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
Avatar Quick Actions
ruixen-ui/avatar-quick-actionsRemovedComponent
An orbital action ring that blooms outward from the avatar with staggered spring emergence — hover any action and the rest dim, drawing the eye.
Live preview
live · rendered by the registry
Rendered by ruixen-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ruixen.com/r/avatar-quick-actions.jsonSource
1"use client";23import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";4import { cn } from "@/lib/utils";5import { AnimatePresence, motion } from "motion/react";6import { type ReactNode, useState } from "react";78/* ═══════════════════════════════════════════════════════════9 Orbital Bloom — actions live behind the avatar. Hover and10 they spring outward radially with staggered timing, settling11 into orbit positions. Focus any action and the rest dim,12 drawing the eye. The avatar contracts to signal the release.13 No tooltip, no portal — same spatial plane.14 ═══════════════════════════════════════════════════════════ */1516interface AvatarQuickActionsItem {17 icon: ReactNode;18 label: string;19 onClick?: () => void;20}2122interface AvatarQuickActionsProps {23 items: AvatarQuickActionsItem[];24 avatarSrc?: string;25 avatarFallback?: string;26 size?: number;27 className?: string;28}2930export default function AvatarQuickActions({31 items,32 avatarSrc,33 avatarFallback,34 size = 44,35 className,36}: AvatarQuickActionsProps) {37 const [open, setOpen] = useState(false);38 const [activeIdx, setActiveIdx] = useState<number | null>(null);3940 const actionSize = Math.round(size * 0.7);41 const orbit = Math.round(size * 0.95);42 const container = orbit * 2 + actionSize;4344 const step = (2 * Math.PI) / items.length;45 const start = -Math.PI / 2;4647 return (48 <div49 className={cn("relative", className)}50 style={{ width: container, height: container }}51 onMouseLeave={() => {52 setOpen(false);53 setActiveIdx(null);54 }}55 >56 {/* orbit ring */}57 <motion.div58 className="pointer-events-none absolute left-1/2 top-1/2 rounded-full border border-border/30"59 style={{60 width: orbit * 2,61 height: orbit * 2,62 x: "-50%",63 y: "-50%",64 }}65 animate={{66 opacity: open ? 1 : 0,67 scale: open ? 1 : 0.5,68 }}69 transition={{ type: "spring", stiffness: 300, damping: 25 }}70 />7172 {/* avatar */}73 <motion.div74 className="absolute left-1/2 top-1/2 z-20 cursor-pointer"75 style={{ width: size, height: size, x: "-50%", y: "-50%" }}76 animate={{ scale: open ? 0.92 : 1 }}77// … truncated
What it pulls in
npm packages
Other registry items
