@elementor/editor-canvas 4.2.0-912 → 4.2.0-914
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 +197 -87
- package/dist/index.mjs +178 -68
- package/package.json +18 -18
- package/src/components/grid-outline/__tests__/grid-outline-overlay.test.tsx +18 -1
- package/src/components/grid-outline/__tests__/grid-outline.test.tsx +106 -83
- package/src/components/grid-outline/{grid-outline-cell.tsx → cell.tsx} +2 -3
- package/src/components/grid-outline/grid-outline.tsx +44 -13
- package/src/components/grid-outline/line.tsx +26 -0
- package/src/hooks/__tests__/use-grid-children.test.ts +158 -0
- package/src/hooks/__tests__/use-grid-tracks.test.ts +58 -4
- package/src/hooks/use-grid-children.ts +48 -0
- package/src/hooks/use-grid-tracks.ts +3 -1
- package/src/utils/__tests__/grid-outline-utils.test.ts +72 -1
- package/src/utils/grid-outline-utils.ts +48 -0
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
|
|
425
|
+
var React6 = __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
|
|
430
|
+
var React5 = __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
|
|
434
|
+
var import_react9 = require("@floating-ui/react");
|
|
435
435
|
|
|
436
436
|
// src/hooks/use-element-rect.ts
|
|
437
437
|
var import_react2 = require("react");
|
|
@@ -538,7 +538,7 @@ function useFloatingOnElement({ element, isSelected }) {
|
|
|
538
538
|
}
|
|
539
539
|
|
|
540
540
|
// src/hooks/use-grid-tracks.ts
|
|
541
|
-
var
|
|
541
|
+
var import_react6 = require("react");
|
|
542
542
|
var import_editor_elements3 = require("@elementor/editor-elements");
|
|
543
543
|
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
544
544
|
|
|
@@ -575,6 +575,29 @@ function computeCellRects(tracks, width, height) {
|
|
|
575
575
|
}
|
|
576
576
|
return cells;
|
|
577
577
|
}
|
|
578
|
+
function computeGridLines(tracks, width, height) {
|
|
579
|
+
const { columns, rows, columnGap, rowGap, padding } = tracks;
|
|
580
|
+
const hasColumns = columns.length > 0;
|
|
581
|
+
const hasRows = rows.length > 0;
|
|
582
|
+
if (!hasColumns && !hasRows) {
|
|
583
|
+
return { vertical: [], horizontal: [] };
|
|
584
|
+
}
|
|
585
|
+
const columnSegments = hasColumns ? computeTrackSegments(columns, columnGap, padding.left) : [{ start: padding.left, size: width - padding.left - padding.right }];
|
|
586
|
+
const rowSegments = hasRows ? computeTrackSegments(rows, rowGap, padding.top) : [{ start: padding.top, size: height - padding.top - padding.bottom }];
|
|
587
|
+
const xs = uniqueSorted(columnSegments.flatMap((s) => [s.start, s.start + s.size]));
|
|
588
|
+
const ys = uniqueSorted(rowSegments.flatMap((s) => [s.start, s.start + s.size]));
|
|
589
|
+
const yTop = ys[0];
|
|
590
|
+
const yBottom = ys[ys.length - 1];
|
|
591
|
+
const xLeft = xs[0];
|
|
592
|
+
const xRight = xs[xs.length - 1];
|
|
593
|
+
return {
|
|
594
|
+
vertical: xs.map((x) => ({ x1: x, y1: yTop, x2: x, y2: yBottom })),
|
|
595
|
+
horizontal: ys.map((y) => ({ x1: xLeft, y1: y, x2: xRight, y2: y }))
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
function uniqueSorted(values) {
|
|
599
|
+
return Array.from(new Set(values)).sort((a, b) => a - b);
|
|
600
|
+
}
|
|
578
601
|
function computeTrackSegments(sizes, gap, offset2) {
|
|
579
602
|
const segments = [];
|
|
580
603
|
let cursor = offset2;
|
|
@@ -601,6 +624,46 @@ function toPx(value) {
|
|
|
601
624
|
return Number.isFinite(parsed) ? parsed : 0;
|
|
602
625
|
}
|
|
603
626
|
|
|
627
|
+
// src/hooks/use-grid-children.ts
|
|
628
|
+
var import_react5 = require("react");
|
|
629
|
+
function useGridChildren(element) {
|
|
630
|
+
const [signal, setSignal] = (0, import_react5.useState)(0);
|
|
631
|
+
(0, import_react5.useEffect)(() => {
|
|
632
|
+
if (!element) {
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
const bump = () => setSignal((previous) => previous + 1);
|
|
636
|
+
const resizeObserver = new ResizeObserver(bump);
|
|
637
|
+
const observed = /* @__PURE__ */ new Set();
|
|
638
|
+
const syncChildren = () => {
|
|
639
|
+
for (const child of Array.from(element.children)) {
|
|
640
|
+
if (!observed.has(child)) {
|
|
641
|
+
resizeObserver.observe(child);
|
|
642
|
+
observed.add(child);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
for (const child of observed) {
|
|
646
|
+
if (child.parentElement !== element) {
|
|
647
|
+
resizeObserver.unobserve(child);
|
|
648
|
+
observed.delete(child);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
};
|
|
652
|
+
syncChildren();
|
|
653
|
+
const mutationObserver = new MutationObserver(() => {
|
|
654
|
+
syncChildren();
|
|
655
|
+
bump();
|
|
656
|
+
});
|
|
657
|
+
mutationObserver.observe(element, { childList: true });
|
|
658
|
+
return () => {
|
|
659
|
+
mutationObserver.disconnect();
|
|
660
|
+
resizeObserver.disconnect();
|
|
661
|
+
observed.clear();
|
|
662
|
+
};
|
|
663
|
+
}, [element]);
|
|
664
|
+
return signal;
|
|
665
|
+
}
|
|
666
|
+
|
|
604
667
|
// src/hooks/use-grid-tracks.ts
|
|
605
668
|
var EMPTY = {
|
|
606
669
|
columns: [],
|
|
@@ -612,12 +675,13 @@ var EMPTY = {
|
|
|
612
675
|
};
|
|
613
676
|
var DEVICE_MODE_CHANGE_EVENT = "elementor/device-mode/change";
|
|
614
677
|
function useGridTracks(element, rect) {
|
|
615
|
-
const [tracks, setTracks] = (0,
|
|
678
|
+
const [tracks, setTracks] = (0, import_react6.useState)(EMPTY);
|
|
616
679
|
const trigger = (0, import_editor_v1_adapters2.__privateUseListenTo)(
|
|
617
680
|
[(0, import_editor_v1_adapters2.windowEvent)(import_editor_elements3.ELEMENT_STYLE_CHANGE_EVENT), (0, import_editor_v1_adapters2.windowEvent)(DEVICE_MODE_CHANGE_EVENT)],
|
|
618
681
|
() => ({})
|
|
619
682
|
);
|
|
620
|
-
|
|
683
|
+
const childrenTrigger = useGridChildren(element);
|
|
684
|
+
(0, import_react6.useEffect)(() => {
|
|
621
685
|
const previewWindow = element?.ownerDocument?.defaultView;
|
|
622
686
|
if (!element || !previewWindow) {
|
|
623
687
|
setTracks(EMPTY);
|
|
@@ -629,19 +693,19 @@ function useGridTracks(element, rect) {
|
|
|
629
693
|
return () => {
|
|
630
694
|
previewWindow.cancelAnimationFrame(frame);
|
|
631
695
|
};
|
|
632
|
-
}, [element, rect.width, rect.height, trigger]);
|
|
696
|
+
}, [element, rect.width, rect.height, trigger, childrenTrigger]);
|
|
633
697
|
return tracks;
|
|
634
698
|
}
|
|
635
699
|
|
|
636
700
|
// src/components/outline-overlay.tsx
|
|
637
701
|
var React = __toESM(require("react"));
|
|
638
702
|
var import_ui = require("@elementor/ui");
|
|
639
|
-
var
|
|
703
|
+
var import_react8 = require("@floating-ui/react");
|
|
640
704
|
|
|
641
705
|
// src/hooks/use-bind-react-props-to-element.ts
|
|
642
|
-
var
|
|
706
|
+
var import_react7 = require("react");
|
|
643
707
|
function useBindReactPropsToElement(element, getProps) {
|
|
644
|
-
(0,
|
|
708
|
+
(0, import_react7.useEffect)(() => {
|
|
645
709
|
const el = element;
|
|
646
710
|
const { events, attrs } = groupProps(getProps());
|
|
647
711
|
events.forEach(([eventName, listener]) => el.addEventListener(eventName, listener));
|
|
@@ -702,11 +766,11 @@ var OverlayBox = (0, import_ui.styled)(import_ui.Box, {
|
|
|
702
766
|
);
|
|
703
767
|
var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
|
|
704
768
|
const { context, floating, isVisible } = useFloatingOnElement({ element, isSelected });
|
|
705
|
-
const { getFloatingProps, getReferenceProps } = (0,
|
|
769
|
+
const { getFloatingProps, getReferenceProps } = (0, import_react8.useInteractions)([(0, import_react8.useHover)(context)]);
|
|
706
770
|
const hasOverlapping = useHasOverlapping();
|
|
707
771
|
useBindReactPropsToElement(element, getReferenceProps);
|
|
708
772
|
const isSmallerOffset = element.offsetHeight <= 1;
|
|
709
|
-
return isVisible && !hasOverlapping && /* @__PURE__ */ React.createElement(
|
|
773
|
+
return isVisible && !hasOverlapping && /* @__PURE__ */ React.createElement(import_react8.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React.createElement(
|
|
710
774
|
OverlayBox,
|
|
711
775
|
{
|
|
712
776
|
ref: floating.setRef,
|
|
@@ -722,13 +786,12 @@ var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
|
|
|
722
786
|
};
|
|
723
787
|
|
|
724
788
|
// src/components/grid-outline/grid-outline.tsx
|
|
725
|
-
var
|
|
789
|
+
var React4 = __toESM(require("react"));
|
|
726
790
|
|
|
727
|
-
// src/components/grid-outline/
|
|
791
|
+
// src/components/grid-outline/cell.tsx
|
|
728
792
|
var React2 = __toESM(require("react"));
|
|
729
793
|
var FALLBACK_COLOR = "rgba(0, 0, 0, 0.12)";
|
|
730
|
-
|
|
731
|
-
function GridOutlineCell({ x, y, width, height, color }) {
|
|
794
|
+
function Cell({ x, y, width, height, color }) {
|
|
732
795
|
return /* @__PURE__ */ React2.createElement(
|
|
733
796
|
"rect",
|
|
734
797
|
{
|
|
@@ -739,16 +802,73 @@ function GridOutlineCell({ x, y, width, height, color }) {
|
|
|
739
802
|
fill: "none",
|
|
740
803
|
stroke: color || FALLBACK_COLOR,
|
|
741
804
|
strokeWidth: 1,
|
|
742
|
-
strokeDasharray:
|
|
805
|
+
strokeDasharray: "2 2",
|
|
806
|
+
vectorEffect: "non-scaling-stroke"
|
|
807
|
+
}
|
|
808
|
+
);
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
// src/components/grid-outline/line.tsx
|
|
812
|
+
var React3 = __toESM(require("react"));
|
|
813
|
+
var FALLBACK_COLOR2 = "rgba(0, 0, 0, 0.12)";
|
|
814
|
+
function Line({ x1, y1, x2, y2, color }) {
|
|
815
|
+
return /* @__PURE__ */ React3.createElement(
|
|
816
|
+
"line",
|
|
817
|
+
{
|
|
818
|
+
x1,
|
|
819
|
+
y1,
|
|
820
|
+
x2,
|
|
821
|
+
y2,
|
|
822
|
+
stroke: color || FALLBACK_COLOR2,
|
|
823
|
+
strokeWidth: 1,
|
|
824
|
+
strokeDasharray: "2 2",
|
|
743
825
|
vectorEffect: "non-scaling-stroke"
|
|
744
826
|
}
|
|
745
827
|
);
|
|
746
828
|
}
|
|
747
829
|
|
|
748
830
|
// src/components/grid-outline/grid-outline.tsx
|
|
831
|
+
var renderCells = (tracks, width, height) => computeCellRects(tracks, width, height).map((cell, i) => /* @__PURE__ */ React4.createElement(
|
|
832
|
+
Cell,
|
|
833
|
+
{
|
|
834
|
+
key: i,
|
|
835
|
+
x: snapToHalfPixel(cell.x),
|
|
836
|
+
y: snapToHalfPixel(cell.y),
|
|
837
|
+
width: Math.round(cell.width),
|
|
838
|
+
height: Math.round(cell.height),
|
|
839
|
+
color: tracks.borderColor
|
|
840
|
+
}
|
|
841
|
+
));
|
|
842
|
+
var renderLines = (tracks, width, height) => {
|
|
843
|
+
const { vertical, horizontal } = computeGridLines(tracks, width, height);
|
|
844
|
+
return [
|
|
845
|
+
...vertical.map((line, i) => /* @__PURE__ */ React4.createElement(
|
|
846
|
+
Line,
|
|
847
|
+
{
|
|
848
|
+
key: `v${i}`,
|
|
849
|
+
x1: snapToHalfPixel(line.x1),
|
|
850
|
+
y1: Math.round(line.y1),
|
|
851
|
+
x2: snapToHalfPixel(line.x2),
|
|
852
|
+
y2: Math.round(line.y2),
|
|
853
|
+
color: tracks.borderColor
|
|
854
|
+
}
|
|
855
|
+
)),
|
|
856
|
+
...horizontal.map((line, i) => /* @__PURE__ */ React4.createElement(
|
|
857
|
+
Line,
|
|
858
|
+
{
|
|
859
|
+
key: `h${i}`,
|
|
860
|
+
x1: Math.round(line.x1),
|
|
861
|
+
y1: snapToHalfPixel(line.y1),
|
|
862
|
+
x2: Math.round(line.x2),
|
|
863
|
+
y2: snapToHalfPixel(line.y2),
|
|
864
|
+
color: tracks.borderColor
|
|
865
|
+
}
|
|
866
|
+
))
|
|
867
|
+
];
|
|
868
|
+
};
|
|
749
869
|
function GridOutline({ tracks, width, height }) {
|
|
750
|
-
const
|
|
751
|
-
return /* @__PURE__ */
|
|
870
|
+
const hasGap = tracks.columnGap > 0 || tracks.rowGap > 0;
|
|
871
|
+
return /* @__PURE__ */ React4.createElement(
|
|
752
872
|
"svg",
|
|
753
873
|
{
|
|
754
874
|
width,
|
|
@@ -756,17 +876,7 @@ function GridOutline({ tracks, width, height }) {
|
|
|
756
876
|
style: { position: "absolute", inset: 0, overflow: "visible" },
|
|
757
877
|
xmlns: "http://www.w3.org/2000/svg"
|
|
758
878
|
},
|
|
759
|
-
|
|
760
|
-
GridOutlineCell,
|
|
761
|
-
{
|
|
762
|
-
key: i,
|
|
763
|
-
x: snapToHalfPixel(cell.x),
|
|
764
|
-
y: snapToHalfPixel(cell.y),
|
|
765
|
-
width: Math.round(cell.width),
|
|
766
|
-
height: Math.round(cell.height),
|
|
767
|
-
color: tracks.borderColor
|
|
768
|
-
}
|
|
769
|
-
))
|
|
879
|
+
hasGap ? renderCells(tracks, width, height) : renderLines(tracks, width, height)
|
|
770
880
|
);
|
|
771
881
|
}
|
|
772
882
|
|
|
@@ -783,7 +893,7 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
|
|
|
783
893
|
if (tracks.columns.length === 0 && tracks.rows.length === 0) {
|
|
784
894
|
return null;
|
|
785
895
|
}
|
|
786
|
-
return /* @__PURE__ */
|
|
896
|
+
return /* @__PURE__ */ React5.createElement(import_react9.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React5.createElement(
|
|
787
897
|
import_ui2.Box,
|
|
788
898
|
{
|
|
789
899
|
ref: floating.setRef,
|
|
@@ -791,7 +901,7 @@ var GridOutlineOverlay = ({ element, id, isSelected }) => {
|
|
|
791
901
|
"data-grid-outline": id,
|
|
792
902
|
role: "presentation"
|
|
793
903
|
},
|
|
794
|
-
/* @__PURE__ */
|
|
904
|
+
/* @__PURE__ */ React5.createElement(GridOutline, { tracks, width: rect.width, height: rect.height })
|
|
795
905
|
));
|
|
796
906
|
};
|
|
797
907
|
|
|
@@ -820,7 +930,7 @@ function ElementsOverlays() {
|
|
|
820
930
|
return elements.map(({ id, domElement, isGlobal }) => {
|
|
821
931
|
const isSelected = selected.element?.id === id;
|
|
822
932
|
return overlayRegistry.map(
|
|
823
|
-
({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */
|
|
933
|
+
({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */ React6.createElement(
|
|
824
934
|
Overlay,
|
|
825
935
|
{
|
|
826
936
|
key: `${id}-${index}`,
|
|
@@ -853,20 +963,20 @@ function isV4Element(dataset) {
|
|
|
853
963
|
}
|
|
854
964
|
|
|
855
965
|
// src/components/interactions-renderer.tsx
|
|
856
|
-
var
|
|
966
|
+
var React7 = __toESM(require("react"));
|
|
857
967
|
var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
|
|
858
968
|
var import_ui3 = require("@elementor/ui");
|
|
859
969
|
|
|
860
970
|
// src/hooks/use-interactions-items.ts
|
|
861
|
-
var
|
|
971
|
+
var import_react11 = require("react");
|
|
862
972
|
var import_editor_interactions = require("@elementor/editor-interactions");
|
|
863
973
|
var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
|
|
864
974
|
|
|
865
975
|
// src/hooks/use-on-mount.ts
|
|
866
|
-
var
|
|
976
|
+
var import_react10 = require("react");
|
|
867
977
|
function useOnMount(cb) {
|
|
868
|
-
const mounted = (0,
|
|
869
|
-
(0,
|
|
978
|
+
const mounted = (0, import_react10.useRef)(false);
|
|
979
|
+
(0, import_react10.useEffect)(() => {
|
|
870
980
|
if (!mounted.current) {
|
|
871
981
|
mounted.current = true;
|
|
872
982
|
cb();
|
|
@@ -876,8 +986,8 @@ function useOnMount(cb) {
|
|
|
876
986
|
|
|
877
987
|
// src/hooks/use-interactions-items.ts
|
|
878
988
|
function useInteractionsItems() {
|
|
879
|
-
const [interactionItems, setInteractionItems] = (0,
|
|
880
|
-
const providerAndSubscribers = (0,
|
|
989
|
+
const [interactionItems, setInteractionItems] = (0, import_react11.useState)({});
|
|
990
|
+
const providerAndSubscribers = (0, import_react11.useMemo)(() => {
|
|
881
991
|
try {
|
|
882
992
|
const providers = import_editor_interactions.interactionsRepository.getProviders();
|
|
883
993
|
const mapped = providers.map((provider) => {
|
|
@@ -894,7 +1004,7 @@ function useInteractionsItems() {
|
|
|
894
1004
|
return [];
|
|
895
1005
|
}
|
|
896
1006
|
}, []);
|
|
897
|
-
(0,
|
|
1007
|
+
(0, import_react11.useEffect)(() => {
|
|
898
1008
|
if (providerAndSubscribers.length === 0) {
|
|
899
1009
|
return;
|
|
900
1010
|
}
|
|
@@ -925,7 +1035,7 @@ function useInteractionsItems() {
|
|
|
925
1035
|
});
|
|
926
1036
|
});
|
|
927
1037
|
});
|
|
928
|
-
return (0,
|
|
1038
|
+
return (0, import_react11.useMemo)(() => {
|
|
929
1039
|
const result = Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items);
|
|
930
1040
|
return result;
|
|
931
1041
|
}, [interactionItems]);
|
|
@@ -955,7 +1065,7 @@ function InteractionsRenderer() {
|
|
|
955
1065
|
return null;
|
|
956
1066
|
}
|
|
957
1067
|
const interactionsData = JSON.stringify(Array.isArray(interactionItems) ? interactionItems : []);
|
|
958
|
-
return /* @__PURE__ */
|
|
1068
|
+
return /* @__PURE__ */ React7.createElement(import_ui3.Portal, { container }, /* @__PURE__ */ React7.createElement(
|
|
959
1069
|
"script",
|
|
960
1070
|
{
|
|
961
1071
|
type: "application/json",
|
|
@@ -971,7 +1081,7 @@ function usePortalContainer() {
|
|
|
971
1081
|
}
|
|
972
1082
|
|
|
973
1083
|
// src/components/style-renderer.tsx
|
|
974
|
-
var
|
|
1084
|
+
var React8 = __toESM(require("react"));
|
|
975
1085
|
var import_editor_v1_adapters10 = require("@elementor/editor-v1-adapters");
|
|
976
1086
|
var import_ui4 = require("@elementor/ui");
|
|
977
1087
|
|
|
@@ -1023,7 +1133,7 @@ function getLinkAttrs(el) {
|
|
|
1023
1133
|
}
|
|
1024
1134
|
|
|
1025
1135
|
// src/hooks/use-style-items.ts
|
|
1026
|
-
var
|
|
1136
|
+
var import_react14 = require("react");
|
|
1027
1137
|
var import_editor_responsive2 = require("@elementor/editor-responsive");
|
|
1028
1138
|
var import_editor_styles4 = require("@elementor/editor-styles");
|
|
1029
1139
|
var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
|
|
@@ -1085,7 +1195,7 @@ function signalizedProcess(signal, steps = []) {
|
|
|
1085
1195
|
}
|
|
1086
1196
|
|
|
1087
1197
|
// src/hooks/use-style-prop-resolver.ts
|
|
1088
|
-
var
|
|
1198
|
+
var import_react12 = require("react");
|
|
1089
1199
|
var import_editor_styles2 = require("@elementor/editor-styles");
|
|
1090
1200
|
var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
|
|
1091
1201
|
|
|
@@ -1213,7 +1323,7 @@ var styleTransformersRegistry = createTransformersRegistry();
|
|
|
1213
1323
|
|
|
1214
1324
|
// src/hooks/use-style-prop-resolver.ts
|
|
1215
1325
|
function useStylePropResolver() {
|
|
1216
|
-
return (0,
|
|
1326
|
+
return (0, import_react12.useMemo)(() => {
|
|
1217
1327
|
return createPropsResolver({
|
|
1218
1328
|
transformers: styleTransformersRegistry,
|
|
1219
1329
|
schema: (0, import_editor_styles2.getStylesSchema)(),
|
|
@@ -1228,7 +1338,7 @@ function useStylePropResolver() {
|
|
|
1228
1338
|
}
|
|
1229
1339
|
|
|
1230
1340
|
// src/hooks/use-style-renderer.ts
|
|
1231
|
-
var
|
|
1341
|
+
var import_react13 = require("react");
|
|
1232
1342
|
var import_editor_responsive = require("@elementor/editor-responsive");
|
|
1233
1343
|
|
|
1234
1344
|
// src/renderers/create-styles-renderer.ts
|
|
@@ -1337,7 +1447,7 @@ function customCssToString(customCss) {
|
|
|
1337
1447
|
var SELECTOR_PREFIX = ".elementor";
|
|
1338
1448
|
function useStyleRenderer(resolve) {
|
|
1339
1449
|
const breakpoints = (0, import_editor_responsive.useBreakpointsMap)();
|
|
1340
|
-
return (0,
|
|
1450
|
+
return (0, import_react13.useMemo)(() => {
|
|
1341
1451
|
return createStylesRenderer({
|
|
1342
1452
|
selectorPrefix: SELECTOR_PREFIX,
|
|
1343
1453
|
breakpoints,
|
|
@@ -1351,9 +1461,9 @@ function useStyleItems() {
|
|
|
1351
1461
|
const resolve = useStylePropResolver();
|
|
1352
1462
|
const renderStyles = useStyleRenderer(resolve);
|
|
1353
1463
|
const breakpoints = (0, import_editor_responsive2.useBreakpoints)();
|
|
1354
|
-
const [styleItems, setStyleItems] = (0,
|
|
1355
|
-
const styleItemsCacheRef = (0,
|
|
1356
|
-
const providerAndSubscribers = (0,
|
|
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)(() => {
|
|
1357
1467
|
const createEmptyCache = () => {
|
|
1358
1468
|
return { orderedIds: [], itemsById: /* @__PURE__ */ new Map() };
|
|
1359
1469
|
};
|
|
@@ -1379,7 +1489,7 @@ function useStyleItems() {
|
|
|
1379
1489
|
})
|
|
1380
1490
|
);
|
|
1381
1491
|
}, [renderStyles]);
|
|
1382
|
-
(0,
|
|
1492
|
+
(0, import_react14.useEffect)(() => {
|
|
1383
1493
|
const unsubscribes = providerAndSubscribers.map(
|
|
1384
1494
|
({ provider, subscriber }) => provider.subscribe(subscriber)
|
|
1385
1495
|
);
|
|
@@ -1394,11 +1504,11 @@ function useStyleItems() {
|
|
|
1394
1504
|
await Promise.all(promises);
|
|
1395
1505
|
});
|
|
1396
1506
|
});
|
|
1397
|
-
const breakpointSorter = (0,
|
|
1507
|
+
const breakpointSorter = (0, import_react14.useMemo)(
|
|
1398
1508
|
() => createBreakpointSorter(breakpoints.map((breakpoint) => breakpoint.id)),
|
|
1399
1509
|
[breakpoints]
|
|
1400
1510
|
);
|
|
1401
|
-
return (0,
|
|
1511
|
+
return (0, import_react14.useMemo)(
|
|
1402
1512
|
() => Object.values(styleItems).sort(prioritySorter).flatMap(({ items }) => items).sort(stateSorter).sort(breakpointSorter),
|
|
1403
1513
|
[styleItems, breakpointSorter]
|
|
1404
1514
|
);
|
|
@@ -1540,7 +1650,7 @@ function StyleRenderer() {
|
|
|
1540
1650
|
if (!container) {
|
|
1541
1651
|
return null;
|
|
1542
1652
|
}
|
|
1543
|
-
return /* @__PURE__ */
|
|
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 })));
|
|
1544
1654
|
}
|
|
1545
1655
|
function usePortalContainer2() {
|
|
1546
1656
|
return (0, import_editor_v1_adapters10.__privateUseListenTo)((0, import_editor_v1_adapters10.commandEndEvent)("editor/documents/attach-preview"), () => (0, import_editor_v1_adapters10.getCanvasIframeDocument)()?.head);
|
|
@@ -3008,7 +3118,7 @@ function createPromotionView(BaseView) {
|
|
|
3008
3118
|
var import_client = require("react-dom/client");
|
|
3009
3119
|
|
|
3010
3120
|
// src/legacy/replacements/inline-editing/inline-editing-elements.tsx
|
|
3011
|
-
var
|
|
3121
|
+
var React10 = __toESM(require("react"));
|
|
3012
3122
|
var import_editor_elements9 = require("@elementor/editor-elements");
|
|
3013
3123
|
var import_editor_props5 = require("@elementor/editor-props");
|
|
3014
3124
|
var import_editor_v1_adapters13 = require("@elementor/editor-v1-adapters");
|
|
@@ -3057,14 +3167,14 @@ var ReplacementBase = class {
|
|
|
3057
3167
|
};
|
|
3058
3168
|
|
|
3059
3169
|
// src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
|
|
3060
|
-
var
|
|
3061
|
-
var
|
|
3170
|
+
var React9 = __toESM(require("react"));
|
|
3171
|
+
var import_react16 = require("react");
|
|
3062
3172
|
var import_editor_controls2 = require("@elementor/editor-controls");
|
|
3063
3173
|
var import_ui5 = require("@elementor/ui");
|
|
3064
|
-
var
|
|
3174
|
+
var import_react17 = require("@floating-ui/react");
|
|
3065
3175
|
|
|
3066
3176
|
// src/legacy/replacements/inline-editing/inline-editing-utils.ts
|
|
3067
|
-
var
|
|
3177
|
+
var import_react15 = require("react");
|
|
3068
3178
|
var TOP_BAR_SELECTOR = "#elementor-editor-wrapper-v2";
|
|
3069
3179
|
var NAVIGATOR_SELECTOR = "#elementor-navigator";
|
|
3070
3180
|
var EDITING_PANEL = "#elementor-panel";
|
|
@@ -3095,8 +3205,8 @@ var getInlineEditorElement = (elementWrapper, expectedTag) => {
|
|
|
3095
3205
|
return !expectedTag ? null : elementWrapper.querySelector(expectedTag);
|
|
3096
3206
|
};
|
|
3097
3207
|
var useOnClickOutsideIframe = (handleUnmount) => {
|
|
3098
|
-
const asyncUnmountInlineEditor = (0,
|
|
3099
|
-
(0,
|
|
3208
|
+
const asyncUnmountInlineEditor = (0, import_react15.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
|
|
3209
|
+
(0, import_react15.useEffect)(() => {
|
|
3100
3210
|
EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach(
|
|
3101
3211
|
(selector) => document?.querySelector(selector)?.addEventListener("mousedown", asyncUnmountInlineEditor)
|
|
3102
3212
|
);
|
|
@@ -3106,8 +3216,8 @@ var useOnClickOutsideIframe = (handleUnmount) => {
|
|
|
3106
3216
|
}, []);
|
|
3107
3217
|
};
|
|
3108
3218
|
var useRenderToolbar = (ownerDocument, id) => {
|
|
3109
|
-
const [anchor, setAnchor] = (0,
|
|
3110
|
-
(0,
|
|
3219
|
+
const [anchor, setAnchor] = (0, import_react15.useState)(null);
|
|
3220
|
+
(0, import_react15.useEffect)(() => {
|
|
3111
3221
|
if (!anchor) {
|
|
3112
3222
|
removeToolbarAnchor(ownerDocument, id);
|
|
3113
3223
|
}
|
|
@@ -3121,7 +3231,7 @@ var useRenderToolbar = (ownerDocument, id) => {
|
|
|
3121
3231
|
setAnchor(null);
|
|
3122
3232
|
}
|
|
3123
3233
|
};
|
|
3124
|
-
const clearAnchor = (0,
|
|
3234
|
+
const clearAnchor = (0, import_react15.useCallback)(() => {
|
|
3125
3235
|
setAnchor(null);
|
|
3126
3236
|
}, []);
|
|
3127
3237
|
return { onSelectionEnd, anchor, clearAnchor };
|
|
@@ -3201,21 +3311,21 @@ var CanvasInlineEditor = ({
|
|
|
3201
3311
|
setValue,
|
|
3202
3312
|
requestDestroy
|
|
3203
3313
|
}) => {
|
|
3204
|
-
const [active, setActive] = (0,
|
|
3205
|
-
const [editor, setEditor] = (0,
|
|
3314
|
+
const [active, setActive] = (0, import_react16.useState)(true);
|
|
3315
|
+
const [editor, setEditor] = (0, import_react16.useState)(null);
|
|
3206
3316
|
const { onSelectionEnd, anchor: toolbarAnchor, clearAnchor } = useRenderToolbar(rootElement.ownerDocument, id);
|
|
3207
|
-
(0,
|
|
3317
|
+
(0, import_react16.useEffect)(() => {
|
|
3208
3318
|
if (!active) {
|
|
3209
3319
|
clearAnchor();
|
|
3210
3320
|
requestDestroy();
|
|
3211
3321
|
}
|
|
3212
3322
|
}, [active, clearAnchor, requestDestroy]);
|
|
3213
|
-
const dismiss = (0,
|
|
3323
|
+
const dismiss = (0, import_react16.useCallback)(() => {
|
|
3214
3324
|
setEditor(null);
|
|
3215
3325
|
setActive(false);
|
|
3216
3326
|
}, []);
|
|
3217
3327
|
useOnClickOutsideIframe(dismiss);
|
|
3218
|
-
(0,
|
|
3328
|
+
(0, import_react16.useEffect)(() => {
|
|
3219
3329
|
const ownerDocument = contentElement.ownerDocument;
|
|
3220
3330
|
const handleClickAway = (event) => {
|
|
3221
3331
|
if (contentElement.contains(event.target)) {
|
|
@@ -3229,7 +3339,7 @@ var CanvasInlineEditor = ({
|
|
|
3229
3339
|
if (!active) {
|
|
3230
3340
|
return null;
|
|
3231
3341
|
}
|
|
3232
|
-
return /* @__PURE__ */
|
|
3342
|
+
return /* @__PURE__ */ React9.createElement(import_ui5.ThemeProvider, null, /* @__PURE__ */ React9.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React9.createElement(
|
|
3233
3343
|
import_editor_controls2.InlineEditor,
|
|
3234
3344
|
{
|
|
3235
3345
|
onEditorCreate: setEditor,
|
|
@@ -3246,7 +3356,7 @@ var CanvasInlineEditor = ({
|
|
|
3246
3356
|
autofocus: true,
|
|
3247
3357
|
onSelectionEnd
|
|
3248
3358
|
}
|
|
3249
|
-
), toolbarAnchor && editor && /* @__PURE__ */
|
|
3359
|
+
), toolbarAnchor && editor && /* @__PURE__ */ React9.createElement(InlineEditingToolbar, { anchor: toolbarAnchor, editor, id }));
|
|
3250
3360
|
};
|
|
3251
3361
|
var InlineEditingOverlay = ({
|
|
3252
3362
|
expectedTag,
|
|
@@ -3254,25 +3364,25 @@ var InlineEditingOverlay = ({
|
|
|
3254
3364
|
id
|
|
3255
3365
|
}) => {
|
|
3256
3366
|
const inlineEditedElement = getInlineEditorElement(rootElement, expectedTag);
|
|
3257
|
-
const [overlayRefElement, setOverlayElement] = (0,
|
|
3258
|
-
(0,
|
|
3367
|
+
const [overlayRefElement, setOverlayElement] = (0, import_react16.useState)(inlineEditedElement);
|
|
3368
|
+
(0, import_react16.useEffect)(() => {
|
|
3259
3369
|
setOverlayElement(getInlineEditorElement(rootElement, expectedTag));
|
|
3260
3370
|
}, [expectedTag, rootElement]);
|
|
3261
|
-
return overlayRefElement ? /* @__PURE__ */
|
|
3371
|
+
return overlayRefElement ? /* @__PURE__ */ React9.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
|
|
3262
3372
|
};
|
|
3263
3373
|
var InlineEditingToolbar = ({ anchor, editor, id }) => {
|
|
3264
|
-
const { refs, floatingStyles } = (0,
|
|
3374
|
+
const { refs, floatingStyles } = (0, import_react17.useFloating)({
|
|
3265
3375
|
placement: "top",
|
|
3266
3376
|
strategy: "fixed",
|
|
3267
3377
|
transform: false,
|
|
3268
|
-
whileElementsMounted:
|
|
3269
|
-
middleware: [horizontalShifterMiddleware, (0,
|
|
3378
|
+
whileElementsMounted: import_react17.autoUpdate,
|
|
3379
|
+
middleware: [horizontalShifterMiddleware, (0, import_react17.flip)()]
|
|
3270
3380
|
});
|
|
3271
|
-
(0,
|
|
3381
|
+
(0, import_react16.useLayoutEffect)(() => {
|
|
3272
3382
|
refs.setReference(anchor);
|
|
3273
3383
|
return () => refs.setReference(null);
|
|
3274
3384
|
}, [anchor, refs]);
|
|
3275
|
-
return /* @__PURE__ */
|
|
3385
|
+
return /* @__PURE__ */ React9.createElement(import_react17.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React9.createElement(
|
|
3276
3386
|
import_ui5.Box,
|
|
3277
3387
|
{
|
|
3278
3388
|
ref: refs.setFloating,
|
|
@@ -3282,7 +3392,7 @@ var InlineEditingToolbar = ({ anchor, editor, id }) => {
|
|
|
3282
3392
|
pointerEvents: "none"
|
|
3283
3393
|
}
|
|
3284
3394
|
},
|
|
3285
|
-
/* @__PURE__ */
|
|
3395
|
+
/* @__PURE__ */ React9.createElement(import_editor_controls2.InlineEditorToolbar, { editor, elementId: id })
|
|
3286
3396
|
));
|
|
3287
3397
|
};
|
|
3288
3398
|
|
|
@@ -3491,7 +3601,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
|
|
|
3491
3601
|
contentElement.innerHTML = "";
|
|
3492
3602
|
this.editing = true;
|
|
3493
3603
|
this.reactRoot.render(
|
|
3494
|
-
/* @__PURE__ */
|
|
3604
|
+
/* @__PURE__ */ React10.createElement(
|
|
3495
3605
|
CanvasInlineEditor,
|
|
3496
3606
|
{
|
|
3497
3607
|
elementClasses,
|
|
@@ -5988,7 +6098,7 @@ var getLegacyPanelElementView = ({ settings, ...rest }) => {
|
|
|
5988
6098
|
var GLOBAL_STYLES_IMPORTED_EVENT = "elementor/global-styles/imported";
|
|
5989
6099
|
|
|
5990
6100
|
// src/components/spotlight-backdrop.tsx
|
|
5991
|
-
var
|
|
6101
|
+
var React11 = __toESM(require("react"));
|
|
5992
6102
|
function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
|
|
5993
6103
|
const rect = useElementRect(element);
|
|
5994
6104
|
const clipPath = element ? getRectClipPath(rect, canvas.defaultView) : void 0;
|
|
@@ -6010,7 +6120,7 @@ function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
|
|
|
6010
6120
|
onExit();
|
|
6011
6121
|
}
|
|
6012
6122
|
};
|
|
6013
|
-
return /* @__PURE__ */
|
|
6123
|
+
return /* @__PURE__ */ React11.createElement(
|
|
6014
6124
|
"div",
|
|
6015
6125
|
{
|
|
6016
6126
|
style: backdropStyle,
|
|
@@ -6035,9 +6145,9 @@ function useCanvasDocument() {
|
|
|
6035
6145
|
}
|
|
6036
6146
|
|
|
6037
6147
|
// src/hooks/use-escape-on-canvas.ts
|
|
6038
|
-
var
|
|
6148
|
+
var import_react18 = require("react");
|
|
6039
6149
|
function useEscapeOnCanvas(canvasDocument, onEscape) {
|
|
6040
|
-
(0,
|
|
6150
|
+
(0, import_react18.useEffect)(() => {
|
|
6041
6151
|
if (!canvasDocument) {
|
|
6042
6152
|
return;
|
|
6043
6153
|
}
|