@elementor/editor-canvas 4.3.0-952 → 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 +240 -191
- package/dist/index.mjs +211 -162
- package/package.json +20 -20
- package/src/components/elements-overlays.tsx +10 -2
- package/src/components/grid-outline/grid-empty-cell-positioner.tsx +46 -0
- package/src/components/grid-outline/grid-outline.tsx +11 -1
- package/src/components/grid-outline/index.ts +1 -0
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-
|
|
450
|
-
var
|
|
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
|
|
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
|
|
603
|
+
var import_react3 = require("react");
|
|
649
604
|
function useGridChildren(element) {
|
|
650
|
-
const [signal, setSignal] = (0,
|
|
651
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
1243
|
+
var import_react12 = require("react");
|
|
1195
1244
|
function useOnMount(cb) {
|
|
1196
|
-
const mounted = (0,
|
|
1197
|
-
(0,
|
|
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,
|
|
1208
|
-
const providerAndSubscribers = (0,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
1701
|
-
const styleItemsCacheRef = (0,
|
|
1702
|
-
const providerAndSubscribers = (0,
|
|
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,
|
|
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,
|
|
1792
|
+
const breakpointSorter = (0, import_react16.useMemo)(
|
|
1744
1793
|
() => createBreakpointSorter(breakpoints.map((breakpoint) => breakpoint.id)),
|
|
1745
1794
|
[breakpoints]
|
|
1746
1795
|
);
|
|
1747
|
-
return (0,
|
|
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
|
|
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
|
|
3479
|
+
var import_react19 = require("@floating-ui/react");
|
|
3431
3480
|
|
|
3432
3481
|
// src/legacy/replacements/inline-editing/inline-editing-utils.ts
|
|
3433
|
-
var
|
|
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,
|
|
3465
|
-
(0,
|
|
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,
|
|
3476
|
-
(0,
|
|
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,
|
|
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,
|
|
3571
|
-
const [editor, setEditor] = (0,
|
|
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,
|
|
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,
|
|
3628
|
+
const dismiss = (0, import_react18.useCallback)(() => {
|
|
3580
3629
|
setEditor(null);
|
|
3581
3630
|
setActive(false);
|
|
3582
3631
|
}, []);
|
|
3583
3632
|
useOnClickOutsideIframe(dismiss);
|
|
3584
|
-
(0,
|
|
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,
|
|
3624
|
-
(0,
|
|
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,
|
|
3679
|
+
const { refs, floatingStyles } = (0, import_react19.useFloating)({
|
|
3631
3680
|
placement: "top",
|
|
3632
3681
|
strategy: "fixed",
|
|
3633
3682
|
transform: false,
|
|
3634
|
-
whileElementsMounted:
|
|
3635
|
-
middleware: [horizontalShifterMiddleware, (0,
|
|
3683
|
+
whileElementsMounted: import_react19.autoUpdate,
|
|
3684
|
+
middleware: [horizontalShifterMiddleware, (0, import_react19.flip)()]
|
|
3636
3685
|
});
|
|
3637
|
-
(0,
|
|
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(
|
|
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
|
|
6609
|
+
var import_react20 = require("react");
|
|
6561
6610
|
function useEscapeOnCanvas(canvasDocument, onEscape) {
|
|
6562
|
-
(0,
|
|
6611
|
+
(0, import_react20.useEffect)(() => {
|
|
6563
6612
|
if (!canvasDocument) {
|
|
6564
6613
|
return;
|
|
6565
6614
|
}
|