@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.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 skipRef = useRef3(false);
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 (skipRef.current) {
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
- skipRef.current = true;
1052
- set(updater);
1053
- }, [set]);
1054
- const snapshot = useCallback3(() => {
1055
- setState((prev) => ({
1056
- past: [...prev.past.slice(-maxHistory), prev.present],
1057
- present: prev.present,
1058
- future: []
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
- snapshot,
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, snapshot: snapshotFields, undo: undoFields, redo: redoFields, canUndo, canRedo } = useHistory(initialTemplate?.fields ?? []);
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
- onMoveEnd: snapshotFields,
1733
+ onMoveStart: beginBatch,
1734
+ onMoveEnd: commitBatch,
1712
1735
  onPageClick: handlePageClick,
1713
1736
  onDropField: handleDropOnPage,
1714
1737
  onMarqueeSelect: (ids) => setSelectedFieldIds(new Set(ids)),