@baneung-pack

Confetti

ConfettiProvider + useConfetti() 명령형 트리거. 결제 완료·성공·축하 순간용. Canvas 기반, 0 dependency.

발사 트리거

사용

import { ConfettiProvider, useConfetti } from '@baneung-pack/effect';

// 1. 앱 루트에 Provider
<ConfettiProvider>{children}</ConfettiProvider>

// 2. 컴포넌트에서 호출
function CheckoutButton() {
  const confetti = useConfetti();
  return (
    <button onClick={async () => {
      await checkout();
      confetti.fire({ particleCount: 200 });
    }}>결제</button>
  );
}

// 버튼에서 발사
const ref = useRef<HTMLButtonElement>(null);
confetti.fire({ origin: ref.current });

// 양쪽에서
confetti.fire({ origin: { ratioX: 0.1, ratioY: 0.5 }, angle: 60 });
confetti.fire({ origin: { ratioX: 0.9, ratioY: 0.5 }, angle: 120 });

API

ConfettiProviderProps

PropertyType기본값설명
childrenReactNode자식 트리.
zIndexnumber2147483647Canvas z-index.

useConfetti() → ConfettiApi

PropertyType기본값설명
fire(options?)(opts?: ConfettiFireOptions) => void발사. 동시 호출 가능 (양쪽 등).

ConfettiFireOptions (fire 호출 시)

PropertyType기본값설명
origin{x,y} | {ratioX,ratioY} | HTMLElement가운데 하단발사 위치 — 픽셀/비율/요소 중심.
particleCountnumber80입자 개수.
colorsstring[]7색 vivid입자가 무작위 선택.
shape'square' | 'circle' | 'ribbon''square'입자 모양.
spreadnumber60발사 spread 각도 (deg).
anglenumber90발사 각도 (90=위, 0=오른쪽).
velocitynumber14초기 속도 (px/frame).
gravitynumber0.5중력 가속도 (px/frame²).
ticksnumber130입자 수명 (frame).
sizenumber10입자 크기 (px).