Zoeken...  ⌘K GitHub

IconComparison icon

Vergelijkingslijst met iconen per rij.

/icon-comparison
src/components/icon/IconComparison.astro
---
interface CompareRow {
  feature: string;
  aValue: string | boolean;
  bValue: string | boolean;
}

interface Props {
  columnA?: string;
  columnB?: string;
  rows?: CompareRow[];
  title?: string;
}

const {
  columnA = 'Traditioneel bureau',
  columnB = 'BLURR',
  rows = [
    { feature: 'Één aanspreekpunt', aValue: false, bValue: true },
    { feature: 'Realtime dashboard', aValue: false, bValue: true },
    { feature: 'Wekelijkse optimalisatie', aValue: false, bValue: true },
    { feature: 'Vaste maandprijs', aValue: false, bValue: true },
    { feature: 'Resultaatgarantie', aValue: false, bValue: true },
    { feature: 'Contractduur', aValue: '12 maanden', bValue: 'Maand tot maand' },
    { feature: 'Opzegtermijn', aValue: '3 maanden', bValue: '1 maand' },
  ],
  title = 'BLURR vs traditioneel bureau',
} = Astro.props;
---

<section class="icmpr">
  {title && <h2 class="icmpr__title">{title}</h2>}
  <div class="icmpr__table">
    <div class="icmpr__header">
      <div class="icmpr__h-feature"></div>
      <div class="icmpr__h-col icmpr__h-col--a">{columnA}</div>
      <div class="icmpr__h-col icmpr__h-col--b">{columnB}</div>
    </div>
    {rows.map((row) => (
      <div class="icmpr__row">
        <div class="icmpr__feature">{row.feature}</div>
        <div class="icmpr__val icmpr__val--a">
          {typeof row.aValue === 'boolean' ? (
            <span class:list={['icmpr__bool', row.aValue ? 'icmpr__bool--yes' : 'icmpr__bool--no']}>
              {row.aValue ? '✓' : '✗'}
            </span>
          ) : row.aValue}
        </div>
        <div class="icmpr__val icmpr__val--b">
          {typeof row.bValue === 'boolean' ? (
            <span class:list={['icmpr__bool', row.bValue ? 'icmpr__bool--yes' : 'icmpr__bool--no']}>
              {row.bValue ? '✓' : '✗'}
            </span>
          ) : row.bValue}
        </div>
      </div>
    ))}
  </div>
</section>

<style>
  :root {
    --color-accent: #6366f1;
    --color-primary: #0a0a0a;
  }
  .icmpr { padding: 2rem 0; }
  .icmpr__title {
    font-size: 2rem;
    font-weight: 700;
    color: var(--color-primary, #0a0a0a);
    text-align: center;
    margin: 0 0 2rem;
  }
  .icmpr__table {
    border: 1px solid #eee;
    border-radius: 12px;
    overflow: hidden;
  }
  .icmpr__header, .icmpr__row {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
  }
  .icmpr__header {
    background: #f9f9f9;
    border-bottom: 2px solid #eee;
  }
  .icmpr__h-feature, .icmpr__h-col {
    padding: 0.9rem 1.25rem;
    font-size: 0.85rem;
    font-weight: 700;
    color: #555;
  }
  .icmpr__h-col--b { color: var(--color-accent, #6366f1); background: rgba(99,102,241,0.04); }
  .icmpr__row { border-bottom: 1px solid #f0f0f0; }
  .icmpr__row:last-child { border-bottom: none; }
  .icmpr__row:hover { background: #fafafa; }
  .icmpr__feature {
    padding: 0.85rem 1.25rem;
    font-size: 0.9rem;
    color: var(--color-primary, #0a0a0a);
    font-weight: 500;
    display: flex;
    align-items: center;
  }
  .icmpr__val {
    padding: 0.85rem 1.25rem;
    display: flex;
    align-items: center;
    font-size: 0.88rem;
    color: #666;
  }
  .icmpr__val--b { background: rgba(99,102,241,0.03); }
  .icmpr__bool {
    font-size: 1rem;
    font-weight: 700;
  }
  .icmpr__bool--yes { color: #16a34a; }
  .icmpr__bool--no { color: #dc2626; }
</style>