import * as React from "react"; import { Check, X, Sparkles, Zap, ArrowRight, Box, Search, } from "lucide-react"; import { CRAWLERX_PLANS, ADD_ON_PACKS, TRUST_BADGES, getPlanCtaLabel, } from "./PricingData"; import type { Currency, BillingInterval, PricingPlan } from "./PricingData"; import { Floating3DChartCard, Floating3DSearchCard, DotGridMatrix, renderPlanIcon, renderTrustIcon, } from "./PricingGraphics"; export function PricingTable({ onSelectPlan, isProcessing, loadingPlanId, currentPlanId = "free", }: { onSelectPlan?: (plan: PricingPlan, interval: BillingInterval, currency: Currency) => void; isProcessing?: boolean; loadingPlanId?: string | null; currentPlanId?: string; }) { const [currency, setCurrency] = React.useState("INR"); const [interval, setInterval] = React.useState("monthly"); return (
{CRAWLERX_PLANS.map((plan) => ( ))}
); } function PricingHero({ currency, interval, onCurrencyChange, onIntervalChange, }: { currency: Currency; interval: BillingInterval; onCurrencyChange: (c: Currency) => void; onIntervalChange: (i: BillingInterval) => void; }) { return (
Transparent • Fair Pricing

Powerful SEO tools{" "} for real growth.

Everything you need to audit, fix, track and grow — at a fraction of the cost of Semrush.

); } function PricingCard({ plan, currency, interval, currentPlanId, isProcessing, loadingPlanId, onSelectPlan, }: { plan: PricingPlan; currency: Currency; interval: BillingInterval; currentPlanId?: string; isProcessing?: boolean; loadingPlanId?: string | null; onSelectPlan?: (plan: PricingPlan, interval: BillingInterval, currency: Currency) => void; }) { const isPro = plan.isPopular; const isCurrent = currentPlanId === plan.id; const cta = getPlanCtaLabel(plan, currentPlanId); const price = interval === "monthly" ? plan.monthlyPrice[currency] : plan.annualMonthlyPrice[currency]; const isThisCardLoading = loadingPlanId ? loadingPlanId === plan.id : Boolean(isProcessing); const isAnyPlanLoading = Boolean(loadingPlanId || isProcessing); return (
{isCurrent ? (
YOUR ACTIVE PLAN
) : isPro ? (
👑 MOST POPULAR 76% AGENCY CHOICE
) : null}
{renderPlanIcon(plan.iconType)}
{plan.categoryTag}

{plan.name}

{plan.subhead}

{currency === "INR" ? `₹${price.toLocaleString("en-IN")}` : `$${price}`} /month
    {plan.features.map((feature) => (
  • {feature.included ? ( ) : ( )} {feature.name}
  • ))}
); } function PricingAddOns({ currency }: { currency: Currency }) { return (

Need Extra Capacity? Add-on Packs

Top-up quota anytime without moving to a higher tier. Capped and transparent.

{ADD_ON_PACKS.map((addon) => (
{addon.id === "keywords" ? : }
{addon.name}
{addon.description}
{currency === "INR" ? addon.inr : addon.usd} →
))}
); } function PricingTrustBadges() { return (
{TRUST_BADGES.map((badge, idx) => (
{renderTrustIcon(badge.id)}
{badge.title}
{badge.desc}
))}
); }