From ac94a49396f73cc85f3103da38d50c4fc5f027ac Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Wed, 4 Feb 2026 14:23:12 -0600 Subject: [PATCH 1/5] fix: docs use client usage in exampless (#9595) --- packages/dev/s2-docs/pages/react-aria/Slider.mdx | 1 + .../blog/how-we-internationalized-our-numberfield.mdx | 2 ++ packages/dev/s2-docs/pages/react-aria/selection.mdx | 1 + packages/dev/s2-docs/pages/s2/AvatarGroup.mdx | 1 + packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx | 3 ++- packages/dev/s2-docs/pages/s2/ButtonGroup.mdx | 3 ++- packages/dev/s2-docs/pages/s2/Card.mdx | 1 + packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx | 1 + packages/dev/s2-docs/pages/s2/ComboBox.mdx | 1 + packages/dev/s2-docs/pages/s2/ContextualHelp.mdx | 1 + packages/dev/s2-docs/pages/s2/Form.mdx | 1 + packages/dev/s2-docs/pages/s2/Picker.mdx | 1 + packages/dev/s2-docs/pages/s2/RadioGroup.mdx | 1 + packages/dev/s2-docs/pages/s2/SegmentedControl.mdx | 1 + packages/dev/s2-docs/pages/s2/TableView.mdx | 1 + packages/dev/s2-docs/pages/s2/TagGroup.mdx | 1 + packages/dev/s2-docs/pages/s2/TreeView.mdx | 1 + packages/dev/s2-docs/pages/s2/forms.mdx | 1 + packages/dev/s2-docs/pages/s2/selection.mdx | 1 + packages/react-aria-components/docs/Tree.mdx | 1 + 20 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/Slider.mdx b/packages/dev/s2-docs/pages/react-aria/Slider.mdx index 7c83151522b..490b37962d1 100644 --- a/packages/dev/s2-docs/pages/react-aria/Slider.mdx +++ b/packages/dev/s2-docs/pages/react-aria/Slider.mdx @@ -71,6 +71,7 @@ function Example() { Set the `value` or `defaultValue` to an array of numbers to render multiple thumbs. Each thumb should have an `aria-label` to describe it for assistive technologies (provided via `thumbLabels` here). ```tsx render +"use client"; import {Slider} from 'vanilla-starter/Slider'; diff --git a/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx b/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx index 90a363736d9..1c925bd5e4d 100644 --- a/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx +++ b/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx @@ -12,6 +12,7 @@ export const description = 'Display a hierarchy of links to the current page or {docs.exports.Breadcrumbs.description} ```tsx render docs={docs.exports.Breadcrumbs} links={docs.links} props={['size', 'isDisabled']} initialProps={{}} type="s2" +"use client"; import {Breadcrumbs, Breadcrumb} from '@react-spectrum/s2'; @@ -74,7 +75,7 @@ import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; padding: 16, boxSizing: 'border-box', borderWidth: 1, - borderStyle: 'solid', + borderStyle: 'solid', borderColor: 'gray-300', borderRadius: 'default', resize: 'horizontal', diff --git a/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx b/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx index 4540881d585..ca2066c9636 100644 --- a/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx +++ b/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx @@ -12,6 +12,7 @@ export const description = 'A grouping of buttons whose actions are related to e {docs.exports.ButtonGroup.description} ```tsx render docs={docs.exports.ButtonGroup} links={docs.links} props={['orientation', 'align', 'size', 'isDisabled']} type="s2" +"use client"; import {ButtonGroup, Button} from '@react-spectrum/s2'; @@ -37,7 +38,7 @@ import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; padding: 16, boxSizing: 'border-box', borderWidth: 1, - borderStyle: 'solid', + borderStyle: 'solid', borderColor: 'gray-300', borderRadius: 'default', resize: 'horizontal', diff --git a/packages/dev/s2-docs/pages/s2/Card.mdx b/packages/dev/s2-docs/pages/s2/Card.mdx index da8e7ff398a..8313f4554dd 100644 --- a/packages/dev/s2-docs/pages/s2/Card.mdx +++ b/packages/dev/s2-docs/pages/s2/Card.mdx @@ -236,6 +236,7 @@ import Select from '@react-spectrum/s2/icons/Select'; Wrap a card in a [Skeleton](Skeleton) to display a loading state. Placeholder text content and images are displayed in a skeleton style. ```tsx render docs={docs.exports.Skeleton} links={docs.links} props={['isLoading']} initialProps={{isLoading: true}} type="s2" wide +"use client"; import {Skeleton, Card, CardPreview, Image, Content, Text} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx b/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx index cab2905c377..014e40a17ee 100644 --- a/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx +++ b/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx @@ -15,6 +15,7 @@ export const description = 'Allows a user to select one or more items in a list {docs.exports.CheckboxGroup.description} ```tsx render docs={docs.exports.CheckboxGroup} links={docs.links} props={['label', 'size', 'orientation', 'labelPosition', 'description', 'contextualHelp', 'isEmphasized', 'isDisabled']} initialProps={{label: 'Favorite sports'}} type="s2" +"use client"; import {CheckboxGroup, Checkbox} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/ComboBox.mdx b/packages/dev/s2-docs/pages/s2/ComboBox.mdx index 7c9ad5d75b3..61dfb4f0daa 100644 --- a/packages/dev/s2-docs/pages/s2/ComboBox.mdx +++ b/packages/dev/s2-docs/pages/s2/ComboBox.mdx @@ -15,6 +15,7 @@ export const description = 'Combines a text input with a listbox, and allows a u {docs.exports.ComboBox.description} ```tsx render docs={docs.exports.ComboBox} links={docs.links} props={['label', 'placeholder', 'size', 'labelPosition', 'description', 'contextualHelp', 'isDisabled']} initialProps={{label: 'Ice cream flavor', placeholder: 'Select a flavor'}} type="s2" +"use client"; import {ComboBox, ComboBoxItem} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx b/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx index b9c0100c4e0..4c71e5901e9 100644 --- a/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx +++ b/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx @@ -12,6 +12,7 @@ export const description = 'Shows extra information about an adjacent component. {docs.exports.ContextualHelp.description} ```tsx render docs={docs.exports.ContextualHelp} links={docs.links} props={['variant', 'size', 'placement']} initialProps={{variant: 'help'}} type="s2" +"use client"; import {ContextualHelp, Heading, Content, Footer, Link} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/Form.mdx b/packages/dev/s2-docs/pages/s2/Form.mdx index 5b4cb93ab15..640f3d1c4a1 100644 --- a/packages/dev/s2-docs/pages/s2/Form.mdx +++ b/packages/dev/s2-docs/pages/s2/Form.mdx @@ -13,6 +13,7 @@ export const description = 'Provides layout and alignment for a grouping of fiel ```tsx render docs={docs.exports.Form} links={docs.links} props={['size', 'labelPosition', 'labelAlign', 'necessityIndicator', 'isRequired', 'isDisabled', 'isEmphasized']} type="s2" +"use client"; import {Form, TextField, Checkbox, ButtonGroup, Button} from '@react-spectrum/s2'; import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; diff --git a/packages/dev/s2-docs/pages/s2/Picker.mdx b/packages/dev/s2-docs/pages/s2/Picker.mdx index 9c753d2f71b..f97556c364d 100644 --- a/packages/dev/s2-docs/pages/s2/Picker.mdx +++ b/packages/dev/s2-docs/pages/s2/Picker.mdx @@ -15,6 +15,7 @@ export const description = 'Displays a collapsible list of options, and allows a {docs.exports.Picker.description} ```tsx render docs={docs.exports.Picker} links={docs.links} props={['label', 'selectionMode', 'size', 'labelPosition', 'description', 'contextualHelp', 'isQuiet', 'isDisabled']} initialProps={{label: 'Ice cream flavor'}} type="s2" +"use client"; import {Picker, PickerItem} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/RadioGroup.mdx b/packages/dev/s2-docs/pages/s2/RadioGroup.mdx index 70fc70de365..bcb472c63f6 100644 --- a/packages/dev/s2-docs/pages/s2/RadioGroup.mdx +++ b/packages/dev/s2-docs/pages/s2/RadioGroup.mdx @@ -15,6 +15,7 @@ export const description = 'Allows a user to select a single item from a list of {docs.exports.RadioGroup.description} ```tsx render docs={docs.exports.RadioGroup} links={docs.links} props={['label', 'size', 'orientation', 'labelPosition', 'description', 'contextualHelp', 'isEmphasized', 'isDisabled']} initialProps={{label: 'Favorite pet'}} type="s2" +"use client"; import {RadioGroup, Radio} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx b/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx index bc1a77929c9..08cfcba3d56 100644 --- a/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx +++ b/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx @@ -12,6 +12,7 @@ export const description = 'A mutually exclusive group of buttons used for view {docs.exports.SegmentedControl.description} ```tsx render docs={docs.exports.SegmentedControl} links={docs.links} props={['isJustified', 'isDisabled']} initialProps={{'aria-label': 'Time granularity'}} type="s2" wide +"use client"; import {SegmentedControl, SegmentedControlItem} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/TableView.mdx b/packages/dev/s2-docs/pages/s2/TableView.mdx index ee62a5b06c3..e788adce27a 100644 --- a/packages/dev/s2-docs/pages/s2/TableView.mdx +++ b/packages/dev/s2-docs/pages/s2/TableView.mdx @@ -15,6 +15,7 @@ export const description = 'Displays data in rows and columns, with row selectio {docs.exports.TableView.description} ```tsx render docs={docs.exports.TableView} links={docs.links} props={['selectionMode', 'overflowMode', 'density', 'isQuiet']} initialProps={{'aria-label': 'Files', selectionMode: 'multiple'}} type="s2" +"use client"; import {TableView, TableHeader, Column, TableBody, Row, Cell} from '@react-spectrum/s2'; import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; diff --git a/packages/dev/s2-docs/pages/s2/TagGroup.mdx b/packages/dev/s2-docs/pages/s2/TagGroup.mdx index 9009d062de4..346b1ec8568 100644 --- a/packages/dev/s2-docs/pages/s2/TagGroup.mdx +++ b/packages/dev/s2-docs/pages/s2/TagGroup.mdx @@ -11,6 +11,7 @@ export const description = 'Displays a list of items, with support for keyboard {docs.exports.TagGroup.description} ```tsx render docs={docs.exports.TagGroup} links={docs.links} props={['label', 'selectionMode', 'size', 'labelPosition', 'maxRows', 'description', 'contextualHelp', 'isEmphasized']} initialProps={{label: 'Ice cream flavors', selectionMode: 'multiple', maxRows: 2}} controlOptions={{maxRows: {minValue: 1}}} type="s2" +"use client"; import {TagGroup, Tag} from '@react-spectrum/s2'; diff --git a/packages/dev/s2-docs/pages/s2/TreeView.mdx b/packages/dev/s2-docs/pages/s2/TreeView.mdx index e21a7afcc50..6bab6e3ac6a 100644 --- a/packages/dev/s2-docs/pages/s2/TreeView.mdx +++ b/packages/dev/s2-docs/pages/s2/TreeView.mdx @@ -15,6 +15,7 @@ export const description = 'Displays hierarchical data with selection and collap {docs.exports.TreeView.description} ```tsx render docs={docs.exports.TreeView} links={docs.links} props={['selectionMode']} initialProps={{selectionMode: 'multiple'}} type="s2" wide +"use client"; import {TreeView, TreeViewItem, TreeViewItemContent} from '@react-spectrum/s2'; From 946dd6e4c88e3e0e75826f1c3ae3e701551afdfc Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Wed, 4 Feb 2026 14:29:53 -0600 Subject: [PATCH 2/5] fix: docs small bugs (#9596) * fix: docs small bugs * do the correct calendar * fix text not meeting contrast in range calendar validation in dark mode * get rid of outline:none for calendar because button base handles that for us * get rid of doubled up providers in home page * whoops wrong settings provider * remove coachmark from rac release notes --------- Co-authored-by: Daniel Lu --- .../dev/s2-docs/pages/react-aria/releases/v1-15-0.mdx | 6 ++---- packages/dev/s2-docs/pages/s2/index.mdx | 8 +++----- packages/dev/s2-docs/src/SettingsProvider.tsx | 10 ++++++---- starters/docs/src/RangeCalendar.css | 1 + starters/docs/src/theme.css | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/releases/v1-15-0.mdx b/packages/dev/s2-docs/pages/react-aria/releases/v1-15-0.mdx index c799c00d545..872fe097cb2 100644 --- a/packages/dev/s2-docs/pages/react-aria/releases/v1-15-0.mdx +++ b/packages/dev/s2-docs/pages/react-aria/releases/v1-15-0.mdx @@ -24,7 +24,7 @@ export const isSubpage = true; New year, new release, and the shine hasn’t worn off from our new documentation website: we’ve already added new [Agent Skills](../ai#agent-skills) and improved the search experience 😍. This month’s release includes a big update to our compatibility, with DOM customization options via a [new `render` prop](../customization#dom-elements) for React Aria Components. This feature will help with cases such as rendering Router Link components, or for use with animation libraries. We have also fixed our most upvoted issue: we now constrain dates on blur instead of as you type, allowing more input flexibility and greatly improving the user experience of our date fields. -Thank you to all of our contributors for your bug fixes, features, and feedback. We look forward to another great year ahead! +Thank you to all of our contributors for your bug fixes, features, and feedback. We look forward to another great year ahead! ## Change log ### General @@ -32,8 +32,6 @@ Thank you to all of our contributors for your bug fixes, features, and feedback. * Add Agent skills - [@reidbarber](https://github.com/reidbarber) - [PR](https://github.com/adobe/react-spectrum/pull/9515) ### Button * Support passing function via `formAction` prop - [@stefanprobst](https://github.com/stefanprobst) - [PR](https://github.com/adobe/react-spectrum/pull/9501) -### CoachMark - * Update `CoachMarkContext` and `SlottedContextValue` types - [@unional](https://github.com/unional) - [PR](https://github.com/adobe/react-spectrum/pull/9423) ### ColorField * Add missing data attributes - [@mehdibha](https://github.com/mehdibha) - [PR](https://github.com/adobe/react-spectrum/pull/9105) ### ComboBox @@ -99,7 +97,7 @@ Thank you to all of our contributors for your bug fixes, features, and feedback. * Use `typeof globalThis` to reference global object - [@quisido](https://github.com/quisido) - [PR](https://github.com/adobe/react-spectrum/pull/9402) ### Virtualizer * Add warning to users to set width and height if using Virtualizer - [@yihuiliao](https://github.com/yihuiliao) - [PR](https://github.com/adobe/react-spectrum/pull/9492) - + ## Under Construction * Shadow DOM * Use `node.contains` for Shadow DOM usage - [@snowystinger](https://github.com/snowystinger) - [PR](https://github.com/adobe/react-spectrum/pull/9485), [PR](https://github.com/adobe/react-spectrum/pull/9581) diff --git a/packages/dev/s2-docs/pages/s2/index.mdx b/packages/dev/s2-docs/pages/s2/index.mdx index 6c107d89651..b9d0dd97e92 100644 --- a/packages/dev/s2-docs/pages/s2/index.mdx +++ b/packages/dev/s2-docs/pages/s2/index.mdx @@ -13,7 +13,7 @@ export const omitFromNav = true; export const hideFromSearch = true; - + @@ -50,8 +50,6 @@ export const hideFromSearch = true; } )}} /> - - - - + + diff --git a/packages/dev/s2-docs/src/SettingsProvider.tsx b/packages/dev/s2-docs/src/SettingsProvider.tsx index 2eaf68b6219..b7a89b1a1dc 100644 --- a/packages/dev/s2-docs/src/SettingsProvider.tsx +++ b/packages/dev/s2-docs/src/SettingsProvider.tsx @@ -2,11 +2,13 @@ import {type ColorScheme, SettingsContext} from './SettingsContext'; import {Provider} from '@react-spectrum/s2'; -import React, {ReactNode, useCallback, useSyncExternalStore} from 'react'; +import React, {JSX, ReactNode, useCallback, useSyncExternalStore} from 'react'; import {useLocalStorage} from './useLocalStorage'; interface SettingsProviderProps { - children: ReactNode + children: ReactNode, + elementType?: keyof JSX.IntrinsicElements, + locale?: string } function subscribeToColorScheme(callback: () => void) { @@ -53,7 +55,7 @@ export function useSettingsState() { }; } -export function SettingsContextProvider({children}: SettingsProviderProps) { +export function SettingsContextProvider({children, elementType, locale}: SettingsProviderProps) { let {colorScheme, toggleColorScheme, systemColorScheme, providerColorScheme} = useSettingsState(); return ( @@ -63,7 +65,7 @@ export function SettingsContextProvider({children}: SettingsProviderProps) { toggleColorScheme, systemColorScheme }}> - + {children} diff --git a/starters/docs/src/RangeCalendar.css b/starters/docs/src/RangeCalendar.css index 8aac1390a1b..5312b7d4be3 100644 --- a/starters/docs/src/RangeCalendar.css +++ b/starters/docs/src/RangeCalendar.css @@ -35,6 +35,7 @@ padding: 0 calc(var(--gap) / 2); position: relative; z-index: 1; + outline: none; span { display: flex; diff --git a/starters/docs/src/theme.css b/starters/docs/src/theme.css index 3453b27cc6a..99ba536c990 100644 --- a/starters/docs/src/theme.css +++ b/starters/docs/src/theme.css @@ -156,7 +156,7 @@ --highlight-background-invalid: oklch(from var(--red) var(--lightness-900) c h); --highlight-foreground: white; --highlight-overlay: oklch(from var(--tint-1000) l c h / 15%); - --invalid-color: oklch(from var(--red) var(--lightness-900) c h); + --invalid-color: oklch(from var(--red) var(--lightness-1000) c h); --field-background: var(--gray-50); } From 41e9464ac4a9fa03103c4ba91f809cac5fde30f5 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:07:20 -0800 Subject: [PATCH 3/5] docs: remove mention of ListBox in S2 migration docs (#9603) --- packages/dev/s2-docs/pages/s2/migrating.mdx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/dev/s2-docs/pages/s2/migrating.mdx b/packages/dev/s2-docs/pages/s2/migrating.mdx index 44b3db59074..2aa45260848 100644 --- a/packages/dev/s2-docs/pages/s2/migrating.mdx +++ b/packages/dev/s2-docs/pages/s2/migrating.mdx @@ -241,7 +241,6 @@ No updates needed. - If within `Breadcrumbs`: Update `Item` to be a `Breadcrumb` - If within `Picker`: Update `Item` to be a `PickerItem` - If within `ComboBox`: Update `Item` to be a `ComboBoxItem` -- If within `ListBox`: Update `Item` to be a `ListBoxItem` - If within `TabList`: Update `Item` to be a `Tab` - If within `TabPanels`: Update `Item` to be a `TabPanel` and remove surrounding `TabPanels` - Update `key` to be `id` (and keep `key` if rendered inside `array.map`) @@ -251,10 +250,6 @@ No updates needed. - Change `variant="overBackground"` to `staticColor="white"` - If `a` was used inside `Link` (legacy API), remove the `a` and apply props (i.e `href`) directly to `Link` -### ListBox - -- Update `Item` to be a `ListBoxItem` - ### Menu - Update `Item` to be a `MenuItem` From 81498ed15af39b6464be3bc4ed8a670be8bb752a Mon Sep 17 00:00:00 2001 From: Reid Barber Date: Wed, 4 Feb 2026 17:09:26 -0600 Subject: [PATCH 4/5] docs: open llms.txt links in new tab to avoid client side routing failure (#9605) --- packages/dev/s2-docs/pages/react-aria/ai.mdx | 2 +- packages/dev/s2-docs/pages/s2/ai.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/ai.mdx b/packages/dev/s2-docs/pages/react-aria/ai.mdx index 9a431108e17..a5765bee396 100644 --- a/packages/dev/s2-docs/pages/react-aria/ai.mdx +++ b/packages/dev/s2-docs/pages/react-aria/ai.mdx @@ -103,4 +103,4 @@ Add the `.md` extension to the URL to get the markdown version of a page. Additi ## llms.txt -The [llms.txt](https://react-aria.adobe.com/llms.txt) file contains a list of all the markdown pages available in the React Aria documentation. \ No newline at end of file +The llms.txt file contains a list of all the markdown pages available in the React Aria documentation. \ No newline at end of file diff --git a/packages/dev/s2-docs/pages/s2/ai.mdx b/packages/dev/s2-docs/pages/s2/ai.mdx index 7098809c705..03e7bae1660 100644 --- a/packages/dev/s2-docs/pages/s2/ai.mdx +++ b/packages/dev/s2-docs/pages/s2/ai.mdx @@ -103,4 +103,4 @@ Add the `.md` extension to the URL to get the markdown version of a page. Additi ## llms.txt -The [llms.txt](https://react-spectrum.adobe.com/llms.txt) file contains a list of all the markdown pages available in the React Spectrum documentation. +The llms.txt file contains a list of all the markdown pages available in the React Spectrum documentation. From 676de79d47a4a670a5f3ae9f6e35d06d4863ccd1 Mon Sep 17 00:00:00 2001 From: Robert Snow Date: Wed, 4 Feb 2026 17:18:24 -0600 Subject: [PATCH 5/5] fix: typescript for slotted context value (#9597) --- packages/react-aria-components/src/utils.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-aria-components/src/utils.tsx b/packages/react-aria-components/src/utils.tsx index 501379df2de..e8b58b79dd5 100644 --- a/packages/react-aria-components/src/utils.tsx +++ b/packages/react-aria-components/src/utils.tsx @@ -20,7 +20,7 @@ interface SlottedValue { slots?: Record } -export type SlottedContextValue = (SlottedValue & T) | null | undefined; +export type SlottedContextValue = SlottedValue | T | null | undefined; export type ContextValue = SlottedContextValue>; type ProviderValue = [Context, T];