diff --git a/packages/frontend/src/components/MkMenu.child.vue b/packages/frontend/src/components/MkMenu.child.vue index 37c3a3f5e3..dfe8e6c307 100644 --- a/packages/frontend/src/components/MkMenu.child.vue +++ b/packages/frontend/src/components/MkMenu.child.vue @@ -80,6 +80,7 @@ onUnmounted(() => { }); defineExpose({ + rootElement: el, checkHit: (ev: MouseEvent) => { return (ev.target === el.value || el.value?.contains(ev.target as Node)); }, diff --git a/packages/frontend/src/components/MkMenu.vue b/packages/frontend/src/components/MkMenu.vue index b618dab6b2..8207fe5aa0 100644 --- a/packages/frontend/src/components/MkMenu.vue +++ b/packages/frontend/src/components/MkMenu.vue @@ -169,6 +169,7 @@ SPDX-License-Identifier: AGPL-3.0-only tabindex="0" :class="['_button', $style.item, $style.parent, { [$style.active]: childShowingItem === item }]" @mouseenter.prevent="preferClick ? null : showChildren(item, $event)" + @mousemove="parentMouseMove(item, $event)" @keydown.enter.prevent="preferClick ? null : showChildren(item, $event)" @click.prevent="!preferClick ? null : showChildren(item, $event)" > @@ -207,14 +208,18 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts.none }} +
+ +
diff --git a/packages/frontend/src/pages/debug.vue b/packages/frontend/src/pages/debug.vue index 9c0761f0b1..957f0fdc90 100644 --- a/packages/frontend/src/pages/debug.vue +++ b/packages/frontend/src/pages/debug.vue @@ -31,6 +31,8 @@ SPDX-License-Identifier: AGPL-3.0-only Success Question + + select @@ -74,6 +76,28 @@ const { initialValue: 'info', }); +function select(ev: PointerEvent) { + os.popupMenu([ + { type: 'parent', text: 'Option 1', children: [ + { text: 'Option 1-1', action: () => {} }, + { text: 'Option 1-2', action: () => {} }, + { text: 'Option 1-3', action: () => {} }, + ] }, + { type: 'parent', text: 'Option 2', children: [ + { text: 'Option 1-1', action: () => {} }, + { text: 'Option 1-2', action: () => {} }, + { text: 'Option 1-3', action: () => {} }, + ] }, + { type: 'parent', text: 'Option 3', children: [ + { text: 'Option 1-1', action: () => {} }, + { text: 'Option 1-2', action: () => {} }, + { text: 'Option 1-3', action: () => {} }, + ] }, + ], ev.target).then((value) => { + console.log('Selected:', value); + }); +} + definePage(() => ({ title: 'DEBUG ROOM', icon: 'ti ti-help-circle',