File size: 2,687 Bytes
e34da73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class CustomHeader extends HTMLElement {
    connectedCallback() {
        this.attachShadow({ mode: 'open' });
        this.shadowRoot.innerHTML = `
            <style>
                :host {
                    display: block;
                    width: 100%;
                }
                
                header {
                    background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(5, 150, 105, 0.2) 100%);
                    backdrop-filter: blur(10px);
                }
                
                .theme-toggle {
                    transition: all 0.3s ease;
                }
                
                .theme-toggle:hover {
                    transform: rotate(30deg);
                }
                
                @media (max-width: 640px) {
                    .logo-text {
                        display: none;
                    }
                }
            </style>
            <header class="py-4 px-6 border-b border-emerald-200 dark:border-gray-700">
                <div class="container mx-auto flex justify-between items-center">
                    <a href="/" class="flex items-center gap-2">
                        <i data-feather="leaf" class="text-emerald-600 dark:text-emerald-400"></i>
                        <span class="logo-text text-xl font-bold text-emerald-800 dark:text-emerald-200">Algorithmic ARboretum</span>
                    </a>
                    
                    <div class="flex items-center gap-4">
                        <button class="theme-toggle p-2 rounded-full bg-emerald-100 dark:bg-gray-700 text-emerald-600 dark:text-emerald-300">
                            <i data-feather="moon" class="dark:hidden"></i>
                            <i data-feather="sun" class="hidden dark:block"></i>
                        </button>
                    </div>
                </div>
            </header>
        `;
        
        // Theme toggle functionality
        const toggleBtn = this.shadowRoot.querySelector('.theme-toggle');
        toggleBtn.addEventListener('click', () => {
            document.documentElement.classList.toggle('dark');
            localStorage.setItem('theme', document.documentElement.classList.contains('dark') ? 'dark' : 'light');
            feather.replace();
        });
        
        // Check for saved theme preference
        if (localStorage.getItem('theme') === 'dark' || (!localStorage.getItem('theme') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
            document.documentElement.classList.add('dark');
        }
        
        feather.replace();
    }
}

customElements.define('custom-header', CustomHeader);