web/app/components/ring-logo.tsxblame
View source
9f470a71"use client";
9f470a72
9f470a73import { useId } from "react";
9f470a74
3cbdca65interface Props {
3cbdca66 size?: number;
3cbdca67}
3cbdca68
3cbdca69export function RingLogo({ size = 24 }: Props) {
9f470a710 const id = useId();
9f470a711 const s = id.replace(/:/g, "");
9f470a712
3cbdca613 return (
9f470a714 <svg
9f470a715 className={`ring-logo-${s}`}
9f470a716 width={size}
9f470a717 height={size}
9f470a718 viewBox="0 0 64 64"
9f470a719 fill="none"
9f470a720 >
9f470a721 <style>{`
9f470a722 .ring-logo-${s} {
9f470a723 cursor: pointer;
9f470a724 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1);
9f470a725 }
9f470a726 .ring-logo-${s}:hover,
9f470a727 .hover-row:hover .ring-logo-${s} {
9f470a728 transform: translateY(-2px);
9f470a729 }
9f470a730 .ring-logo-${s} .rl-bg {
9f470a731 transition: filter 0.6s ease;
9f470a732 }
9f470a733 .ring-logo-${s}:hover .rl-bg,
9f470a734 .hover-row:hover .ring-logo-${s} .rl-bg {
9f470a735 filter: brightness(0.9);
9f470a736 }
9f470a737 .ring-logo-${s} .rl-outer {
9f470a738 transform-origin: 32px 32px;
9f470a739 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1), stroke-width 0.4s ease;
9f470a740 }
9f470a741 .ring-logo-${s}:hover .rl-outer,
9f470a742 .hover-row:hover .ring-logo-${s} .rl-outer {
9f470a743 transform: rotate(15deg) scale(1.04);
9f470a744 stroke-width: 3;
9f470a745 }
9f470a746 .ring-logo-${s} .rl-inner {
9f470a747 transform-origin: 32px 34px;
9f470a748 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1) 0.05s, stroke-width 0.4s ease 0.05s;
9f470a749 }
9f470a750 .ring-logo-${s}:hover .rl-inner,
9f470a751 .hover-row:hover .ring-logo-${s} .rl-inner {
9f470a752 transform: rotate(-20deg) scale(1.06);
9f470a753 stroke-width: 2.6;
9f470a754 }
9f470a755 .ring-logo-${s} .rl-dot {
9f470a756 transform-origin: 32px 34px;
9f470a757 transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) 0.1s;
9f470a758 }
9f470a759 .ring-logo-${s}:hover .rl-dot,
9f470a760 .hover-row:hover .ring-logo-${s} .rl-dot {
9f470a761 transform: scale(1.35);
9f470a762 }
9f470a763 `}</style>
9f470a764
9f470a765 <circle cx="32" cy="32" r="32" fill="var(--accent)" className="rl-bg" />
3cbdca666 <path
9f470a767 className="rl-outer"
3cbdca668 d="M32 12C42 12 51 19 52 29C53 39 46 49 36 51C26 53 15 48 12 39C9 30 13 19 23 14C26 13 29 12 32 12Z"
3cbdca669 stroke="white"
3cbdca670 strokeWidth="2.6"
3cbdca671 strokeLinecap="round"
3cbdca672 strokeLinejoin="round"
3cbdca673 />
3cbdca674 <path
9f470a775 className="rl-inner"
3cbdca676 d="M32 24C37 24 41 27 42 32C43 37 40 41 35 43C30 45 24 43 21 38C18 33 19 28 24 25C26 24 29 24 32 24Z"
3cbdca677 stroke="white"
3cbdca678 strokeWidth="2.2"
3cbdca679 strokeLinecap="round"
3cbdca680 strokeLinejoin="round"
3cbdca681 />
9f470a782 <ellipse className="rl-dot" cx="32" cy="34" rx="3.2" ry="2.6" fill="white" />
3cbdca683 </svg>
3cbdca684 );
3cbdca685}