From 849ee14bb5678e8e85acd4f6531ece3059aa9214 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Mon, 27 Jul 2026 21:06:46 -0700 Subject: [PATCH 01/18] skip over ai pacakge --- scripts/changelog.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/changelog.js b/scripts/changelog.js index 2bce12dfc9b..f9ec64d239d 100644 --- a/scripts/changelog.js +++ b/scripts/changelog.js @@ -43,6 +43,11 @@ function packageToLibrary(name) { if (name === '@react-spectrum/s2') { return 'Spectrum 2'; } + // @react-spectrum/ai has no release doc set yet — collected into its own + // bucket and console-logged only (like v3), not written to a file. + if (name === '@react-spectrum/ai') { + return 'AI'; + } // V3 has no LIBRARY_CONFIG entry. Its commits are collected but only printed // as a warning, never written to a file. See the v3Bucket handling at the end of run(). if (name === '@adobe/react-spectrum' || name.startsWith('@react-spectrum/')) { @@ -346,4 +351,17 @@ async function run() { } console.warn(); } + + // Handle commits in @react-spectrum/ai + let aiBucket = commitsByLibrary.get('AI'); + if (aiBucket && aiBucket.size > 0) { + console.warn( + `\nℹ ${aiBucket.size} @react-spectrum/ai commit(s) were not written to a file. Review them manually if needed:\n` + ); + let sorted = [...aiBucket.values()].sort((a, b) => (a[1] < b[1] ? -1 : 1)); + for (let commit of sorted) { + console.warn(` ${commit[3]}`); + } + console.warn(); + } } From 43792819b1f55a6514a11b6d2b9eaff78586afe7 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Mon, 27 Jul 2026 21:06:56 -0700 Subject: [PATCH 02/18] initialize release notes --- .../pages/react-aria/releases/v1-20-0.mdx | 168 ++++++++++++++++++ .../dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 84 +++++++++ 2 files changed, 252 insertions(+) create mode 100644 packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx create mode 100644 packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx new file mode 100644 index 00000000000..30981796e52 --- /dev/null +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -0,0 +1,168 @@ +{/* Copyright 2026 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. */} + +import {InstallCommand} from '../../../src/InstallCommand'; + +import {Layout} from '../../../src/Layout'; +export default Layout; + +import docs from 'docs:@react-spectrum/s2'; + +export const hideNav = true; +export const section = 'Releases'; +export const tags = ['release', 'React Aria']; +export const date = 'July 27, 2026'; +export const title = 'v1.21.0'; +export const description = 'This release adds three new components — PreviewTrigger, TokenField, and useContextMenu — along with keyboard shortcut support via useKeyboard and context menu support for MenuTrigger, plus numerous bug fixes across Table, ComboBox, DatePicker, and more.'; +export const isSubpage = true; + +# v1.21.0 + +This release introduces [PreviewTrigger](../PreviewTrigger), a new component for showing a non-modal preview popover when hovering or focusing a link. It also adds [TokenField](../TokenField) to React Aria Components for building tag inputs, mention inputs, and AI prompt fields with inline tokens, and [useContextMenu](../useContextMenu), a new hook for native and keyboard-accessible context menus, which MenuTrigger can now use via `trigger="contextMenu"`. We've also added keyboard shortcut support through [useKeyboard](../useKeyboard), along with support for interactive components like textfields inside Table and GridList rows. As always, this release includes many bug fixes across Table, ComboBox, DatePicker, and other components — thanks to all our contributors! + +{/* Commits: 67 */} +## Changelog + +### General Changes +- Add dependency on `@internationalized/string` to react-aria-components so it installs correctly under strict package managers - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10226) + +{/* dropped: chore: Yarn upgrade [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9817) — internal tooling */} +{/* dropped: chore: Format with oxfmt [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10030) — internal tooling */} +{/* dropped: chore: Migrate from eslint to oxlint [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10049) — internal tooling */} +{/* dropped: use caret ranges in individual packages - Devon Govett (no PR link available) — internal tooling */} +{/* dropped: update yarn lock - Devon Govett (no PR link available) — internal tooling */} +{/* dropped: chore: remove orphaned intl ts-ignore comments [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10148) — internal tooling */} +{/* dropped: chore: Expose keyboardNavigationBehavior="tab" in S2 [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10206) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10195) */} +{/* dropped: chore: make sure Tree keyboard navigation docs example renders fully on small screens [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10214) — internal tooling */} +{/* dropped: chore: fix React Aria home page "bring your styles" button in light mode [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10242) — internal tooling */} +{/* dropped: docs: clean up launch CTAs [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10240) — internal tooling */} +{/* dropped: chore: upgrade oxlint to 1.71.0 and enable react/react-compiler rule [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10203) — internal tooling */} +{/* dropped: chore: Tw animate update [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10201) — internal tooling */} +{/* dropped: Latest translations [@rgeraghty](https://github.com/rgeraghty) - [PR](https://github.com/adobe/react-spectrum/pull/10271) — internal tooling */} +{/* dropped: fix: stale merge [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10282) — internal tooling */} +{/* dropped: chore: Improve type detection and node contains logic for shadow dom [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10287) — internal tooling */} +{/* dropped: chore: Remove old react-aria-components docs [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10311) — internal tooling */} +{/* dropped: fix: run optimize-locales-plugin early in Vite [@wojtekmaj](https://github.com/wojtekmaj) - [PR](https://github.com/adobe/react-spectrum/pull/10304) — internal tooling */} +{/* dropped: fix: ios platform user agents [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10312) — internal tooling */} +{/* dropped: chore: simplifying keyboard navigation docs copy [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10338) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10159) */} +{/* dropped: chore: document useKeyboard shortcuts [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10192) — merged into above */} +{/* dropped: docs: New hook docs follow-up fixes [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10355) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10153) */} +{/* dropped: chore: update useKeyboard docs [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10346) — merged into above */} + +### Autocomplete +- Add inline completions example to Autocomplete documentation - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10205) + +### Breadcrumbs +- Avoid passing an empty string to the `href` attribute when it is undefined - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10286) + +### Checkbox +- Delegate label `keydown` handling to the native input for checkboxes so key events behave consistently - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) + +### Collections +- Add guide explaining how to update collection structure to documentation - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10232) +- Support collections in React canary and Next.js 16's app router - [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10323) + +### ComboBox +- Document `defaultFilter`'s default contains filter behavior - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10222) +- Accept a readonly array for controlled multiple ComboBox `value` - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/10290) + +### Date and Time +- Export `DayOfWeek` type from `@internationalized/date` - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10234) +- Clamp `Time` millisecond to a valid maximum of 999 - [@spokodev](https://github.com/spokodev) - [PR](https://github.com/adobe/react-spectrum/pull/10289) +- Resolve locales with an explicit script to language-script strings - [@stas-m2muchcoffee](https://github.com/stas-m2muchcoffee) - [PR](https://github.com/adobe/react-spectrum/pull/10268) + +### DatePicker +- Avoid stealing focus into a date segment from a `selectionchange` event in Firefox - [@doolse](https://github.com/doolse) - [PR](https://github.com/adobe/react-spectrum/pull/10260) + +### Dialog +- Add `aria-describedby` support for the `alertdialog` role - [@costajohnt](https://github.com/costajohnt) - [PR](https://github.com/adobe/react-spectrum/pull/9924) +- Pass the overlay id to `PopoverContext` in Dialog - [@albertdugba](https://github.com/albertdugba) - [PR](https://github.com/adobe/react-spectrum/pull/9807) + +### DragAndDrop +- Prefer the ancestor drop target over the nearest-by-distance target in DragManager - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10170) +- Prevent Android Chrome taps from being detected as a drag event - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10332) + +### DropZone +- Prevent focus from moving to DropZone when clicking its hidden file input - [@pradeep-ramola](https://github.com/pradeep-ramola) - [PR](https://github.com/adobe/react-spectrum/pull/10173) +- Fix hidden DropZone behavior so a new prop isn't required to work around it - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) + +### GridList +- Support textfields and other interactive components inside GridList rows - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10195) +- Support arrow key navigation into a row's children when `keyboardNavigationBehavior="tab"` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) + +### Link +- Add `onPressChange` prop to `useLink` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) + +### Menu +- Add `useContextMenu`, a new hook for native and keyboard-accessible context menus - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) + +### MenuTrigger +- Add `trigger="contextMenu"` support to MenuTrigger - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) + +### Meter +- Guard the percentage calculation against `NaN` when `min` equals `max` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10169) + +### Overlays +- Fix `ariaHideOutside` behavior inside a shadow DOM - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10288) +- Restore focus in `FocusScope` containment without scrolling the dialog into view - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10339) +- Add an `addGlobalScrollListener` utility and close overlays on scroll events inside a shadow DOM - [@pzaczkiewicz-athenahealth](https://github.com/pzaczkiewicz-athenahealth) - [PR](https://github.com/adobe/react-spectrum/pull/10188) + +### PreviewTrigger +- Add PreviewTrigger, a new component that composes a Link or other focusable element with a non-modal Popover that opens on hover, keyboard focus, and long press - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10243) + +### ProgressBar +- Guard the percentage calculation against `NaN` when `min` equals `max` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10169) + +### RadioGroup +- Delegate label `keydown` handling to the native input for radios so key events behave consistently - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) + +### react-aria-components +- Re-export `RenderProps`-related types from react-aria-components so downstream `.d.ts` builds can name them - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/9955) + +### Select +- Restore the default `type` for Select - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10361) + +### Switch +- Delegate label `keydown` handling to the native input for switches so key events behave consistently - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) + +### Table +- Support textfields and other interactive components inside Table rows - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10159) +- Floor fractional table column widths so columns don't overflow - [@ardittirana](https://github.com/ardittirana) - [PR](https://github.com/adobe/react-spectrum/pull/10238) +- Fix column resizing getting stuck after a press and hold - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10040) +- Fix table press and hold navigation - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10285) +- Restore focus without an infinite loop when no focusable row remains in `useGridState` - [@RobHannay](https://github.com/RobHannay) - [PR](https://github.com/adobe/react-spectrum/pull/10241) + +### TokenField +- Add TokenField to React Aria Components for building tag inputs, mention inputs, and AI prompt fields with inline tokens - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10318) +- Add `onKeyDown` and `onKeyUp` props to `useTokenField` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) + +{/* dropped: fix: TokenField RTL, IME composition, and range selection [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10273) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10318) */} + +### Tree +- Add `DEFAULT_SLOT` to `TreeItem`'s `CheckboxContext` so unslotted Checkboxes render - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10274) +- Prevent virtualized grid layouts from disappearing when hidden via `display: none` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10190) +- Export `TreeSectionProps` and `TreeHeaderProps` types - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) + +### useId +- Prevent `FinalizationRegistry` entries from accumulating on every re-render - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9853) + +### useKeyboard +- Add keyboard shortcut support to `useKeyboard` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200) +- Add new React Aria hooks documentation - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10153) +- Fix keyboard repeat events for navigation - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10322) + +### Virtualizer +- Make trackpad taps fire press events consistently - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10225) +- Add support for reversed virtualization, useful for chat-style scrolling views - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10258) + +## Released packages + +``` +[TODO: paste output of yarn bumpVersions here] +``` diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx new file mode 100644 index 00000000000..207bf96f4f0 --- /dev/null +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -0,0 +1,84 @@ +{/* Copyright 2026 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. */} + +import {InstallCommand} from '../../../src/InstallCommand'; + +import {Layout} from '../../../src/Layout'; +export default Layout; + +import docs from 'docs:@react-spectrum/s2'; + +export const hideNav = true; +export const section = 'Releases'; +export const tags = ['release', 'S2']; +export const date = 'July 27, 2026'; +export const title = 'v1.7.0'; +export const description = 'Adds a new SideNav component, context menu support for MenuTrigger, and interactive cell content in Table, along with fixes for Switch, DropZone, Toast, and TextArea.'; +export const isSubpage = true; + +# v1.7.0 + +This release introduces the new [SideNav](SideNav) component for building app navigation sidebars, adds `trigger="contextMenu"` support to [Menu](Menu)'s MenuTrigger, and lets [Table](TableView) cells hold interactive content like text fields. It also includes a `prose` style macro for rendering markdown-like content, several updates to the `@react-spectrum/ai` chat components, and fixes for Dialog, Switch, DropZone, Toast, and TextArea. + +{/* Commits: 16 */} +## Changelog + +### General Changes +- Fixes keyboard shortcut and event handlers so multiple handlers no longer interfere with each other's `stopPropagation` and `preventDefault` behavior - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200) +- Adds a `prose` style macro for styling semantic HTML elements like headings, paragraphs, and code blocks within markdown or article content - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10161) + +### Card +- Fixes a typo in the Card documentation - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10354) + +### Dialog +- Adds `aria-describedby` support so AlertDialog content is announced to assistive technology - [@costajohnt](https://github.com/costajohnt) - [PR](https://github.com/adobe/react-spectrum/pull/9924) + +### DropZone +- Fixes a hidden file input issue in DropZone without requiring an additional prop - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) + +### Menu +- Adds `trigger="contextMenu"` support to MenuTrigger for showing menus on right-click or long-press - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) + +### MessageFeedback +- Exposes a `size` prop on MessageFeedback - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) + +### PromptField +- Adds an `onKeyDown` handler and Up/Down arrow key cycling through previous prompts to PromptField - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) +- Adds controlled field value, attachment, and plain text injection support to PromptField - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) + +### ResponseStatus +- Adds `failed` and no-disclosure variants to ResponseStatus - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) + +### SideNav +- Adds a new SideNav component for building app navigation sidebars - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) + +### Switch +- Fixes a hidden input issue with Switch that could affect its accessible behavior - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) + +### Table +- Adds support for TextField and other interactive components inside Table cells - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10159) + +{/* dropped: chore: simplifying keyboard navigation docs copy [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10338) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10159) */} + +### TextArea +- Fixes empty TextArea height jumping when an overlay is open - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9933) + +### Toast +- Allows an `id` prop to be passed through to the DOM on Toast - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10342) + +{/* dropped: chore: upgrade oxlint to 1.71.0 and enable react/react-compiler rule [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10203) — internal tooling */} +{/* dropped: Latest translations [@rgeraghty](https://github.com/rgeraghty) - [PR](https://github.com/adobe/react-spectrum/pull/10271) — internal tooling */} +{/* dropped: chore: Remove old react-aria-components docs [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10311) — internal tooling */} +{/* dropped: fix: ios platform user agents [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10312) — internal tooling */} + +## Released packages + +``` +[TODO: paste output of yarn bumpVersions here] +``` From 97288fe14fa987966febf3548855f412a6948d0a Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Tue, 28 Jul 2026 11:17:48 -0700 Subject: [PATCH 03/18] cleanup --- .../pages/react-aria/releases/v1-20-0.mdx | 100 ++++-------------- .../dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 35 ++---- 2 files changed, 25 insertions(+), 110 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index 30981796e52..e6beba6dd9a 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -17,7 +17,7 @@ import docs from 'docs:@react-spectrum/s2'; export const hideNav = true; export const section = 'Releases'; export const tags = ['release', 'React Aria']; -export const date = 'July 27, 2026'; +export const date = 'July 30, 2026'; export const title = 'v1.21.0'; export const description = 'This release adds three new components — PreviewTrigger, TokenField, and useContextMenu — along with keyboard shortcut support via useKeyboard and context menu support for MenuTrigger, plus numerous bug fixes across Table, ComboBox, DatePicker, and more.'; export const isSubpage = true; @@ -26,140 +26,76 @@ export const isSubpage = true; This release introduces [PreviewTrigger](../PreviewTrigger), a new component for showing a non-modal preview popover when hovering or focusing a link. It also adds [TokenField](../TokenField) to React Aria Components for building tag inputs, mention inputs, and AI prompt fields with inline tokens, and [useContextMenu](../useContextMenu), a new hook for native and keyboard-accessible context menus, which MenuTrigger can now use via `trigger="contextMenu"`. We've also added keyboard shortcut support through [useKeyboard](../useKeyboard), along with support for interactive components like textfields inside Table and GridList rows. As always, this release includes many bug fixes across Table, ComboBox, DatePicker, and other components — thanks to all our contributors! -{/* Commits: 67 */} ## Changelog ### General Changes -- Add dependency on `@internationalized/string` to react-aria-components so it installs correctly under strict package managers - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10226) - -{/* dropped: chore: Yarn upgrade [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9817) — internal tooling */} -{/* dropped: chore: Format with oxfmt [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10030) — internal tooling */} -{/* dropped: chore: Migrate from eslint to oxlint [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10049) — internal tooling */} -{/* dropped: use caret ranges in individual packages - Devon Govett (no PR link available) — internal tooling */} -{/* dropped: update yarn lock - Devon Govett (no PR link available) — internal tooling */} -{/* dropped: chore: remove orphaned intl ts-ignore comments [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10148) — internal tooling */} -{/* dropped: chore: Expose keyboardNavigationBehavior="tab" in S2 [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10206) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10195) */} -{/* dropped: chore: make sure Tree keyboard navigation docs example renders fully on small screens [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10214) — internal tooling */} -{/* dropped: chore: fix React Aria home page "bring your styles" button in light mode [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10242) — internal tooling */} -{/* dropped: docs: clean up launch CTAs [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10240) — internal tooling */} -{/* dropped: chore: upgrade oxlint to 1.71.0 and enable react/react-compiler rule [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10203) — internal tooling */} -{/* dropped: chore: Tw animate update [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10201) — internal tooling */} -{/* dropped: Latest translations [@rgeraghty](https://github.com/rgeraghty) - [PR](https://github.com/adobe/react-spectrum/pull/10271) — internal tooling */} -{/* dropped: fix: stale merge [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10282) — internal tooling */} -{/* dropped: chore: Improve type detection and node contains logic for shadow dom [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10287) — internal tooling */} -{/* dropped: chore: Remove old react-aria-components docs [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10311) — internal tooling */} -{/* dropped: fix: run optimize-locales-plugin early in Vite [@wojtekmaj](https://github.com/wojtekmaj) - [PR](https://github.com/adobe/react-spectrum/pull/10304) — internal tooling */} -{/* dropped: fix: ios platform user agents [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10312) — internal tooling */} -{/* dropped: chore: simplifying keyboard navigation docs copy [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10338) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10159) */} -{/* dropped: chore: document useKeyboard shortcuts [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10192) — merged into above */} -{/* dropped: docs: New hook docs follow-up fixes [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10355) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10153) */} -{/* dropped: chore: update useKeyboard docs [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10346) — merged into above */} - +- Add new React Aria hooks documentation - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10153), [PR](https://github.com/adobe/react-spectrum/pull/10355) ### Autocomplete - Add inline completions example to Autocomplete documentation - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10205) - ### Breadcrumbs -- Avoid passing an empty string to the `href` attribute when it is undefined - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10286) - +- Prevent passing an empty string to the `href` attribute when undefined - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10286) ### Checkbox -- Delegate label `keydown` handling to the native input for checkboxes so key events behave consistently - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) - +- Fix Enter key presses on Checkbox inputs so they no longer block native implicit form submission - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) ### Collections - Add guide explaining how to update collection structure to documentation - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10232) - Support collections in React canary and Next.js 16's app router - [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10323) - ### ComboBox -- Document `defaultFilter`'s default contains filter behavior - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10222) -- Accept a readonly array for controlled multiple ComboBox `value` - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/10290) - +- Document `defaultFilter`'s default `contains` filter behavior - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10222) +- Accept a readonly array for controlled multiple ComboBox `value` - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/10290 ### Date and Time - Export `DayOfWeek` type from `@internationalized/date` - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10234) -- Clamp `Time` millisecond to a valid maximum of 999 - [@spokodev](https://github.com/spokodev) - [PR](https://github.com/adobe/react-spectrum/pull/10289) +- Clamp milliseconds to a valid maximum of 999 - [@spokodev](https://github.com/spokodev) - [PR](https://github.com/adobe/react-spectrum/pull/10289) - Resolve locales with an explicit script to language-script strings - [@stas-m2muchcoffee](https://github.com/stas-m2muchcoffee) - [PR](https://github.com/adobe/react-spectrum/pull/10268) - ### DatePicker - Avoid stealing focus into a date segment from a `selectionchange` event in Firefox - [@doolse](https://github.com/doolse) - [PR](https://github.com/adobe/react-spectrum/pull/10260) - ### Dialog - Add `aria-describedby` support for the `alertdialog` role - [@costajohnt](https://github.com/costajohnt) - [PR](https://github.com/adobe/react-spectrum/pull/9924) - Pass the overlay id to `PopoverContext` in Dialog - [@albertdugba](https://github.com/albertdugba) - [PR](https://github.com/adobe/react-spectrum/pull/9807) - ### DragAndDrop - Prefer the ancestor drop target over the nearest-by-distance target in DragManager - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10170) - Prevent Android Chrome taps from being detected as a drag event - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10332) - ### DropZone -- Prevent focus from moving to DropZone when clicking its hidden file input - [@pradeep-ramola](https://github.com/pradeep-ramola) - [PR](https://github.com/adobe/react-spectrum/pull/10173) -- Fix hidden DropZone behavior so a new prop isn't required to work around it - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) - +- Prevent focus from moving to DropZone when clicking its hidden file input - [@pradeep-ramola](https://github.com/pradeep-ramola) - [PR](https://github.com/adobe/react-spectrum/pull/10173), [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) ### GridList -- Support textfields and other interactive components inside GridList rows - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10195) -- Support arrow key navigation into a row's children when `keyboardNavigationBehavior="tab"` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) - +- Support TextFields and other interactive components inside GridList rows using `keyboardNavigationBehavior="tab"` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10195), [PR](https://github.com/adobe/react-spectrum/pull/10206), [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) ### Link - Add `onPressChange` prop to `useLink` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) - ### Menu -- Add `useContextMenu`, a new hook for native and keyboard-accessible context menus - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) - -### MenuTrigger -- Add `trigger="contextMenu"` support to MenuTrigger - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) - +- Add `useContextMenu` and `trigger="contextMenu"` to MenuTrigger - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) ### Meter - Guard the percentage calculation against `NaN` when `min` equals `max` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10169) - ### Overlays - Fix `ariaHideOutside` behavior inside a shadow DOM - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10288) - Restore focus in `FocusScope` containment without scrolling the dialog into view - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10339) - Add an `addGlobalScrollListener` utility and close overlays on scroll events inside a shadow DOM - [@pzaczkiewicz-athenahealth](https://github.com/pzaczkiewicz-athenahealth) - [PR](https://github.com/adobe/react-spectrum/pull/10188) - ### PreviewTrigger -- Add PreviewTrigger, a new component that composes a Link or other focusable element with a non-modal Popover that opens on hover, keyboard focus, and long press - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10243) - +- Add PreviewTrigger component - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10243) ### ProgressBar - Guard the percentage calculation against `NaN` when `min` equals `max` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10169) - ### RadioGroup -- Delegate label `keydown` handling to the native input for radios so key events behave consistently - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) - -### react-aria-components -- Re-export `RenderProps`-related types from react-aria-components so downstream `.d.ts` builds can name them - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/9955) - +- Fix Enter key presses on Radio inputs so they no longer block native implicit form submission - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) ### Select - Restore the default `type` for Select - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10361) - ### Switch - Delegate label `keydown` handling to the native input for switches so key events behave consistently - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) - ### Table -- Support textfields and other interactive components inside Table rows - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10159) +- Support TextFields and other interactive components inside Table rows using `keyboardNavigationBehavior="tab"` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10159), [PR](https://github.com/adobe/react-spectrum/pull/10206) - Floor fractional table column widths so columns don't overflow - [@ardittirana](https://github.com/ardittirana) - [PR](https://github.com/adobe/react-spectrum/pull/10238) - Fix column resizing getting stuck after a press and hold - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10040) -- Fix table press and hold navigation - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10285) - Restore focus without an infinite loop when no focusable row remains in `useGridState` - [@RobHannay](https://github.com/RobHannay) - [PR](https://github.com/adobe/react-spectrum/pull/10241) - ### TokenField -- Add TokenField to React Aria Components for building tag inputs, mention inputs, and AI prompt fields with inline tokens - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10318) -- Add `onKeyDown` and `onKeyUp` props to `useTokenField` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) - -{/* dropped: fix: TokenField RTL, IME composition, and range selection [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10273) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10318) */} - +- Add TokenField component - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10318) ### Tree -- Add `DEFAULT_SLOT` to `TreeItem`'s `CheckboxContext` so unslotted Checkboxes render - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10274) +- Add `DEFAULT_SLOT` to `TreeItem`'s `CheckboxContext` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10274) - Prevent virtualized grid layouts from disappearing when hidden via `display: none` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10190) - Export `TreeSectionProps` and `TreeHeaderProps` types - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) - ### useId - Prevent `FinalizationRegistry` entries from accumulating on every re-render - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9853) - ### useKeyboard -- Add keyboard shortcut support to `useKeyboard` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200) -- Add new React Aria hooks documentation - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10153) -- Fix keyboard repeat events for navigation - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10322) - +- Adds support for chaining multiple keyboard shortcut handlers - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200), [PR](https://github.com/adobe/react-spectrum/pull/10322), [PR](https://github.com/adobe/react-spectrum/pull/10285) ### Virtualizer -- Make trackpad taps fire press events consistently - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10225) -- Add support for reversed virtualization, useful for chat-style scrolling views - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10258) +- Fix press events not firing consistently for trackpad taps - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10225) + ## Released packages diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index 207bf96f4f0..e3ba718053e 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -17,7 +17,7 @@ import docs from 'docs:@react-spectrum/s2'; export const hideNav = true; export const section = 'Releases'; export const tags = ['release', 'S2']; -export const date = 'July 27, 2026'; +export const date = 'July 30, 2026'; export const title = 'v1.7.0'; export const description = 'Adds a new SideNav component, context menu support for MenuTrigger, and interactive cell content in Table, along with fixes for Switch, DropZone, Toast, and TextArea.'; export const isSubpage = true; @@ -26,45 +26,28 @@ export const isSubpage = true; This release introduces the new [SideNav](SideNav) component for building app navigation sidebars, adds `trigger="contextMenu"` support to [Menu](Menu)'s MenuTrigger, and lets [Table](TableView) cells hold interactive content like text fields. It also includes a `prose` style macro for rendering markdown-like content, several updates to the `@react-spectrum/ai` chat components, and fixes for Dialog, Switch, DropZone, Toast, and TextArea. -{/* Commits: 16 */} ## Changelog ### General Changes -- Fixes keyboard shortcut and event handlers so multiple handlers no longer interfere with each other's `stopPropagation` and `preventDefault` behavior - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200) -- Adds a `prose` style macro for styling semantic HTML elements like headings, paragraphs, and code blocks within markdown or article content - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10161) - -### Card -- Fixes a typo in the Card documentation - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10354) +- Adds support for chaining multiple keyboard shortcut handlers - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200) ### Dialog - Adds `aria-describedby` support so AlertDialog content is announced to assistive technology - [@costajohnt](https://github.com/costajohnt) - [PR](https://github.com/adobe/react-spectrum/pull/9924) -### DropZone -- Fixes a hidden file input issue in DropZone without requiring an additional prop - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) - ### Menu - Adds `trigger="contextMenu"` support to MenuTrigger for showing menus on right-click or long-press - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) -### MessageFeedback -- Exposes a `size` prop on MessageFeedback - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) - -### PromptField -- Adds an `onKeyDown` handler and Up/Down arrow key cycling through previous prompts to PromptField - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) -- Adds controlled field value, attachment, and plain text injection support to PromptField - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) - -### ResponseStatus -- Adds `failed` and no-disclosure variants to ResponseStatus - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10335) +### Prose +- Adds a `prose` style macro for styling semantic HTML elements - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10161) ### SideNav -- Adds a new SideNav component for building app navigation sidebars - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) +- Adds SideNav component - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) ### Switch -- Fixes a hidden input issue with Switch that could affect its accessible behavior - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) +- Fixes Switch's hidden native input positioning so it doesn't shift layout - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) ### Table -- Adds support for TextField and other interactive components inside Table cells - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10159) - -{/* dropped: chore: simplifying keyboard navigation docs copy [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10338) — follow-up refinement of [PR](https://github.com/adobe/react-spectrum/pull/10159) */} +- Adds support for TextField and other interactive components inside Table cells using `keyboardNavigationBehavior="tab"`- [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10159) ### TextArea - Fixes empty TextArea height jumping when an overlay is open - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9933) @@ -72,10 +55,6 @@ This release introduces the new [SideNav](SideNav) component for building app na ### Toast - Allows an `id` prop to be passed through to the DOM on Toast - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10342) -{/* dropped: chore: upgrade oxlint to 1.71.0 and enable react/react-compiler rule [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10203) — internal tooling */} -{/* dropped: Latest translations [@rgeraghty](https://github.com/rgeraghty) - [PR](https://github.com/adobe/react-spectrum/pull/10271) — internal tooling */} -{/* dropped: chore: Remove old react-aria-components docs [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10311) — internal tooling */} -{/* dropped: fix: ios platform user agents [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10312) — internal tooling */} ## Released packages From c705f43f7ed78a085aca827e2903db619e5ba5db Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Tue, 28 Jul 2026 11:18:21 -0700 Subject: [PATCH 04/18] updates --- packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx | 2 +- packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index e6beba6dd9a..abba99a17c1 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -24,7 +24,7 @@ export const isSubpage = true; # v1.21.0 -This release introduces [PreviewTrigger](../PreviewTrigger), a new component for showing a non-modal preview popover when hovering or focusing a link. It also adds [TokenField](../TokenField) to React Aria Components for building tag inputs, mention inputs, and AI prompt fields with inline tokens, and [useContextMenu](../useContextMenu), a new hook for native and keyboard-accessible context menus, which MenuTrigger can now use via `trigger="contextMenu"`. We've also added keyboard shortcut support through [useKeyboard](../useKeyboard), along with support for interactive components like textfields inside Table and GridList rows. As always, this release includes many bug fixes across Table, ComboBox, DatePicker, and other components — thanks to all our contributors! +This release introduces [PreviewTrigger](../PreviewTrigger), a new component for showing a non-modal preview popover when hovering or focusing a link. It also adds [TokenField](../TokenField) to React Aria Components for building tag inputs, mention inputs, and AI prompt fields with inline tokens, and [useContextMenu](../useContextMenu), a new hook for native and keyboard-accessible context menus, which MenuTrigger can now use via trigger="contextMenu". We've also added keyboard shortcut support through [useKeyboard](../useKeyboard), along with support for interactive components like textfields inside Table and GridList rows. ## Changelog diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index e3ba718053e..1a757b1cac9 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -24,7 +24,7 @@ export const isSubpage = true; # v1.7.0 -This release introduces the new [SideNav](SideNav) component for building app navigation sidebars, adds `trigger="contextMenu"` support to [Menu](Menu)'s MenuTrigger, and lets [Table](TableView) cells hold interactive content like text fields. It also includes a `prose` style macro for rendering markdown-like content, several updates to the `@react-spectrum/ai` chat components, and fixes for Dialog, Switch, DropZone, Toast, and TextArea. +This release introduces the new [SideNav](SideNav) component for building app navigation sidebars, adds trigger="contextMenu" support to [Menu](Menu)'s MenuTrigger, and lets [Table](TableView) cells hold interactive content like TextFields. It also includes a prose style macro for rendering markdown-like content and other bug fixes! ## Changelog From 3fb43213c4e2a8a5524482d1e9383436ed415ce1 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Tue, 28 Jul 2026 13:59:00 -0700 Subject: [PATCH 05/18] add ai label --- .github/labeler.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/labeler.yml b/.github/labeler.yml index c3350301447..b08dd1d8c83 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -22,6 +22,10 @@ v3: - all-globs-to-any-file: ['**/@react-spectrum/**', '!**/*.stories.*', '!**/*.test.*'] - all-globs-to-all-files: ['!**/@react-spectrum/s2/**', '!**/@react-spectrum/ai/**'] +AI: + - changed-files: + - all-globs-to-any-file: ['**/ai/**', '!**/*.stories.*', '!**/*.test.*'] + Accordion: - changed-files: - any-glob-to-any-file: '**/Accordion.tsx' From ff16a257834179c38b94536a45952cd048ca9e81 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:00:35 -0700 Subject: [PATCH 06/18] add ai to testing sheet --- scripts/createExcelSheet.mjs | 18 +++++++++++------- scripts/getCommitsForTesting.mjs | 12 +++++++++--- scripts/sendWeeklyExcelSheet.mjs | 10 +++++----- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/scripts/createExcelSheet.mjs b/scripts/createExcelSheet.mjs index 4b77252e281..bca4a927fa4 100644 --- a/scripts/createExcelSheet.mjs +++ b/scripts/createExcelSheet.mjs @@ -57,7 +57,7 @@ function buildBugsNotesSheet(workbook) { } } -function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}) { +function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}) { let sheet = workbook.addWorksheet('Release Notes'); sheet.columns = [{width: 25}, {width: 70}, {width: 50}, {width: 50}]; @@ -67,6 +67,7 @@ function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPR let groups = [ ['RAC', racPRs], ['S2', s2PRs], + ['AI', aiPRs], ['V3', v3PRs], ['Other', otherPRs], ['Off PRs', offPRs] @@ -99,7 +100,7 @@ function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPR } } -function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}) { +function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}) { let sheet = workbook.addWorksheet('Pass-Fail'); sheet.columns = [ @@ -149,7 +150,8 @@ function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}) {row: 2, label: 'Next'}, {row: 3, label: 'S2 Parcel'}, {row: 4, label: 'S2 Webpack'}, - {row: 5, label: 'RAC Tailwind'} + {row: 5, label: 'S2 Next'}, + {row: 6, label: 'S2 Vite'} ]; for (let {row, label} of categoryE) { sheet.getCell(`E${row}`).value = label; @@ -176,8 +178,10 @@ function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}) ['RAC', racPRs], ['S2', s2PRs], ['V3', v3PRs], + ['AI', aiPRs], ['Other', otherPRs], - ['Off PRs', offPRs] + ['Off PRs', offPRs], + ['Test Apps', [['Next'], ['S2 Parcel'], ['S2 Webpack'], ['S2 Next'], ['S2 Vite']]] ]; let nextRow = 11; let first = true; @@ -255,13 +259,13 @@ function buildScreenshotsSheet(workbook) { header.height = 50; } -export async function createTestingSheet({v3PRs, s2PRs, racPRs, otherPRs, offPRs}) { +export async function createTestingSheet({v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}) { let workbook = new ExcelJS.Workbook(); - buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}); + buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}); buildScreenshotsSheet(workbook); buildBugsNotesSheet(workbook); - buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}); + buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}); return workbook.xlsx.writeBuffer(); } diff --git a/scripts/getCommitsForTesting.mjs b/scripts/getCommitsForTesting.mjs index 66d4e5be4fd..994914b9c0d 100644 --- a/scripts/getCommitsForTesting.mjs +++ b/scripts/getCommitsForTesting.mjs @@ -63,6 +63,7 @@ export async function generateData(startDate, endDate) { let s2PRs = []; let racPRs = []; let v3PRs = []; + let aiPRs = []; let otherPRs = []; // Off PRs are currently open PRs with the 'test off PR' label @@ -126,7 +127,7 @@ export async function generateData(startDate, endDate) { row.push(info.data.html_url); row.push(removePRNumber(title)); - if (!labels.has('S2') && !labels.has('RAC') && !labels.has('v3')) { + if (!labels.has('S2') && !labels.has('RAC') && !labels.has('v3') && !labels.has('AI')) { otherPRs.push(row); } else { if (labels.has('S2')) { @@ -138,6 +139,9 @@ export async function generateData(startDate, endDate) { if (labels.has('v3')) { v3PRs.push(row); } + if (labels.has('AI')) { + aiPRs.push(row); + } } } @@ -145,12 +149,14 @@ export async function generateData(startDate, endDate) { v3PRs, s2PRs, racPRs, + aiPRs, otherPRs, offPRs, counts: { v3: v3PRs.length, s2: s2PRs.length, rac: racPRs.length, + ai: aiPRs.length, offPRs: offPRs.length, other: otherPRs.length } @@ -158,7 +164,7 @@ export async function generateData(startDate, endDate) { } export async function generateCSV(startDate, endDate) { - let {v3PRs, s2PRs, racPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); + let {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); function formatRows(rows) { return rows @@ -168,7 +174,7 @@ export async function generateCSV(startDate, endDate) { .join('\n'); } - let csv = `V3 \n${formatRows(v3PRs)}\n\nRainbow \n${formatRows(s2PRs)}\n\nRAC \n${formatRows(racPRs)}\n\nOff PR \n${formatRows(offPRs)}\n\nOther \n${formatRows(otherPRs)}\n`; + let csv = `V3 \n${formatRows(v3PRs)}\n\nRainbow \n${formatRows(s2PRs)}\n\nRAC \n${formatRows(racPRs)}\n\nAI \n${formatRows(aiPRs)}\n\nOff PR \n${formatRows(offPRs)}\n\nOther \n${formatRows(otherPRs)}\n`; return {csv, counts}; } diff --git a/scripts/sendWeeklyExcelSheet.mjs b/scripts/sendWeeklyExcelSheet.mjs index ee8b1098769..a7e0d1a2911 100644 --- a/scripts/sendWeeklyExcelSheet.mjs +++ b/scripts/sendWeeklyExcelSheet.mjs @@ -112,18 +112,18 @@ async function main() { })(); console.log(`Generating testing sheet for ${startDate} – ${endDate}...`); - let {v3PRs, s2PRs, racPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); + let {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); console.log( - `Found: V3=${counts.v3}, S2=${counts.s2}, RAC=${counts.rac}, Other=${counts.other}, Off PRs=${counts.offPRs}` + `Found: V3=${counts.v3}, S2=${counts.s2}, RAC=${counts.rac}, AI=${counts.ai}, Other=${counts.other}, Off PRs=${counts.offPRs}` ); - let buffer = await createTestingSheet({v3PRs, s2PRs, racPRs, otherPRs, offPRs}); + let buffer = await createTestingSheet({v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}); let startLabel = formatDateLabel(startDate); let endLabel = formatDateLabel(endDate); - let total = counts.v3 + counts.s2 + counts.rac + counts.other; + let total = counts.v3 + counts.s2 + counts.rac + counts.ai + counts.other; let filename = `${endLabel}.xlsx`; - let message = `*Testing sheet for ${startLabel} – ${endLabel}*\nV3: ${counts.v3} | S2: ${counts.s2} | RAC: ${counts.rac} | Other: ${counts.other} | Off PR: ${counts.offPRs} | Total: ${total}`; + let message = `*Testing sheet for ${startLabel} – ${endLabel}*\nV3: ${counts.v3} | S2: ${counts.s2} | RAC: ${counts.rac} | AI: ${counts.ai} | Other: ${counts.other} | Off PR: ${counts.offPRs} | Total: ${total}`; if (isLocal) { let outPath = path.resolve(process.cwd(), filename); From 6fb599b21e3f46f50b73702e2917418b127e8637 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:01:24 -0700 Subject: [PATCH 07/18] Revert "add ai label" This reverts commit 3fb43213c4e2a8a5524482d1e9383436ed415ce1. --- .github/labeler.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index b08dd1d8c83..c3350301447 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -22,10 +22,6 @@ v3: - all-globs-to-any-file: ['**/@react-spectrum/**', '!**/*.stories.*', '!**/*.test.*'] - all-globs-to-all-files: ['!**/@react-spectrum/s2/**', '!**/@react-spectrum/ai/**'] -AI: - - changed-files: - - all-globs-to-any-file: ['**/ai/**', '!**/*.stories.*', '!**/*.test.*'] - Accordion: - changed-files: - any-glob-to-any-file: '**/Accordion.tsx' From 01cb3d8e31feedb620b2a2357be65b7bd474d447 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:02:29 -0700 Subject: [PATCH 08/18] Revert "add ai to testing sheet" This reverts commit ff16a257834179c38b94536a45952cd048ca9e81. --- scripts/createExcelSheet.mjs | 18 +++++++----------- scripts/getCommitsForTesting.mjs | 12 +++--------- scripts/sendWeeklyExcelSheet.mjs | 10 +++++----- 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/scripts/createExcelSheet.mjs b/scripts/createExcelSheet.mjs index bca4a927fa4..4b77252e281 100644 --- a/scripts/createExcelSheet.mjs +++ b/scripts/createExcelSheet.mjs @@ -57,7 +57,7 @@ function buildBugsNotesSheet(workbook) { } } -function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}) { +function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}) { let sheet = workbook.addWorksheet('Release Notes'); sheet.columns = [{width: 25}, {width: 70}, {width: 50}, {width: 50}]; @@ -67,7 +67,6 @@ function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs let groups = [ ['RAC', racPRs], ['S2', s2PRs], - ['AI', aiPRs], ['V3', v3PRs], ['Other', otherPRs], ['Off PRs', offPRs] @@ -100,7 +99,7 @@ function buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs } } -function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}) { +function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}) { let sheet = workbook.addWorksheet('Pass-Fail'); sheet.columns = [ @@ -150,8 +149,7 @@ function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, of {row: 2, label: 'Next'}, {row: 3, label: 'S2 Parcel'}, {row: 4, label: 'S2 Webpack'}, - {row: 5, label: 'S2 Next'}, - {row: 6, label: 'S2 Vite'} + {row: 5, label: 'RAC Tailwind'} ]; for (let {row, label} of categoryE) { sheet.getCell(`E${row}`).value = label; @@ -178,10 +176,8 @@ function buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, of ['RAC', racPRs], ['S2', s2PRs], ['V3', v3PRs], - ['AI', aiPRs], ['Other', otherPRs], - ['Off PRs', offPRs], - ['Test Apps', [['Next'], ['S2 Parcel'], ['S2 Webpack'], ['S2 Next'], ['S2 Vite']]] + ['Off PRs', offPRs] ]; let nextRow = 11; let first = true; @@ -259,13 +255,13 @@ function buildScreenshotsSheet(workbook) { header.height = 50; } -export async function createTestingSheet({v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}) { +export async function createTestingSheet({v3PRs, s2PRs, racPRs, otherPRs, offPRs}) { let workbook = new ExcelJS.Workbook(); - buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}); + buildPassFailSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}); buildScreenshotsSheet(workbook); buildBugsNotesSheet(workbook); - buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}); + buildReleaseNotesSheet(workbook, {v3PRs, s2PRs, racPRs, otherPRs, offPRs}); return workbook.xlsx.writeBuffer(); } diff --git a/scripts/getCommitsForTesting.mjs b/scripts/getCommitsForTesting.mjs index 994914b9c0d..66d4e5be4fd 100644 --- a/scripts/getCommitsForTesting.mjs +++ b/scripts/getCommitsForTesting.mjs @@ -63,7 +63,6 @@ export async function generateData(startDate, endDate) { let s2PRs = []; let racPRs = []; let v3PRs = []; - let aiPRs = []; let otherPRs = []; // Off PRs are currently open PRs with the 'test off PR' label @@ -127,7 +126,7 @@ export async function generateData(startDate, endDate) { row.push(info.data.html_url); row.push(removePRNumber(title)); - if (!labels.has('S2') && !labels.has('RAC') && !labels.has('v3') && !labels.has('AI')) { + if (!labels.has('S2') && !labels.has('RAC') && !labels.has('v3')) { otherPRs.push(row); } else { if (labels.has('S2')) { @@ -139,9 +138,6 @@ export async function generateData(startDate, endDate) { if (labels.has('v3')) { v3PRs.push(row); } - if (labels.has('AI')) { - aiPRs.push(row); - } } } @@ -149,14 +145,12 @@ export async function generateData(startDate, endDate) { v3PRs, s2PRs, racPRs, - aiPRs, otherPRs, offPRs, counts: { v3: v3PRs.length, s2: s2PRs.length, rac: racPRs.length, - ai: aiPRs.length, offPRs: offPRs.length, other: otherPRs.length } @@ -164,7 +158,7 @@ export async function generateData(startDate, endDate) { } export async function generateCSV(startDate, endDate) { - let {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); + let {v3PRs, s2PRs, racPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); function formatRows(rows) { return rows @@ -174,7 +168,7 @@ export async function generateCSV(startDate, endDate) { .join('\n'); } - let csv = `V3 \n${formatRows(v3PRs)}\n\nRainbow \n${formatRows(s2PRs)}\n\nRAC \n${formatRows(racPRs)}\n\nAI \n${formatRows(aiPRs)}\n\nOff PR \n${formatRows(offPRs)}\n\nOther \n${formatRows(otherPRs)}\n`; + let csv = `V3 \n${formatRows(v3PRs)}\n\nRainbow \n${formatRows(s2PRs)}\n\nRAC \n${formatRows(racPRs)}\n\nOff PR \n${formatRows(offPRs)}\n\nOther \n${formatRows(otherPRs)}\n`; return {csv, counts}; } diff --git a/scripts/sendWeeklyExcelSheet.mjs b/scripts/sendWeeklyExcelSheet.mjs index a7e0d1a2911..ee8b1098769 100644 --- a/scripts/sendWeeklyExcelSheet.mjs +++ b/scripts/sendWeeklyExcelSheet.mjs @@ -112,18 +112,18 @@ async function main() { })(); console.log(`Generating testing sheet for ${startDate} – ${endDate}...`); - let {v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); + let {v3PRs, s2PRs, racPRs, otherPRs, offPRs, counts} = await generateData(startDate, endDate); console.log( - `Found: V3=${counts.v3}, S2=${counts.s2}, RAC=${counts.rac}, AI=${counts.ai}, Other=${counts.other}, Off PRs=${counts.offPRs}` + `Found: V3=${counts.v3}, S2=${counts.s2}, RAC=${counts.rac}, Other=${counts.other}, Off PRs=${counts.offPRs}` ); - let buffer = await createTestingSheet({v3PRs, s2PRs, racPRs, aiPRs, otherPRs, offPRs}); + let buffer = await createTestingSheet({v3PRs, s2PRs, racPRs, otherPRs, offPRs}); let startLabel = formatDateLabel(startDate); let endLabel = formatDateLabel(endDate); - let total = counts.v3 + counts.s2 + counts.rac + counts.ai + counts.other; + let total = counts.v3 + counts.s2 + counts.rac + counts.other; let filename = `${endLabel}.xlsx`; - let message = `*Testing sheet for ${startLabel} – ${endLabel}*\nV3: ${counts.v3} | S2: ${counts.s2} | RAC: ${counts.rac} | AI: ${counts.ai} | Other: ${counts.other} | Off PR: ${counts.offPRs} | Total: ${total}`; + let message = `*Testing sheet for ${startLabel} – ${endLabel}*\nV3: ${counts.v3} | S2: ${counts.s2} | RAC: ${counts.rac} | Other: ${counts.other} | Off PR: ${counts.offPRs} | Total: ${total}`; if (isLocal) { let outPath = path.resolve(process.cwd(), filename); From abf99c150954d63e547484ee7110feb3a5a19dbf Mon Sep 17 00:00:00 2001 From: Daniel Lu Date: Thu, 30 Jul 2026 10:49:14 -0700 Subject: [PATCH 09/18] Update packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx --- packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index abba99a17c1..4d775ae8025 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -18,7 +18,7 @@ export const hideNav = true; export const section = 'Releases'; export const tags = ['release', 'React Aria']; export const date = 'July 30, 2026'; -export const title = 'v1.21.0'; +export const title = 'v1.20.0'; export const description = 'This release adds three new components — PreviewTrigger, TokenField, and useContextMenu — along with keyboard shortcut support via useKeyboard and context menu support for MenuTrigger, plus numerous bug fixes across Table, ComboBox, DatePicker, and more.'; export const isSubpage = true; From 858291eadfaa35bbce6f061f37695fab3f2b0809 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:15:37 -0700 Subject: [PATCH 10/18] updates --- .../pages/react-aria/releases/v1-20-0.mdx | 33 +++++++++++-------- .../dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 17 ++-------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index 4d775ae8025..8ad8327736f 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -22,16 +22,24 @@ export const title = 'v1.20.0'; export const description = 'This release adds three new components — PreviewTrigger, TokenField, and useContextMenu — along with keyboard shortcut support via useKeyboard and context menu support for MenuTrigger, plus numerous bug fixes across Table, ComboBox, DatePicker, and more.'; export const isSubpage = true; -# v1.21.0 +# v1.20.0 -This release introduces [PreviewTrigger](../PreviewTrigger), a new component for showing a non-modal preview popover when hovering or focusing a link. It also adds [TokenField](../TokenField) to React Aria Components for building tag inputs, mention inputs, and AI prompt fields with inline tokens, and [useContextMenu](../useContextMenu), a new hook for native and keyboard-accessible context menus, which MenuTrigger can now use via trigger="contextMenu". We've also added keyboard shortcut support through [useKeyboard](../useKeyboard), along with support for interactive components like textfields inside Table and GridList rows. +This release includes many new components and features! + +* The new [PreviewTrigger](../PreviewTrigger) component shows a Popover on hover, focus, or long press. Unlike Tooltip, it may include interactive content, useful for hoverable link previews. +* [TokenField](../TokenField) (alpha) allows users to enter text with inline tokens. Use it to build AI prompt fields, tag inputs, structured search fields, mention inputs, and multi-select comboboxes. +* [MenuTrigger](/Menu#context-menu) now supports trigger="contextMenu", enabling accessible context menus via mouse, keyboard, and touch input. +* A simpler API to implement keyboard shortcuts to [useKeyboard](../useKeyboard). +* Support for interactive components like textfields inside Table rows. + +Finally, the React Aria and React Stately hook documentation has been completely rewritten! The new docs use the same styles as our React Aria Components examples, and show how to use both components and hooks together. + +As always, thank you to all our contributors! ## Changelog ### General Changes - Add new React Aria hooks documentation - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/10153), [PR](https://github.com/adobe/react-spectrum/pull/10355) -### Autocomplete -- Add inline completions example to Autocomplete documentation - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10205) ### Breadcrumbs - Prevent passing an empty string to the `href` attribute when undefined - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10286) ### Checkbox @@ -51,13 +59,11 @@ This release introduces [PreviewTrigger](../PreviewTrigger), a new component for ### Dialog - Add `aria-describedby` support for the `alertdialog` role - [@costajohnt](https://github.com/costajohnt) - [PR](https://github.com/adobe/react-spectrum/pull/9924) - Pass the overlay id to `PopoverContext` in Dialog - [@albertdugba](https://github.com/albertdugba) - [PR](https://github.com/adobe/react-spectrum/pull/9807) -### DragAndDrop +### Drag and drop - Prefer the ancestor drop target over the nearest-by-distance target in DragManager - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10170) - Prevent Android Chrome taps from being detected as a drag event - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10332) ### DropZone - Prevent focus from moving to DropZone when clicking its hidden file input - [@pradeep-ramola](https://github.com/pradeep-ramola) - [PR](https://github.com/adobe/react-spectrum/pull/10173), [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) -### GridList -- Support TextFields and other interactive components inside GridList rows using `keyboardNavigationBehavior="tab"` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10195), [PR](https://github.com/adobe/react-spectrum/pull/10206), [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) ### Link - Add `onPressChange` prop to `useLink` - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) ### Menu @@ -65,8 +71,7 @@ This release introduces [PreviewTrigger](../PreviewTrigger), a new component for ### Meter - Guard the percentage calculation against `NaN` when `min` equals `max` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10169) ### Overlays -- Fix `ariaHideOutside` behavior inside a shadow DOM - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10288) -- Restore focus in `FocusScope` containment without scrolling the dialog into view - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10339) +- Restore focus in `FocusScope` containment without scrolling- [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10339) - Add an `addGlobalScrollListener` utility and close overlays on scroll events inside a shadow DOM - [@pzaczkiewicz-athenahealth](https://github.com/pzaczkiewicz-athenahealth) - [PR](https://github.com/adobe/react-spectrum/pull/10188) ### PreviewTrigger - Add PreviewTrigger component - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10243) @@ -86,17 +91,17 @@ This release introduces [PreviewTrigger](../PreviewTrigger), a new component for ### TokenField - Add TokenField component - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10318) ### Tree -- Add `DEFAULT_SLOT` to `TreeItem`'s `CheckboxContext` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10274) +- Fix non-selection checkboxes in Tree items - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10274) - Prevent virtualized grid layouts from disappearing when hidden via `display: none` - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10190) - Export `TreeSectionProps` and `TreeHeaderProps` types - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) ### useId - Prevent `FinalizationRegistry` entries from accumulating on every re-render - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9853) ### useKeyboard -- Adds support for chaining multiple keyboard shortcut handlers - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200), [PR](https://github.com/adobe/react-spectrum/pull/10322), [PR](https://github.com/adobe/react-spectrum/pull/10285) -### Virtualizer +- Adds support for new shortcuts that allow control over stopping prpagation and preventing default - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200), [PR](https://github.com/adobe/react-spectrum/pull/10322), [PR](https://github.com/adobe/react-spectrum/pull/10285) +### usePress - Fix press events not firing consistently for trackpad taps - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10225) - - +### Virtualizer +- Add 'shouldObserveItemSize' to Virtualizer to force re-layout when items change size - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10258) ## Released packages ``` diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index 1a757b1cac9..8fbb533ba10 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -18,44 +18,33 @@ export const hideNav = true; export const section = 'Releases'; export const tags = ['release', 'S2']; export const date = 'July 30, 2026'; -export const title = 'v1.7.0'; +export const title = 'v1.6.0'; export const description = 'Adds a new SideNav component, context menu support for MenuTrigger, and interactive cell content in Table, along with fixes for Switch, DropZone, Toast, and TextArea.'; export const isSubpage = true; -# v1.7.0 +# v1.6.0 -This release introduces the new [SideNav](SideNav) component for building app navigation sidebars, adds trigger="contextMenu" support to [Menu](Menu)'s MenuTrigger, and lets [Table](TableView) cells hold interactive content like TextFields. It also includes a prose style macro for rendering markdown-like content and other bug fixes! +This release introduces the new [SideNav](../SideNav) component for building app navigation sidebars, adds trigger="contextMenu" support to [MenuTrigger](../Menu#context-menu), and lets [TableView](../TableView#keyboard-navigation) cells hold interactive content like TextFields. ## Changelog ### General Changes - Adds support for chaining multiple keyboard shortcut handlers - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10200) - ### Dialog - Adds `aria-describedby` support so AlertDialog content is announced to assistive technology - [@costajohnt](https://github.com/costajohnt) - [PR](https://github.com/adobe/react-spectrum/pull/9924) - ### Menu - Adds `trigger="contextMenu"` support to MenuTrigger for showing menus on right-click or long-press - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10237) - -### Prose -- Adds a `prose` style macro for styling semantic HTML elements - [@devongovett](https://github.com/devongovett) - [PR](https://github.com/adobe/react-spectrum/pull/10161) - ### SideNav - Adds SideNav component - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10306) - ### Switch - Fixes Switch's hidden native input positioning so it doesn't shift layout - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10336) - ### Table - Adds support for TextField and other interactive components inside Table cells using `keyboardNavigationBehavior="tab"`- [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10159) - ### TextArea - Fixes empty TextArea height jumping when an overlay is open - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9933) - ### Toast - Allows an `id` prop to be passed through to the DOM on Toast - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10342) - ## Released packages ``` From 234219a56c36e3cdd4f502b0079e1dea1ed187f5 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:27:43 -0700 Subject: [PATCH 11/18] update small intro --- packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx | 2 +- packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index 8ad8327736f..e416b63cf93 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -19,7 +19,7 @@ export const section = 'Releases'; export const tags = ['release', 'React Aria']; export const date = 'July 30, 2026'; export const title = 'v1.20.0'; -export const description = 'This release adds three new components — PreviewTrigger, TokenField, and useContextMenu — along with keyboard shortcut support via useKeyboard and context menu support for MenuTrigger, plus numerous bug fixes across Table, ComboBox, DatePicker, and more.'; +export const description = 'This release introduces two new components, along with several new features including support for context menus, a simplified API for keyboard shortcuts, and the ability to use interactive components within Table rows. It also adds new documentation for hooks.' export const isSubpage = true; # v1.20.0 diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index 8fbb533ba10..c6a8f86c985 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -19,7 +19,7 @@ export const section = 'Releases'; export const tags = ['release', 'S2']; export const date = 'July 30, 2026'; export const title = 'v1.6.0'; -export const description = 'Adds a new SideNav component, context menu support for MenuTrigger, and interactive cell content in Table, along with fixes for Switch, DropZone, Toast, and TextArea.'; +export const description = 'This release adds the long-awaited SideNav component for app navigation sidebars, context menu support in MenuTrigger, and support for textfields and other interactive elements in TableView cells.'; export const isSubpage = true; # v1.6.0 From 23fd241544a02a8c10a33770ea6eeef4c2c95026 Mon Sep 17 00:00:00 2001 From: Daniel Lu Date: Thu, 30 Jul 2026 14:38:06 -0700 Subject: [PATCH 12/18] Apply suggestions from code review Co-authored-by: Daniel Lu --- packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index e416b63cf93..c2e66e4f1c0 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -30,7 +30,7 @@ This release includes many new components and features! * [TokenField](../TokenField) (alpha) allows users to enter text with inline tokens. Use it to build AI prompt fields, tag inputs, structured search fields, mention inputs, and multi-select comboboxes. * [MenuTrigger](/Menu#context-menu) now supports trigger="contextMenu", enabling accessible context menus via mouse, keyboard, and touch input. * A simpler API to implement keyboard shortcuts to [useKeyboard](../useKeyboard). -* Support for interactive components like textfields inside Table rows. +* Support for interactive components like textfields inside [Table](../Table#keyboard-navigation) rows. Finally, the React Aria and React Stately hook documentation has been completely rewritten! The new docs use the same styles as our React Aria Components examples, and show how to use both components and hooks together. From 1008d39d0470c5ca134cd2b00affc235e18b427c Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:45:51 -0700 Subject: [PATCH 13/18] more updates --- .../dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx | 8 ++++---- packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index c2e66e4f1c0..556658c5503 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -28,7 +28,7 @@ This release includes many new components and features! * The new [PreviewTrigger](../PreviewTrigger) component shows a Popover on hover, focus, or long press. Unlike Tooltip, it may include interactive content, useful for hoverable link previews. * [TokenField](../TokenField) (alpha) allows users to enter text with inline tokens. Use it to build AI prompt fields, tag inputs, structured search fields, mention inputs, and multi-select comboboxes. -* [MenuTrigger](/Menu#context-menu) now supports trigger="contextMenu", enabling accessible context menus via mouse, keyboard, and touch input. +* [MenuTrigger](/Menu#context-menu) now supports `trigger="contextMenu"`, enabling accessible context menus via mouse, keyboard, and touch input. * A simpler API to implement keyboard shortcuts to [useKeyboard](../useKeyboard). * Support for interactive components like textfields inside [Table](../Table#keyboard-navigation) rows. @@ -49,7 +49,7 @@ As always, thank you to all our contributors! - Support collections in React canary and Next.js 16's app router - [@nwidynski](https://github.com/nwidynski) - [PR](https://github.com/adobe/react-spectrum/pull/10323) ### ComboBox - Document `defaultFilter`'s default `contains` filter behavior - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10222) -- Accept a readonly array for controlled multiple ComboBox `value` - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/10290 +- Accept a readonly array for controlled multiple ComboBox `value` - [@lixiaoyan](https://github.com/lixiaoyan) - [PR](https://github.com/adobe/react-spectrum/pull/10290) ### Date and Time - Export `DayOfWeek` type from `@internationalized/date` - [@patrickwehbe](https://github.com/patrickwehbe) - [PR](https://github.com/adobe/react-spectrum/pull/10234) - Clamp milliseconds to a valid maximum of 999 - [@spokodev](https://github.com/spokodev) - [PR](https://github.com/adobe/react-spectrum/pull/10289) @@ -78,7 +78,7 @@ As always, thank you to all our contributors! ### ProgressBar - Guard the percentage calculation against `NaN` when `min` equals `max` - [@mvanhorn](https://github.com/mvanhorn) - [PR](https://github.com/adobe/react-spectrum/pull/10169) ### RadioGroup -- Fix Enter key presses on Radio inputs so they no longer block native implicit form submission - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) +- Fix `Enter` key presses on Radio inputs so they no longer block native implicit form submission - [@nami8824](https://github.com/nami8824) - [PR](https://github.com/adobe/react-spectrum/pull/9972) ### Select - Restore the default `type` for Select - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10361) ### Switch @@ -101,7 +101,7 @@ As always, thank you to all our contributors! ### usePress - Fix press events not firing consistently for trackpad taps - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10225) ### Virtualizer -- Add 'shouldObserveItemSize' to Virtualizer to force re-layout when items change size - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10258) +- Add `shouldObserveItemSize` to Virtualizer to force re-layout when items change size - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10258) ## Released packages ``` diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index c6a8f86c985..c2781fe80fa 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -24,7 +24,7 @@ export const isSubpage = true; # v1.6.0 -This release introduces the new [SideNav](../SideNav) component for building app navigation sidebars, adds trigger="contextMenu" support to [MenuTrigger](../Menu#context-menu), and lets [TableView](../TableView#keyboard-navigation) cells hold interactive content like TextFields. +This release introduces the new [SideNav](../SideNav) component (alpha) for building app navigation sidebars, adds `trigger="contextMenu"` support to [MenuTrigger](../Menu#context-menu), and lets [TableView](../TableView#keyboard-navigation) cells hold interactive content like TextFields. ## Changelog From 963e88ad3c3b288a11cdf55acc822f91724fae1c Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 30 Jul 2026 15:23:50 -0700 Subject: [PATCH 14/18] Add inline examples to release notes --- .../pages/react-aria/releases/v1-20-0.mdx | 240 +++++++++++++++++- .../dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 97 ++++++- packages/dev/s2-docs/src/CodeBlock.tsx | 30 ++- 3 files changed, 348 insertions(+), 19 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index 556658c5503..5eb8300ba7d 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -26,11 +26,241 @@ export const isSubpage = true; This release includes many new components and features! -* The new [PreviewTrigger](../PreviewTrigger) component shows a Popover on hover, focus, or long press. Unlike Tooltip, it may include interactive content, useful for hoverable link previews. -* [TokenField](../TokenField) (alpha) allows users to enter text with inline tokens. Use it to build AI prompt fields, tag inputs, structured search fields, mention inputs, and multi-select comboboxes. -* [MenuTrigger](/Menu#context-menu) now supports `trigger="contextMenu"`, enabling accessible context menus via mouse, keyboard, and touch input. -* A simpler API to implement keyboard shortcuts to [useKeyboard](../useKeyboard). -* Support for interactive components like textfields inside [Table](../Table#keyboard-navigation) rows. +The new [PreviewTrigger](../PreviewTrigger) component shows a Popover on hover, focus, or long press. Unlike Tooltip, it may include interactive content, useful for hoverable link previews. + +```tsx render hideCode +"use client"; +import {PreviewTrigger} from 'react-aria-components/PreviewTrigger'; +import {Popover} from 'vanilla-starter/Popover'; +import {Link} from 'vanilla-starter/Link'; +import {Button} from 'vanilla-starter/Button'; + +function ProfilePreview({handle, name, bio, avatar, href, ...popoverProps}) { + return ( + + @{handle} + +
+ +
+
{name}
+
@{handle}
+
+ +
+
{bio}
+
+
+ ); +} + +function Example(props) { + return ( +

+ Just shipped a new release with help from{' '} + + {' '}and{' '} + + ! +

+ ); +} +``` + +[TokenField](../TokenField) (alpha) allows users to enter text with inline tokens. Use it to build AI prompt fields, tag inputs, structured search fields, mention inputs, and multi-select comboboxes. + +```tsx render hideCode +"use client"; +import {Autocomplete} from 'react-aria-components/Autocomplete'; +import {Text} from 'react-aria-components/Text'; +import {Token, TokenField} from 'vanilla-starter/TokenField'; +import {tokenFieldPositionToDOMRange} from 'react-aria/useTokenField'; +import {Direction, TokenFieldValue} from 'react-aria-components/TokenField'; +import {Menu, MenuItem} from 'vanilla-starter/Menu'; +import {Popover} from 'vanilla-starter/Popover'; +import {useMemo, useRef, useState} from 'react'; + +type Item = {username: string} | {command: string; description: string}; + +/*- begin collapse -*/ +const usernames = [ + {username: 'alexmiller'}, + {username: 'sarahjones'}, + {username: 'davidkim'}, + {username: 'emmawatson'}, + {username: 'oliverliu'}, + {username: 'ellagreen'}, + {username: 'lucasbrown'}, + {username: 'amandarivera'}, + {username: 'masonlee'}, + {username: 'nataliasmith'}, + {username: 'benjamintaylor'}, + {username: 'zoewilson'}, + {username: 'henrywalker'}, + {username: 'madelineyoung'}, + {username: 'noahscott'}, + {username: 'lucygonzalez'}, + {username: 'jacobmartin'}, + {username: 'averymoore'}, + {username: 'loganmurphy'}, + {username: 'miahernandez'}, + {username: 'danieladair'}, + {username: 'sofiacox'}, + {username: 'jackharris'}, + {username: 'chloebaker'}, + {username: 'liamrodriguez'} +]; +/*- end collapse -*/ + +/*- begin collapse -*/ +const slashCommands = [ + {command: 'gif', description: 'Insert a GIF'}, + {command: 'todo', description: 'Add a todo list item'}, + {command: 'mention', description: 'Mention a user with @username'}, + {command: 'date', description: 'Insert the current date'}, + {command: 'quote', description: 'Insert a quote block'} +]; +/*- end collapse -*/ + +function Example() { + let inputRef = useRef(null); + let [value, setValue] = useState( + new TokenFieldValue([ + {type: 'text', text: 'This example has autocomplete for '}, + {type: 'token', text: '@usernames'}, + {type: 'text', text: ' and '}, + {type: 'token', text: '/commands'} + ]) + ); + + let [filterAnchor, filterValue] = useMemo(() => { + let filterAnchor = value.findText(value.caretPosition, Direction.Backward, /(?<=^|\s)[@/]/); + if (filterAnchor != null) { + let filterValue = value.slice(filterAnchor, value.caretPosition).toString(); + return [filterAnchor, filterValue]; + } + return [null, null]; + }, [value]); + + let items: Item[] = []; + if (filterValue != null && filterValue.startsWith('/')) { + items = slashCommands.filter(item => item.command.includes(filterValue.slice(1))); + } else if (filterValue != null && filterValue.startsWith('@')) { + items = usernames.filter(item => item.username.includes(filterValue.slice(1))); + } + + return ( + /*- begin highlight -*/ + + + {segment => {segment.text}} + + 0} + isNonModal + hideArrow + placement="bottom start" + trigger="MenuTrigger" + getTargetRect={target => { + return tokenFieldPositionToDOMRange(target, filterAnchor!).getBoundingClientRect(); + }}> + + {item => ( + { + setValue(value => + value.replaceRangeWithSegments( + filterAnchor!, + value.caretPosition, + [ + { + type: 'token', + text: 'username' in item ? '@' + item.username : item.command + }, + {type: 'text', text: ' '} + ], + false + ) + ); + }}> + {'username' in item ? item.username : item.command} + {'description' in item ? {item.description} : null} + + )} + + + + /*- end highlight -*/ + ); +} +``` + +[MenuTrigger](/Menu#context-menu) now supports trigger="contextMenu", enabling accessible context menus via mouse, keyboard, and touch input. + +```tsx render hideCode +"use client"; +import {MenuTrigger, Menu, MenuItem, SubmenuTrigger, Separator} from 'vanilla-starter/Menu'; +import {Button} from 'react-aria-components/Button'; + + + + + Open + + Open with + + Preview + Photoshop + Safari + + + + Get Info + Rename + Duplicate + Move to Trash + + +``` + +```css render hidden +.context-menu-trigger { + width: 250px; + height: 150px; + display: flex; + align-items: center; + justify-content: center; + border: 2px dashed var(--gray-400); + border-radius: 10px; + background: transparent; + font: inherit; + color: inherit; + outline: none; + + &[data-focus-visible] { + outline: 2px solid var(--focus-ring-color); + outline-offset: -2px; + } +} +``` + +In addition, we have added a simpler API to implement keyboard shortcuts to [useKeyboard](../useKeyboard), and support for interactive components like textfields inside Table rows. Finally, the React Aria and React Stately hook documentation has been completely rewritten! The new docs use the same styles as our React Aria Components examples, and show how to use both components and hooks together. diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index c2781fe80fa..f7aa9fe9c15 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -24,7 +24,102 @@ export const isSubpage = true; # v1.6.0 -This release introduces the new [SideNav](../SideNav) component (alpha) for building app navigation sidebars, adds `trigger="contextMenu"` support to [MenuTrigger](../Menu#context-menu), and lets [TableView](../TableView#keyboard-navigation) cells hold interactive content like TextFields. +This release introduces the new [SideNav](../SideNav) component for building app navigation sidebars, adds `trigger="contextMenu"` support to [MenuTrigger](../Menu#context-menu), and lets [TableView](../TableView#keyboard-navigation) cells hold interactive content like TextFields. + +```tsx render hideCode +"use client"; +import {SideNav, SideNavItem, SideNavItemContent, SideNavItemLink, SideNavSection, SideNavHeader, Text} from '@react-spectrum/s2/SideNav'; +import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; +import UserGroup from '@react-spectrum/s2/icons/UserGroup'; +import CCLibrary from '@react-spectrum/s2/icons/CCLibrary'; +import Files from '@react-spectrum/s2/icons/Files'; +import Images from '@react-spectrum/s2/icons/Images'; +import Animation from '@react-spectrum/s2/icons/Animation'; +import Download from '@react-spectrum/s2/icons/Download'; +import Apps from '@react-spectrum/s2/icons/Apps'; +import {RouterProvider} from 'react-aria-components'; +import React, {ReactNode, useState} from 'react'; + +function RoutedSideNav(props) { + let {children} = props; + let [selectedRoute, setSelectedRoute] = useState(props.defaultSelectedRoute); + + let updateSelection = (href: string) => { + setSelectedRoute(href); + }; + + return {children({selectedRoute})}; +} + + + {({selectedRoute}) => ( + + + Favorites + + + + + Applications + + + + + + + + Downloads + + + + + + Workspaces + + + + + Files + + + + + + + + Your Libraries + + + + + + + Photos + + + + + + + + + Shared with You + + + + + + + Animations + + + + + + + )} + +``` ## Changelog diff --git a/packages/dev/s2-docs/src/CodeBlock.tsx b/packages/dev/s2-docs/src/CodeBlock.tsx index 35a2d522013..b5c25dd75e4 100644 --- a/packages/dev/s2-docs/src/CodeBlock.tsx +++ b/packages/dev/s2-docs/src/CodeBlock.tsx @@ -75,6 +75,7 @@ interface CodeBlockProps extends VisualExampleProps { files?: string[]; expanded?: boolean; hidden?: boolean; + hideCode?: boolean; showCoachMark?: boolean; } @@ -85,6 +86,7 @@ export function CodeBlock({ files, expanded, hidden, + hideCode, ...props }: CodeBlockProps) { if (hidden) { @@ -147,19 +149,21 @@ export function CodeBlock({ return (
-
- {files ? ( - - {content} - - ) : ( - content - )} -
+ {!hideCode && ( +
+ {files ? ( + + {content} + + ) : ( + content + )} +
+ )}
); } From 0c4e87cb7c5b76da0e647ab8adf17e3a2d684a8b Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 30 Jul 2026 15:25:52 -0700 Subject: [PATCH 15/18] lint --- packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index f7aa9fe9c15..f4c04178b13 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -38,7 +38,7 @@ import Animation from '@react-spectrum/s2/icons/Animation'; import Download from '@react-spectrum/s2/icons/Download'; import Apps from '@react-spectrum/s2/icons/Apps'; import {RouterProvider} from 'react-aria-components'; -import React, {ReactNode, useState} from 'react'; +import React, {useState} from 'react'; function RoutedSideNav(props) { let {children} = props; From 19cca0fb8e8479884c2e848097f21f708c6adff5 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:46:27 -0700 Subject: [PATCH 16/18] Update packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx --- packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index 5eb8300ba7d..4dde13e3852 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -209,7 +209,7 @@ function Example() { } ``` -[MenuTrigger](/Menu#context-menu) now supports trigger="contextMenu", enabling accessible context menus via mouse, keyboard, and touch input. +[MenuTrigger](/Menu#context-menu) now supports `trigger="contextMenu"`, enabling accessible context menus via mouse, keyboard, and touch input. ```tsx render hideCode "use client"; From 49e50ca8d0535ee06a2faf97843520ac4b0f2d80 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 30 Jul 2026 19:18:52 -0700 Subject: [PATCH 17/18] Add versions, update copy --- .../s2-docs/pages/react-aria/releases/v1-20-0.mdx | 15 +++++++++++---- packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx | 8 +------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index 4dde13e3852..171a1340a57 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -17,7 +17,7 @@ import docs from 'docs:@react-spectrum/s2'; export const hideNav = true; export const section = 'Releases'; export const tags = ['release', 'React Aria']; -export const date = 'July 30, 2026'; +export const date = 'July 31, 2026'; export const title = 'v1.20.0'; export const description = 'This release introduces two new components, along with several new features including support for context menus, a simplified API for keyboard shortcuts, and the ability to use interactive components within Table rows. It also adds new documentation for hooks.' export const isSubpage = true; @@ -26,7 +26,7 @@ export const isSubpage = true; This release includes many new components and features! -The new [PreviewTrigger](../PreviewTrigger) component shows a Popover on hover, focus, or long press. Unlike Tooltip, it may include interactive content, useful for hoverable link previews. +The new [PreviewTrigger](../PreviewTrigger) component shows a Popover on hover, focus, or long press. Unlike Tooltip, it may include interactive content, useful for hoverable link previews. Keyboard users can tab in and out of the popover, and it's accessible across devices. Includes open delay, safe area handling, and coordinated entry and exit animations. ```tsx render hideCode "use client"; @@ -79,7 +79,7 @@ function Example(props) { } ``` -[TokenField](../TokenField) (alpha) allows users to enter text with inline tokens. Use it to build AI prompt fields, tag inputs, structured search fields, mention inputs, and multi-select comboboxes. +[TokenField](../TokenField) (alpha) allows users to enter text with inline tokens, supporting autocomplete and auto-tokenization. Use it to build AI prompt fields, tag inputs, structured search fields, mention inputs, and multi-select comboboxes. ```tsx render hideCode "use client"; @@ -332,8 +332,15 @@ As always, thank you to all our contributors! - Fix press events not firing consistently for trackpad taps - [@LFDanLu](https://github.com/LFDanLu) - [PR](https://github.com/adobe/react-spectrum/pull/10225) ### Virtualizer - Add `shouldObserveItemSize` to Virtualizer to force re-layout when items change size - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/10258) + ## Released packages ``` -[TODO: paste output of yarn bumpVersions here] + - @internationalized/date@3.12.3 + - @internationalized/string@3.2.10 + - @react-types/shared@3.36.1 + - @react-aria/optimize-locales-plugin@2.0.1 + - react-aria@3.51.0 + - react-aria-components@1.20.0 + - react-stately@3.49.0 ``` diff --git a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx index f4c04178b13..39cb2792219 100644 --- a/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx +++ b/packages/dev/s2-docs/pages/s2/releases/v1-6-0.mdx @@ -17,7 +17,7 @@ import docs from 'docs:@react-spectrum/s2'; export const hideNav = true; export const section = 'Releases'; export const tags = ['release', 'S2']; -export const date = 'July 30, 2026'; +export const date = 'July 31, 2026'; export const title = 'v1.6.0'; export const description = 'This release adds the long-awaited SideNav component for app navigation sidebars, context menu support in MenuTrigger, and support for textfields and other interactive elements in TableView cells.'; export const isSubpage = true; @@ -139,9 +139,3 @@ function RoutedSideNav(props) { - Fixes empty TextArea height jumping when an overlay is open - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9933) ### Toast - Allows an `id` prop to be passed through to the DOM on Toast - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/10342) - -## Released packages - -``` -[TODO: paste output of yarn bumpVersions here] -``` From ae623b40a5d9cc6624c35442dcbb3e96b109262b Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Thu, 30 Jul 2026 20:33:55 -0700 Subject: [PATCH 18/18] Fix example --- packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx index 171a1340a57..6f9c12248c4 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-20-0.mdx @@ -87,7 +87,7 @@ import {Autocomplete} from 'react-aria-components/Autocomplete'; import {Text} from 'react-aria-components/Text'; import {Token, TokenField} from 'vanilla-starter/TokenField'; import {tokenFieldPositionToDOMRange} from 'react-aria/useTokenField'; -import {Direction, TokenFieldValue} from 'react-aria-components/TokenField'; +import {TokenFieldValue} from 'react-aria-components/TokenField'; import {Menu, MenuItem} from 'vanilla-starter/Menu'; import {Popover} from 'vanilla-starter/Popover'; import {useMemo, useRef, useState} from 'react'; @@ -146,7 +146,7 @@ function Example() { ); let [filterAnchor, filterValue] = useMemo(() => { - let filterAnchor = value.findText(value.caretPosition, Direction.Backward, /(?<=^|\s)[@/]/); + let filterAnchor = value.findText(value.caretPosition, TokenFieldValue.Direction.Backward, /(?<=^|\s)[@/]/); if (filterAnchor != null) { let filterValue = value.slice(filterAnchor, value.caretPosition).toString(); return [filterAnchor, filterValue];