@@ -8,6 +8,40 @@ import { isOverlayCycleReverseModifierActive } from '/samples/phase-17/shared/ov
88
99const overlayIndexMemoryStore = new Map ( ) ;
1010const overlayPersistenceKeys = new Set ( ) ;
11+ let overlayDiagnosticsEnabled = false ;
12+
13+ function getOverlayStackSnapshot ( controller ) {
14+ if ( ! controller || ! Array . isArray ( controller . overlays ) ) {
15+ return [ ] ;
16+ }
17+ return controller . overlays . map ( ( overlay ) => ( {
18+ id : overlay . id ,
19+ label : overlay . label ,
20+ } ) ) ;
21+ }
22+
23+ function getOverlayDiagnosticsSnapshot ( controller ) {
24+ const stack = getOverlayStackSnapshot ( controller ) ;
25+ const activeIndex = normalizeActiveIndex ( controller ) ;
26+ const activeEntry = stack [ activeIndex ] || null ;
27+ return {
28+ activeIndex,
29+ activeId : activeEntry ?. id || '' ,
30+ stack,
31+ cycleKey : String ( controller ?. cycleKey || '' ) ,
32+ persistenceKey : String ( controller ?. persistenceKey || '' ) ,
33+ } ;
34+ }
35+
36+ function logOverlayDiagnostics ( eventName , controller ) {
37+ if ( ! overlayDiagnosticsEnabled ) {
38+ return ;
39+ }
40+ if ( typeof console === 'undefined' || typeof console . debug !== 'function' ) {
41+ return ;
42+ }
43+ console . debug ( `[overlay-diagnostics] ${ eventName } ` , getOverlayDiagnosticsSnapshot ( controller ) ) ;
44+ }
1145
1246function normalizeOverlayEntry ( entry ) {
1347 const id = String ( entry ?. id ?? '' ) . trim ( ) ;
@@ -180,6 +214,7 @@ export function setTabDebugOverlayMap(controller, { overlays = [], initialOverla
180214 applyPersistedActiveIndex ( controller ) ;
181215 normalizeActiveIndex ( controller ) ;
182216 controller . cycleLatch = false ;
217+ logOverlayDiagnostics ( 'set-map' , controller ) ;
183218 return true ;
184219}
185220
@@ -190,6 +225,7 @@ export function setTabDebugOverlayCycleKey(controller, cycleKey) {
190225 const normalized = String ( cycleKey || '' ) . trim ( ) ;
191226 controller . cycleKey = normalized || 'Tab' ;
192227 controller . cycleLatch = false ;
228+ logOverlayDiagnostics ( 'set-cycle-key' , controller ) ;
193229 return true ;
194230}
195231
@@ -206,6 +242,7 @@ export function setTabDebugOverlayPersistenceKey(controller, persistenceKey) {
206242 overlayPersistenceKeys . add ( controller . persistenceKey ) ;
207243 applyPersistedActiveIndex ( controller ) ;
208244 normalizeActiveIndex ( controller ) ;
245+ logOverlayDiagnostics ( 'set-persistence-key' , controller ) ;
209246 return true ;
210247}
211248
@@ -241,6 +278,7 @@ export function setTabDebugOverlayActive(controller, overlayId) {
241278 controller . activeIndex = nextIndex ;
242279 normalizeActiveIndex ( controller ) ;
243280 persistActiveIndex ( controller ) ;
281+ logOverlayDiagnostics ( 'set-active' , controller ) ;
244282 return true ;
245283}
246284
@@ -269,6 +307,7 @@ export function stepTabDebugOverlayController(controller, input) {
269307 const count = controller . overlays . length ;
270308 controller . activeIndex = ( controller . activeIndex + delta + count ) % count ;
271309 persistActiveIndex ( controller ) ;
310+ logOverlayDiagnostics ( 'step-cycle' , controller ) ;
272311}
273312
274313export function isTabDebugOverlayActive ( controller , overlayId ) {
@@ -297,3 +336,12 @@ export function resetTabDebugOverlayPersistenceForTests() {
297336 overlayPersistenceKeys . clear ( ) ;
298337 overlayIndexMemoryStore . clear ( ) ;
299338}
339+
340+ export function setTabDebugOverlayDiagnosticsEnabled ( enabled ) {
341+ overlayDiagnosticsEnabled = enabled === true ;
342+ return overlayDiagnosticsEnabled ;
343+ }
344+
345+ export function isTabDebugOverlayDiagnosticsEnabled ( ) {
346+ return overlayDiagnosticsEnabled ;
347+ }
0 commit comments