Accordion
Aşağıdaki accordion bileşenleri, AetherJS'in durum yönetimi ile oluşturulmuştur. data-aether-ui="accordion-group" kapsayıcısı içinde gruplanan tetikleyiciler ve paneller, otomatik olarak erişilebilirlik (ARIA) standartlarına uygun çalışır.
01 Basit Accordion
Standart bir accordion yapısı. Eğer kapsayıcıda data-aether-allow-multiple niteliği yok ise, bir öğe açıldığında diğeri otomatik kapanır. Varsayılan olarak açık gelmesi istenen öğeye data-aether-default-open eklenebilir.
<!-- Wrapper --> <div class="w-full max-w-lg space-y-4" data-aether-ui="accordion-group"> <!-- Item 1 --> <div class="border border-primary rounded-xl overflow-hidden"> <button class="w-full flex items-center justify-between p-4 bg-primary/20 hover:bg-primary/40 text-secondary hover:text-primary transition-colors group text-left" data-aether-trigger="accordion" data-aether-target="acc-item-1" data-aether-default-open data-aether-active-class="bg-primary/60 text-primary" data-aether-inactive-class="bg-primary/20 text-secondary"> <span class="font-medium">What is AetherUI?</span> <svg class="size-5 transition-transform duration-300 group-aria-expanded:rotate-180 opacity-70" 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> </button> <div id="acc-item-1" class="bg-secondary" data-aether-ui="accordion-panel"> <div class="p-4 text-sm text-secondary leading-relaxed border-t border-primary"> AetherUI is a headless, utility-first interaction controller designed to handle complex UI states without imposing any specific styling. </div> </div> </div> <!-- Item 2 --> <div class="border border-primary rounded-xl overflow-hidden"> <button class="w-full flex items-center justify-between p-4 bg-primary/20 hover:bg-primary/40 text-secondary hover:text-primary transition-colors group text-left" data-aether-trigger="accordion" data-aether-target="acc-item-2" data-aether-active-class="bg-primary/60 text-primary" data-aether-inactive-class="bg-primary/20 text-secondary"> <span class="font-medium">How do I install it?</span> <svg class="size-5 transition-transform duration-300 group-aria-expanded:rotate-180 opacity-70" 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> </button> <div id="acc-item-2" class="bg-secondary" data-aether-ui="accordion-panel"> <div class="p-4 text-sm text-secondary leading-relaxed border-t border-primary"> Simply include the script in your project. It initializes automatically on DOM content loaded for elements with the auto-init attribute. </div> </div> </div> <!-- Item 3 --> <div class="border border-primary rounded-xl overflow-hidden"> <button class="w-full flex items-center justify-between p-4 bg-primary/20 hover:bg-primary/40 text-secondary hover:text-primary transition-colors group text-left" data-aether-trigger="accordion" data-aether-target="acc-item-3" data-aether-active-class="bg-primary/60 text-primary" data-aether-inactive-class="bg-primary/20 text-secondary"> <span class="font-medium">Is it accessible?</span> <svg class="size-5 transition-transform duration-300 group-aria-expanded:rotate-180 opacity-70" 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> </button> <div id="acc-item-3" class="bg-secondary" data-aether-ui="accordion-panel"> <div class="p-4 text-sm text-secondary leading-relaxed border-t border-primary"> Yes! AetherUI automatically manages ARIA attributes like aria-expanded, aria-hidden, and aria-controls for you. </div> </div> </div> </div>
02 Çok Katmanlı (Nested)
Accordion panellerinin içine yeni akordeon grupları ekleyerek çok seviyeli hiyerarşik yapılar (dosya gezgini, kategoriler vb.) oluşturabilirsiniz.
Project Files
<!-- Wrapper --> <div class="w-full max-w-sm bg-primary/20 border border-primary rounded-2xl p-4" data-aether-ui="accordion-group"> <h3 class="text-xs font-bold text-tertiary uppercase tracking-wider mb-3 ml-2">Project Files</h3> <!-- Folder: src --> <div class="mb-1"> <button class="w-full flex items-center gap-2 p-2 rounded-lg text-sm group hover:bg-primary/30 transition-colors" data-aether-trigger="accordion" data-aether-target="folder-src" data-aether-default-open data-aether-active-class="text-primary" data-aether-inactive-class="text-secondary"> <svg class="size-4 text-tertiary transition-transform duration-200 group-aria-expanded:rotate-90" fill="currentColor" viewBox="0 0 20 20"> <path d="M6 6L14 10L6 14V6Z" /> </svg> <svg class="size-5 text-accent opacity-80" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" /> </svg> <span class="font-medium">src</span> </button> <div id="folder-src" class="pl-6 py-1" data-aether-ui="accordion-panel"> <!-- Nested Group: Components --> <div class="border-l border-primary pl-2" data-aether-ui="accordion-group"> <button class="w-full flex items-center gap-2 p-2 rounded-lg text-secondary text-sm group hover:bg-primary/30 transition-colors" data-aether-trigger="accordion" data-aether-target="folder-components" data-aether-active-class="text-primary" data-aether-inactive-class="text-secondary"> <svg class="size-4 text-tertiary transition-transform duration-200 group-aria-expanded:rotate-90" fill="currentColor" viewBox="0 0 20 20"> <path d="M6 6L14 10L6 14V6Z" /> </svg> <svg class="size-5 text-accent opacity-60" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" /> </svg> <span>components</span> </button> <div id="folder-components" class="pl-6" data-aether-ui="accordion-panel"> <div class="flex items-center gap-2 p-2 text-sm text-tertiary hover:text-primary cursor-pointer"> <svg class="size-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" /> </svg> Button.vue </div> <div class="flex items-center gap-2 p-2 text-sm text-tertiary hover:text-primary cursor-pointer"> <svg class="size-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" /> </svg> Modal.vue </div> <div class="flex items-center gap-2 p-2 text-sm text-tertiary hover:text-primary cursor-pointer"> <svg class="size-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" /> </svg> App.vue </div> </div> </div> </div> </div> <!-- Folder: assets --> <div class="mb-1"> <button class="w-full flex items-center gap-2 p-2 rounded-lg text-secondary text-sm group hover:bg-primary/30 transition-colors" data-aether-trigger="accordion" data-aether-target="folder-assets" data-aether-active-class="text-primary" data-aether-inactive-class="text-secondary"> <svg class="size-4 text-tertiary transition-transform duration-200 group-aria-expanded:rotate-90" fill="currentColor" viewBox="0 0 20 20"> <path d="M6 6L14 10L6 14V6Z" /> </svg> <svg class="size-5 text-accent opacity-80" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" /> </svg> <span class="font-medium">assets</span> </button> <div id="folder-assets" class="pl-6 py-1" data-aether-ui="accordion-panel"> <div class="flex items-center gap-2 p-2 text-sm text-tertiary hover:text-primary cursor-pointer"> <svg class="size-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" /> </svg> logo.png </div> </div> </div> </div>