()
| 36 | ].filter(tier => tier.sponsors.length > 0); |
| 37 | |
| 38 | const SponsorsPage = () => { |
| 39 | useScrollToTop(); |
| 40 | |
| 41 | return ( |
| 42 | <> |
| 43 | <Navbar showDocs /> |
| 44 | <div className="sponsors-dotfield"> |
| 45 | <DotField sparkle waveAmplitude={5} dotRadius={2} /> |
| 46 | </div> |
| 47 | <section className="sponsors-page"> |
| 48 | <title>React Bits - Sponsors</title> |
| 49 | |
| 50 | {/* ── Header ──────────────────────────────────────────────── */} |
| 51 | <div className="sponsors-page-header"> |
| 52 | <div className="sponsors-page-header-left"> |
| 53 | <h1 className="sponsors-page-title">Sponsors</h1> |
| 54 | <p className="sponsors-page-subtitle"> |
| 55 | Your support keeps React Bits free and open-source for developers everywhere. |
| 56 | </p> |
| 57 | </div> |
| 58 | <a |
| 59 | href="mailto:contact@davidhaz.com?subject=React%20Bits%20Sponsorship%20Inquiry" |
| 60 | className="sponsors-page-cta" |
| 61 | > |
| 62 | Become a Sponsor <FaArrowRight size={12} /> |
| 63 | </a> |
| 64 | </div> |
| 65 | |
| 66 | {/* ── Tiers ───────────────────────────────────────────────── */} |
| 67 | {TIERS.map(tier => ( |
| 68 | <div className="sponsors-tier-section" key={tier.key}> |
| 69 | <div className="sponsors-tier-header"> |
| 70 | <span className={`sponsors-tier-badge sponsors-tier-badge--${tier.key}`}> |
| 71 | <tier.icon size={13} /> |
| 72 | {tier.label} |
| 73 | </span> |
| 74 | </div> |
| 75 | |
| 76 | {tier.sponsors.length > 0 ? ( |
| 77 | <div className={`sponsors-tier-grid sponsors-tier-grid--${tier.key}`}> |
| 78 | {tier.sponsors.map(sponsor => { |
| 79 | const href = buildSponsorUrl(sponsor.url, tier.key); |
| 80 | return ( |
| 81 | <a |
| 82 | key={sponsor.id} |
| 83 | href={href} |
| 84 | target="_blank" |
| 85 | rel="noopener" |
| 86 | className="sponsors-page-card" |
| 87 | > |
| 88 | <div className={`sponsors-card-banner sponsors-card-banner--${tier.key}`}> |
| 89 | <img |
| 90 | className="sponsors-card-logo" |
| 91 | src={sponsor.imageUrl} |
| 92 | alt={sponsor.name} |
| 93 | /> |
| 94 | </div> |
| 95 | <div className="sponsors-card-body"> |
nothing calls this directly
no test coverage detected