From ea1b38f66b2f8d4c7689f59e2407067146e33c5e Mon Sep 17 00:00:00 2001 From: mew <88119911+doraemonxxx@users.noreply.github.com> Date: Mon, 27 Apr 2026 09:40:56 +0800 Subject: [PATCH] feat: refactor context menu to capture native events prevent context-menu to show in html input fields --- .../components/context-menu/context-menu.vue | 84 +++++++++++-------- 1 file changed, 51 insertions(+), 33 deletions(-) diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue b/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue index 009f267ef..be234e4ab 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/components/context-menu/context-menu.vue @@ -35,6 +35,14 @@ const props = defineProps< const emits = defineEmits(); +const NATIVE_CONTEXT_SELECTORS = [ + 'input', + 'textarea', + 'select', + '[contenteditable="true"]', + '.allow-native-context', +].join(', '); + const delegatedProps = computed(() => { const { class: _cls, @@ -59,40 +67,50 @@ function handleClick(menu: IContextMenuItem) { } menu?.handler?.(props.handlerData); } + +function handleContextMenuCapture(e: MouseEvent) { + const target = e.target as HTMLElement; + + if (target.closest(NATIVE_CONTEXT_SELECTORS)) { + e.stopPropagation(); + } +}