Animate Number
숫자를 부드럽게 애니메이션하는 유틸리티 컴포넌트
import AnimateNumber from "seed-design/breeze/animate-number/animate-number";
import { ActionButton } from "seed-design/ui/action-button";
import { HStack } from "@seed-design/react";
import { useState } from "react";
export default function AnimateNumberPreview() {
const [value, setValue] = useState(1);
return (
<div className="flex flex-col items-center gap-8">
<AnimateNumber
value={value}
fontSize="6rem"
fontWeight="bold"
color="#333"
showComma
showGradient
gradientHeight={10}
/>
<HStack gap="10px">
<ActionButton size="small" variant="neutralSolid" onClick={() => setValue(value - 1)}>
-1
</ActionButton>
<ActionButton size="small" variant="neutralSolid" onClick={() => setValue(value + 1)}>
+1
</ActionButton>
</HStack>
</div>
);
}Installation
Dependency:
npm install motionSnippet:
npx @seed-design/cli@latest add breeze:animate-numberConfiguration
animate-number 컴포넌트는 motion의 m. 컴포넌트를 사용합니다. lazy loading을 위해 프로젝트에 MotionProvider를 설정해야 합니다.
자세한 내용은 Motion Lazy Motion 문서를 참고하세요.
"use client";
import { LazyMotion } from "motion/react";
import type { ReactNode } from "react";
const loadFeatures = () => import("motion/react").then((res) => res.domAnimation);
export function MotionProvider({ children }: { children: ReactNode }) {
return <LazyMotion features={loadFeatures}>{children}</LazyMotion>;
}import { createRoot } from 'react-dom/client'
import App from './App.tsx'
import { MotionProvider } from './MotionProvider.tsx'
createRoot(document.getElementById('root')!).render(
<MotionProvider>
<App />
</MotionProvider>
)Props
Prop
Type
Examples
Comma
import AnimateNumber from "seed-design/breeze/animate-number/animate-number";
import { ActionButton } from "seed-design/ui/action-button";
import { useState } from "react";
export default function AnimateNumberComma() {
const [value, setValue] = useState(1234);
return (
<div className="flex flex-col items-center gap-6">
<AnimateNumber value={value} fontSize="3rem" showComma />
<ActionButton
size="small"
variant="neutralSolid"
onClick={() => setValue(Math.floor(Math.random() * 99999) + 1)}
>
랜덤 숫자 (1-99999)
</ActionButton>
</div>
);
}Gradient
import AnimateNumber from "seed-design/breeze/animate-number/animate-number";
import { ActionButton } from "seed-design/ui/action-button";
import { useState } from "react";
export default function AnimateNumberGradient() {
const [value, setValue] = useState(999);
return (
<div className="flex flex-col items-center gap-6">
<AnimateNumber value={value} fontSize="4rem" showGradient gradientHeight={20} />
<ActionButton
size="small"
variant="neutralSolid"
onClick={() => setValue(Math.floor(Math.random() * 99999) + 1)}
>
랜덤 숫자 (1-99999)
</ActionButton>
</div>
);
}Custom Style
import AnimateNumber from "seed-design/breeze/animate-number/animate-number";
import { ActionButton } from "seed-design/ui/action-button";
import { HStack } from "@seed-design/react";
import { useState } from "react";
export default function AnimateNumberCustomStyle() {
const [value, setValue] = useState(42);
return (
<div className="flex flex-col items-center gap-6">
<AnimateNumber
value={value}
fontSize="2.5rem"
fontWeight="600"
color="#FF6B00"
containerStyle={{ padding: "1rem" }}
/>
<HStack gap="10px">
<ActionButton
size="small"
variant="neutralSolid"
onClick={() => setValue(Math.floor(Math.random() * 99999) + 1)}
>
랜덤 숫자
</ActionButton>
</HStack>
</div>
);
}Last updated on