diff --git a/src/renderer/core/canvas/useCanvasInteractions.ts b/src/renderer/core/canvas/useCanvasInteractions.ts index a32d5e864..46ce4ae46 100644 --- a/src/renderer/core/canvas/useCanvasInteractions.ts +++ b/src/renderer/core/canvas/useCanvasInteractions.ts @@ -30,6 +30,15 @@ export function useCanvasInteractions() { * when appropriate (e.g., Ctrl+wheel for zoom in standard mode) */ const handleWheel = (event: WheelEvent) => { + // Check if the wheel event is from an element that wants to capture wheel events + const target = event.target as HTMLElement + const captureElement = target?.closest('[data-capture-wheel="true"]') + + if (captureElement) { + // Element wants to capture wheel events, don't forward to canvas + return + } + // In standard mode, Ctrl+wheel should go to canvas for zoom if (isStandardNavMode.value && (event.ctrlKey || event.metaKey)) { forwardEventToCanvas(event) @@ -72,6 +81,15 @@ export function useCanvasInteractions() { const forwardEventToCanvas = ( event: WheelEvent | PointerEvent | MouseEvent ) => { + // Check if the wheel event is from an element that wants to capture wheel events + const target = event.target as HTMLElement + const captureElement = target?.closest('[data-capture-wheel="true"]') + + if (captureElement) { + // Element wants to capture wheel events, don't forward to canvas + return + } + const canvasEl = app.canvas?.canvas if (!canvasEl) return event.preventDefault() diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue index 7f3995f9e..3ffe47102 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetMarkdown.vue @@ -23,6 +23,7 @@ onBlur: handleBlur } }" + data-capture-wheel="true" @update:model-value="onChange" @click.stop @keydown.stop diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue index 4ac007669..4242c13ae 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue @@ -10,6 +10,7 @@ :pt="{ option: 'text-xs' }" + data-capture-wheel="true" @update:model-value="onChange" /> diff --git a/src/renderer/extensions/vueNodes/widgets/components/WidgetTextarea.vue b/src/renderer/extensions/vueNodes/widgets/components/WidgetTextarea.vue index bd7ac7818..a2ec58de6 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/WidgetTextarea.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/WidgetTextarea.vue @@ -8,6 +8,7 @@ :placeholder="placeholder || widget.name || ''" size="small" rows="3" + data-capture-wheel="true" @update:model-value="onChange" />