diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx index a1e8e5cd9..20dc6f4bd 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx +++ b/apps/ai-game-creator-shell/src/view/ui-editor/components/Inspector/Transform/TransformEditor.tsx @@ -473,6 +473,9 @@ function DirectionButton({ disabled={disabled} className="grid size-8 place-items-center rounded-lg border border-(--platform-subpanel-border) bg-white/70 text-(--platform-text-soft) transition hover:border-orange-300 hover:bg-orange-50 hover:text-orange-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-orange-200 disabled:cursor-default disabled:opacity-40" onPointerDown={(event) => { + if (event.button !== 0) { + return; + } event.preventDefault(); startRepeating(event.shiftKey ? 10 : 1); }} diff --git a/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx b/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx index f672a9068..9145db48b 100644 --- a/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx +++ b/apps/ai-game-creator-shell/tests/TransformEditor.test.tsx @@ -13,6 +13,12 @@ const transform: Transform = { offset_max: [30, 40], }; +function firePointerDown(element: HTMLElement, button: number) { + const event = new Event('pointerdown', { bubbles: true }); + Object.defineProperty(event, 'button', { value: button }); + fireEvent(element, event); +} + function renderEditor(onChange = vi.fn()) { return { onChange, @@ -84,7 +90,7 @@ describe('TransformEditor corner offset controls', () => { const { onChange } = renderEditor(); const button = screen.getByRole('button', { name: '左上角向右' }); - fireEvent.pointerDown(button, { button: 0 }); + firePointerDown(button, 0); act(() => { vi.advanceTimersByTime(350); }); @@ -93,4 +99,17 @@ describe('TransformEditor corner offset controls', () => { expect(onChange).toHaveBeenCalledTimes(2); }); + + it('does not start repeating for non-primary pointer buttons', () => { + vi.useFakeTimers(); + const { onChange } = renderEditor(); + const button = screen.getByRole('button', { name: '左上角向右' }); + + firePointerDown(button, 2); + act(() => { + vi.advanceTimersByTime(350); + }); + + expect(onChange).not.toHaveBeenCalled(); + }); });