diff --git a/.agents/skills/create-issue-interaction-ui/SKILL.md b/.agents/skills/create-issue-interaction-ui/SKILL.md index 59e22795ba..9cebfacc95 100644 --- a/.agents/skills/create-issue-interaction-ui/SKILL.md +++ b/.agents/skills/create-issue-interaction-ui/SKILL.md @@ -8,6 +8,8 @@ description: > # Create a new issue-thread interaction UI (Developer/maintainer skill) +Developer/maintainer skill. Do NOT install this on production Paperclip agents. + This skill walks a Paperclip contributor through introducing a new issue-thread interaction kind from shared contract to issue-detail wiring, helpers, and docs. It is intentionally a developer/maintainer skill: the audience is a diff --git a/ui/src/components/MarkdownListStyles.test.ts b/ui/src/components/MarkdownListStyles.test.ts new file mode 100644 index 0000000000..5087569b6a --- /dev/null +++ b/ui/src/components/MarkdownListStyles.test.ts @@ -0,0 +1,31 @@ +import { readFileSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { describe, expect, it } from "vitest"; + +const stylesheet = readFileSync(fileURLToPath(new URL("../index.css", import.meta.url)), "utf8"); + +function cssBlock(selector: string): string { + const start = stylesheet.indexOf(`${selector} {`); + expect(start, `Missing CSS selector: ${selector}`).toBeGreaterThanOrEqual(0); + + const bodyStart = stylesheet.indexOf("{", start); + const bodyEnd = stylesheet.indexOf("\n}", bodyStart); + expect(bodyStart, `Missing CSS block start: ${selector}`).toBeGreaterThanOrEqual(0); + expect(bodyEnd, `Missing CSS block end: ${selector}`).toBeGreaterThan(bodyStart); + + return stylesheet.slice(bodyStart + 1, bodyEnd); +} + +function remPaddingLeft(selector: string): number { + const padding = cssBlock(selector).match(/padding-left:\s*([0-9.]+)rem/); + + expect(padding?.[1], `Expected ${selector} to use rem padding`).toBeDefined(); + return Number(padding?.[1]); +} + +describe("rendered markdown list styles", () => { + it("keeps unordered-list gutters compact while giving ordered markers enough room", () => { + expect(remPaddingLeft(".paperclip-markdown :where(ul, ol)")).toBeLessThan(2.5); + expect(remPaddingLeft(".paperclip-markdown ol")).toBeGreaterThanOrEqual(2.5); + }); +}); diff --git a/ui/src/index.css b/ui/src/index.css index 43430a2fda..ce4c18ba7a 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -1128,7 +1128,7 @@ a.paperclip-mention-chip[data-mention-kind="agent"]::before { } .paperclip-markdown :where(ul, ol) { - padding-left: 1.15rem; + padding-left: 1.5rem; } .paperclip-markdown ul { @@ -1136,7 +1136,10 @@ a.paperclip-mention-chip[data-mention-kind="agent"]::before { } .paperclip-markdown ol { + /* Enough inline start room to hold outside markers without clipped digits + when markdown lists sit flush against an overflow-constrained container. */ list-style-type: decimal; + padding-left: 2.5rem; } .paperclip-markdown li {