@printwithsynergy/artwork-pdf-editor 0.1.5 → 0.2.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/README.md +63 -2
- package/dist/components/EditorApp.d.ts +23 -4
- package/dist/components/EditorApp.d.ts.map +1 -1
- package/dist/components/EditorApp.js +72 -2
- package/dist/components/EditorApp.js.map +1 -1
- package/dist/components/EditorCanvas.d.ts +21 -1
- package/dist/components/EditorCanvas.d.ts.map +1 -1
- package/dist/components/EditorCanvas.js +23 -52
- package/dist/components/EditorCanvas.js.map +1 -1
- package/dist/components/PageNavigator.d.ts +26 -0
- package/dist/components/PageNavigator.d.ts.map +1 -0
- package/dist/components/PageNavigator.js +91 -0
- package/dist/components/PageNavigator.js.map +1 -0
- package/dist/data/dielines.json +35 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- 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/dieline-template.d.ts +82 -0
- package/dist/lib/dieline-template.d.ts.map +1 -1
- package/dist/lib/dieline-template.js +66 -1
- package/dist/lib/dieline-template.js.map +1 -1
- package/dist/lib/editor-config.d.ts +0 -1
- package/dist/lib/editor-config.d.ts.map +1 -1
- package/dist/lib/editor-config.js +0 -2
- package/dist/lib/editor-config.js.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
"use client";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
const PANEL_BG = "#1a0f08";
|
|
5
|
+
const BORDER = "#3d1a00";
|
|
6
|
+
const BRAND = "#fc5102";
|
|
7
|
+
const MUTED = "#888";
|
|
8
|
+
/**
|
|
9
|
+
* Build a lens-pdf panel plugin that surfaces an artwork-pdf
|
|
10
|
+
* `PreflightReport` in the right-hand panel. Reuses the same preflight
|
|
11
|
+
* types the editor's pre-render PreflightPanel consumed.
|
|
12
|
+
*
|
|
13
|
+
* Pass the latest report when registering (or via a closure that re-reads
|
|
14
|
+
* a host store). Each issue renders as a clickable row; in this first
|
|
15
|
+
* pass we just list them — wiring to canvas-highlight (an OverlayItem
|
|
16
|
+
* round-trip) comes in a follow-up.
|
|
17
|
+
*
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
export function preflightFindingsPlugin(opts) {
|
|
21
|
+
return {
|
|
22
|
+
id: "artworkpdf.panel.preflight",
|
|
23
|
+
version: "1.0.0",
|
|
24
|
+
slot: "panel.right",
|
|
25
|
+
title: "Preflight",
|
|
26
|
+
order: 10,
|
|
27
|
+
mount(_ctx) {
|
|
28
|
+
const report = opts.report;
|
|
29
|
+
if (!report) {
|
|
30
|
+
return (_jsx("div", { style: {
|
|
31
|
+
padding: "0.75rem",
|
|
32
|
+
fontSize: "0.78rem",
|
|
33
|
+
color: MUTED,
|
|
34
|
+
background: PANEL_BG,
|
|
35
|
+
height: "100%",
|
|
36
|
+
}, children: "No preflight report attached to this document." }));
|
|
37
|
+
}
|
|
38
|
+
return (_jsxs("div", { style: {
|
|
39
|
+
background: PANEL_BG,
|
|
40
|
+
color: "#ddd",
|
|
41
|
+
height: "100%",
|
|
42
|
+
display: "flex",
|
|
43
|
+
flexDirection: "column",
|
|
44
|
+
fontSize: "0.8rem",
|
|
45
|
+
}, children: [_jsxs("header", { style: {
|
|
46
|
+
padding: "0.5rem 0.75rem",
|
|
47
|
+
borderBottom: `1px solid ${BORDER}`,
|
|
48
|
+
display: "flex",
|
|
49
|
+
alignItems: "center",
|
|
50
|
+
gap: "0.5rem",
|
|
51
|
+
}, children: [_jsx("span", { style: {
|
|
52
|
+
width: 8,
|
|
53
|
+
height: 8,
|
|
54
|
+
borderRadius: 4,
|
|
55
|
+
background: report.passed ? "#2e7d32" : "#b71c1c",
|
|
56
|
+
}, "aria-hidden": true }), _jsx("span", { style: { fontWeight: 600 }, children: report.passed ? "Passed" : "Issues found" }), _jsxs("span", { style: { marginLeft: "auto", color: MUTED, fontSize: "0.7rem" }, children: [report.issues.length, " issue", report.issues.length === 1 ? "" : "s"] })] }), _jsxs("ul", { style: {
|
|
57
|
+
flex: 1,
|
|
58
|
+
overflowY: "auto",
|
|
59
|
+
listStyle: "none",
|
|
60
|
+
margin: 0,
|
|
61
|
+
padding: 0,
|
|
62
|
+
}, children: [report.issues.length === 0 && (_jsx("li", { style: { padding: "0.75rem", color: MUTED }, children: "No issues." })), report.issues.map((issue, i) => (_jsx("li", { style: { borderBottom: `1px solid ${BORDER}` }, children: _jsxs("button", { type: "button", onClick: () => opts.onIssueClick?.(issue), style: {
|
|
63
|
+
width: "100%",
|
|
64
|
+
background: "transparent",
|
|
65
|
+
border: "none",
|
|
66
|
+
padding: "0.55rem 0.75rem",
|
|
67
|
+
textAlign: "left",
|
|
68
|
+
color: "#ddd",
|
|
69
|
+
cursor: opts.onIssueClick ? "pointer" : "default",
|
|
70
|
+
fontFamily: "inherit",
|
|
71
|
+
fontSize: "0.78rem",
|
|
72
|
+
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [_jsx("span", { style: {
|
|
73
|
+
fontSize: "0.6rem",
|
|
74
|
+
letterSpacing: "0.08em",
|
|
75
|
+
textTransform: "uppercase",
|
|
76
|
+
color: issue.severity === "block" ? "#ef5350" : "#ffb74d",
|
|
77
|
+
fontWeight: 600,
|
|
78
|
+
}, children: issue.severity }), _jsx("span", { style: { color: BRAND, fontSize: "0.7rem", fontFamily: "monospace" }, children: issue.checkName }), issue.page !== undefined && (_jsxs("span", { style: { marginLeft: "auto", color: MUTED, fontSize: "0.7rem" }, children: ["p.", issue.page] }))] }), _jsx("div", { style: { marginTop: "0.2rem", lineHeight: 1.4 }, children: issue.message })] }) }, `${issue.checkName}-${i}`)))] })] }));
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=preflight-findings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight-findings.js","sourceRoot":"","sources":["../../src/lens/preflight-findings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,9 +25,91 @@ export type DielineTemplate = {
|
|
|
25
25
|
* rather than being lumped in with artwork spot inks. */
|
|
26
26
|
export declare const DIELINE_STROKE = "#fc5102";
|
|
27
27
|
export declare const DIELINE_NAME = "Die Line";
|
|
28
|
+
/**
|
|
29
|
+
* A multi-page dieline set — an ordered list of {@link DielineTemplate}
|
|
30
|
+
* ids that compose a single multi-page artwork document (e.g. a carton's
|
|
31
|
+
* front + back, or pouch front + back).
|
|
32
|
+
*
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export type TemplateSet = {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
category: string;
|
|
40
|
+
pages: Array<{
|
|
41
|
+
templateId: string;
|
|
42
|
+
name?: string;
|
|
43
|
+
}>;
|
|
44
|
+
tags: string[];
|
|
45
|
+
isDefault?: boolean;
|
|
46
|
+
};
|
|
28
47
|
export declare const TEMPLATES: DielineTemplate[];
|
|
48
|
+
/**
|
|
49
|
+
* Bundled multi-page template sets (e.g. carton front + back). Empty if
|
|
50
|
+
* the library has none.
|
|
51
|
+
*
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export declare const TEMPLATE_SETS: TemplateSet[];
|
|
29
55
|
export declare function getDefaultTemplate(): DielineTemplate;
|
|
30
56
|
export declare function getTemplateById(id: string | undefined): DielineTemplate | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Lookup a multi-page template set by id (e.g. `"carton-6x4x2-set"`).
|
|
59
|
+
* Returns `undefined` for unknown / missing.
|
|
60
|
+
*
|
|
61
|
+
* @public
|
|
62
|
+
*/
|
|
63
|
+
export declare function getTemplateSetById(id: string | undefined): TemplateSet | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* Expand a {@link TemplateSet} into an ordered list of {@link Page}s.
|
|
66
|
+
* Each set entry resolves to its `DielineTemplate`; unknown ids are
|
|
67
|
+
* skipped (so callers always get a non-throwing result they can fall
|
|
68
|
+
* back from).
|
|
69
|
+
*
|
|
70
|
+
* @public
|
|
71
|
+
*/
|
|
72
|
+
export declare function templateSetToPages(set: TemplateSet, bleedMmOverride?: number): Page[];
|
|
73
|
+
/**
|
|
74
|
+
* One page of a multi-page artwork document. Carries the dieline rect
|
|
75
|
+
* + any user-drawn objects, plus the per-page geometry (pageSize, bleed).
|
|
76
|
+
* Used as the array element of {@link EditorAppProps.initialPages}.
|
|
77
|
+
*
|
|
78
|
+
* @public
|
|
79
|
+
*/
|
|
80
|
+
export type Page = {
|
|
81
|
+
/** Stable id (e.g. `uuid()` or ``page-${i}``) — used as a React key. */
|
|
82
|
+
id: string;
|
|
83
|
+
objects: CanvasObj[];
|
|
84
|
+
pageSize: {
|
|
85
|
+
width: number;
|
|
86
|
+
height: number;
|
|
87
|
+
};
|
|
88
|
+
bleedMm: number;
|
|
89
|
+
/** Source template id, when this page was seeded from a known dieline. */
|
|
90
|
+
templateId?: string;
|
|
91
|
+
/** Human label shown in the page navigator (e.g. "Front", "Back"). */
|
|
92
|
+
name?: string;
|
|
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 declare function templateToPage(template: DielineTemplate, bleedMmOverride?: number, name?: string): Page;
|
|
102
|
+
/**
|
|
103
|
+
* Build a list of {@link Page}s from an ordered set of templates +
|
|
104
|
+
* per-page names. Convenience for multi-page document sets (e.g. a
|
|
105
|
+
* carton's front / back / spine).
|
|
106
|
+
*
|
|
107
|
+
* @public
|
|
108
|
+
*/
|
|
109
|
+
export declare function templatesToPages(entries: ReadonlyArray<{
|
|
110
|
+
template: DielineTemplate;
|
|
111
|
+
name?: string;
|
|
112
|
+
}>, bleedMmOverride?: number): Page[];
|
|
31
113
|
export declare function templateToInitialState(template: DielineTemplate, bleedMmOverride?: number): {
|
|
32
114
|
objects: CanvasObj[];
|
|
33
115
|
pageSize: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dieline-template.d.ts","sourceRoot":"","sources":["../../src/lib/dieline-template.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAIF;;0DAE0D;AAC1D,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,eAAO,MAAM,SAAS,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"dieline-template.d.ts","sourceRoot":"","sources":["../../src/lib/dieline-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,15 @@ const MM_TO_PT = 2.83465;
|
|
|
5
5
|
* rather than being lumped in with artwork spot inks. */
|
|
6
6
|
export const DIELINE_STROKE = "#fc5102";
|
|
7
7
|
export const DIELINE_NAME = "Die Line";
|
|
8
|
-
|
|
8
|
+
const LIBRARY = library;
|
|
9
|
+
export const TEMPLATES = LIBRARY.templates;
|
|
10
|
+
/**
|
|
11
|
+
* Bundled multi-page template sets (e.g. carton front + back). Empty if
|
|
12
|
+
* the library has none.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export const TEMPLATE_SETS = LIBRARY.templateSets ?? [];
|
|
9
17
|
export function getDefaultTemplate() {
|
|
10
18
|
const flagged = TEMPLATES.find((t) => t.isDefault);
|
|
11
19
|
if (flagged)
|
|
@@ -20,6 +28,63 @@ export function getTemplateById(id) {
|
|
|
20
28
|
return undefined;
|
|
21
29
|
return TEMPLATES.find((t) => t.id === id);
|
|
22
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Lookup a multi-page template set by id (e.g. `"carton-6x4x2-set"`).
|
|
33
|
+
* Returns `undefined` for unknown / missing.
|
|
34
|
+
*
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
export function getTemplateSetById(id) {
|
|
38
|
+
if (!id)
|
|
39
|
+
return undefined;
|
|
40
|
+
return TEMPLATE_SETS.find((s) => s.id === id);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Expand a {@link TemplateSet} into an ordered list of {@link Page}s.
|
|
44
|
+
* Each set entry resolves to its `DielineTemplate`; unknown ids are
|
|
45
|
+
* skipped (so callers always get a non-throwing result they can fall
|
|
46
|
+
* back from).
|
|
47
|
+
*
|
|
48
|
+
* @public
|
|
49
|
+
*/
|
|
50
|
+
export function templateSetToPages(set, bleedMmOverride) {
|
|
51
|
+
return set.pages
|
|
52
|
+
.map(({ templateId, name }) => {
|
|
53
|
+
const tpl = getTemplateById(templateId);
|
|
54
|
+
return tpl ? templateToPage(tpl, bleedMmOverride, name) : null;
|
|
55
|
+
})
|
|
56
|
+
.filter((p) => p !== null);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build a {@link Page} from a {@link DielineTemplate}. Mirrors the
|
|
60
|
+
* single-page {@link templateToInitialState} output but in the new
|
|
61
|
+
* multi-page shape. Use this to seed `EditorAppProps.initialPages`.
|
|
62
|
+
*
|
|
63
|
+
* @public
|
|
64
|
+
*/
|
|
65
|
+
export function templateToPage(template, bleedMmOverride, name) {
|
|
66
|
+
const { objects, pageSize } = templateToInitialState(template, bleedMmOverride);
|
|
67
|
+
const page = {
|
|
68
|
+
id: `page-${template.id}-${Math.random().toString(36).slice(2, 8)}`,
|
|
69
|
+
objects,
|
|
70
|
+
pageSize,
|
|
71
|
+
bleedMm: bleedMmOverride ?? template.bleedMm,
|
|
72
|
+
templateId: template.id,
|
|
73
|
+
};
|
|
74
|
+
if (name !== undefined)
|
|
75
|
+
page.name = name;
|
|
76
|
+
return page;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build a list of {@link Page}s from an ordered set of templates +
|
|
80
|
+
* per-page names. Convenience for multi-page document sets (e.g. a
|
|
81
|
+
* carton's front / back / spine).
|
|
82
|
+
*
|
|
83
|
+
* @public
|
|
84
|
+
*/
|
|
85
|
+
export function templatesToPages(entries, bleedMmOverride) {
|
|
86
|
+
return entries.map(({ template, name }) => templateToPage(template, bleedMmOverride, name));
|
|
87
|
+
}
|
|
23
88
|
export function templateToInitialState(template, bleedMmOverride) {
|
|
24
89
|
const bleedMm = bleedMmOverride ?? template.bleedMm;
|
|
25
90
|
const pageSize = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dieline-template.js","sourceRoot":"","sources":["../../src/lib/dieline-template.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAe5C,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB;;0DAE0D;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"dieline-template.js","sourceRoot":"","sources":["../../src/lib/dieline-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,6 @@ export interface EditorConfig {
|
|
|
32
32
|
enable_dieline_chooser: boolean;
|
|
33
33
|
enable_bleed_input: boolean;
|
|
34
34
|
enable_layers_panel: boolean;
|
|
35
|
-
enable_separations_panel: boolean;
|
|
36
35
|
enable_preflight_banner: boolean;
|
|
37
36
|
enable_canvas_grid: boolean;
|
|
38
37
|
enable_bleed_visualization: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-config.d.ts","sourceRoot":"","sources":["../../src/lib/editor-config.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAE3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAG3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAG5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"editor-config.d.ts","sourceRoot":"","sources":["../../src/lib/editor-config.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,YAAY;IAE3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAG3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAG5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IAGjC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B,EAAE,OAAO,CAAC;CACrC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,YA2BnC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,YAAY,CAGtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAM,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,GAAG,KAAK,EACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACxC,YAAY,CAGd"}
|
|
@@ -29,7 +29,6 @@ export const DEFAULT_EDITOR_CONFIG = {
|
|
|
29
29
|
enable_bleed_input: true,
|
|
30
30
|
// Panels
|
|
31
31
|
enable_layers_panel: true,
|
|
32
|
-
enable_separations_panel: true,
|
|
33
32
|
enable_preflight_banner: true,
|
|
34
33
|
// Canvas
|
|
35
34
|
enable_canvas_grid: true,
|
|
@@ -44,7 +43,6 @@ export const DEFAULT_EDITOR_CONFIG = {
|
|
|
44
43
|
*/
|
|
45
44
|
export const BASIC_MODE_OVERRIDES = {
|
|
46
45
|
enable_layers_panel: false,
|
|
47
|
-
enable_separations_panel: false,
|
|
48
46
|
enable_source_link: false,
|
|
49
47
|
};
|
|
50
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-config.js","sourceRoot":"","sources":["../../src/lib/editor-config.ts"],"names":[],"mappings":"AAAA,6CAA6C;
|
|
1
|
+
{"version":3,"file":"editor-config.js","sourceRoot":"","sources":["../../src/lib/editor-config.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAgD7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,SAAS;IACT,iBAAiB,EAAE,IAAI;IACvB,oBAAoB,EAAE,IAAI;IAC1B,kBAAkB,EAAE,IAAI;IACxB,kBAAkB,EAAE,IAAI;IACxB,sBAAsB,EAAE,IAAI;IAC5B,iBAAiB,EAAE,IAAI;IACvB,UAAU;IACV,kBAAkB,EAAE,IAAI;IACxB,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,IAAI;IACzB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,qBAAqB,EAAE,IAAI;IAC3B,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,IAAI;IAC1B,sBAAsB,EAAE,IAAI;IAC5B,kBAAkB,EAAE,IAAI;IACxB,SAAS;IACT,mBAAmB,EAAE,IAAI;IACzB,uBAAuB,EAAE,IAAI;IAC7B,SAAS;IACT,kBAAkB,EAAE,IAAI;IACxB,0BAA0B,EAAE,IAAI;CACjC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA0B;IACzD,mBAAmB,EAAE,KAAK;IAC1B,kBAAkB,EAAE,KAAK;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA0B,EAAE,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAqB,EACrB,iBAAyC;IAEzC,MAAM,aAAa,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACnF,OAAO,EAAE,GAAG,qBAAqB,EAAE,GAAG,aAAa,EAAE,GAAG,iBAAiB,EAAE,CAAC;AAC9E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@printwithsynergy/artwork-pdf-editor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.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,6 +10,10 @@
|
|
|
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
19
|
"files": ["dist", "README.md", "LICENSE"],
|
|
@@ -26,9 +30,14 @@
|
|
|
26
30
|
"react": "^19.0.0",
|
|
27
31
|
"react-dom": "^19.0.0",
|
|
28
32
|
"react-konva": "^19.0.0",
|
|
29
|
-
"konva": "^10.3.0"
|
|
33
|
+
"konva": "^10.3.0",
|
|
34
|
+
"@printwithsynergy/lens-pdf": "^0.4.0-beta.17"
|
|
35
|
+
},
|
|
36
|
+
"peerDependenciesMeta": {
|
|
37
|
+
"@printwithsynergy/lens-pdf": { "optional": true }
|
|
30
38
|
},
|
|
31
39
|
"devDependencies": {
|
|
40
|
+
"@printwithsynergy/lens-pdf": "^0.4.0-beta.17",
|
|
32
41
|
"@types/react": "^19.0.0",
|
|
33
42
|
"@types/react-dom": "^19.0.0",
|
|
34
43
|
"konva": "^10.3.0",
|