Kurulum
AetherJS, modern web projelerine kolayca entegre edilebilen, bağımlılık gerektirmeyen (dependency-free) bir JavaScript kütüphanesidir. Projenize dahil etmek ve başlatmak için aşağıdaki adımları izleyin.
01 Kurulum
aether.js dosyasını projenize indirin ve sayfanızda çağırın.
<script src="/assets/js/aether.js"></script>
02 Başlatma
Kütüphaneyi başlatmanın iki yolu vardır: Otomatik ve Manuel
Otomatik Başlatma
Varsayılan ayarları kullanacaksanız, herhangi bir JavaScript kodu yazmanıza gerek yoktur. Sadece body etiketine data-aether-auto niteliğini eklemeniz yeterlidir.
<body data-aether-auto> ... </body>
Manuel Başlatma
Ayarları özelleştirmek istiyorsanız, data-aether-auto niteliğini kullanmayınız. Bunun yerine script dosyasından sonra AetherUI.init() fonksiyonunu kendi ayar objenizle çağırınız.
<script> AetherUI.init({ prefix: 'aether', hiddenClass: 'hidden', blockScrollClass: 'overflow-hidden', themeStorageKey: 'theme', syncUrl: true, debug: true, domRefreshDebounce: 150, resizeDebounce: 300, }); </script>
03 Yapılandırma
AetherUI.init(config) metoduna gönderilen yapılandırma nesnesi, kütüphanenin global davranışlarını belirler. Varsayılan değerler ve açıklamaları aşağıdadır:
| Seçenek | Tip | Varsayılan | Açıklama |
|---|---|---|---|
| prefix | String | "aether" | Tüm veri niteliklerinin ön ekini belirler. Eğer "test" yaparsanız, data-aether-target yerine data-test-target kullanılır. |
| hiddenClass | String | "hidden" | Elementleri gizlemek için kullanılan CSS sınıfı. Bootstrap kullanıcıları için "d-none" olarak ayarlanabilir. |
| blockScrollClass | String | "overflow-hidden" | Modal açıldığında body etiketine eklenerek sayfa kaydırmayı engelleyen sınıf. |
| themeStorageKey | String | "theme" | Seçilen temanın (dark/light) localStorage üzerinde hangi anahtarla saklanacağını belirler. |
| syncUrl | Boolean | true | Tab veya Modal açıldığında tarayıcı URL'sine hash (#id) eklenip eklenmeyeceğini kontrol eder (Deep Linking). |
| debug | Boolean | true | Geliştirme modu. true ise konsola detaylı hata ve durum mesajları basar. Prodüksiyonda false yapılması önerilir. |
| domRefreshDebounce | Number | 150 | DOM değişikliklerini izleyen gözlemcinin (Observer) tetiklenme gecikmesi (ms cinsinden). |
| resizeDebounce | Number | 300 | Ekran yeniden boyutlandırıldığında hesaplamaların ne sıklıkla yapılacağını belirler (ms cinsinden). |
04 Önemli Uyarı
Dökmantasyonda bulunan bütün örnek kodları test ederken aşağıdaki CSS değişkenlerini kullanmanız önerilir.
@custom-variant dark (&:where(.dark, .dark *)); @theme { /*----------Raw Materials----------*/ --aether-50: #fafafa; --aether-100: #f4f4f5; --aether-200: #e4e4e7; --aether-300: #d4d4d8; --aether-400: #a1a1aa; --aether-500: #71717a; --aether-600: #52525b; --aether-700: #3f3f46; --aether-800: #27272a; --aether-900: #18181b; --aether-950: #121215; --accent: #2563eb; --accent-interactive: #3b82f6; --static-white: #ffffff; --static-black: #000000; } /*----------Light Theme----------*/ :root { /* bg */ --bg-primary: var(--aether-50); --bg-primary-interactive: var(--aether-100); --bg-secondary: var(--static-white); --bg-secondary-interactive: var(--aether-50); --bg-tertiary: var(--aether-100); --bg-tertiary-interactive: var(--aether-200); --bg-accent: var(--accent); --bg-accent-interactive: var(--accent-interactive); /* fg */ --fg-primary: var(--aether-900); --fg-primary-interactive: var(--static-black); --fg-secondary: var(--aether-600); --fg-secondary-interactive: var(--aether-800); --fg-tertiary: var(--aether-400); --fg-tertiary-interactive: var(--aether-600); --fg-inverse: var(--static-white); --fg-inverse-interactive: var(--aether-200); --fg-accent: var(--accent); --fg-accent-interactive: var(--accent-interactive); /* border */ --border-primary: var(--aether-200); --border-primary-interactive: var(--aether-300); --border-accent: var(--accent); --border-accent-interactive: var(--accent-interactive); /* code */ --code-tag: #be185d; --code-prop: #334155; --code-value: #0369a1; --code-text: #0f172a; --code-accent: #7e22ce; --code-muted: #64748b; } /*----------Dark Theme----------*/ :root.dark { /* bg */ --bg-primary: var(--aether-950); --bg-primary-interactive: var(--aether-900); --bg-secondary: var(--aether-900); --bg-secondary-interactive: var(--aether-800); --bg-tertiary: var(--aether-800); --bg-tertiary-interactive: var(--aether-700); --bg-accent: var(--accent); --bg-accent-interactive: var(--accent-interactive); /* fg */ --fg-primary: var(--aether-50); --fg-primary-interactive: var(--static-white); --fg-secondary: var(--aether-400); --fg-secondary-interactive: var(--aether-200); --fg-tertiary: var(--aether-500); --fg-tertiary-interactive: var(--aether-300); --fg-inverse: var(--aether-950); --fg-inverse-interactive: var(--static-black); --fg-accent: var(--accent); --fg-accent-interactive: var(--accent-interactive); /* border */ --border-primary: var(--aether-800); --border-primary-interactive: var(--aether-700); --border-accent: var(--accent); --border-accent-interactive: var(--accent-interactive); /* code */ --code-tag: #ff63aa; --code-prop: #ced8e6; --code-value: #7dd3fc; --code-text: #f4f4f5; --code-accent: #d946ef; --code-muted: #94a3b8; } /*----------Tailwind Mapping----------*/ @theme { /* bg */ --background-color-primary: var(--bg-primary); --background-color-primary-interactive: var(--bg-primary-interactive); --background-color-secondary: var(--bg-secondary); --background-color-secondary-interactive: var(--bg-secondary-interactive); --background-color-tertiary: var(--bg-tertiary); --background-color-tertiary-interactive: var(--bg-tertiary-interactive); --background-color-accent: var(--bg-accent); --background-color-accent-interactive: var(--bg-accent-interactive); /* fg */ --text-color-primary: var(--fg-primary); --text-color-primary-interactive: var(--fg-primary-interactive); --text-color-secondary: var(--fg-secondary); --text-color-secondary-interactive: var(--fg-secondary-interactive); --text-color-tertiary: var(--fg-tertiary); --text-color-tertiary-interactive: var(--fg-tertiary-interactive); --text-color-inverse: var(--fg-inverse); --text-color-inverse-interactive: var(--fg-inverse-interactive); --text-color-accent: var(--fg-accent); --text-color-accent-interactive: var(--fg-accent-interactive); /* border */ --border-color-primary: var(--border-primary); --border-color-primary-interactive: var(--border-primary-interactive); --border-color-accent: var(--border-accent); --border-color-accent-interactive: var(--border-accent-interactive); /* code */ --background-color-code-tag: var(--code-tag); --background-color-code-prop: var(--code-prop); --background-color-code-value: var(--code-value); --background-color-code-text: var(--code-text); --background-color-code-accent: var(--code-accent); --background-color-code-muted: var(--code-muted); --text-color-code-tag: var(--code-tag); --text-color-code-prop: var(--code-prop); --text-color-code-value: var(--code-value); --text-color-code-text: var(--code-text); --text-color-code-accent: var(--code-accent); --text-color-code-muted: var(--code-muted); }