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

1from __future__ import annotations 

2 

3from typing import Any, Literal 

4 

5from lexigram.ui.core.base import Component, el 

6from lexigram.ui.styles import get_semantic_classes 

7 

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] 

25 

26 

27class Badge(Component): 

28 """Badge component for status indicators.""" 

29 

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 

34 

35 def render(self) -> Any: 

36 variant_cls = get_semantic_classes(self.variant) 

37 

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 )