@pixldocs/canvas-renderer 0.5.402 → 0.5.403

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.
@@ -11502,8 +11502,8 @@ function applyWarpAwareSelectionBorders(selection) {
11502
11502
  let targetAngle = null;
11503
11503
  const isLogicalGroupSelection = !!selection.__pixldocsGroupSelection;
11504
11504
  const frozenGroupAngle = selection.__pixldocsFrozenGroupAngle;
11505
- if (isLogicalGroupSelection && typeof frozenGroupAngle === "number" && Math.abs(frozenGroupAngle) > 0.5) {
11506
- targetAngle = frozenGroupAngle;
11505
+ if (isLogicalGroupSelection) {
11506
+ targetAngle = typeof frozenGroupAngle === "number" ? frozenGroupAngle : 0;
11507
11507
  }
11508
11508
  if (targetAngle == null && dominant && Math.abs(dominant.angle) > 0.5 && // Canva-style: a *logical group* bbox is authoritative from the
11509
11509
  // persisted group.angle only. Individual child rotations must not
@@ -13237,7 +13237,7 @@ const PageCanvas = forwardRef(
13237
13237
  transformingIdsRef.current.clear();
13238
13238
  };
13239
13239
  const prepareGroupSelectionTransformStart = (target) => {
13240
- var _a2, _b2;
13240
+ var _a2, _b2, _c2;
13241
13241
  const active = target instanceof fabric.ActiveSelection ? target : fabricCanvas.getActiveObject();
13242
13242
  if (!(active instanceof fabric.ActiveSelection)) return;
13243
13243
  if (!activeSelectionMoveStartRef.current || activeSelectionMoveStartRef.current.selection !== active) {
@@ -13256,6 +13256,8 @@ const PageCanvas = forwardRef(
13256
13256
  if (!groupNode) return;
13257
13257
  const groupAbs = getAbsoluteBounds(groupNode, pageChildren2);
13258
13258
  const rect = active.getBoundingRect();
13259
+ const currentTransform = fabricCanvas._currentTransform;
13260
+ const originalSelectionAngle = (currentTransform == null ? void 0 : currentTransform.target) === active && typeof ((_c2 = currentTransform == null ? void 0 : currentTransform.original) == null ? void 0 : _c2.angle) === "number" ? currentTransform.original.angle : active.angle ?? 0;
13259
13261
  groupSelectionTransformStartRef.current = {
13260
13262
  groupId,
13261
13263
  selection: active,
@@ -13263,7 +13265,8 @@ const PageCanvas = forwardRef(
13263
13265
  selectionTop: rect.top,
13264
13266
  groupLeft: groupAbs.left,
13265
13267
  groupTop: groupAbs.top,
13266
- selectionAngle: ((active.angle ?? 0) % 360 + 360) % 360
13268
+ selectionAngle: (originalSelectionAngle % 360 + 360) % 360,
13269
+ groupAngle: isGroup(groupNode) ? groupNode.angle ?? 0 : 0
13267
13270
  };
13268
13271
  logRotDriftSelectionSnapshot("transform-start", active, {
13269
13272
  time: Math.round(performance.now()),
@@ -13696,6 +13699,7 @@ const PageCanvas = forwardRef(
13696
13699
  fabricCanvas.__isUserTransforming = true;
13697
13700
  syncLockedRef.current = true;
13698
13701
  lockEdits();
13702
+ prepareGroupSelectionTransformStart(opt.target ?? null);
13699
13703
  }
13700
13704
  let target = opt.target;
13701
13705
  let targetId = target ? getObjectId(target) : null;
@@ -14809,6 +14813,7 @@ const PageCanvas = forwardRef(
14809
14813
  markSimpleTransform(e);
14810
14814
  didTransformRef.current = true;
14811
14815
  const tr = e.target;
14816
+ prepareGroupSelectionTransformStart(tr);
14812
14817
  if (shouldLogRotDriftLiveTick(tr, "rotating")) {
14813
14818
  logRotDriftSelectionSnapshot("rotating", tr, {
14814
14819
  time: Math.round(performance.now()),
@@ -14921,7 +14926,7 @@ const PageCanvas = forwardRef(
14921
14926
  });
14922
14927
  let cropGroupSaveTimer = null;
14923
14928
  fabricCanvas.on("object:modified", (e) => {
14924
- var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j;
14929
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k;
14925
14930
  try {
14926
14931
  if (suppressObjectModifiedDuringInternalReselectRef.current) return;
14927
14932
  dragStarted = false;
@@ -14947,13 +14952,16 @@ const PageCanvas = forwardRef(
14947
14952
  const t = e.target;
14948
14953
  if (t instanceof fabric.ActiveSelection) {
14949
14954
  const gid = t.__pixldocsGroupSelection;
14950
- const delta = ((t.angle ?? 0) + 360) % 360;
14955
+ const transformStart = gid && ((_a2 = groupSelectionTransformStartRef.current) == null ? void 0 : _a2.groupId) === gid && groupSelectionTransformStartRef.current.selection === t ? groupSelectionTransformStartRef.current : null;
14956
+ const current = ((t.angle ?? 0) % 360 + 360) % 360;
14957
+ const start = (((transformStart == null ? void 0 : transformStart.selectionAngle) ?? (transformStart == null ? void 0 : transformStart.groupAngle) ?? 0) % 360 + 360) % 360;
14958
+ const delta = ((current - start) % 360 + 360) % 360;
14951
14959
  const deltaSigned = delta > 180 ? delta - 360 : delta;
14952
14960
  if (gid && Math.abs(deltaSigned) > 0.01) {
14953
14961
  const pageNow = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId);
14954
14962
  const node = pageNow ? findNodeById(pageNow.children ?? [], gid) : null;
14955
14963
  if (node && isGroup(node)) {
14956
- const prev = node.angle ?? 0;
14964
+ const prev = (transformStart == null ? void 0 : transformStart.groupAngle) ?? (node.angle ?? 0);
14957
14965
  const next = ((prev + deltaSigned) % 360 + 360) % 360;
14958
14966
  const nextSigned = next > 180 ? next - 360 : next;
14959
14967
  useEditorStore.getState().updateNode(
@@ -14992,7 +15000,7 @@ const PageCanvas = forwardRef(
14992
15000
  const active = fabricCanvas.getActiveObject();
14993
15001
  const activeId = active ? getObjectId(active) : null;
14994
15002
  if (active && activeId && activeId !== "__background__" && !(active instanceof fabric.Group)) {
14995
- const pageChildrenForParent = ((_a2 = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _a2.children) ?? [];
15003
+ const pageChildrenForParent = ((_b2 = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _b2.children) ?? [];
14996
15004
  const parentGroup = findParentGroup(pageChildrenForParent, activeId);
14997
15005
  if (parentGroup && isGroup(parentGroup) && parentGroup.backgroundColor) {
14998
15006
  let fabricSectionGroup = active.group && active.group instanceof fabric.Group ? active.group : null;
@@ -15074,7 +15082,7 @@ const PageCanvas = forwardRef(
15074
15082
  useEditorStore.getState().reflowStackGroupInPage(pageId, groupId);
15075
15083
  }
15076
15084
  const stateAfter = useEditorStore.getState();
15077
- const pageAfter = ((_b2 = stateAfter.canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _b2.children) ?? [];
15085
+ const pageAfter = ((_c2 = stateAfter.canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _c2.children) ?? [];
15078
15086
  const groupNodeAfter = findNodeById(pageAfter, groupId);
15079
15087
  if (groupNodeAfter) {
15080
15088
  const abs = getAbsoluteBounds(groupNodeAfter, pageAfter);
@@ -15136,7 +15144,7 @@ const PageCanvas = forwardRef(
15136
15144
  }
15137
15145
  if (active && active instanceof fabric.Group && active.__docuforgeSectionGroup && getObjectId(active)) {
15138
15146
  const groupId = getObjectId(active);
15139
- const pageChildrenSec = ((_c2 = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _c2.children) ?? [];
15147
+ const pageChildrenSec = ((_d = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _d.children) ?? [];
15140
15148
  const modifiedTarget2 = e == null ? void 0 : e.target;
15141
15149
  const resizeScaleTarget = lastResizeScaleTargetRef.current;
15142
15150
  lastResizeScaleTargetRef.current = null;
@@ -15167,7 +15175,7 @@ const PageCanvas = forwardRef(
15167
15175
  const node = findNodeById(pageChildrenSec, groupId);
15168
15176
  if (isChildModified && node && !groupMoved) {
15169
15177
  const stateAfter = useEditorStore.getState();
15170
- const pageAfter = ((_d = stateAfter.canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _d.children) ?? [];
15178
+ const pageAfter = ((_e = stateAfter.canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _e.children) ?? [];
15171
15179
  const groupNodeAfter = findNodeById(pageAfter, groupId);
15172
15180
  if (groupNodeAfter) {
15173
15181
  const abs = getAbsoluteBounds(groupNodeAfter, pageAfter);
@@ -15183,7 +15191,7 @@ const PageCanvas = forwardRef(
15183
15191
  }
15184
15192
  if (active && active instanceof fabric.Group && !(active instanceof fabric.ActiveSelection) && getObjectId(active)) {
15185
15193
  const groupId = getObjectId(active);
15186
- const pageChildren3 = ((_e = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _e.children) ?? [];
15194
+ const pageChildren3 = ((_f = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _f.children) ?? [];
15187
15195
  const w = (active.width ?? 0) * (active.scaleX ?? 1);
15188
15196
  const h = (active.height ?? 0) * (active.scaleY ?? 1);
15189
15197
  const centerX = active.left ?? 0;
@@ -15205,7 +15213,7 @@ const PageCanvas = forwardRef(
15205
15213
  }
15206
15214
  const activeObj = fabricCanvas.getActiveObject();
15207
15215
  let activeObjects = fabricCanvas.getActiveObjects();
15208
- const activeSelectionMoveStart = activeObj instanceof fabric.ActiveSelection && ((_f = activeSelectionMoveStartRef.current) == null ? void 0 : _f.selection) === activeObj ? activeSelectionMoveStartRef.current : null;
15216
+ const activeSelectionMoveStart = activeObj instanceof fabric.ActiveSelection && ((_g = activeSelectionMoveStartRef.current) == null ? void 0 : _g.selection) === activeObj ? activeSelectionMoveStartRef.current : null;
15209
15217
  const activeSelectionDelta = activeObj instanceof fabric.ActiveSelection && activeSelectionMoveStart ? (() => {
15210
15218
  const rect = activeObj.getBoundingRect();
15211
15219
  return {
@@ -15597,7 +15605,7 @@ const PageCanvas = forwardRef(
15597
15605
  const localScaleX = 1 / sx;
15598
15606
  const localScaleY = 1 / sy;
15599
15607
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
15600
- const selectionMatrix = (_g = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _g.call(activeObj);
15608
+ const selectionMatrix = (_h = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _h.call(activeObj);
15601
15609
  const localCenter = selectionMatrix ? fabric.util.transformPoint(preBakeCenter, fabric.util.invertTransform(selectionMatrix)) : preBakeCenter;
15602
15610
  const localWidth = bakedW * localScaleX;
15603
15611
  const localHeight = bakedH * localScaleY;
@@ -15722,7 +15730,7 @@ const PageCanvas = forwardRef(
15722
15730
  const localScaleX = 1 / sx;
15723
15731
  const localScaleY = 1 / sy;
15724
15732
  obj.set({ scaleX: localScaleX, scaleY: localScaleY });
15725
- const selectionMatrix = (_h = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _h.call(activeObj);
15733
+ const selectionMatrix = (_i = activeObj == null ? void 0 : activeObj.calcTransformMatrix) == null ? void 0 : _i.call(activeObj);
15726
15734
  const localCenter = selectionMatrix ? fabric.util.transformPoint(preBakeCenter, fabric.util.invertTransform(selectionMatrix)) : preBakeCenter;
15727
15735
  const localWidth = bakedWidth * localScaleX;
15728
15736
  const localHeight = (obj.height ?? intrinsicHeight) * localScaleY;
@@ -15930,7 +15938,7 @@ const PageCanvas = forwardRef(
15930
15938
  updateElement(objId, elementUpdate, { recordHistory: false, skipLayoutRecalc: true });
15931
15939
  obj.setCoords();
15932
15940
  }
15933
- const pageChildrenForReflow = ((_i = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _i.children) ?? [];
15941
+ const pageChildrenForReflow = ((_j = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _j.children) ?? [];
15934
15942
  const stackGroupsToReflow = /* @__PURE__ */ new Set();
15935
15943
  for (const id of modifiedIdsThisRound) {
15936
15944
  const parent = findParentGroup(pageChildrenForReflow, id);
@@ -16009,7 +16017,7 @@ const PageCanvas = forwardRef(
16009
16017
  }
16010
16018
  fabricCanvas.setActiveObject(newSel);
16011
16019
  try {
16012
- (_j = newSel.triggerLayout) == null ? void 0 : _j.call(newSel);
16020
+ (_k = newSel.triggerLayout) == null ? void 0 : _k.call(newSel);
16013
16021
  } catch {
16014
16022
  }
16015
16023
  try {
@@ -25119,9 +25127,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
25119
25127
  }
25120
25128
  return svgString;
25121
25129
  }
25122
- const resolvedPackageVersion = "0.5.402";
25130
+ const resolvedPackageVersion = "0.5.403";
25123
25131
  const PACKAGE_VERSION = resolvedPackageVersion;
25124
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.402";
25132
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.403";
25125
25133
  const roundParityValue = (value) => {
25126
25134
  if (typeof value !== "number") return value;
25127
25135
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25935,7 +25943,7 @@ class PixldocsRenderer {
25935
25943
  await this.waitForCanvasScene(container, cloned, i);
25936
25944
  }
25937
25945
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25938
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-Bo_XOpSd.js");
25946
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-V449U4Y7.js");
25939
25947
  const prepared = preparePagesForExport(
25940
25948
  cloned.pages,
25941
25949
  canvasWidth,
@@ -28255,7 +28263,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
28255
28263
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
28256
28264
  sanitizeSvgTreeForPdf(svgToDraw);
28257
28265
  try {
28258
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-Bo_XOpSd.js");
28266
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-V449U4Y7.js");
28259
28267
  try {
28260
28268
  await logTextMeasurementDiagnostic(svgToDraw);
28261
28269
  } catch {
@@ -28655,4 +28663,4 @@ export {
28655
28663
  buildTeaserBlurFlatKeys as y,
28656
28664
  collectFontDescriptorsFromConfig as z
28657
28665
  };
28658
- //# sourceMappingURL=index-CF2nx5LE.js.map
28666
+ //# sourceMappingURL=index-B8c2DkaJ.js.map