From e5f75bbf8c7c1cdcba657ab6e5ce9e90a9a84145 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 18 Nov 2025 12:04:14 -0800 Subject: [PATCH 1/3] docs: Fix plant images (#9208) --- packages/dev/s2-docs/.parcelrc-s2-docs | 3 ++- packages/dev/s2-docs/S2DocsNamer.js | 12 ++++++++++++ .../s2-docs/pages/react-aria/examples/plants/App.tsx | 2 +- packages/dev/s2-docs/src/CodeBlock.tsx | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 packages/dev/s2-docs/S2DocsNamer.js diff --git a/packages/dev/s2-docs/.parcelrc-s2-docs b/packages/dev/s2-docs/.parcelrc-s2-docs index 14b1fa12c78..079f9cee00d 100644 --- a/packages/dev/s2-docs/.parcelrc-s2-docs +++ b/packages/dev/s2-docs/.parcelrc-s2-docs @@ -21,5 +21,6 @@ }, "packagers": { "*.json": "parcel-packager-docs" - } + }, + "namers": ["./S2DocsNamer.js", "..."] } diff --git a/packages/dev/s2-docs/S2DocsNamer.js b/packages/dev/s2-docs/S2DocsNamer.js new file mode 100644 index 00000000000..47b27087d7b --- /dev/null +++ b/packages/dev/s2-docs/S2DocsNamer.js @@ -0,0 +1,12 @@ +const {Namer} = require('@parcel/plugin'); +const path = require('path'); + +module.exports = new Namer({ + name({bundle}) { + // Content hashing plant images messes up RSC parsing, and we don't expect these to ever change. + let asset = bundle.getMainEntry(); + if (asset && asset.filePath.startsWith(path.join(__dirname, 'pages/react-aria/examples/plants/plants'))) { + return 'assets/plants/' + path.basename(asset.filePath); + } + } +}); diff --git a/packages/dev/s2-docs/pages/react-aria/examples/plants/App.tsx b/packages/dev/s2-docs/pages/react-aria/examples/plants/App.tsx index e167647027c..f0476177764 100644 --- a/packages/dev/s2-docs/pages/react-aria/examples/plants/App.tsx +++ b/packages/dev/s2-docs/pages/react-aria/examples/plants/App.tsx @@ -121,7 +121,7 @@ export default function App(): React.ReactNode { }; return ( -
+
Date: Tue, 18 Nov 2025 14:47:11 -0800 Subject: [PATCH 2/3] fix: ensure required icon has label when field is required (#9177) * fix: ensure required icon has label when field is required * forgot to add to checkbox group --- packages/@react-spectrum/s2/src/CheckboxGroup.tsx | 1 + packages/@react-spectrum/s2/src/ComboBox.tsx | 1 + packages/@react-spectrum/s2/src/Picker.tsx | 1 + 3 files changed, 3 insertions(+) diff --git a/packages/@react-spectrum/s2/src/CheckboxGroup.tsx b/packages/@react-spectrum/s2/src/CheckboxGroup.tsx index 470db185e2b..94e8d1edb1b 100644 --- a/packages/@react-spectrum/s2/src/CheckboxGroup.tsx +++ b/packages/@react-spectrum/s2/src/CheckboxGroup.tsx @@ -94,6 +94,7 @@ export const CheckboxGroup = forwardRef(function CheckboxGroup(props: CheckboxGr }, props.styles)}> {({isDisabled, isInvalid}) => (<> Date: Tue, 18 Nov 2025 17:23:07 -0600 Subject: [PATCH 3/3] docs: S2 docs bug fixes from testing (#9207) * include BCP-47 codes in quality docs * add placeholders on mobile search * fix blog and release sorting in mobile search menu * fix search tag selection logic * lint * lint again --- .../dev/s2-docs/pages/react-aria/quality.mdx | 70 +++++++++---------- packages/dev/s2-docs/src/MobileSearchMenu.tsx | 34 ++++++--- packages/dev/s2-docs/src/SearchMenu.tsx | 3 +- packages/dev/s2-docs/src/searchUtils.tsx | 7 +- 4 files changed, 63 insertions(+), 51 deletions(-) diff --git a/packages/dev/s2-docs/pages/react-aria/quality.mdx b/packages/dev/s2-docs/pages/react-aria/quality.mdx index e9583e35187..04ec87f556d 100644 --- a/packages/dev/s2-docs/pages/react-aria/quality.mdx +++ b/packages/dev/s2-docs/pages/react-aria/quality.mdx @@ -87,41 +87,41 @@ function App() { ### Supported locales
    -
  • Arabic (United Arab Emirates)
  • -
  • Bulgarian (Bulgaria)
  • -
  • Chinese (Simplified)
  • -
  • Chinese (Traditional)
  • -
  • Croatian (Croatia)
  • -
  • Czech (Czech Republic)
  • -
  • Danish (Denmark)
  • -
  • Dutch (Netherlands)
  • -
  • English (Great Britain)
  • -
  • English (United States)
  • -
  • Estonian (Estonia)
  • -
  • Finnish (Finland)
  • -
  • French (Canada)
  • -
  • French (France)
  • -
  • German (Germany)
  • -
  • Greek (Greece)
  • -
  • Hebrew (Israel)
  • -
  • Hungarian (Hungary)
  • -
  • Italian (Italy)
  • -
  • Japanese (Japan)
  • -
  • Korean (Korea)
  • -
  • Latvian (Latvia)
  • -
  • Lithuanian (Lithuania)
  • -
  • Norwegian (Norway)
  • -
  • Polish (Poland)
  • -
  • Portuguese (Brazil)
  • -
  • Romanian (Romania)
  • -
  • Russian (Russia)
  • -
  • Serbian (Serbia)
  • -
  • Slovakian (Slovakia)
  • -
  • Slovenian (Slovenia)
  • -
  • Spanish (Spain)
  • -
  • Swedish (Sweden)
  • -
  • Turkish (Turkey)
  • -
  • Ukrainian (Ukraine)
  • +
  • Arabic (United Arab Emirates) (`ar-AE`)
  • +
  • Bulgarian (Bulgaria) (`bg-BG`)
  • +
  • Chinese (Simplified) (`zh-CN`)
  • +
  • Chinese (Traditional) (`zh-TW`)
  • +
  • Croatian (Croatia) (`hr-HR`)
  • +
  • Czech (Czech Republic) (`cs-CZ`)
  • +
  • Danish (Denmark) (`da-DK`)
  • +
  • Dutch (Netherlands) (`nl-NL`)
  • +
  • English (Great Britain) (`en-GB`)
  • +
  • English (United States) (`en-US`)
  • +
  • Estonian (Estonia) (`et-EE`)
  • +
  • Finnish (Finland) (`fi-FI`)
  • +
  • French (Canada) (`fr-CA`)
  • +
  • French (France) (`fr-FR`)
  • +
  • German (Germany) (`de-DE`)
  • +
  • Greek (Greece) (`el-GR`)
  • +
  • Hebrew (Israel) (`he-IL`)
  • +
  • Hungarian (Hungary) (`hu-HU`)
  • +
  • Italian (Italy) (`it-IT`)
  • +
  • Japanese (Japan) (`ja-JP`)
  • +
  • Korean (Korea) (`ko-KR`)
  • +
  • Latvian (Latvia) (`lv-LV`)
  • +
  • Lithuanian (Lithuania) (`lt-LT`)
  • +
  • Norwegian (Norway) (`nb-NO`)
  • +
  • Polish (Poland) (`pl-PL`)
  • +
  • Portuguese (Brazil) (`pt-BR`)
  • +
  • Romanian (Romania) (`ro-RO`)
  • +
  • Russian (Russia) (`ru-RU`)
  • +
  • Serbian (Serbia) (`sr-SP`)
  • +
  • Slovakian (Slovakia) (`sk-SK`)
  • +
  • Slovenian (Slovenia) (`sl-SI`)
  • +
  • Spanish (Spain) (`es-ES`)
  • +
  • Swedish (Sweden) (`sv-SE`)
  • +
  • Turkish (Turkey) (`tr-TR`)
  • +
  • Ukrainian (Ukraine) (`uk-UA`)
## Interactions diff --git a/packages/dev/s2-docs/src/MobileSearchMenu.tsx b/packages/dev/s2-docs/src/MobileSearchMenu.tsx index fd9794b05e9..8446905746f 100644 --- a/packages/dev/s2-docs/src/MobileSearchMenu.tsx +++ b/packages/dev/s2-docs/src/MobileSearchMenu.tsx @@ -283,18 +283,31 @@ function MobileNav({pages, currentPage}: {pages: Page[], currentPage: Page}) { let filteredPages = filterPages(pages, searchValue); - return filteredPages - .sort((a, b) => getPageTitle(a).localeCompare(getPageTitle(b))) - .map(page => ({id: page.url.replace(/^\//, ''), name: getPageTitle(page), href: page.url, description: stripMarkdown(page.exports?.description)})); + let items = filteredPages.map(page => ({ + id: page.url.replace(/^\//, ''), + name: getPageTitle(page), + href: page.url, + description: stripMarkdown(page.exports?.description), + date: page.exports?.date + })); + + return sortItemsForDisplay(items, searchValue); }; let getAllContent = (libraryId: string, searchValue: string = ''): ComponentCardItem[] => { let librarySections = getSectionsForLibrary(libraryId); let allPages = Array.from(librarySections.values()).flat(); let filteredPages = filterPages(allPages, searchValue); - return filteredPages - .sort((a, b) => getPageTitle(a).localeCompare(getPageTitle(b))) - .map(page => ({id: page.url.replace(/^\//, ''), name: getPageTitle(page), href: page.url, description: stripMarkdown(page.exports?.description)})); + + let items = filteredPages.map(page => ({ + id: page.url.replace(/^\//, ''), + name: getPageTitle(page), + href: page.url, + description: stripMarkdown(page.exports?.description), + date: page.exports?.date + })); + + return sortItemsForDisplay(items, searchValue); }; let getItemsForSelection = (section: string | undefined, libraryId: string, searchValue: string = ''): ComponentCardItem[] => { @@ -363,8 +376,7 @@ function MobileNav({pages, currentPage}: {pages: Page[], currentPage: Page}) { searchValue, sectionsForDisplay.map(s => ({id: s.id, name: s.name})), resourceTags, - initialSelectedSection, - currentPage.exports?.title + initialSelectedSection ); const sectionTags = useSectionTagsForDisplay( @@ -428,6 +440,11 @@ function MobileNav({pages, currentPage}: {pages: Page[], currentPage: Page}) {
{libraries.map(library => { const isIconsSelected = selectedSection === 'icons' && library.id === 'react-spectrum'; + const libraryResourceTags = getResourceTags(library.id); + const selectedResourceTag = libraryResourceTags.find(tag => tag.id === selectedSection); + const placeholderText = selectedResourceTag + ? `Search ${selectedResourceTag.name}` + : `Search ${library.label}`; return ( @@ -438,6 +455,7 @@ function MobileNav({pages, currentPage}: {pages: Page[], currentPage: Page}) { onChange={handleSearchChange} onFocus={handleSearchFocus} onBlur={handleSearchBlur} + placeholder={placeholderText} styles={style({marginX: 16})} />
(initialTagId); const prevSearchWasEmptyRef = useRef(true); @@ -237,10 +236,6 @@ export function useSearchTagSelection( prevSearchWasEmptyRef.current = isEmpty; }, [searchValue, isResourceSelected]); - if (selectedTagId === 'overview' && title === 'Home') { - setSelectedTagId('components'); - } - return [selectedTagId, setSelectedTagId] as const; }