Ryan Loomba e6b3d1248f initial commit
Co-authored-by: Nahiyan Khan <nahiyan.khan@gmail.com>
2025-04-03 09:44:30 -07:00

95 lines
2.2 KiB
TypeScript

"use client";
import React, { useMemo, useState } from "react";
import { Flap } from "./Flap";
interface FlapDigitProps {
className?: string;
css?: React.CSSProperties;
value?: string;
prevValue?: string;
final?: boolean;
mode?: string | null;
[key: string]: any; // For rest props
}
export const FlapDigit = React.memo<FlapDigitProps>(
({
className,
css,
value = "",
prevValue = "",
final = false,
mode = null,
...restProps
}) => {
// Add state to track mouse hover
const [isHovered, setIsHovered] = useState(false);
// Memoize the container style
const containerStyle = useMemo(
() => ({
...css,
boxShadow: "0 1px 2px rgba(0, 0, 0, 0.15)",
}),
[css]
);
return (
<div
className={`text-[#e1e1e1] bg-[#1a1a1a] relative inline-block h-[1em] font-mono text-3xl xs:text-4xl sm:text-5xl md:text-6xl lg:text-7xl lg:leading-[66px] border border-black leading-none text-center w-[1.3ch] rounded-sm ${
className || ""
}`}
style={containerStyle}
data-kind="digit"
data-mode={mode}
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
>
<Flap value={value} {...restProps}>
{value}
</Flap>
<Flap bottom value={prevValue} {...restProps}>
{prevValue}
</Flap>
<Flap
key={`top-${prevValue}`}
animated
final={final}
value={prevValue}
{...restProps}
>
{prevValue}
</Flap>
{final && (
<>
{/* <Flap
key={`bottom-${value}`}
bottom
animated
final
value={value}
isHovered={isHovered}
{...restProps}
>
{value}
</Flap> */}
<Flap
key={`bottom-${value}`}
bottom
half
animated
final
value={value}
isHovered={isHovered}
{...restProps}
>
{value}
</Flap>
</>
)}
</div>
);
}
);