diff --git a/src/layouts/components/alx-nav.webc b/src/layouts/components/alx-nav.webc index 7d8804b..e34088f 100644 --- a/src/layouts/components/alx-nav.webc +++ b/src/layouts/components/alx-nav.webc @@ -80,10 +80,46 @@ ul { } input:checked + .indicator:after { - transform: rotateY(0deg); opacity: 1; } } </style> -<script type="module" webc:scoped></script> +<script type="module" webc:scoped> +customElements.define('alx-nav', class AlxNav extends HTMLElement { + static hoveredNavs = new Set() + static allNavs = [] + #prechecked + + constructor() { + super() + + const navToggle = this.querySelector('input[type="radio"]') + this.#prechecked = navToggle.checked + + AlxNav.allNavs.push(this) + + this.addEventListener('mouseenter', () => { + if (!this.classList.contains('hidden')) { + navToggle.checked = true + AlxNav.hoveredNavs.add(this) + } + }) + + this.addEventListener('mouseleave', () => { + console.log('leave') + AlxNav.hoveredNavs.delete(this) + if (!AlxNav.hoveredNavs.size) { + AlxNav.allNavs.forEach(n => n.setDefaultState()) + } else { + navToggle.checked = false + } + }) + } + + setDefaultState() { + const navToggle = this.querySelector('input[type="radio"]') + navToggle.checked = this.#prechecked + } +}) +</script>