@pixldocs/canvas-renderer 0.5.443 → 0.5.445

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.
@@ -11679,6 +11679,13 @@ const applyTransformPreservingFlip = (obj, matrix) => {
11679
11679
  }
11680
11680
  obj.set({ scaleX: sx, scaleY: sy, flipX, flipY });
11681
11681
  };
11682
+ const restorePersistedFlipState = (obj, flipX, flipY, angle) => {
11683
+ const sx = Math.abs(Number(obj.scaleX ?? 1)) || 1;
11684
+ const sy = Math.abs(Number(obj.scaleY ?? 1)) || 1;
11685
+ obj.set({ scaleX: sx, scaleY: sy, flipX, flipY, ...Number.isFinite(angle) ? { angle } : {} });
11686
+ obj.setCoords();
11687
+ obj.dirty = true;
11688
+ };
11682
11689
  const toggleLogicalFlipInMatrix = (matrix, flipX, flipY) => {
11683
11690
  if (!flipX && !flipY) return matrix;
11684
11691
  const sx = flipX ? -1 : 1;
@@ -16494,8 +16501,9 @@ const PageCanvas = react.forwardRef(
16494
16501
  const objectFlipY = obj.flipY ?? false;
16495
16502
  const persistedFlipX = (sourceElement == null ? void 0 : sourceElement.flipX) ?? objectFlipX;
16496
16503
  const persistedFlipY = (sourceElement == null ? void 0 : sourceElement.flipY) ?? objectFlipY;
16504
+ const persistedAngle = sourceElement ? Number.isFinite(sourceElement.angle) ? sourceElement.angle ?? 0 : 0 : Number.isFinite(obj.angle) ? obj.angle ?? 0 : void 0;
16497
16505
  const isActiveSelectionResizeGesture = activeSelectionResizeHandle === "ml" || activeSelectionResizeHandle === "mr" || activeSelectionResizeHandle === "mt" || activeSelectionResizeHandle === "mb" || activeSelectionResizeHandle === "tl" || activeSelectionResizeHandle === "tr" || activeSelectionResizeHandle === "bl" || activeSelectionResizeHandle === "br";
16498
- const expectedCleanAngle = isActiveSelection && isActiveSelectionResizeGesture ? Number.isFinite(sourceElement == null ? void 0 : sourceElement.angle) ? (sourceElement == null ? void 0 : sourceElement.angle) ?? 0 : Number.isFinite(obj.angle) ? obj.angle ?? 0 : void 0 : void 0;
16506
+ const expectedCleanAngle = isActiveSelection && isActiveSelectionResizeGesture ? sourceElement ? Number.isFinite(sourceElement.angle) ? sourceElement.angle ?? 0 : 0 : Number.isFinite(obj.angle) ? obj.angle ?? 0 : void 0 : void 0;
16499
16507
  const normalizedFinalAbsoluteMatrix = normalizeMatrixForPersistedFlip(
16500
16508
  toggleLogicalFlipInMatrix(
16501
16509
  finalAbsoluteMatrix,
@@ -16509,7 +16517,7 @@ const PageCanvas = react.forwardRef(
16509
16517
  const cleanTransformMatrix = toggleLogicalFlipInMatrix(normalizedFinalAbsoluteMatrix, persistedFlipX, persistedFlipY);
16510
16518
  const persistedDecomposed = fabric__namespace.util.qrDecompose(cleanTransformMatrix);
16511
16519
  if (isActiveSelection && (obj instanceof fabric__namespace.FabricImage || obj instanceof fabric__namespace.Group && obj.__cropGroup)) {
16512
- activeSelectionFlipRestores.push({ obj, flipX: persistedFlipX, flipY: persistedFlipY });
16520
+ activeSelectionFlipRestores.push({ obj, flipX: persistedFlipX, flipY: persistedFlipY, angle: persistedAngle });
16513
16521
  }
16514
16522
  const elementUpdate = {
16515
16523
  left: storePos.left,
@@ -16735,14 +16743,15 @@ const PageCanvas = react.forwardRef(
16735
16743
  skipActiveSelectionBakeOnClearRef.current = true;
16736
16744
  try {
16737
16745
  for (const restore of activeSelectionFlipRestores) {
16738
- restore.obj.set({ flipX: restore.flipX, flipY: restore.flipY });
16739
- restore.obj.setCoords();
16740
- restore.obj.dirty = true;
16746
+ restorePersistedFlipState(restore.obj, restore.flipX, restore.flipY, restore.angle);
16741
16747
  }
16742
16748
  fabricCanvas.discardActiveObject();
16743
16749
  } finally {
16744
16750
  skipActiveSelectionBakeOnClearRef.current = false;
16745
16751
  }
16752
+ for (const restore of activeSelectionFlipRestores) {
16753
+ restorePersistedFlipState(restore.obj, restore.flipX, restore.flipY, restore.angle);
16754
+ }
16746
16755
  for (const bake of pendingCropGroupFrameBakes) {
16747
16756
  const ct = bake.obj.__cropData;
16748
16757
  if (!ct) continue;
@@ -16762,6 +16771,9 @@ const PageCanvas = react.forwardRef(
16762
16771
  updateCoverLayout(bake.obj);
16763
16772
  bake.obj.setCoords();
16764
16773
  }
16774
+ for (const restore of activeSelectionFlipRestores) {
16775
+ restorePersistedFlipState(restore.obj, restore.flipX, restore.flipY, restore.angle);
16776
+ }
16765
16777
  if (membersToReselect.length > 1) {
16766
16778
  const newSel = new fabric__namespace.ActiveSelection(membersToReselect, { canvas: fabricCanvas });
16767
16779
  if (wasGroupSel) restoreGroupSelectionVisualState(newSel, wasGroupSel);
@@ -25929,9 +25941,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
25929
25941
  }
25930
25942
  return svgString;
25931
25943
  }
25932
- const resolvedPackageVersion = "0.5.443";
25944
+ const resolvedPackageVersion = "0.5.445";
25933
25945
  const PACKAGE_VERSION = resolvedPackageVersion;
25934
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.443";
25946
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.445";
25935
25947
  const roundParityValue = (value) => {
25936
25948
  if (typeof value !== "number") return value;
25937
25949
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -26745,7 +26757,7 @@ class PixldocsRenderer {
26745
26757
  await this.waitForCanvasScene(container, cloned, i);
26746
26758
  }
26747
26759
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
26748
- const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-C6WM_grg.cjs"));
26760
+ const { exportMultiPagePdf, preparePagesForExport } = await Promise.resolve().then(() => require("./vectorPdfExport-CuC9pjN_.cjs"));
26749
26761
  const prepared = preparePagesForExport(
26750
26762
  cloned.pages,
26751
26763
  canvasWidth,
@@ -29065,7 +29077,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
29065
29077
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
29066
29078
  sanitizeSvgTreeForPdf(svgToDraw);
29067
29079
  try {
29068
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-C6WM_grg.cjs"));
29080
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await Promise.resolve().then(() => require("./vectorPdfExport-CuC9pjN_.cjs"));
29069
29081
  try {
29070
29082
  await logTextMeasurementDiagnostic(svgToDraw);
29071
29083
  } catch {
@@ -29462,4 +29474,4 @@ exports.setAutoShrinkDebug = setAutoShrinkDebug;
29462
29474
  exports.setBundledAssetPrefixes = setBundledAssetPrefixes;
29463
29475
  exports.warmResolvedTemplateForPreview = warmResolvedTemplateForPreview;
29464
29476
  exports.warmTemplateFromForm = warmTemplateFromForm;
29465
- //# sourceMappingURL=index-BxmYD_or.cjs.map
29477
+ //# sourceMappingURL=index-BtExVWAT.cjs.map