11import { VisualBuilder } from ".." ;
22import { extractDetailsFromCslp } from "../../cslp" ;
33import { getAddInstanceButtons } from "../generators/generateAddInstanceButtons" ;
4- import { addFocusOverlay } from "../generators/generateOverlay" ;
4+ import {
5+ addFocusOverlay ,
6+ hideFocusOverlay ,
7+ } from "../generators/generateOverlay" ;
58import { hideHoverOutline } from "../listeners/mouseHover" ;
69import {
710 LIVE_PREVIEW_OUTLINE_WIDTH_IN_PX ,
@@ -82,13 +85,15 @@ export function updateFocussedState({
8285 visualBuilderContainer,
8386 overlayWrapper,
8487 focusedToolbar,
88+ resizeObserver,
8589} : {
8690 editableElement : HTMLElement | null ;
8791 visualBuilderContainer : HTMLDivElement | null ;
8892 overlayWrapper : HTMLDivElement | null ;
8993 focusedToolbar : HTMLDivElement | null ;
94+ resizeObserver : ResizeObserver | null ;
9095} ) : void {
91- const previousSelectedEditableDOM =
96+ let previousSelectedEditableDOM =
9297 VisualBuilder . VisualBuilderGlobalState . value
9398 . previousSelectedEditableDOM ;
9499 if (
@@ -99,6 +104,28 @@ export function updateFocussedState({
99104 ) {
100105 return ;
101106 }
107+
108+ const previousSelectedElementCslp =
109+ previousSelectedEditableDOM ?. getAttribute ( "data-cslp" ) ;
110+ const newPreviousSelectedElement = document . querySelector (
111+ `[data-cslp="${ previousSelectedElementCslp } "]`
112+ ) ;
113+ if ( ! newPreviousSelectedElement && resizeObserver ) {
114+ hideFocusOverlay ( {
115+ visualBuilderOverlayWrapper : overlayWrapper ,
116+ focusedToolbar,
117+ visualBuilderContainer,
118+ resizeObserver,
119+ noTrigger : true ,
120+ } ) ;
121+ return ;
122+ }
123+ if ( newPreviousSelectedElement !== previousSelectedEditableDOM ) {
124+ previousSelectedEditableDOM = newPreviousSelectedElement as HTMLElement ;
125+ VisualBuilder . VisualBuilderGlobalState . value . previousSelectedEditableDOM =
126+ previousSelectedEditableDOM ;
127+ }
128+
102129 hideHoverOutline ( visualBuilderContainer ) ;
103130 addFocusOverlay ( previousSelectedEditableDOM , overlayWrapper ) ;
104131
@@ -190,16 +217,37 @@ export function updateFocussedState({
190217export function updateFocussedStateOnMutation (
191218 focusOverlayWrapper : HTMLDivElement | null ,
192219 focusedToolbar : HTMLDivElement | null ,
193- visualBuilderContainer : HTMLDivElement | null
220+ visualBuilderContainer : HTMLDivElement | null ,
221+ resizeObserver : ResizeObserver | null
194222) {
195223 if ( ! focusOverlayWrapper ) return ;
196224
197- const selectedElement =
225+ let selectedElement =
198226 VisualBuilder . VisualBuilderGlobalState . value
199227 . previousSelectedEditableDOM ;
200-
201228 if ( ! selectedElement ) return ;
202229
230+ const selectedElementCslp = selectedElement ?. getAttribute ( "data-cslp" ) ;
231+ const newSelectedElement = document . querySelector (
232+ `[data-cslp="${ selectedElementCslp } "]`
233+ ) ;
234+ if ( ! newSelectedElement && resizeObserver ) {
235+ hideFocusOverlay ( {
236+ visualBuilderOverlayWrapper : focusOverlayWrapper ,
237+ focusedToolbar,
238+ visualBuilderContainer,
239+ resizeObserver,
240+ noTrigger : true ,
241+ } ) ;
242+ return ;
243+ }
244+
245+ if ( newSelectedElement !== selectedElement ) {
246+ selectedElement = newSelectedElement as HTMLElement ;
247+ VisualBuilder . VisualBuilderGlobalState . value . previousSelectedEditableDOM =
248+ selectedElement ;
249+ }
250+
203251 const selectedElementDimension = selectedElement . getBoundingClientRect ( ) ;
204252
205253 /**
0 commit comments