/**
* Props for the EmojiBurst component
*/
export interface EmojiBurstProps {
/**
* Whether the burst animation is currently active.
* When set to true, starts a new burst animation from the specified position.
* Setting to false will not stop an ongoing animation - use onComplete for cleanup.
*/
isActive: boolean;
/**
* The position where the burst should originate from, in viewport coordinates.
* Typically obtained from element.getBoundingClientRect() or mouse event coordinates.
*
* @example
* ```tsx
* // From button center
* const rect = buttonRef.current.getBoundingClientRect();
* const position = {
* x: rect.left + rect.width / 2,
* y: rect.top + rect.height / 2
* };
*
* // From mouse click
* const position = { x: event.clientX, y: event.clientY };
* ```
*/
position: {
x: number;
y: number;
};
/**
* The emoji to display in the burst animation.
* Special behavior: When set to '👍', automatically uses diverse skin tone variants.
*
* @default "👍"
*
* @example
* ```tsx
* emoji="🎉" // Party celebration
* emoji="❤️" // Love reaction
* emoji="😂" // Laughter
* emoji="👍" // Uses skin tone variants: 👍, 👍🏻, 👍🏽, 👍🏿
* ```
*/
emoji?: string;
/**
* Duration of the burst animation in milliseconds.
* Controls how long emojis remain visible before fading out completely.
* Longer durations allow emojis to travel further and fade more gradually.
*
*
* - Animation uses requestAnimationFrame for smooth 60fps performance
* - Emojis begin fading after 2/3 of the duration
*/
duration: number;
/**
* Callback function called when the animation completes and all emojis have faded out.
* Use this to clean up state, typically by setting isActive to false.
*
* @example
* ```tsx
* onComplete={() => {
* setBurstActive(false);
* // Optional: trigger other effects
* playSound('burst-complete');
* }}
* ```
*/
onComplete: () => void;
}
/**
* EmojiBurst component creates an animated burst of emoji characters
*
* Features:
* - Creates a circular burst of emojis with different skin tones (for thumbs-up) or the specified emoji
* - Animates emojis with physics-based motion (velocity, gravity, rotation)
* - Automatically fades out and cleans up after animation completes
* - Non-interactive visual effect (pointer-events-none)
* - Randomized trajectories and rotation for natural movement
* - Adaptive emoji variants for inclusive representation
*
* @example
* // Basic reaction burst on button click
* const [burstActive, setBurstActive] = useState(false);
* const [burstPosition, setBurstPosition] = useState({ x: 0, y: 0 });
* const [burstDuration] = useState(2000); // 2 seconds
*
* const handleReaction = (event: React.MouseEvent) => {
* const rect = event.currentTarget.getBoundingClientRect();
* setBurstPosition({
* x: rect.left + rect.width / 2,
* y: rect.top + rect.height / 2
* });
* setBurstActive(true);
* };
*
* return (
* <>
*
* setBurstActive(false)}
* />
* >
* );
*
* @example
* // Custom emoji with longer duration
* setShowCelebration(false)}
* />
*
* @example
* // Triggered from mouse coordinates
* const handleEmojiReaction = (event: MouseEvent, selectedEmoji: string) => {
* setBurstPosition({ x: event.clientX, y: event.clientY });
* setBurstEmoji(selectedEmoji);
* setBurstActive(true);
* };
*
* setBurstActive(false)}
* />
*/
export declare const EmojiBurst: ({ isActive, position, emoji, duration, onComplete, }: EmojiBurstProps) => import("react/jsx-runtime").JSX.Element | undefined;