@@ -10,7 +10,7 @@ import {
1010 useSyncRef ,
1111} from '@ui5/webcomponents-react-base' ;
1212import { clsx } from 'clsx' ;
13- import type { CSSProperties , MouseEventHandler , ReactElement , UIEventHandler } from 'react' ;
13+ import type { CSSProperties , FocusEventHandler , MouseEventHandler , ReactElement , UIEventHandler } from 'react' ;
1414import { cloneElement , forwardRef , isValidElement , useCallback , useEffect , useMemo , useRef , useState } from 'react' ;
1515import { ObjectPageMode } from '../../enums/ObjectPageMode.js' ;
1616import { safeGetChildrenArray } from '../../internal/safeGetChildrenArray.js' ;
@@ -626,6 +626,25 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
626626 }
627627 } , [ isMounted , children , mode ] ) ;
628628
629+ const handleContentBlur : FocusEventHandler < HTMLDivElement > = ( e ) => {
630+ const opNode = objectPageRef . current ;
631+ if ( ! opNode ) return ;
632+
633+ if ( e . relatedTarget && ! e . currentTarget . contains ( e . relatedTarget as Node ) ) {
634+ opNode . style . scrollPaddingBlock = '0px' ;
635+ // Fallback: Some (ui5-table) ui5wc components don't implement `relatedTarget` as expected.
636+ } else if ( ! e . relatedTarget ) {
637+ const currentTarget = e . currentTarget ;
638+ opNode . style . scrollPaddingBlock = '0px' ;
639+ requestAnimationFrame ( ( ) => {
640+ if ( currentTarget . contains ( document . activeElement ) ) {
641+ opNode . style . scrollPaddingBlock = scrollPaddingBlock ;
642+ document . activeElement . scrollIntoView ( { block : 'nearest' } ) ;
643+ }
644+ } ) ;
645+ }
646+ } ;
647+
629648 return (
630649 < ObjectPageContext . Provider value = { mode } >
631650 < div
@@ -784,24 +803,7 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
784803 opNode . style . scrollPaddingBlock = scrollPaddingBlock ;
785804 }
786805 } }
787- onBlur = { ( e ) => {
788- const opNode = objectPageRef . current ;
789- if ( ! opNode ) return ;
790-
791- if ( e . relatedTarget && ! e . currentTarget . contains ( e . relatedTarget as Node ) ) {
792- opNode . style . scrollPaddingBlock = '0px' ;
793- // Fallback: Some (ui5-table) ui5wc components don't implement `relatedTarget` as expected.
794- } else if ( ! e . relatedTarget ) {
795- const currentTarget = e . currentTarget ;
796- opNode . style . scrollPaddingBlock = '0px' ;
797- requestAnimationFrame ( ( ) => {
798- if ( currentTarget . contains ( document . activeElement ) ) {
799- opNode . style . scrollPaddingBlock = scrollPaddingBlock ;
800- document . activeElement . scrollIntoView ( { block : 'nearest' } ) ;
801- }
802- } ) ;
803- }
804- } }
806+ onBlur = { handleContentBlur }
805807 >
806808 < div
807809 style = { {
0 commit comments