From 5cbe6a631eecec8fd10308192a0496203cebdbf4 Mon Sep 17 00:00:00 2001 From: Daniel Lu Date: Tue, 28 Jul 2026 12:43:21 -0700 Subject: [PATCH 1/2] fix: Require AI disclaimer in PromptField (#10380) * fix: make AI disclaimer required again * strings from Coworker * revert strings since we got official ones --- .../@react-spectrum/ai/src/PromptField.tsx | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/packages/@react-spectrum/ai/src/PromptField.tsx b/packages/@react-spectrum/ai/src/PromptField.tsx index 9233598b35a..5f63de843c8 100644 --- a/packages/@react-spectrum/ai/src/PromptField.tsx +++ b/packages/@react-spectrum/ai/src/PromptField.tsx @@ -101,7 +101,6 @@ export interface PromptFieldProps { styles?: StyleString; variant?: 'balanced' | 'prominent' | 'subtle'; brandColor?: string; - hideDisclaimer?: boolean; } interface PromptFieldState { @@ -193,7 +192,6 @@ export const PromptField = forwardRef(function PromptField( styles, onAddAttachments, onRemoveAttachments, - hideDisclaimer, variant = 'balanced', brandColor } = props; @@ -286,17 +284,15 @@ export const PromptField = forwardRef(function PromptField( inputRef={inputRef}> {children} - {!hideDisclaimer && ( -

- {stringFormatter.format('promptfield.aiDisclaimer')}{' '} - - {stringFormatter.format('promptfield.aiUserGuidlines')} - -

- )} +

+ {stringFormatter.format('promptfield.aiDisclaimer')}{' '} + + {stringFormatter.format('promptfield.aiUserGuidlines')} + +

); From c9d3ad086eb6bd42a35c28f8af1667587b1fe8ae Mon Sep 17 00:00:00 2001 From: Rob Snow Date: Wed, 29 Jul 2026 06:22:42 +1000 Subject: [PATCH 2/2] fix: SideNav focus ring (#10376) * fix: sidenav press scaling * Update packages/@react-spectrum/s2/src/SideNav.tsx Co-authored-by: Reid Barber * remove debugging statement --------- Co-authored-by: Reid Barber --- packages/@react-spectrum/s2/src/SideNav.tsx | 52 ++++++++++++--------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/packages/@react-spectrum/s2/src/SideNav.tsx b/packages/@react-spectrum/s2/src/SideNav.tsx index 499af41e28d..5188835159d 100644 --- a/packages/@react-spectrum/s2/src/SideNav.tsx +++ b/packages/@react-spectrum/s2/src/SideNav.tsx @@ -322,10 +322,19 @@ const SideNavItemLinkContext = createContext<{ onPressChange?: (isPressed: boolean) => void; }>({}); +const SideNavInternalItemContext = createContext<{setLinkPressed?: (isPressed: boolean) => void}>( + {} +); + export const SideNavItem = (props: SideNavItemProps): ReactNode => { let {href, hrefLang, target, rel, download, ping, referrerPolicy, routerOptions, ...rest} = props; let hasLink = href != null && href.length > 0; + let [isLinkPressed, setLinkPressed] = useState(false); + let rowRef = useRef(null); + // oxlint-disable-next-line react-compiler + let scaling = pressScale(rowRef); + return ( { referrerPolicy, routerOptions }}> - treeRow(renderProps)} - /> + + scaling({isPressed: isLinkPressed || isPressed})} + href={href} + focusMode={hasLink ? 'child' : undefined} + allowsArrowNavigation + className={renderProps => treeRow(renderProps)} + /> + ); }; @@ -415,6 +428,7 @@ export const SideNavItemContent = (props: SideNavItemContentProps): ReactNode => let {children} = props; let scale = useScale(); let linkProps = useContext(SideNavItemLinkContext); + let {setLinkPressed} = useContext(SideNavInternalItemContext); let {selectedRoute} = useContext(InternalSideNavContext); return ( @@ -437,6 +451,7 @@ export const SideNavItemContent = (props: SideNavItemContentProps): ReactNode => hasChildItems={hasChildItems} isDisabled={isDisabled} isSelected={isSelected} + setLinkPressed={setLinkPressed} linkProps={linkProps} scale={scale} id={id} @@ -460,13 +475,13 @@ const SideNavItemContentInner = props => { hasChildItems, isDisabled, isSelected, + setLinkPressed, linkProps, scale, id, state, selectedRoute, isHovered, - isPressed, isFocusVisible, isFocusVisibleWithin, children @@ -478,25 +493,24 @@ const SideNavItemContentInner = props => { // keyboard-only isFocusVisibleWithin below, this lets the row focus ring follow the link // specifically and not other focusable children (e.g. an ActionMenu trigger). let [isLinkFocused, setLinkFocused] = useState(false); - let [isLinkPressed, setLinkPressed] = useState(false); - let cellRef = useRef(null); let hasLink = linkProps.href != null && linkProps.href.length > 0; - // oxlint-disable-next-line react-compiler - let itemScaling = pressScale(cellRef)({isPressed: isLinkPressed || isPressed}); - return ( <>
+
+ })}>
{ isHovered: isHovered && hasLink })} /> -