컴포넌트

Badge

상태나 개수를 표시합니다.

설치

pnpm dlx ply-ui add badge

공통 설치 설정을 먼저 적용합니다.

사용법

짧은 상태나 개수를 표시합니다. Badge는 span 요소이며 클릭 동작이나 선택 상태를 관리하지 않습니다.

Standard

variant="standard" — 기본 중립 색상입니다.

Contrast

variant="contrast" — 명암 대비가 큰 배경입니다.

Emphasis

variant="emphasis" — 강조 색상의 배경입니다.

Success

variant="success" — 성공 상태의 배경입니다.

Warning

variant="warning" — 주의 상태의 배경입니다.

Alert

variant="alert" — 오류 상태의 배경입니다.

Over media

variant="over-media" — 이미지나 영상 위에 배치하는 배경입니다.

크기

sizexssm입니다. 기본값은 sm입니다.

모양

shape="pill"은 양 끝을 둥글게, shape="box"는 모서리를 4px로 표시합니다.

속성

이 프로젝트에서 추가하거나 제한한 속성입니다.

Badge

속성

타입

구현 코드

components/ui/badge.tsx
badge.tsx
import type { ComponentProps } from "react";
import { cx } from "../../lib/cx";
import "./badge.css";
export type BadgeProps = ComponentProps<"span"> & {
  size?: "xs" | "sm";
  variant?:
    | "standard"
    | "contrast"
    | "emphasis"
    | "success"
    | "warning"
    | "alert"
    | "over-media";
  shape?: "pill" | "box";
};
export function Badge({
  size = "sm",
  variant = "standard",
  shape = "pill",
  className,
  ...props
}: BadgeProps) {
  return (
    <span
      {...props}
      data-size={size}
      data-variant={variant}
      data-shape={shape}
      className={cx("rbx-badge", className)}
    />
  );
}
components/ui/badge.css
badge.css
.rbx-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 24px;
  padding: 4px 8px;
  border-radius: 9999px;
  background: var(--rbx-color-shift-200);
  color: var(--rbx-color-content-emphasis);
  font: var(--rbx-typography-label-small-font);
  white-space: nowrap;
}
.rbx-badge[data-size="xs"] {
  height: 16px;
  padding: 0 4px;
  font: var(--rbx-typography-caption-small-font);
}
.rbx-badge[data-shape="box"] {
  border-radius: 4px;
}
.rbx-badge[data-variant="contrast"] {
  background: var(--rbx-color-system-contrast);
  color: var(--rbx-inverse-content-emphasis);
}
.rbx-badge[data-variant="emphasis"] {
  background: var(--rbx-color-system-emphasis);
  color: var(--rbx-dark-mode-content-emphasis);
}
.rbx-badge[data-variant="success"] {
  background: color-mix(
    in srgb,
    var(--rbx-color-system-success) 20%,
    transparent
  );
}
.rbx-badge[data-variant="warning"] {
  background: color-mix(
    in srgb,
    var(--rbx-color-system-warning) 20%,
    transparent
  );
}
.rbx-badge[data-variant="alert"] {
  background: color-mix(
    in srgb,
    var(--rbx-color-system-alert) 20%,
    transparent
  );
}
.rbx-badge[data-variant="over-media"] {
  background: var(--rbx-color-over-media-0);
}

목차