Chip Input
The catnip-input-chip custom element collects multiple string values (tags, filters, skills, etc.): a single-line draft field, Add control (on by default), and removable chips below. It composes catnip-input internally for the draft line so sizing, intent, icons, and label patterns stay aligned with Input. Shared label and supporting-text behaviour is summarised on Inputs overview.
Overview
- Chips (
v-model):model-value/.modelValueis the committed chips (string[]). Draft typing is not part ofmodelValue. - Commit: Non-empty draft commits on Enter (default input only) or via Add. Set
show-add-button="false"for Enter-only. Emitsupdate:modelValuewith the new chips array. - Chip limits: Use
min-chips/max-chipsto keep the committed tag count within bounds. Usemax-visible-chipsto show only the first tags and collapse the rest behind a tertiary Show n more control, then expand/collapse with Show more / Show less. - Add button: Forward props through
.addButton="{ label, ariaLabel, appearance, leftIcon, ... }".labeloverrides the default + Add string (inputChip.addin the bundled locale);type,disabled, andsizestay the chip input. - Draft input props: Configure the default embedded text field with
.catnipInput="{ placeholder, leftIcon, showClearButton }". Ignored when thedraftInputslot is used. - Clear draft (default input): Set
catnipInput.showClearButtonto showcatnip-input’s trailing clear control while the draft has text. It clears only the unsent line, not chips (catnipInput.clearButtonAriaLabeloverrides the defaultinput.clearlabel).
Draft line
Two ways to supply the draft field — pick one; the draft API differs:
Default embedded catnip-input | draftInput slot | |
|---|---|---|
| Set draft from parent | chipRef.setDraftValue('…') | .draftValue="draft" |
| Observe draft | @update:draftValue (optional) | Your slotted control binding |
| After Add commits | Chip clears draft | You clear .draftValue |
Default — chip owns draft; parent intervenes with setDraftValue() when needed (prefill, reset). Do not bind .draftValue.
Custom slot — parent owns draft entirely via .draftValue. Do not call setDraftValue() (no effect). See Chip Input — Specs — Draft line.
Live example
Relationship to catnip-input
There is no type="chip" on catnip-input. Use this component whenever you need chips. Shared behaviour (label slots, supporting text, intents, leading icon) matches Input; draft-specific input props are forwarded through catnipInput following the composed components convention.
Accessibility
- Label: Same integrated label model as Input—
labelprop orlabelslot;for/idwiring is handled when you omitcatnipInput.idor set it for stable anchors. - Draft field: The native control stays a single-line text input;
aria-describedbyincludes supporting text when present (rendered after the chip list). - Add button: Secondary
catnip-buttonwithtype="button"so it does not submit forms; provideaddButton.ariaLabelonly if the visible label is insufficient. - Show more / less: When
max-visible-chipshides chips, the tertiary Show n more control expands the full committed list without changing the value. The expanded list shows Show less at the bottom-right of the chip area. - Clear draft: The optional trailing clear control on the draft field uses the same accessible pattern as
catnip-input(input.clearby default, orcatnipInput.clearButtonAriaLabel). - Chips: Use
catnip-chipremovals; keep keyboard and screen-reader flows consistent with chip guidance.