{% from "nhsuk/macros/attributes.njk" import nhsukAttributes %}
{% from "nhsuk/macros/content.njk" import nhsukContent %}
{% from "nhsuk/macros/slot.njk" import nhsukSlot %}

{#- Set classes for this component #}
{%- set classNames = "nhsuk-u-visually-hidden" %}

{#- Support params as defined value #}
{%- set params = params if params is mapping and params is not escaped else {
  text: params if params is defined and params is not escaped else undefined,
  html: params if params is escaped else undefined
} %}

{%- if params.classes %}
  {%- set classNames = classNames ~ " " ~ params.classes %}
{%- endif %}

{#- Determine type of element to use, if not explicitly set #}
{%- if params.element %}
  {%- set element = params.element | lower %}
{%- else %}
  {%- set element = "span" %}
{%- endif %}

{%- set visuallyHiddenHtml = caller() if caller else params.html %}
{%- set visuallyHiddenText = nhsukContent({ text: params.text }) if
  params.text is not sameas(true) and
  params.text is not sameas(false)
  else undefined %}

{{- nhsukSlot("before", params) -}}

{% if visuallyHiddenHtml or visuallyHiddenText | length %}
<{{ element }} class="{{ classNames }}" {%- if params.id %} id="{{ params.id }}"{% endif %}
  {{- nhsukAttributes(params.attributes) }}>
  {{- nhsukSlot("start", params) -}}

  {% if visuallyHiddenHtml %}
    {{- visuallyHiddenHtml | safe -}}
  {% else %}
    {{- visuallyHiddenText -}}
  {% endif %}

  {{- nhsukSlot("end", params) -}}
</{{ element }}>
{%- endif %}

{{- nhsukSlot("after", params) -}}
{{- "\n" | safe -}}
