{% macro onsList(params) %}
    {% set variants = params.variants if params.variants %}
    {% set listLength = params.itemsList | length %}

    {% if params.itemsList[0].prefix %}
        {% set otherClasses = 'ons-list--prefix' %}
    {% elif params.itemsList[0].suffix %}
        {% set otherClasses = 'ons-list--suffix' %}
    {% elif params.iconPosition %}
        {% set otherClasses = 'ons-list--icons' %}
        {% set iconType = params.iconType if params.iconType %}
    {% else %}
        {% set otherClasses = '' %}
    {% endif %}

    {% if params.element and listLength > 1 %}
        {% set listEl = params.element | lower %}
    {% elif (params.element == 'ol') and listLength < 2 %}
        {% set listEl = 'div' %}
    {% else %}
        {% set listEl = 'ul' %}
    {% endif %}
    {% set openingTag = "<" + listEl %}
    {% set closingTag = "</" + listEl + ">" %}

    {{ openingTag | safe }}{% if params.id %}{{ ' ' }}id="{{ params.id }}"{% endif %}
    class="ons-list{{ ' ons-list--p' if listEl == 'div' }}{{ ' ' + params.classes if params.classes else '' }}{% if params.variants %}{% if params.variants is not string %}{% for variant in variants %}{{ ' ' }}ons-list--{{ variant }}{% endfor %}{% else %}{{ ' ' }}ons-list--{{ variants }}{% endif %}{% endif %}{{ ' ' + otherClasses if otherClasses else '' }}"{% if params.attributes %}{% if params.attributes %}{% for attribute, value in (params.attributes.items() if params.attributes is mapping and params.attributes.items else params.attributes) %}{{ ' ' }}{{ attribute }}{% if value %}="{{ value }}"{% endif %}{% endfor %}{% endif %}{% endif %}>
    {%- for item in params.itemsList -%}
        {% set sublistClasses = item.listClasses if item.listClasses %}
        {%
            set sublistParams = {
                'variants': variants,
                'itemsList': item.itemsList,
                'classes': sublistClasses
            }
        %}
        {% set listItem %}
        {% set itemText = item.text %}
            {% if item.text %}
                {% set itemIconType = item.iconType if item.iconType else iconType %}
            {% endif %}

            {# For Craft support we also support title and navigation title #}
            {% if item.navigationTitle %}
                {% set itemText = item.navigationTitle %}
            {% elif item.title %}
                {% set itemText = item.title %}
            {% endif %}

            {%- if item.prefix or (params.iconPosition == 'before') -%}
                <span
                    class="ons-list__prefix{{ ' ons-list__prefix--icon-check' if params.variants == 'summary' and itemIconType == 'check' }}"
                    {% if listEl != 'ol' %}aria-hidden="true"{% endif %}
                >
                    {%- if item.prefix -%}
                        {{- item.prefix -}}.
                    {% elif params.iconPosition == 'before' %}
                        {% from "components/icon/_macro.njk" import onsIcon %}
                        {{-
                            onsIcon({
                                "iconType": itemIconType,
                                "iconSize": params.iconSize
                            })
                        -}}
                    {%- endif -%}
                </span>
            {%- endif -%}
            {%- if item.url and item.current != true -%}
                {%- if item.external -%}
                    {% from "components/external-link/_macro.njk" import onsExternalLink %}
                    {{
                        onsExternalLink({
                            "url": item.url,
                            "text": itemText
                        })
                    }}
                {%- else -%}
                    <a
                        href="{{ item.url }}"
                        class="ons-list__link{{ ' ons-js-inpagelink' if item.variants == 'inPageLink' }}{{ ' ' + item.classes if item.classes else '' }}"
                        {% if item.target %}target="{{ item.target }}"{% endif %}
                        {% if item.download %}download="{{ item.download}}"{% endif %}
                    >
                        {%- if item.prefix -%}<span class="ons-u-vh">{{- item.prefix -}}</span>{%- endif -%} {{- itemText | safe -}}
                        {%- if item.target == "_blank" -%}
                            <span class="ons-u-vh"> ({{- item.screenreaderMessage | default("opens in a new tab") -}})</span>
                        {%- endif -%}
                    </a>
                {%- endif -%}
            {%- else -%}
                {{- itemText | safe -}}
            {%- endif -%}
            {%- if item.suffix or (params.iconPosition == 'after') -%}
                <span
                    class="ons-list__suffix{{ ' ons-list__suffix--icon-check' if params.variants == 'summary' and itemIconType == 'check' }}"
                    {% if listEl != 'ol' %}aria-hidden="true"{% endif %}
                >
                    {%- if item.suffix -%}
                        {{- item.suffix -}}
                    {%- elif (item.index and listEl != 'ol') or (item.index and listEl == 'ol' and 'bare' in variants) -%}
                        {{- loop.index -}}
                    {% elif params.iconPosition == 'after' %}
                        {% from "components/icon/_macro.njk" import onsIcon %}
                        {{-
                            onsIcon({
                                "iconType": itemIconType,
                                "iconSize": params.iconSize
                            })
                        -}}
                    {%- endif -%}</span
                >
            {%- endif -%}
            {% if item.itemsList %}
                {# Handle nested lists with recursive call for sub layer #}
                {{ onsList(sublistParams) }}
            {% endif %}
        {% endset %}

        {% if listLength > 1 or listEl == 'ul' %}
            {% set listItemEl = 'li' %}
        {% else %}
            {% set listItemEl = 'p' %}
        {% endif %}
        {% set openingItemTag = "<" + listItemEl %}
        {% set closingItemTag = "</" + listItemEl + ">" %}

        {{ openingItemTag | safe }}
        class="ons-list__item{{ ' ' + item.listClasses if item.listClasses else '' }}" {% if item.current %}aria-current="true"{% endif %}
        {% if item.attributes %}{% for attribute, value in (item.attributes.items() if item.attributes is mapping and item.attributes.items else item.attributes) %}{{ ' ' }}{{ attribute }}{% if value %}="{{ value }}"{% endif %}{% endfor %}{% endif %}
        > {{- listItem | safe -}}
        {{ closingItemTag | safe }}
    {%- endfor -%}
    {{ closingTag | safe }}
{% endmacro %}
