@@ -23,6 +23,10 @@ import { URI } from '../../../../base/common/uri.js';
2323
2424export type WalkthroughOutcome = 'completed' | 'dismissed' ;
2525
26+ const fadeDuration = 200 ;
27+ const resetMessageDuration = 2000 ;
28+ const dismissDuration = 250 ;
29+
2630/**
2731 * Sign-in onboarding overlay:
2832 * - Sign in via GitHub / Google / Apple
@@ -192,7 +196,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
192196 // Fade the content
193197 this . disclaimerElement . classList . add ( 'hidden' ) ;
194198 this . contentContainer . classList . add ( 'sessions-walkthrough-fade-out' ) ;
195- await new Promise ( resolve => setTimeout ( resolve , 200 ) ) ;
199+ await this . _wait ( fadeDuration ) ;
196200 if ( this . _shouldAbortUpdate ( titleEl , subtitleEl , providerRow ) ) {
197201 return ;
198202 }
@@ -245,14 +249,14 @@ export class SessionsWalkthroughOverlay extends Disposable {
245249 // Show cancellation feedback, then reset to sign-in
246250 error . textContent = localize ( 'walkthrough.canceledError' , "Sign-in was canceled. Please try again." ) ;
247251 error . style . display = '' ;
248- await new Promise ( resolve => setTimeout ( resolve , 2000 ) ) ;
252+ await this . _wait ( resetMessageDuration ) ;
249253 if ( this . _shouldAbortUpdate ( error ) ) {
250254 return ;
251255 }
252256 error . style . display = 'none' ;
253257
254258 this . contentContainer . classList . add ( 'sessions-walkthrough-fade-out' ) ;
255- await new Promise ( resolve => setTimeout ( resolve , 200 ) ) ;
259+ await this . _wait ( fadeDuration ) ;
256260 if ( ! this . overlay . isConnected ) {
257261 return ;
258262 }
@@ -265,14 +269,14 @@ export class SessionsWalkthroughOverlay extends Disposable {
265269 // Show error feedback, then reset to sign-in
266270 error . textContent = localize ( 'walkthrough.signInError' , "Something went wrong. Please try again." ) ;
267271 error . style . display = '' ;
268- await new Promise ( resolve => setTimeout ( resolve , 2000 ) ) ;
272+ await this . _wait ( resetMessageDuration ) ;
269273 if ( this . _shouldAbortUpdate ( error ) ) {
270274 return ;
271275 }
272276 error . style . display = 'none' ;
273277
274278 this . contentContainer . classList . add ( 'sessions-walkthrough-fade-out' ) ;
275- await new Promise ( resolve => setTimeout ( resolve , 200 ) ) ;
279+ await this . _wait ( fadeDuration ) ;
276280 if ( ! this . overlay . isConnected ) {
277281 return ;
278282 }
@@ -294,7 +298,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
294298
295299 // Fade out current content
296300 this . contentContainer . classList . add ( 'sessions-walkthrough-fade-out' ) ;
297- await new Promise ( resolve => setTimeout ( resolve , 200 ) ) ;
301+ await this . _wait ( fadeDuration ) ;
298302 if ( ! this . overlay . isConnected ) {
299303 return ;
300304 }
@@ -336,7 +340,7 @@ export class SessionsWalkthroughOverlay extends Disposable {
336340
337341 private _finish ( outcome : WalkthroughOutcome ) : void {
338342 this . overlay . classList . add ( 'sessions-walkthrough-dismissed' ) ;
339- this . _register ( disposableTimeout ( ( ) => this . dispose ( ) , 250 ) ) ;
343+ this . _register ( disposableTimeout ( ( ) => this . dispose ( ) , dismissDuration ) ) ;
340344 if ( ! this . _outcomeResolved ) {
341345 this . _outcomeResolved = true ;
342346 this . _resolveOutcome ( outcome ) ;
@@ -393,6 +397,25 @@ export class SessionsWalkthroughOverlay extends Disposable {
393397 return this . currentFocusableElements . filter ( element => element . isConnected ) ;
394398 }
395399
400+ private _wait ( duration : number ) : Promise < void > {
401+ return new Promise ( resolve => {
402+ let didResolve = false ;
403+ const timeoutDisposables = this . stepDisposables . value ?. add ( new DisposableStore ( ) ) ?? this . _register ( new DisposableStore ( ) ) ;
404+ const complete = ( ) => {
405+ if ( didResolve ) {
406+ return ;
407+ }
408+
409+ didResolve = true ;
410+ timeoutDisposables . dispose ( ) ;
411+ resolve ( ) ;
412+ } ;
413+
414+ timeoutDisposables . add ( disposableTimeout ( complete , duration ) ) ;
415+ timeoutDisposables . add ( toDisposable ( complete ) ) ;
416+ } ) ;
417+ }
418+
396419 private _shouldAbortUpdate ( ...elements : HTMLElement [ ] ) : boolean {
397420 return ! this . overlay . isConnected || elements . some ( element => ! element . isConnected ) ;
398421 }
0 commit comments