컴포넌트
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" — 이미지나 영상 위에 배치하는 배경입니다.
크기
size는 xs와 sm입니다. 기본값은 sm입니다.
모양
shape="pill"은 양 끝을 둥글게, shape="box"는 모서리를 4px로 표시합니다.
속성
이 프로젝트에서 추가하거나 제한한 속성입니다.
Badge
속성
타입
구현 코드
components/ui/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
.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);
}