File tree Expand file tree Collapse file tree 2 files changed +31
-1
lines changed
playground/html/__tests__ Expand file tree Collapse file tree 2 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -140,6 +140,7 @@ const codeframeRE = /^(?:>?\s+\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm
140140const { HTMLElement = class { } as typeof globalThis . HTMLElement } = globalThis
141141export class ErrorOverlay extends HTMLElement {
142142 root : ShadowRoot
143+ closeOnEsc : ( e : KeyboardEvent ) => void
143144
144145 constructor ( err : ErrorPayload [ 'err' ] , links = true ) {
145146 super ( )
@@ -171,9 +172,18 @@ export class ErrorOverlay extends HTMLElement {
171172 this . root . querySelector ( '.window' ) ! . addEventListener ( 'click' , ( e ) => {
172173 e . stopPropagation ( )
173174 } )
175+
174176 this . addEventListener ( 'click' , ( ) => {
175177 this . close ( )
176178 } )
179+
180+ this . closeOnEsc = ( e : KeyboardEvent ) => {
181+ if ( e . key === 'Escape' || e . code === 'Escape' ) {
182+ this . close ( )
183+ }
184+ }
185+
186+ document . addEventListener ( 'keydown' , this . closeOnEsc )
177187 }
178188
179189 text ( selector : string , text : string , linkFiles = false ) : void {
@@ -201,9 +211,9 @@ export class ErrorOverlay extends HTMLElement {
201211 }
202212 }
203213 }
204-
205214 close ( ) : void {
206215 this . parentNode ?. removeChild ( this )
216+ document . removeEventListener ( 'keydown' , this . closeOnEsc )
207217 }
208218}
209219
Original file line number Diff line number Diff line change @@ -245,6 +245,26 @@ describe.runIf(isServe)('invalid', () => {
245245 expect ( message ) . toMatch ( / ^ U n a b l e t o p a r s e H T M L / )
246246 } )
247247
248+ test ( 'should close overlay when clicked away' , async ( ) => {
249+ await page . goto ( viteTestUrl + '/invalid.html' )
250+ const errorOverlay = await page . waitForSelector ( 'vite-error-overlay' )
251+ expect ( errorOverlay ) . toBeTruthy ( )
252+
253+ await page . click ( 'html' )
254+ const isVisbleOverlay = await errorOverlay . isVisible ( )
255+ expect ( isVisbleOverlay ) . toBeFalsy ( )
256+ } )
257+
258+ test ( 'should close overlay when escape key is pressed' , async ( ) => {
259+ await page . goto ( viteTestUrl + '/invalid.html' )
260+ const errorOverlay = await page . waitForSelector ( 'vite-error-overlay' )
261+ expect ( errorOverlay ) . toBeTruthy ( )
262+
263+ await page . keyboard . press ( 'Escape' )
264+ const isVisbleOverlay = await errorOverlay . isVisible ( )
265+ expect ( isVisbleOverlay ) . toBeFalsy ( )
266+ } )
267+
248268 test ( 'should reload when fixed' , async ( ) => {
249269 await page . goto ( viteTestUrl + '/invalid.html' )
250270 await editFile ( 'invalid.html' , ( content ) => {
You can’t perform that action at this time.
0 commit comments