Spaces:
Sleeping
Sleeping
File size: 1,519 Bytes
a72140d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | "use client";
import { HTMLAttributes, useEffect, useRef } from "react";
import data from "@/components/app/(home)/sections/hero-flame/data.json";
import { cn } from "@/utils/cn";
import { setIntervalOnVisible } from "@/utils/set-timeout-on-visible";
export default function StoriesFlame(attrs: HTMLAttributes<HTMLDivElement>) {
const ref = useRef<HTMLDivElement>(null);
const wrapperRef = useRef<HTMLDivElement>(null);
useEffect(() => {
let index = 0;
const interval = setIntervalOnVisible({
element: wrapperRef.current,
callback: () => {
index++;
if (index >= data.length) index = 0;
const newStr = data[index];
if (!ref.current) return;
ref.current!.innerHTML = newStr;
},
interval: 60,
});
return () => interval?.();
}, []);
return (
<div
className="absolute right-10 bottom-10 w-194 h-165"
style={{
maskImage: "url('/assets-original/replit-mask.png')",
maskSize: "100% 100%",
}}
>
<div
ref={wrapperRef}
{...attrs}
className={cn(
"w-308 h-380 -top-20 -left-40 absolute pointer-events-none select-none",
attrs.className,
)}
>
<div
className="text-black-alpha-20 relative top-0 left-0 font-ascii fc-decoration"
ref={ref}
style={{
whiteSpace: "pre",
fontSize: 8,
lineHeight: "10px",
}}
/>
</div>
</div>
);
}
|