Skip to content

Commit 8ab651b

Browse files
committed
Merge branch 'main' of github.com:adobe/react-spectrum
2 parents a6999bd + 77f321f commit 8ab651b

File tree

3 files changed

+431
-1
lines changed

3 files changed

+431
-1
lines changed
Lines changed: 303 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,303 @@
1+
{/* Copyright 2026 Adobe. All rights reserved.
2+
This file is licensed to you under the Apache License, Version 2.0 (the "License");
3+
you may not use this file except in compliance with the License. You may obtain a copy
4+
of the License at http://www.apache.org/licenses/LICENSE-2.0
5+
Unless required by applicable law or agreed to in writing, software distributed under
6+
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
7+
OF ANY KIND, either express or implied. See the License for the specific language
8+
governing permissions and limitations under the License. */}
9+
10+
import {InstallCommand} from '../../../src/InstallCommand';
11+
12+
import {Layout} from '../../../src/Layout';
13+
export default Layout;
14+
15+
import docs from 'docs:@react-spectrum/s2';
16+
17+
export const hideNav = true;
18+
export const section = 'Releases';
19+
export const tags = ['release', 'React Aria'];
20+
export const date = 'April 14, 2026';
21+
export const title = 'v1.17.0';
22+
export const description = 'This release brings support for several long-awaited features, including support for expandable rows in Table, window scrolling in Virtualizer, and horizontally virtualized GridLists and ListBoxes. We’ve also significantly reduced our dependencies making upgrades easier, builds faster, and tree shaking more effective!';
23+
export const isSubpage = true;
24+
25+
# v1.17.0
26+
27+
This release brings support for several long-awaited features, including support for [expandable rows](../Table#expandable-rows) in Table, and window scrolling in [Virtualizer](../Virtualizer). Expandable rows enable macOS Finder-like file trees by designating a `treeColumn` and rendering a chevron button within its cells. Window scrolling in Virtualizer enables virtualized collections to automatically scroll with the rest of the page. We've also added support for horizontally virtualized GridLists and ListBoxes! Finally, we significantly improved how we manage our dependencies – see below for details.
28+
29+
As always, many thanks to all of our contributors for all of your feedback, features, and fixes – special shout out to [@nwidynski](https://github.com/nwidynski)!
30+
31+
## Dependency consolidation
32+
33+
React Aria Components now has 90% fewer dependencies! To accomplish this, we have consolidated all of our individual hook packages (e.g. `@react-aria/button`, `@react-stately/table`) into the `react-aria` and `react-stately` monopackages. Our packages now also support sub-path imports, e.g. `react-aria-components/Button`. This means easier upgrades with fewer dependencies to manage, simplified discovery of child components, faster builds, more effective tree shaking, and improved micro-frontend support.
34+
35+
### Using sub-paths
36+
37+
In addition to the main package entry point, each component is now available under a sub-path. These sub-paths match the name of the main component, and include all child components used within it. For example, `react-aria-components/Menu` includes `Menu`, `MenuItem`, `Popover`, etc.
38+
39+
```diff
40+
-import {Menu, MenuItem, Popover} from 'react-aria-components';
41+
+import {Menu, MenuItem, Popover} from 'react-aria-components/Menu';
42+
```
43+
44+
Benefits of using sub-paths include:
45+
46+
* Smaller bundles without relying on tree-shaking
47+
* Faster builds and test runs (only need to parse code you use instead of the entire library)
48+
* Improved discoverability of child components. TypeScript autocomplete shows you only the components typically used together.
49+
50+
Our documentation has been updated to show sub-paths by default, but you can continue using the main entry point if you prefer.
51+
52+
### Migration
53+
54+
If you are currently using individual hook packages such as `@react-aria/button`, you can migrate to monopackage imports using our `use-monopackages` codemod. This will use the main package entry point (e.g. `react-aria`), not sub-paths.
55+
56+
<InstallCommand isCommand pkg="@react-spectrum/codemods" flags="use-monopackages --path /path/to/src" />
57+
58+
If you would like to migrate to sub-path imports, run the use-subpaths codemod.
59+
60+
<InstallCommand isCommand pkg="@react-spectrum/codemods" flags="use-subpaths --path /path/to/src" />
61+
62+
### Backwards compatibility
63+
64+
We have worked hard to implement this change in a backward compatible way, but there are a few things to be aware of:
65+
66+
* Individual packages like `@react-aria/button` still work, but they now re-export from the monopackage (e.g. `react-aria`) instead of the other way around. You can continue using these packages, but new exports will not be added. Migrate to the mono-package using our codemod at your convenience.
67+
* We have gone out of our way to continue supporting old tools like webpack 4 and jest < 28, which don't support the package.json `exports` field and the .mjs extension. We will drop support for these tools in a future major version. We recommend upgrading as soon as possible.
68+
* Due to a [TypeScript issue](https://github.com/microsoft/TypeScript/issues/38592), types that were intentionally not exported were still exposed. Using these is no longer possible. If you were using any of these types, please open an issue on GitHub.
69+
* If you were relying on individual packages like `@react-aria/button` being installed by the monopackage without declaring them in your own package.json, this will no longer occur. Please add them as dependencies or migrate to using the monopackage exports.
70+
71+
## Changelog
72+
73+
### General Changes
74+
* Support CSP nonces on injected style elements - [@costajohnt](https://github.com/costajohnt) - [PR](https://github.com/adobe/react-spectrum/pull/9655), [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9910)
75+
* Fix global event attachment timing for `usePress` and `useMove` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9749)
76+
### Autocomplete
77+
* Allow moving into an Autocomplete-wrapped two-dimensional grid with `ArrowLeft` and `ArrowRight` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9755)
78+
* Fix Autocomplete focus styles when clicking the input after virtual focus - [@hanityx](https://github.com/hanityx) - [PR](https://github.com/adobe/react-spectrum/pull/9767)
79+
### Collections
80+
* Support the full collection in SelectionManager for `selectedKeys="all"` behavior - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9621)
81+
* Fix focus restoration in collections when deleting items - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9545)
82+
### ColorPicker
83+
* Commit new color value when clicking outside the dialog - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9768)
84+
### ColorWheel
85+
* Prevent ColorWheel Loupe from getting stuck - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9862)
86+
### ComboBox
87+
* Add a generic type parameter to `useComboBoxState` for the `ComboBoxState` return type - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9782)
88+
* Use stable `selectedKeys` in ComboBox to prevent an infinite loop - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9781)
89+
* Accept `readonly` arrays for multiple-selection ComboBox values - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/9741)
90+
* Pass the selection mode generic through to ComboBox `validate` types - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/9795)
91+
* Allow `null` in `validate` for single selection - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/9742)
92+
* Prevent extra `onSelectionChange` calls - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9729)
93+
* Fix required validation for multi-select ComboBox - [@Nawaz-B-04](https://github.com/Nawaz-B-04) - [PR](https://github.com/adobe/react-spectrum/pull/9792)
94+
* Add `isReadOnly` render props - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/9892)
95+
### Date and Time
96+
* Fix an SSR hydration mismatch from `Date.now`-based private property keys - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9787)
97+
### Dialog
98+
* Warn in development when Dialog has no accessible title - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/9819), [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9910)
99+
### Drag and Drop
100+
* Prevent repeated `useDrop` enter and exit events for portal children in drag and drop - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9844)
101+
### FocusScope
102+
* Fix focus behavior for inputs inside FocusScope - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/8903)
103+
### Form
104+
* Expose `elementType` on FieldError to control the host element - [@fellipeutaka](https://github.com/fellipeutaka) - [PR](https://github.com/adobe/react-spectrum/pull/9759)
105+
* Skip resetting form fields when the reset event is canceled - [@nanto](https://github.com/nanto) - [PR](https://github.com/adobe/react-spectrum/pull/7603)
106+
### GridList
107+
* Add an `orientation` prop to GridList - [@essandhu](https://github.com/essandhu) - [PR](https://github.com/adobe/react-spectrum/pull/9785), [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9843)
108+
* Add `orientation="horizontal"` support - [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/8533), [PR](https://github.com/adobe/react-spectrum/pull/9854)
109+
### Listbox
110+
* Add `orientation="horizontal"` support - [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/8533), [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9843)
111+
* Remove the macOS ARIA label workaround in Listbox `useOption` - [@cbodin](https://github.com/cbodin) - [PR](https://github.com/adobe/react-spectrum/pull/9736)
112+
### Modal
113+
* Prevent modal from reopening by settling canceled animation promises - [@christophmeise](https://github.com/christophmeise) - [PR](https://github.com/adobe/react-spectrum/pull/9772)
114+
* Prevent hover styles from sticking after closing a Modal with touch on Safari iOS 26 - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9715)
115+
* Expose `--page-width` and `--visual-viewport-width` - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/9318)
116+
* Use an attribute presence check for `data-react-aria-top-layer` in `MutationObserver` - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/9763)
117+
### NumberField
118+
* Add `isReadOnly` render props - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/9892)
119+
* Wrap `commit()` in `flushSync` when `Enter` is pressed so the value flushes before form submit - [@tariq-r](https://github.com/tariq-r) - [PR](https://github.com/adobe/react-spectrum/pull/9683)
120+
* Preserve validation errors on blur when the value doesn't change - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9798)
121+
* Fix various bugs in NumberParser - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/8592)
122+
* Add `commitBehavior` to NumberField - [@will-stone](https://github.com/will-stone) - [PR](https://github.com/adobe/react-spectrum/pull/9679)
123+
### RangeCalendar
124+
* Add `commitBehavior` to customize behavior when the pointer is released outside RangeCalendar - [@Jiiieeef](https://github.com/Jiiieeef) - [PR](https://github.com/adobe/react-spectrum/pull/8899), [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9855), [PR](https://github.com/adobe/react-spectrum/pull/9910)
125+
### Select
126+
* Add `shouldCloseOnSelect` to Select - [@acr92](https://github.com/acr92) - [PR](https://github.com/adobe/react-spectrum/pull/8733)
127+
* Avoid an empty option in hidden Select markup - [@sonsu-lee](https://github.com/sonsu-lee) - [PR](https://github.com/adobe/react-spectrum/pull/9677)
128+
### Table
129+
* Add support for expandable rows - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/9740)
130+
* Fix keyboard drag and drop navigation in expandable rows - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9773)
131+
* Honor minimum width set by the Table column menu - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9838)
132+
* Prevent double focus rings in Table when clicking expand buttons - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9861)
133+
* Use `min-width` so Firefox respects applied Table column widths - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9871)
134+
* Automatically focus newly added rows after a drop - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9873)
135+
* Update keyboard navigation to improve navigation speed with expandable rows - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/9842)
136+
### Tabs
137+
* Default `shouldSelectOnPressUp` to true in Tabs when an item is a link - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9827)
138+
### TagGroup
139+
* Apply hover state to TagGroup items with an `href` - [@essandhu](https://github.com/essandhu) - [PR](https://github.com/adobe/react-spectrum/pull/9750)
140+
* Add `onAction` prop - [@onx2](https://github.com/onx2) - [PR](https://github.com/adobe/react-spectrum/pull/9222), [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/9910)
141+
### Tree
142+
* Improve accessibility for TreeSection - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/9746)
143+
* Export `TreeEmptyStateRenderProps` - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9783)
144+
* Update keyboard navigation to improve navigation speed - [@Sidnioulz](https://github.com/Sidnioulz) - [PR](https://github.com/adobe/react-spectrum/pull/9547)
145+
* Update Tree drag and drop focus behavior - [@chirokas](https://github.com/chirokas) - [PR](https://github.com/adobe/react-spectrum/pull/9751)
146+
* Fix inserting items into a child node with `useTreeData` under React Strict Mode - [@chirokas](https://github.com/chirokas) - [PR](https://github.com/adobe/react-spectrum/pull/9824)
147+
### Virtualizer
148+
* Automatically bind the Virtualizer visible rectangle to the window viewport - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/9784), [PR](https://github.com/adobe/react-spectrum/pull/9902)
149+
* Lay out Virtualizer items using a consistent size - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/9889)
150+
151+
## Released packages
152+
153+
```
154+
- @internationalized/date@3.12.1
155+
- @internationalized/message@3.1.9
156+
- @internationalized/number@3.6.6
157+
- @internationalized/string-compiler@3.4.0
158+
- @internationalized/string@3.2.8
159+
- @react-aria/actiongroup@3.8.0
160+
- @react-aria/aria-modal-polyfill@3.8.0
161+
- @react-aria/autocomplete@3.0.0-rc.7
162+
- @react-aria/breadcrumbs@3.6.0
163+
- @react-aria/button@3.15.0
164+
- @react-aria/calendar@3.10.0
165+
- @react-aria/checkbox@3.17.0
166+
- @react-aria/collections@3.1.0
167+
- @react-aria/color@3.2.0
168+
- @react-aria/combobox@3.16.0
169+
- @react-aria/datepicker@3.17.0
170+
- @react-aria/dialog@3.6.0
171+
- @react-aria/disclosure@3.2.0
172+
- @react-aria/dnd@3.12.0
173+
- @react-aria/example-theme@1.1.0
174+
- @react-aria/focus@3.22.0
175+
- @react-aria/form@3.2.0
176+
- @react-aria/grid@3.15.0
177+
- @react-aria/gridlist@3.15.0
178+
- @react-aria/i18n@3.13.0
179+
- @react-aria/interactions@3.28.0
180+
- @react-aria/label@3.8.0
181+
- @react-aria/landmark@3.1.0
182+
- @react-aria/link@3.9.0
183+
- @react-aria/listbox@3.16.0
184+
- @react-aria/live-announcer@3.5.0
185+
- @react-aria/menu@3.22.0
186+
- @react-aria/meter@3.5.0
187+
- @react-aria/numberfield@3.13.0
188+
- @react-aria/overlays@3.32.0
189+
- @react-aria/progress@3.5.0
190+
- @react-aria/radio@3.13.0
191+
- @react-aria/searchfield@3.9.0
192+
- @react-aria/select@3.18.0
193+
- @react-aria/selection@3.28.0
194+
- @react-aria/separator@3.5.0
195+
- @react-aria/slider@3.9.0
196+
- @react-aria/spinbutton@3.8.0
197+
- @react-aria/ssr@3.10.0
198+
- @react-aria/steplist@3.0.0-alpha.26
199+
- @react-aria/switch@3.8.0
200+
- @react-aria/table@3.18.0
201+
- @react-aria/tabs@3.12.0
202+
- @react-aria/tag@3.9.0
203+
- @react-aria/test-utils@1.0.0-beta.3
204+
- @react-aria/textfield@3.19.0
205+
- @react-aria/toast@3.1.0
206+
- @react-aria/toggle@3.13.0
207+
- @react-aria/toolbar@3.0.0-beta.25
208+
- @react-aria/tooltip@3.10.0
209+
- @react-aria/tree@3.2.0
210+
- @react-aria/utils@3.34.0
211+
- @react-aria/virtualizer@4.2.0
212+
- @react-aria/visually-hidden@3.9.0
213+
- @react-stately/autocomplete@3.0.0-beta.5
214+
- @react-stately/calendar@3.10.0
215+
- @react-stately/checkbox@3.8.0
216+
- @react-stately/collections@3.13.0
217+
- @react-stately/color@3.10.0
218+
- @react-stately/combobox@3.14.0
219+
- @react-stately/data@3.16.0
220+
- @react-stately/datepicker@3.17.0
221+
- @react-stately/disclosure@3.1.0
222+
- @react-stately/dnd@3.8.0
223+
- @react-stately/flags@3.2.0
224+
- @react-stately/form@3.3.0
225+
- @react-stately/grid@3.12.0
226+
- @react-stately/layout@4.7.0
227+
- @react-stately/list@3.14.0
228+
- @react-stately/menu@3.10.0
229+
- @react-stately/numberfield@3.12.0
230+
- @react-stately/overlays@3.7.0
231+
- @react-stately/radio@3.12.0
232+
- @react-stately/searchfield@3.6.0
233+
- @react-stately/select@3.10.0
234+
- @react-stately/selection@3.21.0
235+
- @react-stately/slider@3.8.0
236+
- @react-stately/steplist@3.0.0-alpha.22
237+
- @react-stately/table@3.16.0
238+
- @react-stately/tabs@3.9.0
239+
- @react-stately/toast@3.2.0
240+
- @react-stately/toggle@3.10.0
241+
- @react-stately/tooltip@3.6.0
242+
- @react-stately/tree@3.10.0
243+
- @react-stately/utils@3.12.0
244+
- @react-stately/virtualizer@4.5.0
245+
- @react-types/actionbar@3.2.0
246+
- @react-types/actiongroup@3.5.0
247+
- @react-types/autocomplete@3.0.0-alpha.39
248+
- @react-types/avatar@3.1.0
249+
- @react-types/badge@3.2.0
250+
- @react-types/breadcrumbs@3.8.0
251+
- @react-types/button@3.16.0
252+
- @react-types/buttongroup@3.4.0
253+
- @react-types/calendar@3.9.0
254+
- @react-types/card@3.0.0-alpha.44
255+
- @react-types/checkbox@3.11.0
256+
- @react-types/color@3.2.0
257+
- @react-types/combobox@3.15.0
258+
- @react-types/contextualhelp@3.3.0
259+
- @react-types/datepicker@3.14.0
260+
- @react-types/dialog@3.6.0
261+
- @react-types/divider@3.4.0
262+
- @react-types/form@3.8.0
263+
- @react-types/grid@3.4.0
264+
- @react-types/illustratedmessage@3.4.0
265+
- @react-types/image@3.6.0
266+
- @react-types/label@3.10.0
267+
- @react-types/layout@3.4.0
268+
- @react-types/link@3.7.0
269+
- @react-types/list@3.3.0
270+
- @react-types/listbox@3.8.0
271+
- @react-types/menu@3.11.0
272+
- @react-types/meter@3.5.0
273+
- @react-types/numberfield@3.9.0
274+
- @react-types/overlays@3.10.0
275+
- @react-types/progress@3.6.0
276+
- @react-types/provider@3.9.0
277+
- @react-types/radio@3.10.0
278+
- @react-types/searchfield@3.7.0
279+
- @react-types/select@3.13.0
280+
- @react-types/shared@3.34.0
281+
- @react-types/slider@3.9.0
282+
- @react-types/statuslight@3.4.0
283+
- @react-types/switch@3.6.0
284+
- @react-types/table@3.14.0
285+
- @react-types/tabs@3.4.0
286+
- @react-types/text@3.4.0
287+
- @react-types/textfield@3.13.0
288+
- @react-types/tooltip@3.6.0
289+
- @react-types/view@3.5.0
290+
- @react-types/well@3.4.0
291+
- @spectrum-icons/color@3.6.0
292+
- @spectrum-icons/express@3.0.0-alpha.34
293+
- @spectrum-icons/illustrations@3.7.0
294+
- @spectrum-icons/ui@3.7.0
295+
- @spectrum-icons/workflow@4.3.0
296+
- @react-aria/optimize-locales-plugin@1.2.0
297+
- @react-aria/parcel-resolver-optimize-locales@1.3.0
298+
- @react-aria/mcp@1.1.0
299+
- react-aria@3.48.0
300+
- react-aria-components@1.17.0
301+
- react-stately@3.46.0
302+
- tailwindcss-react-aria-components@2.1.0
303+
```

0 commit comments

Comments
 (0)