From 8c3bb990943526c234f032152e4e7e3d8feeef0b Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Sun, 28 Jun 2026 08:41:15 +0100 Subject: [PATCH] refactor(templates): extract shared widgets to templates.core.widgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the family-neutral widgets — CardWidget, TableWidget, TimelineAxisWidget — and the Divider / AccentStrip / Spacer decoration primitives into com.demcha.compose.document.templates.core.widgets so any template family can reuse them, and retire the now-empty templates.widgets and templates.decorations packages. Repoint the cv.v2 / coverletter.v2 callers and relocate the widget and decoration test mirrors. Pure move — render byte-identical (1612 tests, zero snapshot updates); a deliberate binary break on the 2.0 line (japicmp report-only). --- .../widgets}/AccentStrip.java | 2 +- .../{ => core}/widgets/CardWidget.java | 2 +- .../widgets}/Divider.java | 2 +- .../{decorations => core/widgets}/Spacer.java | 2 +- .../{ => core}/widgets/TableWidget.java | 2 +- .../widgets/TimelineAxisWidget.java | 2 +- .../templates/core/widgets/package-info.java | 21 ++++++++++++++ .../coverletter/v2/presets/PanelLetter.java | 2 +- .../cv/v2/components/SkillTableRenderer.java | 2 +- .../templates/cv/v2/presets/CompactMono.java | 2 +- .../cv/v2/presets/EditorialBlue.java | 2 +- .../templates/cv/v2/presets/Panel.java | 2 +- .../cv/v2/presets/TimelineMinimal.java | 2 +- .../templates/cv/v2/widgets/package-info.java | 6 ++-- .../templates/decorations/package-info.java | 29 ------------------- .../templates/widgets/package-info.java | 14 --------- .../widgets}/AccentStripTest.java | 2 +- .../widgets}/DividerTest.java | 2 +- .../widgets}/SpacerTest.java | 2 +- .../{ => core}/widgets/TableWidgetTest.java | 2 +- 20 files changed, 40 insertions(+), 62 deletions(-) rename src/main/java/com/demcha/compose/document/templates/{decorations => core/widgets}/AccentStrip.java (98%) rename src/main/java/com/demcha/compose/document/templates/{ => core}/widgets/CardWidget.java (99%) rename src/main/java/com/demcha/compose/document/templates/{decorations => core/widgets}/Divider.java (98%) rename src/main/java/com/demcha/compose/document/templates/{decorations => core/widgets}/Spacer.java (98%) rename src/main/java/com/demcha/compose/document/templates/{ => core}/widgets/TableWidget.java (99%) rename src/main/java/com/demcha/compose/document/templates/{ => core}/widgets/TimelineAxisWidget.java (99%) create mode 100644 src/main/java/com/demcha/compose/document/templates/core/widgets/package-info.java delete mode 100644 src/main/java/com/demcha/compose/document/templates/decorations/package-info.java delete mode 100644 src/main/java/com/demcha/compose/document/templates/widgets/package-info.java rename src/test/java/com/demcha/compose/document/templates/{decorations => core/widgets}/AccentStripTest.java (97%) rename src/test/java/com/demcha/compose/document/templates/{decorations => core/widgets}/DividerTest.java (98%) rename src/test/java/com/demcha/compose/document/templates/{decorations => core/widgets}/SpacerTest.java (97%) rename src/test/java/com/demcha/compose/document/templates/{ => core}/widgets/TableWidgetTest.java (98%) diff --git a/src/main/java/com/demcha/compose/document/templates/decorations/AccentStrip.java b/src/main/java/com/demcha/compose/document/templates/core/widgets/AccentStrip.java similarity index 98% rename from src/main/java/com/demcha/compose/document/templates/decorations/AccentStrip.java rename to src/main/java/com/demcha/compose/document/templates/core/widgets/AccentStrip.java index a17e78cea..0fa0ab45d 100644 --- a/src/main/java/com/demcha/compose/document/templates/decorations/AccentStrip.java +++ b/src/main/java/com/demcha/compose/document/templates/core/widgets/AccentStrip.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.decorations; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.node.DocumentNode; import com.demcha.compose.document.node.ShapeNode; diff --git a/src/main/java/com/demcha/compose/document/templates/widgets/CardWidget.java b/src/main/java/com/demcha/compose/document/templates/core/widgets/CardWidget.java similarity index 99% rename from src/main/java/com/demcha/compose/document/templates/widgets/CardWidget.java rename to src/main/java/com/demcha/compose/document/templates/core/widgets/CardWidget.java index c7ec16574..256783d34 100644 --- a/src/main/java/com/demcha/compose/document/templates/widgets/CardWidget.java +++ b/src/main/java/com/demcha/compose/document/templates/core/widgets/CardWidget.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.widgets; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.dsl.PageFlowBuilder; import com.demcha.compose.document.dsl.SectionBuilder; diff --git a/src/main/java/com/demcha/compose/document/templates/decorations/Divider.java b/src/main/java/com/demcha/compose/document/templates/core/widgets/Divider.java similarity index 98% rename from src/main/java/com/demcha/compose/document/templates/decorations/Divider.java rename to src/main/java/com/demcha/compose/document/templates/core/widgets/Divider.java index 7d8bc7fcf..788e3104e 100644 --- a/src/main/java/com/demcha/compose/document/templates/decorations/Divider.java +++ b/src/main/java/com/demcha/compose/document/templates/core/widgets/Divider.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.decorations; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.node.DocumentNode; import com.demcha.compose.document.node.ShapeNode; diff --git a/src/main/java/com/demcha/compose/document/templates/decorations/Spacer.java b/src/main/java/com/demcha/compose/document/templates/core/widgets/Spacer.java similarity index 98% rename from src/main/java/com/demcha/compose/document/templates/decorations/Spacer.java rename to src/main/java/com/demcha/compose/document/templates/core/widgets/Spacer.java index b84d0138a..6dfbffaf8 100644 --- a/src/main/java/com/demcha/compose/document/templates/decorations/Spacer.java +++ b/src/main/java/com/demcha/compose/document/templates/core/widgets/Spacer.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.decorations; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.node.DocumentNode; import com.demcha.compose.document.node.SpacerNode; diff --git a/src/main/java/com/demcha/compose/document/templates/widgets/TableWidget.java b/src/main/java/com/demcha/compose/document/templates/core/widgets/TableWidget.java similarity index 99% rename from src/main/java/com/demcha/compose/document/templates/widgets/TableWidget.java rename to src/main/java/com/demcha/compose/document/templates/core/widgets/TableWidget.java index 3869e5b2a..234080f34 100644 --- a/src/main/java/com/demcha/compose/document/templates/widgets/TableWidget.java +++ b/src/main/java/com/demcha/compose/document/templates/core/widgets/TableWidget.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.widgets; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.dsl.SectionBuilder; import com.demcha.compose.document.style.DocumentColor; diff --git a/src/main/java/com/demcha/compose/document/templates/widgets/TimelineAxisWidget.java b/src/main/java/com/demcha/compose/document/templates/core/widgets/TimelineAxisWidget.java similarity index 99% rename from src/main/java/com/demcha/compose/document/templates/widgets/TimelineAxisWidget.java rename to src/main/java/com/demcha/compose/document/templates/core/widgets/TimelineAxisWidget.java index 3225c3dba..d58dcd463 100644 --- a/src/main/java/com/demcha/compose/document/templates/widgets/TimelineAxisWidget.java +++ b/src/main/java/com/demcha/compose/document/templates/core/widgets/TimelineAxisWidget.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.widgets; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.dsl.SectionBuilder; import com.demcha.compose.document.style.DocumentColor; diff --git a/src/main/java/com/demcha/compose/document/templates/core/widgets/package-info.java b/src/main/java/com/demcha/compose/document/templates/core/widgets/package-info.java new file mode 100644 index 000000000..efe0981ea --- /dev/null +++ b/src/main/java/com/demcha/compose/document/templates/core/widgets/package-info.java @@ -0,0 +1,21 @@ +/** + *

Core — shared visual widgets (widgets)

+ * + *

Family-neutral, composable visual building blocks reusable by every + * template family — they make no CV / invoice / proposal assumptions and read + * only the document DSL plus a {@code BrandTheme}'s tokens.

+ * + * + */ +package com.demcha.compose.document.templates.core.widgets; diff --git a/src/main/java/com/demcha/compose/document/templates/coverletter/v2/presets/PanelLetter.java b/src/main/java/com/demcha/compose/document/templates/coverletter/v2/presets/PanelLetter.java index 19e9a5fd7..05fca820a 100644 --- a/src/main/java/com/demcha/compose/document/templates/coverletter/v2/presets/PanelLetter.java +++ b/src/main/java/com/demcha/compose/document/templates/coverletter/v2/presets/PanelLetter.java @@ -15,7 +15,7 @@ import com.demcha.compose.document.templates.core.text.TextOrnaments; import com.demcha.compose.document.templates.cv.v2.data.CvIdentity; import com.demcha.compose.document.templates.core.theme.BrandTheme; -import com.demcha.compose.document.templates.widgets.CardWidget; +import com.demcha.compose.document.templates.core.widgets.CardWidget; import com.demcha.compose.font.FontName; import java.util.Locale; diff --git a/src/main/java/com/demcha/compose/document/templates/cv/v2/components/SkillTableRenderer.java b/src/main/java/com/demcha/compose/document/templates/cv/v2/components/SkillTableRenderer.java index 09ae948c9..a5c672cfe 100644 --- a/src/main/java/com/demcha/compose/document/templates/cv/v2/components/SkillTableRenderer.java +++ b/src/main/java/com/demcha/compose/document/templates/cv/v2/components/SkillTableRenderer.java @@ -2,7 +2,7 @@ import com.demcha.compose.document.dsl.SectionBuilder; import com.demcha.compose.document.templates.cv.v2.data.SkillGroup; -import com.demcha.compose.document.templates.widgets.TableWidget; +import com.demcha.compose.document.templates.core.widgets.TableWidget; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/CompactMono.java b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/CompactMono.java index 121fe3b3a..2c0fe7404 100644 --- a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/CompactMono.java +++ b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/CompactMono.java @@ -15,7 +15,7 @@ import com.demcha.compose.document.templates.core.identity.Headline; import com.demcha.compose.document.templates.cv.v2.widgets.SectionHeader; import com.demcha.compose.document.templates.cv.v2.widgets.SectionModule; -import com.demcha.compose.document.templates.widgets.CardWidget; +import com.demcha.compose.document.templates.core.widgets.CardWidget; import java.util.List; import java.util.Objects; diff --git a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/EditorialBlue.java b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/EditorialBlue.java index a85d0cf6a..578ee1796 100644 --- a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/EditorialBlue.java +++ b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/EditorialBlue.java @@ -17,7 +17,7 @@ import com.demcha.compose.document.templates.core.theme.BrandTheme; import com.demcha.compose.document.templates.cv.v2.widgets.FlowSectionHeader; import com.demcha.compose.document.templates.core.identity.Masthead; -import com.demcha.compose.document.templates.widgets.TableWidget; +import com.demcha.compose.document.templates.core.widgets.TableWidget; import com.demcha.compose.font.FontName; import java.util.List; diff --git a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/Panel.java b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/Panel.java index 671850da2..d884c8462 100644 --- a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/Panel.java +++ b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/Panel.java @@ -14,7 +14,7 @@ import com.demcha.compose.document.templates.cv.v2.components.*; import com.demcha.compose.document.templates.cv.v2.data.*; import com.demcha.compose.document.templates.core.theme.BrandTheme; -import com.demcha.compose.document.templates.widgets.CardWidget; +import com.demcha.compose.document.templates.core.widgets.CardWidget; import com.demcha.compose.font.FontName; import java.util.List; diff --git a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/TimelineMinimal.java b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/TimelineMinimal.java index 504f3f894..c4a2b2ed2 100644 --- a/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/TimelineMinimal.java +++ b/src/main/java/com/demcha/compose/document/templates/cv/v2/presets/TimelineMinimal.java @@ -20,7 +20,7 @@ import com.demcha.compose.document.templates.cv.v2.data.*; import com.demcha.compose.document.templates.core.theme.BrandTheme; import com.demcha.compose.document.templates.core.identity.SvgGlyph; -import com.demcha.compose.document.templates.widgets.TimelineAxisWidget; +import com.demcha.compose.document.templates.core.widgets.TimelineAxisWidget; import java.util.*; diff --git a/src/main/java/com/demcha/compose/document/templates/cv/v2/widgets/package-info.java b/src/main/java/com/demcha/compose/document/templates/cv/v2/widgets/package-info.java index 4230eb462..56f7ee5ae 100644 --- a/src/main/java/com/demcha/compose/document/templates/cv/v2/widgets/package-info.java +++ b/src/main/java/com/demcha/compose/document/templates/cv/v2/widgets/package-info.java @@ -72,11 +72,11 @@ * * *

Generic widgets that are useful beyond CVs live in - * {@link com.demcha.compose.document.templates.widgets}; for example - * {@link com.demcha.compose.document.templates.widgets.TableWidget} + * {@link com.demcha.compose.document.templates.core.widgets}; for example + * {@link com.demcha.compose.document.templates.core.widgets.TableWidget} * provides configurable fixed-column and grid tables with border, * fill, zebra, padding, and typography options, while - * {@link com.demcha.compose.document.templates.widgets.CardWidget} + * {@link com.demcha.compose.document.templates.core.widgets.CardWidget} * provides a reusable styled card/container shell.

* *

Each widget delegates internally to the lower-level renderers diff --git a/src/main/java/com/demcha/compose/document/templates/decorations/package-info.java b/src/main/java/com/demcha/compose/document/templates/decorations/package-info.java deleted file mode 100644 index 1d56a0ed7..000000000 --- a/src/main/java/com/demcha/compose/document/templates/decorations/package-info.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Templates v2 decoration library — dividers, accent strips, panels, banners, ornaments. - * - *

Decorations are the visual artefacts (lines, strips, soft panels, - * coloured banners) that templates can attach between modules, around a - * header, or as the start/end of a module body. They are first-class - * components rather than baked-in composer logic, so any preset can mix - * and match them and consumers can reuse them in their own templates.

- * - *

This package will be populated during Phase B of the Templates v2 - * migration with at least:

- * - * - * - * @since 1.6.0 - */ -package com.demcha.compose.document.templates.decorations; diff --git a/src/main/java/com/demcha/compose/document/templates/widgets/package-info.java b/src/main/java/com/demcha/compose/document/templates/widgets/package-info.java deleted file mode 100644 index ade81fe6a..000000000 --- a/src/main/java/com/demcha/compose/document/templates/widgets/package-info.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Shared visual widgets available to all template families. - * - *

These widgets sit above the raw document DSL and below - * preset-specific composition. They are deliberately generic: CV, - * proposal, invoice, cover-letter, and future templates can reuse - * them without depending on a CV-only package.

- * - *

Current shared widgets include configurable tables - * ({@link com.demcha.compose.document.templates.widgets.TableWidget}) - * and reusable card/container shells - * ({@link com.demcha.compose.document.templates.widgets.CardWidget}).

- */ -package com.demcha.compose.document.templates.widgets; diff --git a/src/test/java/com/demcha/compose/document/templates/decorations/AccentStripTest.java b/src/test/java/com/demcha/compose/document/templates/core/widgets/AccentStripTest.java similarity index 97% rename from src/test/java/com/demcha/compose/document/templates/decorations/AccentStripTest.java rename to src/test/java/com/demcha/compose/document/templates/core/widgets/AccentStripTest.java index 921823090..c53ac512f 100644 --- a/src/test/java/com/demcha/compose/document/templates/decorations/AccentStripTest.java +++ b/src/test/java/com/demcha/compose/document/templates/core/widgets/AccentStripTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.decorations; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.node.DocumentNode; import com.demcha.compose.document.node.ShapeNode; diff --git a/src/test/java/com/demcha/compose/document/templates/decorations/DividerTest.java b/src/test/java/com/demcha/compose/document/templates/core/widgets/DividerTest.java similarity index 98% rename from src/test/java/com/demcha/compose/document/templates/decorations/DividerTest.java rename to src/test/java/com/demcha/compose/document/templates/core/widgets/DividerTest.java index afd3a8eae..ca18919c3 100644 --- a/src/test/java/com/demcha/compose/document/templates/decorations/DividerTest.java +++ b/src/test/java/com/demcha/compose/document/templates/core/widgets/DividerTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.decorations; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.node.DocumentNode; import com.demcha.compose.document.node.ShapeNode; diff --git a/src/test/java/com/demcha/compose/document/templates/decorations/SpacerTest.java b/src/test/java/com/demcha/compose/document/templates/core/widgets/SpacerTest.java similarity index 97% rename from src/test/java/com/demcha/compose/document/templates/decorations/SpacerTest.java rename to src/test/java/com/demcha/compose/document/templates/core/widgets/SpacerTest.java index e9232900c..56f79cf7b 100644 --- a/src/test/java/com/demcha/compose/document/templates/decorations/SpacerTest.java +++ b/src/test/java/com/demcha/compose/document/templates/core/widgets/SpacerTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.decorations; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.document.node.DocumentNode; import com.demcha.compose.document.node.SpacerNode; diff --git a/src/test/java/com/demcha/compose/document/templates/widgets/TableWidgetTest.java b/src/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java similarity index 98% rename from src/test/java/com/demcha/compose/document/templates/widgets/TableWidgetTest.java rename to src/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java index 652e13497..e85d854a4 100644 --- a/src/test/java/com/demcha/compose/document/templates/widgets/TableWidgetTest.java +++ b/src/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java @@ -1,4 +1,4 @@ -package com.demcha.compose.document.templates.widgets; +package com.demcha.compose.document.templates.core.widgets; import com.demcha.compose.GraphCompose; import com.demcha.compose.document.api.DocumentSession;