Section

Features — Editorial

A typography-only feature list: a 4/8 split with a quiet heading block left and a numbered list right — mono indexes, 1px hairlines, no cards or icons.

  • Section
  • React
  • MIT

Preview

Live section

Interactive preview
Open preview
9:41 100%
devsnips.site/library/react/sections/features/editorial/
fluid · no fixed width 100%
No dependencies Responsive

Install

Add to your project

terminal
npx devsnips add React/Sections/Features/editorial
registry path: React/Sections/Features/editorial

Source

Implementation

code.tsx
import { useId } from "react";

/**
 * DevSnips React Features — Editorial composition (Minimal direction).
 *
 * An asymmetric 4/8 split of 12 (§10.2): a quiet heading block on the left,
 * a numbered feature list on the right. The list is typography-driven —
 * mono index numbers, semibold titles, one-sentence descriptions, and 1px
 * hairline dividers doing all of the separation (§9). No cards, no icons,
 * no shadows. Columns stack below lg with the heading block first (§12.2).
 *
 * One accent: the single text link under the lede. Numbers use the mono
 * stack per §5.1 (metadata role), never color.
 */

export interface EditorialFeature {
  title: string;
  description: string;
}

export interface FeaturesSectionProps {
  eyebrow?: string;
  heading?: string;
  lede?: string;
  features?: EditorialFeature[];
  link?: { label: string; href: string };
}

const FOCUS_RING =
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--ds-color-focus-ring)]";

const LINK_CLASSES =
  "text-sm font-semibold leading-5 text-[var(--ds-color-link)] underline underline-offset-4 transition-colors duration-150 ease-out hover:text-[var(--ds-color-link-hover)] motion-reduce:transition-none " +
  FOCUS_RING;

const DEFAULT_FEATURES: EditorialFeature[] = [
  {
    title: "Double-entry by default",
    description:
      "Every transaction writes balanced entries across accounts, so books reconcile themselves instead of being reconciled later.",
  },
  {
    title: "Idempotent requests",
    description:
      "An idempotency key on every mutation makes retries safe — a flaky network can never charge a customer twice.",
  },
  {
    title: "Signed webhooks",
    description:
      "Balance changes, settlements, and reversals arrive as signed events your services can verify without a round trip.",
  },
  {
    title: "Append-only audit trail",
    description:
      "Corrections are new entries, never edits; the full history of every account is queryable back to day one.",
  },
];

export function FeaturesSection({
  eyebrow = "Financial infrastructure",
  heading = "A ledger your accountant would approve of.",
  lede = "Ledger is a financial data API that treats correctness as the feature: balanced writes, safe retries, and an audit trail you never have to reconstruct.",
  features = DEFAULT_FEATURES,
  link = { label: "Read the data model", href: "#data-model" },
}: FeaturesSectionProps) {
  const headingId = useId();
  return (
    <section
      aria-labelledby={headingId}
      className="bg-[var(--ds-color-background)] font-[var(--ds-font-sans)] text-[var(--ds-color-foreground)]"
    >
      <div className="mx-auto max-w-[1280px] px-4 py-[clamp(4rem,3rem+4vw,6rem)] sm:px-6 lg:px-8">
        <div className="grid grid-cols-1 gap-12 lg:grid-cols-12 lg:gap-8">
          <div className="lg:col-span-4">
            <div className="max-w-md">
              <p className="text-xs font-semibold uppercase leading-[1.3] tracking-[0.05em] text-[var(--ds-color-muted-foreground)]">
                {eyebrow}
              </p>
              <h2
                id={headingId}
                className="mt-3 text-[clamp(1.875rem,1.65rem+1vw,2.25rem)] font-semibold leading-[1.15] tracking-[-0.02em]"
              >
                {heading}
              </h2>
              <p className="mt-4 text-[clamp(1rem,0.95rem+0.25vw,1.125rem)] leading-[1.5] text-[var(--ds-color-muted-foreground)]">
                {lede}
              </p>
              <p className="mt-6">
                <a href={link.href} className={LINK_CLASSES}>
                  {link.label}
                </a>
              </p>
            </div>
          </div>

          <ol className="border-t border-[var(--ds-color-border)] lg:col-span-8">
            {features.map((feature, index) => (
              <li
                key={feature.title}
                className="grid grid-cols-1 gap-2 border-b border-[var(--ds-color-border)] py-6 sm:grid-cols-[3rem_1fr] sm:gap-6 sm:py-8"
              >
                <span
                  aria-hidden="true"
                  className="font-[var(--ds-font-mono)] text-sm font-medium leading-6 text-[var(--ds-color-muted-foreground)]"
                >
                  {String(index + 1).padStart(2, "0")}
                </span>
                <div>
                  <h3 className="text-base font-semibold leading-6">
                    {feature.title}
                  </h3>
                  <p className="mt-2 max-w-xl text-sm leading-5 text-[var(--ds-color-muted-foreground)]">
                    {feature.description}
                  </p>
                </div>
              </li>
            ))}
          </ol>
        </div>
      </div>
    </section>
  );
}
123 lines UTF-8 · LF · Spaces: 2
DevSnips AI ready Claude · Cursor · Windsurf

Agent skill & Model Context Protocol

Pass this section straight into your AI workflow. DevSnips exposes each resource as a structured, addressable registry entry, so your agent installs the real files instead of approximating them.

devsnips://sections/features/editorial
Prompt instruction
I want to use this DevSnips resource in production:

Page:
https://devsnips.site/library/react/sections/features/editorial/

Install: npx devsnips add
React/Sections/Features/editorial

This is the Features — Editorial — A typography-only feature list: a 4/8 split with a quiet heading block left and a numbered list right — mono indexes, 1px hairlines, no cards or icons.

Use this DevSnips resource as the starting point for my project.
Adapt it to my project's stack and conventions, fix any issues,
and make it production-ready while preserving its intended design
and behavior.

Paste into ChatGPT, Claude or your agent — it already carries the page URL and the exact install path.

Resource URI
devsnips://sections/features/editorial