mirror of
https://github.com/block/bitcoin-treasury.git
synced 2025-04-23 01:01:24 +00:00
95 lines
2.2 KiB
TypeScript
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>
|
|
);
|
|
}
|
|
);
|