HomeGetting StartedColor SystemTypographySpacingIconographyLayoutInstallationUsageAngularBlazorReactSvelteVueThemingTypographyCustomizationCSS-Only ComponentsFormsIconsIllustrationsAccessibilityGlobal ConfigurationTailwind CSSSass LibraryForge MCP ServerDropdown OptionsFocus Indicator ClippingAll componentsButtonButton AreaChipFloating Action ButtonIcon ButtonSplit ButtonAutocompleteButton ToggleCalendarCheckboxChip FieldColor PickerDate PickerDate Range PickerFile PickerLabelRadioSelectSliderSwitchText FieldTime PickerApp BarApp LauncherDrawerMenuPaginatorSkip LinkStepperTabsView SwitcherAccordionApp LayoutCardDividerExpansion PanelScaffoldSplit ViewStackStructured CardToolbarBadgeBannerBusy IndicatorCircular ProgressDialogInline MessageLinear ProgressPage StateSkeletonToastTooltipAvatarIconKeyLabel ValueListMeterSecretTableTimelineTimestampTreeKeyboard ShortcutPopoverIntroductionColorTypographySpacingShapeBorderElevationLayeringAnimationUsageIcon LibraryBlocksRoadmapChangelogBlog

Chip Field

Deprecated

A specialized input field that lets users create and manage a collection of chips representing freeform text values or selections.

DesignResearch

Usage

Deprecated

forge-chip-field is deprecated and will be removed in a future release. forge-text-field and forge-select are the intended replacement path once they gain equivalent functionality — avoid building new usage on chip field.

forge-chip-field wraps a slotted <input> and shares the same field frame as a text field (variant, theme, shape, density, label-position, invalid, required, disabled) plus its own add-on-blur. The field itself doesn’t create chips — it fires forge-chip-field-member-added and forge-chip-field-member-removed, and the app appends or removes a chip with slot="member" in response. Use it for freeform, removable entries like tags or recipients; for a single value, use a plain text field, and for entries chosen from a known list, pair it with autocomplete instead of accepting arbitrary text.

Rules

Do
Confirm each entered value with a clear affordance, like pressing Enter or blurring the field.Give every chip its own remove control so values can be deleted individually.Pair with autocomplete when users are choosing from a known set of values, so they aren't typing free text blind.
Don't
Don't use a chip field for a single, non-repeating value — use a text field instead.Don't use a chip field to enter a long phrase or sentence — use a text field or textarea instead.Don't display static, non-interactive values as chips — use badges instead.

Adding chips

Type a value and press Enter to fire forge-chip-field-member-added with the entered text; append a forge-chip with slot="member" in response, and remove it on forge-chip-field-member-removed.

A chip field with support text guiding how to add a tag.

With autocomplete

Nest a chip field inside a forge-autocomplete to confirm each typed value against a filtered list of suggestions instead of accepting arbitrary free text.

A chip field nested inside an autocomplete, with a dropdown trigger and clear button.

Confirm on blur

Set add-on-blur to confirm a chip when focus leaves the field, not just on Enter.

add-on-blur confirms a chip when focus leaves the field, not just on Enter.

Disabled

Set disabled to exclude the chip field, and its existing members, from interaction.

A disabled chip field with existing members.

A specialized input field component that allows users to create and manage a collection of chips representing text values or selections. Use a chip field when you want to allow users to input multiple discrete items, such as tags, categories, or selections from a predefined list. Prefer alternatives such as a select or autocomplete when dealing with a large number of options or when single selection is sufficient.

import "@tylertech/forge/chip-field";
Properties
PropertyAttributeTypeDefaultDescription
addOnBluradd-on-blurbooleanfalseWhether or not to add chip when blur event
popoverTargetElement—boolean—The target element for the popover.
labelPositionlabel-positionFieldLabelPosition"inset"The position of the label relative to the field.
labelAlignmentlabel-alignmentFieldLabelAlignment"start"The alignment of the label relative to the field.
invalidinvalidbooleanfalseWhether the field is in an invalid state.
requiredrequiredbooleanfalseWhether the field is required.
optionaloptionalbooleanfalseWhether the field is optional.
disableddisabledbooleanfalseWhether the field is disabled.
floatLabelfloat-labelbooleanfalseWhether the label should float above the field. Only applies when the label is inset.
variantvariantFieldVariant"outlined"The variant of the field.
themethemeFieldTheme"default"The theme of the field.
shapeshapeFieldShape"default"The shape of the field.
densitydensityFieldDensity"default"The density of the field.
densedensebooleanfalseWhether the field is dense.
popoverIconpopover-iconbooleanfalseWhether the field has a popover icon.
popoverExpandedpopover-expandedbooleanfalseWhether the field's popover is expanded.
supportTextInsetsupport-text-insetFieldSupportTextInset"none"The inset of the support text.
Events
NameTypeDescription
forge-button-toggle-selectCustomEvent<IButtonToggleSelectEventData>Dispatches when the user toggles the button.
forge-field-popover-icon-clickCustomEvent<void>Dispatches when the user clicks the popover icon.
Slots
NameDescription
(default)The default/unnamed slot for the field's input.
labelRenders its content as a positioned label.
startTypically reserved for content/icons that render logically before the default slot content.
endTypically reserved content/icons that render logically after the default slot content.
accessoryUsed for content such as a button that is logically connected to the field but should appear distinct from the input
support-textUsed for content that provides additional information about the field. Aligns to the inline start of the field.
support-text-endUsed for content that provides additional information about the field. Aligns to the inline end of the field.
CSS Parts
NameDescription
::part(root)The root container element.
::part(label)The label element.
::part(input)The element containing the input slot.
::part(start)The element containing the start slot.
::part(end)The element containing the end slot.
::part(popover-icon)The popover icon element.
::part(accessory)The element containing the accessory slot.
::part(support-text)The support text element.
::part(support-text-end)The element containing the support text end slot.
::part(outline)The element containing the forge-focus-indicator element.
::part(focus-indicator)The focus indicator element.
CSS Custom Properties
NameDescription
--forge-chip-field-member-spacingThe spacing between chip members.
--forge-chip-field-content-spacingThe spacing around chips group.
--forge-field-backgroundThe background of the field surface.
--forge-field-tonal-backgroundThe background of the field surface in the tonal variant.
--forge-field-tonal-background-hoverThe background of the field surface in the tonal variant on hover.
--forge-field-filled-backgroundThe background of the field surface in the filled and raised variants.
--forge-field-outline-styleThe style of the field outline.
--forge-field-outline-widthThe width of the field outline.
--forge-field-shapeThe border radius of the field's corners.
--forge-field-heightThe height of the field in its default density.
--forge-field-inset-heightThe height of the field in its default density when the label is inset.
--forge-field-padding-inlineThe inline padding of the field.
--forge-field-padding-inline-startThe inline start padding of the field.
--forge-field-padding-inline-endThe inline end padding of the field.
--forge-field-inner-padding-inlineThe padding between elements slotted into the field.
--forge-field-support-text-margin-blockThe margin between the support text and the field.
--forge-field-support-text-gapThe minimum gap between the support text and the support text end.
--forge-field-support-text-padding-inlineThe inline padding of the support text.
--forge-field-support-text-padding-inline-startThe inline start padding of the support text.
--forge-field-support-text-padding-inline-endThe inline end padding of the support text.
--forge-field-label-margin-inlineThe margin between the label and the field when the label is in an inline position.
--forge-field-label-margin-blockThe margin between the label and the field when the label is in the block start position.
--forge-field-required-paddingThe padding between the required indicator and the label.
--forge-field-required-contentThe content of the required indicator.
--forge-field-optional-paddingThe padding between the optional indicator and the label.
--forge-field-optional-contentThe content of the optional indicator.
--forge-field-multiline-resizeThe direction the field can be resized when multiline.
--forge-field-multiline-min-inline-sizeThe minimum inline size the field can be resized to when multiline.
--forge-field-multiline-max-inline-sizeThe maximum inline size the field can be resized to when multiline.
--forge-field-multiline-min-block-sizeThe minimum block size the field can be resized to when multiline.
--forge-field-multiline-max-block-sizeThe maximum block size the field can be resized to when multiline.
--forge-field-popover-icon-transition-durationThe duration of the popover icon animation.
--forge-field-popover-icon-transition-timingThe timing function of the popover icon animation.
--forge-field-popover-icon-open-rotationThe rotation of the popover icon when open.
--forge-field-surface-animation-durationThe duration of background and outline animations.
--forge-field-surface-animation-timingThe timing function of background and outline animations.
--forge-field-surface-floating-animation-durationThe duration of the floating label animation.
--forge-field-surface-floating-animation-timingThe timing function of the floating label animation.
--forge-field-focus-indicator-widthThe width of the focus indicator.
--forge-field-disabled-opacityThe opacity of the field when disabled.
--forge-field-disabled-backgroundThe background of the field when disabled.
Methods
NameReturnsDescription
click()void
floatLabelWithoutAnimation(value)voidFloats the label immediately. Only applies when the label is inset.

Labeling

Give the field’s <input> an id and bind a <label> to it with a matching for attribute. Give each member chip a descriptive aria-label or aria-labelledby so a screen reader can announce what value it represents.

Keyboard interaction

Member chips must be reachable with the Left and Right arrow keys, with a distinct visual cue showing which chip is currently focused. Backspace and Delete should remove whichever chip currently has that keyboard focus.

Disabled state

When the field is disabled, the field itself and every member chip need to appear — and behave — disabled. A disabled field with interactive-looking chips is a common gap to check for.

Loading Forge chat…