diff --git a/apps/web/e2e/mobile-font-size.spec.ts b/apps/web/e2e/mobile-font-size.spec.ts new file mode 100644 index 0000000..759b6af --- /dev/null +++ b/apps/web/e2e/mobile-font-size.spec.ts @@ -0,0 +1,41 @@ +import { expect, type Locator, test } from "@playwright/test"; +import { captureScreenshot, completeOnboarding, signup } from "./helpers"; + +async function fontSize(locator: Locator) { + return locator.evaluate((element) => Number.parseFloat(getComputedStyle(element).fontSize)); +} + +test("phone widths read text at 16px and up while desktop keeps its sizes", async ({ + page, +}, testInfo) => { + const stamp = Date.now(); + await signup(page, `mobile-font-${stamp}@rakazo.test`, "password12", "Font QA"); + await completeOnboarding(page); + + const composer = page.getByRole("combobox", { name: /^Message/ }); + await composer.fill("Please review `shared/PROJECT_CHECKPOINT_WRAPUP.md`."); + await composer.press("Enter"); + const reply = page + .getByTestId("transcript") + .locator("[data-message-id]") + .filter({ hasText: "done. i handled:" }); + await expect(reply).toBeVisible({ timeout: 30_000 }); + + const smallText = page.locator(".text-ui-body-sm").first(); + const desktopSmall = await fontSize(smallText); + expect(desktopSmall).toBe(14); + + await page.setViewportSize({ width: 390, height: 844 }); + await expect.poll(() => fontSize(smallText)).toBeCloseTo(16, 1); + expect(await fontSize(composer)).toBeGreaterThanOrEqual(16); + + await page.emulateMedia({ colorScheme: "dark" }); + await expect(page.locator("html")).toHaveAttribute("data-theme", "dark"); + await captureScreenshot(page, testInfo, "mobile-font-size-dark"); + await page.emulateMedia({ colorScheme: "light" }); + await expect(page.locator("html")).toHaveAttribute("data-theme", "light"); + await captureScreenshot(page, testInfo, "mobile-font-size-light"); + + await page.setViewportSize({ width: 1280, height: 720 }); + await expect.poll(() => fontSize(smallText)).toBe(desktopSmall); +}); diff --git a/apps/web/src/components/stage/OoStage.tsx b/apps/web/src/components/stage/OoStage.tsx index e30c59d..c6b5d23 100644 --- a/apps/web/src/components/stage/OoStage.tsx +++ b/apps/web/src/components/stage/OoStage.tsx @@ -251,7 +251,7 @@ export function OoStage({ ) : null} > ) : ( -
+
{subtitle}
)} @@ -548,7 +548,7 @@ export function OoGroupStage({ {subtitle} ) : ( -+
{subtitle}
)} diff --git a/apps/web/src/pages/ExternalConversationSettings.tsx b/apps/web/src/pages/ExternalConversationSettings.tsx index 0b00102..396bb96 100644 --- a/apps/web/src/pages/ExternalConversationSettings.tsx +++ b/apps/web/src/pages/ExternalConversationSettings.tsx @@ -80,7 +80,10 @@ export function ExternalConversationSettings({ return (diff --git a/apps/web/src/pages/PeerMessagesOverlay.tsx b/apps/web/src/pages/PeerMessagesOverlay.tsx index 5c61241..b8c8451 100644 --- a/apps/web/src/pages/PeerMessagesOverlay.tsx +++ b/apps/web/src/pages/PeerMessagesOverlay.tsx @@ -134,7 +134,7 @@ export function PeerMessagesOverlay({