@pixldocs/canvas-renderer 0.5.400 → 0.5.401

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.
@@ -11505,12 +11505,12 @@ function applyWarpAwareSelectionBorders(selection) {
11505
11505
  if (isLogicalGroupSelection && typeof frozenGroupAngle === "number" && Math.abs(frozenGroupAngle) > 0.5) {
11506
11506
  targetAngle = frozenGroupAngle;
11507
11507
  }
11508
- if (targetAngle == null && dominant && Math.abs(dominant.angle) > 0.5 && // Canva-style: for a *logical group* the bbox angle is authoritative
11509
- // from the persisted group.angle (frozenGroupAngle) only. Individual
11510
- // child rotations must NEVER drift the group's selection bbox angle.
11511
- // The dominant-angle fallback is reserved for ad-hoc multi-selects
11512
- // (no logical group), where matching child rotation is desirable.
11513
- (!isLogicalGroupSelection && (kids.length === 1 || dominant.count >= 2 || dominant.count === kids.length))) {
11508
+ if (targetAngle == null && dominant && Math.abs(dominant.angle) > 0.5 && // Dominant-angle alignment is required to keep side-handle resize
11509
+ // shear-free on rotated children. Without it, Fabric's AS drags
11510
+ // along world X/Y while rotated children render in their local
11511
+ // frame visible skew. Frozen group angle (when persisted) takes
11512
+ // priority above; otherwise fall back to dominant.
11513
+ (isLogicalGroupSelection || kids.length === 1 || dominant.count >= 2 || dominant.count === kids.length)) {
11514
11514
  targetAngle = dominant.angle;
11515
11515
  }
11516
11516
  if (targetAngle != null) {
@@ -25117,9 +25117,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
25117
25117
  }
25118
25118
  return svgString;
25119
25119
  }
25120
- const resolvedPackageVersion = "0.5.400";
25120
+ const resolvedPackageVersion = "0.5.401";
25121
25121
  const PACKAGE_VERSION = resolvedPackageVersion;
25122
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.400";
25122
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.401";
25123
25123
  const roundParityValue = (value) => {
25124
25124
  if (typeof value !== "number") return value;
25125
25125
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25933,7 +25933,7 @@ class PixldocsRenderer {
25933
25933
  await this.waitForCanvasScene(container, cloned, i);
25934
25934
  }
25935
25935
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25936
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-DB5Ygq25.js");
25936
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-8uhoJ38-.js");
25937
25937
  const prepared = preparePagesForExport(
25938
25938
  cloned.pages,
25939
25939
  canvasWidth,
@@ -28253,7 +28253,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
28253
28253
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
28254
28254
  sanitizeSvgTreeForPdf(svgToDraw);
28255
28255
  try {
28256
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-DB5Ygq25.js");
28256
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-8uhoJ38-.js");
28257
28257
  try {
28258
28258
  await logTextMeasurementDiagnostic(svgToDraw);
28259
28259
  } catch {
@@ -28653,4 +28653,4 @@ export {
28653
28653
  buildTeaserBlurFlatKeys as y,
28654
28654
  collectFontDescriptorsFromConfig as z
28655
28655
  };
28656
- //# sourceMappingURL=index-B2tApyM3.js.map
28656
+ //# sourceMappingURL=index-B0wcgE-q.js.map