From 823bc57c5c7a058ce3075432d5db939bc85b8f10 Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Mon, 29 Jun 2026 15:25:15 +0100 Subject: [PATCH] feat(templates): layered proposal/v2 ModernProposal on the extracted core MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a proposal/v2 family mirroring invoice/v2: ModernProposal (DocumentTemplate) renders a proposal on templates.core + a BrandTheme, porting the cinematic builtins/ProposalTemplateV2 look — hero, executive summary, FROM / TO parties, body sections, timeline + pricing tables, acceptance terms, and footer. - core.theme: BrandTheme.proposalModern() + Typography.proposalModern() (richer h1 / h2 / h3 scale); reuses the invoice palette + spacing — the two families share one modern business look. - ModernProposal fixes a latent bug in the builtin: its first page-flow (hero + summary + parties) was never built and silently dropped, so the cinematic proposal rendered with no header. The layered preset builds it, so the header renders. - Parties render inline (two-party layout, optional fields), not through the CV-shaped PartyIdentity. Table body cells inherit the DSL default to match the builtin. - example (on the cream page background) + a GenerateAllExamples row. - smoke test (5 cases) + ProposalV2VisualParityTest + blessed baseline. - data.proposal package-info: note it backs both the builtin and proposal/v2. --- .../demcha/examples/GenerateAllExamples.java | 2 + .../proposal/v2/ModernProposalV2Example.java | 62 +++ .../templates/core/theme/BrandTheme.java | 21 + .../templates/core/theme/Typography.java | 22 + .../templates/data/proposal/package-info.java | 4 +- .../proposal/v2/presets/ModernProposal.java | 383 ++++++++++++++++++ .../proposal/v2/presets/package-info.java | 17 + .../v2/presets/ModernProposalSmokeTest.java | 106 +++++ .../presets/ProposalV2VisualParityTest.java | 122 ++++++ .../modern_proposal-page-0.png | Bin 0 -> 106807 bytes .../modern_proposal-page-1.png | Bin 0 -> 6860 bytes 11 files changed, 738 insertions(+), 1 deletion(-) create mode 100644 examples/src/main/java/com/demcha/examples/templates/proposal/v2/ModernProposalV2Example.java create mode 100644 src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposal.java create mode 100644 src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/package-info.java create mode 100644 src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposalSmokeTest.java create mode 100644 src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ProposalV2VisualParityTest.java create mode 100644 src/test/resources/visual-baselines/proposal-v2-layered/modern_proposal-page-0.png create mode 100644 src/test/resources/visual-baselines/proposal-v2-layered/modern_proposal-page-1.png diff --git a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java index 9167a1a35..e566e387a 100644 --- a/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java +++ b/examples/src/main/java/com/demcha/examples/GenerateAllExamples.java @@ -84,6 +84,7 @@ import com.demcha.examples.templates.invoice.v2.ModernInvoiceV2Example; import com.demcha.examples.templates.proposal.CinematicProposalFileExample; import com.demcha.examples.templates.proposal.ProposalCinematicFileExample; +import com.demcha.examples.templates.proposal.v2.ModernProposalV2Example; import com.demcha.examples.templates.proposal.ProposalFileExample; import com.demcha.examples.templates.schedule.WeeklyScheduleFileExample; @@ -144,6 +145,7 @@ public static void main(String[] args) throws Exception { // Proposals System.out.println("Generated: " + ProposalFileExample.generate()); System.out.println("Generated: " + ProposalCinematicFileExample.generate()); + System.out.println("Generated: " + ModernProposalV2Example.generate()); System.out.println("Generated: " + CinematicProposalFileExample.generate()); // Schedule diff --git a/examples/src/main/java/com/demcha/examples/templates/proposal/v2/ModernProposalV2Example.java b/examples/src/main/java/com/demcha/examples/templates/proposal/v2/ModernProposalV2Example.java new file mode 100644 index 000000000..4936eb2ac --- /dev/null +++ b/examples/src/main/java/com/demcha/examples/templates/proposal/v2/ModernProposalV2Example.java @@ -0,0 +1,62 @@ +package com.demcha.examples.templates.proposal.v2; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.core.theme.BrandTheme; +import com.demcha.compose.document.templates.data.proposal.ProposalDocumentSpec; +import com.demcha.compose.document.templates.proposal.v2.presets.ModernProposal; +import com.demcha.examples.support.ExampleDataFactory; +import com.demcha.examples.support.ExampleOutputPaths; + +import java.nio.file.Path; + +/** + * Renders the layered {@code proposal.v2} Modern Proposal preset against + * the shared {@code ProposalDocumentSpec} sample data using the default + * {@code BrandTheme.proposalModern()} theme on the cream page background. + * + *

Output: + * {@code examples/target/generated-pdfs/templates/proposal/proposal-modern-v2.pdf}.

+ * + *

The "hello world" for the v2 proposal pipeline: fetch sample data, + * ask the preset for a template, render it — the same shape as the v2 CV + * and invoice examples, now on the proposal family.

+ */ +public final class ModernProposalV2Example { + + private ModernProposalV2Example() { + } + + /** + * @return absolute path of the rendered PDF + * @throws Exception if rendering fails + */ + public static Path generate() throws Exception { + Path outputFile = ExampleOutputPaths.prepare( + "templates/proposal", "proposal-modern-v2.pdf"); + ProposalDocumentSpec spec = ExampleDataFactory.sampleProposal(); + BrandTheme theme = BrandTheme.proposalModern(); + DocumentTemplate template = ModernProposal.create(theme); + + float m = (float) ModernProposal.RECOMMENDED_MARGIN; + try (DocumentSession document = GraphCompose.document(outputFile) + .pageSize(DocumentPageSize.A4) + .pageBackground(theme.palette().mainFill()) + .margin(m, m, m, m) + .create()) { + template.compose(document, spec); + document.buildPdf(); + } + return outputFile; + } + + /** + * @param args ignored + * @throws Exception if rendering fails + */ + public static void main(String[] args) throws Exception { + System.out.println("Generated: " + generate()); + } +} diff --git a/src/main/java/com/demcha/compose/document/templates/core/theme/BrandTheme.java b/src/main/java/com/demcha/compose/document/templates/core/theme/BrandTheme.java index b16768358..a243fcf74 100644 --- a/src/main/java/com/demcha/compose/document/templates/core/theme/BrandTheme.java +++ b/src/main/java/com/demcha/compose/document/templates/core/theme/BrandTheme.java @@ -336,6 +336,27 @@ public static BrandTheme invoiceModern() { Spacing.invoiceModern(), Decoration.classic()); } + + /** + * The "Modern Proposal" look — the same cinematic "modern business" + * surfaces as {@link #invoiceModern()} (cream page, soft-tan panels, + * deep-teal title + table headers, gold accent) with the richer h1 / + * h2 / h3 type scale a proposal needs. Mirrors the cinematic + * {@code builtins.ProposalTemplateV2}. + * + *

Reuses the invoice palette + spacing tokens — the two families + * share one modern business look; a future cleanup may rename those + * shared factories to a neutral {@code businessModern()}.

+ * + * @return a {@code BrandTheme} for the "Modern Proposal" look + */ + public static BrandTheme proposalModern() { + return new BrandTheme( + Palette.invoiceModern(), + Typography.proposalModern(), + Spacing.invoiceModern(), + Decoration.classic()); + } // -- pre-built text-style helpers ------------------------------------ // Renderers ask the theme for an already-composed DocumentTextStyle // instead of re-assembling font + size + decoration + colour every diff --git a/src/main/java/com/demcha/compose/document/templates/core/theme/Typography.java b/src/main/java/com/demcha/compose/document/templates/core/theme/Typography.java index d75580466..3190ec344 100644 --- a/src/main/java/com/demcha/compose/document/templates/core/theme/Typography.java +++ b/src/main/java/com/demcha/compose/document/templates/core/theme/Typography.java @@ -382,4 +382,26 @@ public static Typography invoiceModern() { 11.0, // body (party blocks, table cells — modern body) 1.3); // line spacing } + + /** + * Helvetica scale for the Modern Proposal preset — the same modern + * business face as the invoice, with the richer heading ladder a + * proposal needs: a 28pt title (h1), 17pt section headings (h2 — the + * {@code banner} slot), and a 13pt project subtitle (h3 — the + * {@code entryTitle} slot). + * + * @return a {@code Typography} scale for the Modern Proposal preset + */ + public static Typography proposalModern() { + return new Typography( + FontName.HELVETICA_BOLD, FontName.HELVETICA, + 28.0, // headline (proposal title — modern h1) + 10.0, // contact (unused by proposal) + 17.0, // banner (section headings — modern h2) + 13.0, // entry title (project subtitle — modern h3) + 11.0, // entry date (unused) + 10.0, // entry subtitle (footer caption — modern caption) + 11.0, // body (summary, sections, parties, cells — modern body) + 1.3); // line spacing + } } diff --git a/src/main/java/com/demcha/compose/document/templates/data/proposal/package-info.java b/src/main/java/com/demcha/compose/document/templates/data/proposal/package-info.java index 10989157c..70122c60a 100644 --- a/src/main/java/com/demcha/compose/document/templates/data/proposal/package-info.java +++ b/src/main/java/com/demcha/compose/document/templates/data/proposal/package-info.java @@ -1,4 +1,6 @@ /** - * Proposal document specs and supporting data records for canonical templates. + * Shared, render-neutral proposal document specs and supporting data + * records, consumed by both the cinematic builtin {@code ProposalTemplateV2} + * and the layered {@code proposal.v2} presets. */ package com.demcha.compose.document.templates.data.proposal; diff --git a/src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposal.java b/src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposal.java new file mode 100644 index 000000000..2dd917c9d --- /dev/null +++ b/src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposal.java @@ -0,0 +1,383 @@ +package com.demcha.compose.document.templates.proposal.v2.presets; + +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.dsl.TableBuilder; +import com.demcha.compose.document.style.DocumentColor; +import com.demcha.compose.document.style.DocumentCornerRadius; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.style.DocumentStroke; +import com.demcha.compose.document.style.DocumentTextDecoration; +import com.demcha.compose.document.style.DocumentTextStyle; +import com.demcha.compose.document.table.DocumentTableColumn; +import com.demcha.compose.document.table.DocumentTableStyle; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.core.theme.BrandTheme; +import com.demcha.compose.document.templates.data.proposal.ProposalData; +import com.demcha.compose.document.templates.data.proposal.ProposalDocumentSpec; +import com.demcha.compose.document.templates.data.proposal.ProposalParty; +import com.demcha.compose.document.templates.data.proposal.ProposalPricingRow; +import com.demcha.compose.document.templates.data.proposal.ProposalSection; +import com.demcha.compose.document.templates.data.proposal.ProposalTimelineItem; + +import java.util.List; +import java.util.Objects; + +/** + * Modern Proposal — the first layered proposal preset. + * + *

It composes a proposal on a + * {@link com.demcha.compose.document.templates.core.theme.BrandTheme} + * plus the canonical DSL, mirroring the {@code invoice.v2} preset shape: + * a {@code create(BrandTheme)} factory returns a thin + * {@link DocumentTemplate} whose {@code compose} sequences a hero panel, + * an executive-summary panel, the FROM / TO parties, the body sections, + * the timeline + pricing tables, the acceptance terms, and a footer. The + * visual intent is ported from the cinematic + * {@code builtins.ProposalTemplateV2}; the hero, summary, party labels, + * section headings, table headers, totals, and footer read their colours + * / fonts / sizes from the theme (replacing the {@code BusinessTheme} the + * builtin used). The table body cells intentionally inherit the DSL + * default table-cell text to stay a pixel match for the builtin — see + * {@code compose}.

+ * + *

Why the parties render inline rather than through + * {@code core.identity.PartyIdentity}: a proposal carries two + * parties (sender + recipient) shown as side-by-side blocks, and a + * {@link ProposalParty}'s email / phone / website are optional, whereas + * the shared {@code Contact} / {@code Masthead} widgets model a single + * mandatory contact triple for a one-person CV masthead. The two-party + * inline layout is the proposal idiom, so the preset composes the party + * blocks directly.

+ */ +public final class ModernProposal { + + /** + * Stable template identifier. + */ + public static final String ID = "proposal-modern"; + + /** + * Human-readable display name. + */ + public static final String DISPLAY_NAME = "Modern Proposal"; + + /** + * Recommended page margin (in points). + */ + public static final double RECOMMENDED_MARGIN = 28.0; + + private static final double TABLE_PADDING = 7.0; + + /** + * Deep teal used for the proposal title, section headings, and table + * header fills (the modern business primary). Preset-local — no other + * v2 preset shares it today; promote to a {@link + * com.demcha.compose.document.templates.core.theme.Palette} slot if a + * second proposal preset reaches for it. + */ + private static final DocumentColor PRIMARY = DocumentColor.rgb(20, 60, 75); + + /** + * Gold accent for the hero accent strip and the acceptance-terms strip + * (the modern business accent). Preset-local, same rationale as + * {@link #PRIMARY}. + */ + private static final DocumentColor ACCENT = DocumentColor.rgb(196, 153, 76); + + private ModernProposal() { + } + + /** + * Builds the preset with the Modern Proposal theme + * ({@link BrandTheme#proposalModern()}). + * + * @return ready-to-use template + */ + public static DocumentTemplate create() { + return create(BrandTheme.proposalModern()); + } + + /** + * Builds the preset with a caller-supplied theme, so callers can vary + * the proposal flavour (typography scale, palette) without forking + * this class. + * + * @param theme active theme + * @return ready-to-use template + */ + public static DocumentTemplate create(BrandTheme theme) { + Objects.requireNonNull(theme, "theme"); + return new Template(theme); + } + + private record Template(BrandTheme theme) implements DocumentTemplate { + + @Override + public String id() { + return ID; + } + + @Override + public String displayName() { + return DISPLAY_NAME; + } + + @Override + public void compose(DocumentSession document, ProposalDocumentSpec spec) { + Objects.requireNonNull(document, "document"); + ProposalData data = Objects.requireNonNull(spec, "spec").proposal(); + + DocumentColor panelFill = theme.palette().banner(); // soft tan + DocumentColor rule = theme.palette().rule(); + DocumentColor surface = theme.palette().mainFill(); // cream + + // Title / section headings use the deep teal PRIMARY; the project + // subtitle is the h3 ink heading; labels + body + the footer + // caption read from the theme. Mirrors the cinematic builtin. + DocumentTextStyle titleStyle = heading(theme.typography().sizeHeadline(), PRIMARY); + DocumentTextStyle projectStyle = heading(theme.typography().sizeEntryTitle(), + theme.palette().ink()); + DocumentTextStyle sectionTitleStyle = heading(theme.typography().sizeBanner(), PRIMARY); + DocumentTextStyle labelStyle = theme.bodyBoldStyle(); + DocumentTextStyle bodyStyle = theme.bodyStyle(); + DocumentTextStyle captionStyle = DocumentTextStyle.builder() + .fontName(theme.typography().bodyFont()) + .size(theme.typography().sizeEntrySubtitle()) + .color(theme.palette().muted()) + .build(); + + DocumentTableStyle bordered = DocumentTableStyle.builder() + .stroke(DocumentStroke.of(rule, 0.6)) + .padding(DocumentInsets.of(TABLE_PADDING)) + .build(); + DocumentTableStyle headerStyle = DocumentTableStyle.builder() + .fillColor(PRIMARY) + .stroke(DocumentStroke.of(rule, 0.6)) + .padding(DocumentInsets.of(TABLE_PADDING + 1)) + .textStyle(DocumentTextStyle.builder() + .fontName(theme.typography().bodyFont()) + .decoration(DocumentTextDecoration.BOLD) + // Header text is the 11pt body size — NOT sizeBanner(), + // which in proposalModern() is the 17pt h2 section-heading + // slot. (ModernInvoice uses sizeBanner() because its banner + // slot is 11pt; do not "align" the two — it breaks parity.) + .size(theme.typography().sizeBody()) + .color(surface) + .build()) + .build(); + DocumentTableStyle emphasizedRowStyle = DocumentTableStyle.builder() + .fillColor(panelFill) + .stroke(DocumentStroke.of(rule, 0.6)) + .padding(DocumentInsets.of(TABLE_PADDING + 1)) + .textStyle(theme.bodyBoldStyle()) + .build(); + + document.dsl().pageFlow() + .name("ProposalV2ModernRoot") + .spacing(theme.spacing().pageFlowSpacing()) + .addSection("ProposalHero", section -> section + .softPanel(panelFill, + DocumentCornerRadius.right(theme.spacing().bannerCornerRadius()), + theme.spacing().bannerInnerPadding()) + .accentLeft(ACCENT, theme.spacing().accentRuleWidth()) + .spacing(6) + .addParagraph(p -> p + .text(data.title().isBlank() ? "Proposal" : data.title()) + .textStyle(titleStyle) + .margin(DocumentInsets.zero())) + .addParagraph(p -> p + .text(data.projectTitle()) + .textStyle(projectStyle) + .margin(DocumentInsets.zero())) + .addRich(rich -> rich + .plain("Proposal ").bold(data.proposalNumber()) + .plain(" Prepared ").bold(data.preparedDate()) + .plain(" Valid until ").bold(data.validUntil()))) + .addSection("ProposalExecutiveSummary", section -> section + .softPanel(surface, 8, 12) + .stroke(DocumentStroke.of(rule, 0.6)) + .spacing(4) + .addParagraph(p -> p + .text("Executive summary") + .textStyle(labelStyle) + .margin(DocumentInsets.zero())) + .addParagraph(p -> p + .text(data.executiveSummary()) + .textStyle(bodyStyle) + .lineSpacing(1.35) + .margin(DocumentInsets.zero()))) + .addRow("ProposalParties", row -> row + .spacing(18) + .weights(1, 1) + .addSection("ProposalSender", col -> partyBlock(col, "FROM", + data.sender(), labelStyle, bodyStyle)) + .addSection("ProposalRecipient", col -> partyBlock(col, "TO", + data.recipient(), labelStyle, bodyStyle))) + // NB: the cinematic builtin ProposalTemplateV2 omits this build() + // on its first page-flow, so its hero / summary / parties never + // render — a latent bug. The layered preset fixes it: build the + // root flow so the title, executive summary, and FROM/TO parties + // are emitted before the section/timeline/pricing flows below. + .build(); + + for (ProposalSection section : data.sections()) { + document.dsl().pageFlow() + .name("ProposalSectionGroup") + .spacing(4) + .addParagraph(p -> p + .text(section.title()) + .textStyle(sectionTitleStyle) + .margin(new DocumentInsets(12, 0, 4, 0))) + .addSection("ProposalSectionBody", col -> { + for (String paragraph : section.paragraphs()) { + col.addParagraph(p -> p + .text(paragraph) + .textStyle(bodyStyle) + .lineSpacing(1.35) + .margin(DocumentInsets.zero())); + } + }) + .build(); + } + + if (!data.timeline().isEmpty()) { + document.dsl().pageFlow() + .name("ProposalTimelineGroup") + .spacing(4) + .addParagraph(p -> p + .text("Timeline") + .textStyle(sectionTitleStyle) + .margin(new DocumentInsets(12, 0, 4, 0))) + .addTable(table -> { + // The last column is auto-sized to its content (matching the + // cinematic builtin). Very long details/descriptions can push + // the table past the page's inner width and throw at render + // time — keep cell text concise, as the sample data does. The + // same applies to the pricing table below. + TableBuilder configured = table + .name("ProposalTimeline") + .columns( + DocumentTableColumn.fixed(110), + DocumentTableColumn.fixed(80), + DocumentTableColumn.auto()) + .defaultCellStyle(bordered) + .headerRow("Phase", "Duration", "Details") + .headerStyle(headerStyle) + .repeatHeader(); + for (ProposalTimelineItem item : data.timeline()) { + configured.row(item.phase(), item.duration(), item.details()); + } + }) + .build(); + } + + if (!data.pricingRows().isEmpty()) { + document.dsl().pageFlow() + .name("ProposalPricingGroup") + .spacing(4) + .addParagraph(p -> p + .text("Investment") + .textStyle(sectionTitleStyle) + .margin(new DocumentInsets(12, 0, 4, 0))) + .addTable(table -> { + TableBuilder configured = table + .name("ProposalPricing") + .columns( + DocumentTableColumn.fixed(140), + DocumentTableColumn.auto(), + DocumentTableColumn.fixed(110)) + .defaultCellStyle(bordered) + .headerRow("Item", "Description", "Amount") + .headerStyle(headerStyle) + .repeatHeader() + .zebra(panelFill, surface); + // Convention (shared with the cinematic builtin): an + // emphasized LAST pricing row renders via totalRow so it + // picks up the emphasized fill + bold; others are plain. + List rows = data.pricingRows(); + for (int i = 0; i < rows.size(); i++) { + ProposalPricingRow item = rows.get(i); + if (item.emphasized() && i == rows.size() - 1) { + configured.totalRow(emphasizedRowStyle, + item.label(), item.description(), item.amount()); + } else { + configured.row(item.label(), item.description(), item.amount()); + } + } + }) + .build(); + } + + if (!data.acceptanceTerms().isEmpty()) { + document.dsl().pageFlow() + .name("ProposalAcceptanceGroup") + .spacing(4) + .addParagraph(p -> p + .text("Acceptance terms") + .textStyle(sectionTitleStyle) + .margin(new DocumentInsets(12, 0, 4, 0))) + .addSection("ProposalAcceptanceBody", col -> col + .accentLeft(ACCENT, 3) + .padding(0, 0, 0, 8) + .addList(list -> list.items(data.acceptanceTerms()))) + .build(); + } + + if (!data.footerNote().isBlank()) { + document.dsl().pageFlow() + .name("ProposalV2ModernFooter") + .addParagraph(p -> p + .text(data.footerNote()) + .textStyle(captionStyle) + .margin(new DocumentInsets(14, 0, 0, 0))) + .build(); + } + } + + private DocumentTextStyle heading(double size, DocumentColor color) { + return DocumentTextStyle.builder() + .fontName(theme.typography().headlineFont()) + .size(size) + .decoration(DocumentTextDecoration.BOLD) + .color(color) + .build(); + } + } + + private static void partyBlock(com.demcha.compose.document.dsl.SectionBuilder col, + String label, ProposalParty party, + DocumentTextStyle labelStyle, DocumentTextStyle bodyStyle) { + col.spacing(2) + .addParagraph(p -> p.text(label).textStyle(labelStyle).margin(DocumentInsets.zero())) + .addParagraph(p -> p.text(party.name()).textStyle(labelStyle).margin(DocumentInsets.zero())) + .addParagraph(p -> p.text(joinAddress(party)).textStyle(bodyStyle) + .lineSpacing(1.3).margin(DocumentInsets.zero())); + } + + private static String joinAddress(ProposalParty party) { + StringBuilder builder = new StringBuilder(); + for (String line : party.addressLines()) { + if (line == null || line.isBlank()) { + continue; + } + append(builder, line); + } + if (!party.email().isBlank()) { + append(builder, party.email()); + } + if (!party.phone().isBlank()) { + append(builder, party.phone()); + } + if (!party.website().isBlank()) { + append(builder, party.website()); + } + return builder.toString(); + } + + private static void append(StringBuilder builder, String line) { + if (builder.length() > 0) { + builder.append('\n'); + } + builder.append(line); + } +} diff --git a/src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/package-info.java b/src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/package-info.java new file mode 100644 index 000000000..072a2e018 --- /dev/null +++ b/src/main/java/com/demcha/compose/document/templates/proposal/v2/presets/package-info.java @@ -0,0 +1,17 @@ +/** + * Layered proposal presets — thin orchestrators that compose a proposal + * on a {@link com.demcha.compose.document.templates.core.theme.BrandTheme} + * plus the canonical DSL. + * + *

This package mirrors {@code invoice.v2.presets}: each preset is a + * {@code final} class with a {@code create(BrandTheme)} factory returning + * a {@link com.demcha.compose.document.templates.api.DocumentTemplate} + * parameterised on + * {@link com.demcha.compose.document.templates.data.proposal.ProposalDocumentSpec}. + * The presets read every visual value from the theme and reuse the shared + * {@code templates.core.*} layer; the proposal family does not own a theme + * type of its own.

+ * + * @since 2.0.0 + */ +package com.demcha.compose.document.templates.proposal.v2.presets; diff --git a/src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposalSmokeTest.java b/src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposalSmokeTest.java new file mode 100644 index 000000000..e48547370 --- /dev/null +++ b/src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ModernProposalSmokeTest.java @@ -0,0 +1,106 @@ +package com.demcha.compose.document.templates.proposal.v2.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.style.DocumentInsets; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.core.theme.BrandTheme; +import com.demcha.compose.document.templates.data.proposal.ProposalData; +import com.demcha.compose.document.templates.data.proposal.ProposalDocumentSpec; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Smoke test for the layered {@code proposal.v2} pipeline through + * {@link ModernProposal} — proves the preset renders a + * {@link ProposalDocumentSpec} end-to-end on a {@link BrandTheme}, via + * both factory variants, with any theme, and on an empty proposal. + */ +class ModernProposalSmokeTest { + + private static ProposalDocumentSpec sampleSpec() { + return ProposalDocumentSpec.from(ProposalData.builder() + .title("Proposal") + .proposalNumber("GC-P-2026-014") + .preparedDate("02 Apr 2026") + .validUntil("30 Apr 2026") + .projectTitle("Document platform consolidation") + .executiveSummary("A phased engagement to retire per-team PDF scripts " + + "in favour of one canonical document engine.") + .sender(from -> from + .name("GraphCompose Studio") + .addressLines("18 Layout Street", "London, UK") + .email("hello@graphcompose.dev") + .phone("+44 20 5555 1000") + .website("graphcompose.dev")) + .recipient(to -> to + .name("Northwind Systems") + .addressLines("Attn: Procurement", "410 Market Avenue") + .email("procurement@northwind.example")) + .section("Scope", "Discovery, architecture, and a reference rollout.") + .section("Approach", "Iterative delivery with weekly checkpoints.") + .timelineItem("Discovery", "2 weeks", "Stakeholder interviews + audit") + .timelineItem("Build", "6 weeks", "Engine + template migration") + .pricingRow("Discovery", "Workshops + audit", "GBP 6,000") + .pricingRow("Build", "Engine + templates", "GBP 24,000") + .emphasizedPricingRow("Total", "", "GBP 30,000") + .acceptanceTerm("50% on signature, 50% on delivery.") + .acceptanceTerm("Valid for 30 days from the prepared date.") + .footerNote("Thank you for considering GraphCompose.") + .build()); + } + + /** A proposal with no sections, timeline, pricing, terms, or footer — the empty paths. */ + private static ProposalDocumentSpec minimalSpec() { + return ProposalDocumentSpec.from(ProposalData.builder() + .proposalNumber("GC-P-2026-015") + .sender(from -> from.name("GraphCompose Studio")) + .recipient(to -> to.name("Northwind Systems")) + .build()); + } + + private static void render(DocumentTemplate template, + ProposalDocumentSpec spec) throws Exception { + try (DocumentSession session = GraphCompose.document() + .pageSize(DocumentPageSize.A4) + .margin(DocumentInsets.of(28)) + .create()) { + template.compose(session, spec); + assertThat(session.roots()).isNotEmpty(); + } + } + + @Test + void exposesStableIdentity() { + DocumentTemplate template = ModernProposal.create(); + assertThat(template.id()).isEqualTo(ModernProposal.ID); + assertThat(template.displayName()).isEqualTo(ModernProposal.DISPLAY_NAME); + } + + @Test + void defaultFactoryRendersWithProposalTheme() throws Exception { + // create() wires BrandTheme.proposalModern() — the variant the example uses. + render(ModernProposal.create(), sampleSpec()); + } + + @Test + void rendersWithExplicitTheme() throws Exception { + render(ModernProposal.create(BrandTheme.proposalModern()), sampleSpec()); + } + + @Test + void readsAnyTheme() throws Exception { + // Renders under a non-proposal theme without crashing: the hero, headings, + // labels, and footer follow the theme; the table body cells inherit the DSL + // default (as in the cinematic builtin). + render(ModernProposal.create(BrandTheme.boxedClassic()), sampleSpec()); + } + + @Test + void rendersEmptyProposal() throws Exception { + // Exercises the empty-collection + skipped-table/footer paths. + render(ModernProposal.create(), minimalSpec()); + } +} diff --git a/src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ProposalV2VisualParityTest.java b/src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ProposalV2VisualParityTest.java new file mode 100644 index 000000000..d3f2852e5 --- /dev/null +++ b/src/test/java/com/demcha/compose/document/templates/proposal/v2/presets/ProposalV2VisualParityTest.java @@ -0,0 +1,122 @@ +package com.demcha.compose.document.templates.proposal.v2.presets; + +import com.demcha.compose.GraphCompose; +import com.demcha.compose.document.api.DocumentPageSize; +import com.demcha.compose.document.api.DocumentSession; +import com.demcha.compose.document.templates.api.DocumentTemplate; +import com.demcha.compose.document.templates.data.proposal.ProposalData; +import com.demcha.compose.document.templates.data.proposal.ProposalDocumentSpec; +import com.demcha.compose.testing.visual.PdfVisualRegression; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.nio.file.Path; +import java.util.function.Supplier; +import java.util.stream.Stream; + +/** + * Pixel-diff visual parity gate for the v2 layered proposal presets. + * + *

Each preset renders the same canonical {@link ProposalDocumentSpec} + * on A4 at the preset's {@code RECOMMENDED_MARGIN}; the PDF is rasterised + * page-by-page and compared per-pixel against a checked-in baseline PNG. + * {@code ModernProposal} reproduces the cinematic {@code ProposalTemplateV2} + * look on a {@code BrandTheme}, so this gate locks that look against drift.

+ * + *

Re-blessing baselines — after a deliberate visual + * change, re-run with {@code -Dgraphcompose.visual.approve=true} to + * overwrite the baselines, and commit the updated PNGs in the same change. + * Baselines live under + * {@code src/test/resources/visual-baselines/proposal-v2-layered/}.

+ */ +class ProposalV2VisualParityTest { + + private static final Path BASELINE_ROOT = Path.of( + "src", "test", "resources", "visual-baselines", "proposal-v2-layered"); + + // Mirrors CvV2VisualParityTest / InvoiceV2VisualParityTest: Helvetica is + // the PDFBox built-in font with the widest cross-platform glyph/colour + // drift, so the budget is sized generously for Windows vs Linux CI. + private static final long PIXEL_DIFF_BUDGET = 50_000L; + private static final int PER_PIXEL_TOLERANCE = 8; + + @ParameterizedTest(name = "{0}") + @MethodSource("presets") + void rendersWithinPixelDiffBudget(String slug, + double margin, + Supplier> factory) + throws Exception { + DocumentTemplate template = factory.get(); + float m = (float) margin; + byte[] pdfBytes; + try (DocumentSession document = GraphCompose.document() + .pageSize(DocumentPageSize.A4) + .margin(m, m, m, m) + .create()) { + template.compose(document, canonicalProposal()); + pdfBytes = document.toPdfBytes(); + } + + PdfVisualRegression.standard() + .baselineRoot(BASELINE_ROOT) + .perPixelTolerance(PER_PIXEL_TOLERANCE) + .mismatchedPixelBudget(PIXEL_DIFF_BUDGET) + .assertMatchesBaseline(slug, pdfBytes); + } + + private static Stream presets() { + return Stream.of( + Arguments.of("modern_proposal", + ModernProposal.RECOMMENDED_MARGIN, + (Supplier>) ModernProposal::create)); + } + + /** + * Canonical sample proposal — exercises the hero, executive summary, + * both parties, body sections, the timeline + pricing tables (with an + * emphasized total), the acceptance terms, and the footer. Kept inline + * so the test depends only on main + main-test code. + */ + private static ProposalDocumentSpec canonicalProposal() { + return ProposalDocumentSpec.from(ProposalData.builder() + .title("Proposal") + .proposalNumber("GC-P-2026-014") + .preparedDate("02 Apr 2026") + .validUntil("30 Apr 2026") + .projectTitle("Document platform consolidation") + .executiveSummary("A phased engagement to retire per-team PDF scripts in " + + "favour of one canonical, snapshot-tested document engine that " + + "serves billing, hiring, and reporting flows.") + .sender(from -> from + .name("GraphCompose Studio") + .addressLines("18 Layout Street", "London, UK", "EC1A 4GC") + .email("hello@graphcompose.dev") + .phone("+44 20 5555 1000") + .website("graphcompose.dev")) + .recipient(to -> to + .name("Northwind Systems") + .addressLines("Attn: Procurement Team", "410 Market Avenue", "Manchester, UK") + .email("procurement@northwind.example") + .phone("+44 161 555 2200")) + .section("Scope of work", + "Discovery of the current document estate, a reference architecture, " + + "and a production rollout of the canonical engine.", + "Migration of the three highest-volume templates with visual parity gates.") + .section("Approach", + "Iterative delivery in two-week increments with weekly checkpoints " + + "and a shared visual-regression dashboard.") + .timelineItem("Discovery", "2 weeks", "Stakeholder interviews + estate audit") + .timelineItem("Build", "6 weeks", "Engine integration + template migration") + .timelineItem("Rollout", "2 weeks", "Cutover, training, and handover") + .pricingRow("Discovery", "Workshops + audit", "GBP 6,000") + .pricingRow("Build", "Engine + 3 migrations", "GBP 24,000") + .pricingRow("Rollout", "Cutover + enablement", "GBP 6,000") + .emphasizedPricingRow("Total", "Fixed-fee engagement", "GBP 36,000") + .acceptanceTerm("50% on signature, 50% on final delivery.") + .acceptanceTerm("Fixed-fee; scope changes handled via a written change note.") + .acceptanceTerm("Valid for 30 days from the prepared date.") + .footerNote("Thank you for considering GraphCompose for your document platform.") + .build()); + } +} diff --git a/src/test/resources/visual-baselines/proposal-v2-layered/modern_proposal-page-0.png b/src/test/resources/visual-baselines/proposal-v2-layered/modern_proposal-page-0.png new file mode 100644 index 0000000000000000000000000000000000000000..a3201f19ce1061e91d62bd05a52e09e332b7d215 GIT binary patch literal 106807 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 Q2jE9uMn$?@%GmG!0VK#2DF6Tf literal 0 HcmV?d00001 diff --git a/src/test/resources/visual-baselines/proposal-v2-layered/modern_proposal-page-1.png b/src/test/resources/visual-baselines/proposal-v2-layered/modern_proposal-page-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8942e45378510739993c02bdb4644e71e088057e GIT binary patch literal 6860 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 literal 0 HcmV?d00001