feat: add the admin layout shell

This commit is contained in:
fromme committed 2026-09-13 14:31:40 +02:00
1 parent da8af9ff08
commit ad5c93049c
21 files changed
+441 -15

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
{# Flat inline alerts for now. myep renders these as Toastify toasts, but that means adopting
toastify-js as a dependency -- deferred until the toast/OOB work (plan step 7). #}
{% set levels = { error: 'bg-red-600', warning: 'bg-red-600', success: 'bg-emerald-600', info: 'bg-primary' } %}
{% for level, messages in app.flashes(levels|keys) %}
<div class="fixed bottom-4 right-4 z-50 space-y-2">
{% for message in messages %}
<div class="{{ levels[level] }} text-gray-100 rounded shadow-lg px-4 py-3 text-sm">
{{ message|trans }}
</div>
{% endfor %}
</div>
{% endfor %}
+25
View File
@@ -0,0 +1,25 @@
{# Plain nav instead of myep's knp-menu builder: a handful of links does not justify the
indirection. Active state is a prefix match on the current route name, which mirrors what
myep's menu matcher does with its 'routes' extras. #}
{% set current_route = app.request.attributes.get('_route') %}
{% set items = [
{ route: 'app_dashboard', label: 'Übersicht', icon: 'lucide:layout-grid' },
{ route: 'app_booking', label: 'Meine Buchungen', icon: 'lucide:calendar-days' },
] %}
<div class="min-h-full flex grow flex-col gap-y-5 lg:border-r border-gray-200 bg-white md:pr-6">
<nav class="flex flex-1 flex-col">
<ul role="list" class="space-y-1">
{% for item in items %}
{% set is_active = current_route starts with item.route %}
<li>
<a href="{{ path(item.route) }}"
class="group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold {{ is_active ? 'bg-gray-100 text-gray-900' : 'text-gray-700 hover:bg-gray-50' }}">
{{ ux_icon(item.icon, { class: 'h-5 w-5 shrink-0 ' ~ (is_active ? 'text-gray-600' : 'text-gray-400') }) }}
<span class="flex-1">{{ item.label }}</span>
</a>
</li>
{% endfor %}
</ul>
</nav>
</div>