navbar.html 151 lignes · 7737 octets
<!-- Navbar Component for Feature 007 -->
<!-- Uses DaisyUI navbar classes -->

<nav class="navbar bg-base-200 border-b border-base-300 shadow-sm">
    <div class="container mx-auto px-4">
        <div class="navbar-start">
            <!-- Logo -->
            <a href="/home" class="btn btn-ghost normal-case text-xl">
                <img src="/static/images/logo.svg" alt="{{ app_name }}" class="h-8 w-8 mr-2">
                <span class="text-primary font-bold">{{ app_name }}</span>
            </a>
        </div>
        
        <!-- Desktop Navigation (centered) -->
        <div class="navbar-center hidden md:flex">
            {% include "components/navigation.html" %}
        </div>
        
        <!-- User Menu (right) -->
        <div class="navbar-end">
            <!-- Language Selector (Feature 014) -->
            <div class="hidden md:block mr-2">
                <div class="dropdown dropdown-end">
                    <label tabindex="0" class="btn btn-ghost btn-sm gap-2">
                        <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129" />
                        </svg>
                        <span id="navbar-lang-display">FR</span>
                        <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
                        </svg>
                    </label>
                    <ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-[1] w-52 p-2 shadow">
                        <li>
                            <a href="#" onclick="return window.changeLanguage('fr');" id="lang-fr">
                                🇫🇷 Français
                            </a>
                        </li>
                        <li>
                            <a href="#" onclick="return window.changeLanguage('en');" id="lang-en">
                                🇬🇧 English
                            </a>
                        </li>
                        <li>
                            <a href="#" onclick="return window.changeLanguage('de');" id="lang-de">
                                🇩🇪 Deutsch
                            </a>
                        </li>
                        <li>
                            <a href="#" onclick="return window.changeLanguage('es');" id="lang-es">
                                🇪🇸 Español
                            </a>
                        </li>
                    </ul>
                </div>
            </div>
            
            <!-- Desktop User Menu -->
            <div class="hidden md:block">
                {% include "components/user_menu.html" %}
            </div>
            
            <!-- Mobile Menu Button -->
            <div class="md:hidden" x-data="{ mobileMenuOpen: false }">
                <button @click="mobileMenuOpen = !mobileMenuOpen" 
                        class="btn btn-ghost btn-circle">
                    <svg class="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                        <path x-show="!mobileMenuOpen" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
                        <path x-show="mobileMenuOpen" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
                    </svg>
                </button>
                
                <!-- Mobile Menu Dropdown -->
                <div x-show="mobileMenuOpen" 
                     @click.away="mobileMenuOpen = false"
                     x-transition:enter="transition ease-out duration-200"
                     x-transition:enter-start="opacity-0 scale-95"
                     x-transition:enter-end="opacity-100 scale-100"
                     x-transition:leave="transition ease-in duration-150"
                     x-transition:leave-start="opacity-100 scale-100"
                     x-transition:leave-end="opacity-0 scale-95"
                     class="absolute top-16 right-4 mt-2 w-64 bg-base-100 rounded-lg shadow-lg border border-base-300 py-2 z-50">
                    <!-- Mobile Navigation -->
                    <div class="px-4 py-2">
                        {% include "components/navigation.html" %}
                    </div>
                    <!-- Mobile Language Selector -->
                    <div class="border-t border-base-300 mt-2 pt-2 px-4">
                        <div class="dropdown dropdown-top">
                            <label tabindex="0" class="btn btn-ghost btn-sm w-full justify-between">
                                <span class="flex items-center gap-2">
                                    <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129" />
                                    </svg>
                                    <span id="navbar-lang-display-mobile">FR</span>
                                </span>
                                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
                                </svg>
                            </label>
                            <ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-[1] w-full p-2 shadow">
                                <li>
                                    <a href="#" onclick="return window.changeLanguage('fr');" id="lang-fr-mobile">
                                        🇫🇷 Français
                                    </a>
                                </li>
                                <li>
                                    <a href="#" onclick="return window.changeLanguage('en');" id="lang-en-mobile">
                                        🇬🇧 English
                                    </a>
                                </li>
                                <li>
                                    <a href="#" onclick="return window.changeLanguage('de');" id="lang-de-mobile">
                                        🇩🇪 Deutsch
                                    </a>
                                </li>
                                <li>
                                    <a href="#" onclick="return window.changeLanguage('es');" id="lang-es-mobile">
                                        🇪🇸 Español
                                    </a>
                                </li>
                            </ul>
                        </div>
                    </div>
                    
                    <!-- Mobile User Info -->
                    <div class="border-t border-base-300 mt-2 pt-2">
                        <ul class="menu menu-vertical w-full">
                            {% include "fragments/user_menu_dropdown.html" %}
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>
</nav>