import { IconCreditCard, IconLanguage, IconLayoutDashboard, IconShieldLock, } from '@tabler/icons-react'; import type { ReactNode } from 'react'; import { FeatureItem, FeatureItemDescription, FeatureItemIcon, FeatureItemTitle, } from '../ui/feature-item'; import { Section } from '../ui/section'; /* * Feature grid. Adapted from Launch UI's "items" section (MIT) for Vite: * lucide -> Tabler icons, and the copy genericized as a starting point for the * generated app. Swap these for the capabilities that matter to your product. */ interface FeatureProps { title: string; description: string; icon: ReactNode; } interface FeaturesProps { title?: string; items?: FeatureProps[] | false; className?: string; } const DEFAULT_FEATURES: FeatureProps[] = [ { title: 'Authentication', description: 'Email, OAuth, and magic links, with sessions and route guards handled for you.', icon: , }, { title: 'Billing', description: 'Plans, subscriptions, and invoices, with Stripe checkout and webhooks wired.', icon: , }, { title: 'Admin dashboard', description: 'Users, roles, and organization settings, with the screens and permissions already built.', icon: , }, { title: 'Docs & i18n', description: 'Searchable docs, five bundled languages, and browser locale detection, with English fallbacks already in place.', icon: , }, ]; export default function Features({ title = "The parts you'd rather not build twice.", items = DEFAULT_FEATURES, className, }: FeaturesProps) { return (

{title}

{items !== false && items.length > 0 && (
{items.map((item) => ( {item.icon} {item.title} {item.description} ))}
)}
); }