@@ -199,9 +199,6 @@ class Popover extends Popup {
199199 @property ( )
200200 actualPlacement : `${PopoverActualPlacement } ` = "Right" ;
201201
202- @property ( )
203- _resizeHandlePlacement : `${ResizeHandlePlacement } ` = "BottomRight" ;
204-
205202 @property ( { type : Number , noAttribute : true } )
206203 _maxHeight ?: number ;
207204
@@ -246,6 +243,8 @@ class Popover extends Popup {
246243 _cachedMinHeight ?: number ;
247244 _draggedOrResized = false ;
248245
246+ _resizeHandlePlacement ?: `${ResizeHandlePlacement } `;
247+
249248 static get VIEWPORT_MARGIN ( ) {
250249 return 10 ; // px
251250 }
@@ -888,7 +887,22 @@ class Popover extends Popup {
888887 const allClasses = super . classes ;
889888 allClasses . root [ "ui5-popover-root" ] = true ;
890889
891- allClasses . root [ "ui5-popover-resize-handle-bottom-right" ] = this . resizable ;
890+ if ( this . resizable ) {
891+ switch ( this . _getResizeHandlePlacement ( ) ) {
892+ case ResizeHandlePlacement . BottomLeft :
893+ allClasses . root [ "ui5-popover-resize-handle-bottom-left" ] = true ;
894+ break ;
895+ case ResizeHandlePlacement . BottomRight :
896+ allClasses . root [ "ui5-popover-resize-handle-bottom-right" ] = true ;
897+ break ;
898+ case ResizeHandlePlacement . TopLeft :
899+ allClasses . root [ "ui5-popover-resize-handle-top-left" ] = true ;
900+ break ;
901+ case ResizeHandlePlacement . TopRight :
902+ allClasses . root [ "ui5-popover-resize-handle-top-right" ] = true ;
903+ break ;
904+ }
905+ }
892906
893907 return allClasses ;
894908 }
@@ -929,6 +943,57 @@ class Popover extends Popup {
929943 return this . resizable && this . onDesktop ;
930944 }
931945
946+ _getResizeHandlePlacement ( ) {
947+ if ( this . _resizeHandlePlacement ) {
948+ return this . _resizeHandlePlacement ;
949+ }
950+
951+ const offset = 2 ;
952+
953+ const opener = this . getOpenerHTMLElement ( this . opener ) ;
954+ const openerRect = opener ! . getBoundingClientRect ( ) ;
955+ const popoverWrapperRect = this . getBoundingClientRect ( ) ;
956+
957+ let openerCX = Math . floor ( openerRect . x + openerRect . width / 2 ) ;
958+ const openerCY = Math . floor ( openerRect . y + openerRect . height / 2 ) ;
959+
960+ let popoverCX = Math . floor ( popoverWrapperRect . x + popoverWrapperRect . width / 2 ) ;
961+ const popoverCY = Math . floor ( popoverWrapperRect . y + popoverWrapperRect . height / 2 ) ;
962+
963+ if ( this . isRtl ) {
964+ openerCX = - openerCX ;
965+ popoverCX = - popoverCX ;
966+ }
967+
968+ switch ( this . getActualPlacement ( openerRect ) ) {
969+ case PopoverActualPlacement . Left :
970+ if ( popoverCY > openerCY + offset ) {
971+ return ResizeHandlePlacement . BottomLeft ;
972+ }
973+
974+ return ResizeHandlePlacement . TopLeft ;
975+ case PopoverActualPlacement . Right :
976+ if ( popoverCY + offset < openerCY ) {
977+ return ResizeHandlePlacement . TopRight ;
978+ }
979+
980+ return ResizeHandlePlacement . BottomRight ;
981+ case PopoverActualPlacement . Bottom :
982+ if ( popoverCX + offset < openerCX ) {
983+ return ResizeHandlePlacement . BottomLeft ;
984+ }
985+
986+ return ResizeHandlePlacement . BottomRight ;
987+ case PopoverActualPlacement . Top :
988+ default :
989+ if ( popoverCX + offset < openerCX ) {
990+ return ResizeHandlePlacement . TopLeft ;
991+ }
992+
993+ return ResizeHandlePlacement . TopRight ;
994+ }
995+ }
996+
932997 _onResizeMouseDown ( e : MouseEvent ) {
933998 if ( ! this . resizable ) {
934999 return ;
@@ -940,6 +1005,7 @@ class Popover extends Popup {
9401005 top,
9411006 left,
9421007 } = this . getBoundingClientRect ( ) ;
1008+
9431009 const {
9441010 width,
9451011 height,
@@ -955,6 +1021,8 @@ class Popover extends Popup {
9551021 this . _minWidth = Number . parseFloat ( minWidth ) ;
9561022 // this._cachedMinHeight = this._minHeight;
9571023
1024+ this . _resizeHandlePlacement = this . _getResizeHandlePlacement ( ) ;
1025+
9581026 Object . assign ( this . style , {
9591027 top : `${ top } px` ,
9601028 left : `${ left } px` ,
@@ -1021,13 +1089,9 @@ class Popover extends Popup {
10211089 delete this . _minWidth ;
10221090 delete this . _cachedMinHeight ;
10231091
1024- this . _detachMouseResizeHandlers ( ) ;
1025- }
1092+ delete this . _resizeHandlePlacement ;
10261093
1027- _handleDragStart ( e : DragEvent ) {
1028- if ( this . draggable ) {
1029- e . preventDefault ( ) ;
1030- }
1094+ this . _detachMouseResizeHandlers ( ) ;
10311095 }
10321096
10331097 _attachMouseResizeHandlers ( ) {
0 commit comments