September 7, 2023 Release
In this release, we’re moving React Aria Components from alpha to beta! With this milestone, we’ve made some API updates based on early feedback, introduced a new Tailwind CSS plugin, and updated the documentation with improved content and organization.
This release also deprecates the validationState
prop in many components and replaces it with an isInvalid
boolean prop. It also includes fixes for an infinite resize loop bug in ButtonGroup
, a press handling bug on certain Android devices, and new documentation for our pre-release components.
As always, huge thanks to all of our contributors!
Updates to React Aria Components#
React Aria Components includes the following API changes:
- All states are now exposed on DOM elements as data attributes. Previously, some states were documented as ARIA attributes or native CSS pseudo classes, but this caused some confusion. Switching to data attributes for all states ensures API consistency and allows us to handle future ARIA pattern changes more easily without breaking your styles. See the Styling section in each component’s documentation for the full list of supported states.
- Breadcrumbs now uses the
<Breadcrumb>
component instead of<Item>
. In addition, it does not include a<nav>
element by default anymore. The<ol>
element is now the root element. - All components with validation support moved from the
validationState
prop to theisInvalid
prop. This is exposed asdata-invalid
instead ofdata-validation-state
as well.
In addition to the above API changes, we also released the following improvements:
- New Styling page in the docs that gives an overview of the various methods to style React Aria Components, including states, render props, slots, and animation with CSS keyframes and Framer Motion.
- A new Tailwind CSS plugin that gives you shorter modifier names and autocomplete for the states of React Aria Components.
- Our collection components now render on the server during SSR.
- Updates to the documentation of every component:
- The anatomy section has been expanded to include improved visuals and the corresponding JSX structure for every element and supported slot within a component.
- The content has been reorganized into sub sections and ordered to place reference material at the end of the page, and move more examples toward the top.
- The “Advanced Customization” section has been updated to document the public contexts provided and consumed by each component, and how you can use these to create your own higher level patterns.
- Documentation has been grouped into sections in the left navigation for Components, Hooks, Interactions, and Utilities to make it easier to find what you’re looking for.
Thanks to everyone who tried out React Aria Components while it was in alpha! Your feedback has been extremely valuable as we iterate toward a full release.
Validation state deprecation#
In React Spectrum and React Aria hooks, we have deprecated the validationState
prop in many components, and replaced it with the isInvalid
boolean prop. Most components do not include a visual “valid” state, so the previous API was confusing. For React Spectrum, field-like components such as TextField
and ComboBox
continue to support the validationState
prop to display a green checkmark, but other components such as CheckboxGroup
now use isInvalid
instead. In React Aria, all hooks have migrated to isInvalid
. The old API will continue to work in both but is marked as deprecated, and you can update in your own time.
Fixes#
- Add checks to prevent event bubbling in
useDatePickerGroup
- @yihuiliao - PR - Do not close overlays on blur if relatedTarget is null - @devongovett - PR
- Removing
aria-disabled
so TalkBack users can open the context dialog - @LFDanLu - PR - Update translations for
Actionbar
,Button
,Dropzone
,Menu
- @rgeraghty - PR - Replace
validationState
withisInvalid
- @devongovett - PR - Fix
MenuItem
to chain providedonClose
pressed - @LFDanLu - PR - Add check to detect Android pointer type as touch - @yihuiliao - PR
- Update hidden textfield in
Select
to not be focusable - @pr7prashant - PR - Keep focus on last pressed column header in
TableView
when loading - @jluyau - PR - Fix
RadioGroup
lost roving tab index - @snowystinger - PR - Fix missing peerDependency on react-dom - @wojtekmaj - PR
- Fix
ButtonGroup
infinite update loop - @snowystinger - PR - Make all submenus close upon user interact outside - @LFDanLu - PR
Docs#
- Remove unnecessary props from docs - @snowystinger - PR
- Move
ContextualHelpTrigger
docs to Menu - @LFDanLu - PR - Add Unavailable Menu Item docs - @ktabors - PR
- Fix
Popover
tips in FF - @snowystinger - PR
Under construction#
Fixes to pre-released components are listed below. Please feel free to try them out, and report any issues you encounter.
- Unavailable Menu Items (beta)
- Fix Unavailable Menu Item's Popover positioning - @reidbarber - PR
- DropZone (alpha)
- React Spectrum
DropZone
- @yihuiliao - PR
- React Spectrum
React Aria Components (Beta)#
- Migrate all RAC render props to data attributes - @yihuiliao - PR
- Update Tabs navigation for arrow keys - @mariareedstrom - PR
- Add support for SSR to collections - @devongovett - PR
- Add Tailwind plugin for React Aria Component states - @reidbarber - PR
- Add docs for contexts in React Aria Components - @devongovett - PR
- Fix some colors in docs - @snowystinger - PR
- Table - allow passing render prop to Cell - @nirtamir2 - PR
- Fix Modal in SSR - @snowystinger - PR
- Reorganize React Aria Components docs - @devongovett - PR
- Add data-selection-mode attribute - @devongovett - PR
- Update Breadcrumbs API - @devongovett - PR
- Add missing variants to Tailwind plugin - @devongovett - PR
- Add styling guide for React Aria Components - @devongovett - PR
- Update Table, GridList, and ListBox anatomy diagrams - @devongovett - PR
Released packages#
- @adobe/react-spectrum@3.30.0
- @internationalized/date@3.5.0
- @react-aria/accordion@3.0.0-alpha.21
- @react-aria/actiongroup@3.6.2
- @react-aria/aria-modal-polyfill@3.7.5
- @react-aria/autocomplete@3.0.0-alpha.20
- @react-aria/breadcrumbs@3.5.5
- @react-aria/button@3.8.2
- @react-aria/calendar@3.5.0
- @react-aria/checkbox@3.11.0
- @react-aria/color@3.0.0-beta.24
- @react-aria/combobox@3.6.4
- @react-aria/datepicker@3.7.0
- @react-aria/dialog@3.5.5
- @react-aria/dnd@3.4.1
- @react-aria/focus@3.14.1
- @react-aria/grid@3.8.2
- @react-aria/gridlist@3.6.0
- @react-aria/i18n@3.8.2
- @react-aria/interactions@3.18.0
- @react-aria/label@3.7.0
- @react-aria/landmark@3.0.0-beta.4
- @react-aria/link@3.5.4
- @react-aria/listbox@3.10.2
- @react-aria/menu@3.10.2
- @react-aria/meter@3.4.5
- @react-aria/numberfield@3.8.0
- @react-aria/overlays@3.17.0
- @react-aria/progress@3.4.5
- @react-aria/radio@3.8.0
- @react-aria/searchfield@3.5.5
- @react-aria/select@3.12.1
- @react-aria/selection@3.16.2
- @react-aria/separator@3.3.5
- @react-aria/slider@3.7.0
- @react-aria/spinbutton@3.5.2
- @react-aria/ssr@3.8.0
- @react-aria/switch@3.5.4
- @react-aria/table@3.12.0
- @react-aria/tabs@3.7.0
- @react-aria/tag@3.1.2
- @react-aria/textfield@3.12.0
- @react-aria/toast@3.0.0-beta.4
- @react-aria/toggle@3.8.0
- @react-aria/tooltip@3.6.2
- @react-aria/utils@3.20.0
- @react-aria/virtualizer@3.9.2
- @react-aria/visually-hidden@3.8.4
- @react-spectrum/accordion@3.0.0-alpha.23
- @react-spectrum/actionbar@3.2.0
- @react-spectrum/actiongroup@3.9.2
- @react-spectrum/autocomplete@3.0.0-alpha.21
- @react-spectrum/avatar@3.0.4
- @react-spectrum/badge@3.1.5
- @react-spectrum/breadcrumbs@3.8.2
- @react-spectrum/button@3.13.0
- @react-spectrum/buttongroup@3.6.5
- @react-spectrum/calendar@3.4.0
- @react-spectrum/card@3.0.0-alpha.22
- @react-spectrum/checkbox@3.8.0
- @react-spectrum/color@3.0.0-beta.25
- @react-spectrum/combobox@3.10.1
- @react-spectrum/contextualhelp@3.6.2
- @react-spectrum/datepicker@3.7.1
- @react-spectrum/dialog@3.8.2
- @react-spectrum/divider@3.5.5
- @react-spectrum/dnd@3.3.2
- @react-spectrum/form@3.6.5
- @react-spectrum/icon@3.7.5
- @react-spectrum/illustratedmessage@3.4.5
- @react-spectrum/image@3.4.5
- @react-spectrum/inlinealert@3.1.0
- @react-spectrum/label@3.14.0
- @react-spectrum/labeledvalue@3.1.5
- @react-spectrum/layout@3.5.5
- @react-spectrum/link@3.5.5
- @react-spectrum/list@3.6.2
- @react-spectrum/listbox@3.11.2
- @react-spectrum/menu@3.14.0
- @react-spectrum/meter@3.4.5
- @react-spectrum/numberfield@3.7.1
- @react-spectrum/overlays@5.4.0
- @react-spectrum/picker@3.12.0
- @react-spectrum/progress@3.6.2
- @react-spectrum/provider@3.8.2
- @react-spectrum/radio@3.6.0
- @react-spectrum/searchfield@3.7.5
- @react-spectrum/slider@3.6.1
- @react-spectrum/statuslight@3.5.5
- @react-spectrum/switch@3.4.5
- @react-spectrum/table@3.11.1
- @react-spectrum/tabs@3.7.2
- @react-spectrum/tag@3.1.2
- @react-spectrum/text@3.4.5
- @react-spectrum/textfield@3.10.5
- @react-spectrum/theme-dark@3.5.5
- @react-spectrum/theme-default@3.5.5
- @react-spectrum/theme-express@3.0.0-alpha.7
- @react-spectrum/theme-light@3.4.5
- @react-spectrum/toast@3.0.0-beta.4
- @react-spectrum/tooltip@3.5.4
- @react-spectrum/utils@3.10.2
- @react-spectrum/view@3.6.2
- @react-spectrum/well@3.4.5
- @react-stately/calendar@3.4.0
- @react-stately/checkbox@3.5.0
- @react-stately/collections@3.10.1
- @react-stately/color@3.4.2
- @react-stately/combobox@3.7.0
- @react-stately/data@3.10.2
- @react-stately/datepicker@3.7.0
- @react-stately/dnd@3.2.4
- @react-stately/grid@3.8.1
- @react-stately/layout@3.13.1
- @react-stately/list@3.9.2
- @react-stately/menu@3.5.5
- @react-stately/numberfield@3.6.1
- @react-stately/overlays@3.6.2
- @react-stately/radio@3.9.0
- @react-stately/searchfield@3.4.5
- @react-stately/select@3.5.4
- @react-stately/selection@3.13.4
- @react-stately/slider@3.4.2
- @react-stately/table@3.11.1
- @react-stately/tabs@3.6.0
- @react-stately/toggle@3.6.2
- @react-stately/tooltip@3.4.4
- @react-stately/tree@3.7.2
- @react-stately/virtualizer@3.6.2
- @react-types/accordion@3.0.0-alpha.16
- @react-types/actionbar@3.1.2
- @react-types/actiongroup@3.4.4
- @react-types/autocomplete@3.0.0-alpha.16
- @react-types/avatar@3.0.2
- @react-types/badge@3.1.4
- @react-types/breadcrumbs@3.6.2
- @react-types/button@3.8.0
- @react-types/buttongroup@3.3.4
- @react-types/calendar@3.4.0
- @react-types/card@3.0.0-alpha.18
- @react-types/checkbox@3.5.1
- @react-types/color@3.0.0-beta.19
- @react-types/combobox@3.8.0
- @react-types/contextualhelp@3.2.5
- @react-types/datepicker@3.6.0
- @react-types/dialog@3.5.5
- @react-types/divider@3.3.4
- @react-types/form@3.5.3
- @react-types/grid@3.2.1
- @react-types/illustratedmessage@3.3.4
- @react-types/image@3.3.4
- @react-types/label@3.8.0
- @react-types/layout@3.3.10
- @react-types/link@3.4.5
- @react-types/list@3.2.6
- @react-types/listbox@3.4.4
- @react-types/menu@3.9.4
- @react-types/meter@3.3.4
- @react-types/numberfield@3.6.0
- @react-types/overlays@3.8.2
- @react-types/progress@3.4.3
- @react-types/provider@3.6.4
- @react-types/radio@3.5.1
- @react-types/searchfield@3.5.0
- @react-types/select@3.8.3
- @react-types/shared@3.20.0
- @react-types/slider@3.6.1
- @react-types/statuslight@3.3.4
- @react-types/switch@3.4.1
- @react-types/table@3.8.1
- @react-types/tabs@3.3.2
- @react-types/text@3.3.4
- @react-types/textfield@3.8.0
- @react-types/tooltip@3.4.4
- @react-types/view@3.4.4
- @react-types/well@3.3.4
- @spectrum-icons/color@3.5.5
- @spectrum-icons/express@3.0.0-alpha.9
- @spectrum-icons/illustrations@3.6.5
- @spectrum-icons/ui@3.5.5
- @spectrum-icons/workflow@4.2.4
- react-aria@3.28.0
- react-aria-components@1.0.0-beta.0
- react-stately@3.26.0
- tailwindcss-react-aria-components@1.0.0-beta.0