From d448152e7ff6cc2f1eccb1e82fa20a57cb23dbf7 Mon Sep 17 00:00:00 2001 From: Alex Blank Date: Fri, 28 Aug 2026 14:43:43 +0200 Subject: [PATCH] style(quick-pane): use standard titlebar drag --- test/quick-pane-ui.test.js | 7 +++-- ui/src/quick-pane/QuickPane.test.tsx | 10 +++---- ui/src/quick-pane/QuickPane.tsx | 14 +++++----- ui/src/quick-pane/quick-pane.css | 39 ++++++++++------------------ 4 files changed, 32 insertions(+), 38 deletions(-) diff --git a/test/quick-pane-ui.test.js b/test/quick-pane-ui.test.js index 4adb3bb..f04b8b8 100644 --- a/test/quick-pane-ui.test.js +++ b/test/quick-pane-ui.test.js @@ -278,7 +278,7 @@ test("Quick Pane uses native dimensions and request-first compact layout", async assert.match(source, /new ResizeObserver\(resizeToContent\)/); assert.match(source, /invoke\("resize_quick_pane", \{ height \}\)/); assert.doesNotMatch(source, /onCloseRequested/); - assert.match(source, /className="quick-pane-drag-region"/); + assert.match(source, /className="quick-pane-titlebar"/); assert.match(source, /startDragging\(\)/); assert.match(source, /className="quick-pane-request"/); assert.match(source, /className=\{`quick-pane-exchange/); @@ -322,7 +322,10 @@ test("Quick Pane uses native dimensions and request-first compact layout", async stylesheet, /\.quick-pane-composer[\s\S]*?height: 120px[\s\S]*?min-height: 110px[\s\S]*?max-height: 130px/, ); - assert.match(stylesheet, /\.quick-pane-drag-region[\s\S]*?position:\s*absolute[\s\S]*?height:\s*10px[\s\S]*?cursor:\s*grab/); + assert.match( + stylesheet, + /\.quick-pane-titlebar[\s\S]*?height:\s*20px[\s\S]*?border-bottom:[\s\S]*?cursor:\s*grab/, + ); assert.match( stylesheet, /\.quick-pane-composer-actions[\s\S]*?position: absolute/, diff --git a/ui/src/quick-pane/QuickPane.test.tsx b/ui/src/quick-pane/QuickPane.test.tsx index e94ebb2..b5f8fbf 100644 --- a/ui/src/quick-pane/QuickPane.test.tsx +++ b/ui/src/quick-pane/QuickPane.test.tsx @@ -234,7 +234,7 @@ describe("QuickPane", () => { expect( Array.from(pane?.children ?? []).map((element) => element.classList[0]), ).toEqual([ - "quick-pane-drag-region", + "quick-pane-titlebar", "quick-pane-toolbar", "quick-pane-composer", "quick-pane-exchange", @@ -280,13 +280,13 @@ describe("QuickPane", () => { } }); - it("starts native dragging from whole visible region, never toolbar controls", async () => { + it("starts native dragging from the titlebar, never toolbar controls", async () => { bridgeMock([defaultModels]); const { container } = render(); await preparedTrigger(); - const dragRegion = container.querySelector(".quick-pane-drag-region")!; - expect(dragRegion.querySelector(".quick-pane-drag-grip")).toBeTruthy(); - fireEvent.pointerDown(dragRegion); + const titlebar = container.querySelector(".quick-pane-titlebar")!; + expect(titlebar).toHaveTextContent("Quick Pane"); + fireEvent.pointerDown(titlebar); expect(mocks.startDragging).toHaveBeenCalledTimes(1); fireEvent.pointerDown( screen.getByRole("button", { name: "Close Quick Pane" }), diff --git a/ui/src/quick-pane/QuickPane.tsx b/ui/src/quick-pane/QuickPane.tsx index 86e645a..560c6ed 100644 --- a/ui/src/quick-pane/QuickPane.tsx +++ b/ui/src/quick-pane/QuickPane.tsx @@ -1136,14 +1136,16 @@ export default function QuickPane() { return (