From 84db32484f2adaaee979afc753b59ddf3af91ee3 Mon Sep 17 00:00:00 2001
From: AmAzing129 <115673583+AmAzing129@users.noreply.github.com>
Date: Thu, 16 Jul 2026 22:29:45 -0700
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(desktop):=20restore=20toolti?=
=?UTF-8?q?p-wrapped=20trigger=20behavior?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
apps/desktop/src/app/overlays/panel.test.tsx | 33 +++++++++++++++++++
apps/desktop/src/app/overlays/panel.tsx | 8 ++---
.../src/app/starmap/share-controls.test.tsx | 24 ++++++++++++++
.../src/app/starmap/share-controls.tsx | 8 ++---
4 files changed, 65 insertions(+), 8 deletions(-)
create mode 100644 apps/desktop/src/app/overlays/panel.test.tsx
create mode 100644 apps/desktop/src/app/starmap/share-controls.test.tsx
diff --git a/apps/desktop/src/app/overlays/panel.test.tsx b/apps/desktop/src/app/overlays/panel.test.tsx
new file mode 100644
index 000000000000..aed5d106e972
--- /dev/null
+++ b/apps/desktop/src/app/overlays/panel.test.tsx
@@ -0,0 +1,33 @@
+import { cleanup, fireEvent, render, screen } from '@testing-library/react'
+import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest'
+
+import { PanelRowMenu } from './panel'
+
+beforeAll(() => {
+ Element.prototype.hasPointerCapture ??= () => false
+ Element.prototype.releasePointerCapture ??= () => undefined
+ Element.prototype.setPointerCapture ??= () => undefined
+ HTMLElement.prototype.scrollIntoView ??= () => undefined
+})
+
+describe('PanelRowMenu', () => {
+ afterEach(() => {
+ cleanup()
+ })
+
+ it('opens its actions menu when the trigger has a tooltip', async () => {
+ const onSelect = vi.fn()
+
+ render()
+
+ const trigger = screen.getByRole('button', { name: 'Actions' })
+
+ fireEvent.pointerMove(trigger, { pointerType: 'mouse' })
+ expect((await screen.findByRole('tooltip')).textContent).toContain('Actions')
+
+ fireEvent.pointerDown(trigger, { button: 0, ctrlKey: false, pointerType: 'mouse' })
+ fireEvent.click(await screen.findByRole('menuitem', { name: 'Rename' }))
+
+ expect(onSelect).toHaveBeenCalledOnce()
+ })
+})
diff --git a/apps/desktop/src/app/overlays/panel.tsx b/apps/desktop/src/app/overlays/panel.tsx
index ac11c0d50b0b..2561740724ec 100644
--- a/apps/desktop/src/app/overlays/panel.tsx
+++ b/apps/desktop/src/app/overlays/panel.tsx
@@ -217,8 +217,8 @@ export function PanelRowMenu({ items, label = 'Actions' }: { items: PanelMenuIte
return (
-
-
+
+
-
-
+
+
{items.map(item => (
{
+ afterEach(() => {
+ cleanup()
+ })
+
+ it('opens its dialog when the trigger has a tooltip', async () => {
+ render()
+
+ const trigger = screen.getByRole('button', { name: 'Import / export map' })
+
+ fireEvent.pointerMove(trigger, { pointerType: 'mouse' })
+ expect((await screen.findByRole('tooltip')).textContent).toContain('Import / export map')
+
+ fireEvent.click(trigger)
+
+ const dialog = await screen.findByRole('dialog')
+ expect(within(dialog).getByRole('heading', { name: 'Import / export map' })).toBeTruthy()
+ })
+})
diff --git a/apps/desktop/src/app/starmap/share-controls.tsx b/apps/desktop/src/app/starmap/share-controls.tsx
index 9db2a4f2f682..1d62bfbb454e 100644
--- a/apps/desktop/src/app/starmap/share-controls.tsx
+++ b/apps/desktop/src/app/starmap/share-controls.tsx
@@ -76,8 +76,8 @@ export function ShareControls({ imported = false, onImport, onResetMap, shareCod
}}
open={open}
>
-
-
+
+
-
-
+
+