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
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-10 04:11 +0800
1from __future__ import annotations
3from typing import Any
5from lexigram.ui.core.base import Component, el
8class Switch(Component):
9 """
10 A premium toggle switch component implemented using the shared `Toggle` molecule.
11 """
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
37 def render(self) -> Any:
38 from lexigram.ui.molecules.toggle import Toggle
40 # Delegate to Toggle molecule for consistent rendering
41 t = Toggle(name=self.name, checked=self.value, label=self.label, **self.props)
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