限制方向键长按仅响应主指针

忽略非主指针按钮的 pointerdown,避免右键触发连续调整。

补充非主键长按不产生调整的回归测试。
This commit is contained in:
2026-09-03 14:31:04 +08:00
parent 32c6e4ced8
commit 415240faa7
2 changed files with 23 additions and 1 deletions
@@ -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);
}}
@@ -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();
});
});