summaryrefslogtreecommitdiffhomepage
path: root/client/web/src/ui/card.tsx
blob: 7d3c9b89e8202e458e05a7ffd9c2ff3da581391e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause

import cx from "classnames"
import React from "react"

type Props = {
  children: React.ReactNode
  className?: string
  elevated?: boolean
  empty?: boolean
  noPadding?: boolean
}

/**
 * Card is a box with a border, rounded corners, and some padding. Use it to
 * group content into a single container and give it more importance. The
 * elevation prop gives it a box shadow, while the empty prop a light gray
 * background color.
 *
 *     <Card>{content}</Card>
 *     <Card elevated>{content}</Card>
 *     <Card empty><EmptyState description="You don't have any keys" /></Card>
 *
 */
export default function Card(props: Props) {
  const { children, className, elevated, empty, noPadding } = props
  return (
    <div
      className={cx("rounded-md border", className, {
        "shadow-soft": elevated,
        "bg-gray-0": empty,
        "bg-white": !empty,
        "p-6": !noPadding,
      })}
    >
      {children}
    </div>
  )
}