# Source code for wtforms.widgets.html5

    """
    Widgets for various HTML5 input types.
    """

    from .core import Input

    __all__ = (
        'ColorInput', 'DateInput', 'DateTimeInput', 'DateTimeLocalInput',
        'EmailInput', 'MonthInput', 'NumberInput', 'RangeInput', 'SearchInput',
        'TelInput', 'TimeInput', 'URLInput', 'WeekInput',
    )

    class SearchInput(Input):
        """
        Renders an input with type "search".
        """
        input_type = 'search'

    class TelInput(Input):
        """
        Renders an input with type "tel".
        """
        input_type = 'tel'

    class URLInput(Input):
        """
        Renders an input with type "url".
        """
        input_type = 'url'

    class EmailInput(Input):
        """
        Renders an input with type "email".
        """
        input_type = 'email'

    class DateTimeInput(Input):
        """
        Renders an input with type "datetime".
        """
        input_type = 'datetime'

    class DateInput(Input):
        """
        Renders an input with type "date".
        """
        input_type = 'date'

    class MonthInput(Input):
        """
        Renders an input with type "month".
        """
        input_type = 'month'

    class WeekInput(Input):
        """
        Renders an input with type "week".
        """
        input_type = 'week'

    class TimeInput(Input):
        """
        Renders an input with type "time".
        """
        input_type = 'time'

    class DateTimeLocalInput(Input):
        """
        Renders an input with type "datetime-local".
        """
        input_type = 'datetime-local'

    class NumberInput(Input):
        """
        Renders an input with type "number".
        """
        input_type = 'number'

        def __init__(self, step=None, min=None, max=None):
            self.step = step
            self.min = min
            self.max = max

        def __call__(self, field, **kwargs):
            if self.step is not None:
                kwargs.setdefault('step', self.step)
            if self.min is not None:
                kwargs.setdefault('min', self.min)
            if self.max is not None:
                kwargs.setdefault('max', self.max)
            return super(NumberInput, self).__call__(field, **kwargs)

    class RangeInput(Input):
        """
        Renders an input with type "range".
        """
        input_type = 'range'

        def __init__(self, step=None):
            self.step = step

        def __call__(self, field, **kwargs):
            if self.step is not None:
                kwargs.setdefault('step', self.step)
            return super(RangeInput, self).__call__(field, **kwargs)

    class ColorInput(Input):
        """
        Renders an input with type "color".
        """
        input_type = 'color'