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 }
9f470a729 .ring-logo-${s} .rl-bg {
9f470a730 transition: filter 0.6s ease;
9f470a731 }
9f470a732 .ring-logo-${s}:hover .rl-bg,
9f470a733 .hover-row:hover .ring-logo-${s} .rl-bg {
9f470a734 filter: brightness(0.9);
9f470a735 }
9f470a736 .ring-logo-${s} .rl-outer {
9f470a737 transform-origin: 32px 32px;
9f470a738 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1), stroke-width 0.4s ease;
9f470a739 }
9f470a740 .ring-logo-${s}:hover .rl-outer,
9f470a741 .hover-row:hover .ring-logo-${s} .rl-outer {
9f470a742 transform: rotate(15deg) scale(1.04);
9f470a743 stroke-width: 3;
9f470a744 }
9f470a745 .ring-logo-${s} .rl-inner {
9f470a746 transform-origin: 32px 34px;
9f470a747 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1) 0.05s, stroke-width 0.4s ease 0.05s;
9f470a748 }
9f470a749 .ring-logo-${s}:hover .rl-inner,
9f470a750 .hover-row:hover .ring-logo-${s} .rl-inner {
9f470a751 transform: rotate(-20deg) scale(1.06);
9f470a752 stroke-width: 2.6;
9f470a753 }
9f470a754 .ring-logo-${s} .rl-dot {
9f470a755 transform-origin: 32px 34px;
9f470a756 transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) 0.1s;
9f470a757 }
9f470a758 .ring-logo-${s}:hover .rl-dot,
9f470a759 .hover-row:hover .ring-logo-${s} .rl-dot {
9f470a760 transform: scale(1.35);
9f470a761 }
9f470a762 `}</style>
9f470a763
9f470a764 <circle cx="32" cy="32" r="32" fill="var(--accent)" className="rl-bg" />
3cbdca665 <path
9f470a766 className="rl-outer"
3cbdca667 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"
3cbdca668 stroke="white"
3cbdca669 strokeWidth="2.6"
3cbdca670 strokeLinecap="round"
3cbdca671 strokeLinejoin="round"
3cbdca672 />
3cbdca673 <path
9f470a774 className="rl-inner"
3cbdca675 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"
3cbdca676 stroke="white"
3cbdca677 strokeWidth="2.2"
3cbdca678 strokeLinecap="round"
3cbdca679 strokeLinejoin="round"
3cbdca680 />
9f470a781 <ellipse className="rl-dot" cx="32" cy="34" rx="3.2" ry="2.6" fill="white" />
3cbdca682 </svg>
3cbdca683 );
3cbdca684}