diff --git a/src/domain/generation.test.ts b/src/domain/generation.test.ts index c9c9573..cf0a9ec 100644 --- a/src/domain/generation.test.ts +++ b/src/domain/generation.test.ts @@ -185,6 +185,63 @@ describe("book generation", () => { ) }) + it.each([ + "static-text", + "image-frame", + "gallery-frame", + "rectangle", + "circle", + "line", + "decorative-image", + ] as const)("warns when a %s extends beyond the bleed boundary", (type) => { + const layout = layoutFixture() + layout.schema = addElement( + layout.schema, + type, + type === "image-frame" || type === "gallery-frame" ? "photos" : undefined + ) + const element = layout.schema.elements.at(-1)! + element.geometry = { ...element.geometry, x: -4 } + + expect( + inspectSubmissionPage( + "page", + layout, + submissionFixture(submissionIds[0]!, 1), + completeForm, + [] + ) + ).toContainEqual( + expect.objectContaining({ + code: "outside-print-area", + elementId: element.id, + blocking: false, + }) + ) + }) + + it("keeps question-bound text beyond the bleed boundary blocking", () => { + const layout = layoutFixture() + const element = layout.schema.elements.find((candidate) => candidate.type === "bound-text")! + element.geometry = { ...element.geometry, x: -4 } + + expect( + inspectSubmissionPage( + "page", + layout, + submissionFixture(submissionIds[0]!, 1), + completeForm, + [] + ) + ).toContainEqual( + expect.objectContaining({ + code: "outside-print-area", + elementId: element.id, + blocking: true, + }) + ) + }) + it("distinguishes repeated text bounding boxes bound to the same question", () => { const layout = layoutFixture() const element = layout.schema.elements.find((candidate) => candidate.type === "bound-text")! diff --git a/src/domain/generation.ts b/src/domain/generation.ts index 0baee14..c234faa 100644 --- a/src/domain/generation.ts +++ b/src/domain/generation.ts @@ -179,7 +179,7 @@ export function inspectSubmissionPage( pageId, "outside-print-area", "An element extends beyond the 3 mm bleed boundary.", - true, + element.type === "bound-text", element.id ) ) diff --git a/src/domain/preflight.test.ts b/src/domain/preflight.test.ts index 607400f..0bc6d9b 100644 --- a/src/domain/preflight.test.ts +++ b/src/domain/preflight.test.ts @@ -79,4 +79,33 @@ describe("preflight", () => { ) expect(hasFailedPreflight(report)).toBe(false) }) + + it("allows export when a static element extends beyond the bleed boundary", () => { + const generated = book() + generated.pages[0]!.problems.push({ + id: "static-outside-print-area", + code: "outside-print-area", + pageId: generated.pages[0]!.id, + elementId: "static-element", + message: "A static element extends beyond the bleed boundary.", + blocking: false, + }) + const report = createPreflightReport({ + projectId: generated.projectId, + book: generated, + bookStatus: "current", + pageCount: generated.pages.length, + fontsEmbedded: true, + outputIntentEmbedded: true, + pageBoxesValid: true, + assetResolutionMetadata: true, + assetResolutionCount: 0, + marks: false, + }) + + expect(report.checks).toContainEqual( + expect.objectContaining({ id: "blocking-problems", status: "pass" }) + ) + expect(hasFailedPreflight(report)).toBe(false) + }) }) diff --git a/visual-artifacts/issues/56/after-book-review.png b/visual-artifacts/issues/56/after-book-review.png new file mode 100644 index 0000000..cd461f4 Binary files /dev/null and b/visual-artifacts/issues/56/after-book-review.png differ diff --git a/visual-artifacts/issues/56/after-export.png b/visual-artifacts/issues/56/after-export.png new file mode 100644 index 0000000..d5c76e7 Binary files /dev/null and b/visual-artifacts/issues/56/after-export.png differ diff --git a/visual-artifacts/issues/56/before-book-review.png b/visual-artifacts/issues/56/before-book-review.png new file mode 100644 index 0000000..4e444f6 Binary files /dev/null and b/visual-artifacts/issues/56/before-book-review.png differ diff --git a/visual-artifacts/issues/56/before-export.png b/visual-artifacts/issues/56/before-export.png new file mode 100644 index 0000000..0b1c27c Binary files /dev/null and b/visual-artifacts/issues/56/before-export.png differ