@elementor/editor-canvas 4.3.0-951 → 4.3.0-953

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
@@ -446,12 +446,8 @@ var React7 = __toESM(require("react"));
446
446
  var import_editor_elements5 = require("@elementor/editor-elements");
447
447
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
448
448
 
449
- // src/components/grid-outline/grid-outline-overlay.tsx
450
- var React6 = __toESM(require("react"));
451
- var import_editor_elements4 = require("@elementor/editor-elements");
452
- var import_editor_props2 = require("@elementor/editor-props");
453
- var import_ui2 = require("@elementor/ui");
454
- var import_react10 = require("@floating-ui/react");
449
+ // src/components/grid-outline/grid-empty-cell-positioner.tsx
450
+ var import_react5 = require("react");
455
451
 
456
452
  // src/hooks/use-element-rect.ts
457
453
  var import_react2 = require("react");
@@ -516,49 +512,8 @@ function useMutationsListener({ element, onChange }) {
516
512
  }, [element, onChange]);
517
513
  }
518
514
 
519
- // src/hooks/use-floating-on-element.ts
520
- var import_react3 = require("react");
521
- var import_react4 = require("@floating-ui/react");
522
- function useFloatingOnElement({ element, isSelected }) {
523
- const [isOpen, setIsOpen] = (0, import_react3.useState)(false);
524
- const sizeModifier = 2;
525
- const { refs, floatingStyles, context } = (0, import_react4.useFloating)({
526
- // Must be controlled for interactions (like hover) to work.
527
- open: isOpen || isSelected,
528
- onOpenChange: setIsOpen,
529
- whileElementsMounted: import_react4.autoUpdate,
530
- middleware: [
531
- // Match the floating element's size to the reference element.
532
- (0, import_react4.size)(() => {
533
- return {
534
- apply({ elements, rects }) {
535
- Object.assign(elements.floating.style, {
536
- width: `${rects.reference.width + sizeModifier}px`,
537
- height: `${rects.reference.height + sizeModifier}px`
538
- });
539
- }
540
- };
541
- }),
542
- // Center the floating element on the reference element.
543
- (0, import_react4.offset)(({ rects }) => -rects.reference.height / 2 - rects.floating.height / 2)
544
- ]
545
- });
546
- (0, import_react3.useEffect)(() => {
547
- refs.setReference(element);
548
- }, [element, refs]);
549
- return {
550
- isVisible: isOpen || isSelected,
551
- context,
552
- floating: {
553
- setRef: refs.setFloating,
554
- ref: refs.floating,
555
- styles: floatingStyles
556
- }
557
- };
558
- }
559
-
560
515
  // src/hooks/use-grid-tracks.ts
561
- var import_react6 = require("react");
516
+ var import_react4 = require("react");
562
517
  var import_editor_elements3 = require("@elementor/editor-elements");
563
518
  var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
564
519
 
@@ -645,10 +600,10 @@ function toPx(value) {
645
600
  }
646
601
 
647
602
  // src/hooks/use-grid-children.ts
648
- var import_react5 = require("react");
603
+ var import_react3 = require("react");
649
604
  function useGridChildren(element) {
650
- const [signal, setSignal] = (0, import_react5.useState)(0);
651
- (0, import_react5.useEffect)(() => {
605
+ const [signal, setSignal] = (0, import_react3.useState)(0);
606
+ (0, import_react3.useEffect)(() => {
652
607
  if (!element) {
653
608
  return;
654
609
  }
@@ -695,13 +650,13 @@ var EMPTY = {
695
650
  };
696
651
  var DEVICE_MODE_CHANGE_EVENT = "elementor/device-mode/change";
697
652
  function useGridTracks(element, rect) {
698
- const [tracks, setTracks] = (0, import_react6.useState)(EMPTY);
653
+ const [tracks, setTracks] = (0, import_react4.useState)(EMPTY);
699
654
  const trigger = (0, import_editor_v1_adapters2.__privateUseListenTo)(
700
655
  [(0, import_editor_v1_adapters2.windowEvent)(import_editor_elements3.ELEMENT_STYLE_CHANGE_EVENT), (0, import_editor_v1_adapters2.windowEvent)(DEVICE_MODE_CHANGE_EVENT)],
701
656
  () => ({})
702
657
  );
703
658
  const childrenTrigger = useGridChildren(element);
704
- (0, import_react6.useEffect)(() => {
659
+ (0, import_react4.useEffect)(() => {
705
660
  const previewWindow = element?.ownerDocument?.defaultView;
706
661
  if (!element || !previewWindow) {
707
662
  setTracks(EMPTY);
@@ -717,98 +672,6 @@ function useGridTracks(element, rect) {
717
672
  return tracks;
718
673
  }
719
674
 
720
- // src/components/outline-overlay.tsx
721
- var React = __toESM(require("react"));
722
- var import_ui = require("@elementor/ui");
723
- var import_react8 = require("@floating-ui/react");
724
-
725
- // src/hooks/use-bind-react-props-to-element.ts
726
- var import_react7 = require("react");
727
- function useBindReactPropsToElement(element, getProps) {
728
- (0, import_react7.useEffect)(() => {
729
- const el = element;
730
- const { events, attrs } = groupProps(getProps());
731
- events.forEach(([eventName, listener]) => el.addEventListener(eventName, listener));
732
- attrs.forEach(([attrName, attrValue]) => el.setAttribute(attrName, attrValue));
733
- return () => {
734
- events.forEach(([eventName, listener]) => el.removeEventListener(eventName, listener));
735
- attrs.forEach(([attrName]) => el.removeAttribute(attrName));
736
- };
737
- }, [getProps, element]);
738
- }
739
- function groupProps(props) {
740
- const eventRegex = /^on(?=[A-Z])/;
741
- return Object.entries(props).reduce(
742
- (acc, [propName, propValue]) => {
743
- if (!eventRegex.test(propName)) {
744
- acc.attrs.push([propName, propValue]);
745
- return acc;
746
- }
747
- const eventName = propName.replace(eventRegex, "").toLowerCase();
748
- const listener = propValue;
749
- acc.events.push([eventName, listener]);
750
- return acc;
751
- },
752
- {
753
- events: [],
754
- attrs: []
755
- }
756
- );
757
- }
758
-
759
- // src/hooks/use-has-overlapping.ts
760
- var possibleOverlappingSelectors = [".e-off-canvas"];
761
- var useHasOverlapping = () => {
762
- const preview = window.elementor?.$preview?.[0];
763
- if (!preview) {
764
- return false;
765
- }
766
- const hasOverlapping = possibleOverlappingSelectors.map((selector) => Array.from(preview?.contentWindow?.document.body.querySelectorAll(selector) ?? [])).flat().some(
767
- (elem) => elem.checkVisibility({
768
- opacityProperty: true,
769
- visibilityProperty: true,
770
- contentVisibilityAuto: true
771
- })
772
- );
773
- return hasOverlapping;
774
- };
775
-
776
- // src/components/outline-overlay.tsx
777
- var CANVAS_WRAPPER_ID = "elementor-preview-responsive-wrapper";
778
- var OverlayBox = (0, import_ui.styled)(import_ui.Box, {
779
- shouldForwardProp: (prop) => prop !== "isSelected" && prop !== "isSmallerOffset" && prop !== "isGlobal"
780
- })(
781
- ({ theme, isSelected, isSmallerOffset, isGlobal }) => ({
782
- outline: `${isSelected ? "2px" : "1px"} solid ${isGlobal ? theme.palette.global.main : theme.palette.primary.light}`,
783
- outlineOffset: isSelected && !isSmallerOffset ? "-2px" : "-1px",
784
- pointerEvents: "none"
785
- })
786
- );
787
- var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
788
- const { context, floating, isVisible } = useFloatingOnElement({ element, isSelected });
789
- const { getFloatingProps, getReferenceProps } = (0, import_react8.useInteractions)([(0, import_react8.useHover)(context)]);
790
- const hasOverlapping = useHasOverlapping();
791
- useBindReactPropsToElement(element, getReferenceProps);
792
- const isSmallerOffset = element.offsetHeight <= 1;
793
- return isVisible && !hasOverlapping && /* @__PURE__ */ React.createElement(import_react8.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React.createElement(
794
- OverlayBox,
795
- {
796
- ref: floating.setRef,
797
- isSelected,
798
- isGlobal,
799
- style: floating.styles,
800
- "data-element-overlay": id,
801
- role: "presentation",
802
- isSmallerOffset,
803
- ...getFloatingProps()
804
- }
805
- ));
806
- };
807
-
808
- // src/components/grid-outline/grid-outline.tsx
809
- var React5 = __toESM(require("react"));
810
- var import_react9 = require("react");
811
-
812
675
  // src/utils/find-first-empty-cell.ts
813
676
  function findFirstEmptyCell(element, columnCount, rowCount) {
814
677
  if (!element || columnCount === 0 || rowCount === 0) {
@@ -971,6 +834,179 @@ function scanFirstEmpty(matrix, flowsByColumn) {
971
834
  return null;
972
835
  }
973
836
 
837
+ // src/components/grid-outline/grid-empty-cell-positioner.tsx
838
+ var CSS_VAR_ROW = "--e-grid-empty-cell-row";
839
+ var CSS_VAR_COL = "--e-grid-empty-cell-col";
840
+ var CSS_VAR_VISIBILITY = "--e-grid-empty-cell-visibility";
841
+ var clearGridEmptyCellStyles = (target) => {
842
+ target.style.removeProperty(CSS_VAR_ROW);
843
+ target.style.removeProperty(CSS_VAR_COL);
844
+ target.style.removeProperty(CSS_VAR_VISIBILITY);
845
+ };
846
+ var GridEmptyCellPositioner = ({ element }) => {
847
+ const rect = useElementRect(element);
848
+ const tracks = useGridTracks(element, rect);
849
+ (0, import_react5.useEffect)(() => {
850
+ if (!element) {
851
+ return;
852
+ }
853
+ const firstEmpty = findFirstEmptyCell(element, tracks.columns.length, tracks.rows.length);
854
+ if (!firstEmpty) {
855
+ element.style.removeProperty(CSS_VAR_ROW);
856
+ element.style.removeProperty(CSS_VAR_COL);
857
+ element.style.setProperty(CSS_VAR_VISIBILITY, "hidden");
858
+ return () => clearGridEmptyCellStyles(element);
859
+ }
860
+ element.style.setProperty(CSS_VAR_ROW, String(firstEmpty.row + 1));
861
+ element.style.setProperty(CSS_VAR_COL, String(firstEmpty.col + 1));
862
+ element.style.setProperty(CSS_VAR_VISIBILITY, "visible");
863
+ return () => {
864
+ clearGridEmptyCellStyles(element);
865
+ };
866
+ }, [element, tracks]);
867
+ return null;
868
+ };
869
+
870
+ // src/components/grid-outline/grid-outline-overlay.tsx
871
+ var React6 = __toESM(require("react"));
872
+ var import_editor_elements4 = require("@elementor/editor-elements");
873
+ var import_editor_props2 = require("@elementor/editor-props");
874
+ var import_ui2 = require("@elementor/ui");
875
+ var import_react11 = require("@floating-ui/react");
876
+
877
+ // src/hooks/use-floating-on-element.ts
878
+ var import_react6 = require("react");
879
+ var import_react7 = require("@floating-ui/react");
880
+ function useFloatingOnElement({ element, isSelected }) {
881
+ const [isOpen, setIsOpen] = (0, import_react6.useState)(false);
882
+ const sizeModifier = 2;
883
+ const { refs, floatingStyles, context } = (0, import_react7.useFloating)({
884
+ // Must be controlled for interactions (like hover) to work.
885
+ open: isOpen || isSelected,
886
+ onOpenChange: setIsOpen,
887
+ whileElementsMounted: import_react7.autoUpdate,
888
+ middleware: [
889
+ // Match the floating element's size to the reference element.
890
+ (0, import_react7.size)(() => {
891
+ return {
892
+ apply({ elements, rects }) {
893
+ Object.assign(elements.floating.style, {
894
+ width: `${rects.reference.width + sizeModifier}px`,
895
+ height: `${rects.reference.height + sizeModifier}px`
896
+ });
897
+ }
898
+ };
899
+ }),
900
+ // Center the floating element on the reference element.
901
+ (0, import_react7.offset)(({ rects }) => -rects.reference.height / 2 - rects.floating.height / 2)
902
+ ]
903
+ });
904
+ (0, import_react6.useEffect)(() => {
905
+ refs.setReference(element);
906
+ }, [element, refs]);
907
+ return {
908
+ isVisible: isOpen || isSelected,
909
+ context,
910
+ floating: {
911
+ setRef: refs.setFloating,
912
+ ref: refs.floating,
913
+ styles: floatingStyles
914
+ }
915
+ };
916
+ }
917
+
918
+ // src/components/outline-overlay.tsx
919
+ var React = __toESM(require("react"));
920
+ var import_ui = require("@elementor/ui");
921
+ var import_react9 = require("@floating-ui/react");
922
+
923
+ // src/hooks/use-bind-react-props-to-element.ts
924
+ var import_react8 = require("react");
925
+ function useBindReactPropsToElement(element, getProps) {
926
+ (0, import_react8.useEffect)(() => {
927
+ const el = element;
928
+ const { events, attrs } = groupProps(getProps());
929
+ events.forEach(([eventName, listener]) => el.addEventListener(eventName, listener));
930
+ attrs.forEach(([attrName, attrValue]) => el.setAttribute(attrName, attrValue));
931
+ return () => {
932
+ events.forEach(([eventName, listener]) => el.removeEventListener(eventName, listener));
933
+ attrs.forEach(([attrName]) => el.removeAttribute(attrName));
934
+ };
935
+ }, [getProps, element]);
936
+ }
937
+ function groupProps(props) {
938
+ const eventRegex = /^on(?=[A-Z])/;
939
+ return Object.entries(props).reduce(
940
+ (acc, [propName, propValue]) => {
941
+ if (!eventRegex.test(propName)) {
942
+ acc.attrs.push([propName, propValue]);
943
+ return acc;
944
+ }
945
+ const eventName = propName.replace(eventRegex, "").toLowerCase();
946
+ const listener = propValue;
947
+ acc.events.push([eventName, listener]);
948
+ return acc;
949
+ },
950
+ {
951
+ events: [],
952
+ attrs: []
953
+ }
954
+ );
955
+ }
956
+
957
+ // src/hooks/use-has-overlapping.ts
958
+ var possibleOverlappingSelectors = [".e-off-canvas"];
959
+ var useHasOverlapping = () => {
960
+ const preview = window.elementor?.$preview?.[0];
961
+ if (!preview) {
962
+ return false;
963
+ }
964
+ const hasOverlapping = possibleOverlappingSelectors.map((selector) => Array.from(preview?.contentWindow?.document.body.querySelectorAll(selector) ?? [])).flat().some(
965
+ (elem) => elem.checkVisibility({
966
+ opacityProperty: true,
967
+ visibilityProperty: true,
968
+ contentVisibilityAuto: true
969
+ })
970
+ );
971
+ return hasOverlapping;
972
+ };
973
+
974
+ // src/components/outline-overlay.tsx
975
+ var CANVAS_WRAPPER_ID = "elementor-preview-responsive-wrapper";
976
+ var OverlayBox = (0, import_ui.styled)(import_ui.Box, {
977
+ shouldForwardProp: (prop) => prop !== "isSelected" && prop !== "isSmallerOffset" && prop !== "isGlobal"
978
+ })(
979
+ ({ theme, isSelected, isSmallerOffset, isGlobal }) => ({
980
+ outline: `${isSelected ? "2px" : "1px"} solid ${isGlobal ? theme.palette.global.main : theme.palette.primary.light}`,
981
+ outlineOffset: isSelected && !isSmallerOffset ? "-2px" : "-1px",
982
+ pointerEvents: "none"
983
+ })
984
+ );
985
+ var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
986
+ const { context, floating, isVisible } = useFloatingOnElement({ element, isSelected });
987
+ const { getFloatingProps, getReferenceProps } = (0, import_react9.useInteractions)([(0, import_react9.useHover)(context)]);
988
+ const hasOverlapping = useHasOverlapping();
989
+ useBindReactPropsToElement(element, getReferenceProps);
990
+ const isSmallerOffset = element.offsetHeight <= 1;
991
+ return isVisible && !hasOverlapping && /* @__PURE__ */ React.createElement(import_react9.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React.createElement(
992
+ OverlayBox,
993
+ {
994
+ ref: floating.setRef,
995
+ isSelected,
996
+ isGlobal,
997
+ style: floating.styles,
998
+ "data-element-overlay": id,
999
+ role: "presentation",
1000
+ isSmallerOffset,
1001
+ ...getFloatingProps()
1002
+ }
1003
+ ));
1004
+ };
1005
+
1006
+ // src/components/grid-outline/grid-outline.tsx
1007
+ var React5 = __toESM(require("react"));
1008
+ var import_react10 = require("react");
1009
+
974
1010
  // src/components/grid-outline/cell.tsx
975
1011
  var React2 = __toESM(require("react"));
976
1012
  var FALLBACK_COLOR = "rgba(0, 0, 0, 0.12)";
@@ -1078,10 +1114,17 @@ var renderLines = (tracks, width, height) => {
1078
1114
  ))
1079
1115
  ];
1080
1116
  };
1117
+ var isDragActiveFromDom = (element) => {
1118
+ return Boolean(
1119
+ element?.querySelector(
1120
+ ".e-dragging-over, .elementor-dragging-on-child, .elementor-draggable-over, .elementor-widget-placeholder, .elementor-sortable-placeholder"
1121
+ )
1122
+ );
1123
+ };
1081
1124
  function GridOutline({ element, tracks, width, height }) {
1082
- const cells = (0, import_react9.useMemo)(() => computeCellRects(tracks, width, height), [tracks, width, height]);
1125
+ const cells = (0, import_react10.useMemo)(() => computeCellRects(tracks, width, height), [tracks, width, height]);
1083
1126
  const hasGap = tracks.columnGap > 0 || tracks.rowGap > 0;
1084
- const firstEmpty = (0, import_react9.useMemo)(
1127
+ const firstEmpty = (0, import_react10.useMemo)(
1085
1128
  () => findFirstEmptyCell(element, tracks.columns.length, tracks.rows.length),
1086
1129
  [element, tracks]
1087
1130
  );
@@ -1095,7 +1138,7 @@ function GridOutline({ element, tracks, width, height }) {
1095
1138
  xmlns: "http://www.w3.org/2000/svg"
1096
1139
  },
1097
1140
  hasGap ? renderCells(cells, tracks.borderColor) : renderLines(tracks, width, height)
1098
- ), emptyCellRect && /* @__PURE__ */ React5.createElement(FirstEmptyCell, { rect: emptyCellRect, color: tracks.borderColor }));
1141
+ ), emptyCellRect && !isDragActiveFromDom(element) && /* @__PURE__ */ React5.createElement(FirstEmptyCell, { rect: emptyCellRect, color: tracks.borderColor }));
1099
1142
  }
1100
1143
 
1101
1144
  // src/components/grid-outline/grid-outline-overlay.tsx
@@ -1111,7 +1154,7 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
1111
1154
  if (tracks.columns.length === 0 && tracks.rows.length === 0) {
1112
1155
  return null;
1113
1156
  }
1114
- return /* @__PURE__ */ React6.createElement(import_react10.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React6.createElement(
1157
+ return /* @__PURE__ */ React6.createElement(import_react11.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React6.createElement(
1115
1158
  import_ui2.Box,
1116
1159
  {
1117
1160
  ref: floating.setRef,
@@ -1125,14 +1168,20 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
1125
1168
 
1126
1169
  // src/components/elements-overlays.tsx
1127
1170
  var ELEMENTS_DATA_ATTR = "atomic";
1171
+ var E_GRID_TYPE = "e-grid";
1172
+ var isGridElement = (element) => [element.dataset.eType, element.dataset.element_type].includes(E_GRID_TYPE);
1128
1173
  var overlayRegistry = [
1129
1174
  {
1130
1175
  component: OutlineOverlay,
1131
1176
  shouldRender: () => true
1132
1177
  },
1178
+ {
1179
+ component: GridEmptyCellPositioner,
1180
+ shouldRender: ({ element }) => isGridElement(element)
1181
+ },
1133
1182
  {
1134
1183
  component: GridOutlineOverlay,
1135
- shouldRender: ({ element, isSelected }) => isSelected && element.dataset.eType === "e-grid"
1184
+ shouldRender: ({ element, isSelected }) => isSelected && isGridElement(element)
1136
1185
  }
1137
1186
  ];
1138
1187
  function ElementsOverlays() {
@@ -1186,15 +1235,15 @@ var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
1186
1235
  var import_ui3 = require("@elementor/ui");
1187
1236
 
1188
1237
  // src/hooks/use-interactions-items.ts
1189
- var import_react12 = require("react");
1238
+ var import_react13 = require("react");
1190
1239
  var import_editor_interactions = require("@elementor/editor-interactions");
1191
1240
  var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
1192
1241
 
1193
1242
  // src/hooks/use-on-mount.ts
1194
- var import_react11 = require("react");
1243
+ var import_react12 = require("react");
1195
1244
  function useOnMount(cb) {
1196
- const mounted = (0, import_react11.useRef)(false);
1197
- (0, import_react11.useEffect)(() => {
1245
+ const mounted = (0, import_react12.useRef)(false);
1246
+ (0, import_react12.useEffect)(() => {
1198
1247
  if (!mounted.current) {
1199
1248
  mounted.current = true;
1200
1249
  cb();
@@ -1204,8 +1253,8 @@ function useOnMount(cb) {
1204
1253
 
1205
1254
  // src/hooks/use-interactions-items.ts
1206
1255
  function useInteractionsItems() {
1207
- const [interactionItems, setInteractionItems] = (0, import_react12.useState)({});
1208
- const providerAndSubscribers = (0, import_react12.useMemo)(() => {
1256
+ const [interactionItems, setInteractionItems] = (0, import_react13.useState)({});
1257
+ const providerAndSubscribers = (0, import_react13.useMemo)(() => {
1209
1258
  try {
1210
1259
  const providers = import_editor_interactions.interactionsRepository.getProviders();
1211
1260
  const mapped = providers.map((provider) => {
@@ -1222,7 +1271,7 @@ function useInteractionsItems() {
1222
1271
  return [];
1223
1272
  }
1224
1273
  }, []);
1225
- (0, import_react12.useEffect)(() => {
1274
+ (0, import_react13.useEffect)(() => {
1226
1275
  if (providerAndSubscribers.length === 0) {
1227
1276
  return;
1228
1277
  }
@@ -1253,7 +1302,7 @@ function useInteractionsItems() {
1253
1302
  });
1254
1303
  });
1255
1304
  });
1256
- return (0, import_react12.useMemo)(() => {
1305
+ return (0, import_react13.useMemo)(() => {
1257
1306
  const result = Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items);
1258
1307
  return result;
1259
1308
  }, [interactionItems]);
@@ -1351,7 +1400,7 @@ function getLinkAttrs(el) {
1351
1400
  }
1352
1401
 
1353
1402
  // src/hooks/use-style-items.ts
1354
- var import_react15 = require("react");
1403
+ var import_react16 = require("react");
1355
1404
  var import_editor_responsive2 = require("@elementor/editor-responsive");
1356
1405
  var import_editor_styles3 = require("@elementor/editor-styles");
1357
1406
  var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
@@ -1413,7 +1462,7 @@ function signalizedProcess(signal, steps = []) {
1413
1462
  }
1414
1463
 
1415
1464
  // src/hooks/use-style-prop-resolver.ts
1416
- var import_react13 = require("react");
1465
+ var import_react14 = require("react");
1417
1466
  var import_editor_styles = require("@elementor/editor-styles");
1418
1467
  var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
1419
1468
 
@@ -1562,7 +1611,7 @@ var styleTransformersRegistry = createTransformersRegistry();
1562
1611
 
1563
1612
  // src/hooks/use-style-prop-resolver.ts
1564
1613
  function useStylePropResolver() {
1565
- return (0, import_react13.useMemo)(() => {
1614
+ return (0, import_react14.useMemo)(() => {
1566
1615
  return createPropsResolver({
1567
1616
  transformers: styleTransformersRegistry,
1568
1617
  schema: (0, import_editor_styles.getStylesSchema)(),
@@ -1574,7 +1623,7 @@ function useStylePropResolver() {
1574
1623
  }
1575
1624
 
1576
1625
  // src/hooks/use-style-renderer.ts
1577
- var import_react14 = require("react");
1626
+ var import_react15 = require("react");
1578
1627
  var import_editor_responsive = require("@elementor/editor-responsive");
1579
1628
 
1580
1629
  // src/renderers/create-styles-renderer.ts
@@ -1683,7 +1732,7 @@ function customCssToString(customCss) {
1683
1732
  var SELECTOR_PREFIX = ".elementor";
1684
1733
  function useStyleRenderer(resolve) {
1685
1734
  const breakpoints = (0, import_editor_responsive.useBreakpointsMap)();
1686
- return (0, import_react14.useMemo)(() => {
1735
+ return (0, import_react15.useMemo)(() => {
1687
1736
  return createStylesRenderer({
1688
1737
  selectorPrefix: SELECTOR_PREFIX,
1689
1738
  breakpoints,
@@ -1697,9 +1746,9 @@ function useStyleItems() {
1697
1746
  const resolve = useStylePropResolver();
1698
1747
  const renderStyles = useStyleRenderer(resolve);
1699
1748
  const breakpoints = (0, import_editor_responsive2.useBreakpoints)();
1700
- const [styleItems, setStyleItems] = (0, import_react15.useState)({});
1701
- const styleItemsCacheRef = (0, import_react15.useRef)(/* @__PURE__ */ new Map());
1702
- const providerAndSubscribers = (0, import_react15.useMemo)(() => {
1749
+ const [styleItems, setStyleItems] = (0, import_react16.useState)({});
1750
+ const styleItemsCacheRef = (0, import_react16.useRef)(/* @__PURE__ */ new Map());
1751
+ const providerAndSubscribers = (0, import_react16.useMemo)(() => {
1703
1752
  const createEmptyCache = () => {
1704
1753
  return { orderedIds: [], itemsById: /* @__PURE__ */ new Map() };
1705
1754
  };
@@ -1725,7 +1774,7 @@ function useStyleItems() {
1725
1774
  })
1726
1775
  );
1727
1776
  }, [renderStyles]);
1728
- (0, import_react15.useEffect)(() => {
1777
+ (0, import_react16.useEffect)(() => {
1729
1778
  const unsubscribes = providerAndSubscribers.map(
1730
1779
  ({ provider, subscriber }) => provider.subscribe(subscriber)
1731
1780
  );
@@ -1740,11 +1789,11 @@ function useStyleItems() {
1740
1789
  await Promise.all(promises);
1741
1790
  });
1742
1791
  });
1743
- const breakpointSorter = (0, import_react15.useMemo)(
1792
+ const breakpointSorter = (0, import_react16.useMemo)(
1744
1793
  () => createBreakpointSorter(breakpoints.map((breakpoint) => breakpoint.id)),
1745
1794
  [breakpoints]
1746
1795
  );
1747
- return (0, import_react15.useMemo)(
1796
+ return (0, import_react16.useMemo)(
1748
1797
  () => Object.values(styleItems).sort(prioritySorter).flatMap(({ items }) => items).sort(stateSorter).sort(breakpointSorter),
1749
1798
  [styleItems, breakpointSorter]
1750
1799
  );
@@ -3424,13 +3473,13 @@ var ReplacementBase = class {
3424
3473
 
3425
3474
  // src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
3426
3475
  var React10 = __toESM(require("react"));
3427
- var import_react17 = require("react");
3476
+ var import_react18 = require("react");
3428
3477
  var import_editor_controls2 = require("@elementor/editor-controls");
3429
3478
  var import_ui5 = require("@elementor/ui");
3430
- var import_react18 = require("@floating-ui/react");
3479
+ var import_react19 = require("@floating-ui/react");
3431
3480
 
3432
3481
  // src/legacy/replacements/inline-editing/inline-editing-utils.ts
3433
- var import_react16 = require("react");
3482
+ var import_react17 = require("react");
3434
3483
  var TOP_BAR_SELECTOR = "#elementor-editor-wrapper-v2";
3435
3484
  var NAVIGATOR_SELECTOR = "#elementor-navigator";
3436
3485
  var EDITING_PANEL = "#elementor-panel";
@@ -3461,8 +3510,8 @@ var getInlineEditorElement = (elementWrapper, expectedTag) => {
3461
3510
  return !expectedTag ? null : elementWrapper.querySelector(expectedTag);
3462
3511
  };
3463
3512
  var useOnClickOutsideIframe = (handleUnmount) => {
3464
- const asyncUnmountInlineEditor = (0, import_react16.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
3465
- (0, import_react16.useEffect)(() => {
3513
+ const asyncUnmountInlineEditor = (0, import_react17.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
3514
+ (0, import_react17.useEffect)(() => {
3466
3515
  EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach(
3467
3516
  (selector) => document?.querySelector(selector)?.addEventListener("mousedown", asyncUnmountInlineEditor)
3468
3517
  );
@@ -3472,8 +3521,8 @@ var useOnClickOutsideIframe = (handleUnmount) => {
3472
3521
  }, []);
3473
3522
  };
3474
3523
  var useRenderToolbar = (ownerDocument, id) => {
3475
- const [anchor, setAnchor] = (0, import_react16.useState)(null);
3476
- (0, import_react16.useEffect)(() => {
3524
+ const [anchor, setAnchor] = (0, import_react17.useState)(null);
3525
+ (0, import_react17.useEffect)(() => {
3477
3526
  if (!anchor) {
3478
3527
  removeToolbarAnchor(ownerDocument, id);
3479
3528
  }
@@ -3487,7 +3536,7 @@ var useRenderToolbar = (ownerDocument, id) => {
3487
3536
  setAnchor(null);
3488
3537
  }
3489
3538
  };
3490
- const clearAnchor = (0, import_react16.useCallback)(() => {
3539
+ const clearAnchor = (0, import_react17.useCallback)(() => {
3491
3540
  setAnchor(null);
3492
3541
  }, []);
3493
3542
  return { onSelectionEnd, anchor, clearAnchor };
@@ -3567,21 +3616,21 @@ var CanvasInlineEditor = ({
3567
3616
  setValue,
3568
3617
  requestDestroy
3569
3618
  }) => {
3570
- const [active, setActive] = (0, import_react17.useState)(true);
3571
- const [editor, setEditor] = (0, import_react17.useState)(null);
3619
+ const [active, setActive] = (0, import_react18.useState)(true);
3620
+ const [editor, setEditor] = (0, import_react18.useState)(null);
3572
3621
  const { onSelectionEnd, anchor: toolbarAnchor, clearAnchor } = useRenderToolbar(rootElement.ownerDocument, id);
3573
- (0, import_react17.useEffect)(() => {
3622
+ (0, import_react18.useEffect)(() => {
3574
3623
  if (!active) {
3575
3624
  clearAnchor();
3576
3625
  requestDestroy();
3577
3626
  }
3578
3627
  }, [active, clearAnchor, requestDestroy]);
3579
- const dismiss = (0, import_react17.useCallback)(() => {
3628
+ const dismiss = (0, import_react18.useCallback)(() => {
3580
3629
  setEditor(null);
3581
3630
  setActive(false);
3582
3631
  }, []);
3583
3632
  useOnClickOutsideIframe(dismiss);
3584
- (0, import_react17.useEffect)(() => {
3633
+ (0, import_react18.useEffect)(() => {
3585
3634
  const ownerDocument = contentElement.ownerDocument;
3586
3635
  const handleClickAway = (event) => {
3587
3636
  if (contentElement.contains(event.target)) {
@@ -3620,25 +3669,25 @@ var InlineEditingOverlay = ({
3620
3669
  id
3621
3670
  }) => {
3622
3671
  const inlineEditedElement = getInlineEditorElement(rootElement, expectedTag);
3623
- const [overlayRefElement, setOverlayElement] = (0, import_react17.useState)(inlineEditedElement);
3624
- (0, import_react17.useEffect)(() => {
3672
+ const [overlayRefElement, setOverlayElement] = (0, import_react18.useState)(inlineEditedElement);
3673
+ (0, import_react18.useEffect)(() => {
3625
3674
  setOverlayElement(getInlineEditorElement(rootElement, expectedTag));
3626
3675
  }, [expectedTag, rootElement]);
3627
3676
  return overlayRefElement ? /* @__PURE__ */ React10.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
3628
3677
  };
3629
3678
  var InlineEditingToolbar = ({ anchor, editor, id }) => {
3630
- const { refs, floatingStyles } = (0, import_react18.useFloating)({
3679
+ const { refs, floatingStyles } = (0, import_react19.useFloating)({
3631
3680
  placement: "top",
3632
3681
  strategy: "fixed",
3633
3682
  transform: false,
3634
- whileElementsMounted: import_react18.autoUpdate,
3635
- middleware: [horizontalShifterMiddleware, (0, import_react18.flip)()]
3683
+ whileElementsMounted: import_react19.autoUpdate,
3684
+ middleware: [horizontalShifterMiddleware, (0, import_react19.flip)()]
3636
3685
  });
3637
- (0, import_react17.useLayoutEffect)(() => {
3686
+ (0, import_react18.useLayoutEffect)(() => {
3638
3687
  refs.setReference(anchor);
3639
3688
  return () => refs.setReference(null);
3640
3689
  }, [anchor, refs]);
3641
- return /* @__PURE__ */ React10.createElement(import_react18.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React10.createElement(
3690
+ return /* @__PURE__ */ React10.createElement(import_react19.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React10.createElement(
3642
3691
  import_ui5.Box,
3643
3692
  {
3644
3693
  ref: refs.setFloating,
@@ -6557,9 +6606,9 @@ function useCanvasDocument() {
6557
6606
  }
6558
6607
 
6559
6608
  // src/hooks/use-escape-on-canvas.ts
6560
- var import_react19 = require("react");
6609
+ var import_react20 = require("react");
6561
6610
  function useEscapeOnCanvas(canvasDocument, onEscape) {
6562
- (0, import_react19.useEffect)(() => {
6611
+ (0, import_react20.useEffect)(() => {
6563
6612
  if (!canvasDocument) {
6564
6613
  return;
6565
6614
  }