Coverage for src / lexigram / ui / atoms / badge.py: 100%
13 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-10 04:11 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-10 04:11 +0800
1from __future__ import annotations
3from typing import Any, Literal
5from lexigram.ui.core.base import Component, el
6from lexigram.ui.styles import get_semantic_classes
8BadgeVariant = Literal[
9 "default",
10 "gray",
11 "primary",
12 "success",
13 "warning",
14 "danger",
15 "info",
16 "red",
17 "yellow",
18 "green",
19 "blue",
20 "indigo",
21 "purple",
22 "pink",
23 "orange",
24]
27class Badge(Component):
28 """Badge component for status indicators."""
30 def __init__(self, text: str, variant: BadgeVariant = "default", **props) -> None:
31 super().__init__(text=text, variant=variant, **props)
32 self.text = text
33 self.variant = variant
35 def render(self) -> Any:
36 variant_cls = get_semantic_classes(self.variant)
38 return el(
39 "span",
40 self.text,
41 role="status",
42 class_=f"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium {variant_cls}",
43 )