diff --git a/.storybook-s2/docs/Intro.jsx b/.storybook-s2/docs/Intro.jsx
index b3ef25052cd..933882036af 100644
--- a/.storybook-s2/docs/Intro.jsx
+++ b/.storybook-s2/docs/Intro.jsx
@@ -249,6 +249,7 @@ import {ActionButton} from '@react-spectrum/s2';
insetY
insetStart
insetEnd
+
visibility
UNSAFE Style Overrides
We highly discourage overriding the styles of React Spectrum components because it may break at any time when we change our implementation, making it difficult for you to update in the future. Consider using React Aria Components with our style macro to build a custom component with Spectrum styles instead.
diff --git a/packages/dev/mcp/package.json b/packages/dev/mcp/package.json
index 7b9f4df6829..88a78d1f6e9 100644
--- a/packages/dev/mcp/package.json
+++ b/packages/dev/mcp/package.json
@@ -16,7 +16,6 @@
"zod": "^3.23.8"
},
"devDependencies": {
- "@adobe/spectrum-css-temp": "3.0.0-alpha.1",
"typescript": "^5.8.2"
},
"engines": {
diff --git a/packages/dev/s2-docs/pages/index.mdx b/packages/dev/s2-docs/pages/index.mdx
index 03cac99e67b..4996f81cd33 100644
--- a/packages/dev/s2-docs/pages/index.mdx
+++ b/packages/dev/s2-docs/pages/index.mdx
@@ -1,30 +1,25 @@
import {Layout} from '../src/Layout';
+import {LinkButton} from '@react-spectrum/s2';
export default Layout;
export const section = 'Getting started';
-# Test page
+# Welcome!
-Hello world! some `inline code` and **bold** stuff...
+The React Spectrum docs have a new look! This is a **beta preview** so keep in mind that we will be continuing to make improvements before the full release.
-Bulleted list:
+Get Started with Spectrum 2
-* One
-* Two
-* Three
+## What's new?
-Numbered list:
+- Docs for [Spectrum 2](https://s2.spectrum.adobe.com) components
+- New docs for [React Aria](/react-aria/Autocomplete.html) and [Internationalized](/internationalized/date/index.html)
+- A new search menu experience
+- Interactive controls for examples
+- New concept guides
+- AI-friendly markdown docs
+- Much more...
-1. Do this
-2. Then that
-3. Then this other thing
+## Roadmap
-## H2
-
-### H3
-
-#### H4
-
-## Another H2
-
-### Another H3
+The existing docs are still available [here](https://react-spectrum.adobe.com/react-spectrum/index.html). We plan to do a full release of the new docs site by early 2026, so we welcome any and all feedback!
diff --git a/packages/dev/s2-docs/pages/react-aria/Autocomplete.mdx b/packages/dev/s2-docs/pages/react-aria/Autocomplete.mdx
index e76026b6351..98d37b1b987 100644
--- a/packages/dev/s2-docs/pages/react-aria/Autocomplete.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Autocomplete.mdx
@@ -5,6 +5,8 @@ import docs from 'docs:react-aria-components';
import vanillaDocs from 'docs:vanilla-starter/Autocomplete';
import '../../tailwind/tailwind.css';
+export const tags = ['combobox', 'typeahead', 'input'];
+
# Autocomplete
{docs.exports.Autocomplete.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx b/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx
index 40c907ba6f5..996252b0426 100644
--- a/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx
@@ -6,6 +6,8 @@ import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/breadcrumbs/docs/anatomy.svg';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2';
+export const tags = ['navigation'];
+
# Breadcrumbs
{docs.exports.Breadcrumbs.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Button.mdx b/packages/dev/s2-docs/pages/react-aria/Button.mdx
index 1e4a1e13d3e..5a33d2e962e 100644
--- a/packages/dev/s2-docs/pages/react-aria/Button.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Button.mdx
@@ -10,6 +10,8 @@ import tailwindDocs from 'docs:tailwind-starter/Button';
import '../../tailwind/tailwind.css';
import typesDocs from 'docs:@react-types/shared/src/events.d.ts';
+export const tags = ['btn'];
+
# Button
{docs.exports.Button.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Calendar.mdx b/packages/dev/s2-docs/pages/react-aria/Calendar.mdx
index f41e81ef254..53dd5510e35 100644
--- a/packages/dev/s2-docs/pages/react-aria/Calendar.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Calendar.mdx
@@ -8,6 +8,8 @@ import {Calendar as TailwindCalendar} from 'tailwind-starter/Calendar';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/calendar/docs/calendar-anatomy.svg';
+export const tags = ['date'];
+
# Calendar
{docs.exports.Calendar.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Checkbox.mdx b/packages/dev/s2-docs/pages/react-aria/Checkbox.mdx
index 4993b448529..a2bf72b8e6a 100644
--- a/packages/dev/s2-docs/pages/react-aria/Checkbox.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Checkbox.mdx
@@ -7,6 +7,8 @@ import {Checkbox as TailwindCheckbox} from 'tailwind-starter/Checkbox';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/checkbox/docs/checkbox-anatomy.svg';
+export const tags = ['input'];
+
# Checkbox
{docs.exports.Checkbox.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx b/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx
index 5a6c420d82f..9897e078944 100644
--- a/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx
@@ -6,6 +6,8 @@ import vanillaDocs from 'docs:vanilla-starter/CheckboxGroup';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/checkbox/docs/checkboxgroup-anatomy.svg';
+export const tags = ['input'];
+
# CheckboxGroup
{docs.exports.CheckboxGroup.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorArea.mdx b/packages/dev/s2-docs/pages/react-aria/ColorArea.mdx
index 35b04d0f34f..a8ec4c4095d 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorArea.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorArea.mdx
@@ -7,6 +7,8 @@ import {ColorArea as TailwindColorArea} from 'tailwind-starter/ColorArea';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/color/docs/ColorAreaAnatomy.svg';
+export const tags = [];
+
# ColorArea
{docs.exports.ColorArea.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorField.mdx b/packages/dev/s2-docs/pages/react-aria/ColorField.mdx
index 443bbe0f552..3db74874820 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorField.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorField.mdx
@@ -8,6 +8,8 @@ import vanillaDocs from 'docs:vanilla-starter/ColorField';
import docs from 'docs:react-aria-components';
import Anatomy from '@react-aria/color/docs/ColorFieldAnatomy.svg';
+export const tags = ['input'];
+
# ColorField
{docs.exports.ColorField.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx b/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx
index 78cabad0040..60d981ff4fb 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx
@@ -7,6 +7,8 @@ import {ColorPicker as VanillaColorPicker} from 'vanilla-starter/ColorPicker';
import {ColorPicker as TailwindColorPicker} from 'tailwind-starter/ColorPicker';
import '../../tailwind/tailwind.css';
+export const tags = ['input'];
+
# ColorPicker
{docs.exports.ColorPicker.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx b/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx
index 5f75aeb59fd..36fea4f04b5 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx
@@ -8,6 +8,8 @@ import {ColorSlider as TailwindColorSlider} from 'tailwind-starter/ColorSlider';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/color/docs/ColorSliderAnatomy.svg';
+export const tags = ['input'];
+
# ColorSlider
{docs.exports.ColorSlider.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorSwatch.mdx b/packages/dev/s2-docs/pages/react-aria/ColorSwatch.mdx
index 8087fde84dd..bade31f1a6e 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorSwatch.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorSwatch.mdx
@@ -7,6 +7,8 @@ import {ColorSwatch as VanillaColorSwatch} from 'vanilla-starter/ColorSwatch';
import {ColorSwatch as TailwindColorSwatch} from 'tailwind-starter/ColorSwatch';
import '../../tailwind/tailwind.css';
+export const tags = [];
+
# ColorSwatch
{docs.exports.ColorSwatch.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx b/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx
index 7e72e7bc316..6507f370aa9 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx
@@ -6,6 +6,8 @@ import {ColorSwatchPicker as VanillaColorSwatchPicker, ColorSwatchPickerItem} fr
import '../../tailwind/tailwind.css';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['input'];
+
# ColorSwatchPicker
{docs.exports.ColorSwatchPicker.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorWheel.mdx b/packages/dev/s2-docs/pages/react-aria/ColorWheel.mdx
index 97f2c7a4e82..c77b5ff8521 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorWheel.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorWheel.mdx
@@ -7,6 +7,8 @@ import {ColorWheel as TailwindColorWheel} from 'tailwind-starter/ColorWheel';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/color/docs/ColorWheelAnatomy.svg';
+export const tags = ['input'];
+
# ColorWheel
{docs.exports.ColorWheel.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx b/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx
index 32615e63185..31a6ba4092b 100644
--- a/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx
@@ -7,6 +7,8 @@ import vanillaDocs from 'docs:vanilla-starter/ComboBox';
import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/ComboBoxAnatomy.svg';
+export const tags = ['autocomplete', 'search', 'typeahead', 'input'];
+
# ComboBox
{docs.exports.ComboBox.description}
@@ -234,7 +236,7 @@ function ControlledComboBox() {
## Item actions
-Use the `onAction` prop on a `` to perform a custom action when the item is selected. This example adds a "Create" action for the current input value.
+Use the `onAction` prop on a `` to perform a custom action when the item is pressed. This example adds a "Create" action for the current input value.
```tsx render
"use client";
diff --git a/packages/dev/s2-docs/pages/react-aria/DateField.mdx b/packages/dev/s2-docs/pages/react-aria/DateField.mdx
index 7486ec9a2bc..9cfb715efb9 100644
--- a/packages/dev/s2-docs/pages/react-aria/DateField.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DateField.mdx
@@ -8,6 +8,8 @@ import {DateField as TailwindDateField} from 'tailwind-starter/DateField';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/datepicker/docs/datefield-anatomy.svg';
+export const tags = ['calendar', 'input'];
+
# DateField
{docs.exports.DateField.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx b/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx
index 6b00d085405..76392bbe1b8 100644
--- a/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx
@@ -8,6 +8,8 @@ import {DatePicker as TailwindDatePicker} from 'tailwind-starter/DatePicker';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/datepicker/docs/datepicker-anatomy.svg';
+export const tags = ['calendar', 'input'];
+
# DatePicker
{docs.exports.DatePicker.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx b/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx
index e0ed0dc0d68..594284c0a39 100644
--- a/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx
@@ -8,6 +8,8 @@ import {DateRangePicker as TailwindDateRangePicker} from 'tailwind-starter/DateR
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/datepicker/docs/daterangepicker-anatomy.svg';
+export const tags = ['calendar', 'input'];
+
# DateRangePicker
{docs.exports.DateRangePicker.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx b/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx
index 1dcd6352b53..976330b2e80 100644
--- a/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx
@@ -6,6 +6,8 @@ import vanillaDocs from 'docs:vanilla-starter/Disclosure';
import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/DisclosureAnatomy.svg';
+export const tags = ['accordion', 'collapsible', 'expandable', 'details'];
+
# Disclosure
{docs.exports.Disclosure.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx b/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx
index d29f783f11e..e7d4482aa07 100644
--- a/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx
@@ -6,6 +6,8 @@ import vanillaDocs from 'docs:vanilla-starter/DisclosureGroup';
import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/DisclosureGroupAnatomy.svg';
+export const tags = ['accordion', 'collapsible', 'expandable', 'details'];
+
# DisclosureGroup
{docs.exports.DisclosureGroup.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/DropZone.mdx b/packages/dev/s2-docs/pages/react-aria/DropZone.mdx
index a9ae584563c..6935cc9f37f 100644
--- a/packages/dev/s2-docs/pages/react-aria/DropZone.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DropZone.mdx
@@ -4,6 +4,8 @@ export default Layout;
import docs from 'docs:react-aria-components';
import '../../tailwind/tailwind.css';
+export const tags = ['file', 'drag', 'dnd', 'upload'];
+
# DropZone
{docs.exports.DropZone.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx b/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx
index 3611cf18a50..e57dce90ed3 100644
--- a/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx
@@ -5,6 +5,8 @@ import docs from 'docs:react-aria-components';
import '../../tailwind/tailwind.css';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['upload', 'input'];
+
# FileTrigger
{docs.exports.FileTrigger.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Form.mdx b/packages/dev/s2-docs/pages/react-aria/Form.mdx
index a2db61ac1dd..88a106efb32 100644
--- a/packages/dev/s2-docs/pages/react-aria/Form.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Form.mdx
@@ -4,6 +4,8 @@ export default Layout;
import docs from 'docs:react-aria-components';
import '../../tailwind/tailwind.css';
+export const tags = ['input', 'field'];
+
# Form
{docs.exports.Form.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/GridList.mdx b/packages/dev/s2-docs/pages/react-aria/GridList.mdx
index 894d2be8efb..79a2074fe6b 100644
--- a/packages/dev/s2-docs/pages/react-aria/GridList.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/GridList.mdx
@@ -7,6 +7,8 @@ import vanillaDocs from 'docs:vanilla-starter/GridList';
import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/GridListAnatomy.svg';
+export const tags = ['list view'];
+
# GridList
{docs.exports.GridList.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Group.mdx b/packages/dev/s2-docs/pages/react-aria/Group.mdx
index 02f37c1615a..50e6a310257 100644
--- a/packages/dev/s2-docs/pages/react-aria/Group.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Group.mdx
@@ -5,6 +5,8 @@ import docs from 'docs:react-aria-components';
import vanillaDocs from 'docs:vanilla-starter/InputGroup';
import '../../tailwind/tailwind.css';
+export const tags = [];
+
# Group
{docs.exports.Group.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Link.mdx b/packages/dev/s2-docs/pages/react-aria/Link.mdx
index 6d4fe5df439..e3036dfe068 100644
--- a/packages/dev/s2-docs/pages/react-aria/Link.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Link.mdx
@@ -7,6 +7,8 @@ import {Link as TailwindLink} from 'tailwind-starter/Link';
import tailwindDocs from 'docs:tailwind-starter/Link';
import '../../tailwind/tailwind.css';
+export const tags = ['anchor', 'hyperlink', 'href'];
+
# Link
{docs.exports.Link.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ListBox.mdx b/packages/dev/s2-docs/pages/react-aria/ListBox.mdx
index 1737a7ff767..b78a4def22b 100644
--- a/packages/dev/s2-docs/pages/react-aria/ListBox.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ListBox.mdx
@@ -8,6 +8,8 @@ import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/ListBoxAnatomy.svg';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['options'];
+
# ListBox
{docs.exports.ListBox.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Menu.mdx b/packages/dev/s2-docs/pages/react-aria/Menu.mdx
index a375873ff6e..f417dfe3fea 100644
--- a/packages/dev/s2-docs/pages/react-aria/Menu.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Menu.mdx
@@ -6,6 +6,8 @@ import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/MenuAnatomy.svg';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['dropdown'];
+
# Menu
{docs.exports.Menu.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Meter.mdx b/packages/dev/s2-docs/pages/react-aria/Meter.mdx
index 3fac214f3d9..e78fe80d2d9 100644
--- a/packages/dev/s2-docs/pages/react-aria/Meter.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Meter.mdx
@@ -8,6 +8,8 @@ import {Meter as TailwindMeter} from 'tailwind-starter/Meter';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/meter/docs/anatomy.svg';
+export const tags = ['gauge', 'progress', 'level'];
+
# Meter
{docs.exports.Meter.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Modal.mdx b/packages/dev/s2-docs/pages/react-aria/Modal.mdx
index 5081ba50b5e..ebe154987ff 100644
--- a/packages/dev/s2-docs/pages/react-aria/Modal.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Modal.mdx
@@ -7,6 +7,8 @@ import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/overlays/docs/modal-anatomy.svg';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['dialog', 'popup', 'overlay'];
+
# Modal
{docs.exports.Modal.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/NumberField.mdx b/packages/dev/s2-docs/pages/react-aria/NumberField.mdx
index 95098240eb1..24d328e12ba 100644
--- a/packages/dev/s2-docs/pages/react-aria/NumberField.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/NumberField.mdx
@@ -8,6 +8,8 @@ import {NumberField as TailwindNumberField} from 'tailwind-starter/NumberField';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/numberfield/docs/anatomy.svg';
+export const tags = ['input'];
+
# NumberField
{docs.exports.NumberField.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Popover.mdx b/packages/dev/s2-docs/pages/react-aria/Popover.mdx
index b3d0ce28ab6..3a1e936c328 100644
--- a/packages/dev/s2-docs/pages/react-aria/Popover.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Popover.mdx
@@ -7,6 +7,8 @@ import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/overlays/docs/popover-anatomy.svg';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['popup', 'overlay'];
+
# Popover
{docs.exports.Popover.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ProgressBar.mdx b/packages/dev/s2-docs/pages/react-aria/ProgressBar.mdx
index 6051718bd9b..de08ee662b8 100644
--- a/packages/dev/s2-docs/pages/react-aria/ProgressBar.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ProgressBar.mdx
@@ -10,6 +10,8 @@ import {ProgressBar as TailwindProgressBar} from 'tailwind-starter/ProgressBar';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/progress/docs/anatomy.svg';
+export const tags = ['loading', 'progress'];
+
# ProgressBar
{docs.exports.ProgressBar.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/RadioGroup.mdx b/packages/dev/s2-docs/pages/react-aria/RadioGroup.mdx
index 749ab7297fe..06a1c84703a 100644
--- a/packages/dev/s2-docs/pages/react-aria/RadioGroup.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/RadioGroup.mdx
@@ -6,6 +6,8 @@ import vanillaDocs from 'docs:vanilla-starter/RadioGroup';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/radio/docs/anatomy.svg';
+export const tags = ['input'];
+
# RadioGroup
{docs.exports.RadioGroup.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/RangeCalendar.mdx b/packages/dev/s2-docs/pages/react-aria/RangeCalendar.mdx
index f087d0d3683..7c48c7d51c0 100644
--- a/packages/dev/s2-docs/pages/react-aria/RangeCalendar.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/RangeCalendar.mdx
@@ -8,6 +8,8 @@ import {RangeCalendar as TailwindRangeCalendar} from 'tailwind-starter/RangeCale
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/calendar/docs/rangecalendar-anatomy.svg';
+export const tags = ['calendar'];
+
# RangeCalendar
{docs.exports.RangeCalendar.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/SearchField.mdx b/packages/dev/s2-docs/pages/react-aria/SearchField.mdx
index ef2594c640b..e20c652fda2 100644
--- a/packages/dev/s2-docs/pages/react-aria/SearchField.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/SearchField.mdx
@@ -8,6 +8,8 @@ import {SearchField as TailwindSearchField} from 'tailwind-starter/SearchField';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/searchfield/docs/anatomy.svg';
+export const tags = ['input'];
+
# SearchField
{docs.exports.SearchField.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Select.mdx b/packages/dev/s2-docs/pages/react-aria/Select.mdx
index 1f364142b20..c0aca087ceb 100644
--- a/packages/dev/s2-docs/pages/react-aria/Select.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Select.mdx
@@ -6,6 +6,8 @@ import vanillaDocs from 'docs:vanilla-starter/Select';
import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/SelectAnatomy.svg';
+export const tags = ['picker', 'dropdown', 'menu', 'input'];
+
# Select
{docs.exports.Select.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Slider.mdx b/packages/dev/s2-docs/pages/react-aria/Slider.mdx
index eb197c8cdd6..7814628066d 100644
--- a/packages/dev/s2-docs/pages/react-aria/Slider.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Slider.mdx
@@ -8,6 +8,8 @@ import tailwindDocs from 'docs:tailwind-starter/Slider';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/slider/docs/anatomy.svg';
+export const tags = ['range input', 'track', 'scrubber'];
+
# Slider
{docs.exports.Slider.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Switch.mdx b/packages/dev/s2-docs/pages/react-aria/Switch.mdx
index 6428136437e..561f6448efe 100644
--- a/packages/dev/s2-docs/pages/react-aria/Switch.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Switch.mdx
@@ -7,6 +7,8 @@ import {Switch as TailwindSwitch} from 'tailwind-starter/Switch';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/switch/docs/anatomy.svg';
+export const tags = ['toggle', 'input'];
+
# Switch
{docs.exports.Switch.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Table.mdx b/packages/dev/s2-docs/pages/react-aria/Table.mdx
index 7674fb584ce..79cdd6207e5 100644
--- a/packages/dev/s2-docs/pages/react-aria/Table.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Table.mdx
@@ -7,6 +7,8 @@ import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/TableAnatomy.svg';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['data', 'grid'];
+
# Table
{docs.exports.Table.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Tabs.mdx b/packages/dev/s2-docs/pages/react-aria/Tabs.mdx
index 6528867280f..39c808d326b 100644
--- a/packages/dev/s2-docs/pages/react-aria/Tabs.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Tabs.mdx
@@ -7,6 +7,8 @@ import vanillaDocs from 'docs:vanilla-starter/Tabs';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/tabs/docs/anatomy.svg';
+export const tags = ['navigation'];
+
# Tabs
{docs.exports.Tabs.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/TagGroup.mdx b/packages/dev/s2-docs/pages/react-aria/TagGroup.mdx
index fc35de3e5fd..f601d910e9b 100644
--- a/packages/dev/s2-docs/pages/react-aria/TagGroup.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/TagGroup.mdx
@@ -7,6 +7,8 @@ import vanillaDocs from 'docs:vanilla-starter/TagGroup';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/tag/docs/anatomy.svg';
+export const tags = ['chips', 'pills'];
+
# TagGroup
{docs.exports.TagGroup.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/TextField.mdx b/packages/dev/s2-docs/pages/react-aria/TextField.mdx
index 67903766ee4..9d80ded4d70 100644
--- a/packages/dev/s2-docs/pages/react-aria/TextField.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/TextField.mdx
@@ -8,6 +8,8 @@ import {TextField as TailwindTextField} from 'tailwind-starter/TextField';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/textfield/docs/anatomy.svg';
+export const tags = ['input'];
+
# TextField
{docs.exports.TextField.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/TimeField.mdx b/packages/dev/s2-docs/pages/react-aria/TimeField.mdx
index eaffcdc2857..19a0a1d25c3 100644
--- a/packages/dev/s2-docs/pages/react-aria/TimeField.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/TimeField.mdx
@@ -8,6 +8,8 @@ import {TimeField as TailwindTimeField} from 'tailwind-starter/TimeField';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/datepicker/docs/timefield-anatomy.svg';
+export const tags = ['date', 'input'];
+
# TimeField
{docs.exports.TimeField.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ToggleButton.mdx b/packages/dev/s2-docs/pages/react-aria/ToggleButton.mdx
index 7c21325355b..18fc796135c 100644
--- a/packages/dev/s2-docs/pages/react-aria/ToggleButton.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ToggleButton.mdx
@@ -7,6 +7,8 @@ import {ToggleButton as TailwindToggleButton} from 'tailwind-starter/ToggleButto
import tailwindDocs from 'docs:tailwind-starter/ToggleButton';
import '../../tailwind/tailwind.css';
+export const tags = ['button', 'btn'];
+
# ToggleButton
{docs.exports.ToggleButton.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/ToggleButtonGroup.mdx b/packages/dev/s2-docs/pages/react-aria/ToggleButtonGroup.mdx
index 60a642b1acb..604764f1cf6 100644
--- a/packages/dev/s2-docs/pages/react-aria/ToggleButtonGroup.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ToggleButtonGroup.mdx
@@ -5,6 +5,8 @@ import docs from 'docs:react-aria-components';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/button/docs/ToggleButtonGroupAnatomy.svg';
+export const tags = ['toggle', 'btn'];
+
# ToggleButtonGroup
{docs.exports.ToggleButtonGroup.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Toolbar.mdx b/packages/dev/s2-docs/pages/react-aria/Toolbar.mdx
index b77c81190c7..00645e48778 100644
--- a/packages/dev/s2-docs/pages/react-aria/Toolbar.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Toolbar.mdx
@@ -5,6 +5,8 @@ import docs from 'docs:react-aria-components';
import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/toolbar/docs/toolbar-anatomy.svg';
+export const tags = ['group'];
+
# Toolbar
{docs.exports.Toolbar.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Tooltip.mdx b/packages/dev/s2-docs/pages/react-aria/Tooltip.mdx
index df101ed3442..e7f3454f23c 100644
--- a/packages/dev/s2-docs/pages/react-aria/Tooltip.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Tooltip.mdx
@@ -7,6 +7,8 @@ import '../../tailwind/tailwind.css';
import Anatomy from '@react-aria/tooltip/docs/anatomy.svg';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['hint', 'popup', 'info'];
+
# Tooltip
{docs.exports.Tooltip.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Tree.mdx b/packages/dev/s2-docs/pages/react-aria/Tree.mdx
index 31c7d597628..0d267d93b39 100644
--- a/packages/dev/s2-docs/pages/react-aria/Tree.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Tree.mdx
@@ -7,6 +7,8 @@ import vanillaDocs from 'docs:vanilla-starter/Tree';
import '../../tailwind/tailwind.css';
import Anatomy from 'react-aria-components/docs/TreeAnatomy.svg';
+export const tags = ['data', 'tree', 'nested', 'hierarchy'];
+
# Tree
{docs.exports.Tree.description}
diff --git a/packages/dev/s2-docs/pages/react-aria/Virtualizer.mdx b/packages/dev/s2-docs/pages/react-aria/Virtualizer.mdx
index 6c5436f6c91..f05b92efac4 100644
--- a/packages/dev/s2-docs/pages/react-aria/Virtualizer.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Virtualizer.mdx
@@ -4,6 +4,8 @@ export default Layout;
import docs from 'docs:react-aria-components';
import {GroupedPropTable} from '../../src/PropTable';
+export const tags = ['windowing', 'list', 'grid', 'infinite'];
+
# Virtualizer
{docs.exports.Virtualizer.description}
diff --git a/packages/dev/s2-docs/pages/s2/Accordion.mdx b/packages/dev/s2-docs/pages/s2/Accordion.mdx
index f2cebe13100..d8b12ac3907 100644
--- a/packages/dev/s2-docs/pages/s2/Accordion.mdx
+++ b/packages/dev/s2-docs/pages/s2/Accordion.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['collapsible', 'expandable', 'disclosure'];
+
# Accordion
{docs.exports.Accordion.description}
@@ -10,8 +12,9 @@ import docs from 'docs:@react-spectrum/s2';
```tsx render docs={docs.exports.Accordion} links={docs.links} props={['size', 'density', 'isQuiet', 'isDisabled', 'allowsMultipleExpanded']} type="s2"
"use client";
import {Accordion, Disclosure, DisclosureTitle, DisclosurePanel} from '@react-spectrum/s2';
+import {style} from '@react-spectrum/s2/style' with {type: 'macro'};
-
+Personal InformationPersonal information form here.
diff --git a/packages/dev/s2-docs/pages/s2/ActionBar.mdx b/packages/dev/s2-docs/pages/s2/ActionBar.mdx
index 55d85b65022..6793685fca7 100644
--- a/packages/dev/s2-docs/pages/s2/ActionBar.mdx
+++ b/packages/dev/s2-docs/pages/s2/ActionBar.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['toolbar'];
+
# ActionBar
{docs.exports.ActionBar.description}
diff --git a/packages/dev/s2-docs/pages/s2/ActionButton.mdx b/packages/dev/s2-docs/pages/s2/ActionButton.mdx
index f00f600b345..67d396871f7 100644
--- a/packages/dev/s2-docs/pages/s2/ActionButton.mdx
+++ b/packages/dev/s2-docs/pages/s2/ActionButton.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ActionButton} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# ActionButton
{docs.exports.ActionButton.description}
diff --git a/packages/dev/s2-docs/pages/s2/ActionButtonGroup.mdx b/packages/dev/s2-docs/pages/s2/ActionButtonGroup.mdx
index 14b648b62ac..8ff16cf5942 100644
--- a/packages/dev/s2-docs/pages/s2/ActionButtonGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/ActionButtonGroup.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['group'];
+
# ActionButtonGroup
{docs.exports.ActionButtonGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/ActionMenu.mdx b/packages/dev/s2-docs/pages/s2/ActionMenu.mdx
index d80d40ce599..3a90c41eeef 100644
--- a/packages/dev/s2-docs/pages/s2/ActionMenu.mdx
+++ b/packages/dev/s2-docs/pages/s2/ActionMenu.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['dropdown'];
+
# ActionMenu
{docs.exports.ActionMenu.description}
diff --git a/packages/dev/s2-docs/pages/s2/Avatar.mdx b/packages/dev/s2-docs/pages/s2/Avatar.mdx
index 018abb50721..39e9a138afe 100644
--- a/packages/dev/s2-docs/pages/s2/Avatar.mdx
+++ b/packages/dev/s2-docs/pages/s2/Avatar.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Avatar} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['profile', 'user'];
+
# Avatar
{docs.exports.Avatar.description}
diff --git a/packages/dev/s2-docs/pages/s2/AvatarGroup.mdx b/packages/dev/s2-docs/pages/s2/AvatarGroup.mdx
index 4f41d07e6ca..abe911f1e0c 100644
--- a/packages/dev/s2-docs/pages/s2/AvatarGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/AvatarGroup.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['profile', 'user'];
+
# AvatarGroup
{docs.exports.AvatarGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/Badge.mdx b/packages/dev/s2-docs/pages/s2/Badge.mdx
index 0eedb0af8f0..63b0efc7b00 100644
--- a/packages/dev/s2-docs/pages/s2/Badge.mdx
+++ b/packages/dev/s2-docs/pages/s2/Badge.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Badge, Text} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['label', 'tag', 'chip'];
+
# Badge
{docs.exports.Badge.description}
diff --git a/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx b/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx
index 5035931cad6..c8480681a01 100644
--- a/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx
+++ b/packages/dev/s2-docs/pages/s2/Breadcrumbs.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {InlineAlert, Heading, Content} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['navigation'];
+
# Breadcrumbs
{docs.exports.Breadcrumbs.description}
diff --git a/packages/dev/s2-docs/pages/s2/Button.mdx b/packages/dev/s2-docs/pages/s2/Button.mdx
index 3d2f4c90ef4..e6640c6946c 100644
--- a/packages/dev/s2-docs/pages/s2/Button.mdx
+++ b/packages/dev/s2-docs/pages/s2/Button.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Button} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['btn'];
+
# Button
{docs.exports.Button.description}
diff --git a/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx b/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx
index a1369a23093..3a37dacfd52 100644
--- a/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/ButtonGroup.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ButtonGroup, Button} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# ButtonGroup
{docs.exports.ButtonGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/Calendar.mdx b/packages/dev/s2-docs/pages/s2/Calendar.mdx
index 15bb482b3d1..ab780c0bcde 100644
--- a/packages/dev/s2-docs/pages/s2/Calendar.mdx
+++ b/packages/dev/s2-docs/pages/s2/Calendar.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Calendar} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['date'];
+
# Calendar
{docs.exports.Calendar.description}
diff --git a/packages/dev/s2-docs/pages/s2/Card.mdx b/packages/dev/s2-docs/pages/s2/Card.mdx
index 8fe399b54a1..b663040d504 100644
--- a/packages/dev/s2-docs/pages/s2/Card.mdx
+++ b/packages/dev/s2-docs/pages/s2/Card.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['box'];
+
# Card
{docs.exports.Card.description}
diff --git a/packages/dev/s2-docs/pages/s2/CardView.mdx b/packages/dev/s2-docs/pages/s2/CardView.mdx
index b867b8f4c1a..bf76ff3e2a9 100644
--- a/packages/dev/s2-docs/pages/s2/CardView.mdx
+++ b/packages/dev/s2-docs/pages/s2/CardView.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['grid', 'gallery'];
+
# CardView
{docs.exports.CardView.description}
diff --git a/packages/dev/s2-docs/pages/s2/Checkbox.mdx b/packages/dev/s2-docs/pages/s2/Checkbox.mdx
index 709ca6366ef..fb56f3f0bf6 100644
--- a/packages/dev/s2-docs/pages/s2/Checkbox.mdx
+++ b/packages/dev/s2-docs/pages/s2/Checkbox.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Checkbox} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# Checkbox
{docs.exports.Checkbox.description}
diff --git a/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx b/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx
index 590669c36fb..076dca3ab08 100644
--- a/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/CheckboxGroup.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {CheckboxGroup} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# CheckboxGroup
{docs.exports.CheckboxGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/ColorArea.mdx b/packages/dev/s2-docs/pages/s2/ColorArea.mdx
index 2a9178e03b1..e4ed78b1ab1 100644
--- a/packages/dev/s2-docs/pages/s2/ColorArea.mdx
+++ b/packages/dev/s2-docs/pages/s2/ColorArea.mdx
@@ -5,6 +5,8 @@ import {ColorArea} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
import racDocs from 'docs:react-aria-components';
+export const tags = [];
+
# ColorArea
{docs.exports.ColorArea.description}
diff --git a/packages/dev/s2-docs/pages/s2/ColorField.mdx b/packages/dev/s2-docs/pages/s2/ColorField.mdx
index 54a0a302b5e..a28337dcad8 100644
--- a/packages/dev/s2-docs/pages/s2/ColorField.mdx
+++ b/packages/dev/s2-docs/pages/s2/ColorField.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ColorField} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# ColorField
{docs.exports.ColorField.description}
diff --git a/packages/dev/s2-docs/pages/s2/ColorSlider.mdx b/packages/dev/s2-docs/pages/s2/ColorSlider.mdx
index 761a1821388..179aad8bc09 100644
--- a/packages/dev/s2-docs/pages/s2/ColorSlider.mdx
+++ b/packages/dev/s2-docs/pages/s2/ColorSlider.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ColorSlider} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# ColorSlider
{docs.exports.ColorSlider.description}
diff --git a/packages/dev/s2-docs/pages/s2/ColorSwatch.mdx b/packages/dev/s2-docs/pages/s2/ColorSwatch.mdx
index 028de165b03..96ce289a0bb 100644
--- a/packages/dev/s2-docs/pages/s2/ColorSwatch.mdx
+++ b/packages/dev/s2-docs/pages/s2/ColorSwatch.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ColorSwatch} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# ColorSwatch
{docs.exports.ColorSwatch.description}
diff --git a/packages/dev/s2-docs/pages/s2/ColorSwatchPicker.mdx b/packages/dev/s2-docs/pages/s2/ColorSwatchPicker.mdx
index 3b71425a8d5..cd9810677e6 100644
--- a/packages/dev/s2-docs/pages/s2/ColorSwatchPicker.mdx
+++ b/packages/dev/s2-docs/pages/s2/ColorSwatchPicker.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# ColorSwatchPicker
{docs.exports.ColorSwatchPicker.description}
diff --git a/packages/dev/s2-docs/pages/s2/ColorWheel.mdx b/packages/dev/s2-docs/pages/s2/ColorWheel.mdx
index adb6054830d..b0fc043c98a 100644
--- a/packages/dev/s2-docs/pages/s2/ColorWheel.mdx
+++ b/packages/dev/s2-docs/pages/s2/ColorWheel.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ColorWheel} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = [];
+
# ColorWheel
{docs.exports.ColorWheel.description}
diff --git a/packages/dev/s2-docs/pages/s2/ComboBox.mdx b/packages/dev/s2-docs/pages/s2/ComboBox.mdx
index 51213a1fc1e..7738d59a6c6 100644
--- a/packages/dev/s2-docs/pages/s2/ComboBox.mdx
+++ b/packages/dev/s2-docs/pages/s2/ComboBox.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['autocomplete', 'search', 'typeahead'];
+
# ComboBox
{docs.exports.ComboBox.description}
@@ -189,7 +191,7 @@ function Example() {
### Actions
-Use the `onAction` prop on a `` to perform a custom action when the item is selected. This example adds a "Create" action for the current input value.
+Use the `onAction` prop on a `` to perform a custom action when the item is pressed. This example adds a "Create" action for the current input value.
```tsx render
"use client";
diff --git a/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx b/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx
index 49132bddfaa..2f76b45567d 100644
--- a/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx
+++ b/packages/dev/s2-docs/pages/s2/ContextualHelp.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ContextualHelp, Heading, Content, Footer} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['help'];
+
# ContextualHelp
{docs.exports.ContextualHelp.description}
diff --git a/packages/dev/s2-docs/pages/s2/DateField.mdx b/packages/dev/s2-docs/pages/s2/DateField.mdx
index 90f4b751b77..db23c7a9e48 100644
--- a/packages/dev/s2-docs/pages/s2/DateField.mdx
+++ b/packages/dev/s2-docs/pages/s2/DateField.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {DateField} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['calendar'];
+
# DateField
{docs.exports.DateField.description}
diff --git a/packages/dev/s2-docs/pages/s2/DatePicker.mdx b/packages/dev/s2-docs/pages/s2/DatePicker.mdx
index 99f7163afac..d9d0b779732 100644
--- a/packages/dev/s2-docs/pages/s2/DatePicker.mdx
+++ b/packages/dev/s2-docs/pages/s2/DatePicker.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {DatePicker} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['calendar'];
+
# DatePicker
{docs.exports.DatePicker.description}
diff --git a/packages/dev/s2-docs/pages/s2/DateRangePicker.mdx b/packages/dev/s2-docs/pages/s2/DateRangePicker.mdx
index d8fb36447ab..b1f2e0fe9c0 100644
--- a/packages/dev/s2-docs/pages/s2/DateRangePicker.mdx
+++ b/packages/dev/s2-docs/pages/s2/DateRangePicker.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {DateRangePicker} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['calendar'];
+
# DateRangePicker
{docs.exports.DateRangePicker.description}
diff --git a/packages/dev/s2-docs/pages/s2/Dialog.mdx b/packages/dev/s2-docs/pages/s2/Dialog.mdx
index c450babf450..dfc3e176a13 100644
--- a/packages/dev/s2-docs/pages/s2/Dialog.mdx
+++ b/packages/dev/s2-docs/pages/s2/Dialog.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Dialog, FullscreenDialog, CustomDialog, DialogTrigger, DialogContainer, Button, ButtonGroup, Heading, Header, Content, Footer, Image, TextField, Checkbox, CloseButton, ActionButton, IllustratedMessage} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['modal', 'popup', 'overlay'];
+
# Dialog
{docs.exports.Dialog.description}
diff --git a/packages/dev/s2-docs/pages/s2/Disclosure.mdx b/packages/dev/s2-docs/pages/s2/Disclosure.mdx
index a324190d427..7aa0cf0b2cf 100644
--- a/packages/dev/s2-docs/pages/s2/Disclosure.mdx
+++ b/packages/dev/s2-docs/pages/s2/Disclosure.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Disclosure, DisclosureTitle, DisclosurePanel, DisclosureHeader, ActionButton} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['accordion', 'collapsible', 'expandable'];
+
# Disclosure
{docs.exports.Disclosure.description}
diff --git a/packages/dev/s2-docs/pages/s2/Divider.mdx b/packages/dev/s2-docs/pages/s2/Divider.mdx
index 94f265bb630..02dd3c132ce 100644
--- a/packages/dev/s2-docs/pages/s2/Divider.mdx
+++ b/packages/dev/s2-docs/pages/s2/Divider.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Divider} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['separator', 'hr', 'horizontal rule', 'line'];
+
# Divider
{docs.exports.Divider.description}
diff --git a/packages/dev/s2-docs/pages/s2/DropZone.mdx b/packages/dev/s2-docs/pages/s2/DropZone.mdx
index 84aa077be0b..b5c3612a2ff 100644
--- a/packages/dev/s2-docs/pages/s2/DropZone.mdx
+++ b/packages/dev/s2-docs/pages/s2/DropZone.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['file', 'drag', 'upload'];
+
# DropZone
{docs.exports.DropZone.description}
diff --git a/packages/dev/s2-docs/pages/s2/Form.mdx b/packages/dev/s2-docs/pages/s2/Form.mdx
index 6b16a635277..85b788497ea 100644
--- a/packages/dev/s2-docs/pages/s2/Form.mdx
+++ b/packages/dev/s2-docs/pages/s2/Form.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Form, TextField, Checkbox, Button, RadioGroup, Radio, InlineAlert, Heading, Content, ButtonGroup} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['input', 'field'];
+
# Form
{docs.exports.Form.description}
diff --git a/packages/dev/s2-docs/pages/s2/Icons.mdx b/packages/dev/s2-docs/pages/s2/Icons.mdx
index 249694d3fad..d27f1f4e83e 100644
--- a/packages/dev/s2-docs/pages/s2/Icons.mdx
+++ b/packages/dev/s2-docs/pages/s2/Icons.mdx
@@ -8,6 +8,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['svg', 'workflow', 'symbol'];
+
# Icons
React Spectrum offers a set of open source icons that can be imported from `@react-spectrum/s2/icons`.
@@ -39,11 +41,44 @@ import Edit from '@react-spectrum/s2/icons/Edit';
### Icon colors
-
+
### Icon sizes
-
+
## Custom icons
diff --git a/packages/dev/s2-docs/pages/s2/IllustratedMessage.mdx b/packages/dev/s2-docs/pages/s2/IllustratedMessage.mdx
index 227b80b84fb..565cf212191 100644
--- a/packages/dev/s2-docs/pages/s2/IllustratedMessage.mdx
+++ b/packages/dev/s2-docs/pages/s2/IllustratedMessage.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {IllustratedMessage, Heading, Content, Button} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['empty', 'placeholder', 'error'];
+
# IllustratedMessage
{docs.exports.IllustratedMessage.description}
diff --git a/packages/dev/s2-docs/pages/s2/Illustrations.mdx b/packages/dev/s2-docs/pages/s2/Illustrations.mdx
index 2899806ed46..183ba392d91 100644
--- a/packages/dev/s2-docs/pages/s2/Illustrations.mdx
+++ b/packages/dev/s2-docs/pages/s2/Illustrations.mdx
@@ -6,6 +6,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['svg', 'gradient', 'linear', 'symbol'];
+
# Illustrations
React Spectrum offers a collection of illustrations that can be imported from `@react-spectrum/s2/illustrations`.
diff --git a/packages/dev/s2-docs/pages/s2/Image.mdx b/packages/dev/s2-docs/pages/s2/Image.mdx
index 65c47c19e75..4134048208e 100644
--- a/packages/dev/s2-docs/pages/s2/Image.mdx
+++ b/packages/dev/s2-docs/pages/s2/Image.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Image} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['img', 'picture', 'photo'];
+
# Image
{docs.exports.Image.description}
diff --git a/packages/dev/s2-docs/pages/s2/InlineAlert.mdx b/packages/dev/s2-docs/pages/s2/InlineAlert.mdx
index 7fc0c7a370f..0c48908605e 100644
--- a/packages/dev/s2-docs/pages/s2/InlineAlert.mdx
+++ b/packages/dev/s2-docs/pages/s2/InlineAlert.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {InlineAlert} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['alert', 'notification', 'banner', 'message'];
+
# InlineAlert
{docs.exports.InlineAlert.description}
diff --git a/packages/dev/s2-docs/pages/s2/Link.mdx b/packages/dev/s2-docs/pages/s2/Link.mdx
index 9d4e4872e0f..48746705590 100644
--- a/packages/dev/s2-docs/pages/s2/Link.mdx
+++ b/packages/dev/s2-docs/pages/s2/Link.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Link, Text} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['anchor', 'hyperlink', 'href'];
+
# Link
{docs.exports.Link.description}
diff --git a/packages/dev/s2-docs/pages/s2/LinkButton.mdx b/packages/dev/s2-docs/pages/s2/LinkButton.mdx
index c3bf7a21436..2c1853cc3ac 100644
--- a/packages/dev/s2-docs/pages/s2/LinkButton.mdx
+++ b/packages/dev/s2-docs/pages/s2/LinkButton.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {LinkButton, Text} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['button'];
+
# LinkButton
{docs.exports.LinkButton.description}
diff --git a/packages/dev/s2-docs/pages/s2/Menu.mdx b/packages/dev/s2-docs/pages/s2/Menu.mdx
index 9bd1a57a77f..67e5a8f292a 100644
--- a/packages/dev/s2-docs/pages/s2/Menu.mdx
+++ b/packages/dev/s2-docs/pages/s2/Menu.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['dropdown'];
+
# Menu
{docs.exports.Menu.description}
diff --git a/packages/dev/s2-docs/pages/s2/Meter.mdx b/packages/dev/s2-docs/pages/s2/Meter.mdx
index 1bd65455c98..60c35b2c4d1 100644
--- a/packages/dev/s2-docs/pages/s2/Meter.mdx
+++ b/packages/dev/s2-docs/pages/s2/Meter.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Meter} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['gauge', 'progress', 'level'];
+
# Meter
{docs.exports.Meter.description}
diff --git a/packages/dev/s2-docs/pages/s2/Migrating.mdx b/packages/dev/s2-docs/pages/s2/Migrating.mdx
index c71a445664d..1b42d053070 100644
--- a/packages/dev/s2-docs/pages/s2/Migrating.mdx
+++ b/packages/dev/s2-docs/pages/s2/Migrating.mdx
@@ -5,6 +5,7 @@ import {StaticTable} from '../../src/StaticTable';
export default Layout;
export const section = 'Guides';
+export const tags = ['codemod', 'upgrade', 'update'];
# Migrating to Spectrum 2
@@ -127,7 +128,6 @@ No updates needed.
### ColorField
- Remove `isQuiet` (it is no longer supported in Spectrum 2)
-- Remove `placeholder` (it has been removed due to accessibility issues)
- Change `validationState="invalid"` to `isInvalid`
- Remove `validationState="valid"` (it is no longer supported in Spectrum 2)
@@ -147,7 +147,6 @@ No updates needed.
- Change `menuWidth` value from a `DimensionValue` to a pixel value
- Remove `isQuiet` (it is no longer supported in Spectrum 2)
-- Remove `placeholder` (it is no longer supported in Spectrum 2)
- Change `validationState="invalid"` to `isInvalid`
- Remove `validationState="valid"` (it is no longer supported in Spectrum 2)
- Update `Item` to be a `ComboBoxItem`
@@ -275,6 +274,7 @@ No updates needed.
- Remove `validationState="valid"` (it is no longer supported in Spectrum 2)
- Update `Item` to be a `PickerItem`
- Change `isLoading` to `loadingState` and provide the appropriate loading state.
+- Update `defaultSelectedKey` and `selectedKey` to be `defaultValue` and `value` respectively. See the [Picker](Picker.html#value) documentation for more details.
### ProgressBar
@@ -308,7 +308,6 @@ No updates needed.
### SearchField
-- Remove `placeholder` (it has been removed due to accessibility issues)
- Comment out icon (it has not been implemented yet)
- Remove `isQuiet` (it is no longer supported in Spectrum 2)
- Change `validationState="invalid"` to `isInvalid`
@@ -370,7 +369,6 @@ No updates needed.
- Comment out `icon` (it has not been implemented yet)
- Remove `isQuiet` (it is no longer supported in Spectrum 2)
-- Remove `placeholder` (it has been removed due to accessibility issues)
- Change `validationState="invalid"` to `isInvalid`
- Remove `validationState="valid"` (it is no longer supported in Spectrum 2)
@@ -378,7 +376,6 @@ No updates needed.
- Comment out `icon` (it has not been implemented yet)
- Remove `isQuiet` (it is no longer supported in Spectrum 2)
-- Remove `placeholder` (it has been removed due to accessibility issues)
- Change `validationState="invalid"` to `isInvalid`
- Remove `validationState="valid"` (it is no longer supported in Spectrum 2)
diff --git a/packages/dev/s2-docs/pages/s2/NumberField.mdx b/packages/dev/s2-docs/pages/s2/NumberField.mdx
index b8837eb2dbc..0b2d777374c 100644
--- a/packages/dev/s2-docs/pages/s2/NumberField.mdx
+++ b/packages/dev/s2-docs/pages/s2/NumberField.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {NumberField} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['input'];
+
# NumberField
{docs.exports.NumberField.description}
diff --git a/packages/dev/s2-docs/pages/s2/Picker.mdx b/packages/dev/s2-docs/pages/s2/Picker.mdx
index 8c03add9b8e..4c314dd4f34 100644
--- a/packages/dev/s2-docs/pages/s2/Picker.mdx
+++ b/packages/dev/s2-docs/pages/s2/Picker.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['select', 'dropdown'];
+
# Picker
{docs.exports.Picker.description}
diff --git a/packages/dev/s2-docs/pages/s2/Popover.mdx b/packages/dev/s2-docs/pages/s2/Popover.mdx
index 00adc011849..637d4955be2 100644
--- a/packages/dev/s2-docs/pages/s2/Popover.mdx
+++ b/packages/dev/s2-docs/pages/s2/Popover.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['popup', 'overlay'];
+
# Popover
{docs.exports.Popover.description}
diff --git a/packages/dev/s2-docs/pages/s2/ProgressBar.mdx b/packages/dev/s2-docs/pages/s2/ProgressBar.mdx
index 0aabd14b623..6175ec944e0 100644
--- a/packages/dev/s2-docs/pages/s2/ProgressBar.mdx
+++ b/packages/dev/s2-docs/pages/s2/ProgressBar.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ProgressBar} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['loading', 'progress'];
+
# ProgressBar
{docs.exports.ProgressBar.description}
diff --git a/packages/dev/s2-docs/pages/s2/ProgressCircle.mdx b/packages/dev/s2-docs/pages/s2/ProgressCircle.mdx
index d5a7bc8b83c..026c69f62ea 100644
--- a/packages/dev/s2-docs/pages/s2/ProgressCircle.mdx
+++ b/packages/dev/s2-docs/pages/s2/ProgressCircle.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ProgressCircle} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['spinner', 'circular', 'loading'];
+
# ProgressCircle
{docs.exports.ProgressCircle.description}
diff --git a/packages/dev/s2-docs/pages/s2/RadioGroup.mdx b/packages/dev/s2-docs/pages/s2/RadioGroup.mdx
index 7b7d28b07aa..30ae82b98eb 100644
--- a/packages/dev/s2-docs/pages/s2/RadioGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/RadioGroup.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {RadioGroup, Radio} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['input'];
+
# RadioGroup
{docs.exports.RadioGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/RangeCalendar.mdx b/packages/dev/s2-docs/pages/s2/RangeCalendar.mdx
index 24fbc1fb088..48d7eacb1c2 100644
--- a/packages/dev/s2-docs/pages/s2/RangeCalendar.mdx
+++ b/packages/dev/s2-docs/pages/s2/RangeCalendar.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {RangeCalendar} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['calendar'];
+
# RangeCalendar
{docs.exports.RangeCalendar.description}
diff --git a/packages/dev/s2-docs/pages/s2/RangeSlider.mdx b/packages/dev/s2-docs/pages/s2/RangeSlider.mdx
index c71dc0b86f8..3689090ed77 100644
--- a/packages/dev/s2-docs/pages/s2/RangeSlider.mdx
+++ b/packages/dev/s2-docs/pages/s2/RangeSlider.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {RangeSlider} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['slider'];
+
# RangeSlider
{docs.exports.RangeSlider.description}
diff --git a/packages/dev/s2-docs/pages/s2/SearchField.mdx b/packages/dev/s2-docs/pages/s2/SearchField.mdx
index b935438595c..ba718f1ae8e 100644
--- a/packages/dev/s2-docs/pages/s2/SearchField.mdx
+++ b/packages/dev/s2-docs/pages/s2/SearchField.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {SearchField} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['input'];
+
# SearchField
{docs.exports.SearchField.description}
diff --git a/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx b/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx
index 17c87cd239c..c38da282644 100644
--- a/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx
+++ b/packages/dev/s2-docs/pages/s2/SegmentedControl.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {SegmentedControl, SegmentedControlItem, Text} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['toggle group', 'tabs'];
+
# SegmentedControl
{docs.exports.SegmentedControl.description}
diff --git a/packages/dev/s2-docs/pages/s2/SelectBoxGroup.mdx b/packages/dev/s2-docs/pages/s2/SelectBoxGroup.mdx
index 4ec76532118..140e21dba65 100644
--- a/packages/dev/s2-docs/pages/s2/SelectBoxGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/SelectBoxGroup.mdx
@@ -4,6 +4,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['box'];
+
# SelectBoxGroup {docs.exports.SelectBoxGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/Skeleton.mdx b/packages/dev/s2-docs/pages/s2/Skeleton.mdx
index 32c157f8a03..becbeda279e 100644
--- a/packages/dev/s2-docs/pages/s2/Skeleton.mdx
+++ b/packages/dev/s2-docs/pages/s2/Skeleton.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['loading', 'placeholder', 'shimmer', 'ghost'];
+
# Skeleton
{docs.exports.Skeleton.description}
diff --git a/packages/dev/s2-docs/pages/s2/Slider.mdx b/packages/dev/s2-docs/pages/s2/Slider.mdx
index cf651717926..256d892b842 100644
--- a/packages/dev/s2-docs/pages/s2/Slider.mdx
+++ b/packages/dev/s2-docs/pages/s2/Slider.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Slider} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['range input', 'track', 'scrubber'];
+
# Slider
{docs.exports.Slider.description}
diff --git a/packages/dev/s2-docs/pages/s2/StatusLight.mdx b/packages/dev/s2-docs/pages/s2/StatusLight.mdx
index 2e2c3486882..4accd00bd9a 100644
--- a/packages/dev/s2-docs/pages/s2/StatusLight.mdx
+++ b/packages/dev/s2-docs/pages/s2/StatusLight.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {StatusLight} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['indicator', 'dot', 'badge'];
+
# StatusLight
{docs.exports.StatusLight.description}
diff --git a/packages/dev/s2-docs/pages/s2/Styling.mdx b/packages/dev/s2-docs/pages/s2/Styling.mdx
index 98d6a52aaaf..59e257b206d 100644
--- a/packages/dev/s2-docs/pages/s2/Styling.mdx
+++ b/packages/dev/s2-docs/pages/s2/Styling.mdx
@@ -6,6 +6,7 @@ import {S2StyleProperties} from '../../src/S2StyleProperties';
export default Layout;
export const section = 'Guides';
+export const tags = ['style', 'macro', 'spectrum', 'custom'];
# Styling
@@ -48,7 +49,41 @@ import {Button} from '@react-spectrum/s2';
### Supported CSS properties
-
+
### UNSAFE Style Overrides
diff --git a/packages/dev/s2-docs/pages/s2/Switch.mdx b/packages/dev/s2-docs/pages/s2/Switch.mdx
index ed8a5dbcf38..c6335487386 100644
--- a/packages/dev/s2-docs/pages/s2/Switch.mdx
+++ b/packages/dev/s2-docs/pages/s2/Switch.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {Switch} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['toggle', 'input'];
+
# Switch
{docs.exports.Switch.description}
diff --git a/packages/dev/s2-docs/pages/s2/TableView.mdx b/packages/dev/s2-docs/pages/s2/TableView.mdx
index 112db0017f0..88ff5431a98 100644
--- a/packages/dev/s2-docs/pages/s2/TableView.mdx
+++ b/packages/dev/s2-docs/pages/s2/TableView.mdx
@@ -4,6 +4,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+export const tags = ['table', 'data', 'grid'];
+
# TableView
{docs.exports.TableView.description}
diff --git a/packages/dev/s2-docs/pages/s2/Tabs.mdx b/packages/dev/s2-docs/pages/s2/Tabs.mdx
index 4a65648e854..2257c66bf12 100644
--- a/packages/dev/s2-docs/pages/s2/Tabs.mdx
+++ b/packages/dev/s2-docs/pages/s2/Tabs.mdx
@@ -2,6 +2,8 @@ import {Layout} from '../../src/Layout';
export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['navigation'];
+
# Tabs
{docs.exports.Tabs.description}
diff --git a/packages/dev/s2-docs/pages/s2/TagGroup.mdx b/packages/dev/s2-docs/pages/s2/TagGroup.mdx
index 22d576eae4e..054b22f7ad8 100644
--- a/packages/dev/s2-docs/pages/s2/TagGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/TagGroup.mdx
@@ -3,6 +3,8 @@ export default Layout;
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['chips', 'pills'];
+
# TagGroup
{docs.exports.TagGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/TextArea.mdx b/packages/dev/s2-docs/pages/s2/TextArea.mdx
index d4310b80a35..02e71c1522d 100644
--- a/packages/dev/s2-docs/pages/s2/TextArea.mdx
+++ b/packages/dev/s2-docs/pages/s2/TextArea.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {TextArea} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['multiline', 'input'];
+
# TextArea
{docs.exports.TextArea.description}
diff --git a/packages/dev/s2-docs/pages/s2/TextField.mdx b/packages/dev/s2-docs/pages/s2/TextField.mdx
index f1b437afc33..35fcb4217cc 100644
--- a/packages/dev/s2-docs/pages/s2/TextField.mdx
+++ b/packages/dev/s2-docs/pages/s2/TextField.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {TextField} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['input'];
+
# TextField
{docs.exports.TextField.description}
diff --git a/packages/dev/s2-docs/pages/s2/TimeField.mdx b/packages/dev/s2-docs/pages/s2/TimeField.mdx
index 32b3ee5301f..700172a0871 100644
--- a/packages/dev/s2-docs/pages/s2/TimeField.mdx
+++ b/packages/dev/s2-docs/pages/s2/TimeField.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {TimeField} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['date', 'input'];
+
# TimeField
{docs.exports.TimeField.description}
diff --git a/packages/dev/s2-docs/pages/s2/Toast.mdx b/packages/dev/s2-docs/pages/s2/Toast.mdx
index 33638abbe48..2ed3f80e3de 100644
--- a/packages/dev/s2-docs/pages/s2/Toast.mdx
+++ b/packages/dev/s2-docs/pages/s2/Toast.mdx
@@ -6,6 +6,8 @@ import docs from 'docs:@react-spectrum/s2';
import {InterfaceType} from '../../src/types';
import {VersionBadge} from '../../src/VersionBadge';
+export const tags = ['snackbar', 'notification', 'alert'];
+
# Toast {docs.exports.UNSTABLE_ToastContainer.description}
diff --git a/packages/dev/s2-docs/pages/s2/ToggleButton.mdx b/packages/dev/s2-docs/pages/s2/ToggleButton.mdx
index 8e9787d7711..0363494bbd6 100644
--- a/packages/dev/s2-docs/pages/s2/ToggleButton.mdx
+++ b/packages/dev/s2-docs/pages/s2/ToggleButton.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ToggleButton, Text} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['button', 'btn'];
+
# ToggleButton
{docs.exports.ToggleButton.description}
diff --git a/packages/dev/s2-docs/pages/s2/ToggleButtonGroup.mdx b/packages/dev/s2-docs/pages/s2/ToggleButtonGroup.mdx
index e4050604e67..dbec0acb6ed 100644
--- a/packages/dev/s2-docs/pages/s2/ToggleButtonGroup.mdx
+++ b/packages/dev/s2-docs/pages/s2/ToggleButtonGroup.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {ToggleButtonGroup, ToggleButton, Text} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['toggle', 'btn'];
+
# ToggleButtonGroup
{docs.exports.ToggleButtonGroup.description}
diff --git a/packages/dev/s2-docs/pages/s2/Tooltip.mdx b/packages/dev/s2-docs/pages/s2/Tooltip.mdx
index b79fc97102f..614e169e3c8 100644
--- a/packages/dev/s2-docs/pages/s2/Tooltip.mdx
+++ b/packages/dev/s2-docs/pages/s2/Tooltip.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['hint', 'popup', 'info'];
+
# Tooltip
{docs.exports.Tooltip.description}
diff --git a/packages/dev/s2-docs/pages/s2/TreeView.mdx b/packages/dev/s2-docs/pages/s2/TreeView.mdx
index b0a2ad6ab81..715d459cdd3 100644
--- a/packages/dev/s2-docs/pages/s2/TreeView.mdx
+++ b/packages/dev/s2-docs/pages/s2/TreeView.mdx
@@ -4,6 +4,8 @@ export default Layout;
import {TreeView, TreeViewItem, TreeViewItemContent, Collection, Text, ActionMenu, MenuItem} from '@react-spectrum/s2';
import docs from 'docs:@react-spectrum/s2';
+export const tags = ['hierarchy', 'data', 'nested'];
+
# TreeView
{docs.exports.TreeView.description}
diff --git a/packages/dev/s2-docs/pages/s2/collections.mdx b/packages/dev/s2-docs/pages/s2/collections.mdx
index 86fa9abd71e..8dacb61c5c7 100644
--- a/packages/dev/s2-docs/pages/s2/collections.mdx
+++ b/packages/dev/s2-docs/pages/s2/collections.mdx
@@ -4,6 +4,8 @@ export default Layout;
export const section = 'Guides';
+export const tags = ['lists'];
+
# Collections
Many components display a collection of items, and provide functionality such as keyboard navigation, selection, and more. React Spectrum has a consistent, compositional API to define the items displayed in these components.
diff --git a/packages/dev/s2-docs/pages/s2/dnd.mdx b/packages/dev/s2-docs/pages/s2/dnd.mdx
index 9dc7a2e46eb..63b2ecfd2df 100644
--- a/packages/dev/s2-docs/pages/s2/dnd.mdx
+++ b/packages/dev/s2-docs/pages/s2/dnd.mdx
@@ -4,6 +4,8 @@ export default Layout;
export const section = 'Guides';
+export const tags = ['drag', 'drop'];
+
# Drag and Drop
Drag and drop is an intuitive way for users to transfer data between locations. React Spectrum implements drag and drop for mouse and touch interactions, and provides full keyboard and screen reader accessibility.
diff --git a/packages/dev/s2-docs/pages/s2/getting-started.mdx b/packages/dev/s2-docs/pages/s2/getting-started.mdx
index be9601baca4..ad4a37f6e8c 100644
--- a/packages/dev/s2-docs/pages/s2/getting-started.mdx
+++ b/packages/dev/s2-docs/pages/s2/getting-started.mdx
@@ -5,6 +5,7 @@ export default Layout;
import {SegmentedControl, SegmentedControlItem} from '@react-spectrum/s2';
export const section = 'Getting started';
+export const tags = ['introduction', 'installation'];
# Getting started
diff --git a/packages/dev/s2-docs/pages/s2/release-notes.mdx b/packages/dev/s2-docs/pages/s2/release-notes.mdx
index 210989276da..0bfaec273e0 100644
--- a/packages/dev/s2-docs/pages/s2/release-notes.mdx
+++ b/packages/dev/s2-docs/pages/s2/release-notes.mdx
@@ -2,6 +2,7 @@ import {Layout} from '../../src/Layout';
export default Layout;
export const section = 'Releases';
+export const tags = ['changelog', 'versions', 'updates'];
# Release Notes
diff --git a/packages/dev/s2-docs/pages/s2/selection.mdx b/packages/dev/s2-docs/pages/s2/selection.mdx
index 0f6d3b36383..2bc589dd40e 100644
--- a/packages/dev/s2-docs/pages/s2/selection.mdx
+++ b/packages/dev/s2-docs/pages/s2/selection.mdx
@@ -3,6 +3,7 @@ import {InlineAlert, Heading, Content} from '@react-spectrum/s2';
export default Layout;
export const section = 'Guides';
+export const tags = ['collections'];
# Selection
diff --git a/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs b/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs
index 49e9dceb414..d522e54ce21 100644
--- a/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs
+++ b/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs
@@ -16,6 +16,74 @@ const RAC_SRC_ROOT = path.join(REPO_ROOT, 'packages/react-aria-components/src');
const COMPONENT_SRC_ROOTS = [S2_SRC_ROOT, RAC_SRC_ROOT];
const S2_DOCS_PAGES_ROOT = path.join(REPO_ROOT, 'packages/dev/s2-docs/pages');
const DIST_ROOT = path.join(REPO_ROOT, 'packages/dev/s2-docs/dist');
+const LICENSE_COMMENT_REGEX = /^\s*\{\/\*[\s\S]*?Copyright\s+20\d{2}\s+Adobe[\s\S]*?\*\/\}\s*/;
+const S2_ICON_ROOT = path.join(REPO_ROOT, 'packages/@react-spectrum/s2/s2wf-icons');
+const S2_ILLUSTRATION_ROOT = path.join(REPO_ROOT, 'packages/@react-spectrum/s2/spectrum-illustrations');
+
+let iconNamesCache = null;
+let illustrationNamesCache = null;
+
+function getIconNames() {
+ if (iconNamesCache) {
+ return iconNamesCache;
+ }
+
+ try {
+ const files = fs.readdirSync(S2_ICON_ROOT);
+ const names = new Set();
+
+ for (const fileName of files) {
+ if (!fileName.toLowerCase().endsWith('.svg')) {
+ continue;
+ }
+
+ const normalized = fileName.replace(/^S2_Icon_(.*?)(Size\d+)?_2.*/, '$1');
+ const cleaned = normalized.trim();
+ if (cleaned) {
+ names.add(cleaned);
+ }
+ }
+
+ iconNamesCache = Array.from(names).sort((a, b) => a.localeCompare(b));
+ } catch {
+ iconNamesCache = [];
+ }
+
+ return iconNamesCache;
+}
+
+function getIllustrationNames() {
+ if (illustrationNamesCache) {
+ return illustrationNamesCache;
+ }
+
+ try {
+ const names = new Set();
+ const directories = ['linear', 'gradient/generic1', 'gradient/generic2'];
+
+ for (const dir of directories) {
+ const illustrationPath = path.join(S2_ILLUSTRATION_ROOT, dir);
+ if (!fs.existsSync(illustrationPath)) {
+ continue;
+ }
+
+ const files = fs.readdirSync(illustrationPath);
+ for (const fileName of files) {
+ if (fileName.endsWith('.tsx')) {
+ // Extract name without extension
+ const name = fileName.replace(/\.tsx$/, '');
+ names.add(name);
+ }
+ }
+ }
+
+ illustrationNamesCache = Array.from(names).sort((a, b) => a.localeCompare(b));
+ } catch {
+ illustrationNamesCache = [];
+ }
+
+ return illustrationNamesCache;
+}
// Pre-load a ts-morph project so we can query type information.
const project = new Project({
@@ -269,6 +337,123 @@ function remarkDocsComponentsToMarkdown() {
const relatedTypes = new Set();
visit(tree, ['mdxJsxFlowElement', 'mdxJsxTextElement'], (node, index, parent) => {
const name = node.name;
+ if (name === 'InstallCommand') {
+ const pkgAttr = node.attributes?.find(a => a.name === 'pkg');
+ if (!pkgAttr) {
+ parent.children.splice(index, 1);
+ return index;
+ }
+
+ let pkg = '';
+ if (pkgAttr.value?.type === 'mdxJsxAttributeValueExpression') {
+ pkg = pkgAttr.value.value.replace(/['"`]/g, '').trim();
+ } else if (typeof pkgAttr.value === 'string') {
+ pkg = pkgAttr.value.trim();
+ }
+
+ if (!pkg) {
+ parent.children.splice(index, 1);
+ return index;
+ }
+
+ const flagsAttr = node.attributes?.find(a => a.name === 'flags');
+ let flags = '';
+ if (flagsAttr) {
+ if (flagsAttr.value?.type === 'mdxJsxAttributeValueExpression') {
+ flags = flagsAttr.value.value.replace(/['"`]/g, '').trim();
+ } else if (typeof flagsAttr.value === 'string') {
+ flags = flagsAttr.value.trim();
+ }
+ }
+
+ const commandText = `npm install ${pkg}${flags ? ' ' + flags : ''}`.trim();
+
+ const codeNode = {
+ type: 'code',
+ lang: 'bash',
+ meta: '',
+ value: commandText
+ };
+
+ parent.children.splice(index, 1, codeNode);
+ return index;
+ }
+ if (name === 'IconCards') {
+ const iconList = getIconNames();
+ const header = ['| Icon |', '|------|'];
+ const rows = iconList.map(iconName => `| ${iconName} |`);
+ const tableMarkdown = iconList.length ? `${header.join('\n')}\n${rows.join('\n')}` : '> Icon list unavailable in this build.';
+ const iconCardsNode = unified().use(remarkParse).parse(tableMarkdown);
+ parent.children.splice(index, 1, ...iconCardsNode.children);
+ return index;
+ }
+ if (name === 'IllustrationCards') {
+ const illustrationList = getIllustrationNames();
+ const header = ['| Illustration |', '|--------------|'];
+ const rows = illustrationList.map(illustrationName => `| ${illustrationName} |`);
+ const tableMarkdown = illustrationList.length ? `${header.join('\n')}\n${rows.join('\n')}` : '> Illustration list unavailable in this build.';
+ const illustrationCardsNode = unified().use(remarkParse).parse(tableMarkdown);
+ parent.children.splice(index, 1, ...illustrationCardsNode.children);
+ return index;
+ }
+ if (name === 'IconColors') {
+ const colorsAttr = node.attributes?.find(a => a.name === 'colors');
+ let colorList = [];
+
+ if (colorsAttr && colorsAttr.value?.type === 'mdxJsxAttributeValueExpression') {
+ // Extract string literals from array expression: ['white', 'black', ...]
+ const expr = colorsAttr.value.value;
+ const matches = expr.match(/['"]([^'"]+)['"]/g);
+ if (matches) {
+ colorList = matches.map(m => m.slice(1, -1)); // Remove quotes
+ }
+ }
+
+ if (colorList.length > 0) {
+ const header = ['| Color |', '|-------|'];
+ const rows = colorList.map(color => `| ${color} |`);
+ const tableMarkdown = `${header.join('\n')}\n${rows.join('\n')}`;
+ const iconColorsNode = unified().use(remarkParse).parse(tableMarkdown);
+ parent.children.splice(index, 1, ...iconColorsNode.children);
+ } else {
+ // If no colors found, remove the node
+ parent.children.splice(index, 1);
+ }
+ return index;
+ }
+ if (name === 'IconSizes') {
+ const sizesAttr = node.attributes?.find(a => a.name === 'sizes');
+ let sizeList = [];
+
+ if (sizesAttr && sizesAttr.value?.type === 'mdxJsxAttributeValueExpression') {
+ // Extract objects from array expression: [{size: 'XS', pixels: '14px'}, ...]
+ const expr = sizesAttr.value.value;
+ // Match {size: 'X', pixels: 'Ypx'} patterns
+ const objectMatches = expr.match(/\{[^}]+\}/g);
+ if (objectMatches) {
+ sizeList = objectMatches.map(obj => {
+ const sizeMatch = obj.match(/size:\s*['"]([^'"]+)['"]/);
+ const pixelsMatch = obj.match(/pixels:\s*['"]([^'"]+)['"]/);
+ return {
+ size: sizeMatch ? sizeMatch[1] : '',
+ pixels: pixelsMatch ? pixelsMatch[1] : ''
+ };
+ }).filter(item => item.size && item.pixels);
+ }
+ }
+
+ if (sizeList.length > 0) {
+ const header = ['| Size | Pixels |', '|------|--------|'];
+ const rows = sizeList.map(({size, pixels}) => `| ${size} | ${pixels} |`);
+ const tableMarkdown = `${header.join('\n')}\n${rows.join('\n')}`;
+ const iconSizesNode = unified().use(remarkParse).parse(tableMarkdown);
+ parent.children.splice(index, 1, ...iconSizesNode.children);
+ } else {
+ // If no sizes found, remove the node
+ parent.children.splice(index, 1);
+ }
+ return index;
+ }
if (name === 'PageDescription') {
// Assume first child is expression "docs.exports.Component.description".
const exprNode = node.children?.find((c) => c.type === 'mdxFlowExpression' || c.type === 'mdxTextExpression');
@@ -278,7 +463,6 @@ function remarkDocsComponentsToMarkdown() {
const desc = getComponentDescription(m[1], file);
if (desc) {
// Replace with normal paragraph node.
- // eslint-disable-next-line max-depth
if (node.type === 'mdxJsxFlowElement') {
parent.children[index] = {
type: 'paragraph',
@@ -406,6 +590,44 @@ function remarkDocsComponentsToMarkdown() {
return index + newNodes.length;
}
+ if (name === 'BundlerSwitcher') {
+ const bundlerItems = (node.children || []).filter(c => c.type === 'mdxJsxFlowElement' && c.name === 'BundlerSwitcherItem');
+ const newNodes = [];
+
+ const extractLabel = (itemNode) => {
+ const labelAttr = itemNode.attributes?.find(a => a.name === 'label');
+ if (!labelAttr) {return null;}
+
+ if (labelAttr.value?.type === 'mdxJsxAttributeValueExpression') {
+ return labelAttr.value.value.replace(/['"`]/g, '').trim();
+ }
+
+ if (typeof labelAttr.value === 'string') {
+ return labelAttr.value.trim();
+ }
+
+ return null;
+ };
+
+ bundlerItems.forEach((itemNode) => {
+ const label = extractLabel(itemNode) || 'Configuration';
+
+ newNodes.push({
+ type: 'heading',
+ depth: 3,
+ children: [{type: 'text', value: label}]
+ });
+
+ const itemChildren = (itemNode.children || []).filter(child => child.type !== 'text' || child.value.trim() !== '');
+ if (itemChildren.length) {
+ newNodes.push(...itemChildren);
+ }
+ });
+
+ parent.children.splice(index, 1, ...newNodes);
+ return index + newNodes.length;
+ }
+
// Handle standalone VisualExample, generate a minimal snippet
if (name === 'VisualExample') {
const evalExpression = (expr) => {
@@ -510,6 +732,113 @@ function remarkDocsComponentsToMarkdown() {
parent.children[index] = {type: 'text', value: ''};
return index;
}
+ if (name === 'S2StyleProperties') {
+ const propertiesAttr = node.attributes?.find(a => a.name === 'properties');
+ let propertyList = [];
+
+ if (propertiesAttr && propertiesAttr.value?.type === 'mdxJsxAttributeValueExpression') {
+ // Extract string literals from array expression: ['margin', 'marginStart', ...]
+ const expr = propertiesAttr.value.value;
+ const matches = expr.match(/['"]([^'"]+)['"]/g);
+ if (matches) {
+ propertyList = matches.map(m => m.slice(1, -1)); // Remove quotes
+ }
+ }
+
+ if (propertyList.length > 0) {
+ // Generate markdown bullet list with inline code
+ const listItems = propertyList.map(prop => `- \`${prop}\``).join('\n');
+ const listNode = unified().use(remarkParse).parse(listItems);
+ parent.children.splice(index, 1, ...listNode.children);
+ return index + listNode.children.length;
+ } else {
+ // If no properties found, remove the node
+ parent.children.splice(index, 1);
+ }
+ return index;
+ }
+ if (name === 'S2Colors') {
+ const colorSections = [
+ {
+ title: 'Background colors',
+ description: 'The backgroundColor property supports the following values, in addition to the semantic and global colors shown below. These colors are specifically chosen to be used as backgrounds, so prefer them over global colors where possible.',
+ colors: [
+ 'base', 'layer-1', 'layer-2', 'pasteboard', 'elevated',
+ 'accent', 'accent-subtle', 'neutral', 'neutral-subdued', 'neutral-subtle',
+ 'negative', 'negative-subtle', 'informative', 'informative-subtle',
+ 'positive', 'positive-subtle', 'notice', 'notice-subtle',
+ 'gray', 'gray-subtle', 'red', 'red-subtle', 'orange', 'orange-subtle',
+ 'yellow', 'yellow-subtle', 'chartreuse', 'chartreuse-subtle',
+ 'celery', 'celery-subtle', 'green', 'green-subtle', 'seafoam', 'seafoam-subtle',
+ 'cyan', 'cyan-subtle', 'blue', 'blue-subtle', 'indigo', 'indigo-subtle',
+ 'purple', 'purple-subtle', 'fuchsia', 'fuchsia-subtle',
+ 'magenta', 'magenta-subtle', 'pink', 'pink-subtle',
+ 'turquoise', 'turquoise-subtle', 'cinnamon', 'cinnamon-subtle',
+ 'brown', 'brown-subtle', 'silver', 'silver-subtle', 'disabled'
+ ]
+ },
+ {
+ title: 'Text colors',
+ description: 'The color property supports the following values, in addition to the semantic and global colors shown below. These colors are specifically chosen to be used as text colors, so prefer them over global colors where possible.',
+ colors: [
+ 'accent', 'neutral', 'neutral-subdued', 'negative', 'disabled',
+ 'heading', 'title', 'body', 'detail', 'code'
+ ]
+ },
+ {
+ title: 'Semantic colors',
+ description: 'The following values are available across all color properties. Prefer to use semantic colors over global colors when they represent a specific meaning.',
+ scales: ['accent-color', 'informative-color', 'negative-color', 'notice-color', 'positive-color']
+ },
+ {
+ title: 'Global colors',
+ description: 'The following values are available across all color properties.',
+ scales: [
+ 'gray', 'blue', 'red', 'orange', 'yellow', 'chartreuse', 'celery',
+ 'green', 'seafoam', 'cyan', 'indigo', 'purple', 'fuchsia',
+ 'magenta', 'pink', 'turquoise', 'brown', 'silver', 'cinnamon'
+ ]
+ }
+ ];
+
+ const newNodes = [];
+ for (const section of colorSections) {
+ // Add heading
+ newNodes.push({
+ type: 'heading',
+ depth: 4,
+ children: [{type: 'text', value: section.title}]
+ });
+
+ // Add description
+ newNodes.push({
+ type: 'paragraph',
+ children: [{type: 'text', value: section.description}]
+ });
+
+ // Add color list
+ if (section.colors) {
+ const listItems = section.colors.map(color => `- \`${color}\``).join('\n');
+ const listNode = unified().use(remarkParse).parse(listItems);
+ newNodes.push(...listNode.children);
+ } else if (section.scales) {
+ // For scales, note that they include numbered variants (e.g., gray-100, gray-200, etc.)
+ const scaleNote = section.scales.map(scale => {
+ const baseName = scale.replace(/-color$/, '');
+ // Gray scale includes 25, 50, 75, while others start at 100
+ if (baseName === 'gray') {
+ return `- \`${baseName}\` scale (e.g., \`${baseName}-25\`, \`${baseName}-50\`, \`${baseName}-75\`, \`${baseName}-100\`, ..., \`${baseName}-1600\`)`;
+ }
+ return `- \`${baseName}\` scale (e.g., \`${baseName}-100\`, \`${baseName}-200\`, ..., \`${baseName}-1600\`)`;
+ }).join('\n');
+ const scaleNode = unified().use(remarkParse).parse(scaleNote);
+ newNodes.push(...scaleNode.children);
+ }
+ }
+
+ parent.children.splice(index, 1, ...newNodes);
+ return index + newNodes.length;
+ }
if (name === 'StateTable') {
// Extract interface name from properties attribute
const propertiesAttr = node.attributes?.find(a => a.name === 'properties');
@@ -851,7 +1180,8 @@ async function main() {
};
for (const filePath of mdxFiles) {
- const mdContent = fs.readFileSync(filePath, 'utf8');
+ const rawContent = fs.readFileSync(filePath, 'utf8');
+ const mdContent = rawContent.replace(LICENSE_COMMENT_REGEX, '');
const processor = unified()
.use(remarkParse)
.use(remarkMdx)
diff --git a/packages/dev/s2-docs/src/AdobeLogo.tsx b/packages/dev/s2-docs/src/AdobeLogo.tsx
deleted file mode 100644
index 1657dd8091f..00000000000
--- a/packages/dev/s2-docs/src/AdobeLogo.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-export const AdobeLogo = ({className = '', size = 32}) => {
- return (
-
- );
-};
diff --git a/packages/dev/s2-docs/src/IconColors.tsx b/packages/dev/s2-docs/src/IconColors.tsx
index ba85af506fa..7a3af19cf52 100644
--- a/packages/dev/s2-docs/src/IconColors.tsx
+++ b/packages/dev/s2-docs/src/IconColors.tsx
@@ -1,4 +1,6 @@
'use client';
+
+import React from 'react';
import {style} from '@react-spectrum/s2/style' with {type: 'macro'};
function ColorSwatch({name}) {
@@ -47,35 +49,12 @@ function ColorSwatch({name}) {
);
}
-export function IconColors() {
+export function IconColors({colors}: {colors: string[]}) {
return (