def field(title, _type, style, validation=None, **data):
    """
    A single field in a form. Please see 'form'.
    :param title: A title of the form.
    :param _type: Kind of the field.

        'text' - single text input
        'switch' - an on-off button
        'date' - date selection
        'kv' - key/value edit. requires additional argument 'values' to display keys to the user.
        'notice' - read-only notice
        'readonly' - read-only text input
        'file' - file selection (base-64 encoded contents will be passed as an argument)
        'json' - raw JSON edit
        'dorn' - tempated edit (see https://github.com/jdorn/json-editor/)
        'select' - selection. requires additional afrument 'values' to display options titles
        'hidden' - hidden field
        'tags' - tags edit [abc] [other_tag] [etc]

    :param style: Style of the field (if applicable): primary|danger|info|warning|success
    :param validation: (optional) field validation

        'non-empty' - field must be set
        'number' - must be a number

    :param data: Additional data may be required for fields.

        'order' - since 'field' is used in a dict, using such argument may be possible to order fields.
    """
    result = {
        "title": title,
        "type": _type,
        "style": style,
        "validation": validation
    }
    result.update(data)
    return result