@elementor/editor-canvas 4.2.0-927 → 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.js CHANGED
@@ -422,16 +422,16 @@ var renameClass = (oldClassName, newClassName) => {
422
422
  };
423
423
 
424
424
  // src/components/elements-overlays.tsx
425
- var React6 = __toESM(require("react"));
425
+ var React7 = __toESM(require("react"));
426
426
  var import_editor_elements5 = require("@elementor/editor-elements");
427
427
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
428
428
 
429
429
  // src/components/grid-outline/grid-outline-overlay.tsx
430
- var React5 = __toESM(require("react"));
430
+ var React6 = __toESM(require("react"));
431
431
  var import_editor_elements4 = require("@elementor/editor-elements");
432
432
  var import_editor_props2 = require("@elementor/editor-props");
433
433
  var import_ui2 = require("@elementor/ui");
434
- var import_react9 = require("@floating-ui/react");
434
+ var import_react10 = require("@floating-ui/react");
435
435
 
436
436
  // src/hooks/use-element-rect.ts
437
437
  var import_react2 = require("react");
@@ -786,7 +786,170 @@ var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
786
786
  };
787
787
 
788
788
  // src/components/grid-outline/grid-outline.tsx
789
- var React4 = __toESM(require("react"));
789
+ var React5 = __toESM(require("react"));
790
+ var import_react9 = require("react");
791
+
792
+ // src/utils/find-first-empty-cell.ts
793
+ function findFirstEmptyCell(element, columnCount, rowCount) {
794
+ if (!element || columnCount === 0 || rowCount === 0) {
795
+ return null;
796
+ }
797
+ const previewWindow = element.ownerDocument?.defaultView;
798
+ if (!previewWindow) {
799
+ return null;
800
+ }
801
+ const containerStyle = previewWindow.getComputedStyle(element);
802
+ const flowsByColumn = containerStyle.gridAutoFlow.trim().startsWith("column");
803
+ const matrix = Array.from({ length: rowCount }, () => new Array(columnCount).fill(false));
804
+ const explicit = [];
805
+ const autoPlaced = [];
806
+ for (const child of Array.from(element.children)) {
807
+ if (!child.classList.contains("elementor-element")) {
808
+ continue;
809
+ }
810
+ const style = previewWindow.getComputedStyle(child);
811
+ if (style.display === "none") {
812
+ continue;
813
+ }
814
+ const col = resolvePlacement(style.gridColumnStart, style.gridColumnEnd);
815
+ const row = resolvePlacement(style.gridRowStart, style.gridRowEnd);
816
+ if (col.start !== null || row.start !== null) {
817
+ explicit.push({ col: col.start, colSpan: col.span, row: row.start, rowSpan: row.span });
818
+ } else {
819
+ autoPlaced.push({ colSpan: col.span, rowSpan: row.span });
820
+ }
821
+ }
822
+ for (const child of explicit) {
823
+ fillMatrix(matrix, child.col ?? 0, child.row ?? 0, child.colSpan, child.rowSpan);
824
+ }
825
+ for (const child of autoPlaced) {
826
+ const slot = findNextFreeSlot(matrix, child.colSpan, child.rowSpan, flowsByColumn);
827
+ if (slot) {
828
+ fillMatrix(matrix, slot.col, slot.row, child.colSpan, child.rowSpan);
829
+ }
830
+ }
831
+ return scanFirstEmpty(matrix, flowsByColumn);
832
+ }
833
+ function resolvePlacement(startRaw, endRaw) {
834
+ const start = parseLineValue(startRaw);
835
+ const end = parseLineValue(endRaw);
836
+ if (typeof start === "number") {
837
+ const zeroIndexedStart = start - 1;
838
+ if (typeof end === "number") {
839
+ return { start: zeroIndexedStart, span: Math.max(1, end - start) };
840
+ }
841
+ if (isSpan(end)) {
842
+ return { start: zeroIndexedStart, span: end.n };
843
+ }
844
+ return { start: zeroIndexedStart, span: 1 };
845
+ }
846
+ if (isSpan(start)) {
847
+ if (typeof end === "number") {
848
+ const zeroIndexedStart = end - 1 - start.n;
849
+ return { start: zeroIndexedStart >= 0 ? zeroIndexedStart : null, span: start.n };
850
+ }
851
+ return { start: null, span: start.n };
852
+ }
853
+ if (typeof end === "number") {
854
+ const zeroIndexedStart = end - 2;
855
+ return { start: zeroIndexedStart >= 0 ? zeroIndexedStart : null, span: 1 };
856
+ }
857
+ if (isSpan(end)) {
858
+ return { start: null, span: end.n };
859
+ }
860
+ return { start: null, span: 1 };
861
+ }
862
+ function parseLineValue(raw) {
863
+ const trimmed = raw.trim();
864
+ if (trimmed === "" || trimmed === "auto") {
865
+ return "auto";
866
+ }
867
+ const spanMatch = trimmed.match(/^span\s+(\d+)$/);
868
+ if (spanMatch) {
869
+ const n = parseInt(spanMatch[1], 10);
870
+ return { kind: "span", n: Math.max(1, n) };
871
+ }
872
+ const parsed = parseInt(trimmed, 10);
873
+ if (Number.isFinite(parsed) && parsed > 0) {
874
+ return parsed;
875
+ }
876
+ return "auto";
877
+ }
878
+ function isSpan(value) {
879
+ return typeof value === "object" && value !== null && "kind" in value && value.kind === "span";
880
+ }
881
+ function fillMatrix(matrix, col, row, colSpan, rowSpan) {
882
+ const rows = matrix.length;
883
+ const cols = rows > 0 ? matrix[0].length : 0;
884
+ const startRow = Math.max(0, row);
885
+ const startCol = Math.max(0, col);
886
+ const endRow = Math.min(rows, row + rowSpan);
887
+ const endCol = Math.min(cols, col + colSpan);
888
+ for (let r = startRow; r < endRow; r++) {
889
+ for (let c = startCol; c < endCol; c++) {
890
+ matrix[r][c] = true;
891
+ }
892
+ }
893
+ }
894
+ function findNextFreeSlot(matrix, colSpan, rowSpan, flowsByColumn) {
895
+ const rows = matrix.length;
896
+ const cols = rows > 0 ? matrix[0].length : 0;
897
+ const maxCol = cols - colSpan;
898
+ const maxRow = rows - rowSpan;
899
+ if (maxCol < 0 || maxRow < 0) {
900
+ return null;
901
+ }
902
+ if (flowsByColumn) {
903
+ for (let col = 0; col <= maxCol; col++) {
904
+ for (let row = 0; row <= maxRow; row++) {
905
+ if (canFit(matrix, col, row, colSpan, rowSpan)) {
906
+ return { row, col };
907
+ }
908
+ }
909
+ }
910
+ } else {
911
+ for (let row = 0; row <= maxRow; row++) {
912
+ for (let col = 0; col <= maxCol; col++) {
913
+ if (canFit(matrix, col, row, colSpan, rowSpan)) {
914
+ return { row, col };
915
+ }
916
+ }
917
+ }
918
+ }
919
+ return null;
920
+ }
921
+ function canFit(matrix, col, row, colSpan, rowSpan) {
922
+ for (let r = row; r < row + rowSpan; r++) {
923
+ for (let c = col; c < col + colSpan; c++) {
924
+ if (matrix[r][c]) {
925
+ return false;
926
+ }
927
+ }
928
+ }
929
+ return true;
930
+ }
931
+ function scanFirstEmpty(matrix, flowsByColumn) {
932
+ const rows = matrix.length;
933
+ const cols = rows > 0 ? matrix[0].length : 0;
934
+ if (flowsByColumn) {
935
+ for (let col = 0; col < cols; col++) {
936
+ for (let row = 0; row < rows; row++) {
937
+ if (!matrix[row][col]) {
938
+ return { row, col };
939
+ }
940
+ }
941
+ }
942
+ } else {
943
+ for (let row = 0; row < rows; row++) {
944
+ for (let col = 0; col < cols; col++) {
945
+ if (!matrix[row][col]) {
946
+ return { row, col };
947
+ }
948
+ }
949
+ }
950
+ }
951
+ return null;
952
+ }
790
953
 
791
954
  // src/components/grid-outline/cell.tsx
792
955
  var React2 = __toESM(require("react"));
@@ -808,11 +971,40 @@ function Cell({ x, y, width, height, color }) {
808
971
  );
809
972
  }
810
973
 
811
- // src/components/grid-outline/line.tsx
974
+ // src/components/grid-outline/first-empty-cell.tsx
812
975
  var React3 = __toESM(require("react"));
976
+ var GLYPH_SIZE = 19;
977
+ function FirstEmptyCell({ rect, color }) {
978
+ const size2 = Math.min(GLYPH_SIZE, rect.width, rect.height);
979
+ if (size2 <= 0) {
980
+ return null;
981
+ }
982
+ const centerX = rect.x + rect.width / 2;
983
+ const centerY = rect.y + rect.height / 2;
984
+ return /* @__PURE__ */ React3.createElement(
985
+ "i",
986
+ {
987
+ className: "eicon-plus",
988
+ "aria-hidden": "true",
989
+ style: {
990
+ position: "absolute",
991
+ left: centerX,
992
+ top: centerY,
993
+ transform: "translate(-50%, -50%)",
994
+ fontSize: size2,
995
+ color,
996
+ lineHeight: 1,
997
+ pointerEvents: "none"
998
+ }
999
+ }
1000
+ );
1001
+ }
1002
+
1003
+ // src/components/grid-outline/line.tsx
1004
+ var React4 = __toESM(require("react"));
813
1005
  var FALLBACK_COLOR2 = "rgba(0, 0, 0, 0.12)";
814
1006
  function Line({ x1, y1, x2, y2, color }) {
815
- return /* @__PURE__ */ React3.createElement(
1007
+ return /* @__PURE__ */ React4.createElement(
816
1008
  "line",
817
1009
  {
818
1010
  x1,
@@ -828,7 +1020,7 @@ function Line({ x1, y1, x2, y2, color }) {
828
1020
  }
829
1021
 
830
1022
  // src/components/grid-outline/grid-outline.tsx
831
- var renderCells = (tracks, width, height) => computeCellRects(tracks, width, height).map((cell, i) => /* @__PURE__ */ React4.createElement(
1023
+ var renderCells = (cells, color) => cells.map((cell, i) => /* @__PURE__ */ React5.createElement(
832
1024
  Cell,
833
1025
  {
834
1026
  key: i,
@@ -836,13 +1028,13 @@ var renderCells = (tracks, width, height) => computeCellRects(tracks, width, hei
836
1028
  y: snapToHalfPixel(cell.y),
837
1029
  width: Math.round(cell.width),
838
1030
  height: Math.round(cell.height),
839
- color: tracks.borderColor
1031
+ color
840
1032
  }
841
1033
  ));
842
1034
  var renderLines = (tracks, width, height) => {
843
1035
  const { vertical, horizontal } = computeGridLines(tracks, width, height);
844
1036
  return [
845
- ...vertical.map((line, i) => /* @__PURE__ */ React4.createElement(
1037
+ ...vertical.map((line, i) => /* @__PURE__ */ React5.createElement(
846
1038
  Line,
847
1039
  {
848
1040
  key: `v${i}`,
@@ -853,7 +1045,7 @@ var renderLines = (tracks, width, height) => {
853
1045
  color: tracks.borderColor
854
1046
  }
855
1047
  )),
856
- ...horizontal.map((line, i) => /* @__PURE__ */ React4.createElement(
1048
+ ...horizontal.map((line, i) => /* @__PURE__ */ React5.createElement(
857
1049
  Line,
858
1050
  {
859
1051
  key: `h${i}`,
@@ -866,9 +1058,15 @@ var renderLines = (tracks, width, height) => {
866
1058
  ))
867
1059
  ];
868
1060
  };
869
- function GridOutline({ tracks, width, height }) {
1061
+ function GridOutline({ element, tracks, width, height }) {
1062
+ const cells = (0, import_react9.useMemo)(() => computeCellRects(tracks, width, height), [tracks, width, height]);
870
1063
  const hasGap = tracks.columnGap > 0 || tracks.rowGap > 0;
871
- return /* @__PURE__ */ React4.createElement(
1064
+ const firstEmpty = (0, import_react9.useMemo)(
1065
+ () => findFirstEmptyCell(element, tracks.columns.length, tracks.rows.length),
1066
+ [element, tracks]
1067
+ );
1068
+ const emptyCellRect = firstEmpty && tracks.columns.length > 0 ? cells[firstEmpty.row * tracks.columns.length + firstEmpty.col] : null;
1069
+ return /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement(
872
1070
  "svg",
873
1071
  {
874
1072
  width,
@@ -876,8 +1074,8 @@ function GridOutline({ tracks, width, height }) {
876
1074
  style: { position: "absolute", inset: 0, overflow: "visible" },
877
1075
  xmlns: "http://www.w3.org/2000/svg"
878
1076
  },
879
- hasGap ? renderCells(tracks, width, height) : renderLines(tracks, width, height)
880
- );
1077
+ hasGap ? renderCells(cells, tracks.borderColor) : renderLines(tracks, width, height)
1078
+ ), emptyCellRect && /* @__PURE__ */ React5.createElement(FirstEmptyCell, { rect: emptyCellRect, color: tracks.borderColor }));
881
1079
  }
882
1080
 
883
1081
  // src/components/grid-outline/grid-outline-overlay.tsx
@@ -893,7 +1091,7 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
893
1091
  if (tracks.columns.length === 0 && tracks.rows.length === 0) {
894
1092
  return null;
895
1093
  }
896
- return /* @__PURE__ */ React5.createElement(import_react9.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React5.createElement(
1094
+ return /* @__PURE__ */ React6.createElement(import_react10.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React6.createElement(
897
1095
  import_ui2.Box,
898
1096
  {
899
1097
  ref: floating.setRef,
@@ -901,7 +1099,7 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
901
1099
  "data-grid-outline": id,
902
1100
  role: "presentation"
903
1101
  },
904
- /* @__PURE__ */ React5.createElement(GridOutline, { tracks, width: rect.width, height: rect.height })
1102
+ /* @__PURE__ */ React6.createElement(GridOutline, { element, tracks, width: rect.width, height: rect.height })
905
1103
  ));
906
1104
  };
907
1105
 
@@ -930,7 +1128,7 @@ function ElementsOverlays() {
930
1128
  return elements.map(({ id, domElement, isGlobal }) => {
931
1129
  const isSelected = selected.element?.id === id;
932
1130
  return overlayRegistry.map(
933
- ({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */ React6.createElement(
1131
+ ({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */ React7.createElement(
934
1132
  Overlay,
935
1133
  {
936
1134
  key: `${id}-${index}`,
@@ -963,20 +1161,20 @@ function isV4Element(dataset) {
963
1161
  }
964
1162
 
965
1163
  // src/components/interactions-renderer.tsx
966
- var React7 = __toESM(require("react"));
1164
+ var React8 = __toESM(require("react"));
967
1165
  var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
968
1166
  var import_ui3 = require("@elementor/ui");
969
1167
 
970
1168
  // src/hooks/use-interactions-items.ts
971
- var import_react11 = require("react");
1169
+ var import_react12 = require("react");
972
1170
  var import_editor_interactions = require("@elementor/editor-interactions");
973
1171
  var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
974
1172
 
975
1173
  // src/hooks/use-on-mount.ts
976
- var import_react10 = require("react");
1174
+ var import_react11 = require("react");
977
1175
  function useOnMount(cb) {
978
- const mounted = (0, import_react10.useRef)(false);
979
- (0, import_react10.useEffect)(() => {
1176
+ const mounted = (0, import_react11.useRef)(false);
1177
+ (0, import_react11.useEffect)(() => {
980
1178
  if (!mounted.current) {
981
1179
  mounted.current = true;
982
1180
  cb();
@@ -986,8 +1184,8 @@ function useOnMount(cb) {
986
1184
 
987
1185
  // src/hooks/use-interactions-items.ts
988
1186
  function useInteractionsItems() {
989
- const [interactionItems, setInteractionItems] = (0, import_react11.useState)({});
990
- const providerAndSubscribers = (0, import_react11.useMemo)(() => {
1187
+ const [interactionItems, setInteractionItems] = (0, import_react12.useState)({});
1188
+ const providerAndSubscribers = (0, import_react12.useMemo)(() => {
991
1189
  try {
992
1190
  const providers = import_editor_interactions.interactionsRepository.getProviders();
993
1191
  const mapped = providers.map((provider) => {
@@ -1004,7 +1202,7 @@ function useInteractionsItems() {
1004
1202
  return [];
1005
1203
  }
1006
1204
  }, []);
1007
- (0, import_react11.useEffect)(() => {
1205
+ (0, import_react12.useEffect)(() => {
1008
1206
  if (providerAndSubscribers.length === 0) {
1009
1207
  return;
1010
1208
  }
@@ -1035,7 +1233,7 @@ function useInteractionsItems() {
1035
1233
  });
1036
1234
  });
1037
1235
  });
1038
- return (0, import_react11.useMemo)(() => {
1236
+ return (0, import_react12.useMemo)(() => {
1039
1237
  const result = Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items);
1040
1238
  return result;
1041
1239
  }, [interactionItems]);
@@ -1065,7 +1263,7 @@ function InteractionsRenderer() {
1065
1263
  return null;
1066
1264
  }
1067
1265
  const interactionsData = JSON.stringify(Array.isArray(interactionItems) ? interactionItems : []);
1068
- return /* @__PURE__ */ React7.createElement(import_ui3.Portal, { container }, /* @__PURE__ */ React7.createElement(
1266
+ return /* @__PURE__ */ React8.createElement(import_ui3.Portal, { container }, /* @__PURE__ */ React8.createElement(
1069
1267
  "script",
1070
1268
  {
1071
1269
  type: "application/json",
@@ -1081,7 +1279,7 @@ function usePortalContainer() {
1081
1279
  }
1082
1280
 
1083
1281
  // src/components/style-renderer.tsx
1084
- var React8 = __toESM(require("react"));
1282
+ var React9 = __toESM(require("react"));
1085
1283
  var import_editor_v1_adapters10 = require("@elementor/editor-v1-adapters");
1086
1284
  var import_ui4 = require("@elementor/ui");
1087
1285
 
@@ -1133,7 +1331,7 @@ function getLinkAttrs(el) {
1133
1331
  }
1134
1332
 
1135
1333
  // src/hooks/use-style-items.ts
1136
- var import_react14 = require("react");
1334
+ var import_react15 = require("react");
1137
1335
  var import_editor_responsive2 = require("@elementor/editor-responsive");
1138
1336
  var import_editor_styles4 = require("@elementor/editor-styles");
1139
1337
  var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
@@ -1195,7 +1393,7 @@ function signalizedProcess(signal, steps = []) {
1195
1393
  }
1196
1394
 
1197
1395
  // src/hooks/use-style-prop-resolver.ts
1198
- var import_react12 = require("react");
1396
+ var import_react13 = require("react");
1199
1397
  var import_editor_styles2 = require("@elementor/editor-styles");
1200
1398
  var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
1201
1399
 
@@ -1323,7 +1521,7 @@ var styleTransformersRegistry = createTransformersRegistry();
1323
1521
 
1324
1522
  // src/hooks/use-style-prop-resolver.ts
1325
1523
  function useStylePropResolver() {
1326
- return (0, import_react12.useMemo)(() => {
1524
+ return (0, import_react13.useMemo)(() => {
1327
1525
  return createPropsResolver({
1328
1526
  transformers: styleTransformersRegistry,
1329
1527
  schema: (0, import_editor_styles2.getStylesSchema)(),
@@ -1338,7 +1536,7 @@ function useStylePropResolver() {
1338
1536
  }
1339
1537
 
1340
1538
  // src/hooks/use-style-renderer.ts
1341
- var import_react13 = require("react");
1539
+ var import_react14 = require("react");
1342
1540
  var import_editor_responsive = require("@elementor/editor-responsive");
1343
1541
 
1344
1542
  // src/renderers/create-styles-renderer.ts
@@ -1447,7 +1645,7 @@ function customCssToString(customCss) {
1447
1645
  var SELECTOR_PREFIX = ".elementor";
1448
1646
  function useStyleRenderer(resolve) {
1449
1647
  const breakpoints = (0, import_editor_responsive.useBreakpointsMap)();
1450
- return (0, import_react13.useMemo)(() => {
1648
+ return (0, import_react14.useMemo)(() => {
1451
1649
  return createStylesRenderer({
1452
1650
  selectorPrefix: SELECTOR_PREFIX,
1453
1651
  breakpoints,
@@ -1461,9 +1659,9 @@ function useStyleItems() {
1461
1659
  const resolve = useStylePropResolver();
1462
1660
  const renderStyles = useStyleRenderer(resolve);
1463
1661
  const breakpoints = (0, import_editor_responsive2.useBreakpoints)();
1464
- const [styleItems, setStyleItems] = (0, import_react14.useState)({});
1465
- const styleItemsCacheRef = (0, import_react14.useRef)(/* @__PURE__ */ new Map());
1466
- const providerAndSubscribers = (0, import_react14.useMemo)(() => {
1662
+ const [styleItems, setStyleItems] = (0, import_react15.useState)({});
1663
+ const styleItemsCacheRef = (0, import_react15.useRef)(/* @__PURE__ */ new Map());
1664
+ const providerAndSubscribers = (0, import_react15.useMemo)(() => {
1467
1665
  const createEmptyCache = () => {
1468
1666
  return { orderedIds: [], itemsById: /* @__PURE__ */ new Map() };
1469
1667
  };
@@ -1489,7 +1687,7 @@ function useStyleItems() {
1489
1687
  })
1490
1688
  );
1491
1689
  }, [renderStyles]);
1492
- (0, import_react14.useEffect)(() => {
1690
+ (0, import_react15.useEffect)(() => {
1493
1691
  const unsubscribes = providerAndSubscribers.map(
1494
1692
  ({ provider, subscriber }) => provider.subscribe(subscriber)
1495
1693
  );
@@ -1504,11 +1702,11 @@ function useStyleItems() {
1504
1702
  await Promise.all(promises);
1505
1703
  });
1506
1704
  });
1507
- const breakpointSorter = (0, import_react14.useMemo)(
1705
+ const breakpointSorter = (0, import_react15.useMemo)(
1508
1706
  () => createBreakpointSorter(breakpoints.map((breakpoint) => breakpoint.id)),
1509
1707
  [breakpoints]
1510
1708
  );
1511
- return (0, import_react14.useMemo)(
1709
+ return (0, import_react15.useMemo)(
1512
1710
  () => Object.values(styleItems).sort(prioritySorter).flatMap(({ items }) => items).sort(stateSorter).sort(breakpointSorter),
1513
1711
  [styleItems, breakpointSorter]
1514
1712
  );
@@ -1650,7 +1848,7 @@ function StyleRenderer() {
1650
1848
  if (!container) {
1651
1849
  return null;
1652
1850
  }
1653
- return /* @__PURE__ */ React8.createElement(import_ui4.Portal, { 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 })));
1851
+ return /* @__PURE__ */ React9.createElement(import_ui4.Portal, { 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 })));
1654
1852
  }
1655
1853
  function usePortalContainer2() {
1656
1854
  return (0, import_editor_v1_adapters10.__privateUseListenTo)((0, import_editor_v1_adapters10.commandEndEvent)("editor/documents/attach-preview"), () => (0, import_editor_v1_adapters10.getCanvasIframeDocument)()?.head);
@@ -3122,7 +3320,7 @@ function createPromotionView(BaseView) {
3122
3320
  var import_client = require("react-dom/client");
3123
3321
 
3124
3322
  // src/legacy/replacements/inline-editing/inline-editing-elements.tsx
3125
- var React10 = __toESM(require("react"));
3323
+ var React11 = __toESM(require("react"));
3126
3324
  var import_editor_elements9 = require("@elementor/editor-elements");
3127
3325
  var import_editor_props5 = require("@elementor/editor-props");
3128
3326
  var import_editor_v1_adapters13 = require("@elementor/editor-v1-adapters");
@@ -3171,14 +3369,14 @@ var ReplacementBase = class {
3171
3369
  };
3172
3370
 
3173
3371
  // src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
3174
- var React9 = __toESM(require("react"));
3175
- var import_react16 = require("react");
3372
+ var React10 = __toESM(require("react"));
3373
+ var import_react17 = require("react");
3176
3374
  var import_editor_controls2 = require("@elementor/editor-controls");
3177
3375
  var import_ui5 = require("@elementor/ui");
3178
- var import_react17 = require("@floating-ui/react");
3376
+ var import_react18 = require("@floating-ui/react");
3179
3377
 
3180
3378
  // src/legacy/replacements/inline-editing/inline-editing-utils.ts
3181
- var import_react15 = require("react");
3379
+ var import_react16 = require("react");
3182
3380
  var TOP_BAR_SELECTOR = "#elementor-editor-wrapper-v2";
3183
3381
  var NAVIGATOR_SELECTOR = "#elementor-navigator";
3184
3382
  var EDITING_PANEL = "#elementor-panel";
@@ -3209,8 +3407,8 @@ var getInlineEditorElement = (elementWrapper, expectedTag) => {
3209
3407
  return !expectedTag ? null : elementWrapper.querySelector(expectedTag);
3210
3408
  };
3211
3409
  var useOnClickOutsideIframe = (handleUnmount) => {
3212
- const asyncUnmountInlineEditor = (0, import_react15.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
3213
- (0, import_react15.useEffect)(() => {
3410
+ const asyncUnmountInlineEditor = (0, import_react16.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
3411
+ (0, import_react16.useEffect)(() => {
3214
3412
  EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach(
3215
3413
  (selector) => document?.querySelector(selector)?.addEventListener("mousedown", asyncUnmountInlineEditor)
3216
3414
  );
@@ -3220,8 +3418,8 @@ var useOnClickOutsideIframe = (handleUnmount) => {
3220
3418
  }, []);
3221
3419
  };
3222
3420
  var useRenderToolbar = (ownerDocument, id) => {
3223
- const [anchor, setAnchor] = (0, import_react15.useState)(null);
3224
- (0, import_react15.useEffect)(() => {
3421
+ const [anchor, setAnchor] = (0, import_react16.useState)(null);
3422
+ (0, import_react16.useEffect)(() => {
3225
3423
  if (!anchor) {
3226
3424
  removeToolbarAnchor(ownerDocument, id);
3227
3425
  }
@@ -3235,7 +3433,7 @@ var useRenderToolbar = (ownerDocument, id) => {
3235
3433
  setAnchor(null);
3236
3434
  }
3237
3435
  };
3238
- const clearAnchor = (0, import_react15.useCallback)(() => {
3436
+ const clearAnchor = (0, import_react16.useCallback)(() => {
3239
3437
  setAnchor(null);
3240
3438
  }, []);
3241
3439
  return { onSelectionEnd, anchor, clearAnchor };
@@ -3315,21 +3513,21 @@ var CanvasInlineEditor = ({
3315
3513
  setValue,
3316
3514
  requestDestroy
3317
3515
  }) => {
3318
- const [active, setActive] = (0, import_react16.useState)(true);
3319
- const [editor, setEditor] = (0, import_react16.useState)(null);
3516
+ const [active, setActive] = (0, import_react17.useState)(true);
3517
+ const [editor, setEditor] = (0, import_react17.useState)(null);
3320
3518
  const { onSelectionEnd, anchor: toolbarAnchor, clearAnchor } = useRenderToolbar(rootElement.ownerDocument, id);
3321
- (0, import_react16.useEffect)(() => {
3519
+ (0, import_react17.useEffect)(() => {
3322
3520
  if (!active) {
3323
3521
  clearAnchor();
3324
3522
  requestDestroy();
3325
3523
  }
3326
3524
  }, [active, clearAnchor, requestDestroy]);
3327
- const dismiss = (0, import_react16.useCallback)(() => {
3525
+ const dismiss = (0, import_react17.useCallback)(() => {
3328
3526
  setEditor(null);
3329
3527
  setActive(false);
3330
3528
  }, []);
3331
3529
  useOnClickOutsideIframe(dismiss);
3332
- (0, import_react16.useEffect)(() => {
3530
+ (0, import_react17.useEffect)(() => {
3333
3531
  const ownerDocument = contentElement.ownerDocument;
3334
3532
  const handleClickAway = (event) => {
3335
3533
  if (contentElement.contains(event.target)) {
@@ -3343,7 +3541,7 @@ var CanvasInlineEditor = ({
3343
3541
  if (!active) {
3344
3542
  return null;
3345
3543
  }
3346
- return /* @__PURE__ */ React9.createElement(import_ui5.ThemeProvider, null, /* @__PURE__ */ React9.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React9.createElement(
3544
+ return /* @__PURE__ */ React10.createElement(import_ui5.ThemeProvider, null, /* @__PURE__ */ React10.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React10.createElement(
3347
3545
  import_editor_controls2.InlineEditor,
3348
3546
  {
3349
3547
  onEditorCreate: setEditor,
@@ -3360,7 +3558,7 @@ var CanvasInlineEditor = ({
3360
3558
  autofocus: true,
3361
3559
  onSelectionEnd
3362
3560
  }
3363
- ), toolbarAnchor && editor && /* @__PURE__ */ React9.createElement(InlineEditingToolbar, { anchor: toolbarAnchor, editor, id }));
3561
+ ), toolbarAnchor && editor && /* @__PURE__ */ React10.createElement(InlineEditingToolbar, { anchor: toolbarAnchor, editor, id }));
3364
3562
  };
3365
3563
  var InlineEditingOverlay = ({
3366
3564
  expectedTag,
@@ -3368,25 +3566,25 @@ var InlineEditingOverlay = ({
3368
3566
  id
3369
3567
  }) => {
3370
3568
  const inlineEditedElement = getInlineEditorElement(rootElement, expectedTag);
3371
- const [overlayRefElement, setOverlayElement] = (0, import_react16.useState)(inlineEditedElement);
3372
- (0, import_react16.useEffect)(() => {
3569
+ const [overlayRefElement, setOverlayElement] = (0, import_react17.useState)(inlineEditedElement);
3570
+ (0, import_react17.useEffect)(() => {
3373
3571
  setOverlayElement(getInlineEditorElement(rootElement, expectedTag));
3374
3572
  }, [expectedTag, rootElement]);
3375
- return overlayRefElement ? /* @__PURE__ */ React9.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
3573
+ return overlayRefElement ? /* @__PURE__ */ React10.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
3376
3574
  };
3377
3575
  var InlineEditingToolbar = ({ anchor, editor, id }) => {
3378
- const { refs, floatingStyles } = (0, import_react17.useFloating)({
3576
+ const { refs, floatingStyles } = (0, import_react18.useFloating)({
3379
3577
  placement: "top",
3380
3578
  strategy: "fixed",
3381
3579
  transform: false,
3382
- whileElementsMounted: import_react17.autoUpdate,
3383
- middleware: [horizontalShifterMiddleware, (0, import_react17.flip)()]
3580
+ whileElementsMounted: import_react18.autoUpdate,
3581
+ middleware: [horizontalShifterMiddleware, (0, import_react18.flip)()]
3384
3582
  });
3385
- (0, import_react16.useLayoutEffect)(() => {
3583
+ (0, import_react17.useLayoutEffect)(() => {
3386
3584
  refs.setReference(anchor);
3387
3585
  return () => refs.setReference(null);
3388
3586
  }, [anchor, refs]);
3389
- return /* @__PURE__ */ React9.createElement(import_react17.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React9.createElement(
3587
+ return /* @__PURE__ */ React10.createElement(import_react18.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React10.createElement(
3390
3588
  import_ui5.Box,
3391
3589
  {
3392
3590
  ref: refs.setFloating,
@@ -3396,7 +3594,7 @@ var InlineEditingToolbar = ({ anchor, editor, id }) => {
3396
3594
  pointerEvents: "none"
3397
3595
  }
3398
3596
  },
3399
- /* @__PURE__ */ React9.createElement(import_editor_controls2.InlineEditorToolbar, { editor, elementId: id })
3597
+ /* @__PURE__ */ React10.createElement(import_editor_controls2.InlineEditorToolbar, { editor, elementId: id })
3400
3598
  ));
3401
3599
  };
3402
3600
 
@@ -3605,7 +3803,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
3605
3803
  contentElement.innerHTML = "";
3606
3804
  this.editing = true;
3607
3805
  this.reactRoot.render(
3608
- /* @__PURE__ */ React10.createElement(
3806
+ /* @__PURE__ */ React11.createElement(
3609
3807
  CanvasInlineEditor,
3610
3808
  {
3611
3809
  elementClasses,
@@ -6249,7 +6447,7 @@ var getLegacyPanelElementView = ({ settings, ...rest }) => {
6249
6447
  var GLOBAL_STYLES_IMPORTED_EVENT = "elementor/global-styles/imported";
6250
6448
 
6251
6449
  // src/components/spotlight-backdrop.tsx
6252
- var React11 = __toESM(require("react"));
6450
+ var React12 = __toESM(require("react"));
6253
6451
  function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
6254
6452
  const rect = useElementRect(element);
6255
6453
  const clipPath = element ? getRectClipPath(rect, canvas.defaultView) : void 0;
@@ -6271,7 +6469,7 @@ function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
6271
6469
  onExit();
6272
6470
  }
6273
6471
  };
6274
- return /* @__PURE__ */ React11.createElement(
6472
+ return /* @__PURE__ */ React12.createElement(
6275
6473
  "div",
6276
6474
  {
6277
6475
  style: backdropStyle,
@@ -6296,9 +6494,9 @@ function useCanvasDocument() {
6296
6494
  }
6297
6495
 
6298
6496
  // src/hooks/use-escape-on-canvas.ts
6299
- var import_react18 = require("react");
6497
+ var import_react19 = require("react");
6300
6498
  function useEscapeOnCanvas(canvasDocument, onEscape) {
6301
- (0, import_react18.useEffect)(() => {
6499
+ (0, import_react19.useEffect)(() => {
6302
6500
  if (!canvasDocument) {
6303
6501
  return;
6304
6502
  }