Card.jsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { h } from 'preact';
  2. import Button from './Button';
  3. import Heading from './Heading';
  4. export default function Box({
  5. buttons = [],
  6. className = '',
  7. content,
  8. elevated = true,
  9. header,
  10. href,
  11. icons,
  12. media = null,
  13. subheader,
  14. supportingText,
  15. ...props
  16. }) {
  17. const Element = href ? 'a' : 'div';
  18. const typeClasses = elevated ? 'shadow-md hover:shadow-lg transition-shadow' : 'border border-gray-200';
  19. return (
  20. <div className={`bg-white dark:bg-gray-800 rounded-lg overflow-hidden ${typeClasses} ${className}`}>
  21. {media || header ? (
  22. <Element href={href} {...props}>
  23. {media}
  24. <div class="p-4 pb-2">{header ? <Heading size="base">{header}</Heading> : null}</div>
  25. </Element>
  26. ) : null}
  27. {buttons.length || content ? (
  28. <div class="pl-4 pb-2">
  29. {content || null}
  30. {buttons.length ? (
  31. <div class="flex space-x-4 -ml-2">
  32. {buttons.map(({ name, href }) => (
  33. <Button key={name} href={href} type="text">
  34. {name}
  35. </Button>
  36. ))}
  37. </div>
  38. ) : null}
  39. </div>
  40. ) : null}
  41. </div>
  42. );
  43. }