@elementor/editor-canvas 4.2.0-926 → 4.2.0-928

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.
package/dist/index.mjs CHANGED
@@ -356,7 +356,7 @@ var renameClass = (oldClassName, newClassName) => {
356
356
  };
357
357
 
358
358
  // src/components/elements-overlays.tsx
359
- import * as React6 from "react";
359
+ import * as React7 from "react";
360
360
  import { getElements, useSelectedElement } from "@elementor/editor-elements";
361
361
  import {
362
362
  __privateUseIsRouteActive as useIsRouteActive,
@@ -366,7 +366,7 @@ import {
366
366
  } from "@elementor/editor-v1-adapters";
367
367
 
368
368
  // src/components/grid-outline/grid-outline-overlay.tsx
369
- import * as React5 from "react";
369
+ import * as React6 from "react";
370
370
  import { useSelectedElementSettings } from "@elementor/editor-elements";
371
371
  import { booleanPropTypeUtil } from "@elementor/editor-props";
372
372
  import { Box as Box2 } from "@elementor/ui";
@@ -725,7 +725,170 @@ var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
725
725
  };
726
726
 
727
727
  // src/components/grid-outline/grid-outline.tsx
728
- import * as React4 from "react";
728
+ import * as React5 from "react";
729
+ import { useMemo } from "react";
730
+
731
+ // src/utils/find-first-empty-cell.ts
732
+ function findFirstEmptyCell(element, columnCount, rowCount) {
733
+ if (!element || columnCount === 0 || rowCount === 0) {
734
+ return null;
735
+ }
736
+ const previewWindow = element.ownerDocument?.defaultView;
737
+ if (!previewWindow) {
738
+ return null;
739
+ }
740
+ const containerStyle = previewWindow.getComputedStyle(element);
741
+ const flowsByColumn = containerStyle.gridAutoFlow.trim().startsWith("column");
742
+ const matrix = Array.from({ length: rowCount }, () => new Array(columnCount).fill(false));
743
+ const explicit = [];
744
+ const autoPlaced = [];
745
+ for (const child of Array.from(element.children)) {
746
+ if (!child.classList.contains("elementor-element")) {
747
+ continue;
748
+ }
749
+ const style = previewWindow.getComputedStyle(child);
750
+ if (style.display === "none") {
751
+ continue;
752
+ }
753
+ const col = resolvePlacement(style.gridColumnStart, style.gridColumnEnd);
754
+ const row = resolvePlacement(style.gridRowStart, style.gridRowEnd);
755
+ if (col.start !== null || row.start !== null) {
756
+ explicit.push({ col: col.start, colSpan: col.span, row: row.start, rowSpan: row.span });
757
+ } else {
758
+ autoPlaced.push({ colSpan: col.span, rowSpan: row.span });
759
+ }
760
+ }
761
+ for (const child of explicit) {
762
+ fillMatrix(matrix, child.col ?? 0, child.row ?? 0, child.colSpan, child.rowSpan);
763
+ }
764
+ for (const child of autoPlaced) {
765
+ const slot = findNextFreeSlot(matrix, child.colSpan, child.rowSpan, flowsByColumn);
766
+ if (slot) {
767
+ fillMatrix(matrix, slot.col, slot.row, child.colSpan, child.rowSpan);
768
+ }
769
+ }
770
+ return scanFirstEmpty(matrix, flowsByColumn);
771
+ }
772
+ function resolvePlacement(startRaw, endRaw) {
773
+ const start = parseLineValue(startRaw);
774
+ const end = parseLineValue(endRaw);
775
+ if (typeof start === "number") {
776
+ const zeroIndexedStart = start - 1;
777
+ if (typeof end === "number") {
778
+ return { start: zeroIndexedStart, span: Math.max(1, end - start) };
779
+ }
780
+ if (isSpan(end)) {
781
+ return { start: zeroIndexedStart, span: end.n };
782
+ }
783
+ return { start: zeroIndexedStart, span: 1 };
784
+ }
785
+ if (isSpan(start)) {
786
+ if (typeof end === "number") {
787
+ const zeroIndexedStart = end - 1 - start.n;
788
+ return { start: zeroIndexedStart >= 0 ? zeroIndexedStart : null, span: start.n };
789
+ }
790
+ return { start: null, span: start.n };
791
+ }
792
+ if (typeof end === "number") {
793
+ const zeroIndexedStart = end - 2;
794
+ return { start: zeroIndexedStart >= 0 ? zeroIndexedStart : null, span: 1 };
795
+ }
796
+ if (isSpan(end)) {
797
+ return { start: null, span: end.n };
798
+ }
799
+ return { start: null, span: 1 };
800
+ }
801
+ function parseLineValue(raw) {
802
+ const trimmed = raw.trim();
803
+ if (trimmed === "" || trimmed === "auto") {
804
+ return "auto";
805
+ }
806
+ const spanMatch = trimmed.match(/^span\s+(\d+)$/);
807
+ if (spanMatch) {
808
+ const n = parseInt(spanMatch[1], 10);
809
+ return { kind: "span", n: Math.max(1, n) };
810
+ }
811
+ const parsed = parseInt(trimmed, 10);
812
+ if (Number.isFinite(parsed) && parsed > 0) {
813
+ return parsed;
814
+ }
815
+ return "auto";
816
+ }
817
+ function isSpan(value) {
818
+ return typeof value === "object" && value !== null && "kind" in value && value.kind === "span";
819
+ }
820
+ function fillMatrix(matrix, col, row, colSpan, rowSpan) {
821
+ const rows = matrix.length;
822
+ const cols = rows > 0 ? matrix[0].length : 0;
823
+ const startRow = Math.max(0, row);
824
+ const startCol = Math.max(0, col);
825
+ const endRow = Math.min(rows, row + rowSpan);
826
+ const endCol = Math.min(cols, col + colSpan);
827
+ for (let r = startRow; r < endRow; r++) {
828
+ for (let c = startCol; c < endCol; c++) {
829
+ matrix[r][c] = true;
830
+ }
831
+ }
832
+ }
833
+ function findNextFreeSlot(matrix, colSpan, rowSpan, flowsByColumn) {
834
+ const rows = matrix.length;
835
+ const cols = rows > 0 ? matrix[0].length : 0;
836
+ const maxCol = cols - colSpan;
837
+ const maxRow = rows - rowSpan;
838
+ if (maxCol < 0 || maxRow < 0) {
839
+ return null;
840
+ }
841
+ if (flowsByColumn) {
842
+ for (let col = 0; col <= maxCol; col++) {
843
+ for (let row = 0; row <= maxRow; row++) {
844
+ if (canFit(matrix, col, row, colSpan, rowSpan)) {
845
+ return { row, col };
846
+ }
847
+ }
848
+ }
849
+ } else {
850
+ for (let row = 0; row <= maxRow; row++) {
851
+ for (let col = 0; col <= maxCol; col++) {
852
+ if (canFit(matrix, col, row, colSpan, rowSpan)) {
853
+ return { row, col };
854
+ }
855
+ }
856
+ }
857
+ }
858
+ return null;
859
+ }
860
+ function canFit(matrix, col, row, colSpan, rowSpan) {
861
+ for (let r = row; r < row + rowSpan; r++) {
862
+ for (let c = col; c < col + colSpan; c++) {
863
+ if (matrix[r][c]) {
864
+ return false;
865
+ }
866
+ }
867
+ }
868
+ return true;
869
+ }
870
+ function scanFirstEmpty(matrix, flowsByColumn) {
871
+ const rows = matrix.length;
872
+ const cols = rows > 0 ? matrix[0].length : 0;
873
+ if (flowsByColumn) {
874
+ for (let col = 0; col < cols; col++) {
875
+ for (let row = 0; row < rows; row++) {
876
+ if (!matrix[row][col]) {
877
+ return { row, col };
878
+ }
879
+ }
880
+ }
881
+ } else {
882
+ for (let row = 0; row < rows; row++) {
883
+ for (let col = 0; col < cols; col++) {
884
+ if (!matrix[row][col]) {
885
+ return { row, col };
886
+ }
887
+ }
888
+ }
889
+ }
890
+ return null;
891
+ }
729
892
 
730
893
  // src/components/grid-outline/cell.tsx
731
894
  import * as React2 from "react";
@@ -747,11 +910,40 @@ function Cell({ x, y, width, height, color }) {
747
910
  );
748
911
  }
749
912
 
750
- // src/components/grid-outline/line.tsx
913
+ // src/components/grid-outline/first-empty-cell.tsx
751
914
  import * as React3 from "react";
915
+ var GLYPH_SIZE = 19;
916
+ function FirstEmptyCell({ rect, color }) {
917
+ const size2 = Math.min(GLYPH_SIZE, rect.width, rect.height);
918
+ if (size2 <= 0) {
919
+ return null;
920
+ }
921
+ const centerX = rect.x + rect.width / 2;
922
+ const centerY = rect.y + rect.height / 2;
923
+ return /* @__PURE__ */ React3.createElement(
924
+ "i",
925
+ {
926
+ className: "eicon-plus",
927
+ "aria-hidden": "true",
928
+ style: {
929
+ position: "absolute",
930
+ left: centerX,
931
+ top: centerY,
932
+ transform: "translate(-50%, -50%)",
933
+ fontSize: size2,
934
+ color,
935
+ lineHeight: 1,
936
+ pointerEvents: "none"
937
+ }
938
+ }
939
+ );
940
+ }
941
+
942
+ // src/components/grid-outline/line.tsx
943
+ import * as React4 from "react";
752
944
  var FALLBACK_COLOR2 = "rgba(0, 0, 0, 0.12)";
753
945
  function Line({ x1, y1, x2, y2, color }) {
754
- return /* @__PURE__ */ React3.createElement(
946
+ return /* @__PURE__ */ React4.createElement(
755
947
  "line",
756
948
  {
757
949
  x1,
@@ -767,7 +959,7 @@ function Line({ x1, y1, x2, y2, color }) {
767
959
  }
768
960
 
769
961
  // src/components/grid-outline/grid-outline.tsx
770
- var renderCells = (tracks, width, height) => computeCellRects(tracks, width, height).map((cell, i) => /* @__PURE__ */ React4.createElement(
962
+ var renderCells = (cells, color) => cells.map((cell, i) => /* @__PURE__ */ React5.createElement(
771
963
  Cell,
772
964
  {
773
965
  key: i,
@@ -775,13 +967,13 @@ var renderCells = (tracks, width, height) => computeCellRects(tracks, width, hei
775
967
  y: snapToHalfPixel(cell.y),
776
968
  width: Math.round(cell.width),
777
969
  height: Math.round(cell.height),
778
- color: tracks.borderColor
970
+ color
779
971
  }
780
972
  ));
781
973
  var renderLines = (tracks, width, height) => {
782
974
  const { vertical, horizontal } = computeGridLines(tracks, width, height);
783
975
  return [
784
- ...vertical.map((line, i) => /* @__PURE__ */ React4.createElement(
976
+ ...vertical.map((line, i) => /* @__PURE__ */ React5.createElement(
785
977
  Line,
786
978
  {
787
979
  key: `v${i}`,
@@ -792,7 +984,7 @@ var renderLines = (tracks, width, height) => {
792
984
  color: tracks.borderColor
793
985
  }
794
986
  )),
795
- ...horizontal.map((line, i) => /* @__PURE__ */ React4.createElement(
987
+ ...horizontal.map((line, i) => /* @__PURE__ */ React5.createElement(
796
988
  Line,
797
989
  {
798
990
  key: `h${i}`,
@@ -805,9 +997,15 @@ var renderLines = (tracks, width, height) => {
805
997
  ))
806
998
  ];
807
999
  };
808
- function GridOutline({ tracks, width, height }) {
1000
+ function GridOutline({ element, tracks, width, height }) {
1001
+ const cells = useMemo(() => computeCellRects(tracks, width, height), [tracks, width, height]);
809
1002
  const hasGap = tracks.columnGap > 0 || tracks.rowGap > 0;
810
- return /* @__PURE__ */ React4.createElement(
1003
+ const firstEmpty = useMemo(
1004
+ () => findFirstEmptyCell(element, tracks.columns.length, tracks.rows.length),
1005
+ [element, tracks]
1006
+ );
1007
+ const emptyCellRect = firstEmpty && tracks.columns.length > 0 ? cells[firstEmpty.row * tracks.columns.length + firstEmpty.col] : null;
1008
+ return /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement(
811
1009
  "svg",
812
1010
  {
813
1011
  width,
@@ -815,8 +1013,8 @@ function GridOutline({ tracks, width, height }) {
815
1013
  style: { position: "absolute", inset: 0, overflow: "visible" },
816
1014
  xmlns: "http://www.w3.org/2000/svg"
817
1015
  },
818
- hasGap ? renderCells(tracks, width, height) : renderLines(tracks, width, height)
819
- );
1016
+ hasGap ? renderCells(cells, tracks.borderColor) : renderLines(tracks, width, height)
1017
+ ), emptyCellRect && /* @__PURE__ */ React5.createElement(FirstEmptyCell, { rect: emptyCellRect, color: tracks.borderColor }));
820
1018
  }
821
1019
 
822
1020
  // src/components/grid-outline/grid-outline-overlay.tsx
@@ -832,7 +1030,7 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
832
1030
  if (tracks.columns.length === 0 && tracks.rows.length === 0) {
833
1031
  return null;
834
1032
  }
835
- return /* @__PURE__ */ React5.createElement(FloatingPortal2, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React5.createElement(
1033
+ return /* @__PURE__ */ React6.createElement(FloatingPortal2, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React6.createElement(
836
1034
  Box2,
837
1035
  {
838
1036
  ref: floating.setRef,
@@ -840,7 +1038,7 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
840
1038
  "data-grid-outline": id,
841
1039
  role: "presentation"
842
1040
  },
843
- /* @__PURE__ */ React5.createElement(GridOutline, { tracks, width: rect.width, height: rect.height })
1041
+ /* @__PURE__ */ React6.createElement(GridOutline, { element, tracks, width: rect.width, height: rect.height })
844
1042
  ));
845
1043
  };
846
1044
 
@@ -869,7 +1067,7 @@ function ElementsOverlays() {
869
1067
  return elements.map(({ id, domElement, isGlobal }) => {
870
1068
  const isSelected = selected.element?.id === id;
871
1069
  return overlayRegistry.map(
872
- ({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */ React6.createElement(
1070
+ ({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */ React7.createElement(
873
1071
  Overlay,
874
1072
  {
875
1073
  key: `${id}-${index}`,
@@ -902,7 +1100,7 @@ function isV4Element(dataset) {
902
1100
  }
903
1101
 
904
1102
  // src/components/interactions-renderer.tsx
905
- import * as React7 from "react";
1103
+ import * as React8 from "react";
906
1104
  import {
907
1105
  __privateUseListenTo as useListenTo3,
908
1106
  commandEndEvent,
@@ -911,7 +1109,7 @@ import {
911
1109
  import { Portal } from "@elementor/ui";
912
1110
 
913
1111
  // src/hooks/use-interactions-items.ts
914
- import { useEffect as useEffect8, useMemo, useState as useState5 } from "react";
1112
+ import { useEffect as useEffect8, useMemo as useMemo2, useState as useState5 } from "react";
915
1113
  import { interactionsRepository } from "@elementor/editor-interactions";
916
1114
  import { registerDataHook } from "@elementor/editor-v1-adapters";
917
1115
 
@@ -930,7 +1128,7 @@ function useOnMount(cb) {
930
1128
  // src/hooks/use-interactions-items.ts
931
1129
  function useInteractionsItems() {
932
1130
  const [interactionItems, setInteractionItems] = useState5({});
933
- const providerAndSubscribers = useMemo(() => {
1131
+ const providerAndSubscribers = useMemo2(() => {
934
1132
  try {
935
1133
  const providers = interactionsRepository.getProviders();
936
1134
  const mapped = providers.map((provider) => {
@@ -978,7 +1176,7 @@ function useInteractionsItems() {
978
1176
  });
979
1177
  });
980
1178
  });
981
- return useMemo(() => {
1179
+ return useMemo2(() => {
982
1180
  const result = Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items);
983
1181
  return result;
984
1182
  }, [interactionItems]);
@@ -1008,7 +1206,7 @@ function InteractionsRenderer() {
1008
1206
  return null;
1009
1207
  }
1010
1208
  const interactionsData = JSON.stringify(Array.isArray(interactionItems) ? interactionItems : []);
1011
- return /* @__PURE__ */ React7.createElement(Portal, { container }, /* @__PURE__ */ React7.createElement(
1209
+ return /* @__PURE__ */ React8.createElement(Portal, { container }, /* @__PURE__ */ React8.createElement(
1012
1210
  "script",
1013
1211
  {
1014
1212
  type: "application/json",
@@ -1024,7 +1222,7 @@ function usePortalContainer() {
1024
1222
  }
1025
1223
 
1026
1224
  // src/components/style-renderer.tsx
1027
- import * as React8 from "react";
1225
+ import * as React9 from "react";
1028
1226
  import {
1029
1227
  __privateUseListenTo as useListenTo5,
1030
1228
  commandEndEvent as commandEndEvent3,
@@ -1084,7 +1282,7 @@ function getLinkAttrs(el) {
1084
1282
  }
1085
1283
 
1086
1284
  // src/hooks/use-style-items.ts
1087
- import { useEffect as useEffect9, useMemo as useMemo4, useRef as useRef2, useState as useState6 } from "react";
1285
+ import { useEffect as useEffect9, useMemo as useMemo5, useRef as useRef2, useState as useState6 } from "react";
1088
1286
  import { useBreakpoints } from "@elementor/editor-responsive";
1089
1287
  import { isClassState } from "@elementor/editor-styles";
1090
1288
  import { stylesRepository as stylesRepository2 } from "@elementor/editor-styles-repository";
@@ -1146,7 +1344,7 @@ function signalizedProcess(signal, steps = []) {
1146
1344
  }
1147
1345
 
1148
1346
  // src/hooks/use-style-prop-resolver.ts
1149
- import { useMemo as useMemo2 } from "react";
1347
+ import { useMemo as useMemo3 } from "react";
1150
1348
  import { getStylesSchema as getStylesSchema2 } from "@elementor/editor-styles";
1151
1349
  import { enqueueFont } from "@elementor/editor-v1-adapters";
1152
1350
 
@@ -1276,7 +1474,7 @@ var styleTransformersRegistry = createTransformersRegistry();
1276
1474
 
1277
1475
  // src/hooks/use-style-prop-resolver.ts
1278
1476
  function useStylePropResolver() {
1279
- return useMemo2(() => {
1477
+ return useMemo3(() => {
1280
1478
  return createPropsResolver({
1281
1479
  transformers: styleTransformersRegistry,
1282
1480
  schema: getStylesSchema2(),
@@ -1291,7 +1489,7 @@ function useStylePropResolver() {
1291
1489
  }
1292
1490
 
1293
1491
  // src/hooks/use-style-renderer.ts
1294
- import { useMemo as useMemo3 } from "react";
1492
+ import { useMemo as useMemo4 } from "react";
1295
1493
  import { useBreakpointsMap } from "@elementor/editor-responsive";
1296
1494
 
1297
1495
  // src/renderers/create-styles-renderer.ts
@@ -1402,7 +1600,7 @@ function customCssToString(customCss) {
1402
1600
  var SELECTOR_PREFIX = ".elementor";
1403
1601
  function useStyleRenderer(resolve) {
1404
1602
  const breakpoints = useBreakpointsMap();
1405
- return useMemo3(() => {
1603
+ return useMemo4(() => {
1406
1604
  return createStylesRenderer({
1407
1605
  selectorPrefix: SELECTOR_PREFIX,
1408
1606
  breakpoints,
@@ -1418,7 +1616,7 @@ function useStyleItems() {
1418
1616
  const breakpoints = useBreakpoints();
1419
1617
  const [styleItems, setStyleItems] = useState6({});
1420
1618
  const styleItemsCacheRef = useRef2(/* @__PURE__ */ new Map());
1421
- const providerAndSubscribers = useMemo4(() => {
1619
+ const providerAndSubscribers = useMemo5(() => {
1422
1620
  const createEmptyCache = () => {
1423
1621
  return { orderedIds: [], itemsById: /* @__PURE__ */ new Map() };
1424
1622
  };
@@ -1459,11 +1657,11 @@ function useStyleItems() {
1459
1657
  await Promise.all(promises);
1460
1658
  });
1461
1659
  });
1462
- const breakpointSorter = useMemo4(
1660
+ const breakpointSorter = useMemo5(
1463
1661
  () => createBreakpointSorter(breakpoints.map((breakpoint) => breakpoint.id)),
1464
1662
  [breakpoints]
1465
1663
  );
1466
- return useMemo4(
1664
+ return useMemo5(
1467
1665
  () => Object.values(styleItems).sort(prioritySorter).flatMap(({ items }) => items).sort(stateSorter).sort(breakpointSorter),
1468
1666
  [styleItems, breakpointSorter]
1469
1667
  );
@@ -1605,7 +1803,7 @@ function StyleRenderer() {
1605
1803
  if (!container) {
1606
1804
  return null;
1607
1805
  }
1608
- return /* @__PURE__ */ React8.createElement(Portal2, { container }, filterUniqueStyleDefinitions(styleItems).map((item) => /* @__PURE__ */ React8.createElement("style", { key: `${item.id}-${item.breakpoint}-${item.state ?? "normal"}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ React8.createElement("link", { ...attrs, key: attrs.id })));
1806
+ return /* @__PURE__ */ React9.createElement(Portal2, { container }, filterUniqueStyleDefinitions(styleItems).map((item) => /* @__PURE__ */ React9.createElement("style", { key: `${item.id}-${item.breakpoint}-${item.state ?? "normal"}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ React9.createElement("link", { ...attrs, key: attrs.id })));
1609
1807
  }
1610
1808
  function usePortalContainer2() {
1611
1809
  return useListenTo5(commandEndEvent3("editor/documents/attach-preview"), () => getCanvasIframeDocument4()?.head);
@@ -3042,8 +3240,10 @@ function createPromotionView(BaseView) {
3042
3240
  return class extends BaseView {
3043
3241
  _afterRender() {
3044
3242
  super._afterRender();
3045
- this.$el.off("click", ".e-form-placeholder__remove-btn");
3046
- this.$el.on("click", ".e-form-placeholder__remove-btn", (e) => {
3243
+ const removeBtnSelector = ".e-pro-promotion-placeholder__remove-btn";
3244
+ const unlockBtnSelector = ".e-pro-promotion-placeholder__unlock-btn";
3245
+ this.$el.off("click", removeBtnSelector);
3246
+ this.$el.on("click", removeBtnSelector, (e) => {
3047
3247
  e.preventDefault();
3048
3248
  e.stopPropagation();
3049
3249
  window.$e.run(
@@ -3051,8 +3251,8 @@ function createPromotionView(BaseView) {
3051
3251
  { container: this.container }
3052
3252
  );
3053
3253
  });
3054
- this.$el.off("click", ".e-form-placeholder__unlock-btn");
3055
- this.$el.on("click", ".e-form-placeholder__unlock-btn", (e) => {
3254
+ this.$el.off("click", unlockBtnSelector);
3255
+ this.$el.on("click", unlockBtnSelector, (e) => {
3056
3256
  e.stopPropagation();
3057
3257
  });
3058
3258
  }
@@ -3070,8 +3270,8 @@ function createPromotionView(BaseView) {
3070
3270
  }
3071
3271
  onDestroy(...args) {
3072
3272
  super.onDestroy(...args);
3073
- this.$el.off("click", ".e-form-placeholder__remove-btn");
3074
- this.$el.off("click", ".e-form-placeholder__unlock-btn");
3273
+ this.$el.off("click", ".e-pro-promotion-placeholder__remove-btn");
3274
+ this.$el.off("click", ".e-pro-promotion-placeholder__unlock-btn");
3075
3275
  }
3076
3276
  };
3077
3277
  }
@@ -3080,7 +3280,7 @@ function createPromotionView(BaseView) {
3080
3280
  import { createRoot } from "react-dom/client";
3081
3281
 
3082
3282
  // src/legacy/replacements/inline-editing/inline-editing-elements.tsx
3083
- import * as React10 from "react";
3283
+ import * as React11 from "react";
3084
3284
  import { getContainer as getContainer2, getElementLabel, getElementType as getElementType2 } from "@elementor/editor-elements";
3085
3285
  import {
3086
3286
  htmlV3PropTypeUtil as htmlV3PropTypeUtil2,
@@ -3133,7 +3333,7 @@ var ReplacementBase = class {
3133
3333
  };
3134
3334
 
3135
3335
  // src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
3136
- import * as React9 from "react";
3336
+ import * as React10 from "react";
3137
3337
  import { useCallback as useCallback2, useEffect as useEffect11, useLayoutEffect, useState as useState8 } from "react";
3138
3338
  import { InlineEditor, InlineEditorToolbar } from "@elementor/editor-controls";
3139
3339
  import { Box as Box3, ThemeProvider } from "@elementor/ui";
@@ -3305,7 +3505,7 @@ var CanvasInlineEditor = ({
3305
3505
  if (!active) {
3306
3506
  return null;
3307
3507
  }
3308
- return /* @__PURE__ */ React9.createElement(ThemeProvider, null, /* @__PURE__ */ React9.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React9.createElement(
3508
+ return /* @__PURE__ */ React10.createElement(ThemeProvider, null, /* @__PURE__ */ React10.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React10.createElement(
3309
3509
  InlineEditor,
3310
3510
  {
3311
3511
  onEditorCreate: setEditor,
@@ -3322,7 +3522,7 @@ var CanvasInlineEditor = ({
3322
3522
  autofocus: true,
3323
3523
  onSelectionEnd
3324
3524
  }
3325
- ), toolbarAnchor && editor && /* @__PURE__ */ React9.createElement(InlineEditingToolbar, { anchor: toolbarAnchor, editor, id }));
3525
+ ), toolbarAnchor && editor && /* @__PURE__ */ React10.createElement(InlineEditingToolbar, { anchor: toolbarAnchor, editor, id }));
3326
3526
  };
3327
3527
  var InlineEditingOverlay = ({
3328
3528
  expectedTag,
@@ -3334,7 +3534,7 @@ var InlineEditingOverlay = ({
3334
3534
  useEffect11(() => {
3335
3535
  setOverlayElement(getInlineEditorElement(rootElement, expectedTag));
3336
3536
  }, [expectedTag, rootElement]);
3337
- return overlayRefElement ? /* @__PURE__ */ React9.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
3537
+ return overlayRefElement ? /* @__PURE__ */ React10.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
3338
3538
  };
3339
3539
  var InlineEditingToolbar = ({ anchor, editor, id }) => {
3340
3540
  const { refs, floatingStyles } = useFloating2({
@@ -3348,7 +3548,7 @@ var InlineEditingToolbar = ({ anchor, editor, id }) => {
3348
3548
  refs.setReference(anchor);
3349
3549
  return () => refs.setReference(null);
3350
3550
  }, [anchor, refs]);
3351
- return /* @__PURE__ */ React9.createElement(FloatingPortal3, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React9.createElement(
3551
+ return /* @__PURE__ */ React10.createElement(FloatingPortal3, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React10.createElement(
3352
3552
  Box3,
3353
3553
  {
3354
3554
  ref: refs.setFloating,
@@ -3358,7 +3558,7 @@ var InlineEditingToolbar = ({ anchor, editor, id }) => {
3358
3558
  pointerEvents: "none"
3359
3559
  }
3360
3560
  },
3361
- /* @__PURE__ */ React9.createElement(InlineEditorToolbar, { editor, elementId: id })
3561
+ /* @__PURE__ */ React10.createElement(InlineEditorToolbar, { editor, elementId: id })
3362
3562
  ));
3363
3563
  };
3364
3564
 
@@ -3567,7 +3767,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
3567
3767
  contentElement.innerHTML = "";
3568
3768
  this.editing = true;
3569
3769
  this.reactRoot.render(
3570
- /* @__PURE__ */ React10.createElement(
3770
+ /* @__PURE__ */ React11.createElement(
3571
3771
  CanvasInlineEditor,
3572
3772
  {
3573
3773
  elementClasses,
@@ -4372,7 +4572,7 @@ function getElementDisplayName(container) {
4372
4572
  // src/mcp/tools/build-composition/tool.ts
4373
4573
  import { getCurrentDocument } from "@elementor/editor-documents";
4374
4574
  import {
4375
- createElement as createElement12,
4575
+ createElement as createElement13,
4376
4576
  deleteElement as deleteElement2,
4377
4577
  getContainer as getContainer5,
4378
4578
  getWidgetsCache as getWidgetsCache9
@@ -4380,7 +4580,7 @@ import {
4380
4580
 
4381
4581
  // src/composition-builder/composition-builder.ts
4382
4582
  import {
4383
- createElement as createElement11,
4583
+ createElement as createElement12,
4384
4584
  deleteElement,
4385
4585
  generateElementId as generateElementId2,
4386
4586
  getContainer as getContainer4,
@@ -4680,7 +4880,7 @@ var CompositionBuilder = class _CompositionBuilder {
4680
4880
  elementCustomCSS = {};
4681
4881
  rootContainers = [];
4682
4882
  api = {
4683
- createElement: createElement11,
4883
+ createElement: createElement12,
4684
4884
  deleteElement,
4685
4885
  getWidgetsCache: getWidgetsCache8,
4686
4886
  generateElementId: generateElementId2,
@@ -5216,7 +5416,7 @@ var initBuildCompositionsTool = (reg) => {
5216
5416
  const targetContainer = getCompositionTargetContainer(documentContainer, currentDocument?.type.value);
5217
5417
  try {
5218
5418
  const compositionBuilder = CompositionBuilder.fromXMLString(xmlStructure, {
5219
- createElement: createElement12,
5419
+ createElement: createElement13,
5220
5420
  deleteElement: deleteElement2,
5221
5421
  getWidgetsCache: getWidgetsCache9
5222
5422
  });
@@ -6250,7 +6450,7 @@ var getLegacyPanelElementView = ({ settings, ...rest }) => {
6250
6450
  var GLOBAL_STYLES_IMPORTED_EVENT = "elementor/global-styles/imported";
6251
6451
 
6252
6452
  // src/components/spotlight-backdrop.tsx
6253
- import * as React11 from "react";
6453
+ import * as React12 from "react";
6254
6454
  function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
6255
6455
  const rect = useElementRect(element);
6256
6456
  const clipPath = element ? getRectClipPath(rect, canvas.defaultView) : void 0;
@@ -6272,7 +6472,7 @@ function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
6272
6472
  onExit();
6273
6473
  }
6274
6474
  };
6275
- return /* @__PURE__ */ React11.createElement(
6475
+ return /* @__PURE__ */ React12.createElement(
6276
6476
  "div",
6277
6477
  {
6278
6478
  style: backdropStyle,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-canvas",
3
3
  "description": "Elementor Editor Canvas",
4
- "version": "4.2.0-926",
4
+ "version": "4.2.0-928",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,25 +37,25 @@
37
37
  "react-dom": "^18.3.1"
38
38
  },
39
39
  "dependencies": {
40
- "@elementor/editor": "4.2.0-926",
40
+ "@elementor/editor": "4.2.0-928",
41
41
  "dompurify": "^3.2.6",
42
- "@elementor/editor-controls": "4.2.0-926",
43
- "@elementor/editor-documents": "4.2.0-926",
44
- "@elementor/editor-elements": "4.2.0-926",
45
- "@elementor/editor-interactions": "4.2.0-926",
46
- "@elementor/editor-mcp": "4.2.0-926",
47
- "@elementor/editor-notifications": "4.2.0-926",
48
- "@elementor/editor-props": "4.2.0-926",
49
- "@elementor/editor-responsive": "4.2.0-926",
50
- "@elementor/editor-styles": "4.2.0-926",
51
- "@elementor/editor-styles-repository": "4.2.0-926",
52
- "@elementor/editor-ui": "4.2.0-926",
53
- "@elementor/editor-v1-adapters": "4.2.0-926",
54
- "@elementor/schema": "4.2.0-926",
55
- "@elementor/twing": "4.2.0-926",
42
+ "@elementor/editor-controls": "4.2.0-928",
43
+ "@elementor/editor-documents": "4.2.0-928",
44
+ "@elementor/editor-elements": "4.2.0-928",
45
+ "@elementor/editor-interactions": "4.2.0-928",
46
+ "@elementor/editor-mcp": "4.2.0-928",
47
+ "@elementor/editor-notifications": "4.2.0-928",
48
+ "@elementor/editor-props": "4.2.0-928",
49
+ "@elementor/editor-responsive": "4.2.0-928",
50
+ "@elementor/editor-styles": "4.2.0-928",
51
+ "@elementor/editor-styles-repository": "4.2.0-928",
52
+ "@elementor/editor-ui": "4.2.0-928",
53
+ "@elementor/editor-v1-adapters": "4.2.0-928",
54
+ "@elementor/schema": "4.2.0-928",
55
+ "@elementor/twing": "4.2.0-928",
56
56
  "@elementor/ui": "1.37.5",
57
- "@elementor/utils": "4.2.0-926",
58
- "@elementor/wp-media": "4.2.0-926",
57
+ "@elementor/utils": "4.2.0-928",
58
+ "@elementor/wp-media": "4.2.0-928",
59
59
  "@floating-ui/react": "^0.27.5",
60
60
  "@wordpress/i18n": "^5.13.0"
61
61
  },