@pixldocs/canvas-renderer 0.5.302 → 0.5.303

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.
@@ -11348,6 +11348,7 @@ const PageCanvas = forwardRef(
11348
11348
  const lastTextEditDimensionsRef = useRef(null);
11349
11349
  const lastResizeScaleTargetRef = useRef(null);
11350
11350
  const activeSelectionResizeHandleRef = useRef(null);
11351
+ const groupShiftReflowSnapshotRef = useRef(null);
11351
11352
  const preserveSelectionAfterTransformIdRef = useRef(null);
11352
11353
  const groupSelectionTransformStartRef = useRef(null);
11353
11354
  const activeSelectionMoveStartRef = useRef(null);
@@ -13505,7 +13506,7 @@ const PageCanvas = forwardRef(
13505
13506
  fabricCanvas.on("selection:cleared", () => {
13506
13507
  });
13507
13508
  fabricCanvas.on("object:scaling", (e) => {
13508
- var _a2, _b2, _c;
13509
+ var _a2, _b2, _c, _d, _e, _f;
13509
13510
  if (!isActiveRef.current) return;
13510
13511
  const t = e.target;
13511
13512
  if (t) lastResizeScaleTargetRef.current = t;
@@ -13682,6 +13683,33 @@ const PageCanvas = forwardRef(
13682
13683
  const isXSide = corner === "ml" || corner === "mr";
13683
13684
  const sAxis = isXSide ? Math.abs(obj.scaleX ?? 1) : Math.abs(obj.scaleY ?? 1);
13684
13685
  if (sAxis > 1e-3) {
13686
+ if (isXSide && ((_b2 = groupShiftReflowSnapshotRef.current) == null ? void 0 : _b2.selection) !== obj) {
13687
+ groupShiftReflowSnapshotRef.current = null;
13688
+ const logicalGroupId = obj.__pixldocsGroupSelection;
13689
+ if (logicalGroupId) {
13690
+ try {
13691
+ const state = useEditorStore.getState();
13692
+ const pageChildren2 = ((_c = state.canvas.pages.find((p) => p.id === pageId)) == null ? void 0 : _c.children) ?? [];
13693
+ const groupNode = findNodeById(pageChildren2, logicalGroupId);
13694
+ if (groupNode && isGroup(groupNode) && !isStackLayoutMode(groupNode.layoutMode)) {
13695
+ const entries = obj.getObjects().map((c) => ({
13696
+ obj: c,
13697
+ id: getObjectId(c) ?? "",
13698
+ top0: c.top ?? 0,
13699
+ height0: (c.height ?? 0) * Math.abs(c.scaleY ?? 1)
13700
+ })).filter((e2) => e2.id).sort((a, b) => a.top0 - b.top0);
13701
+ if (entries.length > 1) {
13702
+ const gaps = [];
13703
+ for (let i = 1; i < entries.length; i++) {
13704
+ gaps.push(Math.max(0, entries[i].top0 - (entries[i - 1].top0 + entries[i - 1].height0)));
13705
+ }
13706
+ groupShiftReflowSnapshotRef.current = { selection: obj, groupId: logicalGroupId, children: entries, gaps };
13707
+ }
13708
+ }
13709
+ } catch {
13710
+ }
13711
+ }
13712
+ }
13685
13713
  const asW0 = obj.width ?? 0;
13686
13714
  const asH0 = obj.height ?? 0;
13687
13715
  const asSx0 = obj.scaleX ?? 1;
@@ -13691,7 +13719,7 @@ const PageCanvas = forwardRef(
13691
13719
  const asRect0 = obj.getBoundingRect();
13692
13720
  let didReflowTextChild = false;
13693
13721
  for (const child of obj.getObjects()) {
13694
- if (child instanceof fabric.Group && (child.__cropGroup || ((_b2 = child._ct) == null ? void 0 : _b2.isCropGroup))) {
13722
+ if (child instanceof fabric.Group && (child.__cropGroup || ((_d = child._ct) == null ? void 0 : _d.isCropGroup))) {
13695
13723
  const ct = child.__cropData;
13696
13724
  if (!ct) continue;
13697
13725
  if (isXSide) {
@@ -13796,6 +13824,31 @@ const PageCanvas = forwardRef(
13796
13824
  didReflowTextChild = true;
13797
13825
  }
13798
13826
  }
13827
+ if (isXSide && ((_e = groupShiftReflowSnapshotRef.current) == null ? void 0 : _e.selection) === obj) {
13828
+ const snap = groupShiftReflowSnapshotRef.current;
13829
+ let prevBottom = -Infinity;
13830
+ let didShift = false;
13831
+ for (let i = 0; i < snap.children.length; i++) {
13832
+ const entry = snap.children[i];
13833
+ const c = entry.obj;
13834
+ let liveH;
13835
+ if (c instanceof fabric.Textbox) {
13836
+ liveH = c.height ?? entry.height0;
13837
+ } else {
13838
+ liveH = (c.height ?? entry.height0) * Math.abs(c.scaleY ?? 1);
13839
+ }
13840
+ const gap = i === 0 ? 0 : snap.gaps[i - 1];
13841
+ const targetTop = i === 0 ? entry.top0 : Math.max(entry.top0, prevBottom + gap);
13842
+ if (Math.abs((c.top ?? 0) - targetTop) > 0.5) {
13843
+ c._set("top", targetTop);
13844
+ c.setCoords();
13845
+ c.dirty = true;
13846
+ didShift = true;
13847
+ }
13848
+ prevBottom = targetTop + liveH;
13849
+ }
13850
+ if (didShift) didReflowTextChild = true;
13851
+ }
13799
13852
  if (isXSide && didReflowTextChild && typeof obj.triggerLayout === "function") {
13800
13853
  try {
13801
13854
  obj.triggerLayout();
@@ -13909,7 +13962,7 @@ const PageCanvas = forwardRef(
13909
13962
  setGuides(gridGuidesForScale.length ? [...scaleGuides, ...gridGuidesForScale] : scaleGuides);
13910
13963
  if (drilledGroupIdRef.current) {
13911
13964
  try {
13912
- (_c = fabricCanvas.__updateDrilledGroupOutline) == null ? void 0 : _c.call(fabricCanvas);
13965
+ (_f = fabricCanvas.__updateDrilledGroupOutline) == null ? void 0 : _f.call(fabricCanvas);
13913
13966
  } catch {
13914
13967
  }
13915
13968
  }
@@ -14116,6 +14169,7 @@ const PageCanvas = forwardRef(
14116
14169
  }
14117
14170
  } catch {
14118
14171
  }
14172
+ groupShiftReflowSnapshotRef.current = null;
14119
14173
  lockEdits();
14120
14174
  const modifiedTarget = e.target;
14121
14175
  const modifiedTargetId = modifiedTarget ? getObjectId(modifiedTarget) : null;
@@ -24104,9 +24158,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
24104
24158
  }
24105
24159
  return svgString;
24106
24160
  }
24107
- const resolvedPackageVersion = "0.5.302";
24161
+ const resolvedPackageVersion = "0.5.303";
24108
24162
  const PACKAGE_VERSION = resolvedPackageVersion;
24109
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.302";
24163
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.303";
24110
24164
  const roundParityValue = (value) => {
24111
24165
  if (typeof value !== "number") return value;
24112
24166
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -24920,7 +24974,7 @@ class PixldocsRenderer {
24920
24974
  await this.waitForCanvasScene(container, cloned, i);
24921
24975
  }
24922
24976
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
24923
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-Bje676YF.js");
24977
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-DlOAYoOr.js");
24924
24978
  const prepared = preparePagesForExport(
24925
24979
  cloned.pages,
24926
24980
  canvasWidth,
@@ -27240,7 +27294,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
27240
27294
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
27241
27295
  sanitizeSvgTreeForPdf(svgToDraw);
27242
27296
  try {
27243
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-Bje676YF.js");
27297
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-DlOAYoOr.js");
27244
27298
  try {
27245
27299
  await logTextMeasurementDiagnostic(svgToDraw);
27246
27300
  } catch {
@@ -27640,4 +27694,4 @@ export {
27640
27694
  buildTeaserBlurFlatKeys as y,
27641
27695
  collectFontDescriptorsFromConfig as z
27642
27696
  };
27643
- //# sourceMappingURL=index-ZeWTxoUj.js.map
27697
+ //# sourceMappingURL=index-BZNOM2c8.js.map