@printwithsynergy/artwork-pdf-editor 0.1.6 → 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 (249) hide show
  1. package/LICENSE +62 -0
  2. package/README.md +63 -2
  3. package/dist/components/AccessibilityHintsPanel.d.ts +142 -0
  4. package/dist/components/AccessibilityHintsPanel.d.ts.map +1 -0
  5. package/dist/components/AccessibilityHintsPanel.js +158 -0
  6. package/dist/components/AccessibilityHintsPanel.js.map +1 -0
  7. package/dist/components/AnnotationOverlay.d.ts +142 -0
  8. package/dist/components/AnnotationOverlay.d.ts.map +1 -0
  9. package/dist/components/AnnotationOverlay.js +141 -0
  10. package/dist/components/AnnotationOverlay.js.map +1 -0
  11. package/dist/components/AnnotationsSidebar.d.ts +98 -0
  12. package/dist/components/AnnotationsSidebar.d.ts.map +1 -0
  13. package/dist/components/AnnotationsSidebar.js +100 -0
  14. package/dist/components/AnnotationsSidebar.js.map +1 -0
  15. package/dist/components/BarcodeGeneratorPanel.d.ts +58 -0
  16. package/dist/components/BarcodeGeneratorPanel.d.ts.map +1 -0
  17. package/dist/components/BarcodeGeneratorPanel.js +91 -0
  18. package/dist/components/BarcodeGeneratorPanel.js.map +1 -0
  19. package/dist/components/BraillePanel.d.ts +99 -0
  20. package/dist/components/BraillePanel.d.ts.map +1 -0
  21. package/dist/components/BraillePanel.js +221 -0
  22. package/dist/components/BraillePanel.js.map +1 -0
  23. package/dist/components/BrandAssetsPanel.d.ts +130 -0
  24. package/dist/components/BrandAssetsPanel.d.ts.map +1 -0
  25. package/dist/components/BrandAssetsPanel.js +125 -0
  26. package/dist/components/BrandAssetsPanel.js.map +1 -0
  27. package/dist/components/BrandConsistencyPanel.d.ts +140 -0
  28. package/dist/components/BrandConsistencyPanel.d.ts.map +1 -0
  29. package/dist/components/BrandConsistencyPanel.js +158 -0
  30. package/dist/components/BrandConsistencyPanel.js.map +1 -0
  31. package/dist/components/ComplianceFindingsPanel.d.ts +62 -0
  32. package/dist/components/ComplianceFindingsPanel.d.ts.map +1 -0
  33. package/dist/components/ComplianceFindingsPanel.js +118 -0
  34. package/dist/components/ComplianceFindingsPanel.js.map +1 -0
  35. package/dist/components/DesignSuggestionsPanel.d.ts +148 -0
  36. package/dist/components/DesignSuggestionsPanel.d.ts.map +1 -0
  37. package/dist/components/DesignSuggestionsPanel.js +154 -0
  38. package/dist/components/DesignSuggestionsPanel.js.map +1 -0
  39. package/dist/components/DielineParametersPanel.d.ts +62 -0
  40. package/dist/components/DielineParametersPanel.d.ts.map +1 -0
  41. package/dist/components/DielineParametersPanel.js +170 -0
  42. package/dist/components/DielineParametersPanel.js.map +1 -0
  43. package/dist/components/DielinePreview.d.ts +150 -0
  44. package/dist/components/DielinePreview.d.ts.map +1 -0
  45. package/dist/components/DielinePreview.js +146 -0
  46. package/dist/components/DielinePreview.js.map +1 -0
  47. package/dist/components/EditorApp.d.ts +39 -5
  48. package/dist/components/EditorApp.d.ts.map +1 -1
  49. package/dist/components/EditorApp.js +110 -5
  50. package/dist/components/EditorApp.js.map +1 -1
  51. package/dist/components/EditorCanvas.d.ts +51 -2
  52. package/dist/components/EditorCanvas.d.ts.map +1 -1
  53. package/dist/components/EditorCanvas.js +117 -48
  54. package/dist/components/EditorCanvas.js.map +1 -1
  55. package/dist/components/EmailNotifyPanel.d.ts +165 -0
  56. package/dist/components/EmailNotifyPanel.d.ts.map +1 -0
  57. package/dist/components/EmailNotifyPanel.js +211 -0
  58. package/dist/components/EmailNotifyPanel.js.map +1 -0
  59. package/dist/components/FileDropZone.d.ts +9 -1
  60. package/dist/components/FileDropZone.d.ts.map +1 -1
  61. package/dist/components/FileDropZone.js +53 -5
  62. package/dist/components/FileDropZone.js.map +1 -1
  63. package/dist/components/FoldEditorPanel.d.ts +68 -0
  64. package/dist/components/FoldEditorPanel.d.ts.map +1 -0
  65. package/dist/components/FoldEditorPanel.js +65 -0
  66. package/dist/components/FoldEditorPanel.js.map +1 -0
  67. package/dist/components/FoldPreviewOverlay.d.ts +48 -0
  68. package/dist/components/FoldPreviewOverlay.d.ts.map +1 -0
  69. package/dist/components/FoldPreviewOverlay.js +182 -0
  70. package/dist/components/FoldPreviewOverlay.js.map +1 -0
  71. package/dist/components/Gs1DigitalLinkPanel.d.ts +103 -0
  72. package/dist/components/Gs1DigitalLinkPanel.d.ts.map +1 -0
  73. package/dist/components/Gs1DigitalLinkPanel.js +199 -0
  74. package/dist/components/Gs1DigitalLinkPanel.js.map +1 -0
  75. package/dist/components/HistoryPanel.d.ts +39 -0
  76. package/dist/components/HistoryPanel.d.ts.map +1 -0
  77. package/dist/components/HistoryPanel.js +72 -0
  78. package/dist/components/HistoryPanel.js.map +1 -0
  79. package/dist/components/IccSoftProofOverlay.d.ts +67 -0
  80. package/dist/components/IccSoftProofOverlay.d.ts.map +1 -0
  81. package/dist/components/IccSoftProofOverlay.js +119 -0
  82. package/dist/components/IccSoftProofOverlay.js.map +1 -0
  83. package/dist/components/ImposePanel.d.ts +71 -0
  84. package/dist/components/ImposePanel.d.ts.map +1 -0
  85. package/dist/components/ImposePanel.js +127 -0
  86. package/dist/components/ImposePanel.js.map +1 -0
  87. package/dist/components/InksPanel.d.ts +61 -0
  88. package/dist/components/InksPanel.d.ts.map +1 -0
  89. package/dist/components/InksPanel.js +84 -0
  90. package/dist/components/InksPanel.js.map +1 -0
  91. package/dist/components/JobSetupPanel.d.ts +118 -0
  92. package/dist/components/JobSetupPanel.d.ts.map +1 -0
  93. package/dist/components/JobSetupPanel.js +169 -0
  94. package/dist/components/JobSetupPanel.js.map +1 -0
  95. package/dist/components/LayersPanel.d.ts.map +1 -1
  96. package/dist/components/LayersPanel.js +1 -0
  97. package/dist/components/LayersPanel.js.map +1 -1
  98. package/dist/components/MarkLibraryPanel.d.ts +131 -0
  99. package/dist/components/MarkLibraryPanel.d.ts.map +1 -0
  100. package/dist/components/MarkLibraryPanel.js +184 -0
  101. package/dist/components/MarkLibraryPanel.js.map +1 -0
  102. package/dist/components/MisEstimateButton.d.ts +73 -0
  103. package/dist/components/MisEstimateButton.d.ts.map +1 -0
  104. package/dist/components/MisEstimateButton.js +57 -0
  105. package/dist/components/MisEstimateButton.js.map +1 -0
  106. package/dist/components/NutritionPanel.d.ts +118 -0
  107. package/dist/components/NutritionPanel.d.ts.map +1 -0
  108. package/dist/components/NutritionPanel.js +169 -0
  109. package/dist/components/NutritionPanel.js.map +1 -0
  110. package/dist/components/PageNavigator.d.ts +26 -0
  111. package/dist/components/PageNavigator.d.ts.map +1 -0
  112. package/dist/components/PageNavigator.js +96 -0
  113. package/dist/components/PageNavigator.js.map +1 -0
  114. package/dist/components/PaletteManager.d.ts +32 -0
  115. package/dist/components/PaletteManager.d.ts.map +1 -0
  116. package/dist/components/PaletteManager.js +89 -0
  117. package/dist/components/PaletteManager.js.map +1 -0
  118. package/dist/components/PaletteToSpotPanel.d.ts +122 -0
  119. package/dist/components/PaletteToSpotPanel.d.ts.map +1 -0
  120. package/dist/components/PaletteToSpotPanel.js +160 -0
  121. package/dist/components/PaletteToSpotPanel.js.map +1 -0
  122. package/dist/components/PreflightAutoFixPanel.d.ts +110 -0
  123. package/dist/components/PreflightAutoFixPanel.d.ts.map +1 -0
  124. package/dist/components/PreflightAutoFixPanel.js +119 -0
  125. package/dist/components/PreflightAutoFixPanel.js.map +1 -0
  126. package/dist/components/PreflightDiffPanel.d.ts +127 -0
  127. package/dist/components/PreflightDiffPanel.d.ts.map +1 -0
  128. package/dist/components/PreflightDiffPanel.js +0 -0
  129. package/dist/components/PreflightDiffPanel.js.map +1 -0
  130. package/dist/components/ProcessRulesPanel.d.ts +81 -0
  131. package/dist/components/ProcessRulesPanel.d.ts.map +1 -0
  132. package/dist/components/ProcessRulesPanel.js +143 -0
  133. package/dist/components/ProcessRulesPanel.js.map +1 -0
  134. package/dist/components/SlackNotifyPanel.d.ts +139 -0
  135. package/dist/components/SlackNotifyPanel.d.ts.map +1 -0
  136. package/dist/components/SlackNotifyPanel.js +133 -0
  137. package/dist/components/SlackNotifyPanel.js.map +1 -0
  138. package/dist/components/SmartSpotMatchPanel.d.ts +143 -0
  139. package/dist/components/SmartSpotMatchPanel.d.ts.map +1 -0
  140. package/dist/components/SmartSpotMatchPanel.js +159 -0
  141. package/dist/components/SmartSpotMatchPanel.js.map +1 -0
  142. package/dist/components/SwatchesPicker.d.ts +83 -0
  143. package/dist/components/SwatchesPicker.d.ts.map +1 -0
  144. package/dist/components/SwatchesPicker.js +151 -0
  145. package/dist/components/SwatchesPicker.js.map +1 -0
  146. package/dist/components/TacOverlay.d.ts +47 -0
  147. package/dist/components/TacOverlay.d.ts.map +1 -0
  148. package/dist/components/TacOverlay.js +116 -0
  149. package/dist/components/TacOverlay.js.map +1 -0
  150. package/dist/components/TrapEditorPanel.d.ts +52 -0
  151. package/dist/components/TrapEditorPanel.d.ts.map +1 -0
  152. package/dist/components/TrapEditorPanel.js +64 -0
  153. package/dist/components/TrapEditorPanel.js.map +1 -0
  154. package/dist/components/TrapPreviewOverlay.d.ts +64 -0
  155. package/dist/components/TrapPreviewOverlay.d.ts.map +1 -0
  156. package/dist/components/TrapPreviewOverlay.js +120 -0
  157. package/dist/components/TrapPreviewOverlay.js.map +1 -0
  158. package/dist/components/VariantMatrixPanel.d.ts +61 -0
  159. package/dist/components/VariantMatrixPanel.d.ts.map +1 -0
  160. package/dist/components/VariantMatrixPanel.js +97 -0
  161. package/dist/components/VariantMatrixPanel.js.map +1 -0
  162. package/dist/components/VariantMatrixVersionPanel.d.ts +122 -0
  163. package/dist/components/VariantMatrixVersionPanel.d.ts.map +1 -0
  164. package/dist/components/VariantMatrixVersionPanel.js +162 -0
  165. package/dist/components/VariantMatrixVersionPanel.js.map +1 -0
  166. package/dist/components/WebhookNotifyPanel.d.ts +160 -0
  167. package/dist/components/WebhookNotifyPanel.d.ts.map +1 -0
  168. package/dist/components/WebhookNotifyPanel.js +100 -0
  169. package/dist/components/WebhookNotifyPanel.js.map +1 -0
  170. package/dist/components/WhiteUnderbasePanel.d.ts +107 -0
  171. package/dist/components/WhiteUnderbasePanel.d.ts.map +1 -0
  172. package/dist/components/WhiteUnderbasePanel.js +104 -0
  173. package/dist/components/WhiteUnderbasePanel.js.map +1 -0
  174. package/dist/data/dielines.json +35 -0
  175. package/dist/hooks/useEditorMode.d.ts +25 -5
  176. package/dist/hooks/useEditorMode.d.ts.map +1 -1
  177. package/dist/hooks/useEditorMode.js +18 -5
  178. package/dist/hooks/useEditorMode.js.map +1 -1
  179. package/dist/index.d.ts +49 -2
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +49 -2
  182. package/dist/index.js.map +1 -1
  183. package/dist/lens/dieline-overlay.d.ts +25 -0
  184. package/dist/lens/dieline-overlay.d.ts.map +1 -0
  185. package/dist/lens/dieline-overlay.js +50 -0
  186. package/dist/lens/dieline-overlay.js.map +1 -0
  187. package/dist/lens/index.d.ts +27 -0
  188. package/dist/lens/index.d.ts.map +1 -0
  189. package/dist/lens/index.js +28 -0
  190. package/dist/lens/index.js.map +1 -0
  191. package/dist/lens/preflight-findings.d.ts +21 -0
  192. package/dist/lens/preflight-findings.d.ts.map +1 -0
  193. package/dist/lens/preflight-findings.js +82 -0
  194. package/dist/lens/preflight-findings.js.map +1 -0
  195. package/dist/lib/barcode-scan.d.ts +154 -0
  196. package/dist/lib/barcode-scan.d.ts.map +1 -0
  197. package/dist/lib/barcode-scan.js +152 -0
  198. package/dist/lib/barcode-scan.js.map +1 -0
  199. package/dist/lib/color-math.d.ts +76 -0
  200. package/dist/lib/color-math.d.ts.map +1 -0
  201. package/dist/lib/color-math.js +96 -0
  202. package/dist/lib/color-math.js.map +1 -0
  203. package/dist/lib/dieline-template.d.ts +169 -0
  204. package/dist/lib/dieline-template.d.ts.map +1 -1
  205. package/dist/lib/dieline-template.js +229 -1
  206. package/dist/lib/dieline-template.js.map +1 -1
  207. package/dist/lib/editor-config.d.ts +384 -1
  208. package/dist/lib/editor-config.d.ts.map +1 -1
  209. package/dist/lib/editor-config.js +89 -2
  210. package/dist/lib/editor-config.js.map +1 -1
  211. package/dist/lib/fold-geometry.d.ts +144 -0
  212. package/dist/lib/fold-geometry.d.ts.map +1 -0
  213. package/dist/lib/fold-geometry.js +138 -0
  214. package/dist/lib/fold-geometry.js.map +1 -0
  215. package/dist/lib/merge-tokens.d.ts +81 -0
  216. package/dist/lib/merge-tokens.d.ts.map +1 -0
  217. package/dist/lib/merge-tokens.js +88 -0
  218. package/dist/lib/merge-tokens.js.map +1 -0
  219. package/dist/lib/palette-registry.d.ts +40 -0
  220. package/dist/lib/palette-registry.d.ts.map +1 -0
  221. package/dist/lib/palette-registry.js +49 -0
  222. package/dist/lib/palette-registry.js.map +1 -0
  223. package/dist/lib/panel-anchor.d.ts +101 -0
  224. package/dist/lib/panel-anchor.d.ts.map +1 -0
  225. package/dist/lib/panel-anchor.js +68 -0
  226. package/dist/lib/panel-anchor.js.map +1 -0
  227. package/dist/lib/preflight/checks.d.ts.map +1 -1
  228. package/dist/lib/preflight/checks.js +71 -0
  229. package/dist/lib/preflight/checks.js.map +1 -1
  230. package/dist/lib/preflight/types.d.ts.map +1 -1
  231. package/dist/lib/preflight/types.js +11 -0
  232. package/dist/lib/preflight/types.js.map +1 -1
  233. package/dist/lib/rasterize.d.ts +93 -0
  234. package/dist/lib/rasterize.d.ts.map +1 -0
  235. package/dist/lib/rasterize.js +117 -0
  236. package/dist/lib/rasterize.js.map +1 -0
  237. package/dist/lib/separations-registry.d.ts +99 -0
  238. package/dist/lib/separations-registry.d.ts.map +1 -0
  239. package/dist/lib/separations-registry.js +59 -0
  240. package/dist/lib/separations-registry.js.map +1 -0
  241. package/dist/lib/unwired.d.ts +29 -0
  242. package/dist/lib/unwired.d.ts.map +1 -0
  243. package/dist/lib/unwired.js +58 -0
  244. package/dist/lib/unwired.js.map +1 -0
  245. package/package.json +29 -11
  246. package/dist/components/SeparationsPanel.d.ts +0 -9
  247. package/dist/components/SeparationsPanel.d.ts.map +0 -1
  248. package/dist/components/SeparationsPanel.js +0 -168
  249. package/dist/components/SeparationsPanel.js.map +0 -1
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Per-page registry of named spot inks the editor has identified.
3
+ *
4
+ * AI4 ("palette → spot") feeds this registry every time the user
5
+ * marks a fill or stroke color as a spot ink. The list rides on the
6
+ * page (see `Page.separations` in `dieline-template.ts`) and gets
7
+ * threaded through to compile-pdf via the
8
+ * `JobSubmitRequest.separationsOverride` field — bypassing the
9
+ * renderer's inference of separations from the document content.
10
+ *
11
+ * Wave 1 PR-7 (C3 SwatchesPicker) adds a "from library" flow that
12
+ * pre-fills `pantone` + `lab` via the compile-pdf spots endpoint.
13
+ * For now, the registry handles ad-hoc registration with whatever
14
+ * metadata the user has (a name, optionally a Pantone code).
15
+ *
16
+ * The helpers in this file are pure — they take an array and return
17
+ * a new array. State is owned by the caller (Page / EditorApp).
18
+ */
19
+ /**
20
+ * Editor-side mirror of `@artworkpdf/document-model`'s `Separation`.
21
+ *
22
+ * Kept structural (not an import from document-model) so the
23
+ * editor-app package stays consumable by hosts that don't pull
24
+ * document-model in. The wire serialization is structurally
25
+ * compatible — when the export builder populates
26
+ * `separationsOverride` on the job request, an `EditorSeparation[]`
27
+ * satisfies the document-model `Separation[]` shape.
28
+ *
29
+ * @public
30
+ */
31
+ export type EditorSeparation = {
32
+ /** Display name and the channel identity (e.g. `"PANTONE 185 C"`). */
33
+ name: string;
34
+ /** PDF color space. Spots use `"Spot"`; process inks use `"CMYK"`. */
35
+ colorSpace: "CMYK" | "Spot" | "DeviceN" | "RGB" | "Gray";
36
+ /** The source hex this spot was registered from (`#fc5102`). */
37
+ hex: string;
38
+ /** Canonical Pantone reference name, when known. */
39
+ pantone?: string;
40
+ /** Measured Lab triplet, when known (filled by C3's SwatchesPicker). */
41
+ lab?: {
42
+ L: number;
43
+ a: number;
44
+ b: number;
45
+ };
46
+ /** Channel type — informs the renderer's downstream handling. */
47
+ type?: "ink" | "varnish" | "foil" | "emboss" | "white";
48
+ };
49
+ /**
50
+ * Options accepted by {@link registerSpot} beyond the required name.
51
+ *
52
+ * @public
53
+ */
54
+ export type RegisterSpotOptions = {
55
+ pantone?: string;
56
+ lab?: {
57
+ L: number;
58
+ a: number;
59
+ b: number;
60
+ };
61
+ type?: EditorSeparation["type"];
62
+ colorSpace?: EditorSeparation["colorSpace"];
63
+ };
64
+ /**
65
+ * Add (or replace) a spot keyed by `hex`. Idempotent — registering
66
+ * the same hex twice updates the existing entry rather than
67
+ * appending a duplicate. Comparison is case-insensitive.
68
+ *
69
+ * @returns A new array with the spot present. The input is not
70
+ * mutated.
71
+ *
72
+ * @public
73
+ */
74
+ export declare function registerSpot(seps: readonly EditorSeparation[], hex: string, name: string, opts?: RegisterSpotOptions): EditorSeparation[];
75
+ /**
76
+ * Remove a spot by hex. No-op if absent.
77
+ *
78
+ * @returns A new array with the matching entry removed.
79
+ *
80
+ * @public
81
+ */
82
+ export declare function unregisterSpot(seps: readonly EditorSeparation[], hex: string): EditorSeparation[];
83
+ /**
84
+ * Lookup a registered spot by hex. Case-insensitive.
85
+ *
86
+ * @returns The matching `EditorSeparation` or `undefined`.
87
+ *
88
+ * @public
89
+ */
90
+ export declare function findSpotByColor(seps: readonly EditorSeparation[], hex: string): EditorSeparation | undefined;
91
+ /**
92
+ * Identity helper — returns the list as-is for symmetry with the
93
+ * other registry verbs. Use this at the export site to thread the
94
+ * page's spots into `JobSubmitRequest.separationsOverride`.
95
+ *
96
+ * @public
97
+ */
98
+ export declare function listSpots(seps: readonly EditorSeparation[]): EditorSeparation[];
99
+ //# sourceMappingURL=separations-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separations-registry.d.ts","sourceRoot":"","sources":["../../src/lib/separations-registry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;IACzD,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,iEAAiE;IACjE,IAAI,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACxD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;CAC7C,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,mBAAwB,GAC7B,gBAAgB,EAAE,CAapB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,GAAG,EAAE,MAAM,GACV,gBAAgB,EAAE,CAGpB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,GAAG,EAAE,MAAM,GACV,gBAAgB,GAAG,SAAS,CAG9B;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAE/E"}
@@ -0,0 +1,59 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ /**
3
+ * Add (or replace) a spot keyed by `hex`. Idempotent — registering
4
+ * the same hex twice updates the existing entry rather than
5
+ * appending a duplicate. Comparison is case-insensitive.
6
+ *
7
+ * @returns A new array with the spot present. The input is not
8
+ * mutated.
9
+ *
10
+ * @public
11
+ */
12
+ export function registerSpot(seps, hex, name, opts = {}) {
13
+ const normalized = hex.toLowerCase();
14
+ const next = {
15
+ name,
16
+ colorSpace: opts.colorSpace ?? "Spot",
17
+ hex: normalized,
18
+ ...(opts.pantone !== undefined ? { pantone: opts.pantone } : {}),
19
+ ...(opts.lab !== undefined ? { lab: opts.lab } : {}),
20
+ ...(opts.type !== undefined ? { type: opts.type } : {}),
21
+ };
22
+ const existingIdx = seps.findIndex((s) => s.hex.toLowerCase() === normalized);
23
+ if (existingIdx === -1)
24
+ return [...seps, next];
25
+ return seps.map((s, i) => (i === existingIdx ? next : s));
26
+ }
27
+ /**
28
+ * Remove a spot by hex. No-op if absent.
29
+ *
30
+ * @returns A new array with the matching entry removed.
31
+ *
32
+ * @public
33
+ */
34
+ export function unregisterSpot(seps, hex) {
35
+ const normalized = hex.toLowerCase();
36
+ return seps.filter((s) => s.hex.toLowerCase() !== normalized);
37
+ }
38
+ /**
39
+ * Lookup a registered spot by hex. Case-insensitive.
40
+ *
41
+ * @returns The matching `EditorSeparation` or `undefined`.
42
+ *
43
+ * @public
44
+ */
45
+ export function findSpotByColor(seps, hex) {
46
+ const normalized = hex.toLowerCase();
47
+ return seps.find((s) => s.hex.toLowerCase() === normalized);
48
+ }
49
+ /**
50
+ * Identity helper — returns the list as-is for symmetry with the
51
+ * other registry verbs. Use this at the export site to thread the
52
+ * page's spots into `JobSubmitRequest.separationsOverride`.
53
+ *
54
+ * @public
55
+ */
56
+ export function listSpots(seps) {
57
+ return [...seps];
58
+ }
59
+ //# sourceMappingURL=separations-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separations-registry.js","sourceRoot":"","sources":["../../src/lib/separations-registry.ts"],"names":[],"mappings":"AAAA,6CAA6C;AA4D7C;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAiC,EACjC,GAAW,EACX,IAAY,EACZ,OAA4B,EAAE;IAE9B,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,IAAI,GAAqB;QAC7B,IAAI;QACJ,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,MAAM;QACrC,GAAG,EAAE,UAAU;QACf,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IAC9E,IAAI,WAAW,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAiC,EACjC,GAAW;IAEX,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAiC,EACjC,GAAW;IAEX,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAiC;IACzD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Mark a feature as "flag exists but UI not shipped". Idempotent.
3
+ *
4
+ * Typical call site is at the bottom of the module that *would*
5
+ * render the UI when wired:
6
+ *
7
+ * ```ts
8
+ * // packages/editor-app/src/components/SeparationsPanel.tsx
9
+ * import { markUnwired } from "../lib/unwired";
10
+ * markUnwired("separations"); // wire-up lands in Wave 1
11
+ * ```
12
+ *
13
+ * @public
14
+ */
15
+ export declare function markUnwired(feature: string): void;
16
+ /**
17
+ * Test whether a feature has been marked unwired. Used by
18
+ * {@link import("./editor-config").showFeature}; hosts generally
19
+ * don't need to call this directly.
20
+ *
21
+ * @public
22
+ */
23
+ export declare function isUnwired(feature: string): boolean;
24
+ /**
25
+ * Test-only — clear the unwired set. Not exported through the
26
+ * public barrel.
27
+ */
28
+ export declare function _resetUnwiredForTests(): void;
29
+ //# sourceMappingURL=unwired.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwired.d.ts","sourceRoot":"","sources":["../../src/lib/unwired.ts"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,58 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ /**
3
+ * Unwired-feature registry.
4
+ *
5
+ * A feature is "unwired" when the *flag* exists in {@link EditorConfig}
6
+ * but the corresponding *UI* isn't shipped in this build yet (typical
7
+ * for forward-compatibility plumb-throughs like `enable_separations`
8
+ * — flag preps the surface; component lands in a later wave).
9
+ *
10
+ * Mirrors the pattern from `lens-pdf`. The set is module-scoped and
11
+ * in-memory only — there's no persistence. Components / packages
12
+ * call {@link markUnwired} at module-init time; {@link showFeature}
13
+ * reads via {@link isUnwired} to suppress UI for features whose flag
14
+ * is on but whose implementation hasn't landed.
15
+ *
16
+ * **The registry itself is the source of truth.** When no module
17
+ * calls `markUnwired(...)`, every flagged feature ships live;
18
+ * adding plumb-only flags in future waves means landing a
19
+ * `markUnwired("<feature>")` call alongside the flag and removing
20
+ * it when the UI ships. `grep -rn 'markUnwired(' packages/editor-app/src`
21
+ * reports the current set without doc maintenance.
22
+ */
23
+ const UNWIRED = new Set();
24
+ /**
25
+ * Mark a feature as "flag exists but UI not shipped". Idempotent.
26
+ *
27
+ * Typical call site is at the bottom of the module that *would*
28
+ * render the UI when wired:
29
+ *
30
+ * ```ts
31
+ * // packages/editor-app/src/components/SeparationsPanel.tsx
32
+ * import { markUnwired } from "../lib/unwired";
33
+ * markUnwired("separations"); // wire-up lands in Wave 1
34
+ * ```
35
+ *
36
+ * @public
37
+ */
38
+ export function markUnwired(feature) {
39
+ UNWIRED.add(feature);
40
+ }
41
+ /**
42
+ * Test whether a feature has been marked unwired. Used by
43
+ * {@link import("./editor-config").showFeature}; hosts generally
44
+ * don't need to call this directly.
45
+ *
46
+ * @public
47
+ */
48
+ export function isUnwired(feature) {
49
+ return UNWIRED.has(feature);
50
+ }
51
+ /**
52
+ * Test-only — clear the unwired set. Not exported through the
53
+ * public barrel.
54
+ */
55
+ export function _resetUnwiredForTests() {
56
+ UNWIRED.clear();
57
+ }
58
+ //# sourceMappingURL=unwired.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unwired.js","sourceRoot":"","sources":["../../src/lib/unwired.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@printwithsynergy/artwork-pdf-editor",
3
- "version": "0.1.6",
3
+ "version": "0.3.0",
4
4
  "description": "artworkPDF WYSIWYG editor as a host-customizable React component. Drop-in mountable in Next.js, Astro, Remix, etc.",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "type": "module",
@@ -10,35 +10,53 @@
10
10
  ".": {
11
11
  "types": "./dist/index.d.ts",
12
12
  "import": "./dist/index.js"
13
+ },
14
+ "./lens": {
15
+ "types": "./dist/lens/index.d.ts",
16
+ "import": "./dist/lens/index.js"
13
17
  }
14
18
  },
15
- "files": ["dist", "README.md", "LICENSE"],
19
+ "files": [
20
+ "dist",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
16
24
  "sideEffects": false,
17
- "scripts": {
18
- "build": "tsc -p tsconfig.build.json",
19
- "typecheck": "tsc --noEmit",
20
- "test": "vitest run --passWithNoTests"
21
- },
22
25
  "dependencies": {
23
- "pdf-lib": "^1.17.1"
26
+ "pdf-lib": "^1.17.1",
27
+ "three": "^0.170.0",
28
+ "@artworkpdf/dieline-parser": "0.1.0"
24
29
  },
25
30
  "peerDependencies": {
26
31
  "react": "^19.0.0",
27
32
  "react-dom": "^19.0.0",
28
33
  "react-konva": "^19.0.0",
29
- "konva": "^10.3.0"
34
+ "konva": "^10.3.0",
35
+ "@printwithsynergy/lens-pdf": "^0.4.0-beta.17"
36
+ },
37
+ "peerDependenciesMeta": {
38
+ "@printwithsynergy/lens-pdf": {
39
+ "optional": true
40
+ }
30
41
  },
31
42
  "devDependencies": {
43
+ "@printwithsynergy/lens-pdf": "^0.4.0-beta.17",
32
44
  "@types/react": "^19.0.0",
33
45
  "@types/react-dom": "^19.0.0",
46
+ "@types/three": "^0.170.0",
34
47
  "konva": "^10.3.0",
35
48
  "react": "^19.0.0",
36
49
  "react-dom": "^19.0.0",
37
50
  "react-konva": "^19.0.0",
38
51
  "typescript": "^5.7.0",
39
- "vitest": "^3.2.0"
52
+ "vitest": "^4.1.0"
40
53
  },
41
54
  "publishConfig": {
42
55
  "access": "public"
56
+ },
57
+ "scripts": {
58
+ "build": "tsc -p tsconfig.build.json",
59
+ "typecheck": "tsc --noEmit",
60
+ "test": "vitest run --passWithNoTests"
43
61
  }
44
- }
62
+ }
@@ -1,9 +0,0 @@
1
- import type { CanvasObj } from "./EditorCanvas";
2
- type Props = {
3
- objects: CanvasObj[];
4
- hidden: Set<string>;
5
- onToggle: (color: string) => void;
6
- };
7
- export declare function SeparationsPanel({ objects, hidden, onToggle }: Props): import("react/jsx-runtime").JSX.Element;
8
- export {};
9
- //# sourceMappingURL=SeparationsPanel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SeparationsPanel.d.ts","sourceRoot":"","sources":["../../src/components/SeparationsPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AA6HF,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAuGpE"}
@@ -1,168 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- "use client";
3
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
4
- const PANEL = "#1a0f08";
5
- const BORDER = "#3d1a00";
6
- const MUTED = "#888";
7
- function hexToRgb(hex) {
8
- const m = /^#?([0-9a-f]{6})$/i.exec(hex);
9
- if (!m)
10
- return null;
11
- const n = Number.parseInt(m[1], 16);
12
- return [(n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff];
13
- }
14
- function isCmykPrimary(hex) {
15
- const rgb = hexToRgb(hex);
16
- if (!rgb)
17
- return null;
18
- const [r, g, b] = rgb;
19
- if (r < 16 && g < 16 && b < 16)
20
- return "K";
21
- if (r > 220 && g < 60 && b < 60)
22
- return null; // pure red → treated as spot
23
- if (r < 60 && g > 200 && b > 200)
24
- return "C";
25
- if (r > 200 && g < 60 && b > 200)
26
- return "M";
27
- if (r > 200 && g > 200 && b < 60)
28
- return "Y";
29
- return null;
30
- }
31
- function inkChannels(objects) {
32
- const map = new Map();
33
- const addColor = (raw) => {
34
- if (!raw || raw === "transparent")
35
- return;
36
- const hex = raw.toLowerCase();
37
- const cmyk = isCmykPrimary(hex);
38
- if (cmyk) {
39
- const swatchMap = {
40
- C: "#00bcd4",
41
- M: "#e91e63",
42
- Y: "#ffeb3b",
43
- K: "#222",
44
- };
45
- const labelMap = {
46
- C: "Cyan",
47
- M: "Magenta",
48
- Y: "Yellow",
49
- K: "Black",
50
- };
51
- const existing = map.get(cmyk);
52
- if (existing) {
53
- if (!existing.colors.includes(hex))
54
- existing.colors.push(hex);
55
- }
56
- else {
57
- map.set(cmyk, {
58
- key: cmyk,
59
- label: labelMap[cmyk] ?? cmyk,
60
- swatch: swatchMap[cmyk] ?? "#000",
61
- colors: [hex],
62
- isSpot: false,
63
- });
64
- }
65
- return;
66
- }
67
- // Spot ink — group by source hex
68
- const existing = map.get(hex);
69
- if (existing)
70
- return;
71
- map.set(hex, {
72
- key: hex,
73
- label: `Spot ${hex.toUpperCase()}`,
74
- swatch: hex,
75
- colors: [hex],
76
- isSpot: true,
77
- });
78
- };
79
- for (const o of objects) {
80
- // Locked, named objects (the dieline) are technical separations:
81
- // a dedicated named plate from their stroke, not merged with the
82
- // artwork ink channels.
83
- if (o.locked && o.name) {
84
- const raw = o.stroke && o.stroke !== "transparent" ? o.stroke : o.fill;
85
- const hex = (raw ?? "").toLowerCase();
86
- if (hex && hex !== "transparent") {
87
- const key = `tech:${o.name}`;
88
- if (!map.has(key)) {
89
- map.set(key, {
90
- key,
91
- label: o.name,
92
- swatch: hex,
93
- colors: [hex],
94
- isSpot: false,
95
- technical: true,
96
- });
97
- }
98
- }
99
- continue;
100
- }
101
- addColor(o.fill);
102
- addColor(o.stroke);
103
- }
104
- // Deterministic ordering: CMYK first, then spots.
105
- const order = { C: 0, M: 1, Y: 2, K: 3 };
106
- return [...map.values()].sort((a, b) => {
107
- const ai = order[a.key] ?? 100;
108
- const bi = order[b.key] ?? 100;
109
- if (ai !== bi)
110
- return ai - bi;
111
- return a.label.localeCompare(b.label);
112
- });
113
- }
114
- export function SeparationsPanel({ objects, hidden, onToggle }) {
115
- const channels = inkChannels(objects);
116
- return (_jsxs("aside", { style: {
117
- width: 220,
118
- background: PANEL,
119
- borderLeft: `1px solid ${BORDER}`,
120
- display: "flex",
121
- flexDirection: "column",
122
- flexShrink: 0,
123
- overflow: "hidden",
124
- }, children: [_jsxs("header", { style: {
125
- padding: "0.5rem 0.75rem",
126
- borderBottom: `1px solid ${BORDER}`,
127
- fontSize: "0.7rem",
128
- letterSpacing: "0.08em",
129
- textTransform: "uppercase",
130
- color: MUTED,
131
- fontWeight: 600,
132
- }, children: ["Separations (", channels.length, ")"] }), _jsxs("div", { style: { flex: 1, overflowY: "auto" }, children: [channels.length === 0 && (_jsx("p", { style: { padding: "0.75rem", fontSize: "0.75rem", color: MUTED, margin: 0 }, children: "No ink coverage yet. Set a fill or stroke to populate channels." })), channels.map((ch) => {
133
- const allHidden = ch.colors.every((c) => hidden.has(c));
134
- return (_jsxs("label", { style: {
135
- display: "flex",
136
- alignItems: "center",
137
- gap: "0.55rem",
138
- padding: "0.45rem 0.75rem",
139
- borderBottom: `1px solid #120a04`,
140
- cursor: "pointer",
141
- fontSize: "0.78rem",
142
- color: allHidden ? MUTED : "#ddd",
143
- }, children: [_jsx("input", { type: "checkbox", checked: !allHidden, onChange: () => {
144
- for (const c of ch.colors)
145
- onToggle(c);
146
- }, style: { accentColor: "#fc5102" } }), _jsx("span", { "aria-hidden": true, style: {
147
- display: "inline-block",
148
- width: 14,
149
- height: 14,
150
- borderRadius: 3,
151
- background: ch.swatch,
152
- border: ch.swatch === "#222" ? "1px solid #555" : "none",
153
- } }), _jsx("span", { style: { flex: 1 }, children: ch.label }), (ch.isSpot || ch.technical) && (_jsx("span", { style: {
154
- fontSize: "0.6rem",
155
- color: MUTED,
156
- textTransform: "uppercase",
157
- letterSpacing: "0.08em",
158
- }, children: ch.technical ? "Die" : "Spot" }))] }, ch.key));
159
- })] }), _jsx("p", { style: {
160
- padding: "0.6rem 0.75rem",
161
- margin: 0,
162
- fontSize: "0.65rem",
163
- color: MUTED,
164
- borderTop: `1px solid ${BORDER}`,
165
- lineHeight: 1.4,
166
- }, children: "Preview only. Final separations are produced by the render service (pdf-writer + Ghostscript ICC)." })] }));
167
- }
168
- //# sourceMappingURL=SeparationsPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SeparationsPanel.js","sourceRoot":"","sources":["../../src/components/SeparationsPanel.tsx"],"names":[],"mappings":"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"}