@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.mjs
CHANGED
|
@@ -165,6 +165,7 @@ function PdfViewer({
|
|
|
165
165
|
onPageClick,
|
|
166
166
|
onDropField,
|
|
167
167
|
onGroupMove,
|
|
168
|
+
onMoveStart,
|
|
168
169
|
onMoveEnd,
|
|
169
170
|
mode,
|
|
170
171
|
currentSigner,
|
|
@@ -274,6 +275,7 @@ function PdfViewer({
|
|
|
274
275
|
onMove: onFieldMove,
|
|
275
276
|
onResize: onFieldResize,
|
|
276
277
|
onGroupMove: selectedFieldIds.size > 1 && selectedFieldIds.has(field.id) ? onGroupMove : void 0,
|
|
278
|
+
onMoveStart,
|
|
277
279
|
onMoveEnd,
|
|
278
280
|
otherFields: mode === "designer" ? pageFields.filter((f) => f.id !== field.id && !selectedFieldIds.has(f.id)) : void 0,
|
|
279
281
|
setGuides: mode === "designer" ? setGuides : void 0,
|
|
@@ -363,6 +365,7 @@ function FieldOverlayItem({
|
|
|
363
365
|
onMove,
|
|
364
366
|
onResize,
|
|
365
367
|
onGroupMove,
|
|
368
|
+
onMoveStart,
|
|
366
369
|
onMoveEnd,
|
|
367
370
|
otherFields,
|
|
368
371
|
setGuides,
|
|
@@ -392,6 +395,7 @@ function FieldOverlayItem({
|
|
|
392
395
|
onSelect(e);
|
|
393
396
|
}
|
|
394
397
|
if (field.locked) return;
|
|
398
|
+
onMoveStart?.();
|
|
395
399
|
const pageEl = overlayRef.current?.closest(".pdf-page");
|
|
396
400
|
if (!pageEl) return;
|
|
397
401
|
didDragRef.current = false;
|
|
@@ -440,11 +444,12 @@ function FieldOverlayItem({
|
|
|
440
444
|
};
|
|
441
445
|
window.addEventListener("mousemove", handleMouseMove);
|
|
442
446
|
window.addEventListener("mouseup", handleMouseUp);
|
|
443
|
-
}, [field, mode, onMove, onSelect, isMultiSelected, onGroupMove, onMoveEnd, selectedIds, otherFields, setGuides, pageIndex]);
|
|
447
|
+
}, [field, mode, onMove, onSelect, isMultiSelected, onGroupMove, onMoveStart, onMoveEnd, selectedIds, otherFields, setGuides, pageIndex]);
|
|
444
448
|
const handleResizeMouseDown = useCallback((e) => {
|
|
445
449
|
if (mode !== "designer" || !onResize || field.locked) return;
|
|
446
450
|
e.preventDefault();
|
|
447
451
|
e.stopPropagation();
|
|
452
|
+
onMoveStart?.();
|
|
448
453
|
const pageEl = overlayRef.current?.closest(".pdf-page");
|
|
449
454
|
if (!pageEl) return;
|
|
450
455
|
resizeStartRef.current = {
|
|
@@ -470,7 +475,7 @@ function FieldOverlayItem({
|
|
|
470
475
|
};
|
|
471
476
|
window.addEventListener("mousemove", handleMouseMove);
|
|
472
477
|
window.addEventListener("mouseup", handleMouseUp);
|
|
473
|
-
}, [field, mode, onResize, onMoveEnd]);
|
|
478
|
+
}, [field, mode, onResize, onMoveStart, onMoveEnd]);
|
|
474
479
|
return /* @__PURE__ */ jsxs(
|
|
475
480
|
"div",
|
|
476
481
|
{
|
|
@@ -1031,13 +1036,13 @@ function useHistory(initialState, maxHistory = 50) {
|
|
|
1031
1036
|
present: initialState,
|
|
1032
1037
|
future: []
|
|
1033
1038
|
});
|
|
1034
|
-
const
|
|
1039
|
+
const batchRef = useRef3(false);
|
|
1040
|
+
const batchStartRef = useRef3(null);
|
|
1035
1041
|
const set = useCallback3((updater) => {
|
|
1036
1042
|
setState((prev) => {
|
|
1037
1043
|
const newPresent = typeof updater === "function" ? updater(prev.present) : updater;
|
|
1038
1044
|
if (newPresent === prev.present) return prev;
|
|
1039
|
-
if (
|
|
1040
|
-
skipRef.current = false;
|
|
1045
|
+
if (batchRef.current) {
|
|
1041
1046
|
return { ...prev, present: newPresent };
|
|
1042
1047
|
}
|
|
1043
1048
|
return {
|
|
@@ -1048,15 +1053,31 @@ function useHistory(initialState, maxHistory = 50) {
|
|
|
1048
1053
|
});
|
|
1049
1054
|
}, [maxHistory]);
|
|
1050
1055
|
const setWithoutHistory = useCallback3((updater) => {
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1056
|
+
setState((prev) => {
|
|
1057
|
+
const newPresent = typeof updater === "function" ? updater(prev.present) : updater;
|
|
1058
|
+
if (newPresent === prev.present) return prev;
|
|
1059
|
+
return { ...prev, present: newPresent };
|
|
1060
|
+
});
|
|
1061
|
+
}, []);
|
|
1062
|
+
const beginBatch = useCallback3(() => {
|
|
1063
|
+
batchRef.current = true;
|
|
1064
|
+
setState((prev) => {
|
|
1065
|
+
batchStartRef.current = prev.present;
|
|
1066
|
+
return prev;
|
|
1067
|
+
});
|
|
1068
|
+
}, []);
|
|
1069
|
+
const commitBatch = useCallback3(() => {
|
|
1070
|
+
batchRef.current = false;
|
|
1071
|
+
setState((prev) => {
|
|
1072
|
+
const startState = batchStartRef.current;
|
|
1073
|
+
batchStartRef.current = null;
|
|
1074
|
+
if (!startState || startState === prev.present) return prev;
|
|
1075
|
+
return {
|
|
1076
|
+
past: [...prev.past.slice(-maxHistory), startState],
|
|
1077
|
+
present: prev.present,
|
|
1078
|
+
future: []
|
|
1079
|
+
};
|
|
1080
|
+
});
|
|
1060
1081
|
}, [maxHistory]);
|
|
1061
1082
|
const undo = useCallback3(() => {
|
|
1062
1083
|
setState((prev) => {
|
|
@@ -1084,7 +1105,8 @@ function useHistory(initialState, maxHistory = 50) {
|
|
|
1084
1105
|
state: state.present,
|
|
1085
1106
|
set,
|
|
1086
1107
|
setWithoutHistory,
|
|
1087
|
-
|
|
1108
|
+
beginBatch,
|
|
1109
|
+
commitBatch,
|
|
1088
1110
|
undo,
|
|
1089
1111
|
redo,
|
|
1090
1112
|
canUndo: state.past.length > 0,
|
|
@@ -1123,7 +1145,7 @@ function DesignerView({
|
|
|
1123
1145
|
] }) });
|
|
1124
1146
|
}
|
|
1125
1147
|
const [pages, setPages] = useState5([]);
|
|
1126
|
-
const { state: fields, set: setFields, setWithoutHistory: setFieldsSilent,
|
|
1148
|
+
const { state: fields, set: setFields, setWithoutHistory: setFieldsSilent, beginBatch, commitBatch, undo: undoFields, redo: redoFields, canUndo, canRedo } = useHistory(initialTemplate?.fields ?? []);
|
|
1127
1149
|
const [selectedFieldIds, setSelectedFieldIds] = useState5(/* @__PURE__ */ new Set());
|
|
1128
1150
|
const [signerRoles, setSignerRoles] = useState5(initialTemplate?.signerRoles ?? [...DEFAULT_SIGNER_ROLES]);
|
|
1129
1151
|
const [activeRole, setActiveRole] = useState5("Sender");
|
|
@@ -1708,7 +1730,8 @@ function DesignerView({
|
|
|
1708
1730
|
onFieldMove: handleFieldMove,
|
|
1709
1731
|
onFieldResize: handleFieldResize,
|
|
1710
1732
|
onGroupMove: handleGroupMove,
|
|
1711
|
-
|
|
1733
|
+
onMoveStart: beginBatch,
|
|
1734
|
+
onMoveEnd: commitBatch,
|
|
1712
1735
|
onPageClick: handlePageClick,
|
|
1713
1736
|
onDropField: handleDropOnPage,
|
|
1714
1737
|
onMarqueeSelect: (ids) => setSelectedFieldIds(new Set(ids)),
|