1 estrella en GitHub = 1 componente nuevo.

Dar una estrella
Tablas de Precios

Pricing Single Plan

Precio de plan único con tarjeta, precio original tachado, lista de funciones y garantía.

pricingsingle-planlifetimeguarantee
Vista Previa en Vivo

One price. Everything included.

Lifetime access to every component, section and future update.

Lifetime license

Was $249Now $149

one-time payment

Get lifetime access

30-day money-back guarantee. No questions asked.

What’s included

  • 250+ components & sections
  • 45 dependency-free SVG charts
  • Lifetime updates
  • Unlimited projects
  • Commercial license
  • Figma design kit
  • Private community
  • Priority email support

Uso

Copia y pega este código directamente en tu componente React:

tsx
import { PricingSinglePlan } from 'react-component-kit-ui/sections';

<PricingSinglePlan planName="Lifetime license" price="$149" originalPrice="$249" features={['All components', 'Lifetime updates']} />

Instalación Manual

Si no estás usando el paquete npm, crea un archivo nuevo y pega el siguiente código: src/components/sections/PricingSinglePlan.tsx + PricingSinglePlan.css:

PricingSinglePlan.tsx
'use client';

import './PricingSinglePlan.css';

/**
 * PricingSinglePlan — One-plan pricing section: price card on one side,
 * full feature checklist on the other, with a money-back guarantee note.
 *
 * @param {string} title - Section heading.
 * @param {string} subtitle - Section description.
 * @param {string} planName - Plan name.
 * @param {string} price - Formatted price.
 * @param {string} period - Billing period label.
 * @param {string} originalPrice - Optional struck-through price.
 * @param {string[]} features - Included features.
 * @param {{label: string, href: string}} cta - CTA button.
 * @param {string} guarantee - Reassurance note under the CTA.
 * @param {string} variant - Card style (glow|glass|minimal).
 * @param {string} size - Vertical rhythm (sm|md|lg).
 * @param {string} className - Extra CSS class.
 */
export interface PricingSinglePlanProps {
  title?: string;
  subtitle?: string;
  planName?: string;
  price?: string;
  period?: string;
  originalPrice?: string;
  features?: string[];
  cta?: { label: string; href: string };
  guarantee?: string;
  variant?: 'glow' | 'glass' | 'minimal';
  size?: 'sm' | 'md' | 'lg';
  className?: string;
}

export function PricingSinglePlan({
  title = 'One price. Everything included.',
  subtitle = 'Lifetime access to every component, section and future update.',
  planName = 'Lifetime license',
  price = '$149',
  period = 'one-time payment',
  originalPrice = '$249',
  features = [
    '250+ components & sections',
    '45 dependency-free SVG charts',
    'Lifetime updates',
    'Unlimited projects',
    'Commercial license',
    'Figma design kit',
    'Private community',
    'Priority email support',
  ],
  cta = { label: 'Get lifetime access', href: '#' },
  guarantee = '30-day money-back guarantee. No questions asked.',
  variant = 'glow',
  size = 'md',
  className = '',
}: PricingSinglePlanProps) {
  const id = `psp-${Math.random().toString(36).slice(2, 8)}`;
  return (
    <>
      <div className="cq-pricing-single-plan-cq" data-rk-ed3ab2="">
      <section className={`psp psp--${variant} psp--${size} ${className}`} aria-labelledby={id} data-rk-ed3ab2="">
        <div className="psp__inner" data-rk-ed3ab2="">
          <header className="psp__head" data-rk-ed3ab2="">
            <h2 id={id} className="psp__title" data-rk-ed3ab2="">{title}</h2>
            <p className="psp__subtitle" data-rk-ed3ab2="">{subtitle}</p>
          </header>
          <div className="psp__card" data-rk-ed3ab2="">
            <div className="psp__price-col" data-rk-ed3ab2="">
              <p className="psp__plan" data-rk-ed3ab2="">{planName}</p>
              <p className="psp__price" data-rk-ed3ab2="">
                {originalPrice && <s className="psp__orig" data-rk-ed3ab2=""><span className="psp__sr" data-rk-ed3ab2="">Was </span>{originalPrice}</s>}
                <span className="psp__amount" data-rk-ed3ab2=""><span className="psp__sr" data-rk-ed3ab2="">Now </span>{price}</span>
              </p>
              <p className="psp__period" data-rk-ed3ab2="">{period}</p>
              <a className="psp__cta" href={cta.href} data-rk-ed3ab2="">{cta.label}</a>
              <p className="psp__guarantee" data-rk-ed3ab2="">
                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true" data-rk-ed3ab2=""><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" data-rk-ed3ab2="" /><path d="m9 12 2 2 4-4" data-rk-ed3ab2="" /></svg>
                {guarantee}
              </p>
            </div>
            <div className="psp__features-col" data-rk-ed3ab2="">
              <h3 className="psp__features-title" data-rk-ed3ab2="">What’s included</h3>
              <ul className="psp__features" data-rk-ed3ab2="">
                {features.map((f, __i: number) => (
                  <li key={__i} data-rk-ed3ab2=""><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.4" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true" data-rk-ed3ab2=""><path d="M20 6 9 17l-5-5" data-rk-ed3ab2="" /></svg>{f}</li>
                ))}
              </ul>
            </div>
          </div>
        </div>
      </section>
      </div>
    </>
  );
}

export default PricingSinglePlan;
PricingSinglePlan.css
/* PricingSinglePlan — ported from astro-component-kit (sections/PricingSinglePlan.astro) */

.cq-pricing-single-plan-cq:where([data-rk-ed3ab2]) { container-type: inline-size; }
.psp:where([data-rk-ed3ab2]) {
  --psp-py: 5.5rem;
  padding: var(--psp-py) var(--sp-6, 1.5rem);
  background: var(--c-bg, #050505);
}
.psp--sm:where([data-rk-ed3ab2]) { --psp-py: 3.5rem; }
.psp--lg:where([data-rk-ed3ab2]) { --psp-py: 7.5rem; }
.psp__inner:where([data-rk-ed3ab2]) { max-width: 960px; margin: 0 auto; }
.psp__head:where([data-rk-ed3ab2]) { text-align: center; margin-bottom: 3rem; }
.psp__title:where([data-rk-ed3ab2]) { margin: 0 0 0.75rem; font-size: clamp(1.9rem, 4vw, 2.75rem); font-weight: 800; letter-spacing: -0.03em; color: var(--c-text-1, #fff); }
.psp__subtitle:where([data-rk-ed3ab2]) { margin: 0; font-size: 1.0625rem; color: var(--c-text-2, #a3a3a3); }
.psp__card:where([data-rk-ed3ab2]) {
  position: relative;
  display: grid;
  grid-template-columns: 1fr 1.3fr;
  border-radius: var(--r-xl, 28px);
  overflow: hidden;
  border: 1px solid var(--c-border, rgb(var(--ink-rgb, 255 255 255) / 0.08));
  background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
}
.psp--glow:where([data-rk-ed3ab2]) .psp__card:where([data-rk-ed3ab2]) { border-color: color-mix(in srgb, var(--c-primary-light, #d4a017) 35%, transparent); box-shadow: 0 0 0 1px color-mix(in srgb, var(--c-primary-light, #d4a017) 8%, transparent), 0 40px 100px -40px color-mix(in srgb, var(--c-primary-light, #d4a017) 40%, transparent); }
.psp--glass:where([data-rk-ed3ab2]) .psp__card:where([data-rk-ed3ab2]) { backdrop-filter: blur(16px); background: linear-gradient(160deg, rgb(var(--ink-rgb, 255 255 255) / 0.06), rgb(var(--ink-rgb, 255 255 255) / 0.015)); }
.psp--minimal:where([data-rk-ed3ab2]) .psp__card:where([data-rk-ed3ab2]) { background: transparent; }
.psp__price-col:where([data-rk-ed3ab2]) {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: clamp(2rem, 5vw, 3rem);
  background: radial-gradient(circle at 30% 0%, var(--c-primary-glow, color-mix(in srgb, var(--c-primary, #b8860b) 18%, transparent)), transparent 70%), rgb(var(--ink-rgb, 255 255 255) / 0.02);
  border-right: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
}
.psp__plan:where([data-rk-ed3ab2]) { margin: 0 0 1rem; font-size: 0.875rem; font-weight: 650; letter-spacing: 0.06em; text-transform: uppercase; color: var(--c-primary-light, #d4a017); }
.psp__price:where([data-rk-ed3ab2]) { display: flex; align-items: baseline; gap: 0.75rem; margin: 0; }
.psp__orig:where([data-rk-ed3ab2]) { font-size: 1.25rem; color: var(--c-text-3, #8a8a8a); }
.psp__amount:where([data-rk-ed3ab2]) { font-size: clamp(3rem, 7vw, 4rem); font-weight: 800; letter-spacing: -0.04em; color: var(--c-text-1, #fff); line-height: 1; }
.psp__period:where([data-rk-ed3ab2]) { margin: 0.5rem 0 2rem; font-size: 0.9rem; color: var(--c-text-2, #a3a3a3); }
.psp__cta:where([data-rk-ed3ab2]) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 52px;
  border-radius: var(--r-md, 12px);
  background: var(--c-primary-light, #d4a017);
  color: var(--c-on-primary, #0a0a0a);
  font-weight: 700;
  text-decoration: none;
  transition: background 0.2s ease, transform 0.2s ease;
}
.psp__cta:hover:where([data-rk-ed3ab2]) { background: var(--c-accent, #fef3c7); color: var(--c-on-primary, #0a0a0a); transform: translateY(-1px); }
.psp__cta:focus-visible:where([data-rk-ed3ab2]) { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 3px; }
.psp__guarantee:where([data-rk-ed3ab2]) { display: flex; align-items: flex-start; gap: 0.5rem; margin: 1.25rem 0 0; font-size: 0.8125rem; line-height: 1.5; color: var(--c-text-2, #a3a3a3); }
.psp__guarantee:where([data-rk-ed3ab2]) svg:where([data-rk-ed3ab2]) { color: var(--chart-pos, #34c38f); flex-shrink: 0; margin-top: 1px; }
.psp__features-col:where([data-rk-ed3ab2]) { padding: clamp(2rem, 5vw, 3rem); }
.psp__features-title:where([data-rk-ed3ab2]) { margin: 0 0 1.5rem; font-size: 1rem; font-weight: 650; color: var(--c-text-1, #fff); }
.psp__features:where([data-rk-ed3ab2]) { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 1rem 1.5rem; }
.psp__features:where([data-rk-ed3ab2]) li:where([data-rk-ed3ab2]) { display: flex; align-items: flex-start; gap: 0.6rem; font-size: 0.9375rem; line-height: 1.4; color: var(--c-text-1, #fff); }
.psp__features:where([data-rk-ed3ab2]) svg:where([data-rk-ed3ab2]) { color: var(--c-primary-light, #d4a017); flex-shrink: 0; }
.psp__sr:where([data-rk-ed3ab2]) { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
@container (max-width: 760px) {
  .psp__card:where([data-rk-ed3ab2]) { grid-template-columns: 1fr; }
  .psp__price-col:where([data-rk-ed3ab2]) { border-right: 0; border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06); }
  .psp__features:where([data-rk-ed3ab2]) { grid-template-columns: 1fr; }
}