Skip to main content
This guide covers changes to the beta MultiSelectField component. These APIs may continue to evolve before the stable release.

Overview

The labelNode prop has been removed from MultiSelectField and MultiSelectFieldSync. Use the label string with inline markdown instead.

Design Rationale

Why remove labelNode?

Previously, labelNode accepted a ReactNode to render custom label content — but this bypassed the accessible label system and required maintaining two separate props for a single concept.
// Before: Two props, one bypasses accessibility
<MultiSelectField
  label="Select tags" // Used for aria-label only
  labelNode={<><strong>Select</strong> tags</>} // Used for visual label
  loadOptions={fetchTags}
  value={values}
  onSelectedOptionsChange={setValues}
/>
The label prop now accepts inline markdown, which renders visually while still producing a clean plain-text accessible label — no second prop needed.
// After: One prop handles both visual and accessible label
<MultiSelectField
  label="**Select** tags"
  loadOptions={fetchTags}
  value={values}
  onSelectedOptionsChange={setValues}
/>

Supported Markdown

SyntaxResult
**text**Bold
*text*Italic
***text***Bold italic
==text==Highlighted
`text`Code

Migration Guide

Bold or italic label text

// Before
<MultiSelectField
  label="Assignees"
  labelNode={<><strong>Assignees</strong> (optional)</>}
  loadOptions={fetchUsers}
  value={values}
  onSelectedOptionsChange={setValues}
/>

// After
<MultiSelectField
  label="**Assignees** (optional)"
  loadOptions={fetchUsers}
  value={values}
  onSelectedOptionsChange={setValues}
/>

Plain label with no formatting

If labelNode was rendering the same text as label, remove it entirely:
// Before
<MultiSelectFieldSync
  label="Colors"
  labelNode={<span>Colors</span>}
  options={options}
  value={values}
  onSelectedOptionsChange={setValues}
/>

// After
<MultiSelectFieldSync
  label="Colors"
  options={options}
  value={values}
  onSelectedOptionsChange={setValues}
/>

Breaking Changes

These changes require code updates before upgrading. The previous API is no longer supported.
  • labelNode has been removed from MultiSelectField and MultiSelectFieldSync — Use inline markdown in the label string instead.

Why Breaking?

As a beta API, labelNode was removed directly without a deprecation path. The label prop now handles all label content through inline markdown, making labelNode unnecessary.
Last modified on April 2, 2026