diff --git a/eslint.config.mjs b/eslint.config.mjs index b08fe271cad..113c7814dcc 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -493,8 +493,8 @@ export default [{ }, }, { files: [ - "packages/@react-aria/interactions/src/**/*.ts", - "packages/@react-aria/interactions/src/**/*.tsx", + "packages/react-aria/src/interactions/**/*.ts", + "packages/react-aria/src/interactions/**/*.tsx", ], rules: { diff --git a/packages/@adobe/react-spectrum/exports/index.ts b/packages/@adobe/react-spectrum/exports/index.ts index d729fa8aeba..14e0a3848a0 100644 --- a/packages/@adobe/react-spectrum/exports/index.ts +++ b/packages/@adobe/react-spectrum/exports/index.ts @@ -113,7 +113,6 @@ export {useDateFormatter} from 'react-aria/useDateFormatter'; export {useFilter} from 'react-aria/useFilter'; export {useLocale} from 'react-aria/I18nProvider'; export {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter'; -export {useMessageFormatter} from 'react-aria/private/i18n/useMessageFormatter'; export {useNumberFormatter} from 'react-aria/useNumberFormatter'; export {SSRProvider} from 'react-aria/SSRProvider'; export {useDragAndDrop} from '../src/dnd/useDragAndDrop'; @@ -220,9 +219,7 @@ export type {DateValue, MappedDateValue} from 'react-stately/useDateFieldState'; export type {DateRange} from 'react-stately/useDateRangePickerState'; export type {TimeValue, MappedTimeValue} from 'react-stately/useTimeFieldState'; export type {Filter} from 'react-aria/useFilter'; -export type {FormatMessage} from 'react-aria/private/i18n/useMessageFormatter'; export type {Locale} from 'react-aria/I18nProvider'; -export type {LocalizedStrings} from '@internationalized/message'; export type {SSRProviderProps} from 'react-aria/SSRProvider'; export type {DirectoryDropItem, DraggableCollectionEndEvent, DraggableCollectionMoveEvent, DraggableCollectionStartEvent, DragPreviewRenderer, DragTypes, DropItem, DropOperation, DroppableCollectionDropEvent, DroppableCollectionEnterEvent, DroppableCollectionExitEvent, DroppableCollectionInsertDropEvent, DroppableCollectionMoveEvent, DroppableCollectionOnItemDropEvent, DroppableCollectionReorderEvent, DroppableCollectionRootDropEvent, DropPosition, DropTarget, FileDropItem, ItemDropTarget, RootDropTarget, TextDropItem} from '@react-types/shared'; export type {DragAndDropHooks, DragAndDropOptions} from '../src/dnd/useDragAndDrop'; diff --git a/packages/@adobe/react-spectrum/package.json b/packages/@adobe/react-spectrum/package.json index e061c1a81d9..38747bfd473 100644 --- a/packages/@adobe/react-spectrum/package.json +++ b/packages/@adobe/react-spectrum/package.json @@ -46,7 +46,6 @@ }, "dependencies": { "@internationalized/date": "^3.12.0", - "@internationalized/message": "^3.1.8", "@react-spectrum/style-macro-s1": "3.0.0-alpha.5", "@react-types/shared": "^3.33.1", "@spectrum-icons/ui": "^3.6.23", diff --git a/packages/@react-aria/i18n/package.json b/packages/@react-aria/i18n/package.json index d4062547b5a..ed03c4aab5e 100644 --- a/packages/@react-aria/i18n/package.json +++ b/packages/@react-aria/i18n/package.json @@ -16,7 +16,7 @@ "require": "./dist/main.js" }, "./server": { - "source": "./src/server.tsx", + "source": "./src/server.ts", "import": "./server/index.mjs", "require": "./server/index.js" }, @@ -27,7 +27,19 @@ "types": "dist/types.d.ts", "source": "src/index.ts", "targets": { - "types": false + "types": false, + "server-module": { + "source": "src/server.ts", + "outputFormat": "esmodule", + "isLibrary": true, + "includeNodeModules": false + }, + "server-main": { + "source": "src/server.ts", + "outputFormat": "commonjs", + "isLibrary": true, + "includeNodeModules": false + } }, "files": [ "dist", diff --git a/packages/@react-aria/i18n/src/index.ts b/packages/@react-aria/i18n/src/index.ts index df0c786dbb0..1082d399999 100644 --- a/packages/@react-aria/i18n/src/index.ts +++ b/packages/@react-aria/i18n/src/index.ts @@ -12,7 +12,7 @@ export {I18nProvider, useLocale} from 'react-aria/I18nProvider'; -export {useMessageFormatter} from 'react-aria/private/i18n/useMessageFormatter'; +export {useMessageFormatter} from './useMessageFormatter'; export {useLocalizedStringFormatter} from 'react-aria/useLocalizedStringFormatter'; export {useLocalizedStringDictionary} from 'react-aria/private/i18n/useLocalizedStringFormatter'; export {useListFormatter} from 'react-aria/useListFormatter'; @@ -21,7 +21,7 @@ export {useNumberFormatter} from 'react-aria/useNumberFormatter'; export {useCollator} from 'react-aria/useCollator'; export {useFilter} from 'react-aria/useFilter'; export {isRTL} from 'react-aria/private/i18n/utils'; -export type {FormatMessage} from 'react-aria/private/i18n/useMessageFormatter'; +export type {FormatMessage} from './useMessageFormatter'; export type {I18nProviderProps, Locale} from 'react-aria/I18nProvider'; export type {DateFormatterOptions} from 'react-aria/useDateFormatter'; export type {Filter} from 'react-aria/useFilter'; diff --git a/packages/@react-aria/i18n/src/server.ts b/packages/@react-aria/i18n/src/server.ts new file mode 100644 index 00000000000..fb4f7e25453 --- /dev/null +++ b/packages/@react-aria/i18n/src/server.ts @@ -0,0 +1 @@ +export {PackageLocalizationProvider, getPackageLocalizationScript} from 'react-aria/private/i18n/server'; diff --git a/packages/react-aria/src/i18n/useMessageFormatter.ts b/packages/@react-aria/i18n/src/useMessageFormatter.ts similarity index 97% rename from packages/react-aria/src/i18n/useMessageFormatter.ts rename to packages/@react-aria/i18n/src/useMessageFormatter.ts index cd97d426971..185ca7832f3 100644 --- a/packages/react-aria/src/i18n/useMessageFormatter.ts +++ b/packages/@react-aria/i18n/src/useMessageFormatter.ts @@ -12,7 +12,7 @@ import {LocalizedStrings, MessageDictionary, MessageFormatter} from '@internationalized/message'; import {useCallback, useMemo} from 'react'; -import {useLocale} from './I18nProvider'; +import {useLocale} from 'react-aria/I18nProvider'; export type FormatMessage = (key: string, variables?: {[key: string]: any}) => string; diff --git a/packages/@react-spectrum/accordion/package.json b/packages/@react-spectrum/accordion/package.json index 8330974dae5..65dbe350697 100644 --- a/packages/@react-spectrum/accordion/package.json +++ b/packages/@react-spectrum/accordion/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/actionbar/package.json b/packages/@react-spectrum/actionbar/package.json index 4373b1d94fd..411d5340d4b 100644 --- a/packages/@react-spectrum/actionbar/package.json +++ b/packages/@react-spectrum/actionbar/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/actiongroup/package.json b/packages/@react-spectrum/actiongroup/package.json index 81ab4687d90..1a2c2477a40 100644 --- a/packages/@react-spectrum/actiongroup/package.json +++ b/packages/@react-spectrum/actiongroup/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/autocomplete/package.json b/packages/@react-spectrum/autocomplete/package.json index 70fdb8f5fad..77fa7480b12 100644 --- a/packages/@react-spectrum/autocomplete/package.json +++ b/packages/@react-spectrum/autocomplete/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/avatar/package.json b/packages/@react-spectrum/avatar/package.json index 8e1580e7dd1..869b1380e37 100644 --- a/packages/@react-spectrum/avatar/package.json +++ b/packages/@react-spectrum/avatar/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/badge/package.json b/packages/@react-spectrum/badge/package.json index 22d16a3644c..435f50a8311 100644 --- a/packages/@react-spectrum/badge/package.json +++ b/packages/@react-spectrum/badge/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/breadcrumbs/package.json b/packages/@react-spectrum/breadcrumbs/package.json index a9462cead48..c13294246a5 100644 --- a/packages/@react-spectrum/breadcrumbs/package.json +++ b/packages/@react-spectrum/breadcrumbs/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/button/package.json b/packages/@react-spectrum/button/package.json index 0b35957e646..c35eb8f5111 100644 --- a/packages/@react-spectrum/button/package.json +++ b/packages/@react-spectrum/button/package.json @@ -38,8 +38,6 @@ "@swc/helpers": "^0.5.0" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" }, "peerDependencies": { diff --git a/packages/@react-spectrum/buttongroup/package.json b/packages/@react-spectrum/buttongroup/package.json index cc17d666e5f..e7d28ee9e1d 100644 --- a/packages/@react-spectrum/buttongroup/package.json +++ b/packages/@react-spectrum/buttongroup/package.json @@ -37,10 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@spectrum-icons/workflow": "^4.0.0" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/calendar/package.json b/packages/@react-spectrum/calendar/package.json index af7722b0d70..381d6c96d78 100644 --- a/packages/@react-spectrum/calendar/package.json +++ b/packages/@react-spectrum/calendar/package.json @@ -37,10 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/card/package.json b/packages/@react-spectrum/card/package.json index 4aef7d4eff0..4857574a334 100644 --- a/packages/@react-spectrum/card/package.json +++ b/packages/@react-spectrum/card/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/checkbox/package.json b/packages/@react-spectrum/checkbox/package.json index 0525dfa5603..2a891a57421 100644 --- a/packages/@react-spectrum/checkbox/package.json +++ b/packages/@react-spectrum/checkbox/package.json @@ -38,7 +38,6 @@ "@swc/helpers": "^0.5.0" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" }, "peerDependencies": { diff --git a/packages/@react-spectrum/color/package.json b/packages/@react-spectrum/color/package.json index 41b316c9982..c1cbf83ff8e 100644 --- a/packages/@react-spectrum/color/package.json +++ b/packages/@react-spectrum/color/package.json @@ -39,7 +39,6 @@ "react-stately": "^3.45.0" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", "@react-spectrum/style-macro-s1": "3.0.0-alpha.5" }, "peerDependencies": { diff --git a/packages/@react-spectrum/combobox/package.json b/packages/@react-spectrum/combobox/package.json index a69e30c3530..a06ecee7672 100644 --- a/packages/@react-spectrum/combobox/package.json +++ b/packages/@react-spectrum/combobox/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/contextualhelp/package.json b/packages/@react-spectrum/contextualhelp/package.json index eb131b07b2d..57866bc93fb 100644 --- a/packages/@react-spectrum/contextualhelp/package.json +++ b/packages/@react-spectrum/contextualhelp/package.json @@ -38,7 +38,6 @@ "@swc/helpers": "^0.5.0" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", "@react-spectrum/link": "^3.2.0", "@react-spectrum/view": "^3.1.3" }, diff --git a/packages/@react-spectrum/datepicker/package.json b/packages/@react-spectrum/datepicker/package.json index 923b24a27ee..fbcd31092f6 100644 --- a/packages/@react-spectrum/datepicker/package.json +++ b/packages/@react-spectrum/datepicker/package.json @@ -37,10 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/dialog/package.json b/packages/@react-spectrum/dialog/package.json index 1b916888f8a..a6bef926300 100644 --- a/packages/@react-spectrum/dialog/package.json +++ b/packages/@react-spectrum/dialog/package.json @@ -37,10 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/divider/package.json b/packages/@react-spectrum/divider/package.json index 3d8efa1f418..261234487af 100644 --- a/packages/@react-spectrum/divider/package.json +++ b/packages/@react-spectrum/divider/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/dnd/package.json b/packages/@react-spectrum/dnd/package.json index c29f6f0bc35..624717fa594 100644 --- a/packages/@react-spectrum/dnd/package.json +++ b/packages/@react-spectrum/dnd/package.json @@ -39,9 +39,6 @@ "@swc/helpers": "^0.5.0", "react-aria": "^3.47.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/dropzone/package.json b/packages/@react-spectrum/dropzone/package.json index dc6530abf7a..1a781ecc418 100644 --- a/packages/@react-spectrum/dropzone/package.json +++ b/packages/@react-spectrum/dropzone/package.json @@ -38,8 +38,6 @@ "@swc/helpers": "^0.5.0" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" }, "peerDependencies": { diff --git a/packages/@react-spectrum/filetrigger/package.json b/packages/@react-spectrum/filetrigger/package.json index 5b2eb31123d..8ffeb891d16 100644 --- a/packages/@react-spectrum/filetrigger/package.json +++ b/packages/@react-spectrum/filetrigger/package.json @@ -45,7 +45,6 @@ "access": "public" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" } } diff --git a/packages/@react-spectrum/form/package.json b/packages/@react-spectrum/form/package.json index d2e3c931659..0c487d4b6cd 100644 --- a/packages/@react-spectrum/form/package.json +++ b/packages/@react-spectrum/form/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/icon/package.json b/packages/@react-spectrum/icon/package.json index f8aa760ecca..bfb644c31dc 100644 --- a/packages/@react-spectrum/icon/package.json +++ b/packages/@react-spectrum/icon/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/illustratedmessage/package.json b/packages/@react-spectrum/illustratedmessage/package.json index d0d3cfc325d..e3cf9fac479 100644 --- a/packages/@react-spectrum/illustratedmessage/package.json +++ b/packages/@react-spectrum/illustratedmessage/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/image/package.json b/packages/@react-spectrum/image/package.json index 94c0b31693f..8d6e9d93c0e 100644 --- a/packages/@react-spectrum/image/package.json +++ b/packages/@react-spectrum/image/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/inlinealert/package.json b/packages/@react-spectrum/inlinealert/package.json index 433c86abbbb..bbf16a68f8c 100644 --- a/packages/@react-spectrum/inlinealert/package.json +++ b/packages/@react-spectrum/inlinealert/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/label/package.json b/packages/@react-spectrum/label/package.json index 26b4e114e7d..63dc321186a 100644 --- a/packages/@react-spectrum/label/package.json +++ b/packages/@react-spectrum/label/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/labeledvalue/package.json b/packages/@react-spectrum/labeledvalue/package.json index 88245ca50b6..f4e3824e000 100644 --- a/packages/@react-spectrum/labeledvalue/package.json +++ b/packages/@react-spectrum/labeledvalue/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/layout/package.json b/packages/@react-spectrum/layout/package.json index 18583268371..d5b67946eb1 100644 --- a/packages/@react-spectrum/layout/package.json +++ b/packages/@react-spectrum/layout/package.json @@ -38,9 +38,6 @@ "@react-types/shared": "^3.33.1", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/link/package.json b/packages/@react-spectrum/link/package.json index f0845f0ca48..5da51ab894a 100644 --- a/packages/@react-spectrum/link/package.json +++ b/packages/@react-spectrum/link/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/list/package.json b/packages/@react-spectrum/list/package.json index 663188416f1..23be42054bd 100644 --- a/packages/@react-spectrum/list/package.json +++ b/packages/@react-spectrum/list/package.json @@ -38,12 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-aria/dnd": "^3.0.0", - "@react-spectrum/button": "^3.8.1", - "@react-stately/dnd": "^3.0.0" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/listbox/package.json b/packages/@react-spectrum/listbox/package.json index 2104f3bcbe4..8e30d5365ab 100644 --- a/packages/@react-spectrum/listbox/package.json +++ b/packages/@react-spectrum/listbox/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/menu/package.json b/packages/@react-spectrum/menu/package.json index f5791f104cb..9bd0466c419 100644 --- a/packages/@react-spectrum/menu/package.json +++ b/packages/@react-spectrum/menu/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/meter/package.json b/packages/@react-spectrum/meter/package.json index 75283ef1cba..3b8899b9d9f 100644 --- a/packages/@react-spectrum/meter/package.json +++ b/packages/@react-spectrum/meter/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/numberfield/package.json b/packages/@react-spectrum/numberfield/package.json index ee03ac62b9e..0f455eabcc6 100644 --- a/packages/@react-spectrum/numberfield/package.json +++ b/packages/@react-spectrum/numberfield/package.json @@ -37,10 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/overlays/package.json b/packages/@react-spectrum/overlays/package.json index ee4f527e198..7727fbf440a 100644 --- a/packages/@react-spectrum/overlays/package.json +++ b/packages/@react-spectrum/overlays/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/picker/package.json b/packages/@react-spectrum/picker/package.json index 22094dd9ca1..33b49a2886c 100644 --- a/packages/@react-spectrum/picker/package.json +++ b/packages/@react-spectrum/picker/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/progress/package.json b/packages/@react-spectrum/progress/package.json index b5f7a56b992..6bb13438632 100644 --- a/packages/@react-spectrum/progress/package.json +++ b/packages/@react-spectrum/progress/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/provider/package.json b/packages/@react-spectrum/provider/package.json index 252924db332..19aa1fee46f 100644 --- a/packages/@react-spectrum/provider/package.json +++ b/packages/@react-spectrum/provider/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/radio/package.json b/packages/@react-spectrum/radio/package.json index ea89102696a..831756ac4d7 100644 --- a/packages/@react-spectrum/radio/package.json +++ b/packages/@react-spectrum/radio/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/searchfield/package.json b/packages/@react-spectrum/searchfield/package.json index 340e9c560d1..64ba616e04f 100644 --- a/packages/@react-spectrum/searchfield/package.json +++ b/packages/@react-spectrum/searchfield/package.json @@ -37,10 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/slider/package.json b/packages/@react-spectrum/slider/package.json index a2558c9a6dd..23ab8b86b7a 100644 --- a/packages/@react-spectrum/slider/package.json +++ b/packages/@react-spectrum/slider/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/statuslight/package.json b/packages/@react-spectrum/statuslight/package.json index 09775e05f9b..4f71f3d297b 100644 --- a/packages/@react-spectrum/statuslight/package.json +++ b/packages/@react-spectrum/statuslight/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/steplist/package.json b/packages/@react-spectrum/steplist/package.json index f4b6dfe8b64..1425438bd45 100644 --- a/packages/@react-spectrum/steplist/package.json +++ b/packages/@react-spectrum/steplist/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/story-utils/package.json b/packages/@react-spectrum/story-utils/package.json index 0bf0ef7c119..18c75a41b7e 100644 --- a/packages/@react-spectrum/story-utils/package.json +++ b/packages/@react-spectrum/story-utils/package.json @@ -36,9 +36,6 @@ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "publishConfig": { "access": "public" } diff --git a/packages/@react-spectrum/switch/package.json b/packages/@react-spectrum/switch/package.json index 829cc369e27..8dba1c43bcf 100644 --- a/packages/@react-spectrum/switch/package.json +++ b/packages/@react-spectrum/switch/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/table/package.json b/packages/@react-spectrum/table/package.json index 5da5d6e0df3..a645d9c5e77 100644 --- a/packages/@react-spectrum/table/package.json +++ b/packages/@react-spectrum/table/package.json @@ -38,11 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-aria/dnd": "^3.1.0", - "@react-stately/dnd": "^3.1.0" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/tabs/package.json b/packages/@react-spectrum/tabs/package.json index 5a77a5eae8b..101b4078beb 100644 --- a/packages/@react-spectrum/tabs/package.json +++ b/packages/@react-spectrum/tabs/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/tag/package.json b/packages/@react-spectrum/tag/package.json index 44c95534a7b..21766395c45 100644 --- a/packages/@react-spectrum/tag/package.json +++ b/packages/@react-spectrum/tag/package.json @@ -38,9 +38,6 @@ "@swc/helpers": "^0.5.0", "react-stately": "^3.45.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/test-utils/package.json b/packages/@react-spectrum/test-utils/package.json index 8ea9980012e..e86b0c3775e 100644 --- a/packages/@react-spectrum/test-utils/package.json +++ b/packages/@react-spectrum/test-utils/package.json @@ -39,9 +39,6 @@ "publishConfig": { "access": "public" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "targets": { "types": false } diff --git a/packages/@react-spectrum/text/package.json b/packages/@react-spectrum/text/package.json index 75df25a6a3f..23814989160 100644 --- a/packages/@react-spectrum/text/package.json +++ b/packages/@react-spectrum/text/package.json @@ -38,7 +38,6 @@ "@swc/helpers": "^0.5.0" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" }, "peerDependencies": { diff --git a/packages/@react-spectrum/textfield/package.json b/packages/@react-spectrum/textfield/package.json index 3c091e8e9f0..fb35b0b8a1c 100644 --- a/packages/@react-spectrum/textfield/package.json +++ b/packages/@react-spectrum/textfield/package.json @@ -37,10 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@spectrum-icons/workflow": "^4.0.0" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/theme-dark/package.json b/packages/@react-spectrum/theme-dark/package.json index c24a6071a73..94238eb644c 100644 --- a/packages/@react-spectrum/theme-dark/package.json +++ b/packages/@react-spectrum/theme-dark/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "publishConfig": { "access": "public" }, diff --git a/packages/@react-spectrum/theme-default/package.json b/packages/@react-spectrum/theme-default/package.json index 96080805abd..e92e31a1bf7 100644 --- a/packages/@react-spectrum/theme-default/package.json +++ b/packages/@react-spectrum/theme-default/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "publishConfig": { "access": "public" }, diff --git a/packages/@react-spectrum/theme-express/package.json b/packages/@react-spectrum/theme-express/package.json index bf445d73ecd..f68aa0a6ff1 100644 --- a/packages/@react-spectrum/theme-express/package.json +++ b/packages/@react-spectrum/theme-express/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "publishConfig": { "access": "public" }, diff --git a/packages/@react-spectrum/theme-light/package.json b/packages/@react-spectrum/theme-light/package.json index 67918429983..9c68da096e4 100644 --- a/packages/@react-spectrum/theme-light/package.json +++ b/packages/@react-spectrum/theme-light/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "publishConfig": { "access": "public" }, diff --git a/packages/@react-spectrum/toast/package.json b/packages/@react-spectrum/toast/package.json index f881181e3c7..279aae56491 100644 --- a/packages/@react-spectrum/toast/package.json +++ b/packages/@react-spectrum/toast/package.json @@ -38,8 +38,6 @@ "@swc/helpers": "^0.5.0" }, "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/test-utils-internal": "3.0.0-alpha.1", "@types/use-sync-external-store": "^0.0.3" }, "peerDependencies": { diff --git a/packages/@react-spectrum/tooltip/package.json b/packages/@react-spectrum/tooltip/package.json index de0dba1d28c..952d69f9403 100644 --- a/packages/@react-spectrum/tooltip/package.json +++ b/packages/@react-spectrum/tooltip/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/tree/package.json b/packages/@react-spectrum/tree/package.json index b03cce90c0b..599b775c0fa 100644 --- a/packages/@react-spectrum/tree/package.json +++ b/packages/@react-spectrum/tree/package.json @@ -42,10 +42,6 @@ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1", - "@react-spectrum/style-macro-s1": "3.0.0-alpha.5" - }, "publishConfig": { "access": "public" } diff --git a/packages/@react-spectrum/view/package.json b/packages/@react-spectrum/view/package.json index b6c52dcd408..b52319e51ae 100644 --- a/packages/@react-spectrum/view/package.json +++ b/packages/@react-spectrum/view/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@react-spectrum/well/package.json b/packages/@react-spectrum/well/package.json index cb87a363434..faa7412c6a6 100644 --- a/packages/@react-spectrum/well/package.json +++ b/packages/@react-spectrum/well/package.json @@ -37,9 +37,6 @@ "@adobe/react-spectrum": "^3.46.2", "@swc/helpers": "^0.5.0" }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" - }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" diff --git a/packages/@spectrum-icons/ui/scripts/generateIcons.cjs b/packages/@spectrum-icons/ui/scripts/generateIcons.cjs index 892d79a7eee..8424505ca2e 100644 --- a/packages/@spectrum-icons/ui/scripts/generateIcons.cjs +++ b/packages/@spectrum-icons/ui/scripts/generateIcons.cjs @@ -38,7 +38,7 @@ function template(iconName) { return ( `import {${iconName} as IconComponent} from '@adobe/react-spectrum-ui/dist/${iconName}.js'; import {UIIcon, UIIconPropsWithoutChildren} from '@adobe/react-spectrum/private/icon/UIIcon'; -import {useProvider} from '@react-spectrum/provider'; +import {useProvider} from '@adobe/react-spectrum/Provider'; import React, {JSX} from 'react'; ${jsx} diff --git a/packages/dev/s2-docs/package.json b/packages/dev/s2-docs/package.json index 825aeda9bf7..b4b78e88b0b 100644 --- a/packages/dev/s2-docs/package.json +++ b/packages/dev/s2-docs/package.json @@ -41,7 +41,8 @@ "@react-spectrum/s2": "^1.0.0", "@react-spectrum/utils": "^3.12.6", "@react-types/shared": "^3.30.0", - "emojibase-data": "^16.0.3", + "emojibase": "^17.0.0", + "emojibase-data": "^17.0.0", "fast-glob": "^3.3.3", "globals-docs": "^2.4.1", "gray-matter": "^4.0.3", @@ -70,5 +71,8 @@ "devDependencies": { "axe-playwright": "^2.2.2", "playwright": "^1.57.0" + }, + "peerDependencies": { + "@react-spectrum/provider": "*" } } diff --git a/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs b/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs index 22bd7f76b3f..4ade0b35756 100644 --- a/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs +++ b/packages/dev/s2-docs/scripts/generateMarkdownDocs.mjs @@ -29,7 +29,7 @@ const BASE_URL = { function getBaseUrl(library) { let env = process.env.DOCS_ENV; - let base = env + let base = env ? BASE_URL[env][library] : `http://localhost:1234/${library}`; let publicUrl = process.env.PUBLIC_URL; @@ -75,36 +75,36 @@ function getTsFileIndex() { if (tsFileIndex) { return tsFileIndex; } - + console.log('Building TypeScript file index...'); const startTime = Date.now(); - + // Index files from component roots and packages directory const patterns = [ ...COMPONENT_SRC_ROOTS.map(r => path.posix.join(r, '**/*.{ts,tsx,d.ts}')), path.posix.join(REPO_ROOT, 'packages/**/*.{ts,tsx,d.ts}') ]; - + const files = glob.sync(patterns, { absolute: true, suppressErrors: true, deep: 5, ignore: ['**/node_modules/**', '**/*.test.*', '**/*.stories.*', '**/dist/**'] }); - + // Build index: for each file, extract exported names for quick lookup tsFileIndex = new Map(); for (const filePath of files) { try { const content = fs.readFileSync(filePath, 'utf8'); - + // Extract interface/type/class/function/const names const interfaceMatches = content.matchAll(/(?:export\s+)?interface\s+(\w+)/g); const typeMatches = content.matchAll(/(?:export\s+)?type\s+(\w+)\s*[=<]/g); const classMatches = content.matchAll(/(?:export\s+)?class\s+(\w+)/g); const functionMatches = content.matchAll(/(?:export\s+)?function\s+(\w+)/g); const constMatches = content.matchAll(/(?:export\s+)?const\s+(\w+)\s*[=:]/g); - + for (const match of [...interfaceMatches, ...typeMatches, ...classMatches, ...functionMatches, ...constMatches]) { const name = match[1]; if (!tsFileIndex.has(name)) { @@ -120,7 +120,7 @@ function getTsFileIndex() { // Ignore files that can't be read } } - + console.log(`Built index with ${tsFileIndex.size} symbols in ${Date.now() - startTime}ms`); return tsFileIndex; } @@ -139,11 +139,11 @@ function cleanTypeText(t) { /** * Recursively evaluates a Babel AST node to extract its runtime value. * This function statically evaluates TS/JS expressions from the AST. - * + * * Example: Given the AST for `const colors = ['red', ...baseColors]`, - * this function would return ['red', 'green', 'blue'] if `baseColors` was + * this function would return ['red', 'green', 'blue'] if `baseColors` was * defined in scope as ['green', 'blue']. - * + * * @param {object} node - A Babel AST node (StringLiteral, ArrayExpression, etc.) * @param {Map} scope - A Map of variable names to their evaluated values * @returns {*} The evaluated value (string, number, array, object, Set, etc.) or undefined @@ -287,19 +287,19 @@ function evaluateStylePropertiesNode(node, scope) { * Loads and parses the style macro configuration from styleProperties.ts. * This function reads the TypeScript source file, parses it into an AST using Babel, * and evaluates all variable declarations to extract style property metadata. - * + * * The styleProperties.ts file contains definitions like: * const properties = { * spacing: { margin: ['0', '4', '8', '12'], padding: [...] }, * layout: { display: ['flex', 'grid', 'block'] } * } - * + * * This function evaluates these declarations and returns a structured object with: * - properties: categorized style properties and their allowed values * - shorthandMapping: mappings from shorthand names to full property names * - mdnTypeLinks/mdnPropertyLinks: documentation URLs * - various Sets for property categorization (spacing, sizing, etc.) - * + * * @returns {object|null} Parsed style macro data or null if file doesn't exist/parse fails */ function loadStyleMacroData() { @@ -373,7 +373,7 @@ function loadStyleMacroData() { /** * Extracts property definitions for a specific category from the loaded style macro data. - * + * * Example: For category 'spacing', this returns an object like: * { * margin: { @@ -390,7 +390,7 @@ function loadStyleMacroData() { * description: 'Sets horizontal margins' * } * } - * + * * @param {string} category - The property category (e.g., 'spacing', 'layout', 'colors') * @returns {object|null} Property definitions or null if category doesn't exist */ @@ -420,7 +420,7 @@ function getStyleMacroPropertyDefinitions(category) { }; const result = {}; - + // Process regular properties (e.g., margin, padding, display) for (const [name, rawValues] of Object.entries(data.properties[category])) { let values = Array.isArray(rawValues) ? [...rawValues] : []; @@ -468,7 +468,7 @@ function getStyleMacroPropertyDefinitions(category) { } let values = Array.isArray(shorthandDef.values) ? [...shorthandDef.values] : []; const links = {}; - + // Add MDN links for shorthand values for (const value of values) { if (value === 'pill' && shorthandName.includes('border')) { @@ -493,19 +493,19 @@ function getStyleMacroPropertyDefinitions(category) { /** * Generates a markdown table documenting style macro properties and their allowed values. - * + * * Example output for category 'spacing': * | Property | Values | * |---------|--------| * | margin | `0`, `4`, `8`, `12`, `baseSpacing (0, 4, 8, 12, 16, 20, 24, 28, 32)`, `number`, `lengthPercentage` | * | marginX | `0`, `4`, `8`, `baseSpacing (...)`, `number` | * | padding | `0`, `4`, `8`, `12`, `baseSpacing (...)` | - * + * * The table includes: * - Explicit allowed values (e.g., '0', '4', '8') * - Type categories with their full value sets (e.g., 'baseSpacing (0, 4, 8, ...)') * - Generic types (e.g., 'number', 'lengthPercentage') - * + * * @param {string} category - Property category to generate table for (e.g., 'spacing', 'layout', 'colors') * @param {object} options - Configuration options (e.g., {sort: true}) * @param {boolean} options.sort - Whether to sort properties alphabetically (default: true) @@ -529,7 +529,7 @@ function generateStyleMacroTable(category, {sort = true} = {}) { } const data = loadStyleMacroData(); - + // Build a row for each property, combining explicit values and type categories const rows = propertyNames.map((propertyName) => { const def = definitions[propertyName] || {}; @@ -609,17 +609,17 @@ function getTypeText(decl, fallbackContext) { if (typeNode) { return cleanTypeText(typeNode.getText()); } - + // Fall back to resolved type with context const type = decl?.getType?.(); if (type && fallbackContext) { return cleanTypeText(type.getText(fallbackContext)); } - + if (type) { return cleanTypeText(type.getText()); } - + return 'unknown'; } @@ -631,15 +631,15 @@ function transformRelativeUrl(href) { if (!href || href.startsWith('http://') || href.startsWith('https://') || href.startsWith('mailto:') || href.startsWith('#')) { return href; } - + // Split href into path and query/hash parts const match = href.match(/^([^?#]*)(\?[^#]*)?(#.*)?$/); if (!match) { return href; } - + let [, pathPart, queryPart = '', hashPart = ''] = match; - + if (pathPart.endsWith('.html')) { // Replace .html with .md pathPart = pathPart.slice(0, -5) + '.md'; @@ -647,7 +647,7 @@ function transformRelativeUrl(href) { // Add .md to paths without an extension pathPart = pathPart + '.md'; } - + return pathPart + queryPart + hashPart; } @@ -719,11 +719,11 @@ function parseExpression(expr, file) { sourceType: 'module', plugins: ['jsx', 'typescript'] }); - + if (ast.program.body.length > 0 && ast.program.body[0].type === 'ExpressionStatement') { return evaluateNode(ast.program.body[0].expression, file); } - + return null; } catch { return null; @@ -738,19 +738,19 @@ function evaluateNode(node, file) { switch (node.type) { case 'StringLiteral': return node.value; - + case 'NumericLiteral': return node.value; - + case 'BooleanLiteral': return node.value; - + case 'NullLiteral': return null; - + case 'ArrayExpression': return node.elements.map(el => evaluateNode(el, file)).filter(v => v !== null); - + case 'ObjectExpression': { const obj = {}; for (const prop of node.properties) { @@ -761,27 +761,27 @@ function evaluateNode(node, file) { } return obj; } - + case 'Identifier': // For identifiers, return the name as a string return node.name; - + case 'JSXElement': case 'JSXFragment': { // For JSX elements, extract text content return extractJSXText(node, file); } - + case 'JSXText': return node.value; - + case 'MemberExpression': { // Handle member expressions like docs.exports.GregorianCalendar.description const object = evaluateNode(node.object, file); const property = node.computed ? evaluateNode(node.property, file) : (node.property.name || node.property.value); return `${object}.${property}`; } - + default: return null; } @@ -794,12 +794,12 @@ function extractTypeLinkName(node) { if (!typeAttr || typeAttr.value?.type !== 'JSXExpressionContainer') { return ''; } - + const expr = typeAttr.value.expression; if (expr.type !== 'MemberExpression') { return ''; } - + // Extract the last property name (e.g., GregorianCalendar from docs.exports.GregorianCalendar) return expr.property?.name || ''; } @@ -808,27 +808,27 @@ function extractDescriptionFromExpression(node, file) { if (node.type !== 'MemberExpression') { return null; } - + // Check if the outermost property is "description" if (node.property?.name !== 'description') { return null; } - + // Now check if the object is a member expression with pattern: *.exports.ComponentName const obj = node.object; if (obj?.type !== 'MemberExpression') { return null; } - + // Get the component name (the rightmost property before .description) const componentName = obj.property?.name; - + // Check if the parent is .exports if (obj.object?.type === 'MemberExpression' && obj.object.property?.name === 'exports' && componentName && file) { const desc = getComponentDescription(componentName, file); return desc; } - + return null; } @@ -840,12 +840,12 @@ function extractJSXText(node, file) { // Handle JSXElement if (node.type === 'JSXElement') { const elementName = node.openingElement?.name?.name; - + // For TypeLink, try to extract the type name if (elementName === 'TypeLink') { return extractTypeLinkName(node); } - + // For other elements like

, extract children text if (node.children) { return node.children @@ -854,26 +854,26 @@ function extractJSXText(node, file) { .join(''); } } - + // Handle JSXText if (node.type === 'JSXText') { return node.value.trim(); } - + // Handle JSXExpressionContainer if (node.type === 'JSXExpressionContainer') { const desc = extractDescriptionFromExpression(node.expression, file); if (desc) { return desc; } - + if (node.expression.type === 'MemberExpression') { return '[description]'; } - + return evaluateNode(node.expression, file) || ''; } - + // Handle JSXFragment if (node.type === 'JSXFragment') { if (node.children) { @@ -883,7 +883,7 @@ function extractJSXText(node, file) { .join(''); } } - + return ''; } @@ -997,7 +997,7 @@ function resolveComponentPath(componentName, file, docsSource) { // Use pre-built index for fast lookup const index = getTsFileIndex(); const candidates = index.get(componentName); - + if (candidates && candidates.length > 0) { // Prefer files in the priority roots for (const root of roots) { @@ -1007,21 +1007,21 @@ function resolveComponentPath(componentName, file, docsSource) { return match; } } - + // Prefer .d.ts files over implementation files const dtsMatch = candidates.find(p => p.endsWith('.d.ts')); if (dtsMatch) { interfacePathCache.set(cacheKey, dtsMatch); return dtsMatch; } - + // Prefer @react-types package for type lookups const typesMatch = candidates.find(p => p.includes('@react-types')); if (typesMatch) { interfacePathCache.set(cacheKey, typesMatch); return typesMatch; } - + // Fall back to first match interfacePathCache.set(cacheKey, candidates[0]); return candidates[0]; @@ -1069,27 +1069,27 @@ function getComponentDescription(componentName, file, docsSource) { current = current.getParent?.(); continue; } - + const desc = docs[0].getDescription().trim(); if (!desc) { isDirectNode = false; current = current.getParent?.(); continue; } - + // If this is the direct node (not a parent), return its description immediately if (isDirectNode) { descriptionCache.set(cacheKey, desc); return desc; } - + // Otherwise, check if the description mentions the component name const regex = new RegExp(`\\b${componentName}\\b`, 'i'); if (regex.test(desc)) { descriptionCache.set(cacheKey, desc); return desc; } - + firstNodeDesc = firstNodeDesc || desc; isDirectNode = false; current = current.getParent?.(); @@ -1295,7 +1295,7 @@ function generatePropTable(componentName, file) { } const interfaceName = `${componentName}Props`; - + // Try to resolve via component path first, then interface path let componentPath = resolveComponentPath(componentName, file); if (!componentPath) { @@ -1397,7 +1397,7 @@ function generateInterfaceTable(interfaceName, file) { const name = sym.getName(); const decl = sym.getDeclarations()?.[0]; - + // Skip private and protected members if (decl) { const modifiers = decl.getModifiers?.() || []; @@ -1410,7 +1410,7 @@ function generateInterfaceTable(interfaceName, file) { const type = sym.getTypeAtLocation(ifaceDecl); const callSignatures = type.getCallSignatures(); - + let description = ''; let defVal = ''; let optional = false; @@ -1430,7 +1430,7 @@ function generateInterfaceTable(interfaceName, file) { const sig = callSignatures[0]; const params = sig.getParameters(); const returnType = cleanTypeText(sig.getReturnType().getText(ifaceDecl)); - + const paramStrs = params.map(p => { const pDecl = p.getDeclarations()?.[0]; const pName = p.getName(); @@ -1459,7 +1459,7 @@ function generateInterfaceTable(interfaceName, file) { // Check if we need a Default column const hasDefaults = properties.some(p => !!p.defVal); - + // Sort properties so required ones are shown first const sortedProps = properties.sort((a, b) => { if (!a.optional && b.optional) { @@ -1532,6 +1532,7 @@ function remarkRemoveImportsExports() { const docsSource = statement.source.value.slice(5); for (const specifier of statement.specifiers) { + // eslint-disable-next-line max-depth if (specifier.local?.name) { docsImports[specifier.local.name] = docsSource; } @@ -1634,8 +1635,8 @@ function remarkDocsComponentsToMarkdown() { // Render an unordered list of icon names. if (name === 'IconsPageSearch') { const iconList = getIconNames(); - const listMarkdown = iconList.length - ? iconList.map(iconName => `- ${iconName}`).join('\n') + const listMarkdown = iconList.length + ? iconList.map(iconName => `- ${iconName}`).join('\n') : '> Icon list could not be generated.'; const iconListNode = unified().use(remarkParse).parse(listMarkdown); parent.children.splice(index, 1, ...iconListNode.children); @@ -1645,8 +1646,8 @@ function remarkDocsComponentsToMarkdown() { // Render an unordered list of illustration names. if (name === 'IllustrationCards') { const illustrationList = getIllustrationNames(); - const listMarkdown = illustrationList.length - ? illustrationList.map(illustrationName => `- ${illustrationName}`).join('\n') + const listMarkdown = illustrationList.length + ? illustrationList.map(illustrationName => `- ${illustrationName}`).join('\n') : '> Illustration list could not be generated.'; const illustrationCardsNode = unified().use(remarkParse).parse(listMarkdown); parent.children.splice(index, 1, ...illustrationCardsNode.children); @@ -1657,7 +1658,7 @@ function remarkDocsComponentsToMarkdown() { if (name === 'IconColors') { const colorsAttr = node.attributes?.find(a => a.name === 'colors'); let colorList = []; - + if (colorsAttr && colorsAttr.value?.type === 'mdxJsxAttributeValueExpression') { const expr = colorsAttr.value.value; const parsed = parseExpression(expr, file); @@ -1683,7 +1684,7 @@ function remarkDocsComponentsToMarkdown() { if (name === 'IconSizes') { const sizesAttr = node.attributes?.find(a => a.name === 'sizes'); let sizeList = []; - + if (sizesAttr && sizesAttr.value?.type === 'mdxJsxAttributeValueExpression') { const expr = sizesAttr.value.value; const parsed = parseExpression(expr, file); @@ -1835,7 +1836,7 @@ function remarkDocsComponentsToMarkdown() { // GroupedPropTable uses spread attributes like {...docs.exports.TypeName} const spreadAttr = node.attributes?.find(a => a.type === 'mdxJsxExpressionAttribute'); let typeName = null; - + if (spreadAttr && spreadAttr.value) { const m = spreadAttr.value.match(/\.\.\.docs\.exports\.([\w$]+)/); if (m) { @@ -1934,13 +1935,13 @@ function remarkDocsComponentsToMarkdown() { const parseCodeMeta = (meta) => { if (!meta) {return {};} const result = {}; - + // Extract type const typeMatch = meta.match(/type=["']([^"']+)["']/); if (typeMatch) { result.type = typeMatch[1]; } - + // Extract files={[...]} const filesMatch = meta.match(/files=\{(\[[^\]]+\])\}/); if (filesMatch) { @@ -1953,7 +1954,7 @@ function remarkDocsComponentsToMarkdown() { } } } - + return result; }; @@ -2225,7 +2226,7 @@ function remarkDocsComponentsToMarkdown() { if (name === 'VersionBadge') { const versionAttr = node.attributes?.find(a => a.name === 'version'); let version = ''; - + if (versionAttr) { if (versionAttr.value?.type === 'mdxJsxAttributeValueExpression') { version = versionAttr.value.value.replace(/['"`]/g, '').trim(); @@ -2248,7 +2249,7 @@ function remarkDocsComponentsToMarkdown() { if (name === 'Link' || name === 'LinkButton') { const hrefAttr = node.attributes?.find(a => a.name === 'href'); let href = ''; - + if (hrefAttr) { if (hrefAttr.value?.type === 'mdxJsxAttributeValueExpression') { href = hrefAttr.value.value.replace(/['"`]/g, '').trim(); @@ -2270,7 +2271,7 @@ function remarkDocsComponentsToMarkdown() { // Check for aria-label attribute first const ariaLabelAttr = node.attributes?.find(a => a.name === 'aria-label'); let ariaLabel = ''; - + if (ariaLabelAttr) { if (ariaLabelAttr.value?.type === 'mdxJsxAttributeValueExpression') { ariaLabel = ariaLabelAttr.value.value.replace(/['"`]/g, '').trim(); @@ -2307,7 +2308,7 @@ function remarkDocsComponentsToMarkdown() { url: href, children: [{type: 'text', value: linkText}] }; - + // If this is a flow element (block-level), wrap in paragraph to preserve spacing if (node.type === 'mdxJsxFlowElement') { parent.children[index] = { @@ -2365,7 +2366,7 @@ function remarkDocsComponentsToMarkdown() { if (name === 'S2StyleProperties') { const propertiesAttr = node.attributes?.find(a => a.name === 'properties'); let propertyList = []; - + if (propertiesAttr && propertiesAttr.value?.type === 'mdxJsxAttributeValueExpression') { const expr = propertiesAttr.value.value; const parsed = parseExpression(expr, file); @@ -2573,7 +2574,7 @@ function remarkDocsComponentsToMarkdown() { // Build markdown table const headerRow = headers.map(h => extractCellText(h)); const separator = headers.map(() => '------'); - + const bodyRows = rows.map(row => { if (!Array.isArray(row)) {return [];} return row.map((cell, colIdx) => { @@ -2606,7 +2607,7 @@ function remarkDocsComponentsToMarkdown() { parent.children.splice(index, 1); return index; } - + // Render a markdown table. if (name === 'StateTable') { // Extract interface name from properties attribute @@ -2669,7 +2670,7 @@ function remarkDocsComponentsToMarkdown() { parent.children.splice(index, 1); return index; } - + if (name === 'ClassAPI') { // Extract class name from class attribute const classAttr = node.attributes?.find(a => a.name === 'class'); @@ -2699,13 +2700,13 @@ function remarkDocsComponentsToMarkdown() { parent.children.splice(index, 1); return index; } - + if (name === 'InterfaceType') { // InterfaceType uses spread attributes like {...docs.exports.TypeName} // We need to look for spread attributes const spreadAttr = node.attributes?.find(a => a.type === 'mdxJsxExpressionAttribute'); let typeName = null; - + if (spreadAttr && spreadAttr.value) { const m = spreadAttr.value.match(/\.\.\.docs\.exports\.([\w$]+)/); if (m) { @@ -2812,7 +2813,7 @@ function generateClassAPITable(className, file) { // Use unified path resolver which uses the pre-built index let classPath = resolveComponentPath(className, file); - + if (!classPath) { classTableCache.set(cacheKey, null); return null; @@ -2837,14 +2838,14 @@ function generateClassAPITable(className, file) { if (constructors.length > 0) { const ctor = constructors[0]; const params = ctor.getParameters(); - + if (params.length > 0) { sections.push('### Constructor\n'); const rows = params.map(param => { const name = param.getName(); const type = getTypeText(param, param); let description = ''; - + const ctorDocs = ctor.getJsDocs(); if (ctorDocs.length > 0) { const paramTag = ctorDocs[0].getTags().find(t => t.getTagName() === 'param' && t.getName?.() === name); @@ -2852,7 +2853,7 @@ function generateClassAPITable(className, file) { description = paramTag.getCommentText() || ''; } } - + return {name, type, description}; }); @@ -2873,12 +2874,12 @@ function generateClassAPITable(className, file) { if (methods.length > 0) { sections.push('### Methods\n'); - + for (const method of methods) { const methodName = method.getName(); const params = method.getParameters(); const returnType = cleanTypeText(method.getReturnType().getText(method)); - + // Build method signature const paramStrs = params.map(p => { const pName = p.getName(); @@ -2886,10 +2887,10 @@ function generateClassAPITable(className, file) { const optional = p.hasQuestionToken() ? '?' : ''; return `${pName}${optional}: ${pType}`; }); - + const signature = `${methodName}(${paramStrs.join(', ')}): ${returnType}`; sections.push(`#### \`${signature}\`\n`); - + // Get method description const methodDocs = method.getJsDocs(); if (methodDocs.length > 0) { @@ -2897,7 +2898,7 @@ function generateClassAPITable(className, file) { if (desc) { sections.push(`${desc}\n`); } - + // Document parameters const paramTags = methodDocs[0].getTags().filter(t => t.getTagName() === 'param'); if (paramTags.length > 0) { @@ -2911,11 +2912,12 @@ function generateClassAPITable(className, file) { }); sections.push(''); } - + // Document return value const returnTag = methodDocs[0].getTags().find(t => t.getTagName() === 'returns' || t.getTagName() === 'return'); if (returnTag) { const returnDesc = returnTag.getCommentText() || ''; + // eslint-disable-next-line max-depth if (returnDesc) { sections.push(`**Returns:** ${returnDesc}\n`); } @@ -2935,17 +2937,17 @@ function generateClassAPITable(className, file) { sections.push('### Properties\n'); sections.push('| Property | Type | Description |'); sections.push('|----------|------|-------------|'); - + properties.forEach(prop => { const propName = prop.getName(); const propType = getTypeText(prop, prop); let description = ''; - + const propDocs = prop.getJsDocs(); if (propDocs.length > 0) { description = propDocs[0].getDescription().replace(/\n+/g, ' ').trim(); } - + sections.push(`| \`${propName}\` | \`${propType}\` | ${description || '—'} |`); }); } @@ -2961,7 +2963,7 @@ function generateClassAPITable(className, file) { function generateStateTable(renderPropsName, {showOptional = false, hideSelector = false} = {}, file) { // Attempt to resolve source file by stripping trailing "RenderProps" to get component name. let componentName = renderPropsName.replace(/RenderProps$/, ''); - + // Try component path first, then render props interface path let componentPath = resolveComponentPath(componentName, file); if (!componentPath) { @@ -3162,7 +3164,7 @@ function generateLibraryLlmsTxt(lib, files) { 'react-aria': 'React Aria Components Documentation', 'internationalized': 'Internationalized Documentation' }; - + const summaryMap = { 's2': 'Plain-text markdown documentation for React Spectrum S2 components.', 'react-aria': 'Plain-text markdown documentation for React Aria components.', @@ -3262,7 +3264,7 @@ async function main() { const relativeOutPath = path.relative(DIST_ROOT, outPath); let libKey; let filePathForIndex; - + if (relativePathParts.length === 1) { // Root-level file like index.mdx libKey = 'root'; @@ -3272,7 +3274,7 @@ async function main() { // For nested files like internationalized/date/index.md, use the .md path filePathForIndex = relativeOutPath.replace(new RegExp(`^${libKey}[\\\\/]`), ''); } - + if (docsByLibrary[libKey]) { docsByLibrary[libKey].push({ path: filePathForIndex, @@ -3290,4 +3292,4 @@ async function main() { main().catch((err) => { console.error(err); process.exit(1); -}); +}); diff --git a/packages/dev/test-utils/package.json b/packages/dev/test-utils/package.json index 279b211743e..5b23a40d68c 100644 --- a/packages/dev/test-utils/package.json +++ b/packages/dev/test-utils/package.json @@ -33,14 +33,14 @@ "resolve": "^2.0.0-next.6" }, "peerDependencies": { - "@react-spectrum/provider": "^3.9.12", + "@react-spectrum/provider": "^3.10.14", "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" }, + "devDependencies": { + "@react-spectrum/provider": "^3.10.14" + }, "publishConfig": { "access": "public" - }, - "devDependencies": { - "@adobe/spectrum-css-temp": "3.0.0-alpha.1" } } diff --git a/packages/react-aria-components/test/Tabs.test.js b/packages/react-aria-components/test/Tabs.test.js index b9ccea0e328..20f255979ca 100644 --- a/packages/react-aria-components/test/Tabs.test.js +++ b/packages/react-aria-components/test/Tabs.test.js @@ -13,6 +13,7 @@ import {act, fireEvent, pointerMap, render, waitFor, within} from '@react-spectrum/test-utils-internal'; import {Button} from '../src/Button'; import React, {useState} from 'react'; +import {RouterProvider} from 'react-aria/private/utils/openLink'; import {Tab, TabList, TabPanel, TabPanels, Tabs} from '../src/Tabs'; import {TabsExample} from '../stories/Tabs.stories'; import {Tooltip, TooltipTrigger} from '../src/Tooltip'; @@ -497,6 +498,35 @@ describe('Tabs', () => { expect(tabs[2]).toHaveAttribute('aria-selected', 'true'); }); + it('should navigate linked tabs on click rather than mouse down', async function () { + let navigate = jest.fn(); + let {getAllByRole} = render( + + + + A + B + + A + B + + + ); + + let tabs = getAllByRole('tab'); + fireEvent.mouseDown(tabs[1], {button: 0, detail: 1}); + expect(navigate).not.toHaveBeenCalled(); + + fireEvent.mouseLeave(tabs[1]); + fireEvent.mouseEnter(tabs[1]); + expect(navigate).not.toHaveBeenCalled(); + + fireEvent.mouseUp(tabs[1], {button: 0, detail: 1}); + fireEvent.click(tabs[1], {button: 0, detail: 1}); + expect(navigate).toHaveBeenCalledTimes(1); + expect(navigate).toHaveBeenCalledWith('/b', undefined); + }); + it('should render tab with aria-label', () => { let {getAllByRole} = render( diff --git a/packages/react-aria/exports/index.ts b/packages/react-aria/exports/index.ts index e2f45820081..34ac199dc12 100644 --- a/packages/react-aria/exports/index.ts +++ b/packages/react-aria/exports/index.ts @@ -56,7 +56,6 @@ export {useCollator} from '../src/i18n/useCollator'; export {useDateFormatter} from '../src/i18n/useDateFormatter'; export {useFilter} from '../src/i18n/useFilter'; export {useLocalizedStringFormatter} from '../src/i18n/useLocalizedStringFormatter'; -export {useMessageFormatter} from '../src/i18n/useMessageFormatter'; export {useNumberFormatter} from '../src/i18n/useNumberFormatter'; export {useListFormatter} from '../src/i18n/useListFormatter'; export {useFocus} from '../src/interactions/useFocus'; @@ -173,10 +172,8 @@ export type {FocusRingProps} from '../src/focus/FocusRing'; export type {DateFormatter} from '@internationalized/date'; export type {DateFormatterOptions} from '../src/i18n/useDateFormatter'; export type {Filter} from '../src/i18n/useFilter'; -export type {FormatMessage} from '../src/i18n/useMessageFormatter'; export type {I18nProviderProps, Locale} from '../src/i18n/I18nProvider'; export type {LocalizedStringFormatter} from '@internationalized/string'; -export type {LocalizedStrings} from '@internationalized/message'; export type {ClipboardProps, ClipboardResult} from '../src/dnd/useClipboard'; export type {DirectoryDropItem, DragEndEvent, DraggableCollectionEndEvent, DraggableCollectionMoveEvent, DraggableCollectionStartEvent, DragItem, DragMoveEvent, DragPreviewRenderer, DragStartEvent, DragTypes, DropEnterEvent, DropEvent, DropExitEvent, DropItem, DropMoveEvent, DropOperation, DroppableCollectionDropEvent, DroppableCollectionEnterEvent, DroppableCollectionExitEvent, DroppableCollectionInsertDropEvent, DroppableCollectionMoveEvent, DroppableCollectionOnItemDropEvent, DroppableCollectionReorderEvent, DroppableCollectionRootDropEvent, DropPosition, DropTarget, DropTargetDelegate, FileDropItem, ItemDropTarget, RootDropTarget, TextDropItem} from '@react-types/shared'; export type {DraggableCollectionOptions} from '../src/dnd/useDraggableCollection'; diff --git a/packages/react-aria/exports/private/i18n/useMessageFormatter.ts b/packages/react-aria/exports/private/i18n/useMessageFormatter.ts deleted file mode 100644 index 26bfb4243e3..00000000000 --- a/packages/react-aria/exports/private/i18n/useMessageFormatter.ts +++ /dev/null @@ -1 +0,0 @@ -export {useMessageFormatter, type FormatMessage} from '../../../src/i18n/useMessageFormatter'; diff --git a/packages/react-aria/package.json b/packages/react-aria/package.json index c494f7b148c..067f6d6af9d 100644 --- a/packages/react-aria/package.json +++ b/packages/react-aria/package.json @@ -44,7 +44,6 @@ }, "dependencies": { "@internationalized/date": "^3.12.0", - "@internationalized/message": "^3.1.8", "@internationalized/number": "^3.6.5", "@internationalized/string": "^3.2.7", "@react-types/shared": "^3.33.1", diff --git a/packages/react-aria/src/i18n/main.js b/packages/react-aria/src/i18n/main.js deleted file mode 100644 index f8e10cd4ee8..00000000000 --- a/packages/react-aria/src/i18n/main.js +++ /dev/null @@ -1,6 +0,0 @@ -// useMessageFormatter is deprecated, but has a large dependency on intl-messageformat -// that we want to avoid. If it is built into the same file as the rest of the package, -// it deopts tree shaking in Parcel even when unused. Instead, it is split into a separate -// file and re-exported here, which allows tree shaking to work properly. -module.exports = require('./real-main.js'); -Object.defineProperties(module.exports, Object.getOwnPropertyDescriptors(require('./useMessageFormatter.js'))); diff --git a/packages/react-aria/src/i18n/module.js b/packages/react-aria/src/i18n/module.js deleted file mode 100644 index 54e947d53e3..00000000000 --- a/packages/react-aria/src/i18n/module.js +++ /dev/null @@ -1,6 +0,0 @@ -// useMessageFormatter is deprecated, but has a large dependency on intl-messageformat -// that we want to avoid. If it is built into the same file as the rest of the package, -// it deopts tree shaking in Parcel even when unused. Instead, it is split into a separate -// file and re-exported here, which allows tree shaking to work properly. -export * from './real-module.js'; -export * from './useMessageFormatter.module.js'; diff --git a/packages/react-aria/src/interactions/useFocusVisible.ts b/packages/react-aria/src/interactions/useFocusVisible.ts index e981af6a270..1be9f9a275e 100644 --- a/packages/react-aria/src/interactions/useFocusVisible.ts +++ b/packages/react-aria/src/interactions/useFocusVisible.ts @@ -103,7 +103,9 @@ function handleFocusEvent(e: FocusEvent) { // Firefox fires two extra focus events when the user first clicks into an iframe: // first on the window, then on the document. We ignore these events so they don't // cause keyboard focus rings to appear. - if (getEventTarget(e) === window || getEventTarget(e) === document || ignoreFocusEvent || !e.isTrusted) { + let ownerWindow = getOwnerWindow(getEventTarget(e) as Element); + let ownerDocument = getOwnerDocument(getEventTarget(e) as Element); + if (getEventTarget(e) === ownerWindow || getEventTarget(e) === ownerDocument || ignoreFocusEvent || !e.isTrusted) { return; } @@ -134,13 +136,18 @@ function handleWindowBlur() { * Setup global event listeners to control when keyboard focus style should be visible. */ function setupGlobalFocusEvents(element?: HTMLElement | null) { - if (typeof window === 'undefined' || typeof document === 'undefined' || hasSetupGlobalListeners.get(getOwnerWindow(element))) { + // eslint-disable-next-line no-restricted-globals + if (typeof window === 'undefined' || typeof document === 'undefined') { return; } const windowObject = getOwnerWindow(element); const documentObject = getOwnerDocument(element); + if (hasSetupGlobalListeners.get(windowObject)) { + return; + } + // Programmatic focus() calls shouldn't affect the current input modality. // However, we need to detect other cases when a focus event occurs without // a preceding user event (e.g. screen reader focus). Overriding the focus @@ -242,7 +249,7 @@ export function addWindowFocusTracking(element?: HTMLElement | null): () => void } // Server-side rendering does not have the document object defined - +// eslint-disable-next-line no-restricted-globals if (typeof document !== 'undefined') { addWindowFocusTracking(); } @@ -307,12 +314,13 @@ const nonTextInputTypes = new Set([ * focus visible style can be properly set. */ function isKeyboardFocusEvent(isTextInput: boolean, modality: Modality, e: HandlerEvent) { - let document = getOwnerDocument(e ? getEventTarget(e) as Element : undefined); let eventTarget = e ? getEventTarget(e) as Element : undefined; - const IHTMLInputElement = typeof window !== 'undefined' ? getOwnerWindow(eventTarget).HTMLInputElement : HTMLInputElement; - const IHTMLTextAreaElement = typeof window !== 'undefined' ? getOwnerWindow(eventTarget).HTMLTextAreaElement : HTMLTextAreaElement; - const IHTMLElement = typeof window !== 'undefined' ? getOwnerWindow(eventTarget).HTMLElement : HTMLElement; - const IKeyboardEvent = typeof window !== 'undefined' ? getOwnerWindow(eventTarget).KeyboardEvent : KeyboardEvent; + let document = getOwnerDocument(eventTarget); + let ownerWindow = getOwnerWindow(eventTarget); + const IHTMLInputElement = typeof ownerWindow !== 'undefined' ? ownerWindow.HTMLInputElement : HTMLInputElement; + const IHTMLTextAreaElement = typeof ownerWindow !== 'undefined' ? ownerWindow.HTMLTextAreaElement : HTMLTextAreaElement; + const IHTMLElement = typeof ownerWindow !== 'undefined' ? ownerWindow.HTMLElement : HTMLElement; + const IKeyboardEvent = typeof ownerWindow !== 'undefined' ? ownerWindow.KeyboardEvent : KeyboardEvent; // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group) // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element diff --git a/packages/react-aria/src/interactions/useHover.ts b/packages/react-aria/src/interactions/useHover.ts index 47addd9fbf3..6f1eabbcd4f 100644 --- a/packages/react-aria/src/interactions/useHover.ts +++ b/packages/react-aria/src/interactions/useHover.ts @@ -57,15 +57,16 @@ function handleGlobalPointerEvent(e: PointerEvent) { } function setupGlobalTouchEvents() { - if (typeof document === 'undefined') { + let ownerDocument = getOwnerDocument(null); + if (typeof ownerDocument === 'undefined') { return; } if (hoverCount === 0) { if (typeof PointerEvent !== 'undefined') { - document.addEventListener('pointerup', handleGlobalPointerEvent); + ownerDocument.addEventListener('pointerup', handleGlobalPointerEvent); } else if (process.env.NODE_ENV === 'test') { - document.addEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents); + ownerDocument.addEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents); } } @@ -77,9 +78,9 @@ function setupGlobalTouchEvents() { } if (typeof PointerEvent !== 'undefined') { - document.removeEventListener('pointerup', handleGlobalPointerEvent); + ownerDocument.removeEventListener('pointerup', handleGlobalPointerEvent); } else if (process.env.NODE_ENV === 'test') { - document.removeEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents); + ownerDocument.removeEventListener('touchend', setGlobalIgnoreEmulatedMouseEvents); } }; } diff --git a/packages/react-aria/src/interactions/useLongPress.ts b/packages/react-aria/src/interactions/useLongPress.ts index e797a617675..65b4589bf65 100644 --- a/packages/react-aria/src/interactions/useLongPress.ts +++ b/packages/react-aria/src/interactions/useLongPress.ts @@ -12,7 +12,7 @@ import {DOMAttributes, FocusableElement, LongPressEvent} from '@react-types/shared'; import {focusWithoutScrolling} from '../utils/focusWithoutScrolling'; -import {getOwnerDocument} from '../utils/domHelpers'; +import {getOwnerDocument, getOwnerWindow} from '../utils/domHelpers'; import {mergeProps} from '../utils/mergeProps'; import {useDescription} from '../utils/useDescription'; import {useGlobalListeners} from '../utils/useGlobalListeners'; @@ -106,8 +106,9 @@ export function useLongPress(props: LongPressProps): LongPressResult { e.preventDefault(); }; + let ownerWindow = getOwnerWindow(e.target); addGlobalListener(e.target, 'contextmenu', onContextMenu, {once: true}); - addGlobalListener(window, 'pointerup', () => { + addGlobalListener(ownerWindow, 'pointerup', () => { // If no contextmenu event is fired quickly after pointerup, remove the handler // so future context menu events outside a long press are not prevented. setTimeout(() => { diff --git a/packages/react-aria/src/interactions/useMove.ts b/packages/react-aria/src/interactions/useMove.ts index 6a993bbe5d3..2261db6c37d 100644 --- a/packages/react-aria/src/interactions/useMove.ts +++ b/packages/react-aria/src/interactions/useMove.ts @@ -12,6 +12,8 @@ import {disableTextSelection, restoreTextSelection} from './textSelection'; import {DOMAttributes, MoveEvents, PointerType} from '@react-types/shared'; +import {getEventTarget} from '../utils/shadowdom/DOMFunctions'; +import {getOwnerWindow} from '../utils/domHelpers'; import React, {useCallback, useMemo, useRef} from 'react'; import {useEffectEvent} from '../utils/useEffectEvent'; import {useGlobalListeners} from '../utils/useGlobalListeners'; @@ -111,8 +113,9 @@ export function useMove(props: MoveEvents): MoveResult { if (e.button === 0) { // eslint-disable-next-line react-hooks/rules-of-hooks endEvent(e, 'mouse'); - removeGlobalListener(window, 'mousemove', onMouseMove, false); - removeGlobalListener(window, 'mouseup', onMouseUp, false); + let ownerWindow = getOwnerWindow(getEventTarget(e) as Element); + removeGlobalListener(ownerWindow, 'mousemove', onMouseMove, false); + removeGlobalListener(ownerWindow, 'mouseup', onMouseUp, false); } }; moveProps.onMouseDown = (e: React.MouseEvent) => { @@ -121,8 +124,9 @@ export function useMove(props: MoveEvents): MoveResult { e.stopPropagation(); e.preventDefault(); state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY}; - addGlobalListener(window, 'mousemove', onMouseMove, false); - addGlobalListener(window, 'mouseup', onMouseUp, false); + let ownerWindow = getOwnerWindow(getEventTarget(e) as Element); + addGlobalListener(ownerWindow, 'mousemove', onMouseMove, false); + addGlobalListener(ownerWindow, 'mouseup', onMouseUp, false); } }; @@ -141,9 +145,10 @@ export function useMove(props: MoveEvents): MoveResult { // eslint-disable-next-line react-hooks/rules-of-hooks endEvent(e, 'touch'); state.current.id = null; - removeGlobalListener(window, 'touchmove', onTouchMove); - removeGlobalListener(window, 'touchend', onTouchEnd); - removeGlobalListener(window, 'touchcancel', onTouchEnd); + let ownerWindow = getOwnerWindow(getEventTarget(e) as Element); + removeGlobalListener(ownerWindow, 'touchmove', onTouchMove); + removeGlobalListener(ownerWindow, 'touchend', onTouchEnd); + removeGlobalListener(ownerWindow, 'touchcancel', onTouchEnd); } }; moveProps.onTouchStart = (e: React.TouchEvent) => { @@ -157,9 +162,10 @@ export function useMove(props: MoveEvents): MoveResult { e.preventDefault(); state.current.lastPosition = {pageX, pageY}; state.current.id = identifier; - addGlobalListener(window, 'touchmove', onTouchMove, false); - addGlobalListener(window, 'touchend', onTouchEnd, false); - addGlobalListener(window, 'touchcancel', onTouchEnd, false); + let ownerWindow = getOwnerWindow(getEventTarget(e) as Element); + addGlobalListener(ownerWindow, 'touchmove', onTouchMove, false); + addGlobalListener(ownerWindow, 'touchend', onTouchEnd, false); + addGlobalListener(ownerWindow, 'touchcancel', onTouchEnd, false); }; } else { let onPointerMove = (e: PointerEvent) => { @@ -181,9 +187,10 @@ export function useMove(props: MoveEvents): MoveResult { // eslint-disable-next-line react-hooks/rules-of-hooks endEvent(e, pointerType); state.current.id = null; - removeGlobalListener(window, 'pointermove', onPointerMove, false); - removeGlobalListener(window, 'pointerup', onPointerUp, false); - removeGlobalListener(window, 'pointercancel', onPointerUp, false); + let ownerWindow = getOwnerWindow(getEventTarget(e) as Element); + removeGlobalListener(ownerWindow, 'pointermove', onPointerMove, false); + removeGlobalListener(ownerWindow, 'pointerup', onPointerUp, false); + removeGlobalListener(ownerWindow, 'pointercancel', onPointerUp, false); } }; @@ -194,9 +201,10 @@ export function useMove(props: MoveEvents): MoveResult { e.preventDefault(); state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY}; state.current.id = e.pointerId; - addGlobalListener(window, 'pointermove', onPointerMove, false); - addGlobalListener(window, 'pointerup', onPointerUp, false); - addGlobalListener(window, 'pointercancel', onPointerUp, false); + let ownerWindow = getOwnerWindow(getEventTarget(e) as Element); + addGlobalListener(ownerWindow, 'pointermove', onPointerMove, false); + addGlobalListener(ownerWindow, 'pointerup', onPointerUp, false); + addGlobalListener(ownerWindow, 'pointercancel', onPointerUp, false); } }; } diff --git a/packages/react-aria/src/tabs/useTab.ts b/packages/react-aria/src/tabs/useTab.ts index 4cac0c79350..f1e7ae5c3f2 100644 --- a/packages/react-aria/src/tabs/useTab.ts +++ b/packages/react-aria/src/tabs/useTab.ts @@ -54,12 +54,16 @@ export function useTab( let isSelected = key === selectedKey; let isDisabled = propsDisabled || state.isDisabled || state.selectionManager.isDisabled(key); + let item = state.collection.getItem(key); let {itemProps, isPressed} = useSelectableItem({ selectionManager: manager, key, ref, isDisabled, - shouldSelectOnPressUp, + // Link tabs should behave like native anchors (navigate on press up) + // This avoids reopening beforeunload dialogs when browsers replay + // queued pointer enter/leave events after cancellation. + shouldSelectOnPressUp: shouldSelectOnPressUp ?? item?.props.href != null, linkBehavior: 'selection' }); @@ -67,7 +71,6 @@ export function useTab( let tabPanelId = generateId(state, key, 'tabpanel'); let {tabIndex} = itemProps; - let item = state.collection.getItem(key); let domProps = filterDOMProps(item?.props, {labelable: true}); delete domProps.id; let linkProps = useLinkProps(item?.props); diff --git a/rfcs/2025-shadow-dom-support.md b/rfcs/2025-shadow-dom-support.md new file mode 100644 index 00000000000..4a4c957e648 --- /dev/null +++ b/rfcs/2025-shadow-dom-support.md @@ -0,0 +1,121 @@ + + +- Start Date: 2025/1/28 +- RFC PR: Exploration PRs: https://github.com/adobe/react-spectrum/pull/6046 +- Authors: Rob Snow + +# Improving React Aria Shadow DOM Support + +## Summary + +This RFC outlines a plan for progressive enhancement of Shadow DOM support across React Aria, React Aria Components, and React Spectrum S2. “Shadow DOM support” can mean many things: it spans open versus closed shadow roots, a single containing shadow root versus many per-component roots, and interaction with third-party encapsulation. The work described here is intended to improve behavior across these scenarios where feasible. + +## Motivation + +As Shadow DOM is used by more libraries and applications, users have encountered friction trying to adopt or use our libraries. Reported issues include incorrect focus management, broken overlay and press behavior, and `ariaHideOutside` misbehavior when trees cross shadow boundaries. + +Representative issues: + +- [Dialog focus management with third-party dialogs](https://github.com/adobe/react-spectrum/issues/5314) +- [Video controls and FocusScope](https://github.com/adobe/react-spectrum/issues/6729) +- [FocusScope inside `shadowRoot`](https://github.com/adobe/react-spectrum/issues/1472) +- [`ariaHideOutside` inside shadow DOM](https://github.com/adobe/react-spectrum/issues/6133) +- [`usePress` in `shadowRoot`](https://github.com/adobe/react-spectrum/issues/2040) +- [`useOverlay` click-outside in shadow DOM](https://github.com/adobe/react-spectrum/issues/3970) + +Prior contributions have addressed subsets of these problems. We are looking for a solution that is maintainable, integrates cleanly with day-to-day development, and reduces reliance on ad hoc workarounds. + +## Detailed Design + +As mentioned earlier, there are proposed parts to this initiative: + +### 1. Testing + +Tests will be net new. This is the biggest body of needed work. Without it, we don't know what we are supporting and we can't catch regressions. + +**Tooling:** [`shadow-dom-testing-library`](https://github.com/KonnorRogers/shadow-dom-testing-library) may supplement or replace certain Testing Library utilities where shadow-aware queries are required. + +**Custom renderer (alternative considered):** A React Testing Library renderer that wraps each test’s output in a shadow root—analogous to the existing StrictMode test setup—would provide a strong baseline. An initial exploration ([comparison branch](https://github.com/adobe/react-spectrum/compare/get-tests-running-in-shadowdom?expand=1)) indicated that wholesale migration of existing tests is impractical due to API assumptions and volume of failures. + +### 2. Avoid DOM Traversal/Manipulation + +FocusScope and collection-related code currently traverse the DOM to assign and contain focus (e.g., dialogs, roving tabindex). Prefer deferring tab order to the browser where possible. + +A promising direction is to reason about stacking context / focus escape so that focus is intercepted only when it would leave the intended scope for an invalid destination. This stops watching the Tab key completely. Exploration exists in [PR #8796](https://github.com/adobe/react-spectrum/pull/8796). + +**Alternative (sentinel nodes):** Placing focusable sentinels to trap focus could reduce custom traversal and may help with closed shadow roots (e.g., native video controls inside a dialog). This remains a candidate if the stacking-context approach is insufficient. + +### 3. Scoped listeners and observers + +Global listeners and `MutationObserver` (and similar) do not observe inside shadow roots by default. Consequences include missed or misattributed events: for example, focus and blur do not bubble across shadow boundaries except when focus enters or exits the root; child-list observers do not see mutations inside descendant shadow trees. + +Attach listeners and extend observers to relevant shadow roots where the implementation currently assumes a single document subtree. Fixes are expected to be contextual rather than one universal abstraction. + +### 4. In-team Education + +Writing code that can handle the prescence of Shadow DOM can be tricky. As a result, there will be a learning curve for the team. + +ShadowDOM safe code requires discipline. Two mechanisms are proposed: +- **Shared utilities** encapsulating shadow-aware behavior (e.g., active element, event target, tree walking, containment checks). +- **Lint rules** to flag unsafe patterns and suggest utilities. + +Illustrative mappings: +| Unsafe / naive pattern | Preferred utility-oriented pattern | +|------------------------|-----------------------------------| +| `document.activeElement` | `getActiveElement()` (shadow-aware) | +| `e.target` | `getTargetElement(e)` | +| `document.createTreeWalker(...)` | `createShadowTreeWalker(...)` | +| `e.currentTarget.contains(e.target)` | `nodeContains(e.currentTarget, getEventTarget(e.nativeEvent))` | + +### 5. Communication + +We have our current Shadow DOM support gated behind a feature flag to both signal that it is experimental as well as to protect users who are not using any Shadow DOM from possible performance hits. + +We will want to expand this to also shield those users from code size increases. This could be accomplished with a global registry for the utility functions we provide that would replace the feature flag system we have for it right now. + +We also need to communicate, through documentation, what the specifics are of our Shadow DOM support since we likely will not be able to support everything, and certainly not much for a while. + +For example, some of our support may require open root Shadow DOMs. Or someone using our FocusScope's focus manager may need to know about different traversal methods to avoid the same issues we are trying to avoid. + +## Drawbacks + +One concern is on-going support. Internal use cases do not heavily exercise Shadow DOM today; team expertise is limited. Reliance on automated tests is necessary because Shadow DOM is not a focus for the team. + +External contributions may taper once immediate needs are met; the maintainers should assume responsibility for completing the goals in this RFC. + +Current mitigations interact with shadow trees in ways that are not always aligned with encapsulation as originally envisioned. Future API redesigns might prefer different models; present choices could complicate migration. + +## Backwards compatibility + +This is a backwards compatible change, we should just be extending functionality, not breaking any of it. + + +## Open questions + +1. **Support matrix:** How should supported versus unsupported Shadow DOM configurations be defined and documented (open vs. closed, single vs. multiple roots)? +2. **Test environment:** `user-event` and JSDOM have known shadow DOM gaps ([e.g. user-event #1026](https://github.com/testing-library/user-event/issues/1026)); what is the long-term testing strategy if upstream fixes are slow? +3. **Scope:** Should changes apply to React Spectrum v3, or only to React Aria Components and S2 going forward? + +## Request for community input + +The highest-value contributions are tests: unit tests or minimal reproductions derived from real applications that can be turned into permanent fixtures. Additional coverage directly reduces regression risk after the initial implementation phase. + +## Frequently asked questions + +**How much can the project rely on contributor maintenance after merge?** +Maintainers should treat contributed code as owned by the project. ESLint and shared utilities reduce the cost of keeping patterns consistent. + +**Do users who never use Shadow DOM benefit?** +Yes. Several reported bugs involve shadow trees introduced by third parties or by native elements (e.g., video controls inside dialogs). Consumers may be unaware that shadow DOM is in play. + +## Related discussions + +- Original exploration: [feat: Focus Management within ShadowDOM](https://github.com/adobe/react-spectrum/pull/6046) +- [Known remaining issues (project board)](https://github.com/orgs/adobe/projects/19/views/32?pane=issue&itemId=157309187) diff --git a/starters/docs/.storybook/main.js b/starters/docs/.storybook/main.js index 761ac71a767..3f8f7aaba2b 100644 --- a/starters/docs/.storybook/main.js +++ b/starters/docs/.storybook/main.js @@ -12,6 +12,7 @@ function getAbsolutePath(value) { const config = { stories: ["../stories/*.stories.@(js|jsx|mjs|ts|tsx)"], addons: [ + getAbsolutePath("@storybook/addon-docs"), getAbsolutePath("@storybook/addon-webpack5-compiler-babel"), ], framework: { diff --git a/starters/docs/package.json b/starters/docs/package.json index cc8a8061dc8..a339d9a6a8c 100644 --- a/starters/docs/package.json +++ b/starters/docs/package.json @@ -14,9 +14,11 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.24.1", "@babel/preset-typescript": "^7.27.1", + "@storybook/addon-docs": "^9.0.18", "@storybook/addon-webpack5-compiler-babel": "^3.0.6", "@storybook/react": "^9.0.18", "@storybook/react-webpack5": "^9.0.18", + "@vueless/storybook-dark-mode": "^9.0.6", "clsx": "^2.1.1", "lightningcss-loader": "^2.1.0", "lucide-react": "^0.517.0", @@ -24,7 +26,6 @@ "react-aria-components": "^1.14.0", "react-dom": "^19.2.0", "storybook": "^9.0.18", - "@vueless/storybook-dark-mode": "^9.0.6", "typescript": "^5.8.2" }, "resolutions": { diff --git a/starters/tailwind/.storybook/main.js b/starters/tailwind/.storybook/main.js index f665aed6a4e..0679fd161ff 100644 --- a/starters/tailwind/.storybook/main.js +++ b/starters/tailwind/.storybook/main.js @@ -4,7 +4,7 @@ const config = { "../stories/**/*.mdx", "../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)", ], - addons: [], + addons: ["@storybook/addon-docs"], framework: { name: "@storybook/react-vite", options: {}, diff --git a/starters/tailwind/package.json b/starters/tailwind/package.json index d359844c5eb..7041f27da22 100644 --- a/starters/tailwind/package.json +++ b/starters/tailwind/package.json @@ -5,6 +5,7 @@ "packageManager": "yarn@4.2.2", "devDependencies": { "@babel/preset-react": "^7.24.1", + "@storybook/addon-docs": "^9.0.18", "@storybook/react": "^9.0.18", "@storybook/react-vite": "^9.0.18", "@tailwindcss/postcss": "^4.0.0", diff --git a/yarn.config.cjs b/yarn.config.cjs index 10e84b31330..c4ac4d2f759 100644 --- a/yarn.config.cjs +++ b/yarn.config.cjs @@ -56,10 +56,6 @@ function enforceConsistentDependenciesAcrossTheProject({Yarn}) { ) { workspace.set('dependencies.@swc/helpers', '^0.5.0'); - workspace.set('dependencies.@adobe/spectrum-css-temp'); - if (workspace.ident.startsWith('@react-spectrum') && !workspace.ident.endsWith('/utils') && !workspace.ident.endsWith('/mcp')) { - workspace.set('devDependencies.@adobe/spectrum-css-temp', '3.0.0-alpha.1'); - } // these should not be in dependencies, but should be in dev or peer // can't change the error message, but the package knows if it even needs it if (!workspace.ident.startsWith('@react-spectrum/test-utils-internal')) { diff --git a/yarn.lock b/yarn.lock index dfaedc31dcf..5356e6f8bef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -96,7 +96,6 @@ __metadata: "@babel/cli": "npm:^7.12.10" "@babel/core": "npm:^7.24.3" "@internationalized/date": "npm:^3.12.0" - "@internationalized/message": "npm:^3.1.8" "@react-spectrum/style-macro-s1": "npm:3.0.0-alpha.5" "@react-types/shared": "npm:^3.33.1" "@spectrum-icons/ui": "npm:^3.6.23" @@ -6020,7 +6019,7 @@ __metadata: languageName: unknown linkType: soft -"@react-aria/dnd@npm:^3.0.0, @react-aria/dnd@npm:^3.1.0, @react-aria/dnd@workspace:packages/@react-aria/dnd": +"@react-aria/dnd@workspace:packages/@react-aria/dnd": version: 0.0.0-use.local resolution: "@react-aria/dnd@workspace:packages/@react-aria/dnd" dependencies: @@ -6552,7 +6551,6 @@ __metadata: resolution: "@react-spectrum/accordion@workspace:packages/@react-spectrum/accordion" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6565,7 +6563,6 @@ __metadata: resolution: "@react-spectrum/actionbar@workspace:packages/@react-spectrum/actionbar" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -6579,7 +6576,6 @@ __metadata: resolution: "@react-spectrum/actiongroup@workspace:packages/@react-spectrum/actiongroup" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -6593,7 +6589,6 @@ __metadata: resolution: "@react-spectrum/autocomplete@workspace:packages/@react-spectrum/autocomplete" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -6607,7 +6602,6 @@ __metadata: resolution: "@react-spectrum/avatar@workspace:packages/@react-spectrum/avatar" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6620,7 +6614,6 @@ __metadata: resolution: "@react-spectrum/badge@workspace:packages/@react-spectrum/badge" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6633,7 +6626,6 @@ __metadata: resolution: "@react-spectrum/breadcrumbs@workspace:packages/@react-spectrum/breadcrumbs" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -6642,13 +6634,11 @@ __metadata: languageName: unknown linkType: soft -"@react-spectrum/button@npm:^3.1.0, @react-spectrum/button@npm:^3.17.7, @react-spectrum/button@npm:^3.8.1, @react-spectrum/button@workspace:packages/@react-spectrum/button": +"@react-spectrum/button@npm:^3.1.0, @react-spectrum/button@npm:^3.17.7, @react-spectrum/button@workspace:packages/@react-spectrum/button": version: 0.0.0-use.local resolution: "@react-spectrum/button@workspace:packages/@react-spectrum/button" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-dom: "npm:^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" peerDependencies: @@ -6662,8 +6652,6 @@ __metadata: resolution: "@react-spectrum/buttongroup@workspace:packages/@react-spectrum/buttongroup" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@spectrum-icons/workflow": "npm:^4.0.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6676,8 +6664,6 @@ __metadata: resolution: "@react-spectrum/calendar@workspace:packages/@react-spectrum/calendar" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6690,7 +6676,6 @@ __metadata: resolution: "@react-spectrum/card@workspace:packages/@react-spectrum/card" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6703,7 +6688,6 @@ __metadata: resolution: "@react-spectrum/checkbox@workspace:packages/@react-spectrum/checkbox" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-dom: "npm:^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" peerDependencies: @@ -6745,7 +6729,6 @@ __metadata: resolution: "@react-spectrum/color@workspace:packages/@react-spectrum/color" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@react-spectrum/style-macro-s1": "npm:3.0.0-alpha.5" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" @@ -6760,7 +6743,6 @@ __metadata: resolution: "@react-spectrum/combobox@workspace:packages/@react-spectrum/combobox" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -6774,7 +6756,6 @@ __metadata: resolution: "@react-spectrum/contextualhelp@workspace:packages/@react-spectrum/contextualhelp" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@react-spectrum/link": "npm:^3.2.0" "@react-spectrum/view": "npm:^3.1.3" "@swc/helpers": "npm:^0.5.0" @@ -6789,8 +6770,6 @@ __metadata: resolution: "@react-spectrum/datepicker@workspace:packages/@react-spectrum/datepicker" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6803,8 +6782,6 @@ __metadata: resolution: "@react-spectrum/dialog@workspace:packages/@react-spectrum/dialog" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6817,7 +6794,6 @@ __metadata: resolution: "@react-spectrum/divider@workspace:packages/@react-spectrum/divider" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6830,7 +6806,6 @@ __metadata: resolution: "@react-spectrum/dnd@workspace:packages/@react-spectrum/dnd" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@react-types/shared": "npm:^3.33.1" "@swc/helpers": "npm:^0.5.0" react-aria: "npm:^3.47.0" @@ -6884,8 +6859,6 @@ __metadata: resolution: "@react-spectrum/dropzone@workspace:packages/@react-spectrum/dropzone" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-dom: "npm:^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" peerDependencies: @@ -6898,7 +6871,6 @@ __metadata: version: 0.0.0-use.local resolution: "@react-spectrum/filetrigger@workspace:packages/@react-spectrum/filetrigger" dependencies: - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-aria-components: "npm:^1.16.0" react-dom: "npm:^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" @@ -6913,7 +6885,6 @@ __metadata: resolution: "@react-spectrum/form@workspace:packages/@react-spectrum/form" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6926,7 +6897,6 @@ __metadata: resolution: "@react-spectrum/icon@workspace:packages/@react-spectrum/icon" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6939,7 +6909,6 @@ __metadata: resolution: "@react-spectrum/illustratedmessage@workspace:packages/@react-spectrum/illustratedmessage" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6952,7 +6921,6 @@ __metadata: resolution: "@react-spectrum/image@workspace:packages/@react-spectrum/image" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6965,7 +6933,6 @@ __metadata: resolution: "@react-spectrum/inlinealert@workspace:packages/@react-spectrum/inlinealert" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6978,7 +6945,6 @@ __metadata: resolution: "@react-spectrum/label@workspace:packages/@react-spectrum/label" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6991,7 +6957,6 @@ __metadata: resolution: "@react-spectrum/labeledvalue@workspace:packages/@react-spectrum/labeledvalue" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7004,7 +6969,6 @@ __metadata: resolution: "@react-spectrum/layout@workspace:packages/@react-spectrum/layout" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@react-types/shared": "npm:^3.33.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: @@ -7018,7 +6982,6 @@ __metadata: resolution: "@react-spectrum/link@workspace:packages/@react-spectrum/link" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7031,10 +6994,6 @@ __metadata: resolution: "@react-spectrum/list@workspace:packages/@react-spectrum/list" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-aria/dnd": "npm:^3.0.0" - "@react-spectrum/button": "npm:^3.8.1" - "@react-stately/dnd": "npm:^3.0.0" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7048,7 +7007,6 @@ __metadata: resolution: "@react-spectrum/listbox@workspace:packages/@react-spectrum/listbox" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7076,7 +7034,6 @@ __metadata: resolution: "@react-spectrum/menu@workspace:packages/@react-spectrum/menu" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7090,7 +7047,6 @@ __metadata: resolution: "@react-spectrum/meter@workspace:packages/@react-spectrum/meter" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7103,8 +7059,6 @@ __metadata: resolution: "@react-spectrum/numberfield@workspace:packages/@react-spectrum/numberfield" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7117,7 +7071,6 @@ __metadata: resolution: "@react-spectrum/overlays@workspace:packages/@react-spectrum/overlays" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7151,7 +7104,6 @@ __metadata: resolution: "@react-spectrum/picker@workspace:packages/@react-spectrum/picker" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7165,7 +7117,6 @@ __metadata: resolution: "@react-spectrum/progress@workspace:packages/@react-spectrum/progress" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7173,12 +7124,11 @@ __metadata: languageName: unknown linkType: soft -"@react-spectrum/provider@npm:^3.1.0, @react-spectrum/provider@workspace:packages/@react-spectrum/provider": +"@react-spectrum/provider@npm:^3.1.0, @react-spectrum/provider@npm:^3.10.14, @react-spectrum/provider@workspace:packages/@react-spectrum/provider": version: 0.0.0-use.local resolution: "@react-spectrum/provider@workspace:packages/@react-spectrum/provider" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7191,7 +7141,6 @@ __metadata: resolution: "@react-spectrum/radio@workspace:packages/@react-spectrum/radio" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7214,7 +7163,8 @@ __metadata: "@react-spectrum/utils": "npm:^3.12.6" "@react-types/shared": "npm:^3.30.0" axe-playwright: "npm:^2.2.2" - emojibase-data: "npm:^16.0.3" + emojibase: "npm:^17.0.0" + emojibase-data: "npm:^17.0.0" fast-glob: "npm:^3.3.3" globals-docs: "npm:^2.4.1" gray-matter: "npm:^4.0.3" @@ -7236,6 +7186,8 @@ __metadata: ts-morph: "npm:^26.0.0" unified: "npm:^11.0.5" unist-util-visit: "npm:^5.0.0" + peerDependencies: + "@react-spectrum/provider": "*" languageName: unknown linkType: soft @@ -7296,8 +7248,6 @@ __metadata: resolution: "@react-spectrum/searchfield@workspace:packages/@react-spectrum/searchfield" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7310,7 +7260,6 @@ __metadata: resolution: "@react-spectrum/slider@workspace:packages/@react-spectrum/slider" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7323,7 +7272,6 @@ __metadata: resolution: "@react-spectrum/statuslight@workspace:packages/@react-spectrum/statuslight" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7336,7 +7284,6 @@ __metadata: resolution: "@react-spectrum/steplist@workspace:packages/@react-spectrum/steplist" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7349,7 +7296,6 @@ __metadata: version: 0.0.0-use.local resolution: "@react-spectrum/story-utils@workspace:packages/@react-spectrum/story-utils" dependencies: - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@react-aria/utils": "npm:^3.8.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: @@ -7369,7 +7315,6 @@ __metadata: resolution: "@react-spectrum/switch@workspace:packages/@react-spectrum/switch" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7382,9 +7327,6 @@ __metadata: resolution: "@react-spectrum/table@workspace:packages/@react-spectrum/table" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-aria/dnd": "npm:^3.1.0" - "@react-stately/dnd": "npm:^3.1.0" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7398,7 +7340,6 @@ __metadata: resolution: "@react-spectrum/tabs@workspace:packages/@react-spectrum/tabs" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7412,7 +7353,6 @@ __metadata: resolution: "@react-spectrum/tag@workspace:packages/@react-spectrum/tag" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-stately: "npm:^3.45.0" peerDependencies: @@ -7421,12 +7361,12 @@ __metadata: languageName: unknown linkType: soft -"@react-spectrum/test-utils-internal@npm:3.0.0-alpha.1, @react-spectrum/test-utils-internal@workspace:packages/dev/test-utils": +"@react-spectrum/test-utils-internal@workspace:packages/dev/test-utils": version: 0.0.0-use.local resolution: "@react-spectrum/test-utils-internal@workspace:packages/dev/test-utils" dependencies: - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@react-aria/ssr": "npm:^3.0.0" + "@react-spectrum/provider": "npm:^3.10.14" "@react-spectrum/test-utils": "npm:1.0.0-beta.3" "@react-spectrum/theme-default": "npm:^3.5.13" "@swc/helpers": "npm:^0.5.0" @@ -7438,7 +7378,7 @@ __metadata: react-aria: "npm:^3.47.0" resolve: "npm:^2.0.0-next.6" peerDependencies: - "@react-spectrum/provider": ^3.9.12 + "@react-spectrum/provider": ^3.10.14 react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 languageName: unknown @@ -7448,7 +7388,6 @@ __metadata: version: 0.0.0-use.local resolution: "@react-spectrum/test-utils@workspace:packages/@react-spectrum/test-utils" dependencies: - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@react-aria/test-utils": "npm:1.0.0-beta.2" "@swc/helpers": "npm:^0.5.0" peerDependencies: @@ -7466,7 +7405,6 @@ __metadata: resolution: "@react-spectrum/text@workspace:packages/@react-spectrum/text" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" react-dom: "npm:^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" peerDependencies: @@ -7480,8 +7418,6 @@ __metadata: resolution: "@react-spectrum/textfield@workspace:packages/@react-spectrum/textfield" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@spectrum-icons/workflow": "npm:^4.0.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7494,7 +7430,6 @@ __metadata: resolution: "@react-spectrum/theme-dark@workspace:packages/@react-spectrum/theme-dark" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7507,7 +7442,6 @@ __metadata: resolution: "@react-spectrum/theme-default@workspace:packages/@react-spectrum/theme-default" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7520,7 +7454,6 @@ __metadata: resolution: "@react-spectrum/theme-express@workspace:packages/@react-spectrum/theme-express" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7533,7 +7466,6 @@ __metadata: resolution: "@react-spectrum/theme-light@workspace:packages/@react-spectrum/theme-light" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7546,8 +7478,6 @@ __metadata: resolution: "@react-spectrum/toast@workspace:packages/@react-spectrum/toast" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/test-utils-internal": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" "@types/use-sync-external-store": "npm:^0.0.3" peerDependencies: @@ -7561,7 +7491,6 @@ __metadata: resolution: "@react-spectrum/tooltip@workspace:packages/@react-spectrum/tooltip" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7574,8 +7503,6 @@ __metadata: resolution: "@react-spectrum/tree@workspace:packages/@react-spectrum/tree" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" - "@react-spectrum/style-macro-s1": "npm:3.0.0-alpha.5" "@swc/helpers": "npm:^0.5.0" react-aria: "npm:^3.47.0" peerDependencies: @@ -7608,7 +7535,6 @@ __metadata: resolution: "@react-spectrum/view@workspace:packages/@react-spectrum/view" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7621,7 +7547,6 @@ __metadata: resolution: "@react-spectrum/well@workspace:packages/@react-spectrum/well" dependencies: "@adobe/react-spectrum": "npm:^3.46.2" - "@adobe/spectrum-css-temp": "npm:3.0.0-alpha.1" "@swc/helpers": "npm:^0.5.0" peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -7737,7 +7662,7 @@ __metadata: languageName: unknown linkType: soft -"@react-stately/dnd@npm:^3.0.0, @react-stately/dnd@npm:^3.1.0, @react-stately/dnd@workspace:packages/@react-stately/dnd": +"@react-stately/dnd@workspace:packages/@react-stately/dnd": version: 0.0.0-use.local resolution: "@react-stately/dnd@workspace:packages/@react-stately/dnd" dependencies: @@ -14855,12 +14780,19 @@ __metadata: languageName: node linkType: hard -"emojibase-data@npm:^16.0.3": - version: 16.0.3 - resolution: "emojibase-data@npm:16.0.3" +"emojibase-data@npm:^17.0.0": + version: 17.0.0 + resolution: "emojibase-data@npm:17.0.0" peerDependencies: emojibase: "*" - checksum: 10c0/d82520917c2ec326e737da9c5a57472e41a719777fa4770b52b75f0568791613fc94829898831c7b3fff1528134de01019cdf34e571d214fee19e40950d68b7f + checksum: 10c0/c1373438ac52e943a7953ce2315c0da4e29a6552a0ee9ae18a22dbf824a6b428d25655c55e2e48c69900358052408496807cdf7af12a43a0a1b39fb369cbf4a0 + languageName: node + linkType: hard + +"emojibase@npm:^17.0.0": + version: 17.0.0 + resolution: "emojibase@npm:17.0.0" + checksum: 10c0/d37435b77f12e3c45d06fc09753fd7dd6b44e757cfaa96b64b72257109aa8166773e19c1eb18c21a06e5b8c50462cb279dca83510724673f505a6f0d6e7dc90f languageName: node linkType: hard @@ -24921,7 +24853,6 @@ __metadata: "@babel/cli": "npm:^7.24.1" "@babel/core": "npm:^7.24.3" "@internationalized/date": "npm:^3.12.0" - "@internationalized/message": "npm:^3.1.8" "@internationalized/number": "npm:^3.6.5" "@internationalized/string": "npm:^3.2.7" "@react-types/shared": "npm:^3.33.1"