@printwithsynergy/artwork-pdf-editor 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/LICENSE +62 -0
  2. package/dist/components/AccessibilityHintsPanel.d.ts +142 -0
  3. package/dist/components/AccessibilityHintsPanel.d.ts.map +1 -0
  4. package/dist/components/AccessibilityHintsPanel.js +158 -0
  5. package/dist/components/AccessibilityHintsPanel.js.map +1 -0
  6. package/dist/components/AnnotationOverlay.d.ts +142 -0
  7. package/dist/components/AnnotationOverlay.d.ts.map +1 -0
  8. package/dist/components/AnnotationOverlay.js +141 -0
  9. package/dist/components/AnnotationOverlay.js.map +1 -0
  10. package/dist/components/AnnotationsSidebar.d.ts +98 -0
  11. package/dist/components/AnnotationsSidebar.d.ts.map +1 -0
  12. package/dist/components/AnnotationsSidebar.js +100 -0
  13. package/dist/components/AnnotationsSidebar.js.map +1 -0
  14. package/dist/components/BarcodeGeneratorPanel.d.ts +58 -0
  15. package/dist/components/BarcodeGeneratorPanel.d.ts.map +1 -0
  16. package/dist/components/BarcodeGeneratorPanel.js +91 -0
  17. package/dist/components/BarcodeGeneratorPanel.js.map +1 -0
  18. package/dist/components/BraillePanel.d.ts +99 -0
  19. package/dist/components/BraillePanel.d.ts.map +1 -0
  20. package/dist/components/BraillePanel.js +221 -0
  21. package/dist/components/BraillePanel.js.map +1 -0
  22. package/dist/components/BrandAssetsPanel.d.ts +130 -0
  23. package/dist/components/BrandAssetsPanel.d.ts.map +1 -0
  24. package/dist/components/BrandAssetsPanel.js +125 -0
  25. package/dist/components/BrandAssetsPanel.js.map +1 -0
  26. package/dist/components/BrandConsistencyPanel.d.ts +140 -0
  27. package/dist/components/BrandConsistencyPanel.d.ts.map +1 -0
  28. package/dist/components/BrandConsistencyPanel.js +158 -0
  29. package/dist/components/BrandConsistencyPanel.js.map +1 -0
  30. package/dist/components/ComplianceFindingsPanel.d.ts +62 -0
  31. package/dist/components/ComplianceFindingsPanel.d.ts.map +1 -0
  32. package/dist/components/ComplianceFindingsPanel.js +118 -0
  33. package/dist/components/ComplianceFindingsPanel.js.map +1 -0
  34. package/dist/components/DesignSuggestionsPanel.d.ts +148 -0
  35. package/dist/components/DesignSuggestionsPanel.d.ts.map +1 -0
  36. package/dist/components/DesignSuggestionsPanel.js +154 -0
  37. package/dist/components/DesignSuggestionsPanel.js.map +1 -0
  38. package/dist/components/DielineParametersPanel.d.ts +62 -0
  39. package/dist/components/DielineParametersPanel.d.ts.map +1 -0
  40. package/dist/components/DielineParametersPanel.js +170 -0
  41. package/dist/components/DielineParametersPanel.js.map +1 -0
  42. package/dist/components/DielinePreview.d.ts +150 -0
  43. package/dist/components/DielinePreview.d.ts.map +1 -0
  44. package/dist/components/DielinePreview.js +146 -0
  45. package/dist/components/DielinePreview.js.map +1 -0
  46. package/dist/components/EditorApp.d.ts +18 -3
  47. package/dist/components/EditorApp.d.ts.map +1 -1
  48. package/dist/components/EditorApp.js +42 -7
  49. package/dist/components/EditorApp.js.map +1 -1
  50. package/dist/components/EditorCanvas.d.ts +31 -2
  51. package/dist/components/EditorCanvas.d.ts.map +1 -1
  52. package/dist/components/EditorCanvas.js +97 -16
  53. package/dist/components/EditorCanvas.js.map +1 -1
  54. package/dist/components/EmailNotifyPanel.d.ts +165 -0
  55. package/dist/components/EmailNotifyPanel.d.ts.map +1 -0
  56. package/dist/components/EmailNotifyPanel.js +211 -0
  57. package/dist/components/EmailNotifyPanel.js.map +1 -0
  58. package/dist/components/FileDropZone.d.ts +9 -1
  59. package/dist/components/FileDropZone.d.ts.map +1 -1
  60. package/dist/components/FileDropZone.js +53 -5
  61. package/dist/components/FileDropZone.js.map +1 -1
  62. package/dist/components/FoldEditorPanel.d.ts +68 -0
  63. package/dist/components/FoldEditorPanel.d.ts.map +1 -0
  64. package/dist/components/FoldEditorPanel.js +65 -0
  65. package/dist/components/FoldEditorPanel.js.map +1 -0
  66. package/dist/components/FoldPreviewOverlay.d.ts +48 -0
  67. package/dist/components/FoldPreviewOverlay.d.ts.map +1 -0
  68. package/dist/components/FoldPreviewOverlay.js +182 -0
  69. package/dist/components/FoldPreviewOverlay.js.map +1 -0
  70. package/dist/components/Gs1DigitalLinkPanel.d.ts +103 -0
  71. package/dist/components/Gs1DigitalLinkPanel.d.ts.map +1 -0
  72. package/dist/components/Gs1DigitalLinkPanel.js +199 -0
  73. package/dist/components/Gs1DigitalLinkPanel.js.map +1 -0
  74. package/dist/components/HistoryPanel.d.ts +39 -0
  75. package/dist/components/HistoryPanel.d.ts.map +1 -0
  76. package/dist/components/HistoryPanel.js +72 -0
  77. package/dist/components/HistoryPanel.js.map +1 -0
  78. package/dist/components/IccSoftProofOverlay.d.ts +67 -0
  79. package/dist/components/IccSoftProofOverlay.d.ts.map +1 -0
  80. package/dist/components/IccSoftProofOverlay.js +119 -0
  81. package/dist/components/IccSoftProofOverlay.js.map +1 -0
  82. package/dist/components/ImposePanel.d.ts +71 -0
  83. package/dist/components/ImposePanel.d.ts.map +1 -0
  84. package/dist/components/ImposePanel.js +127 -0
  85. package/dist/components/ImposePanel.js.map +1 -0
  86. package/dist/components/InksPanel.d.ts +61 -0
  87. package/dist/components/InksPanel.d.ts.map +1 -0
  88. package/dist/components/InksPanel.js +84 -0
  89. package/dist/components/InksPanel.js.map +1 -0
  90. package/dist/components/JobSetupPanel.d.ts +118 -0
  91. package/dist/components/JobSetupPanel.d.ts.map +1 -0
  92. package/dist/components/JobSetupPanel.js +169 -0
  93. package/dist/components/JobSetupPanel.js.map +1 -0
  94. package/dist/components/LayersPanel.d.ts.map +1 -1
  95. package/dist/components/LayersPanel.js +1 -0
  96. package/dist/components/LayersPanel.js.map +1 -1
  97. package/dist/components/MarkLibraryPanel.d.ts +131 -0
  98. package/dist/components/MarkLibraryPanel.d.ts.map +1 -0
  99. package/dist/components/MarkLibraryPanel.js +184 -0
  100. package/dist/components/MarkLibraryPanel.js.map +1 -0
  101. package/dist/components/MisEstimateButton.d.ts +73 -0
  102. package/dist/components/MisEstimateButton.d.ts.map +1 -0
  103. package/dist/components/MisEstimateButton.js +57 -0
  104. package/dist/components/MisEstimateButton.js.map +1 -0
  105. package/dist/components/NutritionPanel.d.ts +118 -0
  106. package/dist/components/NutritionPanel.d.ts.map +1 -0
  107. package/dist/components/NutritionPanel.js +169 -0
  108. package/dist/components/NutritionPanel.js.map +1 -0
  109. package/dist/components/PageNavigator.d.ts.map +1 -1
  110. package/dist/components/PageNavigator.js +6 -1
  111. package/dist/components/PageNavigator.js.map +1 -1
  112. package/dist/components/PaletteManager.d.ts +32 -0
  113. package/dist/components/PaletteManager.d.ts.map +1 -0
  114. package/dist/components/PaletteManager.js +89 -0
  115. package/dist/components/PaletteManager.js.map +1 -0
  116. package/dist/components/PaletteToSpotPanel.d.ts +122 -0
  117. package/dist/components/PaletteToSpotPanel.d.ts.map +1 -0
  118. package/dist/components/PaletteToSpotPanel.js +160 -0
  119. package/dist/components/PaletteToSpotPanel.js.map +1 -0
  120. package/dist/components/PreflightAutoFixPanel.d.ts +110 -0
  121. package/dist/components/PreflightAutoFixPanel.d.ts.map +1 -0
  122. package/dist/components/PreflightAutoFixPanel.js +119 -0
  123. package/dist/components/PreflightAutoFixPanel.js.map +1 -0
  124. package/dist/components/PreflightDiffPanel.d.ts +127 -0
  125. package/dist/components/PreflightDiffPanel.d.ts.map +1 -0
  126. package/dist/components/PreflightDiffPanel.js +0 -0
  127. package/dist/components/PreflightDiffPanel.js.map +1 -0
  128. package/dist/components/ProcessRulesPanel.d.ts +81 -0
  129. package/dist/components/ProcessRulesPanel.d.ts.map +1 -0
  130. package/dist/components/ProcessRulesPanel.js +143 -0
  131. package/dist/components/ProcessRulesPanel.js.map +1 -0
  132. package/dist/components/SlackNotifyPanel.d.ts +139 -0
  133. package/dist/components/SlackNotifyPanel.d.ts.map +1 -0
  134. package/dist/components/SlackNotifyPanel.js +133 -0
  135. package/dist/components/SlackNotifyPanel.js.map +1 -0
  136. package/dist/components/SmartSpotMatchPanel.d.ts +143 -0
  137. package/dist/components/SmartSpotMatchPanel.d.ts.map +1 -0
  138. package/dist/components/SmartSpotMatchPanel.js +159 -0
  139. package/dist/components/SmartSpotMatchPanel.js.map +1 -0
  140. package/dist/components/StreamingRenderProgress.d.ts +60 -0
  141. package/dist/components/StreamingRenderProgress.d.ts.map +1 -0
  142. package/dist/components/StreamingRenderProgress.js +99 -0
  143. package/dist/components/StreamingRenderProgress.js.map +1 -0
  144. package/dist/components/SwatchesPicker.d.ts +83 -0
  145. package/dist/components/SwatchesPicker.d.ts.map +1 -0
  146. package/dist/components/SwatchesPicker.js +151 -0
  147. package/dist/components/SwatchesPicker.js.map +1 -0
  148. package/dist/components/TacOverlay.d.ts +47 -0
  149. package/dist/components/TacOverlay.d.ts.map +1 -0
  150. package/dist/components/TacOverlay.js +116 -0
  151. package/dist/components/TacOverlay.js.map +1 -0
  152. package/dist/components/TrapEditorPanel.d.ts +52 -0
  153. package/dist/components/TrapEditorPanel.d.ts.map +1 -0
  154. package/dist/components/TrapEditorPanel.js +64 -0
  155. package/dist/components/TrapEditorPanel.js.map +1 -0
  156. package/dist/components/TrapPreviewOverlay.d.ts +64 -0
  157. package/dist/components/TrapPreviewOverlay.d.ts.map +1 -0
  158. package/dist/components/TrapPreviewOverlay.js +120 -0
  159. package/dist/components/TrapPreviewOverlay.js.map +1 -0
  160. package/dist/components/VariantMatrixPanel.d.ts +61 -0
  161. package/dist/components/VariantMatrixPanel.d.ts.map +1 -0
  162. package/dist/components/VariantMatrixPanel.js +97 -0
  163. package/dist/components/VariantMatrixPanel.js.map +1 -0
  164. package/dist/components/VariantMatrixVersionPanel.d.ts +122 -0
  165. package/dist/components/VariantMatrixVersionPanel.d.ts.map +1 -0
  166. package/dist/components/VariantMatrixVersionPanel.js +162 -0
  167. package/dist/components/VariantMatrixVersionPanel.js.map +1 -0
  168. package/dist/components/WebhookNotifyPanel.d.ts +160 -0
  169. package/dist/components/WebhookNotifyPanel.d.ts.map +1 -0
  170. package/dist/components/WebhookNotifyPanel.js +100 -0
  171. package/dist/components/WebhookNotifyPanel.js.map +1 -0
  172. package/dist/components/WhiteUnderbasePanel.d.ts +107 -0
  173. package/dist/components/WhiteUnderbasePanel.d.ts.map +1 -0
  174. package/dist/components/WhiteUnderbasePanel.js +104 -0
  175. package/dist/components/WhiteUnderbasePanel.js.map +1 -0
  176. package/dist/hooks/useEditorMode.d.ts +25 -5
  177. package/dist/hooks/useEditorMode.d.ts.map +1 -1
  178. package/dist/hooks/useEditorMode.js +18 -5
  179. package/dist/hooks/useEditorMode.js.map +1 -1
  180. package/dist/index.d.ts +51 -2
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +51 -2
  183. package/dist/index.js.map +1 -1
  184. package/dist/lens/preflight-findings.d.ts.map +1 -1
  185. package/dist/lens/preflight-findings.js.map +1 -1
  186. package/dist/lib/barcode-scan.d.ts +154 -0
  187. package/dist/lib/barcode-scan.d.ts.map +1 -0
  188. package/dist/lib/barcode-scan.js +152 -0
  189. package/dist/lib/barcode-scan.js.map +1 -0
  190. package/dist/lib/color-math.d.ts +76 -0
  191. package/dist/lib/color-math.d.ts.map +1 -0
  192. package/dist/lib/color-math.js +96 -0
  193. package/dist/lib/color-math.js.map +1 -0
  194. package/dist/lib/dieline-template.d.ts +87 -0
  195. package/dist/lib/dieline-template.d.ts.map +1 -1
  196. package/dist/lib/dieline-template.js +163 -0
  197. package/dist/lib/dieline-template.js.map +1 -1
  198. package/dist/lib/editor-config.d.ts +390 -0
  199. package/dist/lib/editor-config.d.ts.map +1 -1
  200. package/dist/lib/editor-config.js +90 -0
  201. package/dist/lib/editor-config.js.map +1 -1
  202. package/dist/lib/fold-geometry.d.ts +144 -0
  203. package/dist/lib/fold-geometry.d.ts.map +1 -0
  204. package/dist/lib/fold-geometry.js +138 -0
  205. package/dist/lib/fold-geometry.js.map +1 -0
  206. package/dist/lib/merge-tokens.d.ts +81 -0
  207. package/dist/lib/merge-tokens.d.ts.map +1 -0
  208. package/dist/lib/merge-tokens.js +88 -0
  209. package/dist/lib/merge-tokens.js.map +1 -0
  210. package/dist/lib/palette-registry.d.ts +40 -0
  211. package/dist/lib/palette-registry.d.ts.map +1 -0
  212. package/dist/lib/palette-registry.js +50 -0
  213. package/dist/lib/palette-registry.js.map +1 -0
  214. package/dist/lib/panel-anchor.d.ts +101 -0
  215. package/dist/lib/panel-anchor.d.ts.map +1 -0
  216. package/dist/lib/panel-anchor.js +68 -0
  217. package/dist/lib/panel-anchor.js.map +1 -0
  218. package/dist/lib/preflight/checks.d.ts.map +1 -1
  219. package/dist/lib/preflight/checks.js +71 -0
  220. package/dist/lib/preflight/checks.js.map +1 -1
  221. package/dist/lib/preflight/types.d.ts.map +1 -1
  222. package/dist/lib/preflight/types.js +11 -0
  223. package/dist/lib/preflight/types.js.map +1 -1
  224. package/dist/lib/rasterize.d.ts +93 -0
  225. package/dist/lib/rasterize.d.ts.map +1 -0
  226. package/dist/lib/rasterize.js +117 -0
  227. package/dist/lib/rasterize.js.map +1 -0
  228. package/dist/lib/separations-registry.d.ts +99 -0
  229. package/dist/lib/separations-registry.d.ts.map +1 -0
  230. package/dist/lib/separations-registry.js +59 -0
  231. package/dist/lib/separations-registry.js.map +1 -0
  232. package/dist/lib/streaming-render.d.ts +100 -0
  233. package/dist/lib/streaming-render.d.ts.map +1 -0
  234. package/dist/lib/streaming-render.js +132 -0
  235. package/dist/lib/streaming-render.js.map +1 -0
  236. package/dist/lib/unwired.d.ts +29 -0
  237. package/dist/lib/unwired.d.ts.map +1 -0
  238. package/dist/lib/unwired.js +58 -0
  239. package/dist/lib/unwired.js.map +1 -0
  240. package/package.json +20 -11
  241. package/dist/components/SeparationsPanel.d.ts +0 -9
  242. package/dist/components/SeparationsPanel.d.ts.map +0 -1
  243. package/dist/components/SeparationsPanel.js +0 -168
  244. package/dist/components/SeparationsPanel.js.map +0 -1
@@ -0,0 +1,146 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ "use client";
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ /** Default preview size. Tight enough for a sidebar slot, big enough
5
+ * to read panel roles at a glance. */
6
+ const DEFAULT_SIZE_PX = 160;
7
+ /** SVG gutter around the dieline so panel strokes don't kiss the edge. */
8
+ const GUTTER_PX = 8;
9
+ /** Pixel tolerance for treating two panel-bbox edges as "touching".
10
+ * In viewport-projected coords a half-pixel slop covers float drift
11
+ * from the bbox → scaled-corner pipeline without spuriously matching
12
+ * visibly-separated panels. Hosts that need a stricter test can drive
13
+ * `computeDielinePreviewLayout` themselves over their own constant. */
14
+ const ADJACENCY_TOLERANCE_PX = 0.5;
15
+ /**
16
+ * Pure geometry helper — projects the panel registry + fold config
17
+ * into the preview viewport at `sizePx` square. Exposed for tests
18
+ * and for hosts that want to drive their own SVG / canvas renderer
19
+ * over the same numbers.
20
+ *
21
+ * Returns an empty layout when `panels` is empty; collapses to a
22
+ * unit scale when every panel has zero extent (mid-edit guard).
23
+ *
24
+ * @public
25
+ */
26
+ export function computeDielinePreviewLayout(panelMetadata, foldConfig, sizePx) {
27
+ if (panelMetadata.panels.length === 0) {
28
+ return { panels: [], hinges: [], scale: 1 };
29
+ }
30
+ // AABB across every panel's bbox in source units.
31
+ let minX = Number.POSITIVE_INFINITY;
32
+ let minY = Number.POSITIVE_INFINITY;
33
+ let maxX = Number.NEGATIVE_INFINITY;
34
+ let maxY = Number.NEGATIVE_INFINITY;
35
+ for (const p of panelMetadata.panels) {
36
+ if (p.bbox.x < minX)
37
+ minX = p.bbox.x;
38
+ if (p.bbox.y < minY)
39
+ minY = p.bbox.y;
40
+ if (p.bbox.x + p.bbox.width > maxX)
41
+ maxX = p.bbox.x + p.bbox.width;
42
+ if (p.bbox.y + p.bbox.height > maxY)
43
+ maxY = p.bbox.y + p.bbox.height;
44
+ }
45
+ const spanX = maxX - minX;
46
+ const spanY = maxY - minY;
47
+ const longest = Math.max(spanX, spanY);
48
+ // Defensive: degenerate registries (all-zero bboxes) get unit scale
49
+ // so we still render *something* and don't divide by zero.
50
+ const scale = longest > 0 ? (sizePx - 2 * GUTTER_PX) / longest : 1;
51
+ const panels = panelMetadata.panels.map((p) => {
52
+ const out = {
53
+ id: p.id,
54
+ x: GUTTER_PX + (p.bbox.x - minX) * scale,
55
+ y: GUTTER_PX + (p.bbox.y - minY) * scale,
56
+ width: p.bbox.width * scale,
57
+ height: p.bbox.height * scale,
58
+ };
59
+ if (p.name !== undefined)
60
+ out.name = p.name;
61
+ if (p.role !== undefined)
62
+ out.role = p.role;
63
+ return out;
64
+ });
65
+ const panelById = new Map(panels.map((p) => [p.id, p]));
66
+ const hinges = [];
67
+ if (foldConfig) {
68
+ for (const edge of foldConfig.edges) {
69
+ const a = panelById.get(edge.panelA);
70
+ const b = panelById.get(edge.panelB);
71
+ if (!a || !b)
72
+ continue;
73
+ // Hinge segment = the overlap of the two panels' bbox edges.
74
+ // For non-touching panels we still draw a connector between
75
+ // their bbox centers so the operator can see the fold intent.
76
+ hinges.push({
77
+ id: edge.id,
78
+ ...hingeBetween(a, b),
79
+ direction: edge.direction ?? "mountain",
80
+ });
81
+ }
82
+ }
83
+ return { panels, hinges, scale };
84
+ }
85
+ /**
86
+ * Compute the hinge segment between two laid-out panels. Returns the
87
+ * shared bbox edge when the panels touch; otherwise returns a connector
88
+ * between their centers so dangling-fold cases still render visibly.
89
+ */
90
+ function hingeBetween(a, b) {
91
+ const aRight = a.x + a.width;
92
+ const aBottom = a.y + a.height;
93
+ const bRight = b.x + b.width;
94
+ const bBottom = b.y + b.height;
95
+ // Horizontal-adjacent: a is left of b, edge is x = aRight ≈ b.x.
96
+ if (Math.abs(aRight - b.x) < ADJACENCY_TOLERANCE_PX ||
97
+ Math.abs(bRight - a.x) < ADJACENCY_TOLERANCE_PX) {
98
+ const x = Math.abs(aRight - b.x) < ADJACENCY_TOLERANCE_PX ? aRight : a.x;
99
+ const y1 = Math.max(a.y, b.y);
100
+ const y2 = Math.min(aBottom, bBottom);
101
+ return { x1: x, y1, x2: x, y2 };
102
+ }
103
+ // Vertical-adjacent: a is above b, edge is y = aBottom ≈ b.y.
104
+ if (Math.abs(aBottom - b.y) < ADJACENCY_TOLERANCE_PX ||
105
+ Math.abs(bBottom - a.y) < ADJACENCY_TOLERANCE_PX) {
106
+ const y = Math.abs(aBottom - b.y) < ADJACENCY_TOLERANCE_PX ? aBottom : a.y;
107
+ const x1 = Math.max(a.x, b.x);
108
+ const x2 = Math.min(aRight, bRight);
109
+ return { x1, y1: y, x2, y2: y };
110
+ }
111
+ // Non-touching: connect centers.
112
+ return {
113
+ x1: a.x + a.width / 2,
114
+ y1: a.y + a.height / 2,
115
+ x2: b.x + b.width / 2,
116
+ y2: b.y + b.height / 2,
117
+ };
118
+ }
119
+ /**
120
+ * @public
121
+ */
122
+ export function DielinePreview({ panelMetadata, foldConfig, templateId, sizePx = DEFAULT_SIZE_PX, activePanelId, }) {
123
+ const headerLabel = templateId ? `Dieline preview — ${templateId}` : "Dieline preview";
124
+ if (!panelMetadata || panelMetadata.panels.length === 0) {
125
+ return (_jsxs("section", { "data-testid": "dieline-preview", "aria-label": "Dieline preview", style: { padding: "0.5rem" }, children: [_jsx("header", { style: { fontSize: "0.75rem", color: "#666", marginBottom: "0.5rem" }, children: headerLabel }), _jsx("div", { "data-testid": "dieline-preview-empty", style: {
126
+ width: sizePx,
127
+ height: sizePx,
128
+ display: "flex",
129
+ alignItems: "center",
130
+ justifyContent: "center",
131
+ border: "1px dashed #ccc",
132
+ borderRadius: 4,
133
+ color: "#888",
134
+ fontSize: "0.75rem",
135
+ textAlign: "center",
136
+ padding: "0.5rem",
137
+ boxSizing: "border-box",
138
+ }, children: "No dieline loaded" })] }));
139
+ }
140
+ const layout = computeDielinePreviewLayout(panelMetadata, foldConfig, sizePx);
141
+ return (_jsxs("section", { "data-testid": "dieline-preview", "aria-label": "Dieline preview", style: { padding: "0.5rem" }, children: [_jsx("header", { style: { fontSize: "0.75rem", color: "#666", marginBottom: "0.5rem" }, children: headerLabel }), _jsxs("svg", { "data-testid": "dieline-preview-svg", width: sizePx, height: sizePx, viewBox: `0 0 ${sizePx} ${sizePx}`, role: "img", "aria-label": `Dieline thumbnail with ${layout.panels.length} panel${layout.panels.length === 1 ? "" : "s"}`, style: { border: "1px solid #ddd", background: "#fafafa", borderRadius: 4 }, children: [layout.panels.map((p) => {
142
+ const isActive = p.id === activePanelId;
143
+ return (_jsx("rect", { "data-testid": `dieline-preview-panel-${p.id}`, x: p.x, y: p.y, width: p.width, height: p.height, fill: isActive ? "#e0ecff" : "#fff", stroke: isActive ? "#2563eb" : "#222", strokeWidth: isActive ? 1.5 : 1 }, p.id));
144
+ }), layout.hinges.map((h) => (_jsx("line", { "data-testid": `dieline-preview-hinge-${h.id}`, x1: h.x1, y1: h.y1, x2: h.x2, y2: h.y2, stroke: h.direction === "mountain" ? "#2563eb" : "#dc2626", strokeWidth: 1.5, strokeDasharray: h.direction === "valley" ? "3 2" : undefined }, h.id)))] })] }));
145
+ }
146
+ //# sourceMappingURL=DielinePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DielinePreview.js","sourceRoot":"","sources":["../../src/components/DielinePreview.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type EditorMode } from "../hooks/useEditorMode";
2
- import type { Page } from "../lib/dieline-template";
3
- import { type EditorConfig } from "../lib/editor-config";
2
+ import { type Page } from "../lib/dieline-template";
3
+ import { type EditorConfig, type PaletteId } from "../lib/editor-config";
4
4
  import { type CanvasObj } from "./EditorCanvas";
5
5
  import { type TopBarProps } from "./TopBar";
6
6
  type Phase = "upload" | "checking" | "preflight" | "editor";
@@ -50,7 +50,22 @@ export type EditorAppProps = {
50
50
  bleedMm?: number;
51
51
  /** Host-supplied top bar configuration (logo, extra CTAs, etc.). */
52
52
  topBar?: Partial<TopBarProps>;
53
+ /**
54
+ * Initial palette-visibility map. Each {@link PaletteId} entry is
55
+ * `true` (visible) or `false` (hidden); absent ids default to
56
+ * visible. Merged into `config.panelVisibility` once at mount; the
57
+ * host's `onPanelVisibilityChange` callback receives the merged
58
+ * next-state on every toggle.
59
+ */
60
+ initialPanelVisibility?: Partial<Record<PaletteId, boolean>>;
61
+ /**
62
+ * Fires whenever the user toggles a palette via `PaletteManager`
63
+ * (desktop) or the mobile drawer's "Panels" section. The host is
64
+ * responsible for persisting (e.g. localStorage keyed by user +
65
+ * document) — the editor doesn't own this state.
66
+ */
67
+ onPanelVisibilityChange?: (next: Partial<Record<PaletteId, boolean>>) => void;
53
68
  };
54
- export declare function EditorApp({ demo, initialPhase, initialObjects, initialPageSize, initialPages, preferMode, config: configOverrides, bleedMm, topBar, }: EditorAppProps): import("react/jsx-runtime").JSX.Element;
69
+ export declare function EditorApp({ demo, initialPhase, initialObjects, initialPageSize, initialPages, preferMode, config: configOverrides, bleedMm, topBar, initialPanelVisibility, onPanelVisibilityChange, }: EditorAppProps): import("react/jsx-runtime").JSX.Element;
55
70
  export {};
56
71
  //# sourceMappingURL=EditorApp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorApp.d.ts","sourceRoot":"","sources":["../../src/components/EditorApp.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,wBAAwB,CAAC;AAIxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,gBAAgB,CAAC;AAI9D,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,KAAK,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;6DACyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB;iFAC6E;IAC7E,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B;iFAC6E;IAC7E,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACjC,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B;qFACiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/B,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,IAAY,EACZ,YAAuB,EACvB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,UAAmB,EACnB,MAAM,EAAE,eAAe,EACvB,OAA0B,EAC1B,MAAM,GACP,EAAE,cAAc,2CA6PhB"}
1
+ {"version":3,"file":"EditorApp.d.ts","sourceRoot":"","sources":["../../src/components/EditorApp.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,wBAAwB,CAAC;AAIxE,OAAO,EAAiB,KAAK,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,gBAAgB,CAAC;AAI9D,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,KAAK,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;6DACyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB;iFAC6E;IAC7E,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B;iFAC6E;IAC7E,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACjC,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B;qFACiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;CAC/E,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,IAAY,EACZ,YAAuB,EACvB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,UAAmB,EACnB,MAAM,EAAE,eAAe,EACvB,OAA0B,EAC1B,MAAM,EACN,sBAAsB,EACtB,uBAAuB,GACxB,EAAE,cAAc,2CAmShB"}
@@ -6,13 +6,14 @@ import { useEditorMode } from "../hooks/useEditorMode";
6
6
  import { useIsMobile } from "../hooks/useIsMobile";
7
7
  import { usePreflight } from "../hooks/usePreflight";
8
8
  import { DEFAULT_BLEED_MM } from "../lib/bleed";
9
- import { resolveConfig } from "../lib/editor-config";
9
+ import { dielineToPage } from "../lib/dieline-template";
10
+ import { isPanelVisible, resolveConfig, } from "../lib/editor-config";
10
11
  import { EditorCanvas } from "./EditorCanvas";
11
- import { PageNavigator } from "./PageNavigator";
12
12
  import { FileDropZone } from "./FileDropZone";
13
+ import { PageNavigator } from "./PageNavigator";
13
14
  import { PreflightPanel } from "./PreflightPanel";
14
15
  import { TopBar } from "./TopBar";
15
- export function EditorApp({ demo = false, initialPhase = "upload", initialObjects, initialPageSize, initialPages, preferMode = "auto", config: configOverrides, bleedMm = DEFAULT_BLEED_MM, topBar, }) {
16
+ export function EditorApp({ demo = false, initialPhase = "upload", initialObjects, initialPageSize, initialPages, preferMode = "auto", config: configOverrides, bleedMm = DEFAULT_BLEED_MM, topBar, initialPanelVisibility, onPanelVisibilityChange, }) {
16
17
  // Multi-page seed wins over the single-page convenience props. We
17
18
  // wrap legacy `initialObjects` / `initialPageSize` into a single-page
18
19
  // array so the rest of EditorApp can treat everything as multi-page.
@@ -75,8 +76,24 @@ export function EditorApp({ demo = false, initialPhase = "upload", initialObject
75
76
  const [report, setReport] = useState(null);
76
77
  const { state: preflightState, run: runPreflight } = usePreflight();
77
78
  const [menuOpen, setMenuOpen] = useState(false);
79
+ const [panelVisibility, setPanelVisibility] = useState(initialPanelVisibility ?? {});
78
80
  const isMobile = useIsMobile();
79
- const config = resolveConfig(mode, configOverrides);
81
+ // Per-instance overrides merge config.panelVisibility (if set) on
82
+ // top of the editor's mutable panelVisibility state. The mutable
83
+ // state wins so user toggles outlive a config-override prop change.
84
+ const baseConfig = resolveConfig(mode, configOverrides);
85
+ const config = {
86
+ ...baseConfig,
87
+ panelVisibility: { ...baseConfig.panelVisibility, ...panelVisibility },
88
+ };
89
+ function updatePanelVisibility(next) {
90
+ setPanelVisibility(next);
91
+ onPanelVisibilityChange?.(next);
92
+ }
93
+ // Silence "unused" — kept for the upcoming PaletteManager + mobile
94
+ // "Panels" section wire-up; safe to expose now so hosts can preload
95
+ // visibility from a callback round-trip without later refactors.
96
+ void updatePanelVisibility;
80
97
  async function handleFile(f) {
81
98
  setFile(f);
82
99
  setPhase("checking");
@@ -89,6 +106,17 @@ export function EditorApp({ demo = false, initialPhase = "upload", initialObject
89
106
  setPhase("upload");
90
107
  }
91
108
  }
109
+ function handleDieline(dieline) {
110
+ // S2 ingress: a parsed CF2 / DDES / ARD dieline skips the PDF
111
+ // preflight phase (there's nothing to preflight — a dieline file
112
+ // has no rasters, fonts, or color spaces to validate). Seed the
113
+ // pages array directly from `dielineToPage` and jump to the
114
+ // editor.
115
+ const seeded = dielineToPage(dieline, bleedMm);
116
+ setPages([seeded]);
117
+ setCurrentPageIndex(0);
118
+ setPhase("editor");
119
+ }
92
120
  function handleSendToLint() {
93
121
  alert("Job queued for lint node analysis.");
94
122
  }
@@ -104,18 +132,25 @@ export function EditorApp({ demo = false, initialPhase = "upload", initialObject
104
132
  flexDirection: "column",
105
133
  alignItems: "center",
106
134
  gap: "1.25rem",
107
- }, children: [_jsx(FileDropZone, { onFile: handleFile }), !demo && (_jsx("a", { href: "/demo", target: "_blank", rel: "noopener noreferrer", style: {
135
+ }, children: [_jsx(FileDropZone, { onFile: handleFile, onDieline: handleDieline }), !demo && (_jsx("a", { href: "/demo", target: "_blank", rel: "noopener noreferrer", style: {
108
136
  fontSize: "0.85rem",
109
137
  color: "#fc5102",
110
138
  fontWeight: 600,
111
139
  textDecoration: "none",
112
140
  opacity: 0.85,
113
- }, children: "Try the demo editor (no file needed) \u2192" }))] })), phase === "checking" && (_jsx("p", { style: { color: "#995b30" }, children: "Running preflight checks\u2026" })), phase === "preflight" && report && config.enable_preflight_banner && (_jsx(PreflightPanel, { report: report, onProceed: () => setPhase("editor"), onSendToLint: handleSendToLint })), phase === "preflight" && report && !config.enable_preflight_banner && (_jsx(AutoAdvance, { onContinue: () => setPhase("editor") })), phase === "editor" && activePage && (_jsxs("div", { style: {
141
+ }, children: "Try the demo editor (no file needed) \u2192" }))] })), phase === "checking" && (_jsx("p", { style: { color: "#995b30" }, children: "Running preflight checks\u2026" })), phase === "preflight" &&
142
+ report &&
143
+ config.enable_preflight_banner &&
144
+ isPanelVisible(config, "preflight") && (_jsx(PreflightPanel, { report: report, onProceed: () => setPhase("editor"), onSendToLint: handleSendToLint })), phase === "preflight" &&
145
+ report &&
146
+ (!config.enable_preflight_banner || !isPanelVisible(config, "preflight")) && (_jsx(AutoAdvance, { onContinue: () => setPhase("editor") })), phase === "editor" && activePage && (_jsxs("div", { style: {
114
147
  display: "flex",
115
148
  flexDirection: "column",
116
149
  width: "100%",
117
150
  height: "100%",
118
- }, children: [pages.length > 1 && !isMobile && (_jsx(PageNavigator, { pages: pages, currentPageIndex: currentPageIndex, onSelect: setCurrentPageIndex, onAddPage: handleAddPage, ...(pages.length > 1 ? { onDeletePage: handleDeletePage } : {}), variant: "strip" })), _jsx(EditorCanvas, { file: file, report: report, demo: demo, mode: mode, onModeChange: setMode, config: config, bleedMm: activePage.bleedMm, isMobile: isMobile, menuOpen: menuOpen, onMenuOpenChange: setMenuOpen, initialObjects: activePage.objects, initialPageSize: activePage.pageSize, onObjectsChange: (objects) => updateActivePage({ objects }), onPageSizeChange: (pageSize) => updateActivePage({ pageSize }), onBleedMmChange: (bleedMmValue) => updateActivePage({ bleedMm: bleedMmValue }), prependDrawerSections: pages.length > 1 || isMobile
151
+ }, children: [pages.length > 1 && !isMobile && (_jsx(PageNavigator, { pages: pages, currentPageIndex: currentPageIndex, onSelect: setCurrentPageIndex, onAddPage: handleAddPage, ...(pages.length > 1 ? { onDeletePage: handleDeletePage } : {}), variant: "strip" })), _jsx(EditorCanvas, { file: file, report: report, demo: demo, mode: mode, onModeChange: setMode, config: config, bleedMm: activePage.bleedMm, isMobile: isMobile, menuOpen: menuOpen, onMenuOpenChange: setMenuOpen, initialObjects: activePage.objects, initialPageSize: activePage.pageSize, ...(activePage.separations !== undefined
152
+ ? { initialSeparations: activePage.separations }
153
+ : {}), onObjectsChange: (objects) => updateActivePage({ objects }), onPageSizeChange: (pageSize) => updateActivePage({ pageSize }), onBleedMmChange: (bleedMmValue) => updateActivePage({ bleedMm: bleedMmValue }), onSeparationsChange: (separations) => updateActivePage({ separations }), prependDrawerSections: pages.length > 1 || isMobile
119
154
  ? [
120
155
  {
121
156
  title: "Pages",
@@ -1 +1 @@
1
- {"version":3,"file":"EditorApp.js","sourceRoot":"","sources":["../../src/components/EditorApp.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EditorApp.js","sourceRoot":"","sources":["../../src/components/EditorApp.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,22 @@
1
1
  import type { EditorConfig } from "../lib/editor-config";
2
2
  import type { PreflightReport } from "../lib/preflight/types";
3
- type ObjType = "rect" | "ellipse" | "text" | "image";
3
+ import { type EditorSeparation } from "../lib/separations-registry";
4
+ type ObjType = "rect" | "ellipse" | "text" | "image" | "path";
5
+ /**
6
+ * One renderable object on the editor canvas.
7
+ *
8
+ * Intentionally a flat, structural shape (not the richer
9
+ * `@artworkpdf/document-model` `ArtworkObject`) — the published
10
+ * package stays consumable by hosts that don't pull in the
11
+ * document-model dep. The structural fields here mirror the
12
+ * `JobSubmitRequest` payload sent to `apps/service`.
13
+ *
14
+ * `name` falls back to `type` when absent; `locked` makes the object
15
+ * non-interactive (used for the dieline trim rect so users can't
16
+ * drag the trim out of position).
17
+ *
18
+ * @public
19
+ */
4
20
  export type CanvasObj = {
5
21
  id: string;
6
22
  type: ObjType;
@@ -54,6 +70,19 @@ type Props = {
54
70
  }) => void;
55
71
  /** Fired whenever the bleed value changes (drawer input or URL prop sync). */
56
72
  onBleedMmChange?: (bleedMm: number) => void;
73
+ /** AI4: initial spots registered on this page. Threads through to
74
+ * compile-pdf's `separationsOverride` at export time.
75
+ *
76
+ * **Seed-only semantic:** like `initialObjects` and
77
+ * `initialPageSize`, this prop is read once at mount. EditorApp's
78
+ * multi-page wrapper re-mounts EditorCanvas on each page switch
79
+ * (via `key={activePage.id}`), so the per-page seed flows
80
+ * naturally. Hosts that mutate this prop on the live component
81
+ * without changing the `key` will not see the change reflected. */
82
+ initialSeparations?: EditorSeparation[];
83
+ /** Fired whenever the spot registry changes (register/unregister via
84
+ * the fill/stroke pickers' "as spot" affordance). */
85
+ onSeparationsChange?: (separations: EditorSeparation[]) => void;
57
86
  /** Extra collapsible sections added to the *top* of the mobile drawer
58
87
  * (used by `EditorApp` to insert the `PageNavigator` stack when the
59
88
  * document is multi-page). */
@@ -63,6 +92,6 @@ type Props = {
63
92
  defaultOpen?: boolean;
64
93
  }>;
65
94
  };
66
- export declare function EditorCanvas({ file, report, demo, initialObjects, initialPageSize, mode, onModeChange, config, bleedMm: bleedMmProp, isMobile, menuOpen, onMenuOpenChange, onObjectsChange, onPageSizeChange, onBleedMmChange, prependDrawerSections, }: Props): import("react/jsx-runtime").JSX.Element;
95
+ export declare function EditorCanvas({ file, report, demo, initialObjects, initialPageSize, mode, onModeChange, config, bleedMm: bleedMmProp, isMobile, menuOpen, onMenuOpenChange, onObjectsChange, onPageSizeChange, onBleedMmChange, initialSeparations, onSeparationsChange, prependDrawerSections, }: Props): import("react/jsx-runtime").JSX.Element;
67
96
  export {};
68
97
  //# sourceMappingURL=EditorCanvas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorCanvas.d.ts","sourceRoot":"","sources":["../../src/components/EditorCanvas.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA+B9D,KAAK,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;iEAC6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;oEAEgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAMF,KAAK,KAAK,GAAG;IACX,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C;;mDAE+C;IAC/C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IACjD;+BAC2B;IAC3B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzE,8EAA8E;IAC9E,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C;;mCAE+B;IAC/B,qBAAqB,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC7G,CAAC;AA2IF,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,MAAM,EACN,IAAY,EACZ,cAAc,EACd,eAAe,EACf,IAAc,EACd,YAAY,EACZ,MAAM,EACN,OAAO,EAAE,WAA8B,EACvC,QAAgB,EAChB,QAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,qBAA0B,GAC3B,EAAE,KAAK,2CAmnCP"}
1
+ {"version":3,"file":"EditorCanvas.d.ts","sourceRoot":"","sources":["../../src/components/EditorCanvas.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,6BAA6B,CAAC;AA0CrC,KAAK,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9D;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;iEAC6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;oEAEgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAMF,KAAK,KAAK,GAAG;IACX,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C;;mDAE+C;IAC/C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IACjD;+BAC2B;IAC3B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzE,8EAA8E;IAC9E,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C;;;;;;;;wEAQoE;IACpE,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC;0DACsD;IACtD,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAChE;;mCAE+B;IAC/B,qBAAqB,CAAC,EAAE,KAAK,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,OAAO,OAAO,EAAE,SAAS,CAAC;QACnC,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC,CAAC;CACJ,CAAC;AAkKF,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,MAAM,EACN,IAAY,EACZ,cAAc,EACd,eAAe,EACf,IAAc,EACd,YAAY,EACZ,MAAM,EACN,OAAO,EAAE,WAA8B,EACvC,QAAgB,EAChB,QAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,qBAA0B,GAC3B,EAAE,KAAK,2CAkuCP"}
@@ -3,11 +3,15 @@
3
3
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
4
  import { PDFDocument } from "pdf-lib";
5
5
  import { useCallback, useEffect, useRef, useState } from "react";
6
- import { Ellipse, Image as KonvaImage, Layer, Line, Rect, Stage, Text, Transformer, } from "react-konva";
6
+ import { Ellipse, Image as KonvaImage, Layer, Line, Path, Rect, Stage, Text, Transformer, } from "react-konva";
7
7
  import { DEFAULT_BLEED_MM, formatBleed } from "../lib/bleed";
8
8
  import { templateToInitialState } from "../lib/dieline-template";
9
9
  import { DielineLibraryModal } from "./DielineLibraryModal";
10
+ import { HistoryPanel } from "./HistoryPanel";
10
11
  import { LayersPanel } from "./LayersPanel";
12
+ import { TacOverlay } from "./TacOverlay";
13
+ import { isPanelVisible, showFeature } from "../lib/editor-config";
14
+ import { findSpotByColor, registerSpot, } from "../lib/separations-registry";
11
15
  import { MobileToolDrawer } from "./MobileToolDrawer";
12
16
  // ── constants ─────────────────────────────────────────────────────────────────
13
17
  const SERVICE_URL = (process.env.NEXT_PUBLIC_SERVICE_URL ?? "http://localhost:3001").replace(/\/$/, "");
@@ -73,10 +77,24 @@ function ObjNode({ obj, selected, onSelect, onDragEnd, onTransformEnd, onDblClic
73
77
  if (obj.type === "image" && obj.imageEl) {
74
78
  return (_jsx(KonvaImage, { ...sharedProps, image: obj.imageEl, width: obj.width, height: obj.height, stroke: selected ? BRAND : obj.stroke, strokeWidth: selected ? 1 : obj.strokeWidth }));
75
79
  }
80
+ if (obj.type === "path" && obj.pathData) {
81
+ // Konva.Path renders the SVG `d` string directly. Used by S2 for
82
+ // imported CF2/DDES/ARD dieline paths (cut/crease/perf/bleed lines
83
+ // emitted by `dielineToPage`); the locked flag keeps users from
84
+ // dragging the structural reference geometry.
85
+ //
86
+ // Stroke is NOT overridden when selected — dieline paths encode
87
+ // cut/crease/perf/bleed semantics via stroke color (per
88
+ // DIELINE_PATH_STROKES); masking that with BRAND on selection
89
+ // would hide the structural information. In practice the locked
90
+ // flag means these can't be selected anyway, but keep the
91
+ // semantic stroke in case a future feature unlocks them.
92
+ return (_jsx(Path, { ...sharedProps, data: obj.pathData, stroke: obj.stroke, strokeWidth: obj.strokeWidth, fill: obj.fill === "transparent" ? "" : obj.fill }));
93
+ }
76
94
  return null;
77
95
  }
78
96
  // ── main component ─────────────────────────────────────────────────────────────
79
- export function EditorCanvas({ file, report, demo = false, initialObjects, initialPageSize, mode = "basic", onModeChange, config, bleedMm: bleedMmProp = DEFAULT_BLEED_MM, isMobile = false, menuOpen = false, onMenuOpenChange, onObjectsChange, onPageSizeChange, onBleedMmChange, prependDrawerSections = [], }) {
97
+ export function EditorCanvas({ file, report, demo = false, initialObjects, initialPageSize, mode = "basic", onModeChange, config, bleedMm: bleedMmProp = DEFAULT_BLEED_MM, isMobile = false, menuOpen = false, onMenuOpenChange, onObjectsChange, onPageSizeChange, onBleedMmChange, initialSeparations, onSeparationsChange, prependDrawerSections = [], }) {
80
98
  const containerRef = useRef(null);
81
99
  const stageRef = useRef(null);
82
100
  const trRef = useRef(null);
@@ -89,6 +107,14 @@ export function EditorCanvas({ file, report, demo = false, initialObjects, initi
89
107
  const [objects, setObjects] = useState(initialObjects ?? []);
90
108
  const [history, setHistory] = useState([initialObjects ?? []]);
91
109
  const [historyIdx, setHistoryIdx] = useState(0);
110
+ // AI4 spot registry — per-page; threaded into JobSubmitRequest's
111
+ // separationsOverride at export time. Pure local state; parent
112
+ // (EditorApp) round-trips via onSeparationsChange.
113
+ const [separations, setSeparationsState] = useState(initialSeparations ?? []);
114
+ function updateSeparations(next) {
115
+ setSeparationsState(next);
116
+ onSeparationsChange?.(next);
117
+ }
92
118
  const [selectedId, setSelectedId] = useState(null);
93
119
  const [tool, setTool] = useState("select");
94
120
  const [drawing, setDrawing] = useState(null);
@@ -208,23 +234,40 @@ export function EditorCanvas({ file, report, demo = false, initialObjects, initi
208
234
  }
209
235
  }, [selectedId]);
210
236
  // ── history helpers ─────────────────────────────────────────────────────────
237
+ // Maximum snapshots kept in the undo stack. Prevents unbounded
238
+ // memory growth in long-running editor sessions; X2's HistoryPanel
239
+ // (`packages/editor-app/src/components/HistoryPanel.tsx`) reads the
240
+ // capped stack so the rendered row count stays bounded too.
241
+ const HISTORY_MAX = 100;
211
242
  function commit(next) {
212
- const newHist = history.slice(0, historyIdx + 1).concat([next]);
213
- setHistory(newHist);
214
- setHistoryIdx(newHist.length - 1);
243
+ const truncated = history.slice(0, historyIdx + 1).concat([next]);
244
+ // Drop oldest entries when over the cap. The cursor lands on the
245
+ // last entry (newest) because we just committed it.
246
+ const capped = truncated.length > HISTORY_MAX
247
+ ? truncated.slice(truncated.length - HISTORY_MAX)
248
+ : truncated;
249
+ setHistory(capped);
250
+ setHistoryIdx(capped.length - 1);
215
251
  setObjects(next);
216
252
  }
253
+ function seekHistory(idx) {
254
+ const clamped = Math.max(0, Math.min(history.length - 1, idx));
255
+ const snapshot = history[clamped] ?? [];
256
+ setHistoryIdx(clamped);
257
+ setObjects(snapshot);
258
+ // Preserve selection only if the selected object still exists in
259
+ // the target snapshot — otherwise the selection points at a
260
+ // deleted id (e.g. undoing an "add"). Single consistent rule for
261
+ // all three history-navigation paths (seek / undo / redo).
262
+ if (selectedId && !snapshot.some((o) => o.id === selectedId)) {
263
+ setSelectedId(null);
264
+ }
265
+ }
217
266
  function undo() {
218
- const idx = Math.max(0, historyIdx - 1);
219
- setHistoryIdx(idx);
220
- setObjects(history[idx] ?? []);
221
- setSelectedId(null);
267
+ seekHistory(historyIdx - 1);
222
268
  }
223
269
  function redo() {
224
- const idx = Math.min(history.length - 1, historyIdx + 1);
225
- setHistoryIdx(idx);
226
- setObjects(history[idx] ?? []);
227
- setSelectedId(null);
270
+ seekHistory(historyIdx + 1);
228
271
  }
229
272
  // ── keyboard shortcuts ──────────────────────────────────────────────────────
230
273
  // biome-ignore lint/correctness/useExhaustiveDependencies: commit/undo/redo capture history via closure
@@ -531,6 +574,20 @@ export function EditorCanvas({ file, report, demo = false, initialObjects, initi
531
574
  document: doc,
532
575
  output: { format: "pdf-x4" },
533
576
  ...(report ? { preflightReport: report } : {}),
577
+ // AI4: thread the page's registered spots through as
578
+ // separationsOverride. Strip the editor-only `hex` field on
579
+ // the wire — compile-pdf's Separation shape doesn't carry it
580
+ // (the hex is the editor's lookup key, not a wire field). The
581
+ // remaining fields (name/colorSpace/pantone/lab/type) match
582
+ // document-model's Separation structurally.
583
+ ...(separations.length > 0
584
+ ? {
585
+ separationsOverride: separations.map((s) => {
586
+ const { hex: _hex, ...wire } = s;
587
+ return wire;
588
+ }),
589
+ }
590
+ : {}),
534
591
  };
535
592
  try {
536
593
  const res = await fetch(`${SERVICE_URL}/jobs`, {
@@ -671,7 +728,31 @@ export function EditorCanvas({ file, report, demo = false, initialObjects, initi
671
728
  padding: 0,
672
729
  background: "none",
673
730
  cursor: "pointer",
674
- } })] }), _jsxs("label", { style: {
731
+ } })] }), (() => {
732
+ const existing = findSpotByColor(separations, fillColor);
733
+ if (existing) {
734
+ return (_jsxs("span", { title: `Registered as ${existing.name}`, style: {
735
+ fontSize: "0.72rem",
736
+ color: BRAND,
737
+ padding: "0 0.35rem",
738
+ }, children: ["\u2713 ", existing.name] }));
739
+ }
740
+ return (_jsx("button", { type: "button", onClick: () => {
741
+ const name = window.prompt(`Register ${fillColor} as a spot ink. Name:`);
742
+ if (name?.trim()) {
743
+ updateSeparations(registerSpot(separations, fillColor, name.trim()));
744
+ }
745
+ }, title: "Register this color as a spot ink", style: {
746
+ fontSize: "0.7rem",
747
+ color: MUTED,
748
+ background: "transparent",
749
+ border: `1px solid ${BORDER}`,
750
+ borderRadius: 3,
751
+ padding: "0.15rem 0.35rem",
752
+ cursor: "pointer",
753
+ fontFamily: "inherit",
754
+ }, children: "+ spot" }));
755
+ })(), _jsxs("label", { style: {
675
756
  display: "flex",
676
757
  alignItems: "center",
677
758
  gap: "0.3rem",
@@ -709,14 +790,14 @@ export function EditorCanvas({ file, report, demo = false, initialObjects, initi
709
790
  }, onToggleVisible: toggleVisible })), _jsxs("div", { ref: containerRef, style: { flex: 1, overflow: "hidden", position: "relative" }, children: [_jsx(Stage, { ref: stageRef, width: containerSize.width, height: containerSize.height, scaleX: zoom, scaleY: zoom, x: stagePos.x, y: stagePos.y, onMouseDown: onStagePointerDown, onMouseMove: onStagePointerMove, onMouseUp: onStagePointerUp, onTouchStart: onStagePointerDown, onTouchMove: onStagePointerMove, onTouchEnd: onStagePointerUp, onWheel: onWheel, style: { cursor }, children: _jsxs(Layer, { children: [_jsx(Rect, { x: 3, y: 3, width: pageSize.width, height: pageSize.height, fill: "rgba(0,0,0,0.08)" }), _jsx(Rect, { x: 0, y: 0, width: pageSize.width, height: pageSize.height, fill: "#ffffff", stroke: "#d4d4d8", strokeWidth: 0.5 / zoom, onClick: () => {
710
791
  if (tool === "select")
711
792
  setSelectedId(null);
712
- } }), config.enable_canvas_grid && _jsx(GridLines, { pageSize: pageSize, zoom: zoom }), config.enable_bleed_visualization && (_jsxs(_Fragment, { children: [_jsx(Rect, { x: 0, y: 0, width: pageSize.width, height: pageSize.height, stroke: "#0ea5e9", strokeWidth: 1 / zoom, dash: [6 / zoom, 4 / zoom], listening: false }), _jsx(Text, { text: `BLEED ${formatBleed(bleedMm, "in")}`, x: 6, y: -14 / zoom, fontSize: 10 / zoom, fill: "#0ea5e9", listening: false })] })), visibleObjects.map((obj) => (_jsx(ObjNode, { obj: obj, selected: obj.id === selectedId, onSelect: () => setSelectedId(obj.id), onDragEnd: (x, y) => commit(objects.map((o) => (o.id === obj.id ? { ...o, x, y } : o))), onTransformEnd: (x, y, w, h) => commit(objects.map((o) => o.id === obj.id ? { ...o, x, y, width: w, height: h } : o)), onDblClick: (e) => obj.type === "text" && onTextDblClick(obj.id, e) }, obj.id))), _jsx(Transformer, { ref: trRef, borderStroke: BRAND, borderStrokeWidth: 1, anchorStroke: BRAND, anchorFill: "#fff", anchorSize: 8, rotateEnabled: false, keepRatio: false }), drawing && tool !== "select" && (_jsx(Rect, { x: drawing.w < 0 ? drawing.x + drawing.w : drawing.x, y: drawing.h < 0 ? drawing.y + drawing.h : drawing.y, width: Math.abs(drawing.w), height: Math.abs(drawing.h), fill: tool === "text" ? "rgba(252,81,2,0.08)" : `${fillColor}80`, stroke: BRAND, strokeWidth: 1 / zoom, dash: [4 / zoom, 4 / zoom] }))] }) }), objects.length === 0 && (_jsx("div", { style: {
793
+ } }), config.enable_canvas_grid && _jsx(GridLines, { pageSize: pageSize, zoom: zoom }), config.enable_bleed_visualization && (_jsxs(_Fragment, { children: [_jsx(Rect, { x: 0, y: 0, width: pageSize.width, height: pageSize.height, stroke: "#0ea5e9", strokeWidth: 1 / zoom, dash: [6 / zoom, 4 / zoom], listening: false }), _jsx(Text, { text: `BLEED ${formatBleed(bleedMm, "in")}`, x: 6, y: -14 / zoom, fontSize: 10 / zoom, fill: "#0ea5e9", listening: false })] })), visibleObjects.map((obj) => (_jsx(ObjNode, { obj: obj, selected: obj.id === selectedId, onSelect: () => setSelectedId(obj.id), onDragEnd: (x, y) => commit(objects.map((o) => (o.id === obj.id ? { ...o, x, y } : o))), onTransformEnd: (x, y, w, h) => commit(objects.map((o) => o.id === obj.id ? { ...o, x, y, width: w, height: h } : o)), onDblClick: (e) => obj.type === "text" && onTextDblClick(obj.id, e) }, obj.id))), _jsx(Transformer, { ref: trRef, borderStroke: BRAND, borderStrokeWidth: 1, anchorStroke: BRAND, anchorFill: "#fff", anchorSize: 8, rotateEnabled: false, keepRatio: false }), drawing && tool !== "select" && (_jsx(Rect, { x: drawing.w < 0 ? drawing.x + drawing.w : drawing.x, y: drawing.h < 0 ? drawing.y + drawing.h : drawing.y, width: Math.abs(drawing.w), height: Math.abs(drawing.h), fill: tool === "text" ? "rgba(252,81,2,0.08)" : `${fillColor}80`, stroke: BRAND, strokeWidth: 1 / zoom, dash: [4 / zoom, 4 / zoom] }))] }) }), showFeature(config, "total_ink_coverage_live") && (_jsx(TacOverlay, { stage: stageRef.current, width: containerSize.width, height: containerSize.height, trigger: objects })), objects.length === 0 && (_jsx("div", { style: {
713
794
  position: "absolute",
714
795
  inset: 0,
715
796
  display: "flex",
716
797
  alignItems: "center",
717
798
  justifyContent: "center",
718
799
  pointerEvents: "none",
719
- }, children: _jsx("span", { style: { fontSize: "0.8rem", color: "#94a3b8" }, children: "Use the toolbar to draw shapes, add text, or import an image" }) }))] })] }), selected && (_jsxs("div", { style: {
800
+ }, children: _jsx("span", { style: { fontSize: "0.8rem", color: "#94a3b8" }, children: "Use the toolbar to draw shapes, add text, or import an image" }) }))] }), !isMobile && isPanelVisible(config, "history") && (_jsx(HistoryPanel, { cursor: historyIdx, objectCounts: history.map((snap) => snap.length), onSelect: seekHistory }))] }), selected && (_jsxs("div", { style: {
720
801
  display: "flex",
721
802
  alignItems: "center",
722
803
  gap: "1rem",