diff --git a/apps/web/src/lib/tool-registry.tsx b/apps/web/src/lib/tool-registry.tsx index c59e085f..bd1ea8d4 100644 --- a/apps/web/src/lib/tool-registry.tsx +++ b/apps/web/src/lib/tool-registry.tsx @@ -130,6 +130,11 @@ const QrGenerateSettings = lazy(() => default: m.QrGenerateSettings, })), ); +const QrGeneratePreview = lazy(() => + import("@/components/tools/qr-generate-preview").then((m) => ({ + default: m.QrGeneratePreview, + })), +); const BarcodeReadSettings = lazy(() => import("@/components/tools/barcode-read-settings").then((m) => ({ default: m.BarcodeReadSettings, @@ -276,7 +281,10 @@ export const toolRegistry = new Map([ ["compare", { displayMode: "before-after", Settings: CompareSettings }], ["find-duplicates", { displayMode: "before-after", Settings: FindDuplicatesSettings }], ["color-palette", { displayMode: "before-after", Settings: ColorPaletteSettings }], - ["qr-generate", { displayMode: "no-dropzone", Settings: QrGenerateSettings }], + [ + "qr-generate", + { displayMode: "no-dropzone", Settings: QrGenerateSettings, ResultsPanel: QrGeneratePreview }, + ], ["barcode-read", { displayMode: "before-after", Settings: BarcodeReadSettings }], // Layout & Composition diff --git a/packages/shared/src/constants.ts b/packages/shared/src/constants.ts index 5586da55..88223972 100644 --- a/packages/shared/src/constants.ts +++ b/packages/shared/src/constants.ts @@ -230,7 +230,7 @@ export const TOOLS: Tool[] = [ { id: "qr-generate", name: "QR Code Generator", - description: "Generate QR codes from text or URLs", + description: "Generate styled QR codes with custom colors, patterns, and logos", category: "utilities", icon: "QrCode", route: "/qr-generate", diff --git a/packages/shared/src/i18n/en.ts b/packages/shared/src/i18n/en.ts index f1747c91..b8061c8c 100644 --- a/packages/shared/src/i18n/en.ts +++ b/packages/shared/src/i18n/en.ts @@ -88,7 +88,7 @@ export const en = { "color-palette": { name: "Color Palette", description: "Extract dominant colors from image" }, "qr-generate": { name: "QR Code Generator", - description: "Generate QR codes from text or URLs", + description: "Generate styled QR codes with custom colors, patterns, and logos", }, "barcode-read": { name: "Barcode Reader", diff --git a/tests/e2e/tools-process.spec.ts b/tests/e2e/tools-process.spec.ts index 92addaa2..5ddf6937 100644 --- a/tests/e2e/tools-process.spec.ts +++ b/tests/e2e/tools-process.spec.ts @@ -148,12 +148,13 @@ test.describe("Tool processing (core tools)", () => { test("qr-generate creates QR code without file upload", async ({ loggedInPage: page }) => { await page.goto("/qr-generate"); - // Fill in QR text - await page.locator("textarea").first().fill("https://example.com"); - await page.getByRole("button", { name: /generate qr/i }).click(); - await waitForProcessing(page); - // QR has a "Download QR Code" button in the left panel - await expect(page.getByText(/download qr/i).first()).toBeVisible({ timeout: 15_000 }); + // Fill in URL input (client-side generation, live preview) + await page.getByTestId("qr-input-url").fill("https://example.com"); + // Verify the live preview rendered (canvas or svg inside the preview area) + await expect(page.locator("canvas, svg").first()).toBeVisible({ timeout: 5000 }); + // Download button should be enabled + const downloadBtn = page.getByTestId("qr-generate-download"); + await expect(downloadBtn).toBeEnabled(); }); test("vectorize processes image", async ({ loggedInPage: page }) => {