mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-25 17:45:53 +01:00
Addresses UX review feedback on PAP-1963: - Fix denial-body leak for too_large/size codes (describeDenial no longer echoes fallback for known codes; the call site passes empty fallback so unknown codes show a generic message). - Sticky line-number gutter with solid code-bg fill; highlight border moves from absolute-positioned sibling onto the sticky gutter so the amber marker stays pinned when users scroll long lines horizontally. - Swap FileSearch copy-link icon for Link2. - WorkspaceFileLink now sets a real deep-link href so modifier-click opens the file viewer in a new tab instead of scrolling to the top. - Collapse duplicate title/description in the sheet header when the basename equals the full path (e.g. .env.production). - Drop the duplicate title/helper block from OpenFilePrompt (sheet header already carries the title + description). - Replace ArrowLeft with Cloud for the remote-workspace state. - Retire arbitrary text-[12.5px]/[11px]/[0.78em] sizes in favor of text-xs. - Unify 404 copy on "active workspace" everywhere. - Raise chip-row contrast by using bg-muted instead of bg-background. Also commits previously untracked visual-regression infra: - Storybook stories for 12 file viewer states - screenshot-file-viewer.mjs / screenshot-one.mjs - describeDenial unit tests Co-Authored-By: Paperclip <noreply@paperclip.ing>
28 lines
948 B
JavaScript
28 lines
948 B
JavaScript
#!/usr/bin/env node
|
|
// Screenshot a single story id at desktop 1440x900.
|
|
import fs from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { chromium } from "@playwright/test";
|
|
|
|
const [, , storyId, out, widthArg, heightArg, waitArg] = process.argv;
|
|
const width = Number(widthArg) || 1440;
|
|
const height = Number(heightArg) || 900;
|
|
const waitMs = Number(waitArg) || 2500;
|
|
const url = `http://localhost:6006/iframe.html?id=${storyId}&viewMode=story`;
|
|
|
|
await fs.mkdir(path.dirname(path.resolve(out)), { recursive: true });
|
|
const browser = await chromium.launch({ headless: true });
|
|
try {
|
|
const ctx = await browser.newContext({
|
|
viewport: { width, height },
|
|
deviceScaleFactor: 2,
|
|
});
|
|
const page = await ctx.newPage();
|
|
await page.goto(url, { waitUntil: "networkidle" });
|
|
await page.waitForTimeout(waitMs);
|
|
await page.screenshot({ path: out, fullPage: false });
|
|
} finally {
|
|
await browser.close();
|
|
}
|
|
console.log(`Wrote ${out}`);
|