@@ -35,8 +35,10 @@ export class SessionsWalkthroughOverlay extends Disposable {
3535 private readonly contentContainer : HTMLElement ;
3636 private readonly footerContainer : HTMLElement ;
3737 private readonly disclaimerElement : HTMLElement ;
38+ private readonly disclaimerLinks : readonly HTMLAnchorElement [ ] ;
3839 private readonly stepDisposables = this . _register ( new MutableDisposable < DisposableStore > ( ) ) ;
3940 private readonly previouslyFocusedElement : HTMLElement | undefined ;
41+ private currentFocusableElements : readonly HTMLElement [ ] = [ ] ;
4042 private _resolveOutcome ! : ( outcome : WalkthroughOutcome ) => void ;
4143 private _outcomeResolved = false ;
4244
@@ -88,7 +90,9 @@ export class SessionsWalkthroughOverlay extends Disposable {
8890
8991 // Fixed footer
9092 this . footerContainer = append ( this . card , $ ( '.sessions-walkthrough-footer' ) ) ;
91- this . disclaimerElement = this . _createDisclaimer ( ) ;
93+ const disclaimer = this . _createDisclaimer ( ) ;
94+ this . disclaimerElement = disclaimer . element ;
95+ this . disclaimerLinks = disclaimer . links ;
9296
9397 this . _renderSignIn ( ) ;
9498 }
@@ -147,6 +151,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
147151 } , 0 , stepDisposables ) ;
148152
149153 const providerButtons = [ githubBtn , googleBtn , appleBtn ] ;
154+ this . currentFocusableElements = [ ...providerButtons , ...this . disclaimerLinks ] ;
150155 const providerStrategies = [
151156 ChatSetupStrategy . SetupWithoutEnterpriseProvider ,
152157 ChatSetupStrategy . SetupWithGoogleProvider ,
@@ -180,6 +185,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
180185 for ( const btn of providerButtons ) {
181186 btn . disabled = true ;
182187 }
188+ this . currentFocusableElements = [ ] ;
183189
184190 error . style . display = 'none' ;
185191
@@ -315,6 +321,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
315321
316322 const getStartedBtn = stepDisposables . add ( new Button ( actions , { ...defaultButtonStyles } ) ) ;
317323 getStartedBtn . label = localize ( 'walkthrough.getStarted' , "Get Started" ) ;
324+ this . currentFocusableElements = [ getStartedBtn . element ] ;
318325 getStartedBtn . focus ( ) ;
319326 stepDisposables . add ( getStartedBtn . onDidClick ( ( ) => {
320327 this . _finish ( 'completed' ) ;
@@ -383,15 +390,14 @@ export class SessionsWalkthroughOverlay extends Disposable {
383390 }
384391
385392 private _getFocusableElements ( ) : HTMLElement [ ] {
386- return Array . from ( this . overlay . querySelectorAll < HTMLElement > ( 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])' ) )
387- . filter ( element => element . getClientRects ( ) . length > 0 ) ;
393+ return this . currentFocusableElements . filter ( element => element . isConnected ) ;
388394 }
389395
390396 private _shouldAbortUpdate ( ...elements : HTMLElement [ ] ) : boolean {
391397 return ! this . overlay . isConnected || elements . some ( element => ! element . isConnected ) ;
392398 }
393399
394- private _createDisclaimer ( ) : HTMLElement {
400+ private _createDisclaimer ( ) : { element : HTMLElement ; links : readonly HTMLAnchorElement [ ] } {
395401 const defaultChatAgent = this . productService . defaultChatAgent ;
396402 const disclaimer = append ( this . overlay , $ ( 'p.sessions-walkthrough-disclaimer.hidden' ) ) ;
397403 const termsLink = this . _appendDisclaimerLink ( defaultChatAgent ?. termsStatementUrl ?? '' , localize ( 'walkthrough.disclaimer.terms' , "Terms" ) ) ;
@@ -409,7 +415,10 @@ export class SessionsWalkthroughOverlay extends Disposable {
409415 disclaimer . appendChild ( settingsLink ) ;
410416 append ( disclaimer , document . createTextNode ( localize ( 'walkthrough.disclaimer.end' , " anytime." ) ) ) ;
411417
412- return disclaimer ;
418+ return {
419+ element : disclaimer ,
420+ links : [ termsLink , privacyLink , publicCodeLink , settingsLink ]
421+ } ;
413422 }
414423
415424 private _appendDisclaimerLink ( href : string , label : string ) : HTMLAnchorElement {
0 commit comments