123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import type { ReactNode } from "react";
- import clsx from "clsx";
- import Heading from "@theme/Heading";
- import styles from "./styles.module.css";
- type FeatureItem = {
- title: string;
- Svg: React.ComponentType<React.ComponentProps<"svg">>;
- description: ReactNode;
- };
- const FeatureList: FeatureItem[] = [
- {
- title: "Easy to Use",
- Svg: require("@site/static/img/undraw_docusaurus_mountain.svg").default,
- description: (
- <>
- Anubis is easy to set up, lightweight, and helps get rid of the lowest
- hanging fruit so you can sleep at night.
- </>
- ),
- },
- {
- title: "",
- Svg: require("@site/static/img/undraw_docusaurus_tree.svg").default,
- description: (
- <>
- Anubis is efficient and as lightweight as possible, blocking the worst
- of the bots on the internet and makes it easy to protect what you host
- online.
- </>
- ),
- },
- {
- title: "Powered by React",
- Svg: require("@site/static/img/undraw_docusaurus_react.svg").default,
- description: (
- <>
- Anubis uses a multi-threaded proof of work check to ensure that users
- browsers are up to date and support modern standards.
- </>
- ),
- },
- ];
- function Feature({ title, Svg, description }: FeatureItem) {
- return (
- <div className={clsx("col col--4")}>
- <div className="text--center">
- <Svg className={styles.featureSvg} role="img" />
- </div>
- <div className="text--center padding-horiz--md">
- <Heading as="h3">{title}</Heading>
- <p>{description}</p>
- </div>
- </div>
- );
- }
- export default function HomepageFeatures(): ReactNode {
- return (
- <section className={styles.features}>
- <div className="container">
- <div className="row">
- {FeatureList.map((props, idx) => (
- <Feature key={idx} {...props} />
- ))}
- </div>
- </div>
- </section>
- );
- }
|