{% macro textbox(
  field,
  label=None,
  hint=False,
  highlight_tags=False,
  autofocus=False,
  colour_preview=False,
  help_link=None,
  help_link_text=None,
  width='2-3',
  suffix=None,
  safe_error_message=False,
  rows=8
) %}
  <div
    class="form-group{% if field.errors %} form-group-error{% endif %}"
    data-module="{% if autofocus %}autofocus{% elif colour_preview %}colour-preview{% endif %}"
  >
    <label class="form-label" for="{{ field.name }}">
      {% if label %}
        {{ label }}
      {% else %}
        {{ field.label.text }}
      {% endif %}
      {% if hint %}
        <span class="form-hint">
          {{ hint }}
        </span>
      {% endif %}
      {% if field.errors %}
        <span class="error-message" data-module="track-error" data-error-type="{{ field.errors[0] }}" data-error-label="{{ field.name }}">
          {% if not safe_error_message %}{{ field.errors[0] }}{% else %}{{ field.errors[0]|safe }}{% endif %}
        </span>
      {% endif %}
    </label>
    {%
      if highlight_tags
    %}
      {% set field_class = 'form-control-{} textbox-highlight-textbox'.format(width) %}
    {% else %}
      {% set field_class = 'form-control-{} {}'.format(width, 'textbox-right-aligned' if suffix else '') %}
    {% endif %}
    {%
      set field_class = 'form-control ' + field_class + (
        ' form-control-error' if field.errors else ''
      )
    %}
    {{ field(
      class=field_class,
      data_module='highlight-tags' if highlight_tags else '',
      rows=rows|string,
      **kwargs
    ) }}
    {% if suffix %}
      <span>{{ suffix }}</span>
    {% endif %}
    {% if help_link and help_link_text %}
      <p class="textbox-help-link">
        <a href='{{ help_link }}'>{{ help_link_text }}</a>
      </p>
    {% endif %}
  </div>
{% endmacro %}
