Reference
Options
createCombobox(target, options) takes everything
createSelect takes, with these defaults changed and three options
of its own.
| Option | Type | Default | What it does |
|---|---|---|---|
single |
boolean |
false |
One value instead of chips. |
maxTags |
number |
— | Stop after this many. |
validate |
(text) => string | null |
— | Clean up the text, or return null to refuse it. |
separators |
string[] |
['Enter', ','] |
Keys and characters that finish a tag. 'Tab' is supported. |
editable |
boolean |
true |
Double-click a chip to edit it. |
reorder |
boolean |
true |
Drag chips into a different order. |
options |
SelectOption[] |
[] |
Suggestions. |
load |
(query, ctx) => Promise |
— | Remote suggestions — debounced, aborted, cached. |
placeholder, theme, classNames, icons, render, strings |
As in Select. |
Everything on the instance — getValue, setValue, getSelected, setOptions, open, close,
clear, focus, enable, disable, destroy — is the same too, and so are the events:
dx:selectchange, dx:selectcreate, dx:selectsearch, dx:selectopen, dx:selectclose.
Validation
createCombobox(input, {
validate: (text) => {
const clean = text.trim().toLowerCase();
if (clean.length < 3) return null; // too short: refused
if (!/^[a-z0-9-]+$/.test(clean)) return null; // letters, digits and dashes only
return clean; // this is what becomes the tag
},
});
Duplicates are ignored whatever validate says, so the same tag can't land twice.
Suggestions that are not tags
Pass creatable: false to turn the field into a picker over options with no free text at all — at
which point you probably want @devix-labs/select instead.
Updated 15 Sep 2026