@@ -33,10 +33,10 @@ class Input(Generic[_InputType], AbstractElement):
3333 """
3434
3535 __slots__ = (
36+ "_type" ,
3637 "_value" ,
3738 "_cast" ,
3839 "_display_value" ,
39- "_label" ,
4040 "_ignore_empty" ,
4141 "_events" ,
4242 "_attributes" ,
@@ -48,26 +48,23 @@ def __init__(
4848 value : _InputType = "" , # type: ignore
4949 attributes : Optional [Dict [str , Any ]] = None ,
5050 cast : Callable [[str ], _InputType ] = _pass_through ,
51- label : Optional [str ] = None ,
5251 ignore_empty : bool = True ,
5352 ) -> None :
5453 super ().__init__ ()
54+ self ._type = type
5555 self ._value = value
5656 self ._display_value = str (value )
5757 self ._cast = cast
58- self ._label = label
5958 self ._ignore_empty = ignore_empty
6059 self ._events = Events ()
6160 self ._attributes = attributes or {}
62- self ._attributes ["type" ] = type
6361 self_ref = ref (self )
6462
6563 @self ._events .on ("change" )
6664 async def on_change (event : Dict [str , Any ]) -> None :
6765 self_deref = self_ref ()
6866 if self_deref is not None :
69- value = self_deref ._cast (event ["value" ])
70- self_deref .update (value )
67+ self_deref ._set_str_value (event ["value" ])
7168
7269 @property
7370 def value (self ) -> _InputType :
@@ -86,22 +83,27 @@ def attributes(self) -> Dict[str, Any]:
8683 def update (self , value : _InputType ) -> None :
8784 """Update the current value of the input."""
8885 self ._set_value (value )
89- super ().update ()
9086
9187 async def render (self ) -> VdomDict :
9288 input_element = html .input (
93- self .attributes , {"value" : self ._display_value }, event_handlers = self .events ,
89+ self .attributes ,
90+ {"type" : self ._type , "value" : self ._display_value },
91+ event_handlers = self .events ,
9492 )
95- if self ._label is not None :
96- return html .label ([self ._label , input_element ])
97- else :
98- return input_element
93+ return input_element
94+
95+ def _set_str_value (self , value : str ) -> None :
96+ self ._display_value = value
97+ super ().update ()
98+ print (value )
99+ if not value and self ._ignore_empty :
100+ return
101+ self ._value = self ._cast (value )
99102
100103 def _set_value (self , value : _InputType ) -> None :
101104 self ._display_value = str (value )
102- if self ._ignore_empty and not value :
103- return
104105 self ._value = value
106+ super ().update ()
105107
106- def __repr__ (self ) -> str :
108+ def __repr__ (self ) -> str : # pragma: no cover
107109 return f"{ type (self ).__name__ } ({ self .value !r} )"
0 commit comments