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
« 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.atoms.inputs.base import AbstractInput
6from lexigram.ui.core.base import el
9class DateInput(AbstractInput):
10 """Date input with label and error support."""
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
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 }
40 if self.min:
41 attrs["min"] = self.min
42 if self.max:
43 attrs["max"] = self.max
45 return el(
46 "input",
47 **attrs,
48 **self._get_extra_props(exclude=["min", "max", "type"]),
49 )