feat(loras): add drag event callbacks and preview suppression

- Add onDragStart and onDragEnd callbacks to initDrag function
- Implement preview suppression during and briefly after strength dragging
- Clear preview timer on drag start/end to prevent tooltip conflicts
- Update tests to verify drag callbacks are properly triggered

This prevents tooltip previews from interfering with drag interactions and provides better control over drag lifecycle events.
This commit is contained in:
Will Miao
2025-11-03 12:18:59 +08:00
parent 707d0cb8a4
commit 30f9e3e2ec
3 changed files with 83 additions and 10 deletions

View File

@@ -82,6 +82,8 @@ describe('LoRA widget drag interactions', () => {
const module = await import(EVENTS_MODULE);
const renderSpy = vi.fn();
const previewSpy = { hide: vi.fn() };
const onDragStart = vi.fn();
const onDragEnd = vi.fn();
const dragEl = document.createElement('div');
dragEl.className = 'lm-lora-entry';
@@ -92,10 +94,14 @@ describe('LoRA widget drag interactions', () => {
callback: vi.fn(),
};
module.initDrag(dragEl, 'Test', widget, false, previewSpy, renderSpy);
module.initDrag(dragEl, 'Test', widget, false, previewSpy, renderSpy, {
onDragStart,
onDragEnd,
});
dragEl.dispatchEvent(new MouseEvent('mousedown', { clientX: 50, bubbles: true }));
expect(document.body.classList.contains('lm-lora-strength-dragging')).toBe(true);
expect(onDragStart).toHaveBeenCalledTimes(1);
document.dispatchEvent(new MouseEvent('mousemove', { clientX: 70, bubbles: true }));
expect(renderSpy).toHaveBeenCalledWith(widget.value, widget);
@@ -104,6 +110,7 @@ describe('LoRA widget drag interactions', () => {
document.dispatchEvent(new MouseEvent('mouseup'));
expect(document.body.classList.contains('lm-lora-strength-dragging')).toBe(false);
expect(onDragEnd).toHaveBeenCalledTimes(1);
});
it('deletes the selected LoRA when backspace is pressed outside of strength inputs', async () => {