Skip to content

Commit 3bbaa23

Browse files
committed
fix(webui): Migrate preview popup to Portal [copilot]
1 parent bc89ede commit 3bbaa23

2 files changed

Lines changed: 21 additions & 14 deletions

File tree

packages/webui/src/client/ui/PreviewPopUp/PreviewPopUp.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ export const PreviewPopUp = React.forwardRef<
107107
return () => {
108108
anchorRef.current = null
109109
anchorYRef.current = 0
110-
virtualElement.current.getBoundingClientRect = generateGetBoundingClientRect(0, 0)
110+
// Clear the virtualElement completely to break closure references
111+
if (virtualElement.current) {
112+
virtualElement.current.getBoundingClientRect = generateGetBoundingClientRect(0, 0)
113+
virtualElement.current = null as any
114+
}
111115
updateRef.current = null
112116
}
113117
}, [])

packages/webui/src/client/ui/PreviewPopUp/PreviewPopUpContext.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { useCallback, useEffect, useRef, useState } from 'react'
22
import { PreviewPopUp, type PreviewPopUpHandle } from './PreviewPopUp.js'
3+
import Escape from '../../lib/Escape.js'
34
import type { Padding, Placement } from '@popperjs/core'
45
import { PreviewPopUpContent } from './PreviewPopUpContent.js'
56
import {
@@ -510,19 +511,21 @@ export function PreviewPopUpContextProvider({ children }: React.PropsWithChildre
510511
<PreviewPopUpContext.Provider value={context}>
511512
{children}
512513
{previewSession && (
513-
<PreviewPopUp
514-
key={previewSessionKey}
515-
ref={previewRef}
516-
anchor={previewSession.anchor}
517-
padding={previewSession.padding}
518-
size={previewSession.size}
519-
placement={previewSession.placement}
520-
initialOffsetX={previewSession.initialOffsetX}
521-
trackMouse={previewSession.trackMouse}
522-
>
523-
{previewContent &&
524-
previewContent.map((content, i) => <PreviewPopUpContent key={i} time={t} content={content} />)}
525-
</PreviewPopUp>
514+
<Escape to="viewport">
515+
<PreviewPopUp
516+
key={previewSessionKey}
517+
ref={previewRef}
518+
anchor={previewSession.anchor}
519+
padding={previewSession.padding}
520+
size={previewSession.size}
521+
placement={previewSession.placement}
522+
initialOffsetX={previewSession.initialOffsetX}
523+
trackMouse={previewSession.trackMouse}
524+
>
525+
{previewContent &&
526+
previewContent.map((content, i) => <PreviewPopUpContent key={i} time={t} content={content} />)}
527+
</PreviewPopUp>
528+
</Escape>
526529
)}
527530
</PreviewPopUpContext.Provider>
528531
)

0 commit comments

Comments
 (0)