Files
xrpl-dev-portal/shared/patterns/LinkTextCard/LinkTextCard.tsx
gabriel-ortiz 76c5d6a88d Refactor home page sections and introduce new components
- Replaced existing content in index.page.tsx with new section components for improved structure and maintainability.
- Added new sections: HomeBeginJourneySection, HomeBlockchainStatsSection, HomeComplianceDirectorySection, HomeDevelopersFeatureSection, HomeFutureFinanceCallout, HomeHeroCallout, HomeInstitutionsFeatureSection, HomePartnerLogosSection, HomeStayConnectedSection, and HomeCarousel.
- Updated styles for CarouselFeatured and CardStat components to enhance visual consistency and responsiveness.
- Introduced SCSS for HomeHero section to manage layout and spacing effectively.
2026-04-30 11:31:41 -07:00

81 lines
2.2 KiB
TypeScript

import React from "react";
import clsx from "clsx";
import { ButtonGroup, ButtonConfig } from "../ButtonGroup";
export interface LinkTextCardProps {
/** Card index for numbering (displays as index + 1) */
index: number;
/** Heading text (required) */
heading: string;
/** Description text (required) */
description: string;
/** Array of button configurations (max 2) */
buttons?: ButtonConfig[];
/** Additional CSS classes */
className?: string;
}
/**
* LinkTextCard Component
*
* A card component that displays a numbered item with heading, description, and action buttons.
* Features a top divider, sequential numbering (01, 02, 03...), and up to 2 call-to-action buttons.
*
* Design:
* - Flat HTML structure for minimal DOM depth
* - Fixed green button color for brand consistency
* - Responsive typography using existing design tokens
* - Full light/dark mode support
*
* @example
* // Basic usage
* <LinkTextCard
* index={0}
* heading="Fast Settlement and Low Fees"
* description="Settle transactions in 3-5 seconds for a fraction of a cent"
* buttons={[
* { label: "Get Started", href: "/start" },
* { label: "Learn More", href: "/learn" }
* ]}
* />
*
* @example
* // Single button
* <LinkTextCard
* index={1}
* heading="Secure and Reliable"
* description="Built on proven blockchain technology"
* buttons={[{ label: "Read Docs", href: "/docs" }]}
* />
*/
export const LinkTextCard: React.FC<LinkTextCardProps> = ({
index,
heading,
description,
buttons,
className,
}) => {
// Format number with zero padding (01, 02, 03...)
const formattedNumber = String(index + 1).padStart(2, "0");
// Ensure max 2 buttons for proper layout
const maxButtons = buttons?.slice(0, 2) ?? [];
return (
<li className={clsx("bds-link-text-card", className)}>
<div className="bds-link-text-card__header">
<p className="mb-0 body-l">{formattedNumber}</p>
<h5 className="mb-0 sh-lg-l">{heading}</h5>
</div>
<div className="bds-link-text-card__content">
<p className="mb-0 body-l">{description}</p>
{maxButtons.length > 0 && (
<ButtonGroup buttons={maxButtons} color="green" />
)}
</div>
</li>
);
};
export default LinkTextCard;