Coverage for src / lexigram / ui / atoms / switch.py: 100%

19 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 

4 

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

6 

7 

8class Switch(Component): 

9 """ 

10 A premium toggle switch component implemented using the shared `Toggle` molecule. 

11 """ 

12 

13 def __init__( 

14 self, 

15 label: str, 

16 name: str, 

17 value: bool = False, 

18 description: str | None = None, 

19 error: str | None = None, 

20 **props, 

21 ) -> None: 

22 super().__init__( 

23 label=label, 

24 name=name, 

25 value=value, 

26 description=description, 

27 error=error, 

28 **props, 

29 ) 

30 self.label = label 

31 self.name = name 

32 self.value = value 

33 self.description = description 

34 self.error = error 

35 self.props = props 

36 

37 def render(self) -> Any: 

38 from lexigram.ui.molecules.toggle import Toggle 

39 

40 # Delegate to Toggle molecule for consistent rendering 

41 t = Toggle(name=self.name, checked=self.value, label=self.label, **self.props) 

42 

43 # Append error node if present 

44 base = t.render() 

45 if self.error: 

46 return el( 

47 "div", 

48 base, 

49 el("p", self.error, class_="mt-2 text-sm text-destructive", role="alert"), 

50 class_="mb-4", 

51 ) 

52 return base