@printwithsynergy/artwork-pdf-editor 0.1.1

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 (83) hide show
  1. package/README.md +117 -0
  2. package/dist/components/DielineLibraryModal.d.ts +9 -0
  3. package/dist/components/DielineLibraryModal.d.ts.map +1 -0
  4. package/dist/components/DielineLibraryModal.js +107 -0
  5. package/dist/components/DielineLibraryModal.js.map +1 -0
  6. package/dist/components/EditorApp.d.ts +37 -0
  7. package/dist/components/EditorApp.d.ts.map +1 -0
  8. package/dist/components/EditorApp.js +89 -0
  9. package/dist/components/EditorApp.js.map +1 -0
  10. package/dist/components/EditorCanvas.d.ts +41 -0
  11. package/dist/components/EditorCanvas.d.ts.map +1 -0
  12. package/dist/components/EditorCanvas.js +852 -0
  13. package/dist/components/EditorCanvas.js.map +1 -0
  14. package/dist/components/FileDropZone.d.ts +6 -0
  15. package/dist/components/FileDropZone.d.ts.map +1 -0
  16. package/dist/components/FileDropZone.js +48 -0
  17. package/dist/components/FileDropZone.js.map +1 -0
  18. package/dist/components/LayersPanel.d.ts +12 -0
  19. package/dist/components/LayersPanel.d.ts.map +1 -0
  20. package/dist/components/LayersPanel.js +101 -0
  21. package/dist/components/LayersPanel.js.map +1 -0
  22. package/dist/components/MobileToolDrawer.d.ts +45 -0
  23. package/dist/components/MobileToolDrawer.d.ts.map +1 -0
  24. package/dist/components/MobileToolDrawer.js +164 -0
  25. package/dist/components/MobileToolDrawer.js.map +1 -0
  26. package/dist/components/ModeToggle.d.ts +8 -0
  27. package/dist/components/ModeToggle.d.ts.map +1 -0
  28. package/dist/components/ModeToggle.js +27 -0
  29. package/dist/components/ModeToggle.js.map +1 -0
  30. package/dist/components/PreflightPanel.d.ts +9 -0
  31. package/dist/components/PreflightPanel.d.ts.map +1 -0
  32. package/dist/components/PreflightPanel.js +59 -0
  33. package/dist/components/PreflightPanel.js.map +1 -0
  34. package/dist/components/SeparationsPanel.d.ts +9 -0
  35. package/dist/components/SeparationsPanel.d.ts.map +1 -0
  36. package/dist/components/SeparationsPanel.js +147 -0
  37. package/dist/components/SeparationsPanel.js.map +1 -0
  38. package/dist/components/TopBar.d.ts +57 -0
  39. package/dist/components/TopBar.d.ts.map +1 -0
  40. package/dist/components/TopBar.js +70 -0
  41. package/dist/components/TopBar.js.map +1 -0
  42. package/dist/data/dielines.json +186 -0
  43. package/dist/hooks/useEditorMode.d.ts +15 -0
  44. package/dist/hooks/useEditorMode.d.ts.map +1 -0
  45. package/dist/hooks/useEditorMode.js +51 -0
  46. package/dist/hooks/useEditorMode.js.map +1 -0
  47. package/dist/hooks/useIsMobile.d.ts +19 -0
  48. package/dist/hooks/useIsMobile.d.ts.map +1 -0
  49. package/dist/hooks/useIsMobile.js +34 -0
  50. package/dist/hooks/useIsMobile.js.map +1 -0
  51. package/dist/hooks/usePreflight.d.ts +23 -0
  52. package/dist/hooks/usePreflight.d.ts.map +1 -0
  53. package/dist/hooks/usePreflight.js +48 -0
  54. package/dist/hooks/usePreflight.js.map +1 -0
  55. package/dist/index.d.ts +23 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +23 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/lib/bleed.d.ts +27 -0
  60. package/dist/lib/bleed.d.ts.map +1 -0
  61. package/dist/lib/bleed.js +60 -0
  62. package/dist/lib/bleed.js.map +1 -0
  63. package/dist/lib/dieline-template.d.ts +33 -0
  64. package/dist/lib/dieline-template.d.ts.map +1 -0
  65. package/dist/lib/dieline-template.js +43 -0
  66. package/dist/lib/dieline-template.js.map +1 -0
  67. package/dist/lib/editor-config.d.ts +69 -0
  68. package/dist/lib/editor-config.d.ts.map +1 -0
  69. package/dist/lib/editor-config.js +66 -0
  70. package/dist/lib/editor-config.js.map +1 -0
  71. package/dist/lib/preflight/checks.d.ts +8 -0
  72. package/dist/lib/preflight/checks.d.ts.map +1 -0
  73. package/dist/lib/preflight/checks.js +276 -0
  74. package/dist/lib/preflight/checks.js.map +1 -0
  75. package/dist/lib/preflight/index.d.ts +2 -0
  76. package/dist/lib/preflight/index.d.ts.map +1 -0
  77. package/dist/lib/preflight/index.js +3 -0
  78. package/dist/lib/preflight/index.js.map +1 -0
  79. package/dist/lib/preflight/types.d.ts +24 -0
  80. package/dist/lib/preflight/types.d.ts.map +1 -0
  81. package/dist/lib/preflight/types.js +80 -0
  82. package/dist/lib/preflight/types.js.map +1 -0
  83. package/package.json +49 -0
@@ -0,0 +1,276 @@
1
+ import { PDFArray, PDFDict, PDFDocument, PDFName } from "pdf-lib";
2
+ const KNOWN_SPOT_PREFIXES = ["PANTONE", "HKS ", "TOYO", "DIC ", "Reflex Blue", "Rhodamine"];
3
+ export async function runClientChecks(file, rules) {
4
+ const issues = [];
5
+ const skippedChecks = [];
6
+ for (const r of rules.filter((r) => r.enabled && !r.clientSide)) {
7
+ skippedChecks.push(r.checkName);
8
+ }
9
+ const clientRules = rules.filter((r) => r.enabled && r.clientSide);
10
+ const isPdf = file.type === "application/pdf" || file.name.toLowerCase().endsWith(".pdf");
11
+ const isRaster = /^image\/(png|jpeg|tiff|bmp|webp)/.test(file.type);
12
+ let doc = null;
13
+ if (isPdf) {
14
+ try {
15
+ doc = await PDFDocument.load(await file.arrayBuffer(), { ignoreEncryption: true });
16
+ }
17
+ catch {
18
+ return {
19
+ issues: [
20
+ {
21
+ checkName: "parse",
22
+ severity: "block",
23
+ message: "Could not parse the PDF — it may be corrupt or password-protected.",
24
+ },
25
+ ],
26
+ skippedChecks,
27
+ };
28
+ }
29
+ }
30
+ for (const rule of clientRules) {
31
+ switch (rule.checkName) {
32
+ case "dpi_min":
33
+ if (isRaster)
34
+ issues.push(...(await checkRasterDpi(file, rule)));
35
+ else if (doc)
36
+ issues.push(...checkPdfImageDpi(doc, rule));
37
+ break;
38
+ case "bleed_required":
39
+ if (doc)
40
+ issues.push(...checkPdfBleed(doc, rule));
41
+ break;
42
+ case "font_embedding":
43
+ if (doc)
44
+ issues.push(...checkPdfFonts(doc, rule));
45
+ break;
46
+ case "spot_color_validation":
47
+ if (doc)
48
+ issues.push(...checkPdfSpotColors(doc, rule));
49
+ break;
50
+ }
51
+ }
52
+ return { issues, skippedChecks };
53
+ }
54
+ async function checkRasterDpi(file, rule) {
55
+ const minDpi = rule.params.minDpi ?? 300;
56
+ return new Promise((resolve) => {
57
+ const url = URL.createObjectURL(file);
58
+ const img = new Image();
59
+ img.onload = () => {
60
+ URL.revokeObjectURL(url);
61
+ // Without pHYs/EXIF metadata, use pixel count as proxy:
62
+ // flag images that are too small for 300 DPI on a 100 mm wide label.
63
+ const minPxFor100mm = Math.round((100 / 25.4) * minDpi);
64
+ if (img.naturalWidth < minPxFor100mm && img.naturalHeight < minPxFor100mm) {
65
+ resolve([
66
+ {
67
+ checkName: rule.checkName,
68
+ severity: rule.severity,
69
+ message: `Image (${img.naturalWidth}×${img.naturalHeight} px) may be below ${minDpi} DPI for a standard label size.`,
70
+ detail: { naturalWidth: img.naturalWidth, naturalHeight: img.naturalHeight, minDpi },
71
+ },
72
+ ]);
73
+ }
74
+ else {
75
+ resolve([]);
76
+ }
77
+ };
78
+ img.onerror = () => {
79
+ URL.revokeObjectURL(url);
80
+ resolve([]);
81
+ };
82
+ img.src = url;
83
+ });
84
+ }
85
+ function checkPdfImageDpi(doc, rule) {
86
+ const minDpi = rule.params.minDpi ?? 300;
87
+ const pages = doc.getPages();
88
+ if (pages.length === 0)
89
+ return [];
90
+ // pdf-lib doesn't expose image physical dimensions directly;
91
+ // detect embedded XObjects so the user knows DPI will be verified by the lint node.
92
+ for (const page of pages) {
93
+ const resources = page.node.Resources();
94
+ if (!resources)
95
+ continue;
96
+ const xoRef = resources.get(PDFName.of("XObject"));
97
+ if (xoRef) {
98
+ return [
99
+ {
100
+ checkName: rule.checkName,
101
+ severity: "warn",
102
+ message: `Embedded image(s) found — DPI (target: ${minDpi}) will be confirmed by the lint node.`,
103
+ detail: { delegated: true },
104
+ },
105
+ ];
106
+ }
107
+ }
108
+ return [];
109
+ }
110
+ function checkPdfBleed(doc, rule) {
111
+ const bleedMm = rule.params.bleedMm ?? 3;
112
+ const bleedPt = bleedMm * (72 / 25.4);
113
+ const issues = [];
114
+ doc.getPages().forEach((page, i) => {
115
+ const mediaBox = page.getMediaBox();
116
+ const bleedBox = page.getBleedBox();
117
+ const trimBox = page.getTrimBox();
118
+ const artBox = page.getArtBox();
119
+ const ref = trimBox ?? artBox ?? mediaBox;
120
+ const left = ref.x - bleedBox.x;
121
+ const bottom = ref.y - bleedBox.y;
122
+ const right = bleedBox.x + bleedBox.width - (ref.x + ref.width);
123
+ const top = bleedBox.y + bleedBox.height - (ref.y + ref.height);
124
+ const minBleedPt = Math.min(left, bottom, right, top);
125
+ if (minBleedPt < bleedPt - 0.5) {
126
+ const actualMm = +((minBleedPt * 25.4) / 72).toFixed(1);
127
+ issues.push({
128
+ checkName: rule.checkName,
129
+ severity: rule.severity,
130
+ message: `Page ${i + 1}: bleed is ${actualMm} mm — minimum ${bleedMm} mm required.`,
131
+ page: i + 1,
132
+ detail: { actualMm, requiredMm: bleedMm },
133
+ });
134
+ }
135
+ });
136
+ return issues;
137
+ }
138
+ function checkPdfFonts(doc, rule) {
139
+ const unembedded = [];
140
+ for (const page of doc.getPages()) {
141
+ const resources = page.node.Resources();
142
+ if (!resources)
143
+ continue;
144
+ const fontDictRef = resources.get(PDFName.of("Font"));
145
+ if (!fontDictRef)
146
+ continue;
147
+ let fontDict;
148
+ try {
149
+ fontDict = doc.context.lookup(fontDictRef, PDFDict);
150
+ }
151
+ catch {
152
+ continue;
153
+ }
154
+ if (!fontDict)
155
+ continue;
156
+ for (const key of fontDict.keys()) {
157
+ const fontRef = fontDict.get(key);
158
+ if (!fontRef)
159
+ continue;
160
+ let font;
161
+ try {
162
+ font = doc.context.lookup(fontRef, PDFDict);
163
+ }
164
+ catch {
165
+ continue;
166
+ }
167
+ if (!font)
168
+ continue;
169
+ const baseFont = font.get(PDFName.of("BaseFont"));
170
+ const fontName = (baseFont ? String(baseFont) : String(key)).replace(/^\//, "");
171
+ const descRef = font.get(PDFName.of("FontDescriptor"));
172
+ if (!descRef) {
173
+ if (!unembedded.includes(fontName))
174
+ unembedded.push(fontName);
175
+ continue;
176
+ }
177
+ let desc;
178
+ try {
179
+ desc = doc.context.lookup(descRef, PDFDict);
180
+ }
181
+ catch {
182
+ continue;
183
+ }
184
+ if (!desc)
185
+ continue;
186
+ const embedded = desc.get(PDFName.of("FontFile")) ??
187
+ desc.get(PDFName.of("FontFile2")) ??
188
+ desc.get(PDFName.of("FontFile3"));
189
+ if (!embedded && !unembedded.includes(fontName)) {
190
+ unembedded.push(fontName);
191
+ }
192
+ }
193
+ }
194
+ const unique = [...new Set(unembedded)];
195
+ if (unique.length === 0)
196
+ return [];
197
+ return [
198
+ {
199
+ checkName: rule.checkName,
200
+ severity: rule.severity,
201
+ message: `Unembedded font(s): ${unique.slice(0, 5).join(", ")}${unique.length > 5 ? ` +${unique.length - 5} more` : ""}.`,
202
+ detail: { fonts: unique },
203
+ },
204
+ ];
205
+ }
206
+ function checkPdfSpotColors(doc, rule) {
207
+ const unknown = [];
208
+ for (const page of doc.getPages()) {
209
+ const resources = page.node.Resources();
210
+ if (!resources)
211
+ continue;
212
+ const csDictRef = resources.get(PDFName.of("ColorSpace"));
213
+ if (!csDictRef)
214
+ continue;
215
+ let csDict;
216
+ try {
217
+ csDict = doc.context.lookup(csDictRef, PDFDict);
218
+ }
219
+ catch {
220
+ continue;
221
+ }
222
+ if (!csDict)
223
+ continue;
224
+ for (const key of csDict.keys()) {
225
+ const csRef = csDict.get(key);
226
+ if (!csRef)
227
+ continue;
228
+ let csArr;
229
+ try {
230
+ const resolved = doc.context.lookup(csRef);
231
+ if (resolved instanceof PDFArray)
232
+ csArr = resolved;
233
+ }
234
+ catch {
235
+ continue;
236
+ }
237
+ if (!csArr || csArr.size() < 2)
238
+ continue;
239
+ const type = String(csArr.get(0)).replace(/^\//, "");
240
+ if (type !== "Separation" && type !== "DeviceN")
241
+ continue;
242
+ const colorantEntry = csArr.get(1);
243
+ if (!colorantEntry)
244
+ continue;
245
+ const names = [];
246
+ if (type === "Separation") {
247
+ names.push(String(colorantEntry).replace(/^\//, ""));
248
+ }
249
+ else if (colorantEntry instanceof PDFArray) {
250
+ for (let i = 0; i < colorantEntry.size(); i++) {
251
+ const n = colorantEntry.get(i);
252
+ if (n)
253
+ names.push(String(n).replace(/^\//, ""));
254
+ }
255
+ }
256
+ for (const name of names) {
257
+ if (name === "All" || name === "None")
258
+ continue;
259
+ const known = KNOWN_SPOT_PREFIXES.some((p) => name.toUpperCase().startsWith(p.toUpperCase()));
260
+ if (!known && !unknown.includes(name))
261
+ unknown.push(name);
262
+ }
263
+ }
264
+ }
265
+ if (unknown.length === 0)
266
+ return [];
267
+ return [
268
+ {
269
+ checkName: rule.checkName,
270
+ severity: rule.severity,
271
+ message: `Unknown spot color(s): ${unknown.join(", ")} — verify against your press specification.`,
272
+ detail: { colors: unknown },
273
+ },
274
+ ];
275
+ }
276
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/lib/preflight/checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { runClientChecks } from "./checks";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/preflight/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ export { runClientChecks } from "./checks";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/preflight/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type PreflightSeverity = "block" | "warn";
2
+ export type PreflightRule = {
3
+ checkName: string;
4
+ enabled: boolean;
5
+ severity: PreflightSeverity;
6
+ clientSide: boolean;
7
+ params: Record<string, unknown>;
8
+ };
9
+ export type PreflightIssue = {
10
+ checkName: string;
11
+ severity: PreflightSeverity;
12
+ message: string;
13
+ page?: number;
14
+ detail?: Record<string, unknown>;
15
+ };
16
+ export type PreflightReport = {
17
+ passed: boolean;
18
+ hasBlockingIssues: boolean;
19
+ issues: PreflightIssue[];
20
+ skippedChecks: string[];
21
+ checkedAt: string;
22
+ };
23
+ export declare const DEFAULT_PREFLIGHT_RULES: PreflightRule[];
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,80 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ //
3
+ // Preflight types and the default rule set, vendored from
4
+ // `@artworkpdf/document-model` so the published package has no
5
+ // workspace-only runtime dependency. Kept structurally identical so
6
+ // internal hosts that already import from document-model see no
7
+ // behaviour difference.
8
+ export const DEFAULT_PREFLIGHT_RULES = [
9
+ {
10
+ checkName: "dpi_min",
11
+ enabled: true,
12
+ severity: "block",
13
+ clientSide: true,
14
+ params: { minDpi: 300 },
15
+ },
16
+ {
17
+ checkName: "font_embedding",
18
+ enabled: true,
19
+ severity: "block",
20
+ clientSide: true,
21
+ params: {},
22
+ },
23
+ {
24
+ checkName: "bleed_required",
25
+ enabled: true,
26
+ severity: "block",
27
+ clientSide: true,
28
+ params: { bleedMm: 3 },
29
+ },
30
+ {
31
+ checkName: "spot_color_validation",
32
+ enabled: true,
33
+ severity: "warn",
34
+ clientSide: true,
35
+ params: { allowUnknown: false },
36
+ },
37
+ {
38
+ checkName: "min_font_size_pt",
39
+ enabled: true,
40
+ severity: "block",
41
+ clientSide: false,
42
+ params: { minPt: 4 },
43
+ },
44
+ {
45
+ checkName: "min_line_weight_pt",
46
+ enabled: true,
47
+ severity: "block",
48
+ clientSide: false,
49
+ params: { minPt: 0.25 },
50
+ },
51
+ {
52
+ checkName: "total_ink_coverage",
53
+ enabled: true,
54
+ severity: "warn",
55
+ clientSide: false,
56
+ params: { maxPercent: 300 },
57
+ },
58
+ {
59
+ checkName: "color_profile",
60
+ enabled: true,
61
+ severity: "warn",
62
+ clientSide: false,
63
+ params: { allowedProfiles: ["ISOcoated_v2_eci", "Fogra51", "GRACoL2006_Coated"] },
64
+ },
65
+ {
66
+ checkName: "overprint_settings",
67
+ enabled: true,
68
+ severity: "warn",
69
+ clientSide: false,
70
+ params: { requireBlackOverprint: true },
71
+ },
72
+ {
73
+ checkName: "image_mode",
74
+ enabled: true,
75
+ severity: "block",
76
+ clientSide: false,
77
+ params: { allowedModes: ["CMYK", "Spot", "DeviceN", "Gray"] },
78
+ },
79
+ ];
80
+ //# sourceMappingURL=types.js.map
@@ -0,0 +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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@printwithsynergy/artwork-pdf-editor",
3
+ "version": "0.1.1",
4
+ "description": "artworkPDF WYSIWYG editor as a host-customizable React component. Drop-in mountable in Next.js, Astro, Remix, etc.",
5
+ "license": "AGPL-3.0-or-later",
6
+ "type": "module",
7
+ "main": "./src/index.ts",
8
+ "types": "./src/index.ts",
9
+ "exports": {
10
+ ".": "./src/index.ts"
11
+ },
12
+ "files": ["dist", "README.md", "LICENSE"],
13
+ "sideEffects": false,
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.build.json",
16
+ "typecheck": "tsc --noEmit",
17
+ "test": "vitest run --passWithNoTests"
18
+ },
19
+ "dependencies": {
20
+ "pdf-lib": "^1.17.1"
21
+ },
22
+ "peerDependencies": {
23
+ "react": "^19.0.0",
24
+ "react-dom": "^19.0.0",
25
+ "react-konva": "^19.0.0",
26
+ "konva": "^10.3.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/react": "^19.0.0",
30
+ "@types/react-dom": "^19.0.0",
31
+ "konva": "^10.3.0",
32
+ "react": "^19.0.0",
33
+ "react-dom": "^19.0.0",
34
+ "react-konva": "^19.0.0",
35
+ "typescript": "^5.7.0",
36
+ "vitest": "^3.2.0"
37
+ },
38
+ "publishConfig": {
39
+ "access": "public",
40
+ "main": "./dist/index.js",
41
+ "types": "./dist/index.d.ts",
42
+ "exports": {
43
+ ".": {
44
+ "types": "./dist/index.d.ts",
45
+ "import": "./dist/index.js"
46
+ }
47
+ }
48
+ }
49
+ }