CSS-only Tailwind CSS combobox with live search filtering and accessible dropdown list. Keyboard navigation, color variants. WCAG AA accessible, works with Django, HTMX, Laravel, React, and any stack.
Combobox łączy wprowadzanie tekstu z listą rozwijaną. Użyj komponentu input dla pola — stamtąd pochodzą warianty rozmiaru, koloru i stanu. Narzędzia combobox-* obsługują tylko listę rozwijaną, elementy i stan otwarty.
Tylko CSS, nie wymaga JavaScript. Dostępny w WCAG AA i niezależny od frameworka — współpracuje z Django, HTMX, Laravel, React i dowolnym stosem.
Klasa
Typ
Opis
combobox-list
Opierać
Kontener listy rozwijanej dla opcji combobox
combobox-item
Modyfikator
Indywidualna opcja na liście rozwijanej
combobox-open
Modyfikator
Pokazuje listę rozwijaną po zastosowaniu do opakowania
combobox-primary
Kolor
Podświetlenie głównego motywu kolorowego elementów
combobox-secondary
Kolor
Podświetlenie motywu dodatkowego dla elementów
combobox-accent
Kolor
Podświetlenie motywu akcentującego dla przedmiotów
combobox-info
Kolor
Informacje semantyczne wyróżnienie koloru
combobox-success
Kolor
Sukces semantycznego podkreślenia koloru
combobox-warning
Kolor
Ostrzeżenie: semantyczne podkreślenie koloru
combobox-error
Kolor
Błąd semantycznego podświetlenia koloru
Podstawowe użycie
Zawiń input i combobox-list w kontenerze względnym. Dodaj combobox-open do opakowania, aby wyświetlić listę — przełącz ją za pomocą JS lub :focus-within.
React
Vue
Angular
Svelte
123456789
<divclass="relative w-64 combobox-open"><inputtype="text"class="input w-full"placeholder="Search or select..."><ulclass="combobox-list"><liclass="combobox-item">React</li><liclass="combobox-item combobox-item-active">Vue</li><liclass="combobox-item">Angular</li><liclass="combobox-item">Svelte</li></ul></div>
1 2 3 4 5 6 7 8 91011121314151617
import{useCombobox}from'frutjam/react'constframeworks=['React','Vue','Angular','Svelte']exportdefaultfunctionComboboxDemo(){constcombo=useCombobox({items:frameworks})return(<div{...combo.containerProps}className="relative w-64"><input{...combo.inputProps}className="input w-full"placeholder="Search or select..."/><ulclassName="combobox-list"role="listbox">{combo.filtered.map((item,i)=>(<likey={item}{...combo.optionProps(item,i)}className="combobox-item">{item}</li>))}</ul></div>)}
Otwórz w Focusie
Użyj focus-within:combobox-open na opakowaniu, aby otworzyć listę, gdy dane wejściowe są aktywne — nie jest wymagana obsługa JavaScript.
React
Vue
Angular
Svelte
html
123456789
<divclass="relative w-64 focus-within:combobox-open"><inputtype="text"class="input w-full"placeholder="Focus to open..."><ulclass="combobox-list"><liclass="combobox-item">React</li><liclass="combobox-item">Vue</li><liclass="combobox-item">Angular</li><liclass="combobox-item">Svelte</li></ul></div>
Rozmiary
Użyj input-sm, input-lg itp. w polu wejściowym. Lista rozwijana dostosowuje się naturalnie.
Użyj input-primary itp. na wejściu dla koloru pola. Dodaj pasujący element combobox-primary do opakowania, aby zabarwić podświetlenie aktywnego elementu.
Użyj createCombobox z frutjam/js lub useCombobox z frutjam/react, aby uzyskać filtrowanie, nawigację za pomocą klawiatury (↑ ↓ Enter Escape) i pełne okablowanie aria-* od razu po wyjęciu z pudełka. Wyczekuj zdarzenia fj:select, które obsłuży selekcję.