Canlı arama filtrelemeye ve erişilebilir açılır listeye sahip, yalnızca CSS'ye özel Tailwind CSS açılan kutusu. Klavyede gezinme, renk çeşitleri. WCAG AA'ya erişilebilir; Django, HTMX, Laravel, React ve herhangi bir yığınla çalışır.
Combobox, bir metin girişini bir açılır listeyle birleştirir. Alan için input bileşenini kullanın; boyut, renk ve durum değişkenleri buradan gelir. combobox-* yardımcı programları yalnızca açılır listeyi, öğeleri ve açık durumu yönetir.
Yalnızca CSS, JavaScript gerekmez. WCAG AA erişilebilir ve çerçeveden bağımsız — Django, HTMX, Laravel, React ve tüm yığınlarla çalışır.
| Sınıf | Tip | Tanım |
|---|---|---|
| combobox-list | Temel | Birleşik giriş kutusu seçenekleri için açılır liste kapsayıcısı |
| combobox-item | Değiştirici | Açılır listedeki bireysel seçenek |
| combobox-open | Değiştirici | Paketleyiciye uygulandığında açılır listeyi gösterir |
| combobox-primary | Renk | Öğeler için birincil tema rengi vurgusu |
| combobox-secondary | Renk | Öğeler için ikincil tema rengi vurgusu |
| combobox-accent | Renk | Öğeler için vurgulu tema rengi vurgusu |
| combobox-info | Renk | Bilgi anlamsal renk vurgusu |
| combobox-success | Renk | Başarı anlamsal renk vurgusu |
| combobox-warning | Renk | Uyarı anlamsal renk vurgusu |
| combobox-error | Renk | Anlamsal renk vurgulama hatası |
Temel Kullanım
Bir giriş ve bir combobox-list'i göreli kapsayıcıya sarın. Listeyi göstermek için sarıcıya combobox-open ekleyin; JS veya :focus-with aracılığıyla değiştirin.
1 2 3 4 5 6 7 8 9 | <div class="relative w-64 combobox-open"> <input type="text" class="input w-full" placeholder="Search or select..."> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> <li class="combobox-item">Svelte</li> </ul> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import { useCombobox } from 'frutjam/react' const frameworks = ['React', 'Vue', 'Angular', 'Svelte'] export default function ComboboxDemo() { const combo = useCombobox({ items: frameworks }) return ( <div {...combo.containerProps} className="relative w-64"> <input {...combo.inputProps} className="input w-full" placeholder="Search or select..." /> <ul className="combobox-list" role="listbox"> {combo.filtered.map((item, i) => ( <li key={item} {...combo.optionProps(item, i)} className="combobox-item">{item}</li> ))} </ul> </div> ) } |
Odaklandığında Aç
Giriş odaklandığında listeyi açmak için sarmalayıcıda focus-within:combobox-open komutunu kullanın; JavaScript gerekmez.
1 2 3 4 5 6 7 8 9 | <div class="relative w-64 focus-within:combobox-open"> <input type="text" class="input w-full" placeholder="Focus to open..."> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item">Vue</li> <li class="combobox-item">Angular</li> <li class="combobox-item">Svelte</li> </ul> </div> |
Boyutlar
Giriş alanında input-sm, input-lg vb.'yi kullanın. Açılır menü doğal olarak uyum sağlar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="relative w-64 combobox-open"> <input type="text" class="input input-sm w-full" placeholder="Small"> <ul class="combobox-list"> <li class="combobox-item">Banana</li> <li class="combobox-item combobox-item-active">Mango</li> <li class="combobox-item">Papaya</li> </ul> </div> <div class="relative w-64 combobox-open"> <input type="text" class="input input-lg w-full" placeholder="Large"> <ul class="combobox-list"> <li class="combobox-item">Banana</li> <li class="combobox-item combobox-item-active">Mango</li> <li class="combobox-item">Papaya</li> </ul> </div> |
Renkler
Alan renginin girişinde input-primary vb. kullanın. Etkin öğe vurgusunu renklendirmek için eşleşen combobox-primary'i sarmalayıcıya ekleyin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="relative w-64 combobox-open combobox-primary"> <input type="text" class="input input-primary w-full" placeholder="Primary"> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> </ul> </div> <div class="relative w-64 combobox-open combobox-error"> <input type="text" class="input input-error w-full" placeholder="Error"> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> </ul> </div> |
Engelli
1 2 3 | <div class="relative w-64"> <input type="text" class="input w-full" placeholder="Disabled" disabled> </div> |
Düğmeli
Bir arama simgesi veya tetikleme düğmesi eklemek için join ile oluşturun.
1 2 3 4 5 6 7 8 9 10 11 12 | <div class="relative w-64 combobox-open"> <div class="join w-full"> <span class="join-item btn btn-soft">🔍</span> <input type="text" class="input join-item" placeholder="Search..."> </div> <ul class="combobox-list"> <li class="combobox-item">React</li> <li class="combobox-item combobox-item-active">Vue</li> <li class="combobox-item">Angular</li> <li class="combobox-item">Svelte</li> </ul> </div> |
Bağlantı veya Düğme Olarak Öğeler
combobox-item herhangi bir öğe üzerinde çalışır — <li>, <a> veya <button>.
1 2 3 4 5 6 7 8 | <div class="relative w-64 combobox-open"> <input type="text" class="input w-full" placeholder="Search pages..."> <ul class="combobox-list"> <a href="#" class="combobox-item">Home</a> <a href="#" class="combobox-item combobox-item-active">About</a> <button class="combobox-item">Contact</button> </ul> </div> |
JS ve Tepki Yardımcısı
Filtreleme, klavye navigasyonu (↑ ↓ Enter Escape) ve tam aria-* kablolamayı kutudan çıkarmak için frutjam/js'den createCombobox'u veya frutjam/react'tan useCombobox'u kullanın. Seçimi işlemek için fj:select olayını dinleyin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="relative w-64" id="js-combobox"> <input type="text" class="input w-full" placeholder="Search frameworks..."> <ul class="combobox-list"> <li class="combobox-option" data-value="react">React</li> <li class="combobox-option" data-value="vue">Vue</li> <li class="combobox-option" data-value="angular">Angular</li> <li class="combobox-option" data-value="svelte">Svelte</li> </ul> </div> <script type="module"> import { createCombobox } from 'frutjam/js' const combo = createCombobox(document.getElementById('js-combobox')) document.getElementById('js-combobox').addEventListener('fj:select', (e) => { console.log('Selected:', e.detail.value) }) </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import { useCombobox } from 'frutjam/react' const frameworks = [ { label: 'React', value: 'react' }, { label: 'Vue', value: 'vue' }, { label: 'Angular', value: 'angular' }, { label: 'Svelte', value: 'svelte' }, ] export default function ComboboxDemo() { const combo = useCombobox({ items: frameworks }) return ( <div {...combo.containerProps} className="relative w-64"> <input {...combo.inputProps} className="input w-full" placeholder="Search frameworks..." /> <ul {...combo.listboxProps} className="combobox-list"> {combo.filtered.map((item, i) => ( <li key={item.value} {...combo.optionProps(item, i)}>{item.label}</li> ))} </ul> </div> ) } |
Claude Code, Cursor veya başka bir AI düzenleyiciyi mi kullanıyorsunuz?
Cherry MCP, AI editörünüze talep üzerine tam Açılan kutu sınıf adlarını ve yapısını verir. Artık halüsinasyonlu dersler yok.