Halves component source

components/halves/Ledger.tsx

Back to the system
import type { ReactNode } from "react";

export function Ledger({ children }: { children: ReactNode }) {
  return <div className="ledger">{children}</div>;
}

export function LedgerRow({
  index,
  title,
  children,
  meta,
}: {
  index: string;
  title: string;
  children?: ReactNode;
  meta?: ReactNode;
}) {
  return (
    <article className="ledger-row">
      <span className="ledger-row__index">{index}</span>
      <div>
        <h3>{title}</h3>
        {children ? <p>{children}</p> : null}
      </div>
      {meta ? <span className="ledger-row__meta">{meta}</span> : null}
    </article>
  );
}

export function DispatchLedger({
  rows,
}: {
  rows: Array<[string, string, string, string]>;
}) {
  return (
    <Ledger>
      {rows.map(([index, title, copy, meta]) => (
        <LedgerRow key={index} index={index} title={title} meta={meta}>
          {copy}
        </LedgerRow>
      ))}
    </Ledger>
  );
}