@unlev/exeq 0.3.0 → 0.3.1
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 +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +40 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +40 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -136,7 +136,9 @@ interface PdfViewerProps {
|
|
|
136
136
|
onDropField?: (page: number, x: number, y: number, fieldType: FieldType) => void;
|
|
137
137
|
/** Move multiple fields as a group. Called with dx/dy in percentage units. */
|
|
138
138
|
onGroupMove?: (ids: string[], dx: number, dy: number) => void;
|
|
139
|
-
/** Called when a drag/resize operation
|
|
139
|
+
/** Called when a drag/resize operation starts (for undo history batching). */
|
|
140
|
+
onMoveStart?: () => void;
|
|
141
|
+
/** Called when a drag/resize operation ends (for undo history commit). */
|
|
140
142
|
onMoveEnd?: () => void;
|
|
141
143
|
mode: 'designer' | 'signer';
|
|
142
144
|
currentSigner?: string;
|
|
@@ -145,7 +147,7 @@ interface PdfViewerProps {
|
|
|
145
147
|
/** Called with field IDs inside a drag-selection rectangle */
|
|
146
148
|
onMarqueeSelect?: (ids: string[]) => void;
|
|
147
149
|
}
|
|
148
|
-
declare function PdfViewer({ pages, fields, selectedFieldIds, onSelectField, onFieldMove, onFieldResize, onPageClick, onDropField, onGroupMove, onMoveEnd, mode, currentSigner, renderFieldContent, zoom, onMarqueeSelect, }: PdfViewerProps): react_jsx_runtime.JSX.Element;
|
|
150
|
+
declare function PdfViewer({ pages, fields, selectedFieldIds, onSelectField, onFieldMove, onFieldResize, onPageClick, onDropField, onGroupMove, onMoveStart, onMoveEnd, mode, currentSigner, renderFieldContent, zoom, onMarqueeSelect, }: PdfViewerProps): react_jsx_runtime.JSX.Element;
|
|
149
151
|
|
|
150
152
|
interface SignatureCanvasProps {
|
|
151
153
|
width?: number;
|
package/dist/index.d.ts
CHANGED
|
@@ -136,7 +136,9 @@ interface PdfViewerProps {
|
|
|
136
136
|
onDropField?: (page: number, x: number, y: number, fieldType: FieldType) => void;
|
|
137
137
|
/** Move multiple fields as a group. Called with dx/dy in percentage units. */
|
|
138
138
|
onGroupMove?: (ids: string[], dx: number, dy: number) => void;
|
|
139
|
-
/** Called when a drag/resize operation
|
|
139
|
+
/** Called when a drag/resize operation starts (for undo history batching). */
|
|
140
|
+
onMoveStart?: () => void;
|
|
141
|
+
/** Called when a drag/resize operation ends (for undo history commit). */
|
|
140
142
|
onMoveEnd?: () => void;
|
|
141
143
|
mode: 'designer' | 'signer';
|
|
142
144
|
currentSigner?: string;
|
|
@@ -145,7 +147,7 @@ interface PdfViewerProps {
|
|
|
145
147
|
/** Called with field IDs inside a drag-selection rectangle */
|
|
146
148
|
onMarqueeSelect?: (ids: string[]) => void;
|
|
147
149
|
}
|
|
148
|
-
declare function PdfViewer({ pages, fields, selectedFieldIds, onSelectField, onFieldMove, onFieldResize, onPageClick, onDropField, onGroupMove, onMoveEnd, mode, currentSigner, renderFieldContent, zoom, onMarqueeSelect, }: PdfViewerProps): react_jsx_runtime.JSX.Element;
|
|
150
|
+
declare function PdfViewer({ pages, fields, selectedFieldIds, onSelectField, onFieldMove, onFieldResize, onPageClick, onDropField, onGroupMove, onMoveStart, onMoveEnd, mode, currentSigner, renderFieldContent, zoom, onMarqueeSelect, }: PdfViewerProps): react_jsx_runtime.JSX.Element;
|
|
149
151
|
|
|
150
152
|
interface SignatureCanvasProps {
|
|
151
153
|
width?: number;
|
package/dist/index.js
CHANGED
|
@@ -222,6 +222,7 @@ function PdfViewer({
|
|
|
222
222
|
onPageClick,
|
|
223
223
|
onDropField,
|
|
224
224
|
onGroupMove,
|
|
225
|
+
onMoveStart,
|
|
225
226
|
onMoveEnd,
|
|
226
227
|
mode,
|
|
227
228
|
currentSigner,
|
|
@@ -331,6 +332,7 @@ function PdfViewer({
|
|
|
331
332
|
onMove: onFieldMove,
|
|
332
333
|
onResize: onFieldResize,
|
|
333
334
|
onGroupMove: selectedFieldIds.size > 1 && selectedFieldIds.has(field.id) ? onGroupMove : void 0,
|
|
335
|
+
onMoveStart,
|
|
334
336
|
onMoveEnd,
|
|
335
337
|
otherFields: mode === "designer" ? pageFields.filter((f) => f.id !== field.id && !selectedFieldIds.has(f.id)) : void 0,
|
|
336
338
|
setGuides: mode === "designer" ? setGuides : void 0,
|
|
@@ -420,6 +422,7 @@ function FieldOverlayItem({
|
|
|
420
422
|
onMove,
|
|
421
423
|
onResize,
|
|
422
424
|
onGroupMove,
|
|
425
|
+
onMoveStart,
|
|
423
426
|
onMoveEnd,
|
|
424
427
|
otherFields,
|
|
425
428
|
setGuides,
|
|
@@ -449,6 +452,7 @@ function FieldOverlayItem({
|
|
|
449
452
|
onSelect(e);
|
|
450
453
|
}
|
|
451
454
|
if (field.locked) return;
|
|
455
|
+
onMoveStart?.();
|
|
452
456
|
const pageEl = overlayRef.current?.closest(".pdf-page");
|
|
453
457
|
if (!pageEl) return;
|
|
454
458
|
didDragRef.current = false;
|
|
@@ -497,11 +501,12 @@ function FieldOverlayItem({
|
|
|
497
501
|
};
|
|
498
502
|
window.addEventListener("mousemove", handleMouseMove);
|
|
499
503
|
window.addEventListener("mouseup", handleMouseUp);
|
|
500
|
-
}, [field, mode, onMove, onSelect, isMultiSelected, onGroupMove, onMoveEnd, selectedIds, otherFields, setGuides, pageIndex]);
|
|
504
|
+
}, [field, mode, onMove, onSelect, isMultiSelected, onGroupMove, onMoveStart, onMoveEnd, selectedIds, otherFields, setGuides, pageIndex]);
|
|
501
505
|
const handleResizeMouseDown = (0, import_react.useCallback)((e) => {
|
|
502
506
|
if (mode !== "designer" || !onResize || field.locked) return;
|
|
503
507
|
e.preventDefault();
|
|
504
508
|
e.stopPropagation();
|
|
509
|
+
onMoveStart?.();
|
|
505
510
|
const pageEl = overlayRef.current?.closest(".pdf-page");
|
|
506
511
|
if (!pageEl) return;
|
|
507
512
|
resizeStartRef.current = {
|
|
@@ -527,7 +532,7 @@ function FieldOverlayItem({
|
|
|
527
532
|
};
|
|
528
533
|
window.addEventListener("mousemove", handleMouseMove);
|
|
529
534
|
window.addEventListener("mouseup", handleMouseUp);
|
|
530
|
-
}, [field, mode, onResize, onMoveEnd]);
|
|
535
|
+
}, [field, mode, onResize, onMoveStart, onMoveEnd]);
|
|
531
536
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
532
537
|
"div",
|
|
533
538
|
{
|
|
@@ -1088,13 +1093,13 @@ function useHistory(initialState, maxHistory = 50) {
|
|
|
1088
1093
|
present: initialState,
|
|
1089
1094
|
future: []
|
|
1090
1095
|
});
|
|
1091
|
-
const
|
|
1096
|
+
const batchRef = (0, import_react4.useRef)(false);
|
|
1097
|
+
const batchStartRef = (0, import_react4.useRef)(null);
|
|
1092
1098
|
const set = (0, import_react4.useCallback)((updater) => {
|
|
1093
1099
|
setState((prev) => {
|
|
1094
1100
|
const newPresent = typeof updater === "function" ? updater(prev.present) : updater;
|
|
1095
1101
|
if (newPresent === prev.present) return prev;
|
|
1096
|
-
if (
|
|
1097
|
-
skipRef.current = false;
|
|
1102
|
+
if (batchRef.current) {
|
|
1098
1103
|
return { ...prev, present: newPresent };
|
|
1099
1104
|
}
|
|
1100
1105
|
return {
|
|
@@ -1105,15 +1110,31 @@ function useHistory(initialState, maxHistory = 50) {
|
|
|
1105
1110
|
});
|
|
1106
1111
|
}, [maxHistory]);
|
|
1107
1112
|
const setWithoutHistory = (0, import_react4.useCallback)((updater) => {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1113
|
+
setState((prev) => {
|
|
1114
|
+
const newPresent = typeof updater === "function" ? updater(prev.present) : updater;
|
|
1115
|
+
if (newPresent === prev.present) return prev;
|
|
1116
|
+
return { ...prev, present: newPresent };
|
|
1117
|
+
});
|
|
1118
|
+
}, []);
|
|
1119
|
+
const beginBatch = (0, import_react4.useCallback)(() => {
|
|
1120
|
+
batchRef.current = true;
|
|
1121
|
+
setState((prev) => {
|
|
1122
|
+
batchStartRef.current = prev.present;
|
|
1123
|
+
return prev;
|
|
1124
|
+
});
|
|
1125
|
+
}, []);
|
|
1126
|
+
const commitBatch = (0, import_react4.useCallback)(() => {
|
|
1127
|
+
batchRef.current = false;
|
|
1128
|
+
setState((prev) => {
|
|
1129
|
+
const startState = batchStartRef.current;
|
|
1130
|
+
batchStartRef.current = null;
|
|
1131
|
+
if (!startState || startState === prev.present) return prev;
|
|
1132
|
+
return {
|
|
1133
|
+
past: [...prev.past.slice(-maxHistory), startState],
|
|
1134
|
+
present: prev.present,
|
|
1135
|
+
future: []
|
|
1136
|
+
};
|
|
1137
|
+
});
|
|
1117
1138
|
}, [maxHistory]);
|
|
1118
1139
|
const undo = (0, import_react4.useCallback)(() => {
|
|
1119
1140
|
setState((prev) => {
|
|
@@ -1141,7 +1162,8 @@ function useHistory(initialState, maxHistory = 50) {
|
|
|
1141
1162
|
state: state.present,
|
|
1142
1163
|
set,
|
|
1143
1164
|
setWithoutHistory,
|
|
1144
|
-
|
|
1165
|
+
beginBatch,
|
|
1166
|
+
commitBatch,
|
|
1145
1167
|
undo,
|
|
1146
1168
|
redo,
|
|
1147
1169
|
canUndo: state.past.length > 0,
|
|
@@ -1180,7 +1202,7 @@ function DesignerView({
|
|
|
1180
1202
|
] }) });
|
|
1181
1203
|
}
|
|
1182
1204
|
const [pages, setPages] = (0, import_react5.useState)([]);
|
|
1183
|
-
const { state: fields, set: setFields, setWithoutHistory: setFieldsSilent,
|
|
1205
|
+
const { state: fields, set: setFields, setWithoutHistory: setFieldsSilent, beginBatch, commitBatch, undo: undoFields, redo: redoFields, canUndo, canRedo } = useHistory(initialTemplate?.fields ?? []);
|
|
1184
1206
|
const [selectedFieldIds, setSelectedFieldIds] = (0, import_react5.useState)(/* @__PURE__ */ new Set());
|
|
1185
1207
|
const [signerRoles, setSignerRoles] = (0, import_react5.useState)(initialTemplate?.signerRoles ?? [...DEFAULT_SIGNER_ROLES]);
|
|
1186
1208
|
const [activeRole, setActiveRole] = (0, import_react5.useState)("Sender");
|
|
@@ -1765,7 +1787,8 @@ function DesignerView({
|
|
|
1765
1787
|
onFieldMove: handleFieldMove,
|
|
1766
1788
|
onFieldResize: handleFieldResize,
|
|
1767
1789
|
onGroupMove: handleGroupMove,
|
|
1768
|
-
|
|
1790
|
+
onMoveStart: beginBatch,
|
|
1791
|
+
onMoveEnd: commitBatch,
|
|
1769
1792
|
onPageClick: handlePageClick,
|
|
1770
1793
|
onDropField: handleDropOnPage,
|
|
1771
1794
|
onMarqueeSelect: (ids) => setSelectedFieldIds(new Set(ids)),
|