diff --git a/packages/app/src/agent-stream/disclosure.browser.test.tsx b/packages/app/src/agent-stream/disclosure.browser.test.tsx index b46f10b2b2..d953130a1c 100644 --- a/packages/app/src/agent-stream/disclosure.browser.test.tsx +++ b/packages/app/src/agent-stream/disclosure.browser.test.tsx @@ -155,7 +155,7 @@ function renderFileDetails() { describe("tool badge file action", () => { it("keeps file opening separate from the accessible disclosure button", async () => { let opened = 0; - function Badge() { + function Badge({ hasFile }: { hasFile: boolean }) { const [expanded, setExpanded] = React.useState(false); const toggle = React.useCallback(() => setExpanded(!expanded), [expanded]); const openFile = React.useCallback(() => { @@ -167,12 +167,26 @@ describe("tool badge file action", () => { secondaryLabel="src/index.ts" isExpanded={expanded} onToggle={toggle} - onOpenFile={openFile} + onOpenFile={hasFile ? openFile : undefined} renderDetails={renderFileDetails} /> ); } - act(() => root.render()); + container.style.width = "300px"; + container.style.marginLeft = "20px"; + act(() => root.render()); + const header = page.getByRole("button", { name: "Read src/index.ts", exact: true }); + const headerElement = view().getByRole("button", { name: /^Read src\/index\.ts$/ }); + expect(headerElement.getBoundingClientRect().width).toBeGreaterThan(260); + await header.click({ position: { x: 220, y: 10 } }); + await expect.element(page.getByText("File contents")).toBeVisible(); + await header.click({ position: { x: 2, y: 2 } }); + await expect.element(page.getByText("File contents")).not.toBeInTheDocument(); + await header.click({ position: { x: 2, y: 2 } }); + await expect.element(page.getByText("File contents")).toBeVisible(); + await header.click({ position: { x: 220, y: 10 } }); + await expect.element(page.getByText("File contents")).not.toBeInTheDocument(); + act(() => root.render()); await page.getByRole("button", { name: "Read src/index.ts", exact: true }).hover(); const file = view().getByRole("button", { name: /^Open file$/ }); expect(file.parentElement?.closest("button")).toBeNull(); @@ -180,9 +194,9 @@ describe("tool badge file action", () => { expect(opened).toBe(1); const disclosure = view().getByRole("button", { name: /^Read src\/index\.ts$/ }); expect(view().queryByText("File contents")).toBeNull(); - await page.getByRole("button", { name: "Read src/index.ts", exact: true }).click(); + await header.click({ position: { x: 220, y: 10 } }); - expect(view().getByText("File contents")).toBeTruthy(); + await expect.element(page.getByText("File contents")).toBeVisible(); expect(opened).toBe(1); act(() => file.focus()); await userEvent.keyboard("{Enter}"); diff --git a/packages/app/src/components/message.tsx b/packages/app/src/components/message.tsx index 8f3f16cf51..087555e8a0 100644 --- a/packages/app/src/components/message.tsx +++ b/packages/app/src/components/message.tsx @@ -922,15 +922,16 @@ const expandableBadgeStylesheet = StyleSheet.create((theme) => ({ borderRadius: theme.borderRadius.lg, borderWidth: theme.borderWidth[1], borderColor: "transparent", - paddingHorizontal: theme.spacing[2], - paddingVertical: theme.spacing[1], overflow: "hidden", }, pressablePressed: { opacity: 0.9, }, disclosureButton: { - flexShrink: 1, + flex: 1, + minWidth: 0, + paddingHorizontal: theme.spacing[2], + paddingVertical: theme.spacing[1], flexDirection: "row", alignItems: "center", }, @@ -939,7 +940,7 @@ const expandableBadgeStylesheet = StyleSheet.create((theme) => ({ alignItems: "center", }, labelRow: { - flexShrink: 1, + flex: 1, flexDirection: "row", alignItems: "center", overflow: "hidden", @@ -989,6 +990,7 @@ const expandableBadgeStylesheet = StyleSheet.create((theme) => ({ flexShrink: 0, }, openFileButton: { + marginRight: theme.spacing[2], marginLeft: theme.spacing[1], padding: theme.spacing[1], borderRadius: theme.borderRadius.md,