{% macro file_upload(field, button_text="Choose file", alternate_link=None, alternate_link_text=None) %}
  <form method="post" enctype="multipart/form-data" class="{% if field.errors %}error{% endif %}" data-module="file-upload">
    <label class="file-upload-label" for="{{ field.name }}">
      <span class="visually-hidden">{{ field.label.text }}</span>
      {% if hint %}
        <span class="form-hint">
          {{ hint }}
        </span>
      {% endif %}
      {% if field.errors %}
        <span class="error-message">
          {{ field.errors[0] }}
        </span>
      {% endif %}
    </label>
    {{ field(**{
      'class': 'file-upload-field'
    }) }}
    <label class="file-upload-button" for="{{ field.name }}">
      {{ button_text }}
    </label>
    {% if alternate_link and alternate_link_text %}
      <span class="file-upload-alternate-link">
        or <a href="{{ alternate_link }}">{{ alternate_link_text }}</a>
      </span>
    {% endif %}
    <label class="file-upload-filename" for="{{ field.name }}"></label>
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    <input type="submit" class="file-upload-submit" value="Submit" />
  </form>
{% endmacro %}
