May 1, 2024 Release
We have a huge release today! Its a GA bonanza 🎊 – Submenu, unavailable menu items, DropZone and FileTrigger components are now in GA. Check our blog post on the intricacies of the submenu interactions and how we handled them.
In addition, we have added a suite of new color components including ColorPicker, ColorArea, ColorField, ColorSlider, ColorSwatch, ColorSwatchPicker, ColorWheel, currently in beta. These enable you to build fully customizable color pickers, including accessible color descriptions for screen reader support.
The first alpha of TreeView has also been released. This was a highly requested component and includes support for expanding, collapsing, multi-selection, keyboard navigation, and interactive children. Documentation will follow soon, check out our React Spectrum storybook and React Aria Components storybook source code for examples.
We have also improved our integration with client side routers, accepting options to control router-specific behaviors such as scrolling, replacing instead of pushing to the history, base path, etc. For convenience, all collection items in React Aria Components (e.g. MenuItem) now also support isDisabled and onAction props directly, rather than needing to be defined on the root collection.
Last but not least, we want to acknowledge all the wonderful contributors who have dedicated their time to improve our libraries. A special thanks to @ryo-manba and @sookmax, who are responsible for multiple bug fixes to Switch, IME support, ListBox, ComboBox, as well as adding new features such as additional state attributes, hover events, and language support. Thank you!! 😍
IllustratedMessage design update
IllustratedMessagewas updated by Spectrum Design (see issue) and in this release we updated our component to match. This also solves for an internationalization issue with using italics in some languages.
React Aria Color API updates
gradientPropswas merged intocolorAreaPropsinuseColorArea.
Enhancements#
- Collections
- Support
onActionandisDisabledon item elements - @devongovett - PR - Add hover events to all collection items - @reidbarber - PR
- Add support for hover events in
ListBoxOption component - @ryo-manba - PR - Add
allowsEmptyCollectionproperty toComboBoxProps- @wdsjohn - PR - Turn off virtualizer when running in test env (RSP) - @LFDanLu - PR
- Support
- Routing
- Add support for
routerOptionsanduseHref- @devongovett - PR - Add
hrefLangattribute to Link - @ryo-manba - PR
- Add support for
- Forms
- Add
validationBehaviorto Form - @reidbarber - PR, @LFDanLu - PR - Export
FormContextand documentvalidationBehavioron RAC Form - @reidbarber - PR - Add
isReadyOnly&isRequireddata attributes to TextField - @sookmax - PR - Allow passing of
inputRefto RAC Checkbox/Switch/Radio - @yihuiliao - PR, @sookmax - PR - Add
--trigger-widthsupport for DatePicker & DateRangePicker - @sookmax - PR - Add
nullto RadioGroupvalue- @sookmax - PR
- Add
- Meter
- Add informative variant in
Meter- @reidbarber - PR
- Add informative variant in
- Toast
- Drag and drop
- Add conditional drag and drop support - @ryo-manba - PR
- Add support for
isDisabledtouseDrag- @reidbarber - PR - Add
isDisabledto RAC DropZone - @ryo-manba - PR
- Menu
- Add animation to Submenu tray when navigating between levels (RSP) - @reidbarber - PR
- Misc
- Add
data-focusedto RAC Tabs - @snowystinger - PR - Add support for
onErrorandonLoadcallback in Image - @skathuria29 - PR - Add
HoverEventstype toToggleButtonProp- @sookmax - PR - Add support for
shouldFlipin RAC Tooltip - @ktabors - PR
- Add
Fixes#
- Forms
- Fix Switch focus events - @sookmax - PR
- Fix
onSubmittrigger for NumberField - @tomekancu - PR - Exclude
idfrom TextFieldDOMProps- @corydeppen - PR - Render nothing if
isInvalidand noerrorMessageis provided - @LFDanLu - PR - Correct floating precision in
snapValueToStep- @TMH-SE - PR
- ComboBox
- Fix
onSelectionChangetype in ComboBox- @acr92 - PR - Fix
onBlurin ComboBox when no button is provided - @tomekancu - PR - Fix timer cleanup on ComboBox unmount - @ryo-manba - PR
- Remove italics from ComboBox and SearchAutocomplete (RSP) - @yihuiliao - PR
- Fix
- DatePicker
- Fix Persian/Gregorian calendar conversion - @devongovett - PR
- Fix validation for controlled DateField components - @tomekancu - PR
- Allow calendar state context to set
nullvalue - @psywalker - PR - Fix
useRangeCalendarwith mobile scrolling - @QzCurious - PR - Fix backspace to shift focus to previous element in
useDateSegment- @ryo-manba - PR - Fix crash in
DateRangePickerwhen using SSR optimized localized strings - @devongovett - PR
- Menu
- Scroll Submenu trigger item into view when keyboard navigating - @reidbarber - PR
- Fix Submenu safe area edge case - Reid Barber - @reidbarber - PR
- Fix RAC Submenu jittering when rendered close to edge of container - @LFDanLu - PR
- Fix submenu CSS specificity - @reidbarber - PR
- Change
useMenuTriggeronPressStarttostate.open- @subvertallchris - PR - Improve scrolling behavior for elements with multiple scrollable parents - @reidbarber - PR
- Automatically set
MenuItemtextValuefrom children if it is a string - @devongovett - PR - Require children prop in MenuTrigger - @PHILLIPS71 - PR
- Focus
- Enhance
FocusScopeto support tab completion for IMEs - @ryo-manba - PR - Fix focus tracking for dynamic iframe content - @ritz078 - PR
- Fix intermittent focus ring compilation issue (Spectrum) - @devongovett - PR
- Ignore HiddenSelect when tree walking - @majornista - PR
- Enhance
- Collections
- Ensure that arrow keys in grid cells always win over children - @devongovett - PR
- Allow escape key event to propagate if no items are selected - @snowystinger - PR
- Fix TypeError in ListBox's grid layout keyboard navigation - @sookmax - PR
- Fix return type for
onSelectionChange- @LFDanLu - PR
- Drag and drop
- Fix focus returning to DropZone after closing FileTrigger - @yihuiliao - PR, @LFDanLu - PR
- Remove
Textfrom RSP DropZone API - @yihuiliao - PR - Omit
classNameandstyleprop in RSP DropZone - @yihuiliao - PR
- Internationalization
- Gracefully treat locales removed by
@react-aria/optimize-locales-plugin- @bhovhannes - PR - Export
LocalizedStringFormattertype in react-aria - @alexasselin008 - PR
- Gracefully treat locales removed by
- Overlays
- Misc
- Rename and export
defaultSlotand removeslotCallbackSymbolfrom RAC - @alexasselin008 - PR - Allow typing in Accordion (RSP) - @FosterSamuel - PR
- Fix CSS properties with undefined custom property values - @jdawber - PR
- Fix
useTreeDataroot move - @telcy - PR - Export types
SpectrumTextAreaProps,ItemProps,SectionProps- @dsmmcken - PR - Fix
labelPropstype inSpectrumFieldProps- @majornista - PR - Improve tree shaking - @devongovett - PR
- Backwards compatibility for
Validationtype - @devongovett - PR
- Rename and export
Docs#
- Fix the spelling of
hierarchicalin docs - @shpomp - PR - Update cursor style to default for Tabs in docs - @ryo-manba - PR
- Add ContextualHelp example for disabled button to Tooltip docs - @reidbarber - PR
- Fix the controlled RadioGroup example - @sookmax - PR
- Fix various typos in docs - @reidbarber - PR
- Fix typo in
useListDatadocs - @ryo-manba - PR - Escape
<form>inButtonPropswith backticks - @sookmax - PR - Update testing documentation and expose some test utils - @LFDanLu - PR
- Fix various imports in the docs from being set to monopackage imports - @LFDanLu - PR
- Update docs for inline
onActionandisDisabledfor collection items - @LFDanLu - PR - Remove extra example from advanced customization section of Calendar - @LFDanLu - PR
- Fix Submenu tray experience for iOS VoiceOver - @reidbarber - PR
- Adding missing support for disabled state in color hooks docs - @ktabors - PR
Under Construction#
React Aria Components Tree (Alpha):
React Spectrum Tree (Alpha):
Color Components (Beta):
- Add color naming for accessibility - @devongovett - PR, PR, PR
- Add ColorArea, ColorField, ColorSlider, and ColorWheel to RAC - @devongovett - PR, @ktabors - PR
- Add ColorSwatch component - @devongovett - PR
- Add ColorPicker and ColorSwatchPicker components - @devongovett - PR
Released packages#
- @adobe/react-spectrum@3.35.0
- @internationalized/date@3.5.3
- @internationalized/message@3.1.3
- @internationalized/number@3.5.2
- @internationalized/string-compiler@3.2.3
- @internationalized/string@3.2.2
- @react-aria/accordion@3.0.0-alpha.28
- @react-aria/actiongroup@3.7.4
- @react-aria/aria-modal-polyfill@3.7.9
- @react-aria/autocomplete@3.0.0-alpha.28
- @react-aria/breadcrumbs@3.5.12
- @react-aria/button@3.9.4
- @react-aria/calendar@3.5.7
- @react-aria/checkbox@3.14.2
- @react-aria/color@3.0.0-beta.32
- @react-aria/combobox@3.9.0
- @react-aria/datepicker@3.10.0
- @react-aria/dialog@3.5.13
- @react-aria/dnd@3.6.0
- @react-aria/example-theme@1.0.2
- @react-aria/focus@3.17.0
- @react-aria/form@3.0.4
- @react-aria/grid@3.9.0
- @react-aria/gridlist@3.8.0
- @react-aria/i18n@3.11.0
- @react-aria/interactions@3.21.2
- @react-aria/label@3.7.7
- @react-aria/landmark@3.0.0-beta.11
- @react-aria/link@3.7.0
- @react-aria/listbox@3.12.0
- @react-aria/live-announcer@3.3.3
- @react-aria/menu@3.14.0
- @react-aria/meter@3.4.12
- @react-aria/numberfield@3.11.2
- @react-aria/overlays@3.22.0
- @react-aria/progress@3.4.12
- @react-aria/radio@3.10.3
- @react-aria/searchfield@3.7.4
- @react-aria/select@3.14.4
- @react-aria/selection@3.18.0
- @react-aria/separator@3.3.12
- @react-aria/slider@3.7.7
- @react-aria/spinbutton@3.6.4
- @react-aria/ssr@3.9.3
- @react-aria/steplist@3.0.0-alpha.4
- @react-aria/switch@3.6.3
- @react-aria/table@3.14.0
- @react-aria/tabs@3.9.0
- @react-aria/tag@3.4.0
- @react-aria/test-utils@1.0.0-alpha.0
- @react-aria/textfield@3.14.4
- @react-aria/toast@3.0.0-beta.11
- @react-aria/toggle@3.10.3
- @react-aria/toolbar@3.0.0-beta.4
- @react-aria/tooltip@3.7.3
- @react-aria/tree@3.0.0-alpha.0
- @react-aria/utils@3.24.0
- @react-aria/virtualizer@3.10.0
- @react-aria/visually-hidden@3.8.11
- @react-spectrum/accordion@3.0.0-alpha.30
- @react-spectrum/actionbar@3.4.4
- @react-spectrum/actiongroup@3.10.4
- @react-spectrum/autocomplete@3.0.0-alpha.31
- @react-spectrum/avatar@3.0.11
- @react-spectrum/badge@3.1.12
- @react-spectrum/breadcrumbs@3.9.6
- @react-spectrum/button@3.16.3
- @react-spectrum/buttongroup@3.6.12
- @react-spectrum/calendar@3.4.8
- @react-spectrum/card@3.0.0-alpha.32
- @react-spectrum/checkbox@3.9.5
- @react-spectrum/color@3.0.0-beta.33
- @react-spectrum/combobox@3.12.4
- @react-spectrum/contextualhelp@3.6.10
- @react-spectrum/datepicker@3.9.5
- @react-spectrum/dialog@3.8.10
- @react-spectrum/divider@3.5.12
- @react-spectrum/dnd@3.3.9
- @react-spectrum/dropzone@3.0.0
- @react-spectrum/filetrigger@3.0.0
- @react-spectrum/form@3.7.5
- @react-spectrum/icon@3.7.12
- @react-spectrum/illustratedmessage@3.5.0
- @react-spectrum/image@3.5.0
- @react-spectrum/inlinealert@3.2.4
- @react-spectrum/label@3.16.5
- @react-spectrum/labeledvalue@3.1.13
- @react-spectrum/layout@3.6.4
- @react-spectrum/link@3.6.6
- @react-spectrum/list@3.7.9
- @react-spectrum/listbox@3.12.8
- @react-spectrum/menu@3.19.0
- @react-spectrum/meter@3.5.0
- @react-spectrum/numberfield@3.9.2
- @react-spectrum/overlays@5.6.0
- @react-spectrum/picker@3.14.4
- @react-spectrum/progress@3.7.6
- @react-spectrum/provider@3.9.6
- @react-spectrum/radio@3.7.5
- @react-spectrum/searchfield@3.8.5
- @react-spectrum/slider@3.6.8
- @react-spectrum/statuslight@3.5.12
- @react-spectrum/steplist@3.0.0-alpha.4
- @react-spectrum/switch@3.5.4
- @react-spectrum/table@3.12.9
- @react-spectrum/tabs@3.8.9
- @react-spectrum/tag@3.2.5
- @react-spectrum/test-utils@1.0.0-alpha.0
- @react-spectrum/text@3.5.4
- @react-spectrum/textfield@3.12.0
- @react-spectrum/theme-dark@3.5.9
- @react-spectrum/theme-default@3.5.9
- @react-spectrum/theme-express@3.0.0-alpha.11
- @react-spectrum/theme-light@3.4.9
- @react-spectrum/toast@3.0.0-beta.11
- @react-spectrum/tooltip@3.6.6
- @react-spectrum/tree@3.0.0-alpha.0
- @react-spectrum/utils@3.11.6
- @react-spectrum/view@3.6.9
- @react-spectrum/well@3.4.12
- @react-stately/calendar@3.5.0
- @react-stately/checkbox@3.6.4
- @react-stately/collections@3.10.6
- @react-stately/color@3.6.0
- @react-stately/combobox@3.8.3
- @react-stately/data@3.11.3
- @react-stately/datepicker@3.9.3
- @react-stately/dnd@3.3.0
- @react-stately/flags@3.0.2
- @react-stately/form@3.0.2
- @react-stately/grid@3.8.6
- @react-stately/layout@3.13.8
- @react-stately/list@3.10.4
- @react-stately/menu@3.7.0
- @react-stately/numberfield@3.9.2
- @react-stately/overlays@3.6.6
- @react-stately/radio@3.10.3
- @react-stately/searchfield@3.5.2
- @react-stately/select@3.6.3
- @react-stately/selection@3.15.0
- @react-stately/slider@3.5.3
- @react-stately/steplist@3.0.0-alpha.4
- @react-stately/table@3.11.7
- @react-stately/tabs@3.6.5
- @react-stately/toast@3.0.0-beta.3
- @react-stately/toggle@3.7.3
- @react-stately/tooltip@3.4.8
- @react-stately/tree@3.8.0
- @react-stately/utils@3.10.0
- @react-stately/virtualizer@3.7.0
- @react-types/accordion@3.0.0-alpha.20
- @react-types/actionbar@3.1.6
- @react-types/actiongroup@3.4.8
- @react-types/autocomplete@3.0.0-alpha.21
- @react-types/avatar@3.0.6
- @react-types/badge@3.1.8
- @react-types/breadcrumbs@3.7.4
- @react-types/button@3.9.3
- @react-types/buttongroup@3.3.8
- @react-types/calendar@3.4.5
- @react-types/card@3.0.0-alpha.25
- @react-types/checkbox@3.8.0
- @react-types/color@3.0.0-beta.24
- @react-types/combobox@3.11.0
- @react-types/contextualhelp@3.2.9
- @react-types/datepicker@3.7.3
- @react-types/dialog@3.5.9
- @react-types/divider@3.3.8
- @react-types/form@3.7.3
- @react-types/grid@3.2.5
- @react-types/illustratedmessage@3.3.8
- @react-types/image@3.4.0
- @react-types/label@3.9.2
- @react-types/layout@3.3.14
- @react-types/link@3.5.4
- @react-types/list@3.2.16
- @react-types/listbox@3.4.8
- @react-types/menu@3.9.8
- @react-types/meter@3.4.0
- @react-types/numberfield@3.8.2
- @react-types/overlays@3.8.6
- @react-types/progress@3.5.3
- @react-types/provider@3.8.0
- @react-types/radio@3.8.0
- @react-types/searchfield@3.5.4
- @react-types/select@3.9.3
- @react-types/shared@3.23.0
- @react-types/slider@3.7.2
- @react-types/statuslight@3.3.8
- @react-types/switch@3.5.2
- @react-types/table@3.9.4
- @react-types/tabs@3.3.6
- @react-types/text@3.3.8
- @react-types/textfield@3.9.2
- @react-types/tooltip@3.4.8
- @react-types/view@3.4.8
- @react-types/well@3.3.8
- @spectrum-icons/color@3.5.12
- @spectrum-icons/express@3.0.0-alpha.16
- @spectrum-icons/illustrations@3.6.12
- @spectrum-icons/ui@3.6.6
- @spectrum-icons/workflow@4.2.11
- @react-aria/optimize-locales-plugin@1.1.0
- @react-aria/parcel-resolver-optimize-locales@1.1.0
- react-aria@3.33.0
- react-aria-components@1.2.0
- react-stately@3.31.0
- tailwindcss-react-aria-components@1.1.2