2.5 KB85 lines
Blame
1"use client";
2
3import { useId } from "react";
4
5interface Props {
6 size?: number;
7}
8
9export function RingLogo({ size = 24 }: Props) {
10 const id = useId();
11 const s = id.replace(/:/g, "");
12
13 return (
14 <svg
15 className={`ring-logo-${s}`}
16 width={size}
17 height={size}
18 viewBox="0 0 64 64"
19 fill="none"
20 >
21 <style>{`
22 .ring-logo-${s} {
23 cursor: pointer;
24 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1);
25 }
26 .ring-logo-${s}:hover,
27 .hover-row:hover .ring-logo-${s} {
28 }
29 .ring-logo-${s} .rl-bg {
30 transition: filter 0.6s ease;
31 }
32 .ring-logo-${s}:hover .rl-bg,
33 .hover-row:hover .ring-logo-${s} .rl-bg {
34 filter: brightness(0.9);
35 }
36 .ring-logo-${s} .rl-outer {
37 transform-origin: 32px 32px;
38 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1), stroke-width 0.4s ease;
39 }
40 .ring-logo-${s}:hover .rl-outer,
41 .hover-row:hover .ring-logo-${s} .rl-outer {
42 transform: rotate(15deg) scale(1.04);
43 stroke-width: 3;
44 }
45 .ring-logo-${s} .rl-inner {
46 transform-origin: 32px 34px;
47 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1) 0.05s, stroke-width 0.4s ease 0.05s;
48 }
49 .ring-logo-${s}:hover .rl-inner,
50 .hover-row:hover .ring-logo-${s} .rl-inner {
51 transform: rotate(-20deg) scale(1.06);
52 stroke-width: 2.6;
53 }
54 .ring-logo-${s} .rl-dot {
55 transform-origin: 32px 34px;
56 transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) 0.1s;
57 }
58 .ring-logo-${s}:hover .rl-dot,
59 .hover-row:hover .ring-logo-${s} .rl-dot {
60 transform: scale(1.35);
61 }
62 `}</style>
63
64 <circle cx="32" cy="32" r="32" fill="var(--accent)" className="rl-bg" />
65 <path
66 className="rl-outer"
67 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"
68 stroke="white"
69 strokeWidth="2.6"
70 strokeLinecap="round"
71 strokeLinejoin="round"
72 />
73 <path
74 className="rl-inner"
75 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"
76 stroke="white"
77 strokeWidth="2.2"
78 strokeLinecap="round"
79 strokeLinejoin="round"
80 />
81 <ellipse className="rl-dot" cx="32" cy="34" rx="3.2" ry="2.6" fill="white" />
82 </svg>
83 );
84}
85