@printwithsynergy/lens-pdf 0.3.0-beta.81
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 +661 -0
- package/README.md +344 -0
- package/dist/browser/codexOverlay.d.ts +109 -0
- package/dist/browser/codexOverlay.d.ts.map +1 -0
- package/dist/browser/codexOverlay.js +256 -0
- package/dist/browser/codexOverlay.js.map +1 -0
- package/dist/browser/constants.d.ts +13 -0
- package/dist/browser/constants.d.ts.map +1 -0
- package/dist/browser/constants.js +13 -0
- package/dist/browser/constants.js.map +1 -0
- package/dist/browser/index.d.ts +211 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +1190 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/pantone-gold.d.ts +59 -0
- package/dist/browser/pantone-gold.d.ts.map +1 -0
- package/dist/browser/pantone-gold.js +237 -0
- package/dist/browser/pantone-gold.js.map +1 -0
- package/dist/components/AnnotationCanvas.d.ts +27 -0
- package/dist/components/AnnotationCanvas.d.ts.map +1 -0
- package/dist/components/AnnotationCanvas.js +401 -0
- package/dist/components/AnnotationCanvas.js.map +1 -0
- package/dist/components/AnnotationNotesPanel.d.ts +15 -0
- package/dist/components/AnnotationNotesPanel.d.ts.map +1 -0
- package/dist/components/AnnotationNotesPanel.js +235 -0
- package/dist/components/AnnotationNotesPanel.js.map +1 -0
- package/dist/components/AnnotationThread.d.ts +18 -0
- package/dist/components/AnnotationThread.d.ts.map +1 -0
- package/dist/components/AnnotationThread.js +163 -0
- package/dist/components/AnnotationThread.js.map +1 -0
- package/dist/components/AnnotationToolbar.d.ts +39 -0
- package/dist/components/AnnotationToolbar.d.ts.map +1 -0
- package/dist/components/AnnotationToolbar.js +258 -0
- package/dist/components/AnnotationToolbar.js.map +1 -0
- package/dist/components/BoxOverlay.d.ts +20 -0
- package/dist/components/BoxOverlay.d.ts.map +1 -0
- package/dist/components/BoxOverlay.js +107 -0
- package/dist/components/BoxOverlay.js.map +1 -0
- package/dist/components/ColorPickerTool.d.ts +11 -0
- package/dist/components/ColorPickerTool.d.ts.map +1 -0
- package/dist/components/ColorPickerTool.js +220 -0
- package/dist/components/ColorPickerTool.js.map +1 -0
- package/dist/components/DensitometerTool.d.ts +25 -0
- package/dist/components/DensitometerTool.d.ts.map +1 -0
- package/dist/components/DensitometerTool.js +246 -0
- package/dist/components/DensitometerTool.js.map +1 -0
- package/dist/components/DielineInfoPanel.d.ts +27 -0
- package/dist/components/DielineInfoPanel.d.ts.map +1 -0
- package/dist/components/DielineInfoPanel.js +23 -0
- package/dist/components/DielineInfoPanel.js.map +1 -0
- package/dist/components/DielineOverlay.d.ts +10 -0
- package/dist/components/DielineOverlay.d.ts.map +1 -0
- package/dist/components/DielineOverlay.js +57 -0
- package/dist/components/DielineOverlay.js.map +1 -0
- package/dist/components/FindingsSidebar.d.ts +50 -0
- package/dist/components/FindingsSidebar.d.ts.map +1 -0
- package/dist/components/FindingsSidebar.js +78 -0
- package/dist/components/FindingsSidebar.js.map +1 -0
- package/dist/components/LayerCanvas.d.ts +30 -0
- package/dist/components/LayerCanvas.d.ts.map +1 -0
- package/dist/components/LayerCanvas.js +84 -0
- package/dist/components/LayerCanvas.js.map +1 -0
- package/dist/components/LayerPanel.d.ts +9 -0
- package/dist/components/LayerPanel.d.ts.map +1 -0
- package/dist/components/LayerPanel.js +144 -0
- package/dist/components/LayerPanel.js.map +1 -0
- package/dist/components/LensPDF.d.ts +61 -0
- package/dist/components/LensPDF.d.ts.map +1 -0
- package/dist/components/LensPDF.js +49 -0
- package/dist/components/LensPDF.js.map +1 -0
- package/dist/components/LensPDFDemo.d.ts +160 -0
- package/dist/components/LensPDFDemo.d.ts.map +1 -0
- package/dist/components/LensPDFDemo.js +1060 -0
- package/dist/components/LensPDFDemo.js.map +1 -0
- package/dist/components/LensPDFDemo.styles.d.ts +38 -0
- package/dist/components/LensPDFDemo.styles.d.ts.map +1 -0
- package/dist/components/LensPDFDemo.styles.js +282 -0
- package/dist/components/LensPDFDemo.styles.js.map +1 -0
- package/dist/components/LensPDFViewer.d.ts +79 -0
- package/dist/components/LensPDFViewer.d.ts.map +1 -0
- package/dist/components/LensPDFViewer.js +254 -0
- package/dist/components/LensPDFViewer.js.map +1 -0
- package/dist/components/MeasureTool.d.ts +16 -0
- package/dist/components/MeasureTool.d.ts.map +1 -0
- package/dist/components/MeasureTool.js +137 -0
- package/dist/components/MeasureTool.js.map +1 -0
- package/dist/components/MobileBottomSheet.d.ts +12 -0
- package/dist/components/MobileBottomSheet.d.ts.map +1 -0
- package/dist/components/MobileBottomSheet.js +113 -0
- package/dist/components/MobileBottomSheet.js.map +1 -0
- package/dist/components/MobileDrawer.d.ts +31 -0
- package/dist/components/MobileDrawer.d.ts.map +1 -0
- package/dist/components/MobileDrawer.js +67 -0
- package/dist/components/MobileDrawer.js.map +1 -0
- package/dist/components/PageCanvas.d.ts +33 -0
- package/dist/components/PageCanvas.d.ts.map +1 -0
- package/dist/components/PageCanvas.js +385 -0
- package/dist/components/PageCanvas.js.map +1 -0
- package/dist/components/PageNavigator.d.ts +18 -0
- package/dist/components/PageNavigator.d.ts.map +1 -0
- package/dist/components/PageNavigator.js +44 -0
- package/dist/components/PageNavigator.js.map +1 -0
- package/dist/components/SeparationCanvas.d.ts +12 -0
- package/dist/components/SeparationCanvas.d.ts.map +1 -0
- package/dist/components/SeparationCanvas.js +174 -0
- package/dist/components/SeparationCanvas.js.map +1 -0
- package/dist/components/TACHeatmapOverlay.d.ts +17 -0
- package/dist/components/TACHeatmapOverlay.d.ts.map +1 -0
- package/dist/components/TACHeatmapOverlay.js +119 -0
- package/dist/components/TACHeatmapOverlay.js.map +1 -0
- package/dist/components/ZoomControls.d.ts +11 -0
- package/dist/components/ZoomControls.d.ts.map +1 -0
- package/dist/components/ZoomControls.js +26 -0
- package/dist/components/ZoomControls.js.map +1 -0
- package/dist/components/defaultShellPlugins.d.ts +3 -0
- package/dist/components/defaultShellPlugins.d.ts.map +1 -0
- package/dist/components/defaultShellPlugins.js +273 -0
- package/dist/components/defaultShellPlugins.js.map +1 -0
- package/dist/components/index.d.ts +32 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +32 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/presets.d.ts +8 -0
- package/dist/components/presets.d.ts.map +1 -0
- package/dist/components/presets.js +14 -0
- package/dist/components/presets.js.map +1 -0
- package/dist/components/shellPlugins.d.ts +105 -0
- package/dist/components/shellPlugins.d.ts.map +1 -0
- package/dist/components/shellPlugins.js +52 -0
- package/dist/components/shellPlugins.js.map +1 -0
- package/dist/components/useIsMobile.d.ts +16 -0
- package/dist/components/useIsMobile.d.ts.map +1 -0
- package/dist/components/useIsMobile.js +30 -0
- package/dist/components/useIsMobile.js.map +1 -0
- package/dist/fallback-pdfjs/index.d.ts +60 -0
- package/dist/fallback-pdfjs/index.d.ts.map +1 -0
- package/dist/fallback-pdfjs/index.js +163 -0
- package/dist/fallback-pdfjs/index.js.map +1 -0
- package/dist/host/LensPDFProvider.d.ts +36 -0
- package/dist/host/LensPDFProvider.d.ts.map +1 -0
- package/dist/host/LensPDFProvider.js +12 -0
- package/dist/host/LensPDFProvider.js.map +1 -0
- package/dist/host/index.d.ts +167 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +173 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pdfFallback.d.ts +50 -0
- package/dist/host/pdfFallback.d.ts.map +1 -0
- package/dist/host/pdfFallback.js +171 -0
- package/dist/host/pdfFallback.js.map +1 -0
- package/dist/host/pdfValidation.d.ts +45 -0
- package/dist/host/pdfValidation.d.ts.map +1 -0
- package/dist/host/pdfValidation.js +78 -0
- package/dist/host/pdfValidation.js.map +1 -0
- package/dist/host/shareLink.d.ts +80 -0
- package/dist/host/shareLink.d.ts.map +1 -0
- package/dist/host/shareLink.js +114 -0
- package/dist/host/shareLink.js.map +1 -0
- package/dist/host/useLensPDF.d.ts +73 -0
- package/dist/host/useLensPDF.d.ts.map +1 -0
- package/dist/host/useLensPDF.js +213 -0
- package/dist/host/useLensPDF.js.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/context.d.ts +70 -0
- package/dist/plugin/context.d.ts.map +1 -0
- package/dist/plugin/context.js +16 -0
- package/dist/plugin/context.js.map +1 -0
- package/dist/plugin/findings-location.d.ts +53 -0
- package/dist/plugin/findings-location.d.ts.map +1 -0
- package/dist/plugin/findings-location.js +72 -0
- package/dist/plugin/findings-location.js.map +1 -0
- package/dist/plugin/index.d.ts +19 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +16 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/registry.d.ts +61 -0
- package/dist/plugin/registry.d.ts.map +1 -0
- package/dist/plugin/registry.js +102 -0
- package/dist/plugin/registry.js.map +1 -0
- package/dist/plugin/services.d.ts +380 -0
- package/dist/plugin/services.d.ts.map +1 -0
- package/dist/plugin/services.js +104 -0
- package/dist/plugin/services.js.map +1 -0
- package/dist/plugin/types.d.ts +198 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/plugin/types.js +24 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/types/index.d.ts +191 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +95 -0
- package/dist/types/index.js.map +1 -0
- package/dist/units/index.d.ts +64 -0
- package/dist/units/index.d.ts.map +1 -0
- package/dist/units/index.js +98 -0
- package/dist/units/index.js.map +1 -0
- package/docs/architecture.md +90 -0
- package/docs/components.md +569 -0
- package/docs/contributing.md +78 -0
- package/docs/fallback.md +174 -0
- package/docs/lens-pdf-viewer.md +128 -0
- package/docs/licensing.md +78 -0
- package/docs/measurement-units.md +87 -0
- package/docs/plugins.md +256 -0
- package/docs/security.md +69 -0
- package/docs/server.md +212 -0
- package/docs/services.md +210 -0
- package/docs/share-links.md +111 -0
- package/docs/theming.md +164 -0
- package/docs/validation.md +83 -0
- package/package.json +139 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useState } from "react";
|
|
4
|
+
import { logUnwiredHide, useFallbackMode, useViewerHost, useViewerServices, } from "../host/index.js";
|
|
5
|
+
import { useIsMobile } from "./useIsMobile.js";
|
|
6
|
+
export function ColorPickerTool({ jobId: _jobId, pageNum, pageWidthPts, pageHeightPts, canvasWidth, canvasHeight, }) {
|
|
7
|
+
const { colorSample } = useViewerServices();
|
|
8
|
+
const { debug, pdfFallback } = useViewerHost();
|
|
9
|
+
const mode = useFallbackMode(colorSample);
|
|
10
|
+
const isMobile = useIsMobile();
|
|
11
|
+
const [sample, setSample] = useState(null);
|
|
12
|
+
const [position, setPosition] = useState(null);
|
|
13
|
+
const [loading, setLoading] = useState(false);
|
|
14
|
+
// Ink swatches: fixed CMYK primaries for process channels, deterministic
|
|
15
|
+
// hash-to-hue for spot channels so each spot stays visually stable across
|
|
16
|
+
// samples.
|
|
17
|
+
const swatchFor = (name) => {
|
|
18
|
+
const n = name.toLowerCase();
|
|
19
|
+
if (n === "cyan" || n === "c")
|
|
20
|
+
return "#00b7eb";
|
|
21
|
+
if (n === "magenta" || n === "m")
|
|
22
|
+
return "#e91e63";
|
|
23
|
+
if (n === "yellow" || n === "y")
|
|
24
|
+
return "#fdd835";
|
|
25
|
+
if (n === "black" || n === "k")
|
|
26
|
+
return "#111827";
|
|
27
|
+
let h = 0;
|
|
28
|
+
for (let i = 0; i < name.length; i++)
|
|
29
|
+
h = (h * 31 + name.charCodeAt(i)) >>> 0;
|
|
30
|
+
return `hsl(${h % 360}, 70%, 45%)`;
|
|
31
|
+
};
|
|
32
|
+
const processAbbr = (name) => {
|
|
33
|
+
const lower = name.toLowerCase();
|
|
34
|
+
if (lower === "cyan")
|
|
35
|
+
return "C";
|
|
36
|
+
if (lower === "magenta")
|
|
37
|
+
return "M";
|
|
38
|
+
if (lower === "yellow")
|
|
39
|
+
return "Y";
|
|
40
|
+
if (lower === "black")
|
|
41
|
+
return "K";
|
|
42
|
+
return name.charAt(0).toUpperCase();
|
|
43
|
+
};
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (mode === "hidden" && debug)
|
|
46
|
+
logUnwiredHide("ColorPickerTool", "colorSample");
|
|
47
|
+
}, [mode, debug]);
|
|
48
|
+
const pickAt = useCallback(async (clickX, clickY) => {
|
|
49
|
+
// Convert to PDF coordinates (origin lower-left)
|
|
50
|
+
const pdfX = (clickX / canvasWidth) * pageWidthPts;
|
|
51
|
+
const pdfY = pageHeightPts - (clickY / canvasHeight) * pageHeightPts;
|
|
52
|
+
setPosition({ x: clickX, y: clickY });
|
|
53
|
+
setLoading(true);
|
|
54
|
+
try {
|
|
55
|
+
const data = mode === "fallback" && pdfFallback
|
|
56
|
+
? await pdfFallback.sampleColorAt({ pageNum, pdfX, pdfY })
|
|
57
|
+
: await colorSample.sampleAt({ pageNum, pdfX, pdfY });
|
|
58
|
+
if (data)
|
|
59
|
+
setSample(data);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
setLoading(false);
|
|
63
|
+
}
|
|
64
|
+
}, [colorSample, pdfFallback, mode, pageNum, pageWidthPts, pageHeightPts, canvasWidth, canvasHeight]);
|
|
65
|
+
if (mode === "hidden")
|
|
66
|
+
return null;
|
|
67
|
+
const handleClick = useCallback((e) => {
|
|
68
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
69
|
+
void pickAt(e.clientX - rect.left, e.clientY - rect.top);
|
|
70
|
+
}, [pickAt]);
|
|
71
|
+
const handleTouch = useCallback((e) => {
|
|
72
|
+
if (e.touches.length !== 1)
|
|
73
|
+
return;
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
const touch = e.touches[0];
|
|
76
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
77
|
+
void pickAt(touch.clientX - rect.left, touch.clientY - rect.top);
|
|
78
|
+
}, [pickAt]);
|
|
79
|
+
// Readout placement: floating tooltip on desktop (anchored near the
|
|
80
|
+
// click), bottom sheet on mobile so the readout never falls behind
|
|
81
|
+
// the user's finger or off-screen.
|
|
82
|
+
const readoutStyle = isMobile
|
|
83
|
+
? {
|
|
84
|
+
position: "fixed",
|
|
85
|
+
left: 0,
|
|
86
|
+
right: 0,
|
|
87
|
+
bottom: 0,
|
|
88
|
+
zIndex: 60,
|
|
89
|
+
pointerEvents: "none",
|
|
90
|
+
padding: "12px 16px 16px",
|
|
91
|
+
background: "rgba(10, 8, 16, 0.96)",
|
|
92
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.12)",
|
|
93
|
+
color: "#fff",
|
|
94
|
+
boxShadow: "0 -8px 24px rgba(0, 0, 0, 0.45)",
|
|
95
|
+
fontSize: 13,
|
|
96
|
+
}
|
|
97
|
+
: {
|
|
98
|
+
position: "absolute",
|
|
99
|
+
left: position
|
|
100
|
+
? Math.min(position.x + 16, canvasWidth - 230)
|
|
101
|
+
: 0,
|
|
102
|
+
top: position
|
|
103
|
+
? Math.min(position.y + 16, canvasHeight - 200)
|
|
104
|
+
: 0,
|
|
105
|
+
zIndex: 30,
|
|
106
|
+
pointerEvents: "none",
|
|
107
|
+
minWidth: 200,
|
|
108
|
+
padding: "8px 12px",
|
|
109
|
+
borderRadius: 8,
|
|
110
|
+
border: "1px solid rgba(255, 255, 255, 0.2)",
|
|
111
|
+
background: "rgba(0, 0, 0, 0.92)",
|
|
112
|
+
color: "#fff",
|
|
113
|
+
boxShadow: "0 12px 32px rgba(0, 0, 0, 0.55)",
|
|
114
|
+
fontSize: 12,
|
|
115
|
+
};
|
|
116
|
+
return (_jsxs("div", { style: {
|
|
117
|
+
position: "absolute",
|
|
118
|
+
inset: 0,
|
|
119
|
+
cursor: "crosshair",
|
|
120
|
+
zIndex: 25,
|
|
121
|
+
touchAction: "none",
|
|
122
|
+
}, onClick: handleClick, onTouchStart: handleTouch, children: [position && sample && (_jsxs("div", { style: readoutStyle, children: [_jsxs("div", { style: {
|
|
123
|
+
display: "flex",
|
|
124
|
+
alignItems: "center",
|
|
125
|
+
gap: 8,
|
|
126
|
+
marginBottom: 4,
|
|
127
|
+
}, children: [_jsx("div", { style: {
|
|
128
|
+
width: 16,
|
|
129
|
+
height: 16,
|
|
130
|
+
borderRadius: 3,
|
|
131
|
+
border: "1px solid rgba(255, 255, 255, 0.3)",
|
|
132
|
+
backgroundColor: sample.hex,
|
|
133
|
+
} }), _jsx("span", { style: {
|
|
134
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",
|
|
135
|
+
fontWeight: 700,
|
|
136
|
+
}, children: sample.hex.toUpperCase() })] }), _jsxs("div", { style: { fontSize: 10, color: "#cbd5e1", lineHeight: 1.5 }, children: [_jsxs("div", { children: ["RGB: ", sample.rgb[0], ", ", sample.rgb[1], ", ", sample.rgb[2]] }), sample.tac !== null && _jsxs("div", { children: ["TAC: ", sample.tac.toFixed(1), "%"] })] }), sample.inks && sample.inks.length > 0 && (_jsxs("div", { style: {
|
|
137
|
+
marginTop: 6,
|
|
138
|
+
paddingTop: 6,
|
|
139
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.1)",
|
|
140
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",
|
|
141
|
+
fontSize: 10,
|
|
142
|
+
}, children: [_jsx("div", { style: {
|
|
143
|
+
display: "grid",
|
|
144
|
+
gridTemplateColumns: "1fr 1fr",
|
|
145
|
+
columnGap: 8,
|
|
146
|
+
rowGap: 2,
|
|
147
|
+
}, children: sample.inks
|
|
148
|
+
.filter((i) => i.type === "process")
|
|
149
|
+
.map((ink) => (_jsxs("div", { style: {
|
|
150
|
+
display: "flex",
|
|
151
|
+
alignItems: "center",
|
|
152
|
+
justifyContent: "space-between",
|
|
153
|
+
gap: 6,
|
|
154
|
+
}, children: [_jsx("span", { style: {
|
|
155
|
+
display: "inline-block",
|
|
156
|
+
width: 10,
|
|
157
|
+
height: 10,
|
|
158
|
+
borderRadius: 2,
|
|
159
|
+
border: "1px solid rgba(255,255,255,0.3)",
|
|
160
|
+
backgroundColor: swatchFor(ink.name),
|
|
161
|
+
flexShrink: 0,
|
|
162
|
+
} }), _jsx("span", { style: { color: "#cbd5e1", width: 18 }, children: processAbbr(ink.name) }), _jsxs("span", { style: {
|
|
163
|
+
fontVariantNumeric: "tabular-nums",
|
|
164
|
+
color: "#f1f5f9",
|
|
165
|
+
marginLeft: "auto",
|
|
166
|
+
}, children: [ink.percent.toFixed(1), "%"] })] }, ink.name))) }), sample.inks.some((i) => i.type === "spot") && (_jsx("div", { style: {
|
|
167
|
+
marginTop: 4,
|
|
168
|
+
paddingTop: 4,
|
|
169
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.1)",
|
|
170
|
+
display: "flex",
|
|
171
|
+
flexDirection: "column",
|
|
172
|
+
gap: 2,
|
|
173
|
+
}, children: sample.inks
|
|
174
|
+
.filter((i) => i.type === "spot")
|
|
175
|
+
.map((ink) => (_jsxs("div", { style: {
|
|
176
|
+
display: "flex",
|
|
177
|
+
alignItems: "center",
|
|
178
|
+
justifyContent: "space-between",
|
|
179
|
+
gap: 8,
|
|
180
|
+
}, children: [_jsx("span", { style: {
|
|
181
|
+
display: "inline-block",
|
|
182
|
+
width: 10,
|
|
183
|
+
height: 10,
|
|
184
|
+
borderRadius: 2,
|
|
185
|
+
border: "1px solid rgba(255,255,255,0.3)",
|
|
186
|
+
backgroundColor: swatchFor(ink.name),
|
|
187
|
+
flexShrink: 0,
|
|
188
|
+
} }), _jsx("span", { style: {
|
|
189
|
+
overflow: "hidden",
|
|
190
|
+
textOverflow: "ellipsis",
|
|
191
|
+
whiteSpace: "nowrap",
|
|
192
|
+
color: "#e2e8f0",
|
|
193
|
+
}, title: ink.name, children: ink.name }), _jsxs("span", { style: { fontVariantNumeric: "tabular-nums", color: "#f1f5f9" }, children: [ink.percent.toFixed(1), "%"] })] }, ink.name))) }))] }))] })), position && loading && !sample && (_jsx("div", { style: {
|
|
194
|
+
position: isMobile ? "fixed" : "absolute",
|
|
195
|
+
left: isMobile ? 16 : position.x + 16,
|
|
196
|
+
...(isMobile
|
|
197
|
+
? { bottom: 16, right: 16 }
|
|
198
|
+
: { top: position.y + 16 }),
|
|
199
|
+
zIndex: 60,
|
|
200
|
+
pointerEvents: "none",
|
|
201
|
+
padding: "4px 10px",
|
|
202
|
+
borderRadius: 4,
|
|
203
|
+
background: "rgba(0, 0, 0, 0.85)",
|
|
204
|
+
color: "#fff",
|
|
205
|
+
fontSize: 11,
|
|
206
|
+
border: "1px solid rgba(255, 255, 255, 0.15)",
|
|
207
|
+
}, children: "Sampling..." })), position && (_jsx("div", { style: {
|
|
208
|
+
position: "absolute",
|
|
209
|
+
left: position.x - 8,
|
|
210
|
+
top: position.y - 8,
|
|
211
|
+
zIndex: 20,
|
|
212
|
+
pointerEvents: "none",
|
|
213
|
+
width: 16,
|
|
214
|
+
height: 16,
|
|
215
|
+
border: "2px solid white",
|
|
216
|
+
borderRadius: "50%",
|
|
217
|
+
boxShadow: "0 0 0 1px rgba(0,0,0,0.5)",
|
|
218
|
+
} }))] }));
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=ColorPickerTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorPickerTool.js","sourceRoot":"","sources":["../../components/ColorPickerTool.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
interface DensitometerToolProps {
|
|
2
|
+
jobId: string;
|
|
3
|
+
pageNum: number;
|
|
4
|
+
pageWidthPts: number;
|
|
5
|
+
pageHeightPts: number;
|
|
6
|
+
canvasWidth: number;
|
|
7
|
+
canvasHeight: number;
|
|
8
|
+
/** TAC limit in percent (default 300). Matches separations config. */
|
|
9
|
+
tacLimit?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Real CMYK + spot-channel densitometer. Samples each ink channel at the
|
|
13
|
+
* clicked point and reports:
|
|
14
|
+
*
|
|
15
|
+
* C 62.3% M 18.1%
|
|
16
|
+
* Y 4.7% K 91.5%
|
|
17
|
+
* ────────────────
|
|
18
|
+
* TAC 176.6% (under 300)
|
|
19
|
+
*
|
|
20
|
+
* Falls back to a friendly "no separations" message on RGB/greyscale
|
|
21
|
+
* source PDFs where the engine can't split CMYK.
|
|
22
|
+
*/
|
|
23
|
+
export declare function DensitometerTool({ jobId: _jobId, pageNum, pageWidthPts, pageHeightPts, canvasWidth, canvasHeight, tacLimit, }: DensitometerToolProps): import("react/jsx-runtime").JSX.Element | null;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=DensitometerTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DensitometerTool.d.ts","sourceRoot":"","sources":["../../components/DensitometerTool.tsx"],"names":[],"mappings":"AAQA,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,QAAc,GACf,EAAE,qBAAqB,kDAmWvB"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useState } from "react";
|
|
4
|
+
import { isUnwired, logUnwiredHide, useViewerHost, useViewerServices } from "../host/index.js";
|
|
5
|
+
import { useIsMobile } from "./useIsMobile.js";
|
|
6
|
+
/**
|
|
7
|
+
* Real CMYK + spot-channel densitometer. Samples each ink channel at the
|
|
8
|
+
* clicked point and reports:
|
|
9
|
+
*
|
|
10
|
+
* C 62.3% M 18.1%
|
|
11
|
+
* Y 4.7% K 91.5%
|
|
12
|
+
* ────────────────
|
|
13
|
+
* TAC 176.6% (under 300)
|
|
14
|
+
*
|
|
15
|
+
* Falls back to a friendly "no separations" message on RGB/greyscale
|
|
16
|
+
* source PDFs where the engine can't split CMYK.
|
|
17
|
+
*/
|
|
18
|
+
export function DensitometerTool({ jobId: _jobId, pageNum, pageWidthPts, pageHeightPts, canvasWidth, canvasHeight, tacLimit = 300, }) {
|
|
19
|
+
const { densitometer } = useViewerServices();
|
|
20
|
+
const { debug } = useViewerHost();
|
|
21
|
+
const hidden = isUnwired(densitometer);
|
|
22
|
+
const isMobile = useIsMobile();
|
|
23
|
+
const [sample, setSample] = useState(null);
|
|
24
|
+
const [position, setPosition] = useState(null);
|
|
25
|
+
const [loading, setLoading] = useState(false);
|
|
26
|
+
const [error, setError] = useState(null);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (hidden && debug)
|
|
29
|
+
logUnwiredHide("DensitometerTool", "densitometer");
|
|
30
|
+
}, [hidden, debug]);
|
|
31
|
+
const pickAt = useCallback(async (clickX, clickY) => {
|
|
32
|
+
const pdfX = (clickX / canvasWidth) * pageWidthPts;
|
|
33
|
+
const pdfY = pageHeightPts - (clickY / canvasHeight) * pageHeightPts;
|
|
34
|
+
setPosition({ x: clickX, y: clickY });
|
|
35
|
+
setLoading(true);
|
|
36
|
+
setError(null);
|
|
37
|
+
setSample(null);
|
|
38
|
+
try {
|
|
39
|
+
const data = await densitometer.sampleAt({
|
|
40
|
+
pageNum,
|
|
41
|
+
pdfX,
|
|
42
|
+
pdfY,
|
|
43
|
+
tacLimit,
|
|
44
|
+
});
|
|
45
|
+
setSample(data);
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
setError(e instanceof Error ? e.message : "Sampling failed");
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
setLoading(false);
|
|
52
|
+
}
|
|
53
|
+
}, [densitometer, pageNum, pageWidthPts, pageHeightPts, canvasWidth, canvasHeight, tacLimit]);
|
|
54
|
+
const handleClick = useCallback((e) => {
|
|
55
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
56
|
+
void pickAt(e.clientX - rect.left, e.clientY - rect.top);
|
|
57
|
+
}, [pickAt]);
|
|
58
|
+
const handleTouch = useCallback((e) => {
|
|
59
|
+
if (e.touches.length !== 1)
|
|
60
|
+
return;
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
const touch = e.touches[0];
|
|
63
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
64
|
+
void pickAt(touch.clientX - rect.left, touch.clientY - rect.top);
|
|
65
|
+
}, [pickAt]);
|
|
66
|
+
// Map channel name to a solid swatch colour for the readout. Process
|
|
67
|
+
// channels use the standard CMYK primaries; any spot channel hashes
|
|
68
|
+
// its name to a stable distinct hue so each spot lands on a unique
|
|
69
|
+
// swatch.
|
|
70
|
+
const swatchFor = (name) => {
|
|
71
|
+
const n = name.toLowerCase();
|
|
72
|
+
if (n === "cyan" || n === "c")
|
|
73
|
+
return "#00b7eb";
|
|
74
|
+
if (n === "magenta" || n === "m")
|
|
75
|
+
return "#e91e63";
|
|
76
|
+
if (n === "yellow" || n === "y")
|
|
77
|
+
return "#fdd835";
|
|
78
|
+
if (n === "black" || n === "k")
|
|
79
|
+
return "#111827";
|
|
80
|
+
let h = 0;
|
|
81
|
+
for (let i = 0; i < name.length; i++)
|
|
82
|
+
h = (h * 31 + name.charCodeAt(i)) >>> 0;
|
|
83
|
+
return `hsl(${h % 360}, 70%, 45%)`;
|
|
84
|
+
};
|
|
85
|
+
// First-letter shorthand for the four CMYK process inks; full name
|
|
86
|
+
// for any detected spot ink ("PANTONE 185 C" displays in full).
|
|
87
|
+
const labelFor = (name) => {
|
|
88
|
+
const lower = name.toLowerCase();
|
|
89
|
+
if (lower === "cyan")
|
|
90
|
+
return { abbr: "C", full: "Cyan" };
|
|
91
|
+
if (lower === "magenta")
|
|
92
|
+
return { abbr: "M", full: "Magenta" };
|
|
93
|
+
if (lower === "yellow")
|
|
94
|
+
return { abbr: "Y", full: "Yellow" };
|
|
95
|
+
if (lower === "black")
|
|
96
|
+
return { abbr: "K", full: "Black" };
|
|
97
|
+
return { abbr: name, full: name };
|
|
98
|
+
};
|
|
99
|
+
const isProcess = (name) => {
|
|
100
|
+
const n = name.toLowerCase();
|
|
101
|
+
return n === "cyan" || n === "magenta" || n === "yellow" || n === "black";
|
|
102
|
+
};
|
|
103
|
+
if (hidden)
|
|
104
|
+
return null;
|
|
105
|
+
const monoFont = "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace";
|
|
106
|
+
// Floating tooltip on desktop, bottom sheet on mobile.
|
|
107
|
+
const readoutStyle = isMobile
|
|
108
|
+
? {
|
|
109
|
+
position: "fixed",
|
|
110
|
+
left: 0,
|
|
111
|
+
right: 0,
|
|
112
|
+
bottom: 0,
|
|
113
|
+
zIndex: 60,
|
|
114
|
+
pointerEvents: "none",
|
|
115
|
+
padding: "12px 16px 16px",
|
|
116
|
+
background: "rgba(10, 8, 16, 0.96)",
|
|
117
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.12)",
|
|
118
|
+
color: "#fff",
|
|
119
|
+
boxShadow: "0 -8px 24px rgba(0, 0, 0, 0.45)",
|
|
120
|
+
fontSize: 13,
|
|
121
|
+
maxHeight: "55vh",
|
|
122
|
+
overflowY: "auto",
|
|
123
|
+
}
|
|
124
|
+
: {
|
|
125
|
+
position: "absolute",
|
|
126
|
+
left: position
|
|
127
|
+
? Math.min(position.x + 16, canvasWidth - 230)
|
|
128
|
+
: 0,
|
|
129
|
+
top: position
|
|
130
|
+
? Math.min(position.y + 16, canvasHeight - 140)
|
|
131
|
+
: 0,
|
|
132
|
+
zIndex: 30,
|
|
133
|
+
pointerEvents: "none",
|
|
134
|
+
minWidth: 200,
|
|
135
|
+
padding: "8px 12px",
|
|
136
|
+
borderRadius: 8,
|
|
137
|
+
border: "1px solid rgba(255, 255, 255, 0.2)",
|
|
138
|
+
background: "rgba(0, 0, 0, 0.92)",
|
|
139
|
+
color: "#fff",
|
|
140
|
+
boxShadow: "0 12px 32px rgba(0, 0, 0, 0.55)",
|
|
141
|
+
fontSize: 12,
|
|
142
|
+
};
|
|
143
|
+
return (_jsxs("div", { style: {
|
|
144
|
+
position: "absolute",
|
|
145
|
+
inset: 0,
|
|
146
|
+
cursor: "crosshair",
|
|
147
|
+
zIndex: 25,
|
|
148
|
+
touchAction: "none",
|
|
149
|
+
}, onClick: handleClick, onTouchStart: handleTouch, children: [position && (sample || loading || error) && (_jsxs("div", { style: readoutStyle, children: [loading && (_jsx("div", { style: { fontSize: 11, color: "#cbd5e1" }, children: "Sampling separations\u2026" })), error && !loading && (_jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 4 }, children: [_jsx("div", { style: { fontWeight: 600, color: "#fcd34d" }, children: "Densitometer" }), _jsx("div", { style: { fontSize: 11, color: "#cbd5e1" }, children: error })] })), sample && !loading && (_jsxs(_Fragment, { children: [_jsxs("div", { style: {
|
|
150
|
+
display: "flex",
|
|
151
|
+
alignItems: "center",
|
|
152
|
+
justifyContent: "space-between",
|
|
153
|
+
marginBottom: 6,
|
|
154
|
+
}, children: [_jsx("span", { style: {
|
|
155
|
+
fontSize: 11,
|
|
156
|
+
fontWeight: 600,
|
|
157
|
+
textTransform: "uppercase",
|
|
158
|
+
letterSpacing: 1,
|
|
159
|
+
color: "#cbd5e1",
|
|
160
|
+
}, children: "Densitometer" }), _jsxs("span", { style: { fontSize: 10, color: "#94a3b8" }, children: ["@", sample.dpi, "dpi"] })] }), _jsx("div", { style: {
|
|
161
|
+
display: "grid",
|
|
162
|
+
gridTemplateColumns: "1fr 1fr",
|
|
163
|
+
columnGap: 12,
|
|
164
|
+
rowGap: 4,
|
|
165
|
+
marginBottom: 8,
|
|
166
|
+
fontFamily: monoFont,
|
|
167
|
+
fontSize: 11,
|
|
168
|
+
}, children: sample.channels
|
|
169
|
+
.filter((ch) => isProcess(ch.name))
|
|
170
|
+
.map((ch) => {
|
|
171
|
+
const lbl = labelFor(ch.name);
|
|
172
|
+
return (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, title: lbl.full, children: [_jsx("span", { style: {
|
|
173
|
+
display: "inline-block",
|
|
174
|
+
width: 10,
|
|
175
|
+
height: 10,
|
|
176
|
+
borderRadius: 2,
|
|
177
|
+
border: "1px solid rgba(255, 255, 255, 0.3)",
|
|
178
|
+
backgroundColor: swatchFor(ch.name),
|
|
179
|
+
} }), _jsx("span", { style: { width: 24, color: "#cbd5e1" }, children: lbl.abbr }), _jsxs("span", { style: {
|
|
180
|
+
flex: 1,
|
|
181
|
+
textAlign: "right",
|
|
182
|
+
fontVariantNumeric: "tabular-nums",
|
|
183
|
+
}, children: [ch.percent.toFixed(1), "%"] })] }, ch.name));
|
|
184
|
+
}) }), sample.channels.some((ch) => !isProcess(ch.name)) && (_jsxs("div", { style: {
|
|
185
|
+
marginBottom: 8,
|
|
186
|
+
paddingTop: 6,
|
|
187
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.1)",
|
|
188
|
+
display: "flex",
|
|
189
|
+
flexDirection: "column",
|
|
190
|
+
gap: 4,
|
|
191
|
+
fontFamily: monoFont,
|
|
192
|
+
fontSize: 11,
|
|
193
|
+
}, children: [_jsx("div", { style: {
|
|
194
|
+
fontSize: 10,
|
|
195
|
+
fontWeight: 600,
|
|
196
|
+
textTransform: "uppercase",
|
|
197
|
+
letterSpacing: 1,
|
|
198
|
+
color: "#94a3b8",
|
|
199
|
+
}, children: "Spots" }), sample.channels
|
|
200
|
+
.filter((ch) => !isProcess(ch.name))
|
|
201
|
+
.map((ch) => (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [_jsx("span", { style: {
|
|
202
|
+
display: "inline-block",
|
|
203
|
+
width: 10,
|
|
204
|
+
height: 10,
|
|
205
|
+
flexShrink: 0,
|
|
206
|
+
borderRadius: 2,
|
|
207
|
+
border: "1px solid rgba(255, 255, 255, 0.3)",
|
|
208
|
+
backgroundColor: swatchFor(ch.name),
|
|
209
|
+
} }), _jsx("span", { style: {
|
|
210
|
+
flex: 1,
|
|
211
|
+
overflow: "hidden",
|
|
212
|
+
textOverflow: "ellipsis",
|
|
213
|
+
whiteSpace: "nowrap",
|
|
214
|
+
color: "#e2e8f0",
|
|
215
|
+
}, title: ch.name, children: ch.name }), _jsxs("span", { style: {
|
|
216
|
+
fontVariantNumeric: "tabular-nums",
|
|
217
|
+
color: "#cbd5e1",
|
|
218
|
+
}, children: [ch.percent.toFixed(1), "%"] })] }, ch.name)))] })), _jsxs("div", { style: {
|
|
219
|
+
paddingTop: 6,
|
|
220
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.15)",
|
|
221
|
+
}, children: [_jsxs("div", { style: {
|
|
222
|
+
display: "flex",
|
|
223
|
+
alignItems: "center",
|
|
224
|
+
justifyContent: "space-between",
|
|
225
|
+
fontFamily: monoFont,
|
|
226
|
+
fontSize: 11,
|
|
227
|
+
}, children: [_jsx("span", { style: { color: "#cbd5e1" }, children: "TAC" }), _jsxs("span", { style: {
|
|
228
|
+
fontVariantNumeric: "tabular-nums",
|
|
229
|
+
fontWeight: 700,
|
|
230
|
+
color: sample.limit_exceeded ? "#fb7185" : "#6ee7b7",
|
|
231
|
+
}, children: [sample.tac.toFixed(1), "%"] })] }), _jsx("div", { style: { textAlign: "right", fontSize: 10, color: "#94a3b8" }, children: sample.limit_exceeded
|
|
232
|
+
? `over ${sample.tac_limit}% limit`
|
|
233
|
+
: `under ${sample.tac_limit}% limit` })] })] }))] })), position && (_jsx("div", { style: {
|
|
234
|
+
position: "absolute",
|
|
235
|
+
left: position.x - 8,
|
|
236
|
+
top: position.y - 8,
|
|
237
|
+
zIndex: 20,
|
|
238
|
+
pointerEvents: "none",
|
|
239
|
+
width: 16,
|
|
240
|
+
height: 16,
|
|
241
|
+
border: "2px solid white",
|
|
242
|
+
borderRadius: "50%",
|
|
243
|
+
boxShadow: "0 0 0 1px rgba(0,0,0,0.5)",
|
|
244
|
+
} }))] }));
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=DensitometerTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DensitometerTool.js","sourceRoot":"","sources":["../../components/DensitometerTool.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dieline info panel — built-in summary card for ``DielineResult``.
|
|
3
|
+
*
|
|
4
|
+
* Renders the detected dieline's source, confidence, spot name (when
|
|
5
|
+
* present), and a table of per-region sizes in mm + inches. Hosts
|
|
6
|
+
* drop this into their info-panel column the same way they'd drop
|
|
7
|
+
* the FindingsSidebar in alongside the canvas.
|
|
8
|
+
*
|
|
9
|
+
* The component is opinionated about layout (a vertical card with a
|
|
10
|
+
* header + a table) and uses brand-* / slate-* tokens; consumers
|
|
11
|
+
* that need different chrome can reach the raw data via the
|
|
12
|
+
* ``dieline`` prop they already pass to LensPDF.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
import * as React from "react";
|
|
17
|
+
import type { DielineResult } from "../types";
|
|
18
|
+
export interface DielineInfoPanelProps {
|
|
19
|
+
/** The DielineResult passed to ``<LensPDF dieline={...}>``. */
|
|
20
|
+
dieline: DielineResult | null | undefined;
|
|
21
|
+
/** Optional CSS class for the wrapping ``<aside>``. */
|
|
22
|
+
className?: string;
|
|
23
|
+
/** Optional heading override. Default: ``"Dieline"``. */
|
|
24
|
+
title?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function DielineInfoPanel({ dieline, className, title, }: DielineInfoPanelProps): React.ReactElement | null;
|
|
27
|
+
//# sourceMappingURL=DielineInfoPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DielineInfoPanel.d.ts","sourceRoot":"","sources":["../../components/DielineInfoPanel.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,SAAS,EACT,KAAiB,GAClB,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAoEnD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
function formatMm(widthPts, heightPts) {
|
|
4
|
+
return `${(widthPts * 25.4 / 72).toFixed(2)} × ${(heightPts * 25.4 / 72).toFixed(2)} mm`;
|
|
5
|
+
}
|
|
6
|
+
function formatInches(widthPts, heightPts) {
|
|
7
|
+
return `${(widthPts / 72).toFixed(3)} × ${(heightPts / 72).toFixed(3)} in`;
|
|
8
|
+
}
|
|
9
|
+
export function DielineInfoPanel({ dieline, className, title = "Dieline", }) {
|
|
10
|
+
if (!dieline)
|
|
11
|
+
return null;
|
|
12
|
+
if (dieline.source === "missing")
|
|
13
|
+
return null;
|
|
14
|
+
const regions = dieline.regions ?? [];
|
|
15
|
+
return (_jsxs("aside", { className: className ??
|
|
16
|
+
"rounded-lg border border-slate-800 bg-slate-900 p-3 text-xs text-slate-200", children: [_jsxs("div", { className: "mb-2 flex items-center justify-between gap-2 border-b border-slate-800 pb-2", children: [_jsx("p", { className: "text-[10px] font-semibold uppercase tracking-wider text-brand-300", children: title }), dieline.multi_color ? (_jsx("span", { className: "rounded bg-red-500/20 px-1.5 py-0.5 text-[9px] font-semibold text-red-300", title: "The dieline layer paints in more than one ink colour. Usually misplaced artwork.", children: "multi-colour" })) : null] }), _jsxs("dl", { className: "mb-2 grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-[11px]", children: [_jsx("dt", { className: "text-slate-500", children: "Source" }), _jsx("dd", { className: "font-mono text-slate-200", children: dieline.source }), dieline.spot_name ? (_jsxs(_Fragment, { children: [_jsx("dt", { className: "text-slate-500", children: "Spot name" }), _jsx("dd", { className: "font-mono text-slate-200", children: dieline.spot_name })] })) : null, _jsx("dt", { className: "text-slate-500", children: "Confidence" }), _jsx("dd", { className: "font-mono text-slate-200", children: dieline.confidence.toFixed(2) })] }), regions.length > 0 ? (_jsxs(_Fragment, { children: [_jsxs("p", { className: "mb-1 text-[10px] font-semibold uppercase tracking-wider text-slate-500", children: ["Regions \u00B7 ", regions.length] }), _jsx("ul", { className: "space-y-1.5", children: regions.map((region, idx) => {
|
|
17
|
+
const widthPts = region.x1 - region.x0;
|
|
18
|
+
const heightPts = region.y1 - region.y0;
|
|
19
|
+
const label = regions.length > 1 ? `Dieline ${idx + 1}` : "Dieline";
|
|
20
|
+
return (_jsxs("li", { className: "rounded border border-slate-800 bg-slate-950 px-2 py-1.5", children: [_jsx("p", { className: "text-[11px] font-medium text-slate-200", children: label }), _jsx("p", { className: "font-mono text-[10px] text-slate-400", children: formatMm(widthPts, heightPts) }), _jsx("p", { className: "font-mono text-[10px] text-slate-500", children: formatInches(widthPts, heightPts) })] }, `die-region-${idx}`));
|
|
21
|
+
}) })] })) : (_jsx("p", { className: "text-[11px] text-slate-500", children: "No bounded regions detected." }))] }));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=DielineInfoPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DielineInfoPanel.js","sourceRoot":"","sources":["../../components/DielineInfoPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DielineResult, PageInfo } from "../types";
|
|
2
|
+
interface DielineOverlayProps {
|
|
3
|
+
page: PageInfo;
|
|
4
|
+
canvasWidth: number;
|
|
5
|
+
canvasHeight: number;
|
|
6
|
+
dieline: DielineResult | null | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare function DielineOverlay({ page, canvasWidth, canvasHeight, dieline, }: DielineOverlayProps): import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=DielineOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DielineOverlay.d.ts","sourceRoot":"","sources":["../../components/DielineOverlay.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAExD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;CAC3C;AAsCD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,OAAO,GACR,EAAE,mBAAmB,kDAuErB"}
|