Getting Started
App Providerglobal.d.tsThemesTypes
cn(...args)Text ParserUnits Converters
AnchorAvatarBreadcrumbBurgerButtonCardCarouselCheckerCodeColor PickerCommandConfettiCopyButtonDouble Helix WordsFloating IndicatorGroupHighlight TextIndicatorInputKbdLabelLoaderPaginationPassword RequirementPolymorphic SlotProgressProseRatingRunning AreaScroll AreaSheetsSkeletonSliderStackSvgTableTabsTextareaTimelineTimesToasterTooltipTyping WordsTypography
useClickOutsideuseClipboarduseDeviceInfouseDialoguseDidUpdateuseDirectionuseDisclosureuseDocumentTitleuseDocumentVisibilityuseElementInfouseEyeDropperuseFetchuseFullscreenuseGeoLocationuseHotkeysuseHoveruseIduseImagePopupuseInputStateuseIntersectionuseIntervaluseIsomorphicEffectuseListStateuseLocalStorageuseMeasureScrollbaruseMediaQueryuseMergedRefuseMouseuseMoveuseMutationObserveruseNetworkuseOpenStateuseOrientationuseOSusePaginationusePWAInstalleruseRandomColorsuseReducedMotionuseReloaduseResizeObserveruseScrollIntoViewuseStateHistoryuseTimeoutuseTouchuseTriggeruseUncontrolleduseValidatedStateuseViewportSizeuseWindowEventuseWindowScroll
Docs
Web
Components
Confetti
Command

A search dialog component that provides fuzzy search for locating items quickly within the application.

CopyButton

A button that lets users copy text to the clipboard with a single click.


Edit this page on GitHub
  • Started
  • Utilities
  • Configuration
  • Components
  • Hooks
  • Examples
  • Github
  • Contributing
⌘+J

© 2025 oeri rights MIT


Designed in Earth-616

Built by oeri

Confetti

A visual effect component that renders celebratory confetti animation, often used for success messages or festive interactions.

Usage

Basic usage example to quickly see how the Confetti works.

"use client";
import { useState } from "react";
import { createPortal } from "react-dom";
import { Confetti } from "@/ui/confetti";
import { Button } from "@/ui/button";

export function ConfettiDemo() {
  const [start, setStart] = useState(false);

  const windowIsDefine = typeof window !== "undefined" && typeof document !== "undefined";

  const confetti = start ? <Confetti lifespan={5000} className="fixed" /> : null;

  return (
    <>
      <Button
        disabled={start}
        onClick={() => {
          if (!start) setStart(true);
          setTimeout(() => setStart(false), 5100);
        }}
      >
        Confetti
      </Button>

      {windowIsDefine && createPortal(confetti, document.body)}
    </>
  );
}

Properties

Interactive configurator to explore customization options for the Confetti component.

Lifespan
"use client"
import { useState } from "react";
import { Confetti } from "@/ui/confetti";
import { Button } from "@/ui/button";

const colors = [
  "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate",
  "coral", "cornflowerblue", "cornsilk", "crimson", "currentColor", "currentcolor", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen",
  "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray",
  "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia",
  "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "green", "greenyellow", "grey", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender"
];

export function ConfettiDemo() {
  const [start, setStart] = useState(false);

  const confetti = start ? <Confetti className="absolute" colors={colors} /> : null;

  return (
    <>
      <Button
        disabled={start}
        onClick={() => {
          if (!start) setStart(true);
          setTimeout(() => setStart(false), 5100);
        }}
      >
        Confetti
      </Button>

      {confetti}
    </>
  );
}

API References

Props API

Props APITypeDefaultAnnotation
lifeTime?number-
lifespan?number3500

Source Codes

Full working code example, including necessary markup and styles. You can copy and paste this code directly to start using the component immediately.

confetti.tsx