{# src/launchpad/templates/launchpad/generic/cards.html #} {% load i18n %} {% comment %} src/launchpad/templates/launchpad/generic/cards.html Generic Launchpad card renderer. This template is intentionally theme- and framework-agnostic. It provides semantic card markup for displaying resolved Launchpad links without requiring Bootstrap, Tailwind CSS, Phoenix, or another frontend system. Top-level usage: {% include "launchpad/generic/cards.html" with launchpad=navigation only %} The renderer supports: - top-level link nodes - link children contained within sections - icons - descriptions - call-to-action labels - disabled destinations - active state - accessibility metadata Structural separators are intentionally omitted because they do not have a natural card representation. Projects requiring theme-specific layout or responsive balancing should provide their own renderer. {% endcomment %} {% if launchpad and launchpad.exists %}
{% if launchpad.nodes %} {% for node in launchpad.nodes %} {% if node.is_link %}
{% if node.icon.kind != "none" or node.title %}
{% if node.icon.kind != "none" %} {% endif %} {% if node.title %}

{{ node.title }}

{% endif %}
{% endif %} {% if node.description %}

{{ node.description }}

{% endif %} {% if node.enabled and node.url != "#" %} {% else %}
{% if node.disabled_reason %} {{ node.disabled_reason }} {% endif %}
{% endif %}
{% elif node.is_section %} {% for child in node.children %} {% if child.is_link %}
{% if child.icon.kind != "none" or child.title %}
{% if child.icon.kind != "none" %} {% endif %} {% if child.title %}

{{ child.title }}

{% endif %}
{% endif %} {% if child.description %}

{{ child.description }}

{% endif %} {% if child.enabled and child.url != "#" %} {% else %}
{% if child.disabled_reason %} {{ child.disabled_reason }} {% endif %}
{% endif %}
{% endif %} {% endfor %} {% endif %} {% endfor %} {% else %}

{% trans "No navigation items are available." %}

{% endif %}
{% endif %}