import type {ReactNode} from 'react'; import clsx from 'clsx'; import Heading from '@theme/Heading'; import Translate from '@docusaurus/Translate'; import styles from './styles.module.css'; type FeatureItem = { title: ReactNode; Svg: React.ComponentType>; description: ReactNode; }; const FeatureList: FeatureItem[] = [ { title: Modular & Hierarchical, Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, description: ( CherryPick supports modular DI bindings and true hierarchical scopes. Build scalable apps by composing advanced dependency trees with clear separation of concerns. ), }, { title: Sync & Async DI, Zero Boilerplate, Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, description: ( Register synchronous or asynchronous providers, named and singleton dependencies, and enjoy null-safe, testable resolution. Annotation-based code generation removes all manual “wiring”. ), }, { title: For Dart & Flutter, Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, description: ( Use CherryPick in backend, CLI, server or Flutter widget trees equally well. Deep Flutter integration for provider injection, async scope lifecycles, and easy testing. ), }, ]; function Feature({title, Svg, description}: FeatureItem) { return (
{title}

{description}

); } export default function HomepageFeatures(): ReactNode { return (
{FeatureList.map((props, idx) => ( ))}
); }