Coverage for src / lexigram / ui / atoms / inputs / date.py: 41%

17 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.atoms.inputs.base import AbstractInput 

6from lexigram.ui.core.base import el 

7 

8 

9class DateInput(AbstractInput): 

10 """Date input with label and error support.""" 

11 

12 def __init__( 

13 self, 

14 name: str, 

15 min_value: str | None = None, 

16 max_value: str | None = None, 

17 input_type: str = "date", 

18 **kwargs, 

19 ) -> None: 

20 super().__init__(name=name, **kwargs) 

21 self.type = input_type 

22 self.min = min_value 

23 self.max = max_value 

24 

25 def _render_input(self) -> Any: 

26 attrs = { 

27 "type": self.type, 

28 "name": self.name, 

29 "id": self.input_id, 

30 "value": str(self.value) if self.value is not None else "", 

31 "disabled": self.disabled, 

32 "required": self.required, 

33 "readonly": self.readonly, 

34 "class_": self._get_input_classes("pl-3 pr-3"), 

35 "aria-invalid": "true" if self.error else None, 

36 "aria-describedby": f"{self.name}-error" if self.error else None, 

37 "aria-required": "true" if self.required else None, 

38 } 

39 

40 if self.min: 

41 attrs["min"] = self.min 

42 if self.max: 

43 attrs["max"] = self.max 

44 

45 return el( 

46 "input", 

47 **attrs, 

48 **self._get_extra_props(exclude=["min", "max", "type"]), 

49 )