index.tsx 793 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import clsx from "clsx";
  2. import type { ComponentProps, ReactNode } from "react";
  3. import styles from "./index.module.scss";
  4. export const VARIANTS = [
  5. "neutral",
  6. "info",
  7. "warning",
  8. "error",
  9. "data",
  10. "success",
  11. ] as const;
  12. type Props = ComponentProps<"div"> & {
  13. icon: ReactNode;
  14. header: ReactNode;
  15. variant?: (typeof VARIANTS)[number] | undefined;
  16. };
  17. export const InfoBox = ({
  18. icon,
  19. header,
  20. children,
  21. className,
  22. variant = "info",
  23. ...props
  24. }: Props) => (
  25. <div
  26. className={clsx(className, styles.infoBox)}
  27. data-variant={variant}
  28. {...props}
  29. >
  30. <div className={styles.icon}>{icon}</div>
  31. <div className={styles.body}>
  32. <h3 className={styles.header}>{header}</h3>
  33. <div className={styles.contents}>{children}</div>
  34. </div>
  35. </div>
  36. );