@pixldocs/canvas-renderer 0.5.394 → 0.5.395

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.
@@ -11436,7 +11436,7 @@ const bakeTextboxScaleIntoTypography = (obj, sourceElement) => {
11436
11436
  };
11437
11437
  return updates;
11438
11438
  };
11439
- function applyWarpAwareSelectionBorders(selection, preferredGroupAngle) {
11439
+ function applyWarpAwareSelectionBorders(selection, preferredGroupAngle, preferredGroupFrame) {
11440
11440
  var _a2;
11441
11441
  if (selection.__pixldocsOrigASHasBorders !== void 0) {
11442
11442
  selection.hasBorders = selection.__pixldocsOrigASHasBorders;
@@ -11499,7 +11499,8 @@ function applyWarpAwareSelectionBorders(selection, preferredGroupAngle) {
11499
11499
  for (const b of buckets) b.area = orientedAreaForAngle(b.angle);
11500
11500
  buckets.sort((a, b) => b.count - a.count || a.area - b.area || Math.abs(b.angle) - Math.abs(a.angle));
11501
11501
  const dominant = buckets[0];
11502
- const preferredAngle = typeof preferredGroupAngle === "number" && Number.isFinite(preferredGroupAngle) ? normalizeAngle180(preferredGroupAngle) : null;
11502
+ const rawPreferredGroupAngle = typeof preferredGroupAngle === "number" && Number.isFinite(preferredGroupAngle) ? preferredGroupAngle : typeof selection.__pixldocsGroupAngle === "number" && Number.isFinite(selection.__pixldocsGroupAngle) ? selection.__pixldocsGroupAngle : null;
11503
+ const preferredAngle = rawPreferredGroupAngle != null ? normalizeAngle180(rawPreferredGroupAngle) : null;
11503
11504
  let targetAngle = preferredAngle;
11504
11505
  const isLogicalGroupSelection = !!selection.__pixldocsGroupSelection;
11505
11506
  if (targetAngle == null && dominant && Math.abs(dominant.angle) > 0.5 && (isLogicalGroupSelection || kids.length === 1 || dominant.count >= 2 || dominant.count === kids.length)) {
@@ -11543,11 +11544,30 @@ function applyWarpAwareSelectionBorders(selection, preferredGroupAngle) {
11543
11544
  targetAngle,
11544
11545
  worldAngles
11545
11546
  });
11547
+ const fixedFrame = preferredGroupFrame && Number.isFinite(preferredGroupFrame.left) && Number.isFinite(preferredGroupFrame.top) && Number.isFinite(preferredGroupFrame.width) && preferredGroupFrame.width > 0 && Number.isFinite(preferredGroupFrame.height) && preferredGroupFrame.height > 0 ? preferredGroupFrame : null;
11546
11548
  selection.set({ angle: targetAngle, scaleX: 1, scaleY: 1, skewX: 0, skewY: 0 });
11549
+ if (fixedFrame) {
11550
+ selection.set({ width: fixedFrame.width, height: fixedFrame.height, originX: "center", originY: "center" });
11551
+ selection.setPositionByOrigin(
11552
+ new fabric.Point(fixedFrame.left + fixedFrame.width / 2, fixedFrame.top + fixedFrame.height / 2),
11553
+ "center",
11554
+ "center"
11555
+ );
11556
+ }
11547
11557
  restoreKidsFromWorld();
11548
- try {
11549
- (_a2 = selection.triggerLayout) == null ? void 0 : _a2.call(selection);
11550
- } catch {
11558
+ if (!fixedFrame) {
11559
+ try {
11560
+ (_a2 = selection.triggerLayout) == null ? void 0 : _a2.call(selection);
11561
+ } catch {
11562
+ }
11563
+ }
11564
+ if (fixedFrame) {
11565
+ selection.set({ width: fixedFrame.width, height: fixedFrame.height, originX: "center", originY: "center" });
11566
+ selection.setPositionByOrigin(
11567
+ new fabric.Point(fixedFrame.left + fixedFrame.width / 2, fixedFrame.top + fixedFrame.height / 2),
11568
+ "center",
11569
+ "center"
11570
+ );
11551
11571
  }
11552
11572
  restoreKidsFromWorld();
11553
11573
  selection.setCoords();
@@ -11636,14 +11656,50 @@ const PageCanvas = forwardRef(
11636
11656
  const [ready, setReady] = useState(false);
11637
11657
  const [unlockRequestId, setUnlockRequestId] = useState(0);
11638
11658
  const applyLogicalGroupSelectionVisualState = useCallback((selection, groupId) => {
11639
- var _a2;
11659
+ var _a2, _b2;
11640
11660
  selection.__pixldocsGroupSelection = groupId;
11641
11661
  delete selection.__pixldocsLogicalGroupIds;
11642
11662
  const pageNow = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId);
11643
11663
  const groupNode = pageNow ? findNodeById(pageNow.children ?? [], groupId) : null;
11644
- const groupAngle = groupNode && isGroup(groupNode) && typeof groupNode.angle === "number" ? groupNode.angle : void 0;
11645
- if (groupAngle !== void 0) selection.__pixldocsGroupAngle = groupAngle;
11646
- else delete selection.__pixldocsGroupAngle;
11664
+ let groupAngle = groupNode && isGroup(groupNode) && typeof groupNode.angle === "number" ? groupNode.angle : void 0;
11665
+ if (groupAngle === void 0 && groupNode && isGroup(groupNode)) {
11666
+ try {
11667
+ const kids = selection.getObjects();
11668
+ const selectionMatrix = selection.calcTransformMatrix();
11669
+ const worldAngles = kids.map((kid) => normalizeAngle180(fabric.util.qrDecompose(
11670
+ fabric.util.multiplyTransformMatrices(
11671
+ selectionMatrix,
11672
+ kid.calcOwnMatrix()
11673
+ )
11674
+ ).angle ?? 0));
11675
+ const buckets = [];
11676
+ for (const angle of worldAngles) {
11677
+ const bucket = buckets.find((candidate) => Math.abs(normalizeAngle180(candidate.angle - angle)) <= 2);
11678
+ if (bucket) bucket.count += 1;
11679
+ else buckets.push({ angle, count: 1 });
11680
+ }
11681
+ buckets.sort((a, b) => b.count - a.count || Math.abs(b.angle) - Math.abs(a.angle));
11682
+ const inferredAngle = (_a2 = buckets[0]) == null ? void 0 : _a2.angle;
11683
+ if (typeof inferredAngle === "number" && Number.isFinite(inferredAngle) && Math.abs(inferredAngle) > 0.01) {
11684
+ groupAngle = inferredAngle;
11685
+ useEditorStore.getState().updateNode(
11686
+ groupId,
11687
+ { angle: inferredAngle },
11688
+ { recordHistory: false, skipLayoutRecalc: true }
11689
+ );
11690
+ }
11691
+ } catch {
11692
+ }
11693
+ }
11694
+ if (groupAngle !== void 0) {
11695
+ selection.__pixldocsGroupAngle = groupAngle;
11696
+ const aligned = selection.__pixldocsAlignedAngle;
11697
+ if (typeof aligned === "number" && Math.abs(normalizeAngle180(aligned - groupAngle)) > 0.01) {
11698
+ delete selection.__pixldocsAlignedAngle;
11699
+ }
11700
+ } else {
11701
+ delete selection.__pixldocsGroupAngle;
11702
+ }
11647
11703
  selection.hasBorders = true;
11648
11704
  const members = selection.getObjects();
11649
11705
  for (const prev of suppressGroupMemberBordersRef.current) {
@@ -11668,7 +11724,7 @@ const PageCanvas = forwardRef(
11668
11724
  if (m.__pixldocsOrigHasControls === void 0) m.__pixldocsOrigHasControls = m.hasControls;
11669
11725
  m.hasBorders = false;
11670
11726
  m.hasControls = false;
11671
- if (m.__cropGroup || ((_a2 = m._ct) == null ? void 0 : _a2.isCropGroup)) {
11727
+ if (m.__cropGroup || ((_b2 = m._ct) == null ? void 0 : _b2.isCropGroup)) {
11672
11728
  if (m.__pixldocsOrigLockScalingX === void 0) {
11673
11729
  m.__pixldocsOrigLockScalingX = m.lockScalingX;
11674
11730
  m.__pixldocsOrigLockScalingY = m.lockScalingY;
@@ -11677,7 +11733,22 @@ const PageCanvas = forwardRef(
11677
11733
  m.lockScalingY = false;
11678
11734
  }
11679
11735
  }
11680
- applyWarpAwareSelectionBorders(selection, groupAngle);
11736
+ const groupFrame = groupNode && isGroup(groupNode) ? (() => {
11737
+ try {
11738
+ const abs = getAbsoluteBounds(groupNode, (pageNow == null ? void 0 : pageNow.children) ?? []);
11739
+ const storedW = Number(groupNode.width);
11740
+ const storedH = Number(groupNode.height);
11741
+ return {
11742
+ left: abs.left,
11743
+ top: abs.top,
11744
+ width: Number.isFinite(storedW) && storedW > 0 ? storedW : abs.width,
11745
+ height: Number.isFinite(storedH) && storedH > 0 ? storedH : abs.height
11746
+ };
11747
+ } catch {
11748
+ return null;
11749
+ }
11750
+ })() : null;
11751
+ applyWarpAwareSelectionBorders(selection, groupAngle, groupFrame);
11681
11752
  }, [pageId]);
11682
11753
  const pageBoundsOptions = useMemo(
11683
11754
  () => ({ pageContentWidth: canvasWidth, pageContentHeight: canvasHeight }),
@@ -11780,7 +11851,11 @@ const PageCanvas = forwardRef(
11780
11851
  const activeMembers = activeBeforeRestore.getObjects();
11781
11852
  const sameMembers = activeMembers.length === members.length && members.every((member) => activeMembers.includes(member));
11782
11853
  const sameGroup = activeBeforeRestore.__pixldocsGroupSelection === groupId;
11783
- const alreadyAligned = activeBeforeRestore.__pixldocsAlignedAngle != null;
11854
+ const pageNow = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId);
11855
+ const groupNode = pageNow ? findNodeById(pageNow.children ?? [], groupId) : null;
11856
+ const savedAngle = groupNode && isGroup(groupNode) && typeof groupNode.angle === "number" ? groupNode.angle : null;
11857
+ const alignedAngle = activeBeforeRestore.__pixldocsAlignedAngle;
11858
+ const alreadyAligned = typeof alignedAngle === "number" && (savedAngle == null || Math.abs(normalizeAngle180(alignedAngle - savedAngle)) <= 0.01);
11784
11859
  if (sameMembers && sameGroup && alreadyAligned) {
11785
11860
  ensureCanvaControlRenders(activeBeforeRestore);
11786
11861
  return;
@@ -11797,9 +11872,11 @@ const PageCanvas = forwardRef(
11797
11872
  members.forEach((m) => m.setCoords());
11798
11873
  } catch {
11799
11874
  }
11800
- try {
11801
- (_a2 = selection.triggerLayout) == null ? void 0 : _a2.call(selection);
11802
- } catch {
11875
+ if (!selection.__pixldocsGroupSelection) {
11876
+ try {
11877
+ (_a2 = selection.triggerLayout) == null ? void 0 : _a2.call(selection);
11878
+ } catch {
11879
+ }
11803
11880
  }
11804
11881
  selection.setCoords();
11805
11882
  fc.requestRenderAll();
@@ -13247,6 +13324,8 @@ const PageCanvas = forwardRef(
13247
13324
  selectionTop: rect.top,
13248
13325
  groupLeft: groupAbs.left,
13249
13326
  groupTop: groupAbs.top,
13327
+ groupWidth: groupAbs.width,
13328
+ groupHeight: groupAbs.height,
13250
13329
  selectionAngle: ((active.angle ?? 0) % 360 + 360) % 360
13251
13330
  };
13252
13331
  logRotDriftSelectionSnapshot("transform-start", active, {
@@ -13414,7 +13493,11 @@ const PageCanvas = forwardRef(
13414
13493
  const activeIds = active.getObjects().map((obj) => getObjectId(obj)).filter((id) => !!id && id !== "__background__");
13415
13494
  const sameMembers = activeIds.length === snapshot.memberIds.length && snapshot.memberIds.every((id) => activeIds.includes(id));
13416
13495
  const sameGroup = active.__pixldocsGroupSelection === snapshot.groupSelectionId;
13417
- const alreadyAligned = active.__pixldocsAlignedAngle != null;
13496
+ const pageNow = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId);
13497
+ const groupNode = pageNow ? findNodeById(pageNow.children ?? [], snapshot.groupSelectionId) : null;
13498
+ const savedAngle = groupNode && isGroup(groupNode) && typeof groupNode.angle === "number" ? groupNode.angle : null;
13499
+ const alignedAngle = active.__pixldocsAlignedAngle;
13500
+ const alreadyAligned = typeof alignedAngle === "number" && (savedAngle == null || Math.abs(normalizeAngle180(alignedAngle - savedAngle)) <= 0.01);
13418
13501
  if (sameMembers && sameGroup && alreadyAligned) {
13419
13502
  ensureCanvaControlRenders(active);
13420
13503
  return;
@@ -13571,6 +13654,31 @@ const PageCanvas = forwardRef(
13571
13654
  }
13572
13655
  if (members.length === 0) return null;
13573
13656
  const savedGroupAngle = typeof g.angle === "number" && Number.isFinite(g.angle) ? normalizeAngle180(g.angle) : null;
13657
+ const savedGroupWidth = Number(g.width);
13658
+ const savedGroupHeight = Number(g.height);
13659
+ if (savedGroupAngle != null && savedGroupWidth > 0 && savedGroupHeight > 0) {
13660
+ const pageNow = useEditorStore.getState().canvas.pages.find((p) => p.id === pageId);
13661
+ const pageChildrenNow = (pageNow == null ? void 0 : pageNow.children) ?? [];
13662
+ const abs = getAbsoluteBounds(g, pageChildrenNow);
13663
+ const cx = abs.left + savedGroupWidth / 2;
13664
+ const cy = abs.top + savedGroupHeight / 2;
13665
+ const rad2 = savedGroupAngle * Math.PI / 180;
13666
+ const c = Math.cos(rad2), s = Math.sin(rad2);
13667
+ const rotate = (x, y) => {
13668
+ const dx = x - cx;
13669
+ const dy = y - cy;
13670
+ return { x: cx + dx * c - dy * s, y: cy + dx * s + dy * c };
13671
+ };
13672
+ return {
13673
+ corners: [
13674
+ rotate(abs.left, abs.top),
13675
+ rotate(abs.left + savedGroupWidth, abs.top),
13676
+ rotate(abs.left + savedGroupWidth, abs.top + savedGroupHeight),
13677
+ rotate(abs.left, abs.top + savedGroupHeight)
13678
+ ],
13679
+ angle: savedGroupAngle
13680
+ };
13681
+ }
13574
13682
  const worldPoints = [];
13575
13683
  for (const m of members) {
13576
13684
  (_a2 = m.setCoords) == null ? void 0 : _a2.call(m);
@@ -14810,6 +14918,7 @@ const PageCanvas = forwardRef(
14810
14918
  fabricCanvas.on("object:rotating", (e) => {
14811
14919
  var _a2, _b2;
14812
14920
  markSimpleTransform(e);
14921
+ prepareGroupSelectionTransformStart(e.target);
14813
14922
  didTransformRef.current = true;
14814
14923
  const tr = e.target;
14815
14924
  if (shouldLogRotDriftLiveTick(tr, "rotating")) {
@@ -14999,7 +15108,7 @@ const PageCanvas = forwardRef(
14999
15108
  const groupLeft = fabricCenterX - w / 2;
15000
15109
  const groupTop = fabricCenterY - h / 2;
15001
15110
  const storePosGroup = absoluteToStorePosition(groupLeft, groupTop, movedGroupId, pageChildrenSec);
15002
- useEditorStore.getState().updateNode(movedGroupId, { left: storePosGroup.left, top: storePosGroup.top }, { recordHistory: false, skipLayoutRecalc: true });
15111
+ useEditorStore.getState().updateNode(movedGroupId, { left: storePosGroup.left, top: storePosGroup.top, angle: fabricSectionGroup.angle ?? 0 }, { recordHistory: false, skipLayoutRecalc: true });
15003
15112
  }
15004
15113
  commitHistory();
15005
15114
  unlockEditsSoon();
@@ -15142,7 +15251,7 @@ const PageCanvas = forwardRef(
15142
15251
  const groupLeft = centerX - w / 2;
15143
15252
  const groupTop = centerY - h / 2;
15144
15253
  const storePosGroup = absoluteToStorePosition(groupLeft, groupTop, groupId, pageChildrenSec);
15145
- useEditorStore.getState().updateNode(groupId, { left: storePosGroup.left, top: storePosGroup.top }, { recordHistory: false, skipLayoutRecalc: true });
15254
+ useEditorStore.getState().updateNode(groupId, { left: storePosGroup.left, top: storePosGroup.top, angle: active.angle ?? 0 }, { recordHistory: false, skipLayoutRecalc: true });
15146
15255
  }
15147
15256
  const node = findNodeById(pageChildrenSec, groupId);
15148
15257
  if (isChildModified && node && !groupMoved) {
@@ -15171,7 +15280,7 @@ const PageCanvas = forwardRef(
15171
15280
  const groupLeft = active.originX === "center" ? centerX - w / 2 : centerX;
15172
15281
  const groupTop = active.originY === "center" ? centerY - h / 2 : centerY;
15173
15282
  const storePos = absoluteToStorePosition(groupLeft, groupTop, groupId, pageChildren3);
15174
- useEditorStore.getState().updateNode(groupId, { left: storePos.left, top: storePos.top }, { recordHistory: false, skipLayoutRecalc: true });
15283
+ useEditorStore.getState().updateNode(groupId, { left: storePos.left, top: storePos.top, angle: active.angle ?? 0 }, { recordHistory: false, skipLayoutRecalc: true });
15175
15284
  commitHistory();
15176
15285
  unlockEditsSoon();
15177
15286
  return;
@@ -15996,9 +16105,11 @@ const PageCanvas = forwardRef(
15996
16105
  } catch {
15997
16106
  }
15998
16107
  fabricCanvas.setActiveObject(newSel);
15999
- try {
16000
- (_j = newSel.triggerLayout) == null ? void 0 : _j.call(newSel);
16001
- } catch {
16108
+ if (!wasGroupSel) {
16109
+ try {
16110
+ (_j = newSel.triggerLayout) == null ? void 0 : _j.call(newSel);
16111
+ } catch {
16112
+ }
16002
16113
  }
16003
16114
  try {
16004
16115
  for (const member of membersToReselect) member.setCoords();
@@ -16375,7 +16486,12 @@ const PageCanvas = forwardRef(
16375
16486
  const prevAS = activeBeforeSync instanceof fabric.ActiveSelection ? activeBeforeSync : null;
16376
16487
  const prevMembers = prevAS ? prevAS.getObjects() : [];
16377
16488
  const sameMembers = !!prevAS && prevMembers.length === freshMembers.length && prevMembers.every((m) => freshMembers.includes(m));
16378
- const alreadyAligned = sameMembers && prevAS.__pixldocsAlignedAngle != null;
16489
+ const savedSnapshotAngle = activeSelectionSnapshot.groupSelectionId ? (() => {
16490
+ const groupNode = findNodeById(pageTree, activeSelectionSnapshot.groupSelectionId);
16491
+ return groupNode && isGroup(groupNode) && typeof groupNode.angle === "number" ? groupNode.angle : null;
16492
+ })() : null;
16493
+ const prevAlignedAngle = sameMembers ? prevAS.__pixldocsAlignedAngle : null;
16494
+ const alreadyAligned = sameMembers && typeof prevAlignedAngle === "number" && (savedSnapshotAngle == null || Math.abs(normalizeAngle180(prevAlignedAngle - savedSnapshotAngle)) <= 0.01);
16379
16495
  if (sameMembers && alreadyAligned) {
16380
16496
  try {
16381
16497
  ensureCanvaControlRenders(prevAS);
@@ -17417,11 +17533,10 @@ const PageCanvas = forwardRef(
17417
17533
  if (sameSelection && (isFlatGroupSelection || isPureSingleGroupSelection)) {
17418
17534
  if (selectedGroupSelectionId && active instanceof fabric.ActiveSelection) {
17419
17535
  if (isPureSingleGroupSelection) {
17420
- active.__pixldocsGroupSelection = selectedGroupSelectionId;
17421
- delete active.__pixldocsLogicalGroupIds;
17422
- suppressGroupMemberBordersRef.current = active.getObjects();
17536
+ applyLogicalGroupSelectionVisualState(active, selectedGroupSelectionId);
17423
17537
  } else {
17424
17538
  delete active.__pixldocsGroupSelection;
17539
+ delete active.__pixldocsGroupAngle;
17425
17540
  active.__pixldocsLogicalGroupIds = selectedGroupIds;
17426
17541
  active.hasBorders = true;
17427
17542
  suppressGroupMemberBordersRef.current = active.getObjects().filter((m) => {
@@ -17461,10 +17576,10 @@ const PageCanvas = forwardRef(
17461
17576
  const selection = new fabric.ActiveSelection(toSelect, { canvas: fc });
17462
17577
  if (selectedGroupSelectionId) {
17463
17578
  if (isPureSingleGroupSelection) {
17464
- selection.__pixldocsGroupSelection = selectedGroupSelectionId;
17465
- suppressGroupMemberBordersRef.current = toSelect;
17579
+ applyLogicalGroupSelectionVisualState(selection, selectedGroupSelectionId);
17466
17580
  } else {
17467
17581
  selection.__pixldocsLogicalGroupIds = selectedGroupIds;
17582
+ delete selection.__pixldocsGroupAngle;
17468
17583
  selection.hasBorders = true;
17469
17584
  suppressGroupMemberBordersRef.current = toSelect.filter((m) => {
17470
17585
  const id = getObjectId(m);
@@ -25107,9 +25222,9 @@ function captureFabricCanvasSvgForPdf(fabricInstance, canvasWidth, canvasHeight)
25107
25222
  }
25108
25223
  return svgString;
25109
25224
  }
25110
- const resolvedPackageVersion = "0.5.394";
25225
+ const resolvedPackageVersion = "0.5.395";
25111
25226
  const PACKAGE_VERSION = resolvedPackageVersion;
25112
- const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.394";
25227
+ const DEPLOYMENT_VERSION_MARKER = "__PIXLDOCS_CANVAS_RENDERER_VERSION__:0.5.395";
25113
25228
  const roundParityValue = (value) => {
25114
25229
  if (typeof value !== "number") return value;
25115
25230
  return Number.isFinite(value) ? Number(value.toFixed(3)) : value;
@@ -25923,7 +26038,7 @@ class PixldocsRenderer {
25923
26038
  await this.waitForCanvasScene(container, cloned, i);
25924
26039
  }
25925
26040
  console.log(`[canvas-renderer][pdf-unified] mounted ${cloned.pages.length} page(s), handing off to client exportMultiPagePdf`);
25926
- const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-BUj20FDX.js");
26041
+ const { exportMultiPagePdf, preparePagesForExport } = await import("./vectorPdfExport-DXadS763.js");
25927
26042
  const prepared = preparePagesForExport(
25928
26043
  cloned.pages,
25929
26044
  canvasWidth,
@@ -28243,7 +28358,7 @@ async function prepareLiveCanvasSvgForPdf(rawSvg, pageWidth, pageHeight, pageKey
28243
28358
  if (options == null ? void 0 : options.stripPageBackground) stripRootPageBackgroundFromSvg(svgToDraw);
28244
28359
  sanitizeSvgTreeForPdf(svgToDraw);
28245
28360
  try {
28246
- const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-BUj20FDX.js");
28361
+ const { bakeTextAnchorPositionsFromLiveSvg, logTextMeasurementDiagnostic } = await import("./vectorPdfExport-DXadS763.js");
28247
28362
  try {
28248
28363
  await logTextMeasurementDiagnostic(svgToDraw);
28249
28364
  } catch {
@@ -28643,4 +28758,4 @@ export {
28643
28758
  buildTeaserBlurFlatKeys as y,
28644
28759
  collectFontDescriptorsFromConfig as z
28645
28760
  };
28646
- //# sourceMappingURL=index-CgnT1WJ6.js.map
28761
+ //# sourceMappingURL=index-Bl3vMS3U.js.map