@printwithsynergy/artwork-pdf-editor 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +62 -0
- 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 +18 -3
- package/dist/components/EditorApp.d.ts.map +1 -1
- package/dist/components/EditorApp.js +42 -7
- package/dist/components/EditorApp.js.map +1 -1
- package/dist/components/EditorCanvas.d.ts +31 -2
- package/dist/components/EditorCanvas.d.ts.map +1 -1
- package/dist/components/EditorCanvas.js +97 -16
- 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.map +1 -1
- package/dist/components/PageNavigator.js +6 -1
- package/dist/components/PageNavigator.js.map +1 -1
- 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/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/preflight-findings.d.ts.map +1 -1
- package/dist/lens/preflight-findings.js.map +1 -1
- 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 +87 -0
- package/dist/lib/dieline-template.d.ts.map +1 -1
- package/dist/lib/dieline-template.js +163 -0
- package/dist/lib/dieline-template.js.map +1 -1
- package/dist/lib/editor-config.d.ts +384 -0
- package/dist/lib/editor-config.d.ts.map +1 -1
- package/dist/lib/editor-config.js +89 -0
- 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 +20 -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
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
import { useId } from "react";
|
|
5
|
+
const DEFAULT_PRESETS = [
|
|
6
|
+
// Letter (8.5 × 11 in) — 612 × 792 pt
|
|
7
|
+
{ id: "letter", label: "Letter (8.5 × 11 in)", widthPt: 612, heightPt: 792 },
|
|
8
|
+
// Tabloid (11 × 17 in) — 792 × 1224 pt
|
|
9
|
+
{ id: "tabloid", label: "Tabloid (11 × 17 in)", widthPt: 792, heightPt: 1224 },
|
|
10
|
+
// SRA3 (320 × 450 mm) — commercial digital press standard
|
|
11
|
+
{ id: "sra3", label: "SRA3 (320 × 450 mm)", widthPt: 907.09, heightPt: 1275.59 },
|
|
12
|
+
// 28 × 40 in offset sheet
|
|
13
|
+
{ id: "offset-28x40", label: "Offset sheet (28 × 40 in)", widthPt: 2016, heightPt: 2880 },
|
|
14
|
+
];
|
|
15
|
+
const MM_PER_PT = 25.4 / 72;
|
|
16
|
+
/** Convert a PDF-points dimension to millimeters for human-readable
|
|
17
|
+
* display. Storage stays in points so the value can be POSTed to
|
|
18
|
+
* compile-pdf without rescaling. */
|
|
19
|
+
function ptToMm(pt) {
|
|
20
|
+
return pt * MM_PER_PT;
|
|
21
|
+
}
|
|
22
|
+
/** Tolerance for matching a preset by sheet dimensions. PDF-points
|
|
23
|
+
* fractions arise easily — SRA3 is 907.09 / 1275.59 pt — so strict
|
|
24
|
+
* equality breaks against hosts that compute from mm. 0.5 pt is
|
|
25
|
+
* smaller than half a hairline rule, well below user-visible. */
|
|
26
|
+
const PRESET_MATCH_TOLERANCE_PT = 0.5;
|
|
27
|
+
/** Parse a numeric input safely. Returns `fallback` for empty,
|
|
28
|
+
* whitespace-only, or non-finite input (e.g. when the user has
|
|
29
|
+
* typed only `-` mid-edit). Without this guard `Number.parseInt`
|
|
30
|
+
* would surface `NaN` and `Math.max` would propagate it, leaving
|
|
31
|
+
* the panel stuck in an unrecoverable state. */
|
|
32
|
+
function parseIntOr(value, fallback) {
|
|
33
|
+
const n = Number.parseInt(value, 10);
|
|
34
|
+
return Number.isFinite(n) ? n : fallback;
|
|
35
|
+
}
|
|
36
|
+
/** Same NaN-safe contract as {@link parseIntOr} but for floats —
|
|
37
|
+
* used by the gutter / margin spinners which accept 0.1 mm steps. */
|
|
38
|
+
function parseFloatOr(value, fallback) {
|
|
39
|
+
const n = Number.parseFloat(value);
|
|
40
|
+
return Number.isFinite(n) ? n : fallback;
|
|
41
|
+
}
|
|
42
|
+
/** Two-sided clamp: ensure `value` is in `[min, max]`. Used to keep
|
|
43
|
+
* the input handlers honest — the `<input min/max>` attributes only
|
|
44
|
+
* guide the spinner; users can still type out-of-range values
|
|
45
|
+
* directly, and we don't want those to propagate to the wire. */
|
|
46
|
+
function clamp(value, min, max) {
|
|
47
|
+
return Math.min(max, Math.max(min, value));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* O1 sheet-imposition builder.
|
|
51
|
+
*
|
|
52
|
+
* Controlled component: surfaces sheet size, rows × cols, gutter /
|
|
53
|
+
* margin in mm, and registration / crop-mark toggles. Renders no
|
|
54
|
+
* chrome of its own — hosts wrap it in a modal, drawer, or
|
|
55
|
+
* right-rail container (matches the `JobSetupPanel` / `TrapEditorPanel`
|
|
56
|
+
* convention).
|
|
57
|
+
*
|
|
58
|
+
* Wire shape uses PDF points everywhere; the panel converts to mm
|
|
59
|
+
* for display so values can be POSTed to compile-pdf's
|
|
60
|
+
* `/v1/impose/apply` endpoint without rescaling.
|
|
61
|
+
*
|
|
62
|
+
* @public
|
|
63
|
+
*/
|
|
64
|
+
export function ImposePanel({ value, onChange, presets = DEFAULT_PRESETS }) {
|
|
65
|
+
const sheetId = useId();
|
|
66
|
+
const rowsId = useId();
|
|
67
|
+
const colsId = useId();
|
|
68
|
+
const gutterId = useId();
|
|
69
|
+
const marginId = useId();
|
|
70
|
+
const mappingName = useId();
|
|
71
|
+
const firstPreset = presets[0] ?? DEFAULT_PRESETS[0];
|
|
72
|
+
if (!firstPreset) {
|
|
73
|
+
// Should be unreachable: DEFAULT_PRESETS is non-empty. Defensive
|
|
74
|
+
// fallback keeps TypeScript happy without a non-null assertion.
|
|
75
|
+
throw new Error("ImposePanel: presets must contain at least one entry");
|
|
76
|
+
}
|
|
77
|
+
const current = value ?? {
|
|
78
|
+
sheetWidthPt: firstPreset.widthPt,
|
|
79
|
+
sheetHeightPt: firstPreset.heightPt,
|
|
80
|
+
rows: 2,
|
|
81
|
+
cols: 2,
|
|
82
|
+
pageMapping: "sequential",
|
|
83
|
+
};
|
|
84
|
+
const update = (patch) => onChange({ ...current, ...patch });
|
|
85
|
+
// Match the currently-selected preset by tolerance — hosts that
|
|
86
|
+
// round-trip through mm can produce sub-point fractional drift
|
|
87
|
+
// that strict equality would reject, dropping the dropdown into
|
|
88
|
+
// the "custom" fallback even though the user picked SRA3.
|
|
89
|
+
const selectedPresetId = presets.find((p) => Math.abs(p.widthPt - current.sheetWidthPt) <= PRESET_MATCH_TOLERANCE_PT &&
|
|
90
|
+
Math.abs(p.heightPt - current.sheetHeightPt) <= PRESET_MATCH_TOLERANCE_PT)?.id ?? "custom";
|
|
91
|
+
return (_jsxs("div", { style: {
|
|
92
|
+
display: "flex",
|
|
93
|
+
flexDirection: "column",
|
|
94
|
+
gap: "0.75rem",
|
|
95
|
+
padding: "0.75rem",
|
|
96
|
+
fontSize: "0.85rem",
|
|
97
|
+
color: "#1f2937",
|
|
98
|
+
background: "#ffffff",
|
|
99
|
+
border: "1px solid #e5e7eb",
|
|
100
|
+
borderRadius: 6,
|
|
101
|
+
minWidth: 280,
|
|
102
|
+
}, children: [_jsxs("label", { htmlFor: sheetId, style: { display: "flex", flexDirection: "column", gap: "0.25rem" }, children: [_jsx("span", { style: { fontWeight: 600 }, children: "Sheet size" }), _jsxs("select", { id: sheetId, value: selectedPresetId, onChange: (e) => {
|
|
103
|
+
const next = presets.find((p) => p.id === e.target.value);
|
|
104
|
+
if (next)
|
|
105
|
+
update({ sheetWidthPt: next.widthPt, sheetHeightPt: next.heightPt });
|
|
106
|
+
}, style: selectStyle, children: [presets.map((p) => (_jsx("option", { value: p.id, children: p.label }, p.id))), selectedPresetId === "custom" && (_jsxs("option", { value: "custom", children: ["Custom (", ptToMm(current.sheetWidthPt).toFixed(0), " \u00D7", " ", ptToMm(current.sheetHeightPt).toFixed(0), " mm)"] }))] })] }), _jsxs("div", { style: { display: "flex", gap: "0.5rem" }, children: [_jsxs("label", { htmlFor: rowsId, style: { display: "flex", flexDirection: "column", gap: "0.25rem", flex: 1 }, children: [_jsx("span", { style: { fontWeight: 600 }, children: "Rows" }), _jsx("input", { id: rowsId, type: "number", min: 1, max: 32, step: 1, value: current.rows, onChange: (e) => update({ rows: clamp(parseIntOr(e.target.value, current.rows), 1, 32) }), style: numberStyle })] }), _jsxs("label", { htmlFor: colsId, style: { display: "flex", flexDirection: "column", gap: "0.25rem", flex: 1 }, children: [_jsx("span", { style: { fontWeight: 600 }, children: "Columns" }), _jsx("input", { id: colsId, type: "number", min: 1, max: 32, step: 1, value: current.cols, onChange: (e) => update({ cols: clamp(parseIntOr(e.target.value, current.cols), 1, 32) }), style: numberStyle })] })] }), _jsxs("div", { style: { display: "flex", gap: "0.5rem" }, children: [_jsxs("label", { htmlFor: gutterId, style: { display: "flex", flexDirection: "column", gap: "0.25rem", flex: 1 }, children: [_jsx("span", { style: { fontWeight: 600 }, children: "Gutter (mm)" }), _jsx("input", { id: gutterId, type: "number", min: 0, max: 100, step: 0.1, value: current.gutterMm ?? 0, onChange: (e) => update({
|
|
107
|
+
gutterMm: clamp(parseFloatOr(e.target.value, current.gutterMm ?? 0), 0, 100),
|
|
108
|
+
}), style: numberStyle })] }), _jsxs("label", { htmlFor: marginId, style: { display: "flex", flexDirection: "column", gap: "0.25rem", flex: 1 }, children: [_jsx("span", { style: { fontWeight: 600 }, children: "Margin (mm)" }), _jsx("input", { id: marginId, type: "number", min: 0, max: 100, step: 0.1, value: current.marginMm ?? 0, onChange: (e) => update({
|
|
109
|
+
marginMm: clamp(parseFloatOr(e.target.value, current.marginMm ?? 0), 0, 100),
|
|
110
|
+
}), style: numberStyle })] })] }), _jsxs("fieldset", { style: { border: "none", padding: 0, margin: 0 }, children: [_jsx("legend", { style: { fontWeight: 600, padding: 0, marginBottom: "0.25rem" }, children: "Page mapping" }), _jsxs("div", { style: { display: "flex", gap: "1rem" }, children: [_jsxs("label", { style: { display: "flex", alignItems: "center", gap: "0.35rem" }, children: [_jsx("input", { type: "radio", name: mappingName, value: "sequential", checked: (current.pageMapping ?? "sequential") === "sequential", onChange: () => update({ pageMapping: "sequential" }) }), "Sequential"] }), _jsxs("label", { style: { display: "flex", alignItems: "center", gap: "0.35rem" }, children: [_jsx("input", { type: "radio", name: mappingName, value: "repeat", checked: current.pageMapping === "repeat", onChange: () => update({ pageMapping: "repeat" }) }), "Repeat page 0"] })] })] }), _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "0.25rem" }, children: [_jsxs("label", { style: { display: "flex", alignItems: "center", gap: "0.35rem" }, children: [_jsx("input", { type: "checkbox", checked: current.registrationMarks ?? false, onChange: (e) => update({ registrationMarks: e.target.checked }) }), "Registration marks"] }), _jsxs("label", { style: { display: "flex", alignItems: "center", gap: "0.35rem" }, children: [_jsx("input", { type: "checkbox", checked: current.cropMarks ?? false, onChange: (e) => update({ cropMarks: e.target.checked }) }), "Crop marks"] })] })] }));
|
|
111
|
+
}
|
|
112
|
+
const selectStyle = {
|
|
113
|
+
padding: "0.25rem 0.5rem",
|
|
114
|
+
fontSize: "0.8rem",
|
|
115
|
+
border: "1px solid #d1d5db",
|
|
116
|
+
borderRadius: 4,
|
|
117
|
+
background: "#ffffff",
|
|
118
|
+
};
|
|
119
|
+
const numberStyle = {
|
|
120
|
+
padding: "0.25rem 0.5rem",
|
|
121
|
+
fontSize: "0.8rem",
|
|
122
|
+
border: "1px solid #d1d5db",
|
|
123
|
+
borderRadius: 4,
|
|
124
|
+
background: "#ffffff",
|
|
125
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=ImposePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImposePanel.js","sourceRoot":"","sources":["../../src/components/ImposePanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wave 2 C1 — inks palette.
|
|
3
|
+
*
|
|
4
|
+
* Surfaces the live separations registered in the document plus the
|
|
5
|
+
* named inks discovered in the active rendered PDF (via the new
|
|
6
|
+
* compile-pdf `POST /v1/separations/list` endpoint, PR-F). Splits
|
|
7
|
+
* cleanly from the existing swatches palette which still handles
|
|
8
|
+
* PANTONE search:
|
|
9
|
+
*
|
|
10
|
+
* - **swatches** (PR-7 / C3): catalogue search, "register as spot"
|
|
11
|
+
* - **inks** (this panel, C1): the live ink list — what plates
|
|
12
|
+
* will the compiler actually produce?
|
|
13
|
+
*
|
|
14
|
+
* Adapter pattern: hosts wire an async function that returns the
|
|
15
|
+
* separations list. This keeps the editor package free of any
|
|
16
|
+
* runtime dep on `apps/service`'s `CompilePdfClient`. The host
|
|
17
|
+
* typically passes
|
|
18
|
+
* `(pdfB64) => client.separationsList(pdfB64).then((r) => r.separations)`.
|
|
19
|
+
*
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
export type Ink = {
|
|
23
|
+
/** Display name (e.g. "PANTONE 185 C", "Silver", "Cyan"). */
|
|
24
|
+
name: string;
|
|
25
|
+
/** "Separation" or "DeviceN" — mirrors the wire shape. */
|
|
26
|
+
color_space: "Separation" | "DeviceN";
|
|
27
|
+
/** 0-indexed page numbers on which this ink appears. */
|
|
28
|
+
occurs_on_pages: number[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Host-supplied adapter. Returns the inks for `pdfB64` (typically by
|
|
32
|
+
* proxying to `CompilePdfClient.separationsList`). Rejects on
|
|
33
|
+
* transport errors; the panel renders the error inline.
|
|
34
|
+
*
|
|
35
|
+
* **Identity matters.** The panel re-fetches whenever the `loader`
|
|
36
|
+
* reference changes (the standard React-effect dependency rule);
|
|
37
|
+
* hosts that build the adapter inline should memoize it with
|
|
38
|
+
* `useCallback` so an unrelated parent re-render doesn't trigger a
|
|
39
|
+
* spurious `POST /v1/separations/list` round-trip.
|
|
40
|
+
*
|
|
41
|
+
* @public
|
|
42
|
+
*/
|
|
43
|
+
export type InksLoaderFn = (pdfB64: string) => Promise<readonly Ink[]>;
|
|
44
|
+
/**
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export type InksPanelProps = {
|
|
48
|
+
/** Latest rendered PDF — base64, no `data:` prefix. When
|
|
49
|
+
* `undefined` the panel shows an "export first" affordance. */
|
|
50
|
+
pdfB64: string | undefined;
|
|
51
|
+
/** Adapter that resolves to the inks list. */
|
|
52
|
+
loader: InksLoaderFn;
|
|
53
|
+
/** Optional callback fired when the user clicks an ink row;
|
|
54
|
+
* hosts wire this to highlight occurrences on the canvas. */
|
|
55
|
+
onSelect?: (ink: Ink) => void;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* @public
|
|
59
|
+
*/
|
|
60
|
+
export declare function InksPanel({ pdfB64, loader, onSelect }: InksPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
61
|
+
//# sourceMappingURL=InksPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InksPanel.d.ts","sourceRoot":"","sources":["../../src/components/InksPanel.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,WAAW,EAAE,YAAY,GAAG,SAAS,CAAC;IACtC,wDAAwD;IACxD,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;oEACgE;IAChE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,8CAA8C;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB;kEAC8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA2FrE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
import { useEffect, useState } from "react";
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export function InksPanel({ pdfB64, loader, onSelect }) {
|
|
9
|
+
const [inks, setInks] = useState(null);
|
|
10
|
+
const [error, setError] = useState(null);
|
|
11
|
+
const [loading, setLoading] = useState(false);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (!pdfB64) {
|
|
14
|
+
setInks(null);
|
|
15
|
+
setError(null);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let disposed = false;
|
|
19
|
+
setLoading(true);
|
|
20
|
+
setError(null);
|
|
21
|
+
loader(pdfB64)
|
|
22
|
+
.then((next) => {
|
|
23
|
+
if (disposed)
|
|
24
|
+
return;
|
|
25
|
+
setInks(next);
|
|
26
|
+
setLoading(false);
|
|
27
|
+
})
|
|
28
|
+
.catch((err) => {
|
|
29
|
+
if (disposed)
|
|
30
|
+
return;
|
|
31
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
32
|
+
setLoading(false);
|
|
33
|
+
});
|
|
34
|
+
return () => {
|
|
35
|
+
disposed = true;
|
|
36
|
+
};
|
|
37
|
+
}, [pdfB64, loader]);
|
|
38
|
+
if (!pdfB64) {
|
|
39
|
+
return (_jsx("div", { "data-testid": "inks-panel", style: { padding: "0.5rem", opacity: 0.6 }, children: "Render the document to see its ink list." }));
|
|
40
|
+
}
|
|
41
|
+
if (loading) {
|
|
42
|
+
return (_jsx("div", { "data-testid": "inks-panel", style: { padding: "0.5rem", opacity: 0.6 }, children: "Loading inks\u2026" }));
|
|
43
|
+
}
|
|
44
|
+
if (error) {
|
|
45
|
+
return (_jsxs("div", { "data-testid": "inks-panel", role: "alert", style: { padding: "0.5rem", color: "#a00" }, children: ["Couldn't load inks: ", error] }));
|
|
46
|
+
}
|
|
47
|
+
if (!inks || inks.length === 0) {
|
|
48
|
+
return (_jsx("div", { "data-testid": "inks-panel", style: { padding: "0.5rem", opacity: 0.6 }, children: "No named separations in this document." }));
|
|
49
|
+
}
|
|
50
|
+
return (_jsxs("div", { "data-testid": "inks-panel", style: { padding: "0.5rem" }, children: [_jsxs("h3", { style: { margin: "0 0 0.5rem 0" }, children: ["Inks (", inks.length, ")"] }), _jsx("ul", { style: { listStyle: "none", padding: 0, margin: 0 }, children: inks.map((ink) => (_jsx("li", { children: _jsxs("button", { type: "button", onClick: () => onSelect?.(ink), "aria-label": `Select ${ink.name}`, style: {
|
|
51
|
+
display: "flex",
|
|
52
|
+
alignItems: "center",
|
|
53
|
+
gap: "0.5rem",
|
|
54
|
+
width: "100%",
|
|
55
|
+
padding: "0.25rem 0.5rem",
|
|
56
|
+
background: "transparent",
|
|
57
|
+
border: "none",
|
|
58
|
+
cursor: onSelect ? "pointer" : "default",
|
|
59
|
+
textAlign: "left",
|
|
60
|
+
}, children: [_jsx("span", { "aria-hidden": "true", style: swatchStyleFor(ink) }), _jsx("span", { style: { flex: 1 }, children: ink.name }), _jsxs("small", { style: { opacity: 0.6 }, children: [ink.color_space, " \u00B7 p", ink.occurs_on_pages.map((p) => p + 1).join(",")] })] }) }, ink.name))) })] }));
|
|
61
|
+
}
|
|
62
|
+
/** Best-effort swatch chip. We don't have a Lab→sRGB pipeline in the
|
|
63
|
+
* editor (codex-pdf owns colour conversion); show a process-color
|
|
64
|
+
* hint for the common CMYK names and a neutral chip otherwise. */
|
|
65
|
+
function swatchStyleFor(ink) {
|
|
66
|
+
const lower = ink.name.toLowerCase();
|
|
67
|
+
const base = {
|
|
68
|
+
width: "0.85rem",
|
|
69
|
+
height: "0.85rem",
|
|
70
|
+
borderRadius: "0.15rem",
|
|
71
|
+
border: "1px solid #888",
|
|
72
|
+
flexShrink: 0,
|
|
73
|
+
};
|
|
74
|
+
if (lower.includes("cyan"))
|
|
75
|
+
return { ...base, background: "#00aeef" };
|
|
76
|
+
if (lower.includes("magenta"))
|
|
77
|
+
return { ...base, background: "#ec008c" };
|
|
78
|
+
if (lower.includes("yellow"))
|
|
79
|
+
return { ...base, background: "#fff200" };
|
|
80
|
+
if (lower.includes("black") || lower.includes("key"))
|
|
81
|
+
return { ...base, background: "#000" };
|
|
82
|
+
return { ...base, background: "#ddd" };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=InksPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InksPanel.js","sourceRoot":"","sources":["../../src/components/InksPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Print process category. Mirrors `PrintContext.process` in
|
|
3
|
+
* `@artworkpdf/document-model` — kept as a structural literal so this
|
|
4
|
+
* package doesn't pull a document-model dependency.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export type PrintProcess = "offset" | "flexo" | "gravure" | "digital" | "screen";
|
|
9
|
+
/**
|
|
10
|
+
* Substrate finish category. Mirrors the document-model shape.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export type SubstrateFinish = "matte" | "gloss" | "satin" | "uncoated";
|
|
14
|
+
/**
|
|
15
|
+
* Substrate compositional class — collapses the long tail of named
|
|
16
|
+
* stocks into the four rule-relevant buckets that lint-pdf's
|
|
17
|
+
* `substrate_is` matcher (Wave 2 PR-C) operates on. Distinct from
|
|
18
|
+
* {@link SubstrateFinish}: a `coated` stock can be `gloss` or `matte`;
|
|
19
|
+
* `newsprint` is always `uncoated`. Mirrors `SubstrateClass` in
|
|
20
|
+
* `@artworkpdf/document-model/preflight`; duplicated here so this
|
|
21
|
+
* package stays consumable without the document-model peer dep.
|
|
22
|
+
*
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export type SubstrateClass = "coated" | "uncoated" | "newsprint" | "synthetic";
|
|
26
|
+
/**
|
|
27
|
+
* Editable shape consumed by {@link JobSetupPanel}. Mirrors
|
|
28
|
+
* `PrintContext` in `@artworkpdf/document-model`; kept structural so
|
|
29
|
+
* this UI package stays consumable by hosts that don't import the
|
|
30
|
+
* document-model.
|
|
31
|
+
*
|
|
32
|
+
* Hosts thread this in as `value` + `onChange`; the panel is a
|
|
33
|
+
* controlled component — it owns no state of its own.
|
|
34
|
+
*
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
export type JobSetupValue = {
|
|
38
|
+
process: PrintProcess;
|
|
39
|
+
substrate: {
|
|
40
|
+
id: string;
|
|
41
|
+
color: string;
|
|
42
|
+
opacity: number;
|
|
43
|
+
finish: SubstrateFinish;
|
|
44
|
+
/**
|
|
45
|
+
* Rule-relevant substrate class (P1). When set, the value flows
|
|
46
|
+
* through {@link preflightContextOf} to lint-pdf's
|
|
47
|
+
* `/v1/preflight/process` `substrate` query parameter, narrowing
|
|
48
|
+
* the rule set to substrate-aware checks. Optional because legacy
|
|
49
|
+
* jobs predate the field — hosts that omit it get the
|
|
50
|
+
* substrate-agnostic ruleset.
|
|
51
|
+
*/
|
|
52
|
+
class?: SubstrateClass;
|
|
53
|
+
};
|
|
54
|
+
/** ISO 3166-1 alpha-2 codes, e.g. `["US", "CA", "GB"]`. */
|
|
55
|
+
targetMarkets?: string[];
|
|
56
|
+
/** ICC profile name — free text in this wave; library-backed selector lands later. */
|
|
57
|
+
colorProfile?: string;
|
|
58
|
+
/** Total Area Coverage limit, percent (e.g. `300` for offset, `260` for newsprint). */
|
|
59
|
+
tacLimit?: number;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Narrow projection of {@link JobSetupValue} that drives
|
|
63
|
+
* process-aware preflight. Returned by {@link preflightContextOf};
|
|
64
|
+
* the two fields map 1:1 to lint-pdf's `?process=&substrate=` query
|
|
65
|
+
* parameters on `/v1/preflight/process` (Wave 2 PR-E).
|
|
66
|
+
*
|
|
67
|
+
* `substrate` is *optional* (not `SubstrateClass | undefined`) so a
|
|
68
|
+
* `JSON.stringify` / `URLSearchParams.append` round-trip on the
|
|
69
|
+
* client side omits the parameter entirely instead of serializing
|
|
70
|
+
* `substrate=undefined` — lint-pdf reads the absence as "run the
|
|
71
|
+
* substrate-agnostic ruleset".
|
|
72
|
+
*
|
|
73
|
+
* @public
|
|
74
|
+
*/
|
|
75
|
+
export type PreflightContext = {
|
|
76
|
+
process: PrintProcess;
|
|
77
|
+
substrate?: SubstrateClass;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Project a {@link JobSetupValue} onto the two fields lint-pdf's
|
|
81
|
+
* process-aware preflight endpoint cares about. Pure function — call
|
|
82
|
+
* site decides whether to debounce, memoize, or feed straight into
|
|
83
|
+
* the preflight client.
|
|
84
|
+
*
|
|
85
|
+
* Omits the `substrate` key entirely when the host hasn't set
|
|
86
|
+
* `value.substrate.class`, so callers can spread the return value
|
|
87
|
+
* straight into a query-param builder without filtering `undefined`s.
|
|
88
|
+
*
|
|
89
|
+
* @public
|
|
90
|
+
*/
|
|
91
|
+
export declare function preflightContextOf(value: JobSetupValue): PreflightContext;
|
|
92
|
+
/**
|
|
93
|
+
* Props for the print-context modal.
|
|
94
|
+
*
|
|
95
|
+
* `enable_print_context: false` hides the panel entirely; mount with
|
|
96
|
+
* `<JobSetupPanel />` only when {@link showFeature} returns true for
|
|
97
|
+
* `print_context`.
|
|
98
|
+
*
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
export type JobSetupPanelProps = {
|
|
102
|
+
value: JobSetupValue;
|
|
103
|
+
onChange: (next: JobSetupValue) => void;
|
|
104
|
+
onClose: () => void;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Modal panel for editing a document's print context (F2).
|
|
108
|
+
*
|
|
109
|
+
* Renders a five-field form: process, substrate (id/color/opacity/
|
|
110
|
+
* finish composite), color profile (ICC), TAC limit, and target
|
|
111
|
+
* markets. Writes propagate through `onChange` immediately —
|
|
112
|
+
* controlled component, no local state — so hosts can persist into
|
|
113
|
+
* `document.printContext` without an explicit save step.
|
|
114
|
+
*
|
|
115
|
+
* @public
|
|
116
|
+
*/
|
|
117
|
+
export declare function JobSetupPanel({ value, onChange, onClose }: JobSetupPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
118
|
+
//# sourceMappingURL=JobSetupPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobSetupPanel.d.ts","sourceRoot":"","sources":["../../src/components/JobSetupPanel.tsx"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAE/E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,eAAe,CAAC;QACxB;;;;;;;WAOG;QACH,KAAK,CAAC,EAAE,cAAc,CAAC;KACxB,CAAC;IACF,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAIzE;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAgCF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,kBAAkB,2CAiR7E"}
|
|
@@ -0,0 +1,169 @@
|
|
|
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
|
+
import { useEffect } from "react";
|
|
5
|
+
/**
|
|
6
|
+
* Project a {@link JobSetupValue} onto the two fields lint-pdf's
|
|
7
|
+
* process-aware preflight endpoint cares about. Pure function — call
|
|
8
|
+
* site decides whether to debounce, memoize, or feed straight into
|
|
9
|
+
* the preflight client.
|
|
10
|
+
*
|
|
11
|
+
* Omits the `substrate` key entirely when the host hasn't set
|
|
12
|
+
* `value.substrate.class`, so callers can spread the return value
|
|
13
|
+
* straight into a query-param builder without filtering `undefined`s.
|
|
14
|
+
*
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export function preflightContextOf(value) {
|
|
18
|
+
const ctx = { process: value.process };
|
|
19
|
+
if (value.substrate.class !== undefined)
|
|
20
|
+
ctx.substrate = value.substrate.class;
|
|
21
|
+
return ctx;
|
|
22
|
+
}
|
|
23
|
+
const PANEL_BG = "#1a0f08";
|
|
24
|
+
const BORDER = "#3d1a00";
|
|
25
|
+
const BRAND = "#fc5102";
|
|
26
|
+
const TEXT = "#f4ece6";
|
|
27
|
+
const MUTED = "#888";
|
|
28
|
+
const labelStyle = {
|
|
29
|
+
display: "block",
|
|
30
|
+
fontSize: "0.7rem",
|
|
31
|
+
letterSpacing: "0.08em",
|
|
32
|
+
textTransform: "uppercase",
|
|
33
|
+
color: MUTED,
|
|
34
|
+
marginBottom: "0.25rem",
|
|
35
|
+
};
|
|
36
|
+
const inputStyle = {
|
|
37
|
+
width: "100%",
|
|
38
|
+
padding: "0.45rem 0.6rem",
|
|
39
|
+
background: "#0f0a05",
|
|
40
|
+
border: `1px solid ${BORDER}`,
|
|
41
|
+
borderRadius: 4,
|
|
42
|
+
color: TEXT,
|
|
43
|
+
fontSize: "0.85rem",
|
|
44
|
+
fontFamily: "inherit",
|
|
45
|
+
};
|
|
46
|
+
const PROCESSES = ["offset", "flexo", "gravure", "digital", "screen"];
|
|
47
|
+
const FINISHES = ["matte", "gloss", "satin", "uncoated"];
|
|
48
|
+
const SUBSTRATE_CLASSES = ["coated", "uncoated", "newsprint", "synthetic"];
|
|
49
|
+
/**
|
|
50
|
+
* Modal panel for editing a document's print context (F2).
|
|
51
|
+
*
|
|
52
|
+
* Renders a five-field form: process, substrate (id/color/opacity/
|
|
53
|
+
* finish composite), color profile (ICC), TAC limit, and target
|
|
54
|
+
* markets. Writes propagate through `onChange` immediately —
|
|
55
|
+
* controlled component, no local state — so hosts can persist into
|
|
56
|
+
* `document.printContext` without an explicit save step.
|
|
57
|
+
*
|
|
58
|
+
* @public
|
|
59
|
+
*/
|
|
60
|
+
export function JobSetupPanel({ value, onChange, onClose }) {
|
|
61
|
+
function patch(p) {
|
|
62
|
+
onChange({ ...value, ...p });
|
|
63
|
+
}
|
|
64
|
+
function patchSubstrate(p) {
|
|
65
|
+
onChange({ ...value, substrate: { ...value.substrate, ...p } });
|
|
66
|
+
}
|
|
67
|
+
// Close on Escape — matches PaletteManager pattern + standard
|
|
68
|
+
// modal a11y. Focus trapping is deferred (substantial; tracked as
|
|
69
|
+
// a follow-up).
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
function handleEscape(e) {
|
|
72
|
+
if (e.key === "Escape")
|
|
73
|
+
onClose();
|
|
74
|
+
}
|
|
75
|
+
document.addEventListener("keydown", handleEscape);
|
|
76
|
+
return () => document.removeEventListener("keydown", handleEscape);
|
|
77
|
+
}, [onClose]);
|
|
78
|
+
return (_jsx("div", { role: "dialog", "aria-label": "Job setup \u2014 print context", "aria-modal": "true",
|
|
79
|
+
// Click on the backdrop (this element) closes; clicks inside
|
|
80
|
+
// the inner panel stopPropagate via the panel's own handler.
|
|
81
|
+
onClick: (e) => {
|
|
82
|
+
if (e.target === e.currentTarget)
|
|
83
|
+
onClose();
|
|
84
|
+
}, style: {
|
|
85
|
+
position: "fixed",
|
|
86
|
+
inset: 0,
|
|
87
|
+
background: "rgba(0,0,0,0.55)",
|
|
88
|
+
display: "flex",
|
|
89
|
+
alignItems: "center",
|
|
90
|
+
justifyContent: "center",
|
|
91
|
+
zIndex: 100,
|
|
92
|
+
}, children: _jsxs("div", { style: {
|
|
93
|
+
background: PANEL_BG,
|
|
94
|
+
border: `1px solid ${BORDER}`,
|
|
95
|
+
borderRadius: 8,
|
|
96
|
+
padding: "1.25rem",
|
|
97
|
+
width: "min(440px, 92vw)",
|
|
98
|
+
maxHeight: "85vh",
|
|
99
|
+
overflow: "auto",
|
|
100
|
+
color: TEXT,
|
|
101
|
+
fontFamily: "inherit",
|
|
102
|
+
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", marginBottom: "1rem" }, children: [_jsx("h2", { style: { margin: 0, fontSize: "1rem", fontWeight: 700, color: BRAND }, children: "Job setup" }), _jsx("span", { style: { flex: 1 } }), _jsx("button", { type: "button", onClick: onClose, "aria-label": "Close job setup", style: {
|
|
103
|
+
background: "transparent",
|
|
104
|
+
border: `1px solid ${BORDER}`,
|
|
105
|
+
color: TEXT,
|
|
106
|
+
borderRadius: 4,
|
|
107
|
+
padding: "0.25rem 0.55rem",
|
|
108
|
+
cursor: "pointer",
|
|
109
|
+
fontSize: "0.85rem",
|
|
110
|
+
fontFamily: "inherit",
|
|
111
|
+
}, children: "\u00D7" })] }), _jsxs("div", { style: { display: "grid", gap: "0.85rem" }, children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "js-process", style: labelStyle, children: "Print process" }), _jsx("select", { id: "js-process", value: value.process, onChange: (e) => patch({ process: e.target.value }), style: inputStyle, children: PROCESSES.map((p) => (_jsx("option", { value: p, children: p }, p))) })] }), _jsxs("fieldset", { style: { border: `1px solid ${BORDER}`, borderRadius: 6, padding: "0.6rem 0.75rem" }, children: [_jsx("legend", { style: { padding: "0 0.35rem", fontSize: "0.72rem", color: MUTED }, children: "Substrate" }), _jsxs("div", { style: { display: "grid", gap: "0.55rem" }, children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "js-substrate-id", style: labelStyle, children: "Id" }), _jsx("input", { id: "js-substrate-id", value: value.substrate.id, onChange: (e) => patchSubstrate({ id: e.target.value }), style: inputStyle })] }), _jsxs("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "0.55rem" }, children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "js-substrate-color", style: labelStyle, children: "Color" }), _jsx("input", { id: "js-substrate-color", value: value.substrate.color, onChange: (e) => patchSubstrate({ color: e.target.value }), style: inputStyle })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "js-substrate-opacity", style: labelStyle, children: "Opacity (0\u20131)" }), _jsx("input", { id: "js-substrate-opacity", type: "number", step: "0.01", min: "0", max: "1", value: value.substrate.opacity, onChange: (e) => {
|
|
112
|
+
// Empty → no-op (don't conflate "user clearing
|
|
113
|
+
// the field" with "fully transparent"). Out-of-
|
|
114
|
+
// range typed input gets clamped to [0,1]
|
|
115
|
+
// because HTML min/max only constrain the
|
|
116
|
+
// spinner, not raw keyboard input.
|
|
117
|
+
const v = e.target.value;
|
|
118
|
+
if (v === "")
|
|
119
|
+
return;
|
|
120
|
+
const n = Number(v);
|
|
121
|
+
if (Number.isNaN(n))
|
|
122
|
+
return;
|
|
123
|
+
const clamped = Math.min(1, Math.max(0, n));
|
|
124
|
+
patchSubstrate({ opacity: clamped });
|
|
125
|
+
}, style: inputStyle })] })] }), _jsxs("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "0.55rem" }, children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "js-substrate-finish", style: labelStyle, children: "Finish" }), _jsx("select", { id: "js-substrate-finish", value: value.substrate.finish, onChange: (e) => patchSubstrate({ finish: e.target.value }), style: inputStyle, children: FINISHES.map((f) => (_jsx("option", { value: f, children: f }, f))) })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "js-substrate-class", style: labelStyle, children: "Class (preflight)" }), _jsxs("select", { id: "js-substrate-class",
|
|
126
|
+
// Empty option == "no class set" — passed to lint-pdf as
|
|
127
|
+
// a missing query param, which falls back to the
|
|
128
|
+
// substrate-agnostic ruleset rather than failing.
|
|
129
|
+
value: value.substrate.class ?? "", onChange: (e) => {
|
|
130
|
+
const v = e.target.value;
|
|
131
|
+
if (v === "") {
|
|
132
|
+
const { class: _, ...rest } = value.substrate;
|
|
133
|
+
onChange({ ...value, substrate: rest });
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
patchSubstrate({ class: v });
|
|
137
|
+
}
|
|
138
|
+
}, style: inputStyle, children: [_jsx("option", { value: "", children: "\u2014 none \u2014" }), SUBSTRATE_CLASSES.map((c) => (_jsx("option", { value: c, children: c }, c)))] })] })] })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "js-icc", style: labelStyle, children: "Color profile (ICC)" }), _jsx("input", { id: "js-icc", value: value.colorProfile ?? "", onChange: (e) => {
|
|
139
|
+
const v = e.target.value;
|
|
140
|
+
if (v) {
|
|
141
|
+
patch({ colorProfile: v });
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
const { colorProfile: _, ...rest } = value;
|
|
145
|
+
onChange(rest);
|
|
146
|
+
}
|
|
147
|
+
}, placeholder: "ISOcoated_v2_eci", style: inputStyle })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "js-tac", style: labelStyle, children: "TAC limit (%)" }), _jsx("input", { id: "js-tac", type: "number", min: "0", max: "400", value: value.tacLimit ?? "", onChange: (e) => {
|
|
148
|
+
if (e.target.value === "") {
|
|
149
|
+
const { tacLimit: _, ...rest } = value;
|
|
150
|
+
onChange(rest);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
patch({ tacLimit: Number(e.target.value) });
|
|
154
|
+
}
|
|
155
|
+
}, placeholder: "300", style: inputStyle })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "js-markets", style: labelStyle, children: "Target markets (comma-separated ISO 3166-1 alpha-2)" }), _jsx("input", { id: "js-markets", value: (value.targetMarkets ?? []).join(", "), onChange: (e) => {
|
|
156
|
+
const parts = e.target.value
|
|
157
|
+
.split(",")
|
|
158
|
+
.map((s) => s.trim().toUpperCase())
|
|
159
|
+
.filter(Boolean);
|
|
160
|
+
if (parts.length > 0) {
|
|
161
|
+
patch({ targetMarkets: parts });
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const { targetMarkets: _, ...rest } = value;
|
|
165
|
+
onChange(rest);
|
|
166
|
+
}
|
|
167
|
+
}, placeholder: "US, CA, GB", style: inputStyle })] })] })] }) }));
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=JobSetupPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobSetupPanel.js","sourceRoot":"","sources":["../../src/components/JobSetupPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayersPanel.d.ts","sourceRoot":"","sources":["../../src/components/LayersPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"LayersPanel.d.ts","sourceRoot":"","sources":["../../src/components/LayersPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAsBF,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,eAAe,GAChB,EAAE,KAAK,2CAyIP"}
|