diff --git a/.circleci/comment.js b/.circleci/comment.js
index 361b908421c..5af50c1c865 100644
--- a/.circleci/comment.js
+++ b/.circleci/comment.js
@@ -61,7 +61,9 @@ async function run() {
[Size diff since last release](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/verdaccio/publish-stats/size-diff.txt)
[Docs](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/verdaccio/docs/index.html)
[Storybook](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/storybook/index.html?path=/story/accordion--default)
- [S2 Storybook](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/storybook-s2/index.html)`
+ [S2 Storybook](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/storybook-s2/index.html)
+ [S2 docs](https://d1pzu54gtk2aed.cloudfront.net/main/${process.env.CIRCLE_SHA1}/)
+ [React Aria docs](https://d5iwopk28bdhl.cloudfront.net/main/${process.env.CIRCLE_SHA1}/)`
});
}
} catch (error) {
@@ -81,8 +83,9 @@ async function run() {
* [View the storybook](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/storybook/index.html?path=/story/accordion--default)
* [View the S2 storybook](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/storybook-s2/index.html)
- * [View the documentation](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/docs/index.html)
- * [View the S2 docs](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/s2-docs/index.html)`
+ * [View the v3 docs](https://reactspectrum.blob.core.windows.net/reactspectrum/${process.env.CIRCLE_SHA1}/docs/index.html)
+ * [View the S2 docs](https://d1pzu54gtk2aed.cloudfront.net/pr/${process.env.CIRCLE_SHA1}/)
+ * [View the React Aria docs](https://d5iwopk28bdhl.cloudfront.net/pr/${process.env.CIRCLE_SHA1}/)`
});
} catch (err) {
console.error(err);
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 953bf7bb03c..78b2778ab61 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -13,6 +13,10 @@ parameters:
type: string
default: ""
+orbs:
+ aws-cli: circleci/aws-cli@5.4.1
+ aws-s3: circleci/aws-s3@4.1
+
executors:
rsp:
docker:
@@ -45,6 +49,30 @@ executors:
CACHE_VERSION: v1
working_directory: ~/react-spectrum
+commands:
+ deploy-s3:
+ parameters:
+ dir:
+ type: string
+ bucket:
+ type: string
+ steps:
+ - attach_workspace:
+ at: /tmp/dist
+ - aws-cli/install
+ - aws-s3/sync:
+ arguments: --cache-control public,max-age=300,stale-while-revalidate=300 --exclude * --include *.html --include *.txt --include *.json --include *.md --include *.xml
+ from: /tmp/dist/s2-docs/<< parameters.dir >>
+ to: << parameters.bucket >>
+ - aws-s3/sync:
+ arguments: --cache-control public,max-age=300,stale-while-revalidate=300 --content-type text/x-component;charset=utf-8 --exclude * --include *.rsc
+ from: /tmp/dist/s2-docs/<< parameters.dir >>
+ to: << parameters.bucket >>
+ - aws-s3/sync:
+ arguments: --cache-control public,max-age=31536000,immutable --include * --exclude *.html --exclude *.rsc --exclude *.txt --exclude *.json --exclude *.md --exclude *.xml
+ from: /tmp/dist/s2-docs/<< parameters.dir >>
+ to: << parameters.bucket >>
+
jobs:
install:
executor: rsp-large
@@ -480,22 +508,22 @@ jobs:
paths:
- '*/docs/'
- docs-beta:
+ s2-docs:
executor: rsp-xlarge
steps:
- restore_cache:
key: react-spectrum-{{ .Environment.CACHE_VERSION }}-{{ .Environment.CIRCLE_SHA1 }}
- run:
- name: build docs
- command: make s2-docs-production
+ name: build s2 docs
+ command: make s2-docs
- persist_to_workspace:
root: dist
paths:
- - '*/docs/'
+ - 's2-docs/'
- s2-docs:
+ s2-docs-production:
executor: rsp-xlarge
steps:
- restore_cache:
@@ -503,12 +531,12 @@ jobs:
- run:
name: build s2 docs
- command: make s2-docs
+ command: make s2-docs-production
- persist_to_workspace:
root: dist
paths:
- - '*/s2-docs/'
+ - 's2-docs/'
verdaccio:
executor: rsp-xlarge
@@ -823,6 +851,16 @@ jobs:
azcopy copy "/tmp/dist/production/docs/*" "https://reactspectrum.blob.core.windows.net/\$web${AZURE_STORAGE_SAS_TOKEN}" --recursive --include-pattern "*.txt" --content-type "text/plain; charset=utf-8" --cache-control "max-age=300"
azcopy copy "/tmp/dist/production/docs/*" "https://reactspectrum.blob.core.windows.net/\$web${AZURE_STORAGE_SAS_TOKEN}" --recursive --include-pattern "*.html;*.rsc" --cache-control "max-age=300"
+ deploy-s3-stage:
+ executor: rsp
+ steps:
+ - deploy-s3:
+ dir: react-aria
+ bucket: s3://react-aria-stage
+ - deploy-s3:
+ dir: s2
+ bucket: s3://react-spectrum-stage
+
comment:
executor: rsp
steps:
@@ -934,6 +972,12 @@ workflows:
- s2-docs:
requires:
- install
+ - s2-docs-production:
+ requires:
+ - install
+ filters:
+ branches:
+ only: main
- verdaccio:
filters:
branches:
@@ -988,7 +1032,21 @@ workflows:
- storybook
- storybook-s2
- docs
+ - deploy-s3-stage:
+ name: deploy-s3-commit
+ requires:
- s2-docs
+ filters:
+ branches:
+ ignore: main
+ - deploy-s3-stage:
+ name: deploy-s3-main
+ requires:
+ - s2-docs
+ - s2-docs-production
+ filters:
+ branches:
+ only: main
- deploy-verdaccio:
requires:
- v-docs
@@ -1009,6 +1067,7 @@ workflows:
requires:
- ts-diff
- deploy
+ - deploy-s3-commit
- comment:
name: comment-verdaccio
requires:
@@ -1036,26 +1095,6 @@ workflows:
requires:
- docs-production
-
- beta-docs:
- when:
- and:
- - equal: [ "beta-docs", << pipeline.parameters.GHA_Action >> ]
- jobs:
- - install
- - docs-beta:
- filters:
- branches:
- only: beta-docs
- requires:
- - install
- - deploy-production:
- filters:
- branches:
- only: beta-docs
- requires:
- - docs-beta
-
nightly:
triggers:
- schedule:
diff --git a/Makefile b/Makefile
index ffd71f5e5a1..8ee3b3a4bb3 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,9 @@
SHELL := /bin/bash
PATH := ./node_modules/.bin:$(PATH)
+BRANCH := $(or $(CIRCLE_BRANCH),$(shell git rev-parse --abbrev-ref HEAD))
+BRANCH_TYPE := $(if $(filter $(BRANCH),main),main,pr)
+HASH := $(shell git rev-parse HEAD)
all: node_modules
@@ -146,19 +149,25 @@ s2-api-diff:
node scripts/api-diff.js --skip-same --skip-style-props
s2-docs:
- PUBLIC_URL=https://reactspectrum.blob.core.windows.net/reactspectrum/$$(git rev-parse HEAD)/s2-docs DIST_DIR=dist/$$(git rev-parse HEAD)/s2-docs $(MAKE) build-s2-docs
+ DOCS_ENV=stage PUBLIC_URL=/$(BRANCH_TYPE)/$(HASH) $(MAKE) build-s2-docs
+ cp packages/dev/docs/pages/disallow-robots.txt dist/s2-docs/react-aria/$(BRANCH_TYPE)/$(HASH)/robots.txt
+ cp packages/dev/docs/pages/disallow-robots.txt dist/s2-docs/s2/$(BRANCH_TYPE)/$(HASH)/robots.txt
s2-docs-production:
- PUBLIC_URL=https://react-spectrum.adobe.com/beta DIST_DIR=dist/production/docs/beta $(MAKE) build-s2-docs
+ DOCS_ENV=prod PUBLIC_URL=/ $(MAKE) build-s2-docs
+ cp packages/dev/docs/pages/robots.txt dist/s2-docs/react-aria/robots.txt
+ cp packages/dev/docs/pages/robots.txt dist/s2-docs/s2/robots.txt
build-s2-docs:
yarn workspace @react-spectrum/s2-docs generate:md
yarn workspace @react-spectrum/s2-docs generate:og
- REGISTRY_URL=$(PUBLIC_URL)/registry node scripts/buildRegistry.mjs
- REGISTRY_URL=$(PUBLIC_URL)/registry yarn build:s2-docs --public-url $(PUBLIC_URL)
+ node scripts/buildRegistry.mjs
+ yarn build:s2-docs
node scripts/createFeedS2.mjs
- mkdir -p $(DIST_DIR)
- mv packages/dev/s2-docs/dist/* $(DIST_DIR)
- mkdir -p $(DIST_DIR)/registry
- mv starters/docs/registry $(DIST_DIR)/registry/vanilla
- mv starters/tailwind/registry $(DIST_DIR)/registry/tailwind
+ mkdir -p dist/s2-docs/react-aria/$(PUBLIC_URL)
+ mkdir -p dist/s2-docs/s2/$(PUBLIC_URL)
+ mv packages/dev/s2-docs/dist/react-aria/* dist/s2-docs/react-aria/$(PUBLIC_URL)
+ mv packages/dev/s2-docs/dist/s2/* dist/s2-docs/s2/$(PUBLIC_URL)
+ mkdir -p dist/s2-docs/react-aria/$(PUBLIC_URL)/registry
+ mv starters/docs/registry dist/s2-docs/react-aria/$(PUBLIC_URL)/registry/vanilla
+ mv starters/tailwind/registry dist/s2-docs/react-aria/$(PUBLIC_URL)/registry/tailwind
diff --git a/packages/dev/s2-docs/.parcelrc-s2-docs b/packages/dev/s2-docs/.parcelrc-s2-docs
index 079f9cee00d..5a95c73d857 100644
--- a/packages/dev/s2-docs/.parcelrc-s2-docs
+++ b/packages/dev/s2-docs/.parcelrc-s2-docs
@@ -1,6 +1,6 @@
{
"extends": "@parcel/config-default",
- "resolvers": ["@react-aria/parcel-resolver-optimize-locales", "@parcel/resolver-glob", "parcel-resolver-docs", "..."],
+ "resolvers": ["@react-aria/parcel-resolver-optimize-locales", "@parcel/resolver-glob", "./S2DocsResolver", "parcel-resolver-docs", "..."],
"transformers": {
"docs:*.{js,ts,tsx,json}": ["parcel-transformer-docs", "@parcel/transformer-inline"],
"docs-json:*.{js,ts,tsx,json}": ["parcel-transformer-docs"],
diff --git a/packages/dev/s2-docs/S2DocsResolver.js b/packages/dev/s2-docs/S2DocsResolver.js
new file mode 100644
index 00000000000..277958116dd
--- /dev/null
+++ b/packages/dev/s2-docs/S2DocsResolver.js
@@ -0,0 +1,10 @@
+const {Resolver} = require('@parcel/plugin');
+
+module.exports = new Resolver({
+ resolve({dependency}) {
+ // Ignore URL dependencies in MDX files.
+ if (dependency.sourcePath?.endsWith('.mdx') && dependency.isOptional) {
+ return {isExcluded: true};
+ }
+ }
+});
diff --git a/packages/dev/s2-docs/package.json b/packages/dev/s2-docs/package.json
index b18d1bfa16e..8d3f72dacc1 100644
--- a/packages/dev/s2-docs/package.json
+++ b/packages/dev/s2-docs/package.json
@@ -3,14 +3,17 @@
"version": "1.0.0",
"private": true,
"scripts": {
- "start": "DOCS_ENV=dev parcel --config .parcelrc-s2-docs",
- "build": "DOCS_ENV=staging parcel build --config .parcelrc-s2-docs",
+ "start": "parcel 'pages/**/*.mdx' --config .parcelrc-s2-docs",
+ "start:s2": "DOCS_ENV=dev LIBRARY=s2 parcel 'pages/s2/**/*.mdx' -p 4321 --config .parcelrc-s2-docs --dist-dir dist/s2 --cache-dir ../../../.parcel-cache/s2",
+ "start:react-aria": "DOCS_ENV=dev LIBRARY=react-aria parcel 'pages/react-aria/**/*.mdx' -p 1234 --config .parcelrc-s2-docs --dist-dir dist/react-aria --cache-dir ../../../.parcel-cache/react-aria",
+ "build": "yarn build:s2 --public-url $PUBLIC_URL && yarn build:react-aria --public-url $PUBLIC_URL",
+ "build:s2": "LIBRARY=s2 parcel build 'pages/s2/**/*.mdx' --config .parcelrc-s2-docs --dist-dir dist/s2 --cache-dir ../../../.parcel-cache/s2",
+ "build:react-aria": "LIBRARY=react-aria parcel build 'pages/react-aria/**/*.mdx' --config .parcelrc-s2-docs --dist-dir dist/react-aria --cache-dir ../../../.parcel-cache/react-aria",
"generate:og": "node scripts/generateOGImages.mjs",
"generate:md": "node scripts/generateMarkdownDocs.mjs"
},
"targets": {
"react-static": {
- "source": "pages/**/*.mdx",
"context": "react-server",
"engines": {
"browsers": [
@@ -22,7 +25,8 @@
"includeNodeModules": {
"tree-sitter-highlight": false,
"json5": false,
- "globals-docs": false
+ "globals-docs": false,
+ "@parcel/rust": false
}
}
},
diff --git a/packages/dev/s2-docs/pages/WelcomeHeader.tsx b/packages/dev/s2-docs/pages/WelcomeHeader.tsx
index 186eb60a5c8..ef6be1a146c 100644
--- a/packages/dev/s2-docs/pages/WelcomeHeader.tsx
+++ b/packages/dev/s2-docs/pages/WelcomeHeader.tsx
@@ -41,7 +41,7 @@ export function LibraryCards() {
{TAB_DEFS['react-spectrum'].description}
@@ -52,7 +52,7 @@ export function LibraryCards() {
{TAB_DEFS['react-aria'].description}
@@ -63,7 +63,7 @@ export function LibraryCards() {
{TAB_DEFS['internationalized'].description}
diff --git a/packages/dev/s2-docs/pages/index.mdx b/packages/dev/s2-docs/pages/index.mdx
index 4ea5026be6f..fa803b4756f 100644
--- a/packages/dev/s2-docs/pages/index.mdx
+++ b/packages/dev/s2-docs/pages/index.mdx
@@ -16,7 +16,7 @@ The React Spectrum docs have a new look! This is a **beta preview** so keep in m
## What's new?
- 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)
+- New docs for [React Aria](react-aria/Autocomplete) and [Internationalized](internationalized/date/)
- A new search menu experience
- Interactive controls for examples
- New concept guides
@@ -25,4 +25,4 @@ The React Spectrum docs have a new look! This is a **beta preview** so keep in m
## Roadmap
-The existing docs are still available [here](https://react-spectrum.adobe.com/index.html). We plan to do a full release of the new docs site by early 2026, so we welcome any and all feedback!
+The existing docs are still available [here](https://react-spectrum.adobe.com/). 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 7c4dfe74a78..8d7710cedcb 100644
--- a/packages/dev/s2-docs/pages/react-aria/Autocomplete.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Autocomplete.mdx
@@ -111,9 +111,9 @@ export const description = 'Allows users to search or filter a list of suggestio
## Content
-Autocomplete filters a collection component using a [TextField](TextField.html) or [SearchField](SearchField.html). It can be used to build UI patterns such as command palettes, searchable menus, filterable selects, and more.
+Autocomplete filters a collection component using a [TextField](TextField) or [SearchField](SearchField). It can be used to build UI patterns such as command palettes, searchable menus, filterable selects, and more.
-[Menu](Menu.html) and [ListBox](ListBox.html) support **virtual focus**, which allows arrow key navigation within the list while the text input is focused. Use `disableVirtualFocus` to require the user to tab between the input and list.
+[Menu](Menu) and [ListBox](ListBox) support **virtual focus**, which allows arrow key navigation within the list while the text input is focused. Use `disableVirtualFocus` to require the user to tab between the input and list.
@@ -1108,7 +1108,7 @@ function AsyncLoadingExample() {
## API
-```tsx links={{Autocomplete: '#autocomplete', SearchField: 'SearchField.html', TextField: 'TextField.html', Menu: 'Menu.html', ListBox: 'ListBox.html', TagGroup: 'TagGroup.html', GridList: 'GridList.html', Table: 'Table.html'}}
+```tsx links={{Autocomplete: '#autocomplete', SearchField: 'SearchField', TextField: 'TextField', Menu: 'Menu', ListBox: 'ListBox', TagGroup: 'TagGroup', GridList: 'GridList', Table: 'Table'}}
or
, , , , or
diff --git a/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx b/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx
index 8f46e6623da..ca5f3d68530 100644
--- a/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Breadcrumbs.mdx
@@ -41,7 +41,7 @@ export const description = 'Displays a hierarchy of links to the current page or
## Content
-`Breadcrumbs` follows the [Collection Components API](collections.html?component=Breadcrumbs), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children. The `onAction` event is called when a user presses a breadcrumb.
+`Breadcrumbs` follows the [Collection Components API](collections?component=Breadcrumbs), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children. The `onAction` event is called when a user presses a breadcrumb.
```tsx render
"use client";
@@ -80,7 +80,7 @@ function Example() {
-```tsx links={{Breadcrumbs: '#breadcrumbs', Breadcrumb: '#breadcrumb', Link: 'Link.html'}}
+```tsx links={{Breadcrumbs: '#breadcrumbs', Breadcrumb: '#breadcrumb', Link: 'Link'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/Button.mdx b/packages/dev/s2-docs/pages/react-aria/Button.mdx
index afdbb7bd056..9e97fbed462 100644
--- a/packages/dev/s2-docs/pages/react-aria/Button.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Button.mdx
@@ -10,6 +10,7 @@ import vanillaDocs from 'docs:vanilla-starter/Button';
import tailwindDocs from 'docs:tailwind-starter/Button';
import '../../tailwind/tailwind.css';
import typesDocs from 'docs:@react-types/shared/src/events.d.ts';
+import {getBaseUrl} from '../../src/pageUtils';
export const tags = ['btn'];
export const relatedPages = [{'title': 'useButton', 'url': 'https://react-spectrum.adobe.com/react-aria/useButton.html'}];
@@ -47,9 +48,9 @@ export const description = 'Allows a user to perform an action, with mouse, touc
## Events
-Use the `onPress` prop to handle interactions via mouse, keyboard, and touch. This is similar to `onClick`, but normalized for consistency across browsers, devices, and interaction methods. Read our [blog post](building-a-button-part-1.html) to learn more.
+Use the `onPress` prop to handle interactions via mouse, keyboard, and touch. This is similar to `onClick`, but normalized for consistency across browsers, devices, and interaction methods. Read our [blog post](blog/building-a-button-part-1) to learn more.
-The `onPressStart`, `onPressEnd`, and `onPressChange` events are also emitted as the user interacts with the button. Each of these handlers receives a , which provides information about the target and interaction method. See [usePress](https://react-spectrum.adobe.com/react-aria/usePress.html) for more details.
+The `onPressStart`, `onPressEnd`, and `onPressChange` events are also emitted as the user interacts with the button. Each of these handlers receives a , which provides information about the target and interaction method. See usePress for more details.
```tsx render
"use client";
@@ -111,7 +112,7 @@ function PendingButton() {
## Link buttons
-The `Button` component always represents a button semantically. To create a link that visually looks like a button, use the [Link](Link.html) component instead. You can reuse the same styles you apply to the `Button` component on the `Link`.
+The `Button` component always represents a button semantically. To create a link that visually looks like a button, use the [Link](Link) component instead. You can reuse the same styles you apply to the `Button` component on the `Link`.
```tsx render
"use client";
diff --git a/packages/dev/s2-docs/pages/react-aria/Calendar.mdx b/packages/dev/s2-docs/pages/react-aria/Calendar.mdx
index a11002e93fb..3090329a09f 100644
--- a/packages/dev/s2-docs/pages/react-aria/Calendar.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Calendar.mdx
@@ -35,7 +35,7 @@ export const description = 'Displays one or more date grids and allows users to
## Value
-Use the `value` or `defaultValue` prop to set the date value, using objects in the [@internationalized/date](../internationalized/date/index.html) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
+Use the `value` or `defaultValue` prop to set the date value, using objects in the [@internationalized/date](internationalized/date/) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
```tsx render
"use client";
@@ -79,7 +79,7 @@ import {Calendar} from 'vanilla-starter/Calendar';
### Custom calendar systems
-`Calendar` also supports custom calendar systems that implement custom business rules, for example a fiscal year calendar that follows a [4-5-4 format](https://nrf.com/resources/4-5-4-calendar), where month ranges don't follow the usual Gregorian calendar. See the [@internationalized/date docs](../internationalized/date/Calendar.html#custom-calendars) for an example implementation.
+`Calendar` also supports custom calendar systems that implement custom business rules, for example a fiscal year calendar that follows a [4-5-4 format](https://nrf.com/resources/4-5-4-calendar), where month ranges don't follow the usual Gregorian calendar. See the [@internationalized/date docs](internationalized/date/Calendar#custom-calendars) for an example implementation.
```tsx render
"use client";
@@ -308,7 +308,7 @@ import {ChevronLeft, ChevronRight} from 'lucide-react';
role="img"
aria-label="Anatomy diagram of a calendar component, which consists of a heading, grid of cells, previous, and next buttons." />
-```tsx links={{Calendar: '#calendar', Button: 'Button.html', CalendarGrid: '#calendargrid', CalendarGridHeader: '#calendargridheader', CalendarHeaderCell: '#calendarheadercell', CalendarGridBody: '#calendargridbody', CalendarCell: '#calendarcell'}}
+```tsx links={{Calendar: '#calendar', Button: 'Button', CalendarGrid: '#calendargrid', CalendarGridHeader: '#calendargridheader', CalendarHeaderCell: '#calendarheadercell', CalendarGridBody: '#calendargridbody', CalendarCell: '#calendarcell'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx b/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx
index c420ff1f40b..dac36265096 100644
--- a/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/CheckboxGroup.mdx
@@ -10,7 +10,7 @@ import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
export const tags = ['input'];
export const relatedPages = [
{title: 'useCheckboxGroup', url: 'https://react-spectrum.adobe.com/react-aria/useCheckboxGroup.html'},
- {title: 'Testing', url: './CheckboxGroup/testing.html'}
+ {title: 'Testing', url: './CheckboxGroup/testing'}
];
export const description = 'Allows a user to select multiple items from a list of options.';
@@ -114,7 +114,7 @@ import {Form} from 'vanilla-starter/Form';;
-```tsx links={{CheckboxGroup: '#checkboxgroup', Checkbox: 'Checkbox.html'}}
+```tsx links={{CheckboxGroup: '#checkboxgroup', Checkbox: 'Checkbox'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx b/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx
index cc66d651fe4..418e3760654 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorPicker.mdx
@@ -64,7 +64,7 @@ function Example() {
### Channel sliders
-This example uses [ColorSlider](ColorSlider.html) to allow a user to adjust each channel of a color value, with a [Select](Select.html) to switch between color spaces.
+This example uses [ColorSlider](ColorSlider) to allow a user to adjust each channel of a color value, with a [Select](Select) to switch between color spaces.
```tsx render
"use client";
@@ -99,7 +99,7 @@ function Example() {
### Color wheel
-This example combines a [ColorWheel](ColorWheel.html) and [ColorArea](ColorArea.html) to build an HSB color picker.
+This example combines a [ColorWheel](ColorWheel) and [ColorArea](ColorArea) to build an HSB color picker.
```tsx render
"use client";
@@ -124,7 +124,7 @@ import {ColorArea} from 'vanilla-starter/ColorArea';
### Channel fields
-This example uses [ColorField](ColorField.html) to allow a user to edit the value of each color channel as a number, along with a [Select](Select.html) to switch between color spaces.
+This example uses [ColorField](ColorField) to allow a user to edit the value of each color channel as a number, along with a [Select](Select) to switch between color spaces.
```tsx render
"use client";
@@ -165,7 +165,7 @@ function Example() {
### Swatches
-This example uses a [ColorSwatchPicker](ColorSwatchPicker.html) to provide color presets for a color picker.
+This example uses a [ColorSwatchPicker](ColorSwatchPicker) to provide color presets for a color picker.
```tsx render
"use client";
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx b/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx
index c8cc971e9af..9f857eeee57 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorSlider.mdx
@@ -75,7 +75,7 @@ function Example() {
role="img"
aria-label="Color slider anatomy diagram: Shows a color slider component with labels pointing to its parts, including the track, thumb, label, and output elements." />
-```tsx links={{ColorSlider: '#colorslider', SliderOutput: 'Slider.html#slideroutput', SliderTrack: 'Slider.html#slidertrack', ColorThumb: '#colorthumb'}}
+```tsx links={{ColorSlider: '#colorslider', SliderOutput: 'Slider#slideroutput', SliderTrack: 'Slider#slidertrack', ColorThumb: '#colorthumb'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx b/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx
index 827b6453b43..d45c6362078 100644
--- a/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ColorSwatchPicker.mdx
@@ -82,7 +82,7 @@ function Example() {
## API
-```tsx links={{ColorSwatchPicker: '#colorswatchpicker', ColorSwatchPickerItem: '#colorswatchpickeritem', ColorSwatch: 'ColorSwatch.html'}}
+```tsx links={{ColorSwatchPicker: '#colorswatchpicker', ColorSwatchPickerItem: '#colorswatchpickeritem', ColorSwatch: 'ColorSwatch'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx b/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx
index 78318381d78..50b51c801d2 100644
--- a/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ComboBox.mdx
@@ -11,7 +11,7 @@ import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
export const tags = ['autocomplete', 'search', 'typeahead', 'input'];
export const relatedPages = [
{title: 'useComboBox', url: 'https://react-spectrum.adobe.com/react-aria/useComboBox.html'},
- {title: 'Testing', url: './ComboBox/testing.html'}
+ {title: 'Testing', url: './ComboBox/testing'}
];
export const description = 'Combines a text input with a listbox, allowing users to filter a list of options to items matching a query.';
@@ -52,7 +52,7 @@ export const description = 'Combines a text input with a listbox, allowing users
## Content
-`ComboBox` reuses the `ListBox` component, following the [Collection Components API](collections.html?component=ComboBox). It supports ListBox features such as static and dynamic collections, sections, disabled items, links, text slots, asynchronous loading, etc. See the [ListBox docs](ListBox.html) for more details.
+`ComboBox` reuses the `ListBox` component, following the [Collection Components API](collections?component=ComboBox). It supports ListBox features such as static and dynamic collections, sections, disabled items, links, text slots, asynchronous loading, etc. See the [ListBox docs](ListBox) for more details.
The following example shows a dynamic collection of items, grouped into sections.
@@ -109,7 +109,7 @@ function Example() {
## Selection
-Use the `defaultSelectedKey` or `selectedKey` prop to set the selected item. The selected key corresponds to the `id` prop of an item. Items can be disabled with the `isDisabled` prop. See the [selection guide](selection.html?component=ComboBox#single-selection) for more details.
+Use the `defaultSelectedKey` or `selectedKey` prop to set the selected item. The selected key corresponds to the `id` prop of an item. Items can be disabled with the `isDisabled` prop. See the [selection guide](selection?component=ComboBox#single-selection) for more details.
```tsx render
"use client";
@@ -343,7 +343,7 @@ import {ComboBox, ComboBoxItem} from 'vanilla-starter/ComboBox';
-```tsx links={{ComboBox: '#combobox', Button: 'Button.html', Popover: 'Popover.html', ListBox: 'ListBox.html'}}
+```tsx links={{ComboBox: '#combobox', Button: 'Button', Popover: 'Popover', ListBox: 'ListBox'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/DateField.mdx b/packages/dev/s2-docs/pages/react-aria/DateField.mdx
index 04bfad06bec..d7b06f3ec13 100644
--- a/packages/dev/s2-docs/pages/react-aria/DateField.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DateField.mdx
@@ -37,7 +37,7 @@ export const description = 'Allows users to enter and edit date and time values
## Value
-Use the `value` or `defaultValue` prop to set the date value, using objects in the [@internationalized/date](../internationalized/date/index.html) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
+Use the `value` or `defaultValue` prop to set the date value, using objects in the [@internationalized/date](internationalized/date/) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
```tsx render
"use client";
diff --git a/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx b/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx
index fb4caa77e8d..5ad97caa44b 100644
--- a/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DatePicker.mdx
@@ -37,7 +37,7 @@ export const description = 'Combines a DateField and a Calendar popover to allow
## Value
-Use the `value` or `defaultValue` prop to set the date value, using objects in the [@internationalized/date](../internationalized/date/index.html) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
+Use the `value` or `defaultValue` prop to set the date value, using objects in the [@internationalized/date](internationalized/date/) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
```tsx render
"use client";
@@ -139,7 +139,7 @@ function Example() {
-```tsx links={{DatePicker: '#datepicker', Group: 'Group.html', DateInput: 'DateField.html#dateinput', Button: 'Button.html', Popover: 'Popover.html', Dialog: 'Dialog.html', Calendar: 'Calendar.html'}}
+```tsx links={{DatePicker: '#datepicker', Group: 'Group', DateInput: 'DateField#dateinput', Button: 'Button', Popover: 'Popover', Dialog: 'Dialog', Calendar: 'Calendar'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx b/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx
index a4265cbd67b..5770094921c 100644
--- a/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DateRangePicker.mdx
@@ -37,7 +37,7 @@ export const description = 'Combines two DateFields and a RangeCalendar popover
## Value
-Use the `value` or `defaultValue` prop to set the selected date range, using objects in the [@internationalized/date](../internationalized/date/index.html) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
+Use the `value` or `defaultValue` prop to set the selected date range, using objects in the [@internationalized/date](internationalized/date/) package. This library supports parsing date strings in multiple formats, manipulation across international calendar systems, time zones, etc.
```tsx render
"use client";
@@ -155,7 +155,7 @@ function Example(props) {
-```tsx links={{DateRangePicker: '#daterangepicker', Group: 'Group.html', DateInput: 'DateField.html#dateinput', Button: 'Button.html', Popover: 'Popover.html', Dialog: 'Dialog.html', RangeCalendar: 'RangeCalendar.html'}}
+```tsx links={{DateRangePicker: '#daterangepicker', Group: 'Group', DateInput: 'DateField#dateinput', Button: 'Button', Popover: 'Popover', Dialog: 'Dialog', RangeCalendar: 'RangeCalendar'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx b/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx
index 5eac4b68d01..acf352ba503 100644
--- a/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Disclosure.mdx
@@ -86,7 +86,7 @@ import {Settings} from 'lucide-react';
-```tsx links={{Disclosure: '#disclosure', Button: 'Button.html', DisclosurePanel: '#disclosurepanel'}}
+```tsx links={{Disclosure: '#disclosure', Button: 'Button', DisclosurePanel: '#disclosurepanel'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx b/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx
index f826ba279b0..18e6026a831 100644
--- a/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/DisclosureGroup.mdx
@@ -89,7 +89,7 @@ function Example() {
-```tsx links={{DisclosureGroup: '#disclosuregroup', Disclosure: 'Disclosure.html'}}
+```tsx links={{DisclosureGroup: '#disclosuregroup', Disclosure: 'Disclosure'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx b/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx
index 513bc78f0ac..f174f18adec 100644
--- a/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/FileTrigger.mdx
@@ -4,6 +4,7 @@ export default Layout;
import docs from 'docs:react-aria-components';
import '../../tailwind/tailwind.css';
import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
+import {getBaseUrl} from '../../src/pageUtils';
export const tags = ['upload', 'input'];
export const description = 'Allows a user to access the file system with any pressable React Aria or React Spectrum component.';
@@ -43,7 +44,7 @@ function Example(props) {
## Custom trigger
-`FileTrigger` works with any pressable React Aria component (e.g. [Button](Button.html), [Link](Link.html), etc.). Use the `` component or [usePress](https://react-spectrum.adobe.com/react-aria/usePress.html) hook to wrap a custom trigger element such as a third party component or DOM element.
+`FileTrigger` works with any pressable React Aria component (e.g. [Button](Button), [Link](Link), etc.). Use the `` component or usePress hook to wrap a custom trigger element such as a third party component or DOM element.
```tsx render
"use client"
@@ -71,7 +72,7 @@ const CustomTrigger = React.forwardRef((props, ref) => (
## API
-```tsx links={{FileTrigger: '#filetrigger', Button: 'Button.html'}}
+```tsx links={{FileTrigger: '#filetrigger', Button: 'Button'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/FocusRing.mdx b/packages/dev/s2-docs/pages/react-aria/FocusRing.mdx
index 33c59885622..8c7ba8568b8 100644
--- a/packages/dev/s2-docs/pages/react-aria/FocusRing.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/FocusRing.mdx
@@ -28,7 +28,7 @@ navigate around. Focus rings are only visible when interacting with a keyboard s
and touch screen users. When we are unable to detect if the user is using a mouse or touch screen, such as
switching in from a different tab, we show the focus ring.
-If CSS classes are not being used for styling, see [useFocusRing](useFocusRing.html) for a hooks version.
+If CSS classes are not being used for styling, see [useFocusRing](useFocusRing) for a hooks version.
## Example
diff --git a/packages/dev/s2-docs/pages/react-aria/FocusScope.mdx b/packages/dev/s2-docs/pages/react-aria/FocusScope.mdx
index ef34e800876..06c989004dd 100644
--- a/packages/dev/s2-docs/pages/react-aria/FocusScope.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/FocusScope.mdx
@@ -43,7 +43,7 @@ press the Tab key to move within the scope, but focus is co
button unmounts the focus scope, which restores focus back to the button.
{/* Not implemented yet */}
-{/* For a full example of building a modal dialog, see [useDialog](useDialog.html). */}
+{/* For a full example of building a modal dialog, see [useDialog](useDialog). */}
```tsx render
'use client';
diff --git a/packages/dev/s2-docs/pages/react-aria/Form.mdx b/packages/dev/s2-docs/pages/react-aria/Form.mdx
index d5c55e7b498..5972f0260d4 100644
--- a/packages/dev/s2-docs/pages/react-aria/Form.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Form.mdx
@@ -48,7 +48,7 @@ export const description = 'A group of inputs that allows users to submit data t
## Submitting data
-When using React 19, use the `action` prop to handle form submission. This receives a [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) object containing the values for each form field. In React 18 or earlier, use the `onSubmit` event instead. See the [Forms](forms.html) guide details about integrating with frameworks.
+When using React 19, use the `action` prop to handle form submission. This receives a [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) object containing the values for each form field. In React 18 or earlier, use the `onSubmit` event instead. See the [Forms](forms) guide details about integrating with frameworks.
@@ -100,7 +100,7 @@ import {Button} from 'vanilla-starter/Button';
## Validation
-Use validation props on each form field to prevent submission of invalid values. When `validationBehavior="aria"`, form submission will not be prevented and validation will occur as the value is edited instead of on form submission. See the [Forms](forms.html) guide for more details.
+Use validation props on each form field to prevent submission of invalid values. When `validationBehavior="aria"`, form submission will not be prevented and validation will occur as the value is edited instead of on form submission. See the [Forms](forms) guide for more details.
```tsx render docs={docs.exports.Form} links={docs.links} props={['validationBehavior']} type="vanilla" files={["starters/docs/src/Form.tsx", "starters/docs/src/Form.css"]}
"use client";
diff --git a/packages/dev/s2-docs/pages/react-aria/GridList.mdx b/packages/dev/s2-docs/pages/react-aria/GridList.mdx
index 106012170b4..72df160cfaa 100644
--- a/packages/dev/s2-docs/pages/react-aria/GridList.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/GridList.mdx
@@ -11,7 +11,7 @@ import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
export const tags = ['list view'];
export const relatedPages = [
{title: 'useGridList', url: 'https://react-spectrum.adobe.com/react-aria/useGridList.html'},
- {title: 'Testing', url: './GridList/testing.html'}
+ {title: 'Testing', url: './GridList/testing'}
];
export const description = 'Displays a list of interactive items, with support for keyboard navigation, selection, and actions.';
@@ -97,7 +97,7 @@ export const description = 'Displays a list of interactive items, with support f
## Content
-`GridList` follows the [Collection Components API](collections.html?component=GridList), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children.
+`GridList` follows the [Collection Components API](collections?component=GridList), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children.
```tsx render
"use client";
@@ -418,7 +418,7 @@ function AsyncLoadingExample() {
### Links
-Use the `href` prop on a `` to create a link. See the [framework setup guide](frameworks.html) to learn how to integrate with your framework. Link interactions vary depending on the selection behavior. See the [selection guide](selection.html?component=GridList#selection-behavior) for more details.
+Use the `href` prop on a `` to create a link. See the [framework setup guide](frameworks) to learn how to integrate with your framework. Link interactions vary depending on the selection behavior. See the [selection guide](selection?component=GridList#selection-behavior) for more details.
```tsx render docs={docs.exports.GridList} links={docs.links} props={['selectionBehavior']} initialProps={{'aria-label': 'Links', selectionMode: 'multiple'}} wide
"use client";
@@ -524,7 +524,7 @@ import {GridList} from 'vanilla-starter/GridList';
## Selection and actions
-Use the `selectionMode` prop to enable single or multiple selection. The selected items can be controlled via the `selectedKeys` prop, matching the `id` prop of the items. The `onAction` event handles item actions. Items can be disabled with the `isDisabled` prop. See the [selection guide](selection.html?component=GridList) for more details.
+Use the `selectionMode` prop to enable single or multiple selection. The selected items can be controlled via the `selectedKeys` prop, matching the `id` prop of the items. The `onAction` event handles item actions. Items can be disabled with the `isDisabled` prop. See the [selection guide](selection?component=GridList) for more details.
```tsx render docs={docs.exports.GridList} links={docs.links} props={['selectionMode', 'selectionBehavior', 'disabledBehavior', 'disallowEmptySelection']} initialProps={{selectionMode: 'multiple'}} wide
"use client";
@@ -607,7 +607,7 @@ function Example(props) {
## Drag and drop
-GridList supports drag and drop interactions when the `dragAndDropHooks` prop is provided using the hook. Users can drop data on the list as a whole, on individual items, insert new items between existing ones, or reorder items. React Aria supports drag and drop via mouse, touch, keyboard, and screen reader interactions. See the [drag and drop guide](dnd.html?component=GridList) to learn more.
+GridList supports drag and drop interactions when the `dragAndDropHooks` prop is provided using the hook. Users can drop data on the list as a whole, on individual items, insert new items between existing ones, or reorder items. React Aria supports drag and drop via mouse, touch, keyboard, and screen reader interactions. See the [drag and drop guide](dnd?component=GridList) to learn more.
```tsx render
"use client";
@@ -908,7 +908,7 @@ function Example() {
-```tsx links={{GridList: '#gridlist', GridListItem: '#gridlistitem', GridListLoadMoreItem: '#gridlistloadmoreitem', Button: 'Button.html', Checkbox: 'Checkbox.html', SelectionIndicator: 'selection.html#animated-selectionindicator'}}
+```tsx links={{GridList: '#gridlist', GridListItem: '#gridlistitem', GridListLoadMoreItem: '#gridlistloadmoreitem', Button: 'Button', Checkbox: 'Checkbox', SelectionIndicator: 'selection#animated-selectionindicator'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/GridList/testing.mdx b/packages/dev/s2-docs/pages/react-aria/GridList/testing.mdx
index 373275ceac4..6f6418b3ada 100644
--- a/packages/dev/s2-docs/pages/react-aria/GridList/testing.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/GridList/testing.mdx
@@ -16,8 +16,8 @@ export const description = 'Testing GridList with React Aria test utils';
GridList supports long press interactions on its items in certain configurations. See the following sections on how to handle these behaviors in your tests.
-* [Timers](../testing.html#timers)
-* [Long press](../testing.html#simulating-user-long-press)
+* [Timers](../testing#timers)
+* [Long press](../testing#simulating-user-long-press)
## Test utils
diff --git a/packages/dev/s2-docs/pages/react-aria/I18nProvider.mdx b/packages/dev/s2-docs/pages/react-aria/I18nProvider.mdx
index 2b00b4bfe1f..cb20e88fd14 100644
--- a/packages/dev/s2-docs/pages/react-aria/I18nProvider.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/I18nProvider.mdx
@@ -23,7 +23,7 @@ export const description = 'Override the default browser locale with an applicat
`I18nProvider` allows you to override the default locale as determined by the browser/system setting
with a locale defined by your application (e.g. application setting). This should be done by wrapping
your entire application in the provider, which will be cause all child elements to receive the new locale
-information via [useLocale](useLocale.html).
+information via [useLocale](useLocale).
## Example
diff --git a/packages/dev/s2-docs/pages/react-aria/Link.mdx b/packages/dev/s2-docs/pages/react-aria/Link.mdx
index ebc143d991b..6db3c321577 100644
--- a/packages/dev/s2-docs/pages/react-aria/Link.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Link.mdx
@@ -36,7 +36,7 @@ export const description = 'Allows a user to navigate to another page or resourc
## Events
-Links with an `href` will be handled by the browser, or via a [client side router](https://react-spectrum.adobe.com/react-aria/routing.html). Links without an `href` will be rendered as a `` instead of an ``. Use the `onPress` event to handle user interaction.
+Links with an `href` will be handled by the browser, or via a [client side router](./frameworks). Links without an `href` will be rendered as a `` instead of an ``. Use the `onPress` event to handle user interaction.
```tsx render
"use client";
diff --git a/packages/dev/s2-docs/pages/react-aria/ListBox.mdx b/packages/dev/s2-docs/pages/react-aria/ListBox.mdx
index 9de1c8dd81c..f974458eb4c 100644
--- a/packages/dev/s2-docs/pages/react-aria/ListBox.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ListBox.mdx
@@ -11,7 +11,7 @@ import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
export const tags = ['options'];
export const relatedPages = [
{title: 'useListBox', url: 'https://react-spectrum.adobe.com/react-aria/useListBox.html'},
- {title: 'Testing', url: './ListBox/testing.html'}
+ {title: 'Testing', url: './ListBox/testing'}
];
export const description = 'Displays a list of options and allows a user to select one or more of them.';
@@ -52,7 +52,7 @@ export const description = 'Displays a list of options and allows a user to sele
## Content
-`ListBox` follows the [Collection Components API](collections.html?component=ListBox), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children.
+`ListBox` follows the [Collection Components API](collections?component=ListBox), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children.
```tsx render
"use client";
@@ -109,7 +109,7 @@ import {ListBox, ListBoxItem, Text} from 'react-aria-components';
Accessibility warning
- Interactive elements (e.g. buttons) within listbox items are not allowed. This will break keyboard and screen reader navigation. Only add textual or decorative graphics (e.g. icons or images) as children. Use [GridList](GridList.html) if interactive children are needed.
+ Interactive elements (e.g. buttons) within listbox items are not allowed. This will break keyboard and screen reader navigation. Only add textual or decorative graphics (e.g. icons or images) as children. Use [GridList](GridList) if interactive children are needed.
### Sections
@@ -197,7 +197,7 @@ function AsyncLoadingExample() {
### Links
-Use the `href` prop on a `` to create a link. See the [framework setup guide](frameworks.html) to learn how to integrate with your framework.
+Use the `href` prop on a `` to create a link. See the [framework setup guide](frameworks) to learn how to integrate with your framework.
By default, link items in a ListBox are not selectable, and only perform navigation when the user interacts with them. However, with `selectionBehavior="replace"`, items will be selected when single clicking or pressing the Space key, and navigate to the link when double clicking or pressing the Enter key.
@@ -230,7 +230,7 @@ import {ListBox, ListBoxItem} from 'react-aria-components';
## Selection
-Use the `selectionMode` prop to enable single or multiple selection. The selected items can be controlled via the `selectedKeys` prop, matching the `id` prop of the items. Items can be disabled with the `isDisabled` prop. See the [selection guide](selection.html?component=ListBox) for more details.
+Use the `selectionMode` prop to enable single or multiple selection. The selected items can be controlled via the `selectedKeys` prop, matching the `id` prop of the items. Items can be disabled with the `isDisabled` prop. See the [selection guide](selection?component=ListBox) for more details.
```tsx render docs={docs.exports.ListBox} links={docs.links} props={['selectionMode', 'selectionBehavior', 'disallowEmptySelection']} initialProps={{selectionMode: 'multiple'}} wide
"use client";
@@ -336,7 +336,7 @@ let planets = [
## Drag and drop
-ListBox supports drag and drop interactions when the `dragAndDropHooks` prop is provided using the hook. Users can drop data on the list as a whole, on individual items, insert new items between existing ones, or reorder items. React Aria supports drag and drop via mouse, touch, keyboard, and screen reader interactions. See the [drag and drop guide](dnd.html?component=ListBox) to learn more.
+ListBox supports drag and drop interactions when the `dragAndDropHooks` prop is provided using the hook. Users can drop data on the list as a whole, on individual items, insert new items between existing ones, or reorder items. React Aria supports drag and drop via mouse, touch, keyboard, and screen reader interactions. See the [drag and drop guide](dnd?component=ListBox) to learn more.
```tsx render
"use client";
@@ -390,7 +390,7 @@ function Example() {
-```tsx links={{ListBox: '#listbox', ListBoxItem: '#listboxitem', ListBoxSection: '#listboxsection', ListBoxLoadMoreItem: '#listboxloadmoreitem', SelectionIndicator: 'selection.html#animated-selectionindicator'}}
+```tsx links={{ListBox: '#listbox', ListBoxItem: '#listboxitem', ListBoxSection: '#listboxsection', ListBoxLoadMoreItem: '#listboxloadmoreitem', SelectionIndicator: 'selection#animated-selectionindicator'}}
diff --git a/packages/dev/s2-docs/pages/react-aria/ListBox/testing.mdx b/packages/dev/s2-docs/pages/react-aria/ListBox/testing.mdx
index 71cb74220f9..2c66eefd80f 100644
--- a/packages/dev/s2-docs/pages/react-aria/ListBox/testing.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/ListBox/testing.mdx
@@ -16,8 +16,8 @@ export const description = 'Testing ListBox with React Aria test utils';
ListBox supports long press interactions on its options in certain configurations. See the following sections on how to handle these behaviors in your tests.
-* [Timers](../testing.html#timers)
-* [Long press](../testing.html#simulating-user-long-press)
+* [Timers](../testing#timers)
+* [Long press](../testing#simulating-user-long-press)
## Test utils
diff --git a/packages/dev/s2-docs/pages/react-aria/Menu.mdx b/packages/dev/s2-docs/pages/react-aria/Menu.mdx
index 1bb490753ae..1c511bfa4b0 100644
--- a/packages/dev/s2-docs/pages/react-aria/Menu.mdx
+++ b/packages/dev/s2-docs/pages/react-aria/Menu.mdx
@@ -9,7 +9,7 @@ import {InlineAlert, Heading, Content} from '@react-spectrum/s2'
export const tags = ['dropdown'];
export const relatedPages = [
{title: 'useMenu', url: 'https://react-spectrum.adobe.com/react-aria/useMenu.html'},
- {title: 'Testing', url: './Menu/testing.html'}
+ {title: 'Testing', url: './Menu/testing'}
];
export const description = 'Displays a list of actions or options that a user can choose.';
@@ -117,7 +117,7 @@ export const description = 'Displays a list of actions or options that a user ca
## Content
-`Menu` follows the [Collection Components API](collections.html?component=Menu), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children.
+`Menu` follows the [Collection Components API](collections?component=Menu), accepting both static and dynamic collections. This example shows a dynamic collection, passing a list of objects to the `items` prop, and a function to render the children.
```tsx render hideImports
"use client";
@@ -285,7 +285,7 @@ import {Button} from 'vanilla-starter/Button';
### Links
-Use the `href` prop on a `