Coupon Input

Commerce

Coupon code input with apply button.

Preview

Usage

example.jsx
import { CouponInput } from "@/components/ui/coupon-input";

export default function Example() {
  return <CouponInput />;
}

Source Code

Copy this file into components/ui/coupon-input.jsx in your project.

coupon-input.jsx
"use client";

import { forwardRef, useState } from "react";
import { cn } from "@/lib/utils";

const CouponInput = forwardRef(({ className, onApply, ...props }, ref) => {
  const [code, setCode] = useState("");
  return (
    <div ref={ref} className={cn("flex gap-2", className)} {...props}>
      <input type="text" value={code} onChange={(e) => setCode(e.target.value.toUpperCase())} placeholder="Enter coupon code"
        className="flex h-10 flex-1 rounded-md border bg-background px-3 py-2 text-sm font-mono uppercase placeholder:text-muted-foreground placeholder:normal-case focus:outline-none focus:ring-2 focus:ring-ring"
      />
      <button onClick={() => { if (code.trim()) onApply?.(code.trim()); }}
        className="inline-flex h-10 items-center rounded-md border px-4 text-sm font-medium hover:bg-accent"
      >Apply</button>
    </div>
  );
});
CouponInput.displayName = "CouponInput";

export { CouponInput };

Quick Install

Make sure you have the cn() utility set up. It requires clsx and tailwind-merge.

npm install clsx tailwind-merge