@unlev/exeq 0.5.1 → 0.5.2
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/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +54 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +54 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -188,7 +188,7 @@ interface PdfViewerProps {
|
|
|
188
188
|
onMoveEnd?: () => void;
|
|
189
189
|
mode: 'designer' | 'signer';
|
|
190
190
|
currentSigner?: string;
|
|
191
|
-
renderFieldContent?: (field: FormField) => React.ReactNode;
|
|
191
|
+
renderFieldContent?: (field: FormField, pageWidthPt?: number, pageHeightPt?: number) => React.ReactNode;
|
|
192
192
|
zoom?: number;
|
|
193
193
|
/** Called with field IDs inside a drag-selection rectangle */
|
|
194
194
|
onMarqueeSelect?: (ids: string[]) => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -188,7 +188,7 @@ interface PdfViewerProps {
|
|
|
188
188
|
onMoveEnd?: () => void;
|
|
189
189
|
mode: 'designer' | 'signer';
|
|
190
190
|
currentSigner?: string;
|
|
191
|
-
renderFieldContent?: (field: FormField) => React.ReactNode;
|
|
191
|
+
renderFieldContent?: (field: FormField, pageWidthPt?: number, pageHeightPt?: number) => React.ReactNode;
|
|
192
192
|
zoom?: number;
|
|
193
193
|
/** Called with field IDs inside a drag-selection rectangle */
|
|
194
194
|
onMarqueeSelect?: (ids: string[]) => void;
|
package/dist/index.js
CHANGED
|
@@ -416,6 +416,8 @@ function PdfViewer({
|
|
|
416
416
|
selectedIds: selectedFieldIds,
|
|
417
417
|
mode,
|
|
418
418
|
currentSigner,
|
|
419
|
+
pageWidthPt: page.pdfWidth,
|
|
420
|
+
pageHeightPt: page.pdfHeight,
|
|
419
421
|
renderContent: renderFieldContent
|
|
420
422
|
},
|
|
421
423
|
field.id
|
|
@@ -506,6 +508,8 @@ function FieldOverlayItem({
|
|
|
506
508
|
selectedIds,
|
|
507
509
|
mode,
|
|
508
510
|
currentSigner,
|
|
511
|
+
pageWidthPt,
|
|
512
|
+
pageHeightPt,
|
|
509
513
|
renderContent
|
|
510
514
|
}) {
|
|
511
515
|
const overlayRef = (0, import_react.useRef)(null);
|
|
@@ -632,7 +636,7 @@ function FieldOverlayItem({
|
|
|
632
636
|
onMouseDown: handleMouseDown,
|
|
633
637
|
children: [
|
|
634
638
|
mode === "designer" && !isRedact && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "field-overlay-label", style: { backgroundColor: color }, children: field.label }),
|
|
635
|
-
renderContent ? renderContent(field) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "field-overlay-placeholder", children: field.value || field.placeholder }),
|
|
639
|
+
renderContent ? renderContent(field, pageWidthPt, pageHeightPt) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "field-overlay-placeholder", children: field.value || field.placeholder }),
|
|
636
640
|
mode === "designer" && isSelected && !field.locked && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
637
641
|
"div",
|
|
638
642
|
{
|
|
@@ -2278,6 +2282,30 @@ function resolveAllFormulas(fields, customTransforms, values) {
|
|
|
2278
2282
|
});
|
|
2279
2283
|
}
|
|
2280
2284
|
|
|
2285
|
+
// src/utils/fitText.ts
|
|
2286
|
+
function fitFontSize(o) {
|
|
2287
|
+
let size = o.autoShrink ? Math.min(o.fontSize, o.fieldHeightPt * 0.7) : o.fontSize;
|
|
2288
|
+
if (o.autoShrink && o.value) {
|
|
2289
|
+
const padding = 4;
|
|
2290
|
+
while (size > 4) {
|
|
2291
|
+
if (o.measure(o.value, size) <= o.fieldWidthPt - padding) break;
|
|
2292
|
+
size -= 0.5;
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
return size;
|
|
2296
|
+
}
|
|
2297
|
+
var measureCtx = null;
|
|
2298
|
+
function measureTextWidth(text, size, opts) {
|
|
2299
|
+
if (typeof document === "undefined") return text.length * size * 0.5;
|
|
2300
|
+
if (!measureCtx) measureCtx = document.createElement("canvas").getContext("2d");
|
|
2301
|
+
if (!measureCtx) return text.length * size * 0.5;
|
|
2302
|
+
const family = getCssFontFamily(opts?.fontFamily) || "Helvetica, Arial, sans-serif";
|
|
2303
|
+
measureCtx.font = `${opts?.italic ? "italic " : ""}${opts?.bold ? "bold " : ""}${size}px ${family}`;
|
|
2304
|
+
const base = measureCtx.measureText(text).width;
|
|
2305
|
+
const spacing = opts?.letterSpacing ? opts.letterSpacing * Math.max(0, text.length - 1) : 0;
|
|
2306
|
+
return base + spacing;
|
|
2307
|
+
}
|
|
2308
|
+
|
|
2281
2309
|
// src/utils/pdfFiller.ts
|
|
2282
2310
|
var FONT_VARIANTS = {
|
|
2283
2311
|
Helvetica: [import_pdf_lib.StandardFonts.Helvetica, import_pdf_lib.StandardFonts.HelveticaBold, import_pdf_lib.StandardFonts.HelveticaOblique, import_pdf_lib.StandardFonts.HelveticaBoldOblique],
|
|
@@ -2369,14 +2397,14 @@ async function renderFieldsOnPages(pages, fields, getFont, getSignature) {
|
|
|
2369
2397
|
const font = await getFont(field.fontFamily || "Helvetica", field.bold, field.italic);
|
|
2370
2398
|
const spacing = field.letterSpacing || 0;
|
|
2371
2399
|
const textWidthAtSize = (text, size) => font.widthOfTextAtSize(text, size) + spacing * (text.length - 1);
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
}
|
|
2400
|
+
const fontSize = fitFontSize({
|
|
2401
|
+
value: field.value,
|
|
2402
|
+
fontSize: field.fontSize,
|
|
2403
|
+
autoShrink: field.autoShrink,
|
|
2404
|
+
fieldWidthPt: w,
|
|
2405
|
+
fieldHeightPt: h,
|
|
2406
|
+
measure: textWidthAtSize
|
|
2407
|
+
});
|
|
2380
2408
|
const textX = x + 2;
|
|
2381
2409
|
const baselineY = y + h * 0.3;
|
|
2382
2410
|
if (spacing > 0) {
|
|
@@ -2881,7 +2909,7 @@ ${row.join(",")}`, "csv");
|
|
|
2881
2909
|
setSubmitting(false);
|
|
2882
2910
|
}
|
|
2883
2911
|
}, [pdfSource, fields, callbackUrl, allRequiredFilled, onComplete, isLastSigner, signer, onSignerComplete, includeAuditTrail, exportFormat, onExport, getValues, transforms]);
|
|
2884
|
-
const renderFieldContent = (0, import_react7.useCallback)((field) => {
|
|
2912
|
+
const renderFieldContent = (0, import_react7.useCallback)((field, pageWidthPt, pageHeightPt) => {
|
|
2885
2913
|
if (isRedactField(field)) {
|
|
2886
2914
|
return null;
|
|
2887
2915
|
}
|
|
@@ -2920,8 +2948,23 @@ ${row.join(",")}`, "csv");
|
|
|
2920
2948
|
if (field.type === "signed-date") {
|
|
2921
2949
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "field-overlay-value", children: field.value || (/* @__PURE__ */ new Date()).toLocaleDateString() });
|
|
2922
2950
|
}
|
|
2951
|
+
const fieldWidthPt = pageWidthPt ? field.width / 100 * pageWidthPt : Infinity;
|
|
2952
|
+
const fieldHeightPt = pageHeightPt ? field.height / 100 * pageHeightPt : 0;
|
|
2953
|
+
const effectiveFontSize = pageWidthPt ? fitFontSize({
|
|
2954
|
+
value: field.value || "",
|
|
2955
|
+
fontSize: field.fontSize,
|
|
2956
|
+
autoShrink: field.autoShrink,
|
|
2957
|
+
fieldWidthPt,
|
|
2958
|
+
fieldHeightPt,
|
|
2959
|
+
measure: (t, s) => measureTextWidth(t, s, {
|
|
2960
|
+
fontFamily: field.fontFamily,
|
|
2961
|
+
bold: field.bold,
|
|
2962
|
+
italic: field.italic,
|
|
2963
|
+
letterSpacing: field.letterSpacing
|
|
2964
|
+
})
|
|
2965
|
+
}) : field.fontSize;
|
|
2923
2966
|
const fontStyle = {
|
|
2924
|
-
fontSize: `${
|
|
2967
|
+
fontSize: `${effectiveFontSize}pt`,
|
|
2925
2968
|
letterSpacing: field.letterSpacing ? `${field.letterSpacing}pt` : void 0,
|
|
2926
2969
|
lineHeight: field.lineHeight ? `${field.lineHeight}` : void 0,
|
|
2927
2970
|
...getCssTextStyle(field)
|