@printwithsynergy/artwork-pdf-editor 0.2.0 → 0.3.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 (236) 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/SwatchesPicker.d.ts +83 -0
  141. package/dist/components/SwatchesPicker.d.ts.map +1 -0
  142. package/dist/components/SwatchesPicker.js +151 -0
  143. package/dist/components/SwatchesPicker.js.map +1 -0
  144. package/dist/components/TacOverlay.d.ts +47 -0
  145. package/dist/components/TacOverlay.d.ts.map +1 -0
  146. package/dist/components/TacOverlay.js +116 -0
  147. package/dist/components/TacOverlay.js.map +1 -0
  148. package/dist/components/TrapEditorPanel.d.ts +52 -0
  149. package/dist/components/TrapEditorPanel.d.ts.map +1 -0
  150. package/dist/components/TrapEditorPanel.js +64 -0
  151. package/dist/components/TrapEditorPanel.js.map +1 -0
  152. package/dist/components/TrapPreviewOverlay.d.ts +64 -0
  153. package/dist/components/TrapPreviewOverlay.d.ts.map +1 -0
  154. package/dist/components/TrapPreviewOverlay.js +120 -0
  155. package/dist/components/TrapPreviewOverlay.js.map +1 -0
  156. package/dist/components/VariantMatrixPanel.d.ts +61 -0
  157. package/dist/components/VariantMatrixPanel.d.ts.map +1 -0
  158. package/dist/components/VariantMatrixPanel.js +97 -0
  159. package/dist/components/VariantMatrixPanel.js.map +1 -0
  160. package/dist/components/VariantMatrixVersionPanel.d.ts +122 -0
  161. package/dist/components/VariantMatrixVersionPanel.d.ts.map +1 -0
  162. package/dist/components/VariantMatrixVersionPanel.js +162 -0
  163. package/dist/components/VariantMatrixVersionPanel.js.map +1 -0
  164. package/dist/components/WebhookNotifyPanel.d.ts +160 -0
  165. package/dist/components/WebhookNotifyPanel.d.ts.map +1 -0
  166. package/dist/components/WebhookNotifyPanel.js +100 -0
  167. package/dist/components/WebhookNotifyPanel.js.map +1 -0
  168. package/dist/components/WhiteUnderbasePanel.d.ts +107 -0
  169. package/dist/components/WhiteUnderbasePanel.d.ts.map +1 -0
  170. package/dist/components/WhiteUnderbasePanel.js +104 -0
  171. package/dist/components/WhiteUnderbasePanel.js.map +1 -0
  172. package/dist/hooks/useEditorMode.d.ts +25 -5
  173. package/dist/hooks/useEditorMode.d.ts.map +1 -1
  174. package/dist/hooks/useEditorMode.js +18 -5
  175. package/dist/hooks/useEditorMode.js.map +1 -1
  176. package/dist/index.d.ts +49 -2
  177. package/dist/index.d.ts.map +1 -1
  178. package/dist/index.js +49 -2
  179. package/dist/index.js.map +1 -1
  180. package/dist/lens/preflight-findings.d.ts.map +1 -1
  181. package/dist/lens/preflight-findings.js.map +1 -1
  182. package/dist/lib/barcode-scan.d.ts +154 -0
  183. package/dist/lib/barcode-scan.d.ts.map +1 -0
  184. package/dist/lib/barcode-scan.js +152 -0
  185. package/dist/lib/barcode-scan.js.map +1 -0
  186. package/dist/lib/color-math.d.ts +76 -0
  187. package/dist/lib/color-math.d.ts.map +1 -0
  188. package/dist/lib/color-math.js +96 -0
  189. package/dist/lib/color-math.js.map +1 -0
  190. package/dist/lib/dieline-template.d.ts +87 -0
  191. package/dist/lib/dieline-template.d.ts.map +1 -1
  192. package/dist/lib/dieline-template.js +163 -0
  193. package/dist/lib/dieline-template.js.map +1 -1
  194. package/dist/lib/editor-config.d.ts +384 -0
  195. package/dist/lib/editor-config.d.ts.map +1 -1
  196. package/dist/lib/editor-config.js +89 -0
  197. package/dist/lib/editor-config.js.map +1 -1
  198. package/dist/lib/fold-geometry.d.ts +144 -0
  199. package/dist/lib/fold-geometry.d.ts.map +1 -0
  200. package/dist/lib/fold-geometry.js +138 -0
  201. package/dist/lib/fold-geometry.js.map +1 -0
  202. package/dist/lib/merge-tokens.d.ts +81 -0
  203. package/dist/lib/merge-tokens.d.ts.map +1 -0
  204. package/dist/lib/merge-tokens.js +88 -0
  205. package/dist/lib/merge-tokens.js.map +1 -0
  206. package/dist/lib/palette-registry.d.ts +40 -0
  207. package/dist/lib/palette-registry.d.ts.map +1 -0
  208. package/dist/lib/palette-registry.js +49 -0
  209. package/dist/lib/palette-registry.js.map +1 -0
  210. package/dist/lib/panel-anchor.d.ts +101 -0
  211. package/dist/lib/panel-anchor.d.ts.map +1 -0
  212. package/dist/lib/panel-anchor.js +68 -0
  213. package/dist/lib/panel-anchor.js.map +1 -0
  214. package/dist/lib/preflight/checks.d.ts.map +1 -1
  215. package/dist/lib/preflight/checks.js +71 -0
  216. package/dist/lib/preflight/checks.js.map +1 -1
  217. package/dist/lib/preflight/types.d.ts.map +1 -1
  218. package/dist/lib/preflight/types.js +11 -0
  219. package/dist/lib/preflight/types.js.map +1 -1
  220. package/dist/lib/rasterize.d.ts +93 -0
  221. package/dist/lib/rasterize.d.ts.map +1 -0
  222. package/dist/lib/rasterize.js +117 -0
  223. package/dist/lib/rasterize.js.map +1 -0
  224. package/dist/lib/separations-registry.d.ts +99 -0
  225. package/dist/lib/separations-registry.d.ts.map +1 -0
  226. package/dist/lib/separations-registry.js +59 -0
  227. package/dist/lib/separations-registry.js.map +1 -0
  228. package/dist/lib/unwired.d.ts +29 -0
  229. package/dist/lib/unwired.d.ts.map +1 -0
  230. package/dist/lib/unwired.js +58 -0
  231. package/dist/lib/unwired.js.map +1 -0
  232. package/package.json +20 -11
  233. package/dist/components/SeparationsPanel.d.ts +0 -9
  234. package/dist/components/SeparationsPanel.d.ts.map +0 -1
  235. package/dist/components/SeparationsPanel.js +0 -168
  236. package/dist/components/SeparationsPanel.js.map +0 -1
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Wave 2 S3 — panel-anchored objects.
3
+ *
4
+ * Lightweight hit-testing + lookup helpers for binding canvas objects
5
+ * to a specific {@link DielinePanel}. The document-model already
6
+ * carries the anchor id (`ArtworkObject.anchorPanelId`); these
7
+ * helpers complete the editor-side wiring so hosts can:
8
+ *
9
+ * - resolve which panel a click landed on (`findPanelAt`)
10
+ * - look up an anchored panel by id (`getPanelById`)
11
+ * - compute an object's effective parent panel during layout
12
+ *
13
+ * The current implementation uses bbox-only hit-testing — fast, good
14
+ * enough for orthogonal carton dielines, and side-step's polygon /
15
+ * SVG-`d` parsing. Hosts that ship complex non-rectangular panels
16
+ * (e.g. organic pouches) can extend by walking each panel's
17
+ * `pathData` themselves and bypass `findPanelAt`.
18
+ *
19
+ * @public
20
+ */
21
+ /**
22
+ * Editor-side mirror of `@artworkpdf/document-model`'s `DielinePanel`.
23
+ * Duplicated here to keep `editor-app` consumable without the
24
+ * document-model peer dep (same pattern as `EditorSeparation` and
25
+ * `FoldGeometryPanelMetadata`).
26
+ *
27
+ * @public
28
+ */
29
+ export type EditorDielinePanel = {
30
+ id: string;
31
+ name?: string;
32
+ pathData: string;
33
+ bbox: {
34
+ x: number;
35
+ y: number;
36
+ width: number;
37
+ height: number;
38
+ };
39
+ role?: "front" | "back" | "top" | "bottom" | "left" | "right" | "flap" | "glue" | "other";
40
+ };
41
+ /**
42
+ * Point-in-bbox test for a single panel. Returns `true` when the
43
+ * point lies within the bbox with all four edges inclusive — so a
44
+ * point on a seam between two adjacent panels matches both, and
45
+ * disambiguation is left to {@link findPanelAt}'s declaration-order
46
+ * first-match.
47
+ *
48
+ * Degenerate bboxes (`width <= 0` or `height <= 0`) never match —
49
+ * upstream dieline parsers occasionally emit collapsed cut/crease
50
+ * loops with zero-sized boxes, and silently swallowing those keeps
51
+ * the panel picker quiet on broken templates.
52
+ *
53
+ * @public
54
+ */
55
+ export declare function isPointInPanel(point: {
56
+ x: number;
57
+ y: number;
58
+ }, panel: EditorDielinePanel): boolean;
59
+ /**
60
+ * Return the first panel that contains `point`, or `undefined` when
61
+ * the click landed outside every panel (over the bleed area, say).
62
+ *
63
+ * Panels are checked in declaration order; hosts that emit overlapping
64
+ * panels (e.g. a glue flap that overlaps a front face) get the
65
+ * first-match semantics they need by ordering the array
66
+ * front-of-rendering-stack first.
67
+ *
68
+ * @public
69
+ */
70
+ export declare function findPanelAt(point: {
71
+ x: number;
72
+ y: number;
73
+ }, panels: readonly EditorDielinePanel[]): EditorDielinePanel | undefined;
74
+ /**
75
+ * Convenience lookup — returns the panel with the given id, or
76
+ * `undefined` if the anchor is stale (e.g. the dieline was
77
+ * regenerated and the previous panel ids no longer exist).
78
+ *
79
+ * @public
80
+ */
81
+ export declare function getPanelById(id: string, panels: readonly EditorDielinePanel[]): EditorDielinePanel | undefined;
82
+ /**
83
+ * Compute an object's effective parent panel:
84
+ * - if `anchorPanelId` is set and resolves, return that panel
85
+ * - otherwise fall back to whichever panel contains the object's
86
+ * current `(x, y)` position
87
+ *
88
+ * Returns `undefined` when neither resolves — the object is free-
89
+ * floating (positioned in page coordinates, not panel-relative).
90
+ *
91
+ * Hosts call this on every commit to keep the visible "anchored to
92
+ * X" badge in sync.
93
+ *
94
+ * @public
95
+ */
96
+ export declare function resolveAnchorPanel(obj: {
97
+ x: number;
98
+ y: number;
99
+ anchorPanelId?: string;
100
+ }, panels: readonly EditorDielinePanel[]): EditorDielinePanel | undefined;
101
+ //# sourceMappingURL=panel-anchor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-anchor.d.ts","sourceRoot":"","sources":["../../src/lib/panel-anchor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC3F,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAIT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,MAAM,EAAE,SAAS,kBAAkB,EAAE,GACpC,kBAAkB,GAAG,SAAS,CAEhC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,SAAS,kBAAkB,EAAE,GACpC,kBAAkB,GAAG,SAAS,CAEhC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EACrD,MAAM,EAAE,SAAS,kBAAkB,EAAE,GACpC,kBAAkB,GAAG,SAAS,CAMhC"}
@@ -0,0 +1,68 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ /**
3
+ * Point-in-bbox test for a single panel. Returns `true` when the
4
+ * point lies within the bbox with all four edges inclusive — so a
5
+ * point on a seam between two adjacent panels matches both, and
6
+ * disambiguation is left to {@link findPanelAt}'s declaration-order
7
+ * first-match.
8
+ *
9
+ * Degenerate bboxes (`width <= 0` or `height <= 0`) never match —
10
+ * upstream dieline parsers occasionally emit collapsed cut/crease
11
+ * loops with zero-sized boxes, and silently swallowing those keeps
12
+ * the panel picker quiet on broken templates.
13
+ *
14
+ * @public
15
+ */
16
+ export function isPointInPanel(point, panel) {
17
+ const { x, y, width, height } = panel.bbox;
18
+ if (width <= 0 || height <= 0)
19
+ return false;
20
+ return point.x >= x && point.x <= x + width && point.y >= y && point.y <= y + height;
21
+ }
22
+ /**
23
+ * Return the first panel that contains `point`, or `undefined` when
24
+ * the click landed outside every panel (over the bleed area, say).
25
+ *
26
+ * Panels are checked in declaration order; hosts that emit overlapping
27
+ * panels (e.g. a glue flap that overlaps a front face) get the
28
+ * first-match semantics they need by ordering the array
29
+ * front-of-rendering-stack first.
30
+ *
31
+ * @public
32
+ */
33
+ export function findPanelAt(point, panels) {
34
+ return panels.find((p) => isPointInPanel(point, p));
35
+ }
36
+ /**
37
+ * Convenience lookup — returns the panel with the given id, or
38
+ * `undefined` if the anchor is stale (e.g. the dieline was
39
+ * regenerated and the previous panel ids no longer exist).
40
+ *
41
+ * @public
42
+ */
43
+ export function getPanelById(id, panels) {
44
+ return panels.find((p) => p.id === id);
45
+ }
46
+ /**
47
+ * Compute an object's effective parent panel:
48
+ * - if `anchorPanelId` is set and resolves, return that panel
49
+ * - otherwise fall back to whichever panel contains the object's
50
+ * current `(x, y)` position
51
+ *
52
+ * Returns `undefined` when neither resolves — the object is free-
53
+ * floating (positioned in page coordinates, not panel-relative).
54
+ *
55
+ * Hosts call this on every commit to keep the visible "anchored to
56
+ * X" badge in sync.
57
+ *
58
+ * @public
59
+ */
60
+ export function resolveAnchorPanel(obj, panels) {
61
+ if (obj.anchorPanelId) {
62
+ const explicit = getPanelById(obj.anchorPanelId, panels);
63
+ if (explicit)
64
+ return explicit;
65
+ }
66
+ return findPanelAt({ x: obj.x, y: obj.y }, panels);
67
+ }
68
+ //# sourceMappingURL=panel-anchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-anchor.js","sourceRoot":"","sources":["../../src/lib/panel-anchor.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAuC7C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA+B,EAC/B,KAAyB;IAEzB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC3C,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACvF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,KAA+B,EAC/B,MAAqC;IAErC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAU,EACV,MAAqC;IAErC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAqD,EACrD,MAAqC;IAErC,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;IAChC,CAAC;IACD,OAAO,WAAW,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/lib/preflight/checks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7D,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzE,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAiD9F"}
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/lib/preflight/checks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7D,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzE,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CA2D9F"}
@@ -1,4 +1,6 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
1
2
  import { PDFArray, PDFDict, PDFDocument, PDFName } from "pdf-lib";
3
+ import { scanBarcodes, validateBarcode } from "../barcode-scan";
2
4
  const KNOWN_SPOT_PREFIXES = ["PANTONE", "HKS ", "TOYO", "DIC ", "Reflex Blue", "Rhodamine"];
3
5
  export async function runClientChecks(file, rules) {
4
6
  const issues = [];
@@ -47,6 +49,17 @@ export async function runClientChecks(file, rules) {
47
49
  if (doc)
48
50
  issues.push(...checkPdfSpotColors(doc, rule));
49
51
  break;
52
+ case "barcode_validation":
53
+ if (isRaster) {
54
+ issues.push(...(await checkRasterBarcodes(file, rule)));
55
+ }
56
+ else {
57
+ // PDF barcode scanning needs the PDF-to-raster pipeline
58
+ // (deferred); mark the check as skipped so the server-side
59
+ // preflight knows it's still owed for PDF uploads.
60
+ skippedChecks.push(rule.checkName);
61
+ }
62
+ break;
50
63
  }
51
64
  }
52
65
  return { issues, skippedChecks };
@@ -203,6 +216,64 @@ function checkPdfFonts(doc, rule) {
203
216
  },
204
217
  ];
205
218
  }
219
+ async function checkRasterBarcodes(file, rule) {
220
+ // Load the file into an ImageBitmap → 2d-canvas → ImageData so the
221
+ // barcode scanner can read raw pixels. Wrapped in a try so an
222
+ // unsupported image format fails open (no false negatives —
223
+ // server-side preflight catches what the editor can't).
224
+ let bitmap;
225
+ try {
226
+ bitmap = await createImageBitmap(file);
227
+ }
228
+ catch {
229
+ return [];
230
+ }
231
+ // OffscreenCanvas was Safari-only as of 16.4 and is still missing
232
+ // from some embedded webviews; feature-detect and fall back to a
233
+ // regular HTMLCanvasElement so this never throws ReferenceError.
234
+ let ctx = null;
235
+ if (typeof OffscreenCanvas !== "undefined") {
236
+ const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);
237
+ ctx = canvas.getContext("2d");
238
+ }
239
+ else if (typeof document !== "undefined") {
240
+ const canvas = document.createElement("canvas");
241
+ canvas.width = bitmap.width;
242
+ canvas.height = bitmap.height;
243
+ ctx = canvas.getContext("2d");
244
+ }
245
+ if (!ctx) {
246
+ bitmap.close();
247
+ return [];
248
+ }
249
+ ctx.drawImage(bitmap, 0, 0);
250
+ const imageData = ctx.getImageData(0, 0, bitmap.width, bitmap.height);
251
+ bitmap.close();
252
+ // Fail-open: a real detector library (jsqr, quagga, zbar) can
253
+ // reject for many reasons (decode failure, WASM init crash, malformed
254
+ // input). We don't want a scanner bug to take out the whole preflight
255
+ // pass, so we swallow and emit no findings.
256
+ let detections;
257
+ try {
258
+ detections = await scanBarcodes(imageData);
259
+ }
260
+ catch {
261
+ return [];
262
+ }
263
+ const issues = [];
264
+ for (const d of detections) {
265
+ const v = validateBarcode(d);
266
+ if (!v.valid) {
267
+ issues.push({
268
+ checkName: rule.checkName,
269
+ severity: rule.severity,
270
+ message: `${d.format} barcode ${d.code} is invalid: ${v.reason ?? "unknown"}`,
271
+ detail: { code: d.code, format: d.format, bounds: d.bounds },
272
+ });
273
+ }
274
+ }
275
+ return issues;
276
+ }
206
277
  function checkPdfSpotColors(doc, rule) {
207
278
  const unknown = [];
208
279
  for (const page of doc.getPages()) {
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/lib/preflight/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/lib/preflight/checks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/preflight/types.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,aAAa,EAuElD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/preflight/types.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,aAAa,EAkFlD,CAAC"}
@@ -76,5 +76,16 @@ export const DEFAULT_PREFLIGHT_RULES = [
76
76
  clientSide: false,
77
77
  params: { allowedModes: ["CMYK", "Spot", "DeviceN", "Gray"] },
78
78
  },
79
+ {
80
+ // G2v — detect barcodes in raster uploads and flag ones whose
81
+ // check digit / structure fails their format spec. Client-side
82
+ // because the editor already rasterizes for the live TAC overlay
83
+ // (PR-9) and reuses the same path here.
84
+ checkName: "barcode_validation",
85
+ enabled: true,
86
+ severity: "warn",
87
+ clientSide: true,
88
+ params: {},
89
+ },
79
90
  ];
80
91
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/preflight/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,0DAA0D;AAC1D,+DAA+D;AAC/D,oEAAoE;AACpE,gEAAgE;AAChE,wBAAwB;AA4BxB,MAAM,CAAC,MAAM,uBAAuB,GAAoB;IACtD;QACE,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;KACxB;IACD;QACE,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE;KACX;IACD;QACE,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;KACvB;IACD;QACE,SAAS,EAAE,uBAAuB;QAClC,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KAChC;IACD;QACE,SAAS,EAAE,kBAAkB;QAC7B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;KACrB;IACD;QACE,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACxB;IACD;QACE,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;KAC5B;IACD;QACE,SAAS,EAAE,eAAe;QAC1B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,kBAAkB,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE;KAClF;IACD;QACE,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE;KACxC;IACD;QACE,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;KAC9D;CACF,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/preflight/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,0DAA0D;AAC1D,+DAA+D;AAC/D,oEAAoE;AACpE,gEAAgE;AAChE,wBAAwB;AA4BxB,MAAM,CAAC,MAAM,uBAAuB,GAAoB;IACtD;QACE,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;KACxB;IACD;QACE,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE;KACX;IACD;QACE,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;KACvB;IACD;QACE,SAAS,EAAE,uBAAuB;QAClC,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KAChC;IACD;QACE,SAAS,EAAE,kBAAkB;QAC7B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;KACrB;IACD;QACE,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;KACxB;IACD;QACE,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;KAC5B;IACD;QACE,SAAS,EAAE,eAAe;QAC1B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,kBAAkB,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE;KAClF;IACD;QACE,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE;KACxC;IACD;QACE,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;KAC9D;IACD;QACE,8DAA8D;QAC9D,+DAA+D;QAC/D,iEAAiE;QACjE,wCAAwC;QACxC,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,EAAE;KACX;CACF,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Canvas → ImageData rasterization + per-pixel TAC sampling.
3
+ *
4
+ * The C4 "live total area coverage" feature reads the Konva Stage
5
+ * as a raster, samples each pixel's effective CMYK contribution,
6
+ * and surfaces the maximum + average TAC as a sanity-check overlay
7
+ * for the user **before** they submit a render job.
8
+ *
9
+ * Browser-side approximation, not a substitute for compile-pdf's
10
+ * ICC-aware server-side TAC check (`total_ink_coverage` preflight
11
+ * rule). The editor flags obviously over-inked regions in real time;
12
+ * the server-side check covers the colorimetric edge cases.
13
+ *
14
+ * Stage rasterization needs a live Konva instance + DOM, so the
15
+ * functions here can't be unit-tested without jsdom. The pure pixel
16
+ * sampler ({@link sampleTACFromImageData}) takes a synthetic
17
+ * ImageData and is fully testable in node.
18
+ */
19
+ /**
20
+ * Konva Stage shape just deep enough for the rasterize call — keeps
21
+ * this module from importing `konva` directly (the canvas already
22
+ * pulls it; we just need the `toCanvas` method).
23
+ */
24
+ type StageLike = {
25
+ toCanvas: (cfg?: {
26
+ pixelRatio?: number;
27
+ }) => HTMLCanvasElement;
28
+ };
29
+ /**
30
+ * Render a Konva Stage to an `ImageData` buffer.
31
+ *
32
+ * `pixelRatio` defaults to `1` for performance; UIs that need
33
+ * higher fidelity (separations panel, export preview) pass `2` or
34
+ * more. The browser's own `HTMLCanvasElement.getContext("2d")
35
+ * .getImageData()` does the heavy lift; this is a thin facade.
36
+ *
37
+ * Throws if the canvas's 2d context can't be acquired (extremely
38
+ * rare; old browser quirks).
39
+ *
40
+ * @public
41
+ */
42
+ export declare function rasterizeStage(stage: StageLike, opts?: {
43
+ pixelRatio?: number;
44
+ }): ImageData;
45
+ /**
46
+ * Per-pixel TAC summary across an `ImageData` buffer.
47
+ *
48
+ * Walks every pixel, converts its `(r, g, b)` to subtractive CMYK
49
+ * (via the same {@link hexToCmyk}-equivalent math, applied directly
50
+ * to the raw 0-255 bytes), and tracks the max + running sum so the
51
+ * caller can compute the average.
52
+ *
53
+ * `perPixelPct` is a flat `Uint8ClampedArray` of `width × height`
54
+ * entries; each is the TAC percent (0-400) clamped to a byte's
55
+ * range (255 = >=255%, allowing the heatmap shader to render a
56
+ * single-channel raster without scaling).
57
+ *
58
+ * **Alpha composite**: semi-transparent pixels are pre-blended onto
59
+ * an opaque white background before the CMYK conversion. This
60
+ * mirrors what the editor's canvas actually displays (everything
61
+ * sits on the white page) so an `rgba(255,0,0,0.1)` pixel registers
62
+ * as the ~20% TAC it'd actually print at, not the 200% full red it
63
+ * would be without the composite step. Pass an `opts.background`
64
+ * hex to composite onto a non-white substrate.
65
+ *
66
+ * **Approximation:** spot ink contribution is not modeled here. A
67
+ * full per-separation pass requires masking pixels by ink (planned
68
+ * for PR-9's UI overlay when the registered-spots map is available).
69
+ *
70
+ * Throws when `image.data.length !== image.width × image.height × 4`
71
+ * — defensive against misuse from upstream callers that pass a
72
+ * partially-constructed or mis-typed ImageData-shaped object.
73
+ *
74
+ * @public
75
+ */
76
+ export declare function sampleTACFromImageData(image: ImageData, opts?: {
77
+ background?: [number, number, number];
78
+ }): {
79
+ maxPct: number;
80
+ avgPct: number;
81
+ perPixelPct: Uint8ClampedArray;
82
+ };
83
+ /**
84
+ * Convenience: sample TAC from a raw hex color (single-pixel case).
85
+ * Used by tests + the editor's color picker's at-a-glance feedback.
86
+ *
87
+ * @returns The TAC percent (0-400) or `null` for malformed hex.
88
+ *
89
+ * @public
90
+ */
91
+ export declare function tacForHex(hex: string): number | null;
92
+ export {};
93
+ //# sourceMappingURL=rasterize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rasterize.d.ts","sourceRoot":"","sources":["../../src/lib/rasterize.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;GAIG;AACH,KAAK,SAAS,GAAG;IACf,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,iBAAiB,CAAC;CAChE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,SAAS,CAO9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAO,GACnD;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,iBAAiB,CAAC;CAChC,CAiDA;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIpD"}
@@ -0,0 +1,117 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ import { hexToCmyk, tacPercent } from "./color-math";
3
+ /**
4
+ * Render a Konva Stage to an `ImageData` buffer.
5
+ *
6
+ * `pixelRatio` defaults to `1` for performance; UIs that need
7
+ * higher fidelity (separations panel, export preview) pass `2` or
8
+ * more. The browser's own `HTMLCanvasElement.getContext("2d")
9
+ * .getImageData()` does the heavy lift; this is a thin facade.
10
+ *
11
+ * Throws if the canvas's 2d context can't be acquired (extremely
12
+ * rare; old browser quirks).
13
+ *
14
+ * @public
15
+ */
16
+ export function rasterizeStage(stage, opts = {}) {
17
+ const cfg = {};
18
+ if (opts.pixelRatio !== undefined)
19
+ cfg.pixelRatio = opts.pixelRatio;
20
+ const canvas = stage.toCanvas(cfg);
21
+ const ctx = canvas.getContext("2d");
22
+ if (!ctx)
23
+ throw new Error("rasterizeStage: 2d context unavailable on stage canvas");
24
+ return ctx.getImageData(0, 0, canvas.width, canvas.height);
25
+ }
26
+ /**
27
+ * Per-pixel TAC summary across an `ImageData` buffer.
28
+ *
29
+ * Walks every pixel, converts its `(r, g, b)` to subtractive CMYK
30
+ * (via the same {@link hexToCmyk}-equivalent math, applied directly
31
+ * to the raw 0-255 bytes), and tracks the max + running sum so the
32
+ * caller can compute the average.
33
+ *
34
+ * `perPixelPct` is a flat `Uint8ClampedArray` of `width × height`
35
+ * entries; each is the TAC percent (0-400) clamped to a byte's
36
+ * range (255 = >=255%, allowing the heatmap shader to render a
37
+ * single-channel raster without scaling).
38
+ *
39
+ * **Alpha composite**: semi-transparent pixels are pre-blended onto
40
+ * an opaque white background before the CMYK conversion. This
41
+ * mirrors what the editor's canvas actually displays (everything
42
+ * sits on the white page) so an `rgba(255,0,0,0.1)` pixel registers
43
+ * as the ~20% TAC it'd actually print at, not the 200% full red it
44
+ * would be without the composite step. Pass an `opts.background`
45
+ * hex to composite onto a non-white substrate.
46
+ *
47
+ * **Approximation:** spot ink contribution is not modeled here. A
48
+ * full per-separation pass requires masking pixels by ink (planned
49
+ * for PR-9's UI overlay when the registered-spots map is available).
50
+ *
51
+ * Throws when `image.data.length !== image.width × image.height × 4`
52
+ * — defensive against misuse from upstream callers that pass a
53
+ * partially-constructed or mis-typed ImageData-shaped object.
54
+ *
55
+ * @public
56
+ */
57
+ export function sampleTACFromImageData(image, opts = {}) {
58
+ const { data, width, height } = image;
59
+ const pixelCount = width * height;
60
+ const expected = pixelCount * 4;
61
+ if (data.length !== expected) {
62
+ throw new Error(`sampleTACFromImageData: data.length=${data.length} but ${width}×${height}×4=${expected}`);
63
+ }
64
+ const [bgR, bgG, bgB] = opts.background ?? [255, 255, 255];
65
+ const perPixelPct = new Uint8ClampedArray(pixelCount);
66
+ let maxPct = 0;
67
+ let sumPct = 0;
68
+ let i = 0;
69
+ for (let p = 0; p < data.length; p += 4) {
70
+ // Pre-multiply with the background ("over" composite) so
71
+ // semi-transparent pixels reflect what's actually visible /
72
+ // printable. Fully-opaque pixels (the common case) pass through
73
+ // unchanged because alpha=1 collapses the lerp.
74
+ const a = (data[p + 3] ?? 255) / 255;
75
+ const inv = 1 - a;
76
+ const r = ((data[p] ?? 0) * a + bgR * inv) / 255;
77
+ const g = ((data[p + 1] ?? 0) * a + bgG * inv) / 255;
78
+ const b = ((data[p + 2] ?? 0) * a + bgB * inv) / 255;
79
+ // Subtractive RGB → CMYK with K-extraction; same math as
80
+ // color-math.ts but inlined for the tight loop.
81
+ const k = 1 - Math.max(r, g, b);
82
+ let c = 0;
83
+ let m = 0;
84
+ let y = 0;
85
+ if (k < 1) {
86
+ const scale = 1 - k;
87
+ c = (1 - r - k) / scale;
88
+ m = (1 - g - k) / scale;
89
+ y = (1 - b - k) / scale;
90
+ }
91
+ const tac = (c + m + y + k) * 100;
92
+ if (tac > maxPct)
93
+ maxPct = tac;
94
+ sumPct += tac;
95
+ perPixelPct[i++] = Math.min(255, Math.round(tac));
96
+ }
97
+ return {
98
+ maxPct,
99
+ avgPct: pixelCount > 0 ? sumPct / pixelCount : 0,
100
+ perPixelPct,
101
+ };
102
+ }
103
+ /**
104
+ * Convenience: sample TAC from a raw hex color (single-pixel case).
105
+ * Used by tests + the editor's color picker's at-a-glance feedback.
106
+ *
107
+ * @returns The TAC percent (0-400) or `null` for malformed hex.
108
+ *
109
+ * @public
110
+ */
111
+ export function tacForHex(hex) {
112
+ const cmyk = hexToCmyk(hex);
113
+ if (cmyk === null)
114
+ return null;
115
+ return tacPercent(cmyk);
116
+ }
117
+ //# sourceMappingURL=rasterize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rasterize.js","sourceRoot":"","sources":["../../src/lib/rasterize.ts"],"names":[],"mappings":"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"}