mirror of
https://github.com/LukeHagar/better-auth.git
synced 2025-12-07 12:27:44 +00:00
* 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
39 lines
1.1 KiB
TypeScript
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>
|
|
);
|
|
};
|