@@ -190,12 +190,61 @@ function persistVisualsLegacyFlag(enabled) {
190190 }
191191}
192192
193+ function ensureVisualsFallbackPanel ( ) {
194+ if ( visualsState . fallback && visualsState . fallbackImg && visualsState . fallbackMessage ) {
195+ if ( visualsState . fallback . parentElement || ! visualsState . mainPanel ) {
196+ return ;
197+ }
198+ visualsState . mainPanel . append ( visualsState . fallback ) ;
199+ return ;
200+ }
201+
202+ if ( ! visualsState . mainPanel ) {
203+ return ;
204+ }
205+
206+ const fallback = document . createElement ( 'div' ) ;
207+ fallback . className = 'visuals-fallback-panel' ;
208+ fallback . hidden = true ;
209+
210+ const fallbackImg = document . createElement ( 'img' ) ;
211+ fallbackImg . className = 'visuals-fallback-panel__image' ;
212+ fallbackImg . alt = 'Legacy visuals preview unavailable' ;
213+ fallbackImg . hidden = true ;
214+
215+ const fallbackMessage = document . createElement ( 'p' ) ;
216+ fallbackMessage . className = 'visuals-fallback-panel__message' ;
217+ fallbackMessage . textContent = 'Legacy visuals preview unavailable.' ;
218+ fallbackMessage . hidden = true ;
219+
220+ fallback . append ( fallbackImg , fallbackMessage ) ;
221+ visualsState . mainPanel . append ( fallback ) ;
222+
223+ visualsState . fallback = fallback ;
224+ visualsState . fallbackImg = fallbackImg ;
225+ visualsState . fallbackMessage = fallbackMessage ;
226+ }
227+
228+ function removeFallbackPanel ( ) {
229+ if ( visualsState . fallback && visualsState . fallback . parentElement ) {
230+ visualsState . fallback . parentElement . removeChild ( visualsState . fallback ) ;
231+ }
232+ }
233+
193234function syncVisualsVisibility ( ) {
194235 if ( visualsState . mount ) {
195236 visualsState . mount . hidden = visualsState . useLegacy ;
196237 }
197- if ( visualsState . fallback ) {
198- visualsState . fallback . hidden = ! visualsState . useLegacy ;
238+ if ( visualsState . useLegacy ) {
239+ ensureVisualsFallbackPanel ( ) ;
240+ if ( visualsState . fallback ) {
241+ visualsState . fallback . hidden = false ;
242+ }
243+ } else {
244+ if ( visualsState . fallback ) {
245+ visualsState . fallback . hidden = true ;
246+ }
247+ removeFallbackPanel ( ) ;
199248 }
200249}
201250
@@ -275,6 +324,7 @@ function updateVisuals(payload) {
275324 }
276325
277326 if ( visualsState . useLegacy ) {
327+ ensureVisualsFallbackPanel ( ) ;
278328 resetVisualsInstance ( ) ;
279329 const src = resolveLegacyPng ( lastVisualPayload ) ;
280330 if ( visualsState . fallbackImg ) {
@@ -433,22 +483,6 @@ function initVisualsMount() {
433483 mainPanel . append ( mount ) ;
434484 visualsState . mount = mount ;
435485
436- const fallback = document . createElement ( 'div' ) ;
437- fallback . className = 'visuals-fallback-panel' ;
438- const fallbackImg = document . createElement ( 'img' ) ;
439- fallbackImg . className = 'visuals-fallback-panel__image' ;
440- fallbackImg . alt = 'Legacy visuals preview unavailable' ;
441- fallbackImg . hidden = true ;
442- const fallbackMessage = document . createElement ( 'p' ) ;
443- fallbackMessage . className = 'visuals-fallback-panel__message' ;
444- fallbackMessage . textContent = 'Legacy visuals preview unavailable.' ;
445- fallbackMessage . hidden = true ;
446- fallback . append ( fallbackImg , fallbackMessage ) ;
447- mainPanel . append ( fallback ) ;
448- visualsState . fallback = fallback ;
449- visualsState . fallbackImg = fallbackImg ;
450- visualsState . fallbackMessage = fallbackMessage ;
451-
452486 const overlay = document . createElement ( 'div' ) ;
453487 overlay . className = 'visuals-status-overlay' ;
454488 overlay . hidden = true ;
0 commit comments