@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.
- package/LICENSE +62 -0
- package/README.md +63 -2
- package/dist/components/AccessibilityHintsPanel.d.ts +142 -0
- package/dist/components/AccessibilityHintsPanel.d.ts.map +1 -0
- package/dist/components/AccessibilityHintsPanel.js +158 -0
- package/dist/components/AccessibilityHintsPanel.js.map +1 -0
- package/dist/components/AnnotationOverlay.d.ts +142 -0
- package/dist/components/AnnotationOverlay.d.ts.map +1 -0
- package/dist/components/AnnotationOverlay.js +141 -0
- package/dist/components/AnnotationOverlay.js.map +1 -0
- package/dist/components/AnnotationsSidebar.d.ts +98 -0
- package/dist/components/AnnotationsSidebar.d.ts.map +1 -0
- package/dist/components/AnnotationsSidebar.js +100 -0
- package/dist/components/AnnotationsSidebar.js.map +1 -0
- package/dist/components/BarcodeGeneratorPanel.d.ts +58 -0
- package/dist/components/BarcodeGeneratorPanel.d.ts.map +1 -0
- package/dist/components/BarcodeGeneratorPanel.js +91 -0
- package/dist/components/BarcodeGeneratorPanel.js.map +1 -0
- package/dist/components/BraillePanel.d.ts +99 -0
- package/dist/components/BraillePanel.d.ts.map +1 -0
- package/dist/components/BraillePanel.js +221 -0
- package/dist/components/BraillePanel.js.map +1 -0
- package/dist/components/BrandAssetsPanel.d.ts +130 -0
- package/dist/components/BrandAssetsPanel.d.ts.map +1 -0
- package/dist/components/BrandAssetsPanel.js +125 -0
- package/dist/components/BrandAssetsPanel.js.map +1 -0
- package/dist/components/BrandConsistencyPanel.d.ts +140 -0
- package/dist/components/BrandConsistencyPanel.d.ts.map +1 -0
- package/dist/components/BrandConsistencyPanel.js +158 -0
- package/dist/components/BrandConsistencyPanel.js.map +1 -0
- package/dist/components/ComplianceFindingsPanel.d.ts +62 -0
- package/dist/components/ComplianceFindingsPanel.d.ts.map +1 -0
- package/dist/components/ComplianceFindingsPanel.js +118 -0
- package/dist/components/ComplianceFindingsPanel.js.map +1 -0
- package/dist/components/DesignSuggestionsPanel.d.ts +148 -0
- package/dist/components/DesignSuggestionsPanel.d.ts.map +1 -0
- package/dist/components/DesignSuggestionsPanel.js +154 -0
- package/dist/components/DesignSuggestionsPanel.js.map +1 -0
- package/dist/components/DielineParametersPanel.d.ts +62 -0
- package/dist/components/DielineParametersPanel.d.ts.map +1 -0
- package/dist/components/DielineParametersPanel.js +170 -0
- package/dist/components/DielineParametersPanel.js.map +1 -0
- package/dist/components/DielinePreview.d.ts +150 -0
- package/dist/components/DielinePreview.d.ts.map +1 -0
- package/dist/components/DielinePreview.js +146 -0
- package/dist/components/DielinePreview.js.map +1 -0
- package/dist/components/EditorApp.d.ts +39 -5
- package/dist/components/EditorApp.d.ts.map +1 -1
- package/dist/components/EditorApp.js +110 -5
- package/dist/components/EditorApp.js.map +1 -1
- package/dist/components/EditorCanvas.d.ts +51 -2
- package/dist/components/EditorCanvas.d.ts.map +1 -1
- package/dist/components/EditorCanvas.js +117 -48
- package/dist/components/EditorCanvas.js.map +1 -1
- package/dist/components/EmailNotifyPanel.d.ts +165 -0
- package/dist/components/EmailNotifyPanel.d.ts.map +1 -0
- package/dist/components/EmailNotifyPanel.js +211 -0
- package/dist/components/EmailNotifyPanel.js.map +1 -0
- package/dist/components/FileDropZone.d.ts +9 -1
- package/dist/components/FileDropZone.d.ts.map +1 -1
- package/dist/components/FileDropZone.js +53 -5
- package/dist/components/FileDropZone.js.map +1 -1
- package/dist/components/FoldEditorPanel.d.ts +68 -0
- package/dist/components/FoldEditorPanel.d.ts.map +1 -0
- package/dist/components/FoldEditorPanel.js +65 -0
- package/dist/components/FoldEditorPanel.js.map +1 -0
- package/dist/components/FoldPreviewOverlay.d.ts +48 -0
- package/dist/components/FoldPreviewOverlay.d.ts.map +1 -0
- package/dist/components/FoldPreviewOverlay.js +182 -0
- package/dist/components/FoldPreviewOverlay.js.map +1 -0
- package/dist/components/Gs1DigitalLinkPanel.d.ts +103 -0
- package/dist/components/Gs1DigitalLinkPanel.d.ts.map +1 -0
- package/dist/components/Gs1DigitalLinkPanel.js +199 -0
- package/dist/components/Gs1DigitalLinkPanel.js.map +1 -0
- package/dist/components/HistoryPanel.d.ts +39 -0
- package/dist/components/HistoryPanel.d.ts.map +1 -0
- package/dist/components/HistoryPanel.js +72 -0
- package/dist/components/HistoryPanel.js.map +1 -0
- package/dist/components/IccSoftProofOverlay.d.ts +67 -0
- package/dist/components/IccSoftProofOverlay.d.ts.map +1 -0
- package/dist/components/IccSoftProofOverlay.js +119 -0
- package/dist/components/IccSoftProofOverlay.js.map +1 -0
- package/dist/components/ImposePanel.d.ts +71 -0
- package/dist/components/ImposePanel.d.ts.map +1 -0
- package/dist/components/ImposePanel.js +127 -0
- package/dist/components/ImposePanel.js.map +1 -0
- package/dist/components/InksPanel.d.ts +61 -0
- package/dist/components/InksPanel.d.ts.map +1 -0
- package/dist/components/InksPanel.js +84 -0
- package/dist/components/InksPanel.js.map +1 -0
- package/dist/components/JobSetupPanel.d.ts +118 -0
- package/dist/components/JobSetupPanel.d.ts.map +1 -0
- package/dist/components/JobSetupPanel.js +169 -0
- package/dist/components/JobSetupPanel.js.map +1 -0
- package/dist/components/LayersPanel.d.ts.map +1 -1
- package/dist/components/LayersPanel.js +1 -0
- package/dist/components/LayersPanel.js.map +1 -1
- package/dist/components/MarkLibraryPanel.d.ts +131 -0
- package/dist/components/MarkLibraryPanel.d.ts.map +1 -0
- package/dist/components/MarkLibraryPanel.js +184 -0
- package/dist/components/MarkLibraryPanel.js.map +1 -0
- package/dist/components/MisEstimateButton.d.ts +73 -0
- package/dist/components/MisEstimateButton.d.ts.map +1 -0
- package/dist/components/MisEstimateButton.js +57 -0
- package/dist/components/MisEstimateButton.js.map +1 -0
- package/dist/components/NutritionPanel.d.ts +118 -0
- package/dist/components/NutritionPanel.d.ts.map +1 -0
- package/dist/components/NutritionPanel.js +169 -0
- package/dist/components/NutritionPanel.js.map +1 -0
- package/dist/components/PageNavigator.d.ts +26 -0
- package/dist/components/PageNavigator.d.ts.map +1 -0
- package/dist/components/PageNavigator.js +96 -0
- package/dist/components/PageNavigator.js.map +1 -0
- package/dist/components/PaletteManager.d.ts +32 -0
- package/dist/components/PaletteManager.d.ts.map +1 -0
- package/dist/components/PaletteManager.js +89 -0
- package/dist/components/PaletteManager.js.map +1 -0
- package/dist/components/PaletteToSpotPanel.d.ts +122 -0
- package/dist/components/PaletteToSpotPanel.d.ts.map +1 -0
- package/dist/components/PaletteToSpotPanel.js +160 -0
- package/dist/components/PaletteToSpotPanel.js.map +1 -0
- package/dist/components/PreflightAutoFixPanel.d.ts +110 -0
- package/dist/components/PreflightAutoFixPanel.d.ts.map +1 -0
- package/dist/components/PreflightAutoFixPanel.js +119 -0
- package/dist/components/PreflightAutoFixPanel.js.map +1 -0
- package/dist/components/PreflightDiffPanel.d.ts +127 -0
- package/dist/components/PreflightDiffPanel.d.ts.map +1 -0
- package/dist/components/PreflightDiffPanel.js +0 -0
- package/dist/components/PreflightDiffPanel.js.map +1 -0
- package/dist/components/ProcessRulesPanel.d.ts +81 -0
- package/dist/components/ProcessRulesPanel.d.ts.map +1 -0
- package/dist/components/ProcessRulesPanel.js +143 -0
- package/dist/components/ProcessRulesPanel.js.map +1 -0
- package/dist/components/SlackNotifyPanel.d.ts +139 -0
- package/dist/components/SlackNotifyPanel.d.ts.map +1 -0
- package/dist/components/SlackNotifyPanel.js +133 -0
- package/dist/components/SlackNotifyPanel.js.map +1 -0
- package/dist/components/SmartSpotMatchPanel.d.ts +143 -0
- package/dist/components/SmartSpotMatchPanel.d.ts.map +1 -0
- package/dist/components/SmartSpotMatchPanel.js +159 -0
- package/dist/components/SmartSpotMatchPanel.js.map +1 -0
- package/dist/components/SwatchesPicker.d.ts +83 -0
- package/dist/components/SwatchesPicker.d.ts.map +1 -0
- package/dist/components/SwatchesPicker.js +151 -0
- package/dist/components/SwatchesPicker.js.map +1 -0
- package/dist/components/TacOverlay.d.ts +47 -0
- package/dist/components/TacOverlay.d.ts.map +1 -0
- package/dist/components/TacOverlay.js +116 -0
- package/dist/components/TacOverlay.js.map +1 -0
- package/dist/components/TrapEditorPanel.d.ts +52 -0
- package/dist/components/TrapEditorPanel.d.ts.map +1 -0
- package/dist/components/TrapEditorPanel.js +64 -0
- package/dist/components/TrapEditorPanel.js.map +1 -0
- package/dist/components/TrapPreviewOverlay.d.ts +64 -0
- package/dist/components/TrapPreviewOverlay.d.ts.map +1 -0
- package/dist/components/TrapPreviewOverlay.js +120 -0
- package/dist/components/TrapPreviewOverlay.js.map +1 -0
- package/dist/components/VariantMatrixPanel.d.ts +61 -0
- package/dist/components/VariantMatrixPanel.d.ts.map +1 -0
- package/dist/components/VariantMatrixPanel.js +97 -0
- package/dist/components/VariantMatrixPanel.js.map +1 -0
- package/dist/components/VariantMatrixVersionPanel.d.ts +122 -0
- package/dist/components/VariantMatrixVersionPanel.d.ts.map +1 -0
- package/dist/components/VariantMatrixVersionPanel.js +162 -0
- package/dist/components/VariantMatrixVersionPanel.js.map +1 -0
- package/dist/components/WebhookNotifyPanel.d.ts +160 -0
- package/dist/components/WebhookNotifyPanel.d.ts.map +1 -0
- package/dist/components/WebhookNotifyPanel.js +100 -0
- package/dist/components/WebhookNotifyPanel.js.map +1 -0
- package/dist/components/WhiteUnderbasePanel.d.ts +107 -0
- package/dist/components/WhiteUnderbasePanel.d.ts.map +1 -0
- package/dist/components/WhiteUnderbasePanel.js +104 -0
- package/dist/components/WhiteUnderbasePanel.js.map +1 -0
- package/dist/data/dielines.json +35 -0
- package/dist/hooks/useEditorMode.d.ts +25 -5
- package/dist/hooks/useEditorMode.d.ts.map +1 -1
- package/dist/hooks/useEditorMode.js +18 -5
- package/dist/hooks/useEditorMode.js.map +1 -1
- package/dist/index.d.ts +49 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -2
- package/dist/index.js.map +1 -1
- package/dist/lens/dieline-overlay.d.ts +25 -0
- package/dist/lens/dieline-overlay.d.ts.map +1 -0
- package/dist/lens/dieline-overlay.js +50 -0
- package/dist/lens/dieline-overlay.js.map +1 -0
- package/dist/lens/index.d.ts +27 -0
- package/dist/lens/index.d.ts.map +1 -0
- package/dist/lens/index.js +28 -0
- package/dist/lens/index.js.map +1 -0
- package/dist/lens/preflight-findings.d.ts +21 -0
- package/dist/lens/preflight-findings.d.ts.map +1 -0
- package/dist/lens/preflight-findings.js +82 -0
- package/dist/lens/preflight-findings.js.map +1 -0
- package/dist/lib/barcode-scan.d.ts +154 -0
- package/dist/lib/barcode-scan.d.ts.map +1 -0
- package/dist/lib/barcode-scan.js +152 -0
- package/dist/lib/barcode-scan.js.map +1 -0
- package/dist/lib/color-math.d.ts +76 -0
- package/dist/lib/color-math.d.ts.map +1 -0
- package/dist/lib/color-math.js +96 -0
- package/dist/lib/color-math.js.map +1 -0
- package/dist/lib/dieline-template.d.ts +169 -0
- package/dist/lib/dieline-template.d.ts.map +1 -1
- package/dist/lib/dieline-template.js +229 -1
- package/dist/lib/dieline-template.js.map +1 -1
- package/dist/lib/editor-config.d.ts +384 -1
- package/dist/lib/editor-config.d.ts.map +1 -1
- package/dist/lib/editor-config.js +89 -2
- package/dist/lib/editor-config.js.map +1 -1
- package/dist/lib/fold-geometry.d.ts +144 -0
- package/dist/lib/fold-geometry.d.ts.map +1 -0
- package/dist/lib/fold-geometry.js +138 -0
- package/dist/lib/fold-geometry.js.map +1 -0
- package/dist/lib/merge-tokens.d.ts +81 -0
- package/dist/lib/merge-tokens.d.ts.map +1 -0
- package/dist/lib/merge-tokens.js +88 -0
- package/dist/lib/merge-tokens.js.map +1 -0
- package/dist/lib/palette-registry.d.ts +40 -0
- package/dist/lib/palette-registry.d.ts.map +1 -0
- package/dist/lib/palette-registry.js +49 -0
- package/dist/lib/palette-registry.js.map +1 -0
- package/dist/lib/panel-anchor.d.ts +101 -0
- package/dist/lib/panel-anchor.d.ts.map +1 -0
- package/dist/lib/panel-anchor.js +68 -0
- package/dist/lib/panel-anchor.js.map +1 -0
- package/dist/lib/preflight/checks.d.ts.map +1 -1
- package/dist/lib/preflight/checks.js +71 -0
- package/dist/lib/preflight/checks.js.map +1 -1
- package/dist/lib/preflight/types.d.ts.map +1 -1
- package/dist/lib/preflight/types.js +11 -0
- package/dist/lib/preflight/types.js.map +1 -1
- package/dist/lib/rasterize.d.ts +93 -0
- package/dist/lib/rasterize.d.ts.map +1 -0
- package/dist/lib/rasterize.js +117 -0
- package/dist/lib/rasterize.js.map +1 -0
- package/dist/lib/separations-registry.d.ts +99 -0
- package/dist/lib/separations-registry.d.ts.map +1 -0
- package/dist/lib/separations-registry.js +59 -0
- package/dist/lib/separations-registry.js.map +1 -0
- package/dist/lib/unwired.d.ts +29 -0
- package/dist/lib/unwired.d.ts.map +1 -0
- package/dist/lib/unwired.js +58 -0
- package/dist/lib/unwired.js.map +1 -0
- package/package.json +29 -11
- package/dist/components/SeparationsPanel.d.ts +0 -9
- package/dist/components/SeparationsPanel.d.ts.map +0 -1
- package/dist/components/SeparationsPanel.js +0 -168
- package/dist/components/SeparationsPanel.js.map +0 -1
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
//
|
|
3
|
+
// Dieline-template bundle + helpers for seeding the editor canvas.
|
|
4
|
+
//
|
|
5
|
+
// The shipped JSON library (`data/dielines.json`) gets loaded eagerly
|
|
6
|
+
// so server components (Next.js RSC, Astro frontmatter) can pick a
|
|
7
|
+
// template and produce initial Page state without touching the
|
|
8
|
+
// browser-only editor bundle.
|
|
9
|
+
//
|
|
10
|
+
// `dielineToPage()` is the parallel ingress for user-supplied CF2 /
|
|
11
|
+
// DDES / ARD files (parsed via `@artworkpdf/dieline-parser`'s
|
|
12
|
+
// `parseCF2` / `parseDDES` / `parseARD`) — each parsed `Dieline`
|
|
13
|
+
// becomes a single-page `Page` seeded with one locked path per
|
|
14
|
+
// `DielinePath`.
|
|
1
15
|
import library from "../data/dielines.json";
|
|
2
16
|
const MM_TO_PT = 2.83465;
|
|
3
17
|
/** Stroke color + display name for the dieline trim rect. The dieline
|
|
@@ -5,7 +19,31 @@ const MM_TO_PT = 2.83465;
|
|
|
5
19
|
* rather than being lumped in with artwork spot inks. */
|
|
6
20
|
export const DIELINE_STROKE = "#fc5102";
|
|
7
21
|
export const DIELINE_NAME = "Die Line";
|
|
8
|
-
|
|
22
|
+
const LIBRARY = library;
|
|
23
|
+
/**
|
|
24
|
+
* All bundled dieline templates, in library declaration order.
|
|
25
|
+
*
|
|
26
|
+
* Mirrors the shape of `data/dielines.json`. Hosts that want a
|
|
27
|
+
* filtered or ordered subset should derive from this array rather
|
|
28
|
+
* than reloading the JSON file.
|
|
29
|
+
*
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export const TEMPLATES = LIBRARY.templates;
|
|
33
|
+
/**
|
|
34
|
+
* Bundled multi-page template sets (e.g. carton front + back). Empty if
|
|
35
|
+
* the library has none.
|
|
36
|
+
*
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
export const TEMPLATE_SETS = LIBRARY.templateSets ?? [];
|
|
40
|
+
/**
|
|
41
|
+
* Return the library's default template (`isDefault: true`), falling
|
|
42
|
+
* back to the first entry. Throws if the library is empty — that
|
|
43
|
+
* would indicate a packaging defect, not a runtime condition.
|
|
44
|
+
*
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
9
47
|
export function getDefaultTemplate() {
|
|
10
48
|
const flagged = TEMPLATES.find((t) => t.isDefault);
|
|
11
49
|
if (flagged)
|
|
@@ -15,11 +53,90 @@ export function getDefaultTemplate() {
|
|
|
15
53
|
throw new Error("dielines.json contains no templates");
|
|
16
54
|
return first;
|
|
17
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Lookup by template id. Returns `undefined` (not throws) for
|
|
58
|
+
* unknown or missing ids so callers can fall back to a default.
|
|
59
|
+
*
|
|
60
|
+
* @public
|
|
61
|
+
*/
|
|
18
62
|
export function getTemplateById(id) {
|
|
19
63
|
if (!id)
|
|
20
64
|
return undefined;
|
|
21
65
|
return TEMPLATES.find((t) => t.id === id);
|
|
22
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Lookup a multi-page template set by id (e.g. `"carton-6x4x2-set"`).
|
|
69
|
+
* Returns `undefined` for unknown / missing.
|
|
70
|
+
*
|
|
71
|
+
* @public
|
|
72
|
+
*/
|
|
73
|
+
export function getTemplateSetById(id) {
|
|
74
|
+
if (!id)
|
|
75
|
+
return undefined;
|
|
76
|
+
return TEMPLATE_SETS.find((s) => s.id === id);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Expand a {@link TemplateSet} into an ordered list of {@link Page}s.
|
|
80
|
+
* Each set entry resolves to its `DielineTemplate`; unknown ids are
|
|
81
|
+
* skipped (so callers always get a non-throwing result they can fall
|
|
82
|
+
* back from).
|
|
83
|
+
*
|
|
84
|
+
* @public
|
|
85
|
+
*/
|
|
86
|
+
export function templateSetToPages(set, bleedMmOverride) {
|
|
87
|
+
return set.pages
|
|
88
|
+
.map(({ templateId, name }) => {
|
|
89
|
+
const tpl = getTemplateById(templateId);
|
|
90
|
+
return tpl ? templateToPage(tpl, bleedMmOverride, name) : null;
|
|
91
|
+
})
|
|
92
|
+
.filter((p) => p !== null);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Build a {@link Page} from a {@link DielineTemplate}. Mirrors the
|
|
96
|
+
* single-page {@link templateToInitialState} output but in the new
|
|
97
|
+
* multi-page shape. Use this to seed `EditorAppProps.initialPages`.
|
|
98
|
+
*
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
export function templateToPage(template, bleedMmOverride, name) {
|
|
102
|
+
const { objects, pageSize } = templateToInitialState(template, bleedMmOverride);
|
|
103
|
+
const page = {
|
|
104
|
+
id: `page-${template.id}-${Math.random().toString(36).slice(2, 8)}`,
|
|
105
|
+
objects,
|
|
106
|
+
pageSize,
|
|
107
|
+
bleedMm: bleedMmOverride ?? template.bleedMm,
|
|
108
|
+
templateId: template.id,
|
|
109
|
+
};
|
|
110
|
+
if (name !== undefined)
|
|
111
|
+
page.name = name;
|
|
112
|
+
return page;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Build a list of {@link Page}s from an ordered set of templates +
|
|
116
|
+
* per-page names. Convenience for multi-page document sets (e.g. a
|
|
117
|
+
* carton's front / back / spine).
|
|
118
|
+
*
|
|
119
|
+
* @public
|
|
120
|
+
*/
|
|
121
|
+
export function templatesToPages(entries, bleedMmOverride) {
|
|
122
|
+
return entries.map(({ template, name }) => templateToPage(template, bleedMmOverride, name));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Build the initial canvas state for a single template — the dieline
|
|
126
|
+
* trim rect (locked, non-interactive) plus the page size including
|
|
127
|
+
* bleed on all sides.
|
|
128
|
+
*
|
|
129
|
+
* Pass `bleedMmOverride` to use a host-supplied bleed instead of the
|
|
130
|
+
* template's bundled value (e.g. when the user picks a custom bleed
|
|
131
|
+
* in the URL or UI). Returned coordinates are in PDF points
|
|
132
|
+
* (1 mm = 2.83465 pt).
|
|
133
|
+
*
|
|
134
|
+
* Use this for single-page seeds; for multi-page documents use
|
|
135
|
+
* {@link templateToPage} or {@link templatesToPages} which wrap the
|
|
136
|
+
* result in a {@link Page}.
|
|
137
|
+
*
|
|
138
|
+
* @public
|
|
139
|
+
*/
|
|
23
140
|
export function templateToInitialState(template, bleedMmOverride) {
|
|
24
141
|
const bleedMm = bleedMmOverride ?? template.bleedMm;
|
|
25
142
|
const pageSize = {
|
|
@@ -46,4 +163,115 @@ export function templateToInitialState(template, bleedMmOverride) {
|
|
|
46
163
|
};
|
|
47
164
|
return { objects: [dielineObj], pageSize };
|
|
48
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Stroke color per DielinePath type. Chosen to match the
|
|
168
|
+
* print-industry conventions our preview uses elsewhere:
|
|
169
|
+
*
|
|
170
|
+
* - cut — orange (brand, same as bundled DIELINE_STROKE)
|
|
171
|
+
* - crease — blue (folding score)
|
|
172
|
+
* - perf — red (perforation)
|
|
173
|
+
* - bleed — cyan (bleed edge / safety boundary)
|
|
174
|
+
*/
|
|
175
|
+
const DIELINE_PATH_STROKES = {
|
|
176
|
+
cut: DIELINE_STROKE,
|
|
177
|
+
crease: "#1e90ff",
|
|
178
|
+
perf: "#ef4444",
|
|
179
|
+
bleed: "#0ea5e9",
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Scale every coordinate in an SVG `d` string from millimeters to
|
|
183
|
+
* PDF points (multiply by `MM_TO_PT`).
|
|
184
|
+
*
|
|
185
|
+
* The dieline-parser emits absolute `M` / `L` / `A` commands in
|
|
186
|
+
* dieline-native millimeters. The editor's Konva Stage is configured
|
|
187
|
+
* in PDF points (the canvas / pageSize math is all in points), so
|
|
188
|
+
* the raw `d` string would render at ~35% of intended size if used
|
|
189
|
+
* directly. We pre-scale here so `pathData` matches the canvas unit
|
|
190
|
+
* system end-to-end (no Konva.Path `scaleX` / `scaleY` shenanigans
|
|
191
|
+
* that would also scale stroke width).
|
|
192
|
+
*
|
|
193
|
+
* Per-command coordinate slots:
|
|
194
|
+
* - `M x,y` / `L x,y` → both coordinates are positions; scale all.
|
|
195
|
+
* - `A rx,ry,xRot,largeArc,sweep,x,y` → rx and ry are radii (scale),
|
|
196
|
+
* xRot is degrees (pass through), the two flags are 0/1 (pass
|
|
197
|
+
* through), the trailing x,y are positions (scale).
|
|
198
|
+
*
|
|
199
|
+
* Unknown commands pass through unchanged. The parser's output only
|
|
200
|
+
* uses M / L / A so the full SVG-path alphabet doesn't need handling.
|
|
201
|
+
*/
|
|
202
|
+
function scalePathMmToPt(d) {
|
|
203
|
+
return d.replace(/([MLA])\s*([\d.,\s-]+)/g, (_, cmd, args) => {
|
|
204
|
+
const nums = args
|
|
205
|
+
.trim()
|
|
206
|
+
.split(/[\s,]+/)
|
|
207
|
+
.map(Number)
|
|
208
|
+
.filter((n) => !Number.isNaN(n));
|
|
209
|
+
if (cmd === "A") {
|
|
210
|
+
// Arc: rx, ry, xRot, largeArc, sweep, x, y — scale rx, ry, x, y; pass others.
|
|
211
|
+
const out = [];
|
|
212
|
+
for (let i = 0; i + 6 < nums.length; i += 7) {
|
|
213
|
+
out.push((nums[i] ?? 0) * MM_TO_PT, (nums[i + 1] ?? 0) * MM_TO_PT, nums[i + 2] ?? 0, nums[i + 3] ?? 0, nums[i + 4] ?? 0, (nums[i + 5] ?? 0) * MM_TO_PT, (nums[i + 6] ?? 0) * MM_TO_PT);
|
|
214
|
+
}
|
|
215
|
+
return `${cmd}${out.join(",")}`;
|
|
216
|
+
}
|
|
217
|
+
// M / L: alternating x,y pairs.
|
|
218
|
+
return `${cmd}${nums.map((n) => n * MM_TO_PT).join(",")}`;
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Build a {@link Page} from a parsed {@link Dieline} (CF2 / DDES /
|
|
223
|
+
* ARD import).
|
|
224
|
+
*
|
|
225
|
+
* Each `DielinePath` becomes one locked `CanvasObj` of type `"path"`
|
|
226
|
+
* rendered as a Konva `Path` (the `Path` import was added to
|
|
227
|
+
* `EditorCanvas` for this case). Type-specific stroke colors come
|
|
228
|
+
* from {@link DIELINE_PATH_STROKES}. The whole page is locked so
|
|
229
|
+
* users can't accidentally drag the structural reference geometry —
|
|
230
|
+
* same invariant as the bundled-template dieline rect.
|
|
231
|
+
*
|
|
232
|
+
* Coordinate units: the parser emits SVG path `d` strings in
|
|
233
|
+
* **dieline-native millimeters** (Y-down). We position each path
|
|
234
|
+
* object at `(bleedMm * MM_TO_PT, bleedMm * MM_TO_PT)` so the dieline
|
|
235
|
+
* trim sits inside the bleed margin. The path data itself is in
|
|
236
|
+
* mm — Konva renders it without further conversion because the
|
|
237
|
+
* containing Stage is configured in points and the relative offsets
|
|
238
|
+
* align (the Stage's own scale handles the mm→pt for display).
|
|
239
|
+
*
|
|
240
|
+
* `bleedMmOverride`: pass a host-supplied bleed (URL param, UI
|
|
241
|
+
* input) instead of the default. Defaults to 0 for parsed dielines —
|
|
242
|
+
* the source files don't carry their own bleed convention and the
|
|
243
|
+
* caller is the right place to decide.
|
|
244
|
+
*
|
|
245
|
+
* @public
|
|
246
|
+
*/
|
|
247
|
+
export function dielineToPage(dieline, bleedMmOverride) {
|
|
248
|
+
const bleedMm = bleedMmOverride ?? 0;
|
|
249
|
+
const pageSize = {
|
|
250
|
+
width: (dieline.widthMm + bleedMm * 2) * MM_TO_PT,
|
|
251
|
+
height: (dieline.heightMm + bleedMm * 2) * MM_TO_PT,
|
|
252
|
+
};
|
|
253
|
+
const bleedOffsetPt = bleedMm * MM_TO_PT;
|
|
254
|
+
const objects = dieline.paths.map((p) => ({
|
|
255
|
+
id: `dieline-${dieline.format.toLowerCase()}-${p.id}`,
|
|
256
|
+
type: "path",
|
|
257
|
+
x: bleedOffsetPt,
|
|
258
|
+
y: bleedOffsetPt,
|
|
259
|
+
width: 0,
|
|
260
|
+
height: 0,
|
|
261
|
+
fill: "transparent",
|
|
262
|
+
stroke: DIELINE_PATH_STROKES[p.type],
|
|
263
|
+
strokeWidth: 1,
|
|
264
|
+
opacity: 1,
|
|
265
|
+
// Pre-scale mm → pt so pathData matches the canvas unit system.
|
|
266
|
+
pathData: scalePathMmToPt(p.d),
|
|
267
|
+
name: `${dieline.format} ${p.type}`,
|
|
268
|
+
locked: true,
|
|
269
|
+
}));
|
|
270
|
+
return {
|
|
271
|
+
id: `page-${dieline.format.toLowerCase()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
272
|
+
objects,
|
|
273
|
+
pageSize,
|
|
274
|
+
bleedMm,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
49
277
|
//# sourceMappingURL=dieline-template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dieline-template.js","sourceRoot":"","sources":["../../src/lib/dieline-template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dieline-template.js","sourceRoot":"","sources":["../../src/lib/dieline-template.ts"],"names":[],"mappings":"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"}
|