Files
better-auth/demo/nextjs/components/tier-labels.tsx
Bereket Engida 4f56078e4b feat: stripe plugin to handle subscriptions and customers (#1588)
* init

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* feat(stripe): enable subscription support and update pricing plans

* feat(stripe): add Vitest configuration and initial tests for Stripe integration

* feat(stripe): implement setCookieToHeader function and update tests for customer creation and subscription handling

* feat(stripe): add seats support for subscriptions and update related endpoints

* feat(stripe): update schema to include unique referenceId, stripeSubscriptionId, and periodEnd fields

* wip docs

* docs

* docs: imporves

* fix(stripe): update webhook handlers to use correct subscription identification

* refactor(stripe): simplify customer management by storing Stripe customer ID directly on user

* chore(stripe): update package configuration and build setup

- Migrated from tsup to unbuild for build configuration
- Updated package.json with improved export and dependency management
- Added build configuration for better module support
- Removed tsup configuration file

* chore(stripe): update pnpm lockfile dependencies

- Moved `better-auth` from devDependencies to dependencies
- Added `zod` as a direct dependency
- Reorganized package dependencies in the lockfile

* feat(stripe): enhance subscription management and error handling

- Added toast error handling for subscription upgrades in the dashboard
- Updated Stripe price IDs for different plans
- Improved Stripe plugin documentation with beta warning and team subscription details
- Implemented intermediate redirect for checkout success to handle race conditions
- Added support for fetching and updating subscription status after checkout
- Fixed Next.js cookie handling and build configuration

* chore: update snapshot
2025-03-01 01:20:17 +03:00

39 lines
1.1 KiB
TypeScript

import type React from "react";
import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "@/lib/utils";
const tierVariants = cva(
"inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold ring-1 ring-inset transition-all duration-300 ease-in-out",
{
variants: {
variant: {
free: "bg-gray-500 text-white ring-gray-400 hover:bg-gray-600",
starter: "bg-lime-700/40 text-white ring-lime-200/40 hover:bg-lime-600",
professional: "bg-purple-800/80 ring-purple-400 hover:bg-purple-700",
enterprise: "bg-amber-500 text-black ring-amber-400 hover:bg-amber-600",
},
},
defaultVariants: {
variant: "free",
},
},
);
export interface SubscriptionTierLabelProps
extends React.HTMLAttributes<HTMLSpanElement>,
VariantProps<typeof tierVariants> {
tier?: "free" | "starter" | "professional" | "enterprise";
}
export const SubscriptionTierLabel: React.FC<SubscriptionTierLabelProps> = ({
tier = "free",
className,
...props
}) => {
return (
<span className={cn(tierVariants({ variant: tier }), className)} {...props}>
{tier.charAt(0).toUpperCase() + tier.slice(1)}
</span>
);
};