fix(canvas): 提示词优化器 - 隔离多实例浮层定位并修复路由预加载测试

This commit is contained in:
ddCat
2026-08-25 14:33:34 +08:00
parent 5b7f173102
commit 0cbe24a19f
4 changed files with 23 additions and 7 deletions

View File

@@ -101,6 +101,7 @@ export function CanvasPromptOptimizerDrawer({ open, children, prompt, generation
const { message } = App.useApp();
const abortRef = useRef<AbortController | null>(null);
const chatRef = useRef<HTMLDivElement | null>(null);
const contentRef = useRef<HTMLDivElement | null>(null);
const [mode, setMode] = useState<PromptOptimizationMode>("expand");
const [activeOptimizerModel, setActiveOptimizerModel] = useState("");
const [draftPrompt, setDraftPrompt] = useState(prompt);
@@ -176,7 +177,7 @@ export function CanvasPromptOptimizerDrawer({ open, children, prompt, generation
}, [open]);
const syncPanelPositionToViewport = useCallback(() => {
const popoverRoot = document.querySelector<HTMLElement>(".canvas-prompt-optimizer-popover");
const popoverRoot = contentRef.current?.closest<HTMLElement>(".canvas-prompt-optimizer-popover");
if (!popoverRoot) return;
const rect = popoverRoot.getBoundingClientRect();
@@ -381,7 +382,7 @@ export function CanvasPromptOptimizerDrawer({ open, children, prompt, generation
};
const nudgePanel = (deltaX: number, deltaY: number) => {
const popoverRoot = document.querySelector<HTMLElement>(".canvas-prompt-optimizer-popover");
const popoverRoot = contentRef.current?.closest<HTMLElement>(".canvas-prompt-optimizer-popover");
if (!popoverRoot) {
setPanelOffset((current) => ({ x: current.x + deltaX, y: current.y + deltaY }));
return;
@@ -622,7 +623,7 @@ export function CanvasPromptOptimizerDrawer({ open, children, prompt, generation
} as CSSProperties;
const content = (
<div className={`canvas-prompt-optimizer-panel${panelInteracting ? " is-interacting" : ""}`} data-canvas-no-zoom>
<div ref={contentRef} className={`canvas-prompt-optimizer-panel${panelInteracting ? " is-interacting" : ""}`} data-canvas-no-zoom>
<div
className="canvas-prompt-optimizer-header"
onPointerDown={(event) => {