{% macro field(settings) %}
    {% set settings = settings|default({}) %}

    {% set id = settings.id|default(false) %}
    {% set label = settings.label|default(false) %}
    {% set instructions = settings.instructions|default(false) %}
    {% set required = settings.required|default(false) %}
    {% set locale = settings.locale|default(false) %}
    {% set input = settings.input|default('') %}
    {% set warning = settings.warning|default(false) %}
    {% set errors = settings.errors|default(false) %}

    <div class="field">
        {% if label or instructions %}
            {% if label %}
                <div class="heading">
                    <label{% if required %} class="required"{% endif %}{% if id %} for="{{ id }}"{% endif %}>
                        {{ label|raw }}
                        {% if locale %}
                            <span class="locale">{{ locale }}</span>
                        {% endif %}
                    </label>
                </div>
            {% endif %}
            {% if instructions %}
                <div class="instructions">{{ instructions|raw }}</div>
            {% endif %}
        {% endif %}
        <div class="input {{ orientation }}{% if errors %} errors{% endif %}">
            {{ input|raw }}
        </div>
        {% if warning %}
            <p class="warning">{{ warning }}</p>
        {% endif %}
        {% if errors %}
            <ul class="errors">
                {% for error in errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}
    </div>
{% endmacro %}

{% macro input(settings) %}
    {% from _self import field %}
    {% set settings = settings|default({}) %}

    {% set type = settings.type|default('text') %}
    {% set attributes = settings.attributes|default({}) %}
    {% set id = settings.id|default('') %}
    {% set name = settings.name|default('') %}
    {% set value = settings.value|default('') %}
    {% set class = settings.class|default('') %}
    {% set fullWidth = settings.fullWidth|default(true) %}

    {% set input %}
        <input class="text {{ fullWidth ? 'fullwidth' : '' }} {{ class }}"
               type="{{ type }}"
               id="{{ id }}"
               name="{{ name }}"
               value="{{ value }}"
               {% for attrName, attrValue in attributes %}
                   {{ attrName }}="{{ attrValue }}"
               {% endfor %}
               autocomplete="off">
    {% endset %}

    {{ field(settings|merge({input: input})) }}
{% endmacro %}

{% macro lightswitch(settings) %}
    {% from _self import field %}
    {% set settings = settings|default({}) %}

    {% set attributes = settings.attributes|default({}) %}
    {% set name = settings.name|default('') %}
    {% set checked = settings.checked|default(false) %}

    {% set input %}
        <div class="lightswitch {{ checked ? 'on' : '' }}" tabindex="0"
             {% for attrName, attrValue in attributes %}
                 {{ attrName }}="{{ attrValue }}"
             {% endfor %}>
            <div class="lightswitch-container">
                <div class="label on"></div>
                <div class="handle"></div>
                <div class="label off"></div>
            </div>
            <input type="hidden" name="{{ name }}" value="{{ checked ? '1' : '' }}">
        </div>
    {% endset %}

    {{ field(settings|merge({input: input})) }}
{% endmacro %}
