@elementor/editor-canvas 4.2.0-897 → 4.2.0-899

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -422,47 +422,78 @@ var renameClass = (oldClassName, newClassName) => {
422
422
  };
423
423
 
424
424
  // src/components/elements-overlays.tsx
425
- var React2 = __toESM(require("react"));
426
- var import_editor_elements3 = require("@elementor/editor-elements");
425
+ var React5 = __toESM(require("react"));
426
+ var import_editor_elements4 = require("@elementor/editor-elements");
427
427
  var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
428
428
 
429
- // src/components/outline-overlay.tsx
430
- var React = __toESM(require("react"));
431
- var import_ui = require("@elementor/ui");
432
- var import_react5 = require("@floating-ui/react");
429
+ // src/components/grid-outline/grid-outline-overlay.tsx
430
+ var React4 = __toESM(require("react"));
431
+ var import_editor_elements3 = require("@elementor/editor-elements");
432
+ var import_editor_props2 = require("@elementor/editor-props");
433
+ var import_ui2 = require("@elementor/ui");
434
+ var import_react8 = require("@floating-ui/react");
433
435
 
434
- // src/hooks/use-bind-react-props-to-element.ts
436
+ // src/hooks/use-element-rect.ts
435
437
  var import_react2 = require("react");
436
- function useBindReactPropsToElement(element, getProps) {
438
+ var import_utils2 = require("@elementor/utils");
439
+ function useElementRect(element) {
440
+ const [rect, setRect] = (0, import_react2.useState)(new DOMRect(0, 0, 0, 0));
441
+ const onChange = (0, import_utils2.throttle)(
442
+ () => {
443
+ setRect(element?.getBoundingClientRect() ?? new DOMRect(0, 0, 0, 0));
444
+ },
445
+ 20,
446
+ true
447
+ );
448
+ useScrollListener({ element, onChange });
449
+ useResizeListener({ element, onChange });
450
+ useMutationsListener({ element, onChange });
451
+ (0, import_react2.useEffect)(
452
+ () => () => {
453
+ onChange.cancel();
454
+ },
455
+ [onChange]
456
+ );
457
+ return rect;
458
+ }
459
+ function useScrollListener({ element, onChange }) {
437
460
  (0, import_react2.useEffect)(() => {
438
- const el = element;
439
- const { events, attrs } = groupProps(getProps());
440
- events.forEach(([eventName, listener]) => el.addEventListener(eventName, listener));
441
- attrs.forEach(([attrName, attrValue]) => el.setAttribute(attrName, attrValue));
461
+ if (!element) {
462
+ return;
463
+ }
464
+ const win = element.ownerDocument?.defaultView;
465
+ win?.addEventListener("scroll", onChange, { passive: true });
442
466
  return () => {
443
- events.forEach(([eventName, listener]) => el.removeEventListener(eventName, listener));
444
- attrs.forEach(([attrName]) => el.removeAttribute(attrName));
467
+ win?.removeEventListener("scroll", onChange);
445
468
  };
446
- }, [getProps, element]);
469
+ }, [element, onChange]);
447
470
  }
448
- function groupProps(props) {
449
- const eventRegex = /^on(?=[A-Z])/;
450
- return Object.entries(props).reduce(
451
- (acc, [propName, propValue]) => {
452
- if (!eventRegex.test(propName)) {
453
- acc.attrs.push([propName, propValue]);
454
- return acc;
455
- }
456
- const eventName = propName.replace(eventRegex, "").toLowerCase();
457
- const listener = propValue;
458
- acc.events.push([eventName, listener]);
459
- return acc;
460
- },
461
- {
462
- events: [],
463
- attrs: []
471
+ function useResizeListener({ element, onChange }) {
472
+ (0, import_react2.useEffect)(() => {
473
+ if (!element) {
474
+ return;
464
475
  }
465
- );
476
+ const resizeObserver = new ResizeObserver(onChange);
477
+ resizeObserver.observe(element);
478
+ const win = element.ownerDocument?.defaultView;
479
+ win?.addEventListener("resize", onChange, { passive: true });
480
+ return () => {
481
+ resizeObserver.disconnect();
482
+ win?.removeEventListener("resize", onChange);
483
+ };
484
+ }, [element, onChange]);
485
+ }
486
+ function useMutationsListener({ element, onChange }) {
487
+ (0, import_react2.useEffect)(() => {
488
+ if (!element) {
489
+ return;
490
+ }
491
+ const mutationObserver = new MutationObserver(onChange);
492
+ mutationObserver.observe(element, { childList: true, subtree: true });
493
+ return () => {
494
+ mutationObserver.disconnect();
495
+ };
496
+ }, [element, onChange]);
466
497
  }
467
498
 
468
499
  // src/hooks/use-floating-on-element.ts
@@ -506,6 +537,128 @@ function useFloatingOnElement({ element, isSelected }) {
506
537
  };
507
538
  }
508
539
 
540
+ // src/hooks/use-grid-tracks.ts
541
+ var import_react5 = require("react");
542
+
543
+ // src/utils/grid-outline-utils.ts
544
+ function computeOutlineGeometry(tracks, width, height) {
545
+ const { columns, rows, columnGap, rowGap, padding } = tracks;
546
+ return {
547
+ vertical: computeBoundaries(columns, columnGap, padding.left),
548
+ horizontal: computeBoundaries(rows, rowGap, padding.top),
549
+ top: padding.top,
550
+ bottom: height - padding.bottom,
551
+ left: padding.left,
552
+ right: width - padding.right
553
+ };
554
+ }
555
+ function computeBoundaries(sizes, gap, offset2) {
556
+ if (sizes.length === 0) {
557
+ return [];
558
+ }
559
+ const boundaries = [];
560
+ let cursor = offset2;
561
+ for (let i = 0; i < sizes.length; i++) {
562
+ if (i === 0) {
563
+ boundaries.push(cursor);
564
+ }
565
+ cursor += sizes[i];
566
+ boundaries.push(cursor);
567
+ if (i < sizes.length - 1 && gap > 0) {
568
+ cursor += gap;
569
+ boundaries.push(cursor);
570
+ }
571
+ }
572
+ return boundaries;
573
+ }
574
+ function snapToHalfPixel(value) {
575
+ return Math.round(value) + 0.5;
576
+ }
577
+ function parseTrackList(value) {
578
+ if (!value || value === "none") {
579
+ return [];
580
+ }
581
+ return value.trim().split(/\s+/).map(toPx).filter((n) => n > 0);
582
+ }
583
+ function toPx(value) {
584
+ const parsed = parseFloat(value);
585
+ return Number.isFinite(parsed) ? parsed : 0;
586
+ }
587
+
588
+ // src/hooks/use-grid-tracks.ts
589
+ var EMPTY = {
590
+ columns: [],
591
+ rows: [],
592
+ columnGap: 0,
593
+ rowGap: 0,
594
+ padding: { top: 0, right: 0, bottom: 0, left: 0 },
595
+ borderColor: ""
596
+ };
597
+ function useGridTracks(element, rect) {
598
+ return (0, import_react5.useMemo)(() => {
599
+ if (!element) {
600
+ return EMPTY;
601
+ }
602
+ const previewWindow = element.ownerDocument?.defaultView;
603
+ if (!previewWindow) {
604
+ return EMPTY;
605
+ }
606
+ const computedStyle = previewWindow.getComputedStyle(element);
607
+ return {
608
+ columns: parseTrackList(computedStyle.gridTemplateColumns),
609
+ rows: parseTrackList(computedStyle.gridTemplateRows),
610
+ columnGap: toPx(computedStyle.columnGap),
611
+ rowGap: toPx(computedStyle.rowGap),
612
+ padding: {
613
+ top: toPx(computedStyle.paddingTop),
614
+ right: toPx(computedStyle.paddingRight),
615
+ bottom: toPx(computedStyle.paddingBottom),
616
+ left: toPx(computedStyle.paddingLeft)
617
+ },
618
+ borderColor: computedStyle.getPropertyValue("--e-a-border-color-bold").trim()
619
+ };
620
+ }, [element, rect.width, rect.height]);
621
+ }
622
+
623
+ // src/components/outline-overlay.tsx
624
+ var React = __toESM(require("react"));
625
+ var import_ui = require("@elementor/ui");
626
+ var import_react7 = require("@floating-ui/react");
627
+
628
+ // src/hooks/use-bind-react-props-to-element.ts
629
+ var import_react6 = require("react");
630
+ function useBindReactPropsToElement(element, getProps) {
631
+ (0, import_react6.useEffect)(() => {
632
+ const el = element;
633
+ const { events, attrs } = groupProps(getProps());
634
+ events.forEach(([eventName, listener]) => el.addEventListener(eventName, listener));
635
+ attrs.forEach(([attrName, attrValue]) => el.setAttribute(attrName, attrValue));
636
+ return () => {
637
+ events.forEach(([eventName, listener]) => el.removeEventListener(eventName, listener));
638
+ attrs.forEach(([attrName]) => el.removeAttribute(attrName));
639
+ };
640
+ }, [getProps, element]);
641
+ }
642
+ function groupProps(props) {
643
+ const eventRegex = /^on(?=[A-Z])/;
644
+ return Object.entries(props).reduce(
645
+ (acc, [propName, propValue]) => {
646
+ if (!eventRegex.test(propName)) {
647
+ acc.attrs.push([propName, propValue]);
648
+ return acc;
649
+ }
650
+ const eventName = propName.replace(eventRegex, "").toLowerCase();
651
+ const listener = propValue;
652
+ acc.events.push([eventName, listener]);
653
+ return acc;
654
+ },
655
+ {
656
+ events: [],
657
+ attrs: []
658
+ }
659
+ );
660
+ }
661
+
509
662
  // src/hooks/use-has-overlapping.ts
510
663
  var possibleOverlappingSelectors = [".e-off-canvas"];
511
664
  var useHasOverlapping = () => {
@@ -536,11 +689,11 @@ var OverlayBox = (0, import_ui.styled)(import_ui.Box, {
536
689
  );
537
690
  var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
538
691
  const { context, floating, isVisible } = useFloatingOnElement({ element, isSelected });
539
- const { getFloatingProps, getReferenceProps } = (0, import_react5.useInteractions)([(0, import_react5.useHover)(context)]);
692
+ const { getFloatingProps, getReferenceProps } = (0, import_react7.useInteractions)([(0, import_react7.useHover)(context)]);
540
693
  const hasOverlapping = useHasOverlapping();
541
694
  useBindReactPropsToElement(element, getReferenceProps);
542
695
  const isSmallerOffset = element.offsetHeight <= 1;
543
- return isVisible && !hasOverlapping && /* @__PURE__ */ React.createElement(import_react5.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React.createElement(
696
+ return isVisible && !hasOverlapping && /* @__PURE__ */ React.createElement(import_react7.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React.createElement(
544
697
  OverlayBox,
545
698
  {
546
699
  ref: floating.setRef,
@@ -555,16 +708,104 @@ var OutlineOverlay = ({ element, isSelected, id, isGlobal = false }) => {
555
708
  ));
556
709
  };
557
710
 
711
+ // src/components/grid-outline/grid-outline.tsx
712
+ var React3 = __toESM(require("react"));
713
+
714
+ // src/components/grid-outline/grid-outline-line.tsx
715
+ var React2 = __toESM(require("react"));
716
+ var FALLBACK_COLOR = "rgba(0, 0, 0, 0.12)";
717
+ var DASH = "2 2";
718
+ function GridOutlineLine({ x1, x2, y1, y2, color }) {
719
+ return /* @__PURE__ */ React2.createElement(
720
+ "line",
721
+ {
722
+ x1,
723
+ x2,
724
+ y1,
725
+ y2,
726
+ stroke: color || FALLBACK_COLOR,
727
+ strokeWidth: 1,
728
+ strokeDasharray: DASH,
729
+ vectorEffect: "non-scaling-stroke"
730
+ }
731
+ );
732
+ }
733
+
734
+ // src/components/grid-outline/grid-outline.tsx
735
+ function GridOutline({ tracks, width, height }) {
736
+ const { vertical, horizontal, top, bottom, left, right } = computeOutlineGeometry(tracks, width, height);
737
+ return /* @__PURE__ */ React3.createElement(
738
+ "svg",
739
+ {
740
+ width,
741
+ height,
742
+ style: { position: "absolute", inset: 0, overflow: "visible" },
743
+ xmlns: "http://www.w3.org/2000/svg"
744
+ },
745
+ vertical.map((x, i) => /* @__PURE__ */ React3.createElement(
746
+ GridOutlineLine,
747
+ {
748
+ key: `v-${i}`,
749
+ x1: snapToHalfPixel(x),
750
+ x2: snapToHalfPixel(x),
751
+ y1: top,
752
+ y2: bottom,
753
+ color: tracks.borderColor
754
+ }
755
+ )),
756
+ horizontal.map((y, i) => /* @__PURE__ */ React3.createElement(
757
+ GridOutlineLine,
758
+ {
759
+ key: `h-${i}`,
760
+ x1: left,
761
+ x2: right,
762
+ y1: snapToHalfPixel(y),
763
+ y2: snapToHalfPixel(y),
764
+ color: tracks.borderColor
765
+ }
766
+ ))
767
+ );
768
+ }
769
+
770
+ // src/components/grid-outline/grid-outline-overlay.tsx
771
+ var GridOutlineOverlay = ({ element, id, isSelected }) => {
772
+ const { settings } = (0, import_editor_elements3.useSelectedElementSettings)();
773
+ const enabled = import_editor_props2.booleanPropTypeUtil.extract(settings?.grid_outline);
774
+ const rect = useElementRect(element);
775
+ const tracks = useGridTracks(element, rect);
776
+ const { floating } = useFloatingOnElement({ element, isSelected });
777
+ if (enabled === false) {
778
+ return null;
779
+ }
780
+ if (tracks.columns.length === 0 && tracks.rows.length === 0) {
781
+ return null;
782
+ }
783
+ return /* @__PURE__ */ React4.createElement(import_react8.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React4.createElement(
784
+ import_ui2.Box,
785
+ {
786
+ ref: floating.setRef,
787
+ style: { ...floating.styles, pointerEvents: "none" },
788
+ "data-grid-outline": id,
789
+ role: "presentation"
790
+ },
791
+ /* @__PURE__ */ React4.createElement(GridOutline, { tracks, width: rect.width, height: rect.height })
792
+ ));
793
+ };
794
+
558
795
  // src/components/elements-overlays.tsx
559
796
  var ELEMENTS_DATA_ATTR = "atomic";
560
797
  var overlayRegistry = [
561
798
  {
562
799
  component: OutlineOverlay,
563
800
  shouldRender: () => true
801
+ },
802
+ {
803
+ component: GridOutlineOverlay,
804
+ shouldRender: ({ element, isSelected }) => isSelected && element.dataset.eType === "e-grid"
564
805
  }
565
806
  ];
566
807
  function ElementsOverlays() {
567
- const selected = (0, import_editor_elements3.useSelectedElement)();
808
+ const selected = (0, import_editor_elements4.useSelectedElement)();
568
809
  const elements = useElementsDom();
569
810
  const currentEditMode = (0, import_editor_v1_adapters2.useEditMode)();
570
811
  const isEditMode = currentEditMode === "edit";
@@ -576,7 +817,7 @@ function ElementsOverlays() {
576
817
  return elements.map(({ id, domElement, isGlobal }) => {
577
818
  const isSelected = selected.element?.id === id;
578
819
  return overlayRegistry.map(
579
- ({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */ React2.createElement(
820
+ ({ shouldRender, component: Overlay }, index) => shouldRender({ id, element: domElement, isSelected }) && /* @__PURE__ */ React5.createElement(
580
821
  Overlay,
581
822
  {
582
823
  key: `${id}-${index}`,
@@ -593,7 +834,7 @@ function useElementsDom() {
593
834
  return (0, import_editor_v1_adapters2.__privateUseListenTo)(
594
835
  [(0, import_editor_v1_adapters2.windowEvent)("elementor/editor/element-rendered"), (0, import_editor_v1_adapters2.windowEvent)("elementor/editor/element-destroyed")],
595
836
  () => {
596
- return (0, import_editor_elements3.getElements)().filter((el) => ELEMENTS_DATA_ATTR in (el.view?.el?.dataset ?? {})).map((element) => ({
837
+ return (0, import_editor_elements4.getElements)().filter((el) => isV4Element(el.view?.el?.dataset)).map((element) => ({
597
838
  id: element.id,
598
839
  domElement: element.view?.getDomElement?.()?.get?.(0),
599
840
  isGlobal: element.model.get("isGlobal") ?? false
@@ -601,22 +842,28 @@ function useElementsDom() {
601
842
  }
602
843
  );
603
844
  }
845
+ function isV4Element(dataset) {
846
+ if (!dataset) {
847
+ return false;
848
+ }
849
+ return ELEMENTS_DATA_ATTR in dataset || "eType" in dataset;
850
+ }
604
851
 
605
852
  // src/components/interactions-renderer.tsx
606
- var React3 = __toESM(require("react"));
853
+ var React6 = __toESM(require("react"));
607
854
  var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
608
- var import_ui2 = require("@elementor/ui");
855
+ var import_ui3 = require("@elementor/ui");
609
856
 
610
857
  // src/hooks/use-interactions-items.ts
611
- var import_react7 = require("react");
858
+ var import_react10 = require("react");
612
859
  var import_editor_interactions = require("@elementor/editor-interactions");
613
860
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
614
861
 
615
862
  // src/hooks/use-on-mount.ts
616
- var import_react6 = require("react");
863
+ var import_react9 = require("react");
617
864
  function useOnMount(cb) {
618
- const mounted = (0, import_react6.useRef)(false);
619
- (0, import_react6.useEffect)(() => {
865
+ const mounted = (0, import_react9.useRef)(false);
866
+ (0, import_react9.useEffect)(() => {
620
867
  if (!mounted.current) {
621
868
  mounted.current = true;
622
869
  cb();
@@ -626,8 +873,8 @@ function useOnMount(cb) {
626
873
 
627
874
  // src/hooks/use-interactions-items.ts
628
875
  function useInteractionsItems() {
629
- const [interactionItems, setInteractionItems] = (0, import_react7.useState)({});
630
- const providerAndSubscribers = (0, import_react7.useMemo)(() => {
876
+ const [interactionItems, setInteractionItems] = (0, import_react10.useState)({});
877
+ const providerAndSubscribers = (0, import_react10.useMemo)(() => {
631
878
  try {
632
879
  const providers = import_editor_interactions.interactionsRepository.getProviders();
633
880
  const mapped = providers.map((provider) => {
@@ -644,7 +891,7 @@ function useInteractionsItems() {
644
891
  return [];
645
892
  }
646
893
  }, []);
647
- (0, import_react7.useEffect)(() => {
894
+ (0, import_react10.useEffect)(() => {
648
895
  if (providerAndSubscribers.length === 0) {
649
896
  return;
650
897
  }
@@ -675,7 +922,7 @@ function useInteractionsItems() {
675
922
  });
676
923
  });
677
924
  });
678
- return (0, import_react7.useMemo)(() => {
925
+ return (0, import_react10.useMemo)(() => {
679
926
  const result = Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items);
680
927
  return result;
681
928
  }, [interactionItems]);
@@ -705,7 +952,7 @@ function InteractionsRenderer() {
705
952
  return null;
706
953
  }
707
954
  const interactionsData = JSON.stringify(Array.isArray(interactionItems) ? interactionItems : []);
708
- return /* @__PURE__ */ React3.createElement(import_ui2.Portal, { container }, /* @__PURE__ */ React3.createElement(
955
+ return /* @__PURE__ */ React6.createElement(import_ui3.Portal, { container }, /* @__PURE__ */ React6.createElement(
709
956
  "script",
710
957
  {
711
958
  type: "application/json",
@@ -721,9 +968,9 @@ function usePortalContainer() {
721
968
  }
722
969
 
723
970
  // src/components/style-renderer.tsx
724
- var React4 = __toESM(require("react"));
971
+ var React7 = __toESM(require("react"));
725
972
  var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
726
- var import_ui3 = require("@elementor/ui");
973
+ var import_ui4 = require("@elementor/ui");
727
974
 
728
975
  // src/hooks/use-documents-css-links.ts
729
976
  var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
@@ -773,7 +1020,7 @@ function getLinkAttrs(el) {
773
1020
  }
774
1021
 
775
1022
  // src/hooks/use-style-items.ts
776
- var import_react10 = require("react");
1023
+ var import_react13 = require("react");
777
1024
  var import_editor_responsive2 = require("@elementor/editor-responsive");
778
1025
  var import_editor_styles4 = require("@elementor/editor-styles");
779
1026
  var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
@@ -835,12 +1082,12 @@ function signalizedProcess(signal, steps = []) {
835
1082
  }
836
1083
 
837
1084
  // src/hooks/use-style-prop-resolver.ts
838
- var import_react8 = require("react");
1085
+ var import_react11 = require("react");
839
1086
  var import_editor_styles2 = require("@elementor/editor-styles");
840
1087
  var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
841
1088
 
842
1089
  // src/renderers/create-props-resolver.ts
843
- var import_editor_props2 = require("@elementor/editor-props");
1090
+ var import_editor_props3 = require("@elementor/editor-props");
844
1091
 
845
1092
  // src/renderers/multi-props.ts
846
1093
  var isMultiProps = (propValue) => {
@@ -878,7 +1125,7 @@ function createPropsResolver({ transformers, schema: initialSchema, onPropResolv
878
1125
  if (value === null || value === void 0) {
879
1126
  return null;
880
1127
  }
881
- if (!(0, import_editor_props2.isTransformable)(value)) {
1128
+ if (!(0, import_editor_props3.isTransformable)(value)) {
882
1129
  return value;
883
1130
  }
884
1131
  if (depth > TRANSFORM_DEPTH_LIMIT) {
@@ -963,7 +1210,7 @@ var styleTransformersRegistry = createTransformersRegistry();
963
1210
 
964
1211
  // src/hooks/use-style-prop-resolver.ts
965
1212
  function useStylePropResolver() {
966
- return (0, import_react8.useMemo)(() => {
1213
+ return (0, import_react11.useMemo)(() => {
967
1214
  return createPropsResolver({
968
1215
  transformers: styleTransformersRegistry,
969
1216
  schema: (0, import_editor_styles2.getStylesSchema)(),
@@ -978,20 +1225,20 @@ function useStylePropResolver() {
978
1225
  }
979
1226
 
980
1227
  // src/hooks/use-style-renderer.ts
981
- var import_react9 = require("react");
1228
+ var import_react12 = require("react");
982
1229
  var import_editor_responsive = require("@elementor/editor-responsive");
983
1230
 
984
1231
  // src/renderers/create-styles-renderer.ts
985
1232
  var import_editor_styles3 = require("@elementor/editor-styles");
986
- var import_utils3 = require("@elementor/utils");
1233
+ var import_utils4 = require("@elementor/utils");
987
1234
 
988
1235
  // src/renderers/errors.ts
989
- var import_utils2 = require("@elementor/utils");
990
- var UnknownStyleTypeError = (0, import_utils2.createError)({
1236
+ var import_utils3 = require("@elementor/utils");
1237
+ var UnknownStyleTypeError = (0, import_utils3.createError)({
991
1238
  code: "unknown_style_type",
992
1239
  message: "Unknown style type"
993
1240
  });
994
- var UnknownStyleStateError = (0, import_utils2.createError)({
1241
+ var UnknownStyleStateError = (0, import_utils3.createError)({
995
1242
  code: "unknown_style_state",
996
1243
  message: "Unknown style state"
997
1244
  });
@@ -1076,7 +1323,7 @@ async function propsToCss({ props, resolve, signal }) {
1076
1323
  }, []).join("");
1077
1324
  }
1078
1325
  function customCssToString(customCss) {
1079
- const decoded = (0, import_utils3.decodeString)(customCss?.raw || "");
1326
+ const decoded = (0, import_utils4.decodeString)(customCss?.raw || "");
1080
1327
  if (!decoded.trim()) {
1081
1328
  return "";
1082
1329
  }
@@ -1087,7 +1334,7 @@ function customCssToString(customCss) {
1087
1334
  var SELECTOR_PREFIX = ".elementor";
1088
1335
  function useStyleRenderer(resolve) {
1089
1336
  const breakpoints = (0, import_editor_responsive.useBreakpointsMap)();
1090
- return (0, import_react9.useMemo)(() => {
1337
+ return (0, import_react12.useMemo)(() => {
1091
1338
  return createStylesRenderer({
1092
1339
  selectorPrefix: SELECTOR_PREFIX,
1093
1340
  breakpoints,
@@ -1101,9 +1348,9 @@ function useStyleItems() {
1101
1348
  const resolve = useStylePropResolver();
1102
1349
  const renderStyles = useStyleRenderer(resolve);
1103
1350
  const breakpoints = (0, import_editor_responsive2.useBreakpoints)();
1104
- const [styleItems, setStyleItems] = (0, import_react10.useState)({});
1105
- const styleItemsCacheRef = (0, import_react10.useRef)(/* @__PURE__ */ new Map());
1106
- const providerAndSubscribers = (0, import_react10.useMemo)(() => {
1351
+ const [styleItems, setStyleItems] = (0, import_react13.useState)({});
1352
+ const styleItemsCacheRef = (0, import_react13.useRef)(/* @__PURE__ */ new Map());
1353
+ const providerAndSubscribers = (0, import_react13.useMemo)(() => {
1107
1354
  const createEmptyCache = () => {
1108
1355
  return { orderedIds: [], itemsById: /* @__PURE__ */ new Map() };
1109
1356
  };
@@ -1129,7 +1376,7 @@ function useStyleItems() {
1129
1376
  })
1130
1377
  );
1131
1378
  }, [renderStyles]);
1132
- (0, import_react10.useEffect)(() => {
1379
+ (0, import_react13.useEffect)(() => {
1133
1380
  const unsubscribes = providerAndSubscribers.map(
1134
1381
  ({ provider, subscriber }) => provider.subscribe(subscriber)
1135
1382
  );
@@ -1144,11 +1391,11 @@ function useStyleItems() {
1144
1391
  await Promise.all(promises);
1145
1392
  });
1146
1393
  });
1147
- const breakpointSorter = (0, import_react10.useMemo)(
1394
+ const breakpointSorter = (0, import_react13.useMemo)(
1148
1395
  () => createBreakpointSorter(breakpoints.map((breakpoint) => breakpoint.id)),
1149
1396
  [breakpoints]
1150
1397
  );
1151
- return (0, import_react10.useMemo)(
1398
+ return (0, import_react13.useMemo)(
1152
1399
  () => Object.values(styleItems).sort(prioritySorter).flatMap(({ items }) => items).sort(stateSorter).sort(breakpointSorter),
1153
1400
  [styleItems, breakpointSorter]
1154
1401
  );
@@ -1290,7 +1537,7 @@ function StyleRenderer() {
1290
1537
  if (!container) {
1291
1538
  return null;
1292
1539
  }
1293
- return /* @__PURE__ */ React4.createElement(import_ui3.Portal, { container }, filterUniqueStyleDefinitions(styleItems).map((item) => /* @__PURE__ */ React4.createElement("style", { key: `${item.id}-${item.breakpoint}-${item.state ?? "normal"}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ React4.createElement("link", { ...attrs, key: attrs.id })));
1540
+ return /* @__PURE__ */ React7.createElement(import_ui4.Portal, { container }, filterUniqueStyleDefinitions(styleItems).map((item) => /* @__PURE__ */ React7.createElement("style", { key: `${item.id}-${item.breakpoint}-${item.state ?? "normal"}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ React7.createElement("link", { ...attrs, key: attrs.id })));
1294
1541
  }
1295
1542
  function usePortalContainer2() {
1296
1543
  return (0, import_editor_v1_adapters9.__privateUseListenTo)((0, import_editor_v1_adapters9.commandEndEvent)("editor/documents/attach-preview"), () => (0, import_editor_v1_adapters9.getCanvasIframeDocument)()?.head);
@@ -1320,7 +1567,7 @@ var import_editor_v1_adapters10 = require("@elementor/editor-v1-adapters");
1320
1567
  var import_i18n = require("@wordpress/i18n");
1321
1568
 
1322
1569
  // src/form-structure/utils.ts
1323
- var import_editor_elements4 = require("@elementor/editor-elements");
1570
+ var import_editor_elements5 = require("@elementor/editor-elements");
1324
1571
  var FORM_ELEMENT_TYPE = "e-form";
1325
1572
  var FORM_FIELD_ELEMENT_TYPES = /* @__PURE__ */ new Set([
1326
1573
  "e-form-input",
@@ -1350,10 +1597,10 @@ function isWithinForm(element) {
1350
1597
  return isElementWithinFormSelector(element);
1351
1598
  }
1352
1599
  function hasElementType(element, type) {
1353
- return (0, import_editor_elements4.getAllDescendants)(element).some((item) => getElementType(item) === type);
1600
+ return (0, import_editor_elements5.getAllDescendants)(element).some((item) => getElementType(item) === type);
1354
1601
  }
1355
1602
  function hasElementTypes(element, types) {
1356
- return (0, import_editor_elements4.getAllDescendants)(element).some((item) => {
1603
+ return (0, import_editor_elements5.getAllDescendants)(element).some((item) => {
1357
1604
  const itemType = getElementType(item);
1358
1605
  return itemType ? types.has(itemType) : false;
1359
1606
  });
@@ -2081,7 +2328,7 @@ function initStyleTransformers() {
2081
2328
  }
2082
2329
 
2083
2330
  // src/legacy/init-legacy-views.ts
2084
- var import_editor_elements8 = require("@elementor/editor-elements");
2331
+ var import_editor_elements9 = require("@elementor/editor-elements");
2085
2332
  var import_editor_v1_adapters13 = require("@elementor/editor-v1-adapters");
2086
2333
 
2087
2334
  // src/renderers/create-dom-renderer.ts
@@ -2210,25 +2457,25 @@ function createElementViewClassDeclaration() {
2210
2457
  }
2211
2458
 
2212
2459
  // src/legacy/create-nested-templated-element-type.ts
2213
- var import_editor_elements6 = require("@elementor/editor-elements");
2460
+ var import_editor_elements7 = require("@elementor/editor-elements");
2214
2461
 
2215
2462
  // src/legacy/create-pending-element.ts
2216
- var import_editor_elements5 = require("@elementor/editor-elements");
2463
+ var import_editor_elements6 = require("@elementor/editor-elements");
2217
2464
  function createPendingElement(wrapperView, data, options = {}) {
2218
2465
  const parentContainer = wrapperView.getContainer();
2219
2466
  const model = { ...data };
2220
2467
  if (!model.id) {
2221
- model.id = (0, import_editor_elements5.generateElementId)();
2468
+ model.id = (0, import_editor_elements6.generateElementId)();
2222
2469
  }
2223
2470
  if (!model.elements) {
2224
2471
  model.elements = [];
2225
2472
  }
2226
- const added = (0, import_editor_elements5.addModelToParent)(parentContainer.id, model, options);
2473
+ const added = (0, import_editor_elements6.addModelToParent)(parentContainer.id, model, options);
2227
2474
  if (!added) {
2228
2475
  return void 0;
2229
2476
  }
2230
2477
  const childId = model.id;
2231
- const childModel = (0, import_editor_elements5.findModelInDocument)(childId);
2478
+ const childModel = (0, import_editor_elements6.findModelInDocument)(childId);
2232
2479
  if (!childModel) {
2233
2480
  return void 0;
2234
2481
  }
@@ -2239,7 +2486,7 @@ function createPendingElement(wrapperView, data, options = {}) {
2239
2486
  model: childModel,
2240
2487
  view: void 0,
2241
2488
  lookup() {
2242
- return (0, import_editor_elements5.getContainer)(childId) ?? pendingContainer;
2489
+ return (0, import_editor_elements6.getContainer)(childId) ?? pendingContainer;
2243
2490
  }
2244
2491
  };
2245
2492
  wrapperView.once("render", () => {
@@ -2252,7 +2499,7 @@ function createPendingElement(wrapperView, data, options = {}) {
2252
2499
  }
2253
2500
  function selectChildWhenWrapperRenders(wrapperView, childId) {
2254
2501
  wrapperView.once("render", () => {
2255
- const childContainer = (0, import_editor_elements5.getContainer)(childId);
2502
+ const childContainer = (0, import_editor_elements6.getContainer)(childId);
2256
2503
  if (childContainer?.model?.trigger) {
2257
2504
  childContainer.model.trigger("request:edit");
2258
2505
  return;
@@ -2518,7 +2765,7 @@ function createNestedTemplatedElementView({
2518
2765
  this._initAlpine();
2519
2766
  });
2520
2767
  this.model.trigger("render:complete");
2521
- window.dispatchEvent(new CustomEvent(import_editor_elements6.ELEMENT_STYLE_CHANGE_EVENT));
2768
+ window.dispatchEvent(new CustomEvent(import_editor_elements7.ELEMENT_STYLE_CHANGE_EVENT));
2522
2769
  },
2523
2770
  async _renderTemplate() {
2524
2771
  const model = this.model;
@@ -2758,9 +3005,9 @@ function createPromotionView(BaseView) {
2758
3005
  var import_client = require("react-dom/client");
2759
3006
 
2760
3007
  // src/legacy/replacements/inline-editing/inline-editing-elements.tsx
2761
- var React6 = __toESM(require("react"));
2762
- var import_editor_elements7 = require("@elementor/editor-elements");
2763
- var import_editor_props4 = require("@elementor/editor-props");
3008
+ var React9 = __toESM(require("react"));
3009
+ var import_editor_elements8 = require("@elementor/editor-elements");
3010
+ var import_editor_props5 = require("@elementor/editor-props");
2764
3011
  var import_editor_v1_adapters12 = require("@elementor/editor-v1-adapters");
2765
3012
  var import_i18n3 = require("@wordpress/i18n");
2766
3013
 
@@ -2807,14 +3054,14 @@ var ReplacementBase = class {
2807
3054
  };
2808
3055
 
2809
3056
  // src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
2810
- var React5 = __toESM(require("react"));
2811
- var import_react12 = require("react");
3057
+ var React8 = __toESM(require("react"));
3058
+ var import_react15 = require("react");
2812
3059
  var import_editor_controls2 = require("@elementor/editor-controls");
2813
- var import_ui4 = require("@elementor/ui");
2814
- var import_react13 = require("@floating-ui/react");
3060
+ var import_ui5 = require("@elementor/ui");
3061
+ var import_react16 = require("@floating-ui/react");
2815
3062
 
2816
3063
  // src/legacy/replacements/inline-editing/inline-editing-utils.ts
2817
- var import_react11 = require("react");
3064
+ var import_react14 = require("react");
2818
3065
  var TOP_BAR_SELECTOR = "#elementor-editor-wrapper-v2";
2819
3066
  var NAVIGATOR_SELECTOR = "#elementor-navigator";
2820
3067
  var EDITING_PANEL = "#elementor-panel";
@@ -2845,8 +3092,8 @@ var getInlineEditorElement = (elementWrapper, expectedTag) => {
2845
3092
  return !expectedTag ? null : elementWrapper.querySelector(expectedTag);
2846
3093
  };
2847
3094
  var useOnClickOutsideIframe = (handleUnmount) => {
2848
- const asyncUnmountInlineEditor = (0, import_react11.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
2849
- (0, import_react11.useEffect)(() => {
3095
+ const asyncUnmountInlineEditor = (0, import_react14.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
3096
+ (0, import_react14.useEffect)(() => {
2850
3097
  EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach(
2851
3098
  (selector) => document?.querySelector(selector)?.addEventListener("mousedown", asyncUnmountInlineEditor)
2852
3099
  );
@@ -2856,8 +3103,8 @@ var useOnClickOutsideIframe = (handleUnmount) => {
2856
3103
  }, []);
2857
3104
  };
2858
3105
  var useRenderToolbar = (ownerDocument, id) => {
2859
- const [anchor, setAnchor] = (0, import_react11.useState)(null);
2860
- (0, import_react11.useEffect)(() => {
3106
+ const [anchor, setAnchor] = (0, import_react14.useState)(null);
3107
+ (0, import_react14.useEffect)(() => {
2861
3108
  if (!anchor) {
2862
3109
  removeToolbarAnchor(ownerDocument, id);
2863
3110
  }
@@ -2871,7 +3118,7 @@ var useRenderToolbar = (ownerDocument, id) => {
2871
3118
  setAnchor(null);
2872
3119
  }
2873
3120
  };
2874
- const clearAnchor = (0, import_react11.useCallback)(() => {
3121
+ const clearAnchor = (0, import_react14.useCallback)(() => {
2875
3122
  setAnchor(null);
2876
3123
  }, []);
2877
3124
  return { onSelectionEnd, anchor, clearAnchor };
@@ -2951,21 +3198,21 @@ var CanvasInlineEditor = ({
2951
3198
  setValue,
2952
3199
  requestDestroy
2953
3200
  }) => {
2954
- const [active, setActive] = (0, import_react12.useState)(true);
2955
- const [editor, setEditor] = (0, import_react12.useState)(null);
3201
+ const [active, setActive] = (0, import_react15.useState)(true);
3202
+ const [editor, setEditor] = (0, import_react15.useState)(null);
2956
3203
  const { onSelectionEnd, anchor: toolbarAnchor, clearAnchor } = useRenderToolbar(rootElement.ownerDocument, id);
2957
- (0, import_react12.useEffect)(() => {
3204
+ (0, import_react15.useEffect)(() => {
2958
3205
  if (!active) {
2959
3206
  clearAnchor();
2960
3207
  requestDestroy();
2961
3208
  }
2962
3209
  }, [active, clearAnchor, requestDestroy]);
2963
- const dismiss = (0, import_react12.useCallback)(() => {
3210
+ const dismiss = (0, import_react15.useCallback)(() => {
2964
3211
  setEditor(null);
2965
3212
  setActive(false);
2966
3213
  }, []);
2967
3214
  useOnClickOutsideIframe(dismiss);
2968
- (0, import_react12.useEffect)(() => {
3215
+ (0, import_react15.useEffect)(() => {
2969
3216
  const ownerDocument = contentElement.ownerDocument;
2970
3217
  const handleClickAway = (event) => {
2971
3218
  if (contentElement.contains(event.target)) {
@@ -2979,7 +3226,7 @@ var CanvasInlineEditor = ({
2979
3226
  if (!active) {
2980
3227
  return null;
2981
3228
  }
2982
- return /* @__PURE__ */ React5.createElement(import_ui4.ThemeProvider, null, /* @__PURE__ */ React5.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React5.createElement(
3229
+ return /* @__PURE__ */ React8.createElement(import_ui5.ThemeProvider, null, /* @__PURE__ */ React8.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React8.createElement(
2983
3230
  import_editor_controls2.InlineEditor,
2984
3231
  {
2985
3232
  onEditorCreate: setEditor,
@@ -2996,7 +3243,7 @@ var CanvasInlineEditor = ({
2996
3243
  autofocus: true,
2997
3244
  onSelectionEnd
2998
3245
  }
2999
- ), toolbarAnchor && editor && /* @__PURE__ */ React5.createElement(InlineEditingToolbar, { anchor: toolbarAnchor, editor, id }));
3246
+ ), toolbarAnchor && editor && /* @__PURE__ */ React8.createElement(InlineEditingToolbar, { anchor: toolbarAnchor, editor, id }));
3000
3247
  };
3001
3248
  var InlineEditingOverlay = ({
3002
3249
  expectedTag,
@@ -3004,26 +3251,26 @@ var InlineEditingOverlay = ({
3004
3251
  id
3005
3252
  }) => {
3006
3253
  const inlineEditedElement = getInlineEditorElement(rootElement, expectedTag);
3007
- const [overlayRefElement, setOverlayElement] = (0, import_react12.useState)(inlineEditedElement);
3008
- (0, import_react12.useEffect)(() => {
3254
+ const [overlayRefElement, setOverlayElement] = (0, import_react15.useState)(inlineEditedElement);
3255
+ (0, import_react15.useEffect)(() => {
3009
3256
  setOverlayElement(getInlineEditorElement(rootElement, expectedTag));
3010
3257
  }, [expectedTag, rootElement]);
3011
- return overlayRefElement ? /* @__PURE__ */ React5.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
3258
+ return overlayRefElement ? /* @__PURE__ */ React8.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
3012
3259
  };
3013
3260
  var InlineEditingToolbar = ({ anchor, editor, id }) => {
3014
- const { refs, floatingStyles } = (0, import_react13.useFloating)({
3261
+ const { refs, floatingStyles } = (0, import_react16.useFloating)({
3015
3262
  placement: "top",
3016
3263
  strategy: "fixed",
3017
3264
  transform: false,
3018
- whileElementsMounted: import_react13.autoUpdate,
3019
- middleware: [horizontalShifterMiddleware, (0, import_react13.flip)()]
3265
+ whileElementsMounted: import_react16.autoUpdate,
3266
+ middleware: [horizontalShifterMiddleware, (0, import_react16.flip)()]
3020
3267
  });
3021
- (0, import_react12.useLayoutEffect)(() => {
3268
+ (0, import_react15.useLayoutEffect)(() => {
3022
3269
  refs.setReference(anchor);
3023
3270
  return () => refs.setReference(null);
3024
3271
  }, [anchor, refs]);
3025
- return /* @__PURE__ */ React5.createElement(import_react13.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React5.createElement(
3026
- import_ui4.Box,
3272
+ return /* @__PURE__ */ React8.createElement(import_react16.FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React8.createElement(
3273
+ import_ui5.Box,
3027
3274
  {
3028
3275
  ref: refs.setFloating,
3029
3276
  role: "presentation",
@@ -3032,16 +3279,16 @@ var InlineEditingToolbar = ({ anchor, editor, id }) => {
3032
3279
  pointerEvents: "none"
3033
3280
  }
3034
3281
  },
3035
- /* @__PURE__ */ React5.createElement(import_editor_controls2.InlineEditorToolbar, { editor, elementId: id })
3282
+ /* @__PURE__ */ React8.createElement(import_editor_controls2.InlineEditorToolbar, { editor, elementId: id })
3036
3283
  ));
3037
3284
  };
3038
3285
 
3039
3286
  // src/legacy/replacements/inline-editing/inline-editing-eligibility.ts
3040
- var import_editor_props3 = require("@elementor/editor-props");
3287
+ var import_editor_props4 = require("@elementor/editor-props");
3041
3288
  var hasKey = (propType) => {
3042
3289
  return "key" in propType;
3043
3290
  };
3044
- var TEXT_PROP_TYPE_KEYS = /* @__PURE__ */ new Set([import_editor_props3.htmlV3PropTypeUtil.key, import_editor_props3.stringPropTypeUtil.key]);
3291
+ var TEXT_PROP_TYPE_KEYS = /* @__PURE__ */ new Set([import_editor_props4.htmlV3PropTypeUtil.key, import_editor_props4.stringPropTypeUtil.key]);
3045
3292
  var isCoreTextPropTypeKey = (key) => {
3046
3293
  return TEXT_PROP_TYPE_KEYS.has(key);
3047
3294
  };
@@ -3061,7 +3308,7 @@ var isInlineEditingAllowed = ({ rawValue, propTypeFromSchema }) => {
3061
3308
  if (rawValue === null || rawValue === void 0) {
3062
3309
  return isAllowedBySchema(propTypeFromSchema);
3063
3310
  }
3064
- return import_editor_props3.htmlV3PropTypeUtil.isValid(rawValue) || import_editor_props3.stringPropTypeUtil.isValid(rawValue);
3311
+ return import_editor_props4.htmlV3PropTypeUtil.isValid(rawValue) || import_editor_props4.stringPropTypeUtil.isValid(rawValue);
3065
3312
  };
3066
3313
 
3067
3314
  // src/legacy/replacements/inline-editing/inline-editing-elements.tsx
@@ -3135,7 +3382,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
3135
3382
  return INLINE_EDITING_PROPERTY_PER_TYPE[this.type] ?? "";
3136
3383
  }
3137
3384
  getInlineEditablePropType() {
3138
- const propSchema = (0, import_editor_elements7.getElementType)(this.type)?.propsSchema;
3385
+ const propSchema = (0, import_editor_elements8.getElementType)(this.type)?.propsSchema;
3139
3386
  const propertyName = this.getInlineEditablePropertyName();
3140
3387
  return propSchema?.[propertyName] ?? null;
3141
3388
  }
@@ -3146,15 +3393,15 @@ var InlineEditingReplacement = class extends ReplacementBase {
3146
3393
  }
3147
3394
  getExtractedContentValue() {
3148
3395
  const propValue = this.getInlineEditablePropValue();
3149
- const extracted = import_editor_props4.htmlV3PropTypeUtil.extract(propValue);
3150
- return import_editor_props4.stringPropTypeUtil.extract(extracted?.content ?? null) ?? "";
3396
+ const extracted = import_editor_props5.htmlV3PropTypeUtil.extract(propValue);
3397
+ return import_editor_props5.stringPropTypeUtil.extract(extracted?.content ?? null) ?? "";
3151
3398
  }
3152
3399
  setContentValue(value) {
3153
3400
  const settingKey = this.getInlineEditablePropertyName();
3154
3401
  const html = value || "";
3155
- const parsed = (0, import_editor_props4.parseHtmlChildren)(html);
3156
- const valueToSave = import_editor_props4.htmlV3PropTypeUtil.create({
3157
- content: parsed.content ? import_editor_props4.stringPropTypeUtil.create(parsed.content) : null,
3402
+ const parsed = (0, import_editor_props5.parseHtmlChildren)(html);
3403
+ const valueToSave = import_editor_props5.htmlV3PropTypeUtil.create({
3404
+ content: parsed.content ? import_editor_props5.stringPropTypeUtil.create(parsed.content) : null,
3158
3405
  children: parsed.children
3159
3406
  });
3160
3407
  (0, import_editor_v1_adapters12.undoable)(
@@ -3169,7 +3416,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
3169
3416
  }
3170
3417
  },
3171
3418
  {
3172
- title: (0, import_editor_elements7.getElementLabel)(this.id),
3419
+ title: (0, import_editor_elements8.getElementLabel)(this.id),
3173
3420
  // translators: %s is the name of the property that was edited.
3174
3421
  subtitle: (0, import_i18n3.__)("%s edited", "elementor").replace(
3175
3422
  "%s",
@@ -3185,7 +3432,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
3185
3432
  return null;
3186
3433
  }
3187
3434
  if (propType.kind === "union") {
3188
- const textKeys = [import_editor_props4.htmlV3PropTypeUtil.key, import_editor_props4.stringPropTypeUtil.key];
3435
+ const textKeys = [import_editor_props5.htmlV3PropTypeUtil.key, import_editor_props5.stringPropTypeUtil.key];
3189
3436
  for (const key of textKeys) {
3190
3437
  if (propType.prop_types[key]) {
3191
3438
  return key;
@@ -3202,7 +3449,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
3202
3449
  (0, import_editor_v1_adapters12.__privateRunCommandSync)(
3203
3450
  "document/elements/set-settings",
3204
3451
  {
3205
- container: (0, import_editor_elements7.getContainer)(this.id),
3452
+ container: (0, import_editor_elements8.getContainer)(this.id),
3206
3453
  settings: {
3207
3454
  [key]: value
3208
3455
  }
@@ -3214,10 +3461,10 @@ var InlineEditingReplacement = class extends ReplacementBase {
3214
3461
  getExpectedTag() {
3215
3462
  const tagPropType = this.getTagPropType();
3216
3463
  const tagSettingKey = "tag";
3217
- return import_editor_props4.stringPropTypeUtil.extract(this.getSetting(tagSettingKey) ?? null) ?? import_editor_props4.stringPropTypeUtil.extract(tagPropType?.default ?? null) ?? null;
3464
+ return import_editor_props5.stringPropTypeUtil.extract(this.getSetting(tagSettingKey) ?? null) ?? import_editor_props5.stringPropTypeUtil.extract(tagPropType?.default ?? null) ?? null;
3218
3465
  }
3219
3466
  getTagPropType() {
3220
- const propsSchema = (0, import_editor_elements7.getElementType)(this.type)?.propsSchema;
3467
+ const propsSchema = (0, import_editor_elements8.getElementType)(this.type)?.propsSchema;
3221
3468
  if (!propsSchema?.tag) {
3222
3469
  return null;
3223
3470
  }
@@ -3241,7 +3488,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
3241
3488
  contentElement.innerHTML = "";
3242
3489
  this.editing = true;
3243
3490
  this.reactRoot.render(
3244
- /* @__PURE__ */ React6.createElement(
3491
+ /* @__PURE__ */ React9.createElement(
3245
3492
  CanvasInlineEditor,
3246
3493
  {
3247
3494
  elementClasses,
@@ -3377,7 +3624,7 @@ function registerElementType(type, elementTypeGenerator) {
3377
3624
  }
3378
3625
  function initLegacyViews() {
3379
3626
  (0, import_editor_v1_adapters13.__privateListenTo)((0, import_editor_v1_adapters13.v1ReadyEvent)(), () => {
3380
- const widgetsCache = (0, import_editor_elements8.getWidgetsCache)() ?? {};
3627
+ const widgetsCache = (0, import_editor_elements9.getWidgetsCache)() ?? {};
3381
3628
  const legacyWindow = window;
3382
3629
  const renderer = createDomRenderer();
3383
3630
  registerProPromotionTypes(widgetsCache);
@@ -3434,7 +3681,7 @@ function createNestedTemplatedType(type, renderer, element) {
3434
3681
  }
3435
3682
 
3436
3683
  // src/legacy/tabs-model-extensions.ts
3437
- var import_editor_props5 = require("@elementor/editor-props");
3684
+ var import_editor_props6 = require("@elementor/editor-props");
3438
3685
  var tabModelExtensions = {
3439
3686
  modifyDefaultChildren(elements) {
3440
3687
  if (!Array.isArray(elements) || elements.length === 0) {
@@ -3450,8 +3697,8 @@ var tabModelExtensions = {
3450
3697
  ...paragraphElement,
3451
3698
  settings: {
3452
3699
  ...paragraphElement.settings,
3453
- paragraph: import_editor_props5.htmlV3PropTypeUtil.create({
3454
- content: import_editor_props5.stringPropTypeUtil.create(`Tab ${position}`),
3700
+ paragraph: import_editor_props6.htmlV3PropTypeUtil.create({
3701
+ content: import_editor_props6.stringPropTypeUtil.create(`Tab ${position}`),
3455
3702
  children: []
3456
3703
  })
3457
3704
  }
@@ -3521,7 +3768,7 @@ var initAvailableWidgetsResource = (reg) => {
3521
3768
  };
3522
3769
 
3523
3770
  // src/mcp/resources/document-structure-resource.ts
3524
- var import_editor_elements9 = require("@elementor/editor-elements");
3771
+ var import_editor_elements10 = require("@elementor/editor-elements");
3525
3772
  var import_editor_v1_adapters15 = require("@elementor/editor-v1-adapters");
3526
3773
  var DOCUMENT_STRUCTURE_URI = "elementor://document/structure";
3527
3774
  var initDocumentStructureResource = (reg) => {
@@ -3586,7 +3833,7 @@ function resolveElementVersion(element) {
3586
3833
  return "v4";
3587
3834
  }
3588
3835
  const widgetType = element.model?.attributes?.widgetType;
3589
- if (widgetType && (0, import_editor_elements9.getWidgetsCache)()?.[widgetType]?.atomic_props_schema) {
3836
+ if (widgetType && (0, import_editor_elements10.getWidgetsCache)()?.[widgetType]?.atomic_props_schema) {
3590
3837
  return "v4";
3591
3838
  }
3592
3839
  return "v3";
@@ -3782,7 +4029,7 @@ var initGeneralContextResource = (reg) => {
3782
4029
  };
3783
4030
 
3784
4031
  // src/mcp/resources/selected-element-resource.ts
3785
- var import_editor_elements10 = require("@elementor/editor-elements");
4032
+ var import_editor_elements11 = require("@elementor/editor-elements");
3786
4033
  var import_editor_v1_adapters18 = require("@elementor/editor-v1-adapters");
3787
4034
  var SELECTED_ELEMENT_URI = "elementor://context/selected-element";
3788
4035
  var initSelectedElementResource = (reg) => {
@@ -3853,11 +4100,11 @@ function createEmptySelectedElementPayload() {
3853
4100
  };
3854
4101
  }
3855
4102
  function readSelectionFromEditor() {
3856
- const elements = (0, import_editor_elements10.getSelectedElements)();
4103
+ const elements = (0, import_editor_elements11.getSelectedElements)();
3857
4104
  if (elements.length !== 1) {
3858
4105
  return createEmptySelectedElementPayload();
3859
4106
  }
3860
- const container = (0, import_editor_elements10.getContainer)(elements[0].id);
4107
+ const container = (0, import_editor_elements11.getContainer)(elements[0].id);
3861
4108
  return buildPayloadFromContainer(container);
3862
4109
  }
3863
4110
  function buildPayloadFromContainer(container) {
@@ -3880,7 +4127,7 @@ function resolveElementVersion2(container, widgetType) {
3880
4127
  if (container.model?.config?.atomic) {
3881
4128
  return "v4";
3882
4129
  }
3883
- if (widgetType && (0, import_editor_elements10.getWidgetsCache)()?.[widgetType]?.atomic_props_schema) {
4130
+ if (widgetType && (0, import_editor_elements11.getWidgetsCache)()?.[widgetType]?.atomic_props_schema) {
3884
4131
  return "v4";
3885
4132
  }
3886
4133
  return "v3";
@@ -3890,7 +4137,7 @@ function getElementProperties(container, widgetType) {
3890
4137
  if (!settings || typeof settings !== "object") {
3891
4138
  return null;
3892
4139
  }
3893
- const widgetConfig = widgetType ? (0, import_editor_elements10.getWidgetsCache)()?.[widgetType] : null;
4140
+ const widgetConfig = widgetType ? (0, import_editor_elements11.getWidgetsCache)()?.[widgetType] : null;
3894
4141
  const controls = widgetConfig?.controls;
3895
4142
  const filtered = {};
3896
4143
  for (const [key, value] of Object.entries(settings)) {
@@ -3929,19 +4176,19 @@ function getElementDisplayName(container) {
3929
4176
 
3930
4177
  // src/mcp/tools/build-composition/tool.ts
3931
4178
  var import_editor_documents3 = require("@elementor/editor-documents");
3932
- var import_editor_elements14 = require("@elementor/editor-elements");
4179
+ var import_editor_elements15 = require("@elementor/editor-elements");
3933
4180
 
3934
4181
  // src/composition-builder/composition-builder.ts
3935
- var import_editor_elements13 = require("@elementor/editor-elements");
4182
+ var import_editor_elements14 = require("@elementor/editor-elements");
3936
4183
 
3937
4184
  // src/mcp/utils/do-update-element-property.ts
3938
- var import_editor_elements11 = require("@elementor/editor-elements");
3939
- var import_editor_props6 = require("@elementor/editor-props");
4185
+ var import_editor_elements12 = require("@elementor/editor-elements");
4186
+ var import_editor_props7 = require("@elementor/editor-props");
3940
4187
  var import_editor_styles5 = require("@elementor/editor-styles");
3941
4188
  var import_editor_v1_adapters19 = require("@elementor/editor-v1-adapters");
3942
4189
  function resolvePropValue(value, forceKey) {
3943
4190
  const Utils = window.elementorV2.editorVariables.Utils;
3944
- return import_editor_props6.Schema.adjustLlmPropValueSchema(value, {
4191
+ return import_editor_props7.Schema.adjustLlmPropValueSchema(value, {
3945
4192
  forceKey,
3946
4193
  transformers: Utils.globalVariablesLLMResolvers
3947
4194
  });
@@ -3949,7 +4196,7 @@ function resolvePropValue(value, forceKey) {
3949
4196
  var doUpdateElementProperty = (params) => {
3950
4197
  const { elementId, propertyName, propertyValue, elementType } = params;
3951
4198
  if (propertyName === "_styles") {
3952
- const elementStyles = (0, import_editor_elements11.getElementStyles)(elementId) || {};
4199
+ const elementStyles = (0, import_editor_elements12.getElementStyles)(elementId) || {};
3953
4200
  const propertyMapValue = propertyValue;
3954
4201
  const styleSchema = (0, import_editor_styles5.getStylesSchema)();
3955
4202
  const transformedStyleValues = Object.fromEntries(
@@ -3986,7 +4233,7 @@ var doUpdateElementProperty = (params) => {
3986
4233
  }
3987
4234
  if (propertyRawSchema.kind === "plain") {
3988
4235
  if (typeof propertyMapValue[stylePropName] !== "object") {
3989
- const propUtil = (0, import_editor_props6.getPropSchemaFromCache)(propertyRawSchema.key);
4236
+ const propUtil = (0, import_editor_props7.getPropSchemaFromCache)(propertyRawSchema.key);
3990
4237
  if (propUtil) {
3991
4238
  const plainValue = propUtil.create(propertyMapValue[stylePropName]);
3992
4239
  propertyMapValue[stylePropName] = plainValue;
@@ -3997,7 +4244,7 @@ var doUpdateElementProperty = (params) => {
3997
4244
  delete transformedStyleValues.custom_css;
3998
4245
  const localStyle = Object.values(elementStyles).find((style) => style.label === "local");
3999
4246
  if (!localStyle) {
4000
- (0, import_editor_elements11.createElementStyle)({
4247
+ (0, import_editor_elements12.createElementStyle)({
4001
4248
  elementId,
4002
4249
  ...typeof customCss !== "undefined" ? { custom_css: customCss } : {},
4003
4250
  classesProp: "classes",
@@ -4011,7 +4258,7 @@ var doUpdateElementProperty = (params) => {
4011
4258
  }
4012
4259
  });
4013
4260
  } else {
4014
- (0, import_editor_elements11.updateElementStyle)({
4261
+ (0, import_editor_elements12.updateElementStyle)({
4015
4262
  elementId,
4016
4263
  styleId: localStyle.id,
4017
4264
  meta: {
@@ -4026,7 +4273,7 @@ var doUpdateElementProperty = (params) => {
4026
4273
  }
4027
4274
  return;
4028
4275
  }
4029
- const elementPropSchema = (0, import_editor_elements11.getWidgetsCache)()?.[elementType]?.atomic_props_schema;
4276
+ const elementPropSchema = (0, import_editor_elements12.getWidgetsCache)()?.[elementType]?.atomic_props_schema;
4030
4277
  if (!elementPropSchema) {
4031
4278
  throw new Error(`No prop schema found for element type: ${elementType}`);
4032
4279
  }
@@ -4040,7 +4287,7 @@ var doUpdateElementProperty = (params) => {
4040
4287
  }
4041
4288
  const propKey = elementPropSchema[propertyName].key;
4042
4289
  const value = resolvePropValue(propertyValue, propKey);
4043
- const { valid, jsonSchema } = import_editor_props6.Schema.validatePropValue(elementPropSchema[propertyName], propertyValue);
4290
+ const { valid, jsonSchema } = import_editor_props7.Schema.validatePropValue(elementPropSchema[propertyName], propertyValue);
4044
4291
  if (!valid) {
4045
4292
  throw new Error(
4046
4293
  `Invalid PropValue for elementId: ${elementId}. PropKey: ${propKey}, PropValue: ${JSON.stringify(
@@ -4049,7 +4296,7 @@ var doUpdateElementProperty = (params) => {
4049
4296
  Expected Schema: ${jsonSchema}`
4050
4297
  );
4051
4298
  }
4052
- (0, import_editor_elements11.updateElementSettings)({
4299
+ (0, import_editor_elements12.updateElementSettings)({
4053
4300
  id: elementId,
4054
4301
  props: {
4055
4302
  [propertyName]: value
@@ -4060,15 +4307,15 @@ Expected Schema: ${jsonSchema}`
4060
4307
  };
4061
4308
 
4062
4309
  // src/mcp/utils/validate-input.ts
4063
- var import_editor_elements12 = require("@elementor/editor-elements");
4064
- var import_editor_props7 = require("@elementor/editor-props");
4310
+ var import_editor_elements13 = require("@elementor/editor-elements");
4311
+ var import_editor_props8 = require("@elementor/editor-props");
4065
4312
  var import_editor_styles6 = require("@elementor/editor-styles");
4066
4313
  var _widgetsSchema = null;
4067
4314
  var validateInput = {
4068
4315
  get widgetsSchema() {
4069
4316
  if (!_widgetsSchema) {
4070
4317
  const schema2 = {};
4071
- const cache = (0, import_editor_elements12.getWidgetsCache)();
4318
+ const cache = (0, import_editor_elements13.getWidgetsCache)();
4072
4319
  if (!cache) {
4073
4320
  return {};
4074
4321
  }
@@ -4095,10 +4342,10 @@ var validateInput = {
4095
4342
  if (!propSchema) {
4096
4343
  errors.push(`Property "${propName}" is not defined in the schema.`);
4097
4344
  hasInvalidKey = true;
4098
- } else if (!import_editor_props7.Schema.isPropKeyConfigurable(propName, propSchema)) {
4345
+ } else if (!import_editor_props8.Schema.isPropKeyConfigurable(propName, propSchema)) {
4099
4346
  errors.push(`Property "${propName}" is not configurable.`);
4100
4347
  } else {
4101
- const { valid } = import_editor_props7.Schema.validatePropValue(propSchema, propValue);
4348
+ const { valid } = import_editor_props8.Schema.validatePropValue(propSchema, propValue);
4102
4349
  if (!valid) {
4103
4350
  errors.push(
4104
4351
  `Invalid property "${propName}". Validate input with resource [${STYLE_SCHEMA_URI.replace(
@@ -4192,11 +4439,11 @@ var CompositionBuilder = class _CompositionBuilder {
4192
4439
  elementCustomCSS = {};
4193
4440
  rootContainers = [];
4194
4441
  api = {
4195
- createElement: import_editor_elements13.createElement,
4196
- deleteElement: import_editor_elements13.deleteElement,
4197
- getWidgetsCache: import_editor_elements13.getWidgetsCache,
4198
- generateElementId: import_editor_elements13.generateElementId,
4199
- getContainer: import_editor_elements13.getContainer,
4442
+ createElement: import_editor_elements14.createElement,
4443
+ deleteElement: import_editor_elements14.deleteElement,
4444
+ getWidgetsCache: import_editor_elements14.getWidgetsCache,
4445
+ generateElementId: import_editor_elements14.generateElementId,
4446
+ getContainer: import_editor_elements14.getContainer,
4200
4447
  doUpdateElementProperty
4201
4448
  };
4202
4449
  xml;
@@ -4661,14 +4908,14 @@ var initBuildCompositionsTool = (reg) => {
4661
4908
  let generatedXML = "";
4662
4909
  const errors = [];
4663
4910
  const rootContainers = [];
4664
- const documentContainer = (0, import_editor_elements14.getContainer)("document");
4911
+ const documentContainer = (0, import_editor_elements15.getContainer)("document");
4665
4912
  const currentDocument = (0, import_editor_documents3.getCurrentDocument)();
4666
4913
  const targetContainer = getCompositionTargetContainer(documentContainer, currentDocument?.type.value);
4667
4914
  try {
4668
4915
  const compositionBuilder = CompositionBuilder.fromXMLString(xmlStructure, {
4669
- createElement: import_editor_elements14.createElement,
4670
- deleteElement: import_editor_elements14.deleteElement,
4671
- getWidgetsCache: import_editor_elements14.getWidgetsCache
4916
+ createElement: import_editor_elements15.createElement,
4917
+ deleteElement: import_editor_elements15.deleteElement,
4918
+ getWidgetsCache: import_editor_elements15.getWidgetsCache
4672
4919
  });
4673
4920
  compositionBuilder.setElementConfig(elementConfig);
4674
4921
  compositionBuilder.setStylesConfig(stylesConfig);
@@ -4704,7 +4951,7 @@ var initBuildCompositionsTool = (reg) => {
4704
4951
  }
4705
4952
  if (errors.length) {
4706
4953
  rootContainers.forEach((rootContainer) => {
4707
- (0, import_editor_elements14.deleteElement)({
4954
+ (0, import_editor_elements15.deleteElement)({
4708
4955
  container: rootContainer,
4709
4956
  options: { useHistory: false }
4710
4957
  });
@@ -4758,7 +5005,7 @@ function assertCompositionXmlUsesV4WidgetsOnly(xmlStructure) {
4758
5005
  if (doc.querySelector("parsererror")) {
4759
5006
  throw new Error("Failed to parse XML string: " + doc);
4760
5007
  }
4761
- const widgetsCache = (0, import_editor_elements14.getWidgetsCache)() ?? {};
5008
+ const widgetsCache = (0, import_editor_elements15.getWidgetsCache)() ?? {};
4762
5009
  for (const node of doc.querySelectorAll("*")) {
4763
5010
  const type = node.tagName;
4764
5011
  const widgetData = widgetsCache[type];
@@ -4777,7 +5024,7 @@ function assertCompositionXmlUsesV4WidgetsOnly(xmlStructure) {
4777
5024
  }
4778
5025
 
4779
5026
  // src/mcp/tools/configure-element/tool.ts
4780
- var import_editor_elements15 = require("@elementor/editor-elements");
5027
+ var import_editor_elements16 = require("@elementor/editor-elements");
4781
5028
 
4782
5029
  // src/mcp/tools/configure-element/prompt.ts
4783
5030
  var import_editor_mcp3 = require("@elementor/editor-mcp");
@@ -4946,7 +5193,7 @@ var initConfigureElementTool = (reg) => {
4946
5193
  { description: "Configure element guide", uri: CONFIGURE_ELEMENT_GUIDE_URI }
4947
5194
  ],
4948
5195
  handler: ({ elementId, propertiesToChange, elementType, stylePropertiesToChange }) => {
4949
- const widgetData = (0, import_editor_elements15.getWidgetsCache)()?.[elementType];
5196
+ const widgetData = (0, import_editor_elements16.getWidgetsCache)()?.[elementType];
4950
5197
  if (!widgetData) {
4951
5198
  throw new Error(
4952
5199
  `Unknown element type: ${elementType}. Check the available-widgets resource for valid types.`
@@ -5038,8 +5285,8 @@ Check the styles schema at the resource [${STYLE_SCHEMA_URI.replace(
5038
5285
  }
5039
5286
 
5040
5287
  // src/mcp/tools/get-element-config/tool.ts
5041
- var import_editor_elements16 = require("@elementor/editor-elements");
5042
- var import_editor_props8 = require("@elementor/editor-props");
5288
+ var import_editor_elements17 = require("@elementor/editor-elements");
5289
+ var import_editor_props9 = require("@elementor/editor-props");
5043
5290
  var import_schema5 = require("@elementor/schema");
5044
5291
  var schema = {
5045
5292
  elementId: import_schema5.z.string()
@@ -5073,12 +5320,12 @@ var initGetElementConfigTool = (reg) => {
5073
5320
  schema,
5074
5321
  outputSchema: outputSchema3,
5075
5322
  handler: async ({ elementId }) => {
5076
- const element = (0, import_editor_elements16.getContainer)(elementId);
5323
+ const element = (0, import_editor_elements17.getContainer)(elementId);
5077
5324
  if (!element) {
5078
5325
  throw new Error(`Element with ID ${elementId} not found.`);
5079
5326
  }
5080
5327
  const elementType = element.model.get("widgetType") || element.model.get("elType") || "";
5081
- const widgetData = (0, import_editor_elements16.getWidgetsCache)()?.[elementType];
5328
+ const widgetData = (0, import_editor_elements17.getWidgetsCache)()?.[elementType];
5082
5329
  if (!widgetData) {
5083
5330
  throw new Error(
5084
5331
  `Unknown element type: ${elementType}. Check the available-widgets resource for valid types.`
@@ -5090,16 +5337,16 @@ var initGetElementConfigTool = (reg) => {
5090
5337
  );
5091
5338
  }
5092
5339
  const elementRawSettings = element.settings;
5093
- const propSchema = (0, import_editor_elements16.getWidgetsCache)()?.[elementType]?.atomic_props_schema;
5340
+ const propSchema = (0, import_editor_elements17.getWidgetsCache)()?.[elementType]?.atomic_props_schema;
5094
5341
  if (!elementRawSettings || !propSchema) {
5095
5342
  throw new Error(`No settings or prop schema found for element ID: ${elementId}`);
5096
5343
  }
5097
5344
  const propValues = {};
5098
5345
  const stylePropValues = {};
5099
- import_editor_props8.Schema.configurableKeys(propSchema).forEach((key) => {
5346
+ import_editor_props9.Schema.configurableKeys(propSchema).forEach((key) => {
5100
5347
  propValues[key] = structuredClone(elementRawSettings.get(key));
5101
5348
  });
5102
- const elementStyles = (0, import_editor_elements16.getElementStyles)(elementId) || {};
5349
+ const elementStyles = (0, import_editor_elements17.getElementStyles)(elementId) || {};
5103
5350
  const localStyle = Object.values(elementStyles).find((style) => style.label === "local");
5104
5351
  if (localStyle) {
5105
5352
  const defaultVariant = localStyle.variants.find(
@@ -5257,7 +5504,7 @@ Note: The "size" property controls image resolution/loading, not visual size. Se
5257
5504
  `;
5258
5505
 
5259
5506
  // src/prevent-link-in-link-commands.ts
5260
- var import_editor_elements17 = require("@elementor/editor-elements");
5507
+ var import_editor_elements18 = require("@elementor/editor-elements");
5261
5508
  var import_editor_notifications3 = require("@elementor/editor-notifications");
5262
5509
  var import_editor_v1_adapters20 = require("@elementor/editor-v1-adapters");
5263
5510
  var import_i18n4 = require("@wordpress/i18n");
@@ -5328,25 +5575,25 @@ function shouldBlock(sourceElements, targetElements) {
5328
5575
  return false;
5329
5576
  }
5330
5577
  const isSourceContainsAnAnchor = sourceElements.some((src) => {
5331
- return src?.id ? (0, import_editor_elements17.isElementAnchored)(src.id) || !!(0, import_editor_elements17.getAnchoredDescendantId)(src.id) : false;
5578
+ return src?.id ? (0, import_editor_elements18.isElementAnchored)(src.id) || !!(0, import_editor_elements18.getAnchoredDescendantId)(src.id) : false;
5332
5579
  });
5333
5580
  if (!isSourceContainsAnAnchor) {
5334
5581
  return false;
5335
5582
  }
5336
5583
  const isTargetContainsAnAnchor = targetElements.some((target) => {
5337
- return target?.id ? (0, import_editor_elements17.isElementAnchored)(target.id) || !!(0, import_editor_elements17.getAnchoredAncestorId)(target.id) : false;
5584
+ return target?.id ? (0, import_editor_elements18.isElementAnchored)(target.id) || !!(0, import_editor_elements18.getAnchoredAncestorId)(target.id) : false;
5338
5585
  });
5339
5586
  return isTargetContainsAnAnchor;
5340
5587
  }
5341
5588
 
5342
5589
  // src/style-commands/paste-style.ts
5343
- var import_editor_elements20 = require("@elementor/editor-elements");
5344
- var import_editor_props10 = require("@elementor/editor-props");
5590
+ var import_editor_elements21 = require("@elementor/editor-elements");
5591
+ var import_editor_props11 = require("@elementor/editor-props");
5345
5592
  var import_editor_v1_adapters22 = require("@elementor/editor-v1-adapters");
5346
5593
 
5347
5594
  // src/utils/command-utils.ts
5348
- var import_editor_elements18 = require("@elementor/editor-elements");
5349
- var import_editor_props9 = require("@elementor/editor-props");
5595
+ var import_editor_elements19 = require("@elementor/editor-elements");
5596
+ var import_editor_props10 = require("@elementor/editor-props");
5350
5597
  var import_i18n5 = require("@wordpress/i18n");
5351
5598
  function hasAtomicWidgets(args) {
5352
5599
  const { containers = [args.container] } = args;
@@ -5364,13 +5611,13 @@ function getClassesProp(container) {
5364
5611
  return null;
5365
5612
  }
5366
5613
  const [propKey] = Object.entries(propsSchema).find(
5367
- ([, propType]) => propType.kind === "plain" && propType.key === import_editor_props9.CLASSES_PROP_KEY
5614
+ ([, propType]) => propType.kind === "plain" && propType.key === import_editor_props10.CLASSES_PROP_KEY
5368
5615
  ) ?? [];
5369
5616
  return propKey ?? null;
5370
5617
  }
5371
5618
  function getContainerSchema(container) {
5372
5619
  const type = container?.model.get("widgetType") || container?.model.get("elType");
5373
- const widgetsCache = (0, import_editor_elements18.getWidgetsCache)();
5620
+ const widgetsCache = (0, import_editor_elements19.getWidgetsCache)();
5374
5621
  const elementType = widgetsCache?.[type];
5375
5622
  return elementType?.atomic_props_schema ?? null;
5376
5623
  }
@@ -5383,11 +5630,11 @@ function getClipboardElements(storageKey = "clipboard") {
5383
5630
  }
5384
5631
  }
5385
5632
  function getTitleForContainers(containers) {
5386
- return containers.length > 1 ? (0, import_i18n5.__)("Elements", "elementor") : (0, import_editor_elements18.getElementLabel)(containers[0].id);
5633
+ return containers.length > 1 ? (0, import_i18n5.__)("Elements", "elementor") : (0, import_editor_elements19.getElementLabel)(containers[0].id);
5387
5634
  }
5388
5635
 
5389
5636
  // src/style-commands/undoable-actions/paste-element-style.ts
5390
- var import_editor_elements19 = require("@elementor/editor-elements");
5637
+ var import_editor_elements20 = require("@elementor/editor-elements");
5391
5638
  var import_editor_styles_repository4 = require("@elementor/editor-styles-repository");
5392
5639
  var import_editor_v1_adapters21 = require("@elementor/editor-v1-adapters");
5393
5640
  var import_i18n6 = require("@wordpress/i18n");
@@ -5400,7 +5647,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters21.undoable)(
5400
5647
  if (!classesProp) {
5401
5648
  return null;
5402
5649
  }
5403
- const originalStyles = (0, import_editor_elements19.getElementStyles)(container.id);
5650
+ const originalStyles = (0, import_editor_elements20.getElementStyles)(container.id);
5404
5651
  const [styleId, styleDef] = Object.entries(originalStyles ?? {})[0] ?? [];
5405
5652
  const originalStyle = Object.keys(styleDef ?? {}).length ? styleDef : null;
5406
5653
  const revertData = {
@@ -5409,7 +5656,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters21.undoable)(
5409
5656
  };
5410
5657
  if (styleId) {
5411
5658
  newStyle.variants.forEach(({ meta, props, custom_css: customCss }) => {
5412
- (0, import_editor_elements19.updateElementStyle)({
5659
+ (0, import_editor_elements20.updateElementStyle)({
5413
5660
  elementId,
5414
5661
  styleId,
5415
5662
  meta,
@@ -5420,7 +5667,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters21.undoable)(
5420
5667
  } else {
5421
5668
  const [firstVariant] = newStyle.variants;
5422
5669
  const additionalVariants = newStyle.variants.slice(1);
5423
- revertData.styleId = (0, import_editor_elements19.createElementStyle)({
5670
+ revertData.styleId = (0, import_editor_elements20.createElementStyle)({
5424
5671
  elementId,
5425
5672
  classesProp,
5426
5673
  label: import_editor_styles_repository4.ELEMENTS_STYLES_RESERVED_LABEL,
@@ -5438,7 +5685,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters21.undoable)(
5438
5685
  return;
5439
5686
  }
5440
5687
  if (!revertData.originalStyle) {
5441
- (0, import_editor_elements19.deleteElementStyle)(container.id, revertData.styleId);
5688
+ (0, import_editor_elements20.deleteElementStyle)(container.id, revertData.styleId);
5442
5689
  return;
5443
5690
  }
5444
5691
  const classesProp = getClassesProp(container);
@@ -5447,7 +5694,7 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters21.undoable)(
5447
5694
  }
5448
5695
  const [firstVariant] = revertData.originalStyle.variants;
5449
5696
  const additionalVariants = revertData.originalStyle.variants.slice(1);
5450
- (0, import_editor_elements19.createElementStyle)({
5697
+ (0, import_editor_elements20.createElementStyle)({
5451
5698
  elementId: container.id,
5452
5699
  classesProp,
5453
5700
  label: import_editor_styles_repository4.ELEMENTS_STYLES_RESERVED_LABEL,
@@ -5484,7 +5731,7 @@ function pasteStyles(args, pasteLocalStyle) {
5484
5731
  }
5485
5732
  const clipboardElements = getClipboardElements(storageKey);
5486
5733
  const [clipboardElement] = clipboardElements ?? [];
5487
- const clipboardContainer = (0, import_editor_elements20.getContainer)(clipboardElement.id);
5734
+ const clipboardContainer = (0, import_editor_elements21.getContainer)(clipboardElement.id);
5488
5735
  if (!clipboardElement || !clipboardContainer || !isAtomicWidget(clipboardContainer)) {
5489
5736
  return;
5490
5737
  }
@@ -5503,7 +5750,7 @@ function getClassesWithoutLocalStyle(clipboardContainer, style) {
5503
5750
  if (!classesProp) {
5504
5751
  return [];
5505
5752
  }
5506
- const classesSetting = (0, import_editor_elements20.getElementSetting)(clipboardContainer.id, classesProp);
5753
+ const classesSetting = (0, import_editor_elements21.getElementSetting)(clipboardContainer.id, classesProp);
5507
5754
  return classesSetting?.value.filter((styleId) => styleId !== style?.id) ?? [];
5508
5755
  }
5509
5756
  function pasteClasses(containers, classes) {
@@ -5512,10 +5759,10 @@ function pasteClasses(containers, classes) {
5512
5759
  if (!classesProp) {
5513
5760
  return;
5514
5761
  }
5515
- const classesSetting = (0, import_editor_elements20.getElementSetting)(container.id, classesProp);
5516
- const currentClasses = import_editor_props10.classesPropTypeUtil.extract(classesSetting) ?? [];
5517
- const newClasses = import_editor_props10.classesPropTypeUtil.create(Array.from(/* @__PURE__ */ new Set([...classes, ...currentClasses])));
5518
- (0, import_editor_elements20.updateElementSettings)({
5762
+ const classesSetting = (0, import_editor_elements21.getElementSetting)(container.id, classesProp);
5763
+ const currentClasses = import_editor_props11.classesPropTypeUtil.extract(classesSetting) ?? [];
5764
+ const newClasses = import_editor_props11.classesPropTypeUtil.create(Array.from(/* @__PURE__ */ new Set([...classes, ...currentClasses])));
5765
+ (0, import_editor_elements21.updateElementSettings)({
5519
5766
  id: container.id,
5520
5767
  props: { [classesProp]: newClasses }
5521
5768
  });
@@ -5526,7 +5773,7 @@ function pasteClasses(containers, classes) {
5526
5773
  var import_editor_v1_adapters24 = require("@elementor/editor-v1-adapters");
5527
5774
 
5528
5775
  // src/style-commands/undoable-actions/reset-element-style.ts
5529
- var import_editor_elements21 = require("@elementor/editor-elements");
5776
+ var import_editor_elements22 = require("@elementor/editor-elements");
5530
5777
  var import_editor_styles_repository5 = require("@elementor/editor-styles-repository");
5531
5778
  var import_editor_v1_adapters23 = require("@elementor/editor-v1-adapters");
5532
5779
  var import_i18n7 = require("@wordpress/i18n");
@@ -5535,9 +5782,9 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters23.undoable)(
5535
5782
  do: ({ containers }) => {
5536
5783
  return containers.map((container) => {
5537
5784
  const elementId = container.model.get("id");
5538
- const containerStyles = (0, import_editor_elements21.getElementStyles)(elementId);
5785
+ const containerStyles = (0, import_editor_elements22.getElementStyles)(elementId);
5539
5786
  Object.keys(containerStyles ?? {}).forEach(
5540
- (styleId) => (0, import_editor_elements21.deleteElementStyle)(elementId, styleId)
5787
+ (styleId) => (0, import_editor_elements22.deleteElementStyle)(elementId, styleId)
5541
5788
  );
5542
5789
  return containerStyles;
5543
5790
  });
@@ -5553,7 +5800,7 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters23.undoable)(
5553
5800
  Object.entries(containerStyles ?? {}).forEach(([styleId, style]) => {
5554
5801
  const [firstVariant] = style.variants;
5555
5802
  const additionalVariants = style.variants.slice(1);
5556
- (0, import_editor_elements21.createElementStyle)({
5803
+ (0, import_editor_elements22.createElementStyle)({
5557
5804
  elementId,
5558
5805
  classesProp,
5559
5806
  styleId,
@@ -5687,72 +5934,7 @@ var getLegacyPanelElementView = ({ settings, ...rest }) => {
5687
5934
  var GLOBAL_STYLES_IMPORTED_EVENT = "elementor/global-styles/imported";
5688
5935
 
5689
5936
  // src/components/spotlight-backdrop.tsx
5690
- var React7 = __toESM(require("react"));
5691
-
5692
- // src/hooks/use-element-rect.ts
5693
- var import_react14 = require("react");
5694
- var import_utils6 = require("@elementor/utils");
5695
- function useElementRect(element) {
5696
- const [rect, setRect] = (0, import_react14.useState)(new DOMRect(0, 0, 0, 0));
5697
- const onChange = (0, import_utils6.throttle)(
5698
- () => {
5699
- setRect(element?.getBoundingClientRect() ?? new DOMRect(0, 0, 0, 0));
5700
- },
5701
- 20,
5702
- true
5703
- );
5704
- useScrollListener({ element, onChange });
5705
- useResizeListener({ element, onChange });
5706
- useMutationsListener({ element, onChange });
5707
- (0, import_react14.useEffect)(
5708
- () => () => {
5709
- onChange.cancel();
5710
- },
5711
- [onChange]
5712
- );
5713
- return rect;
5714
- }
5715
- function useScrollListener({ element, onChange }) {
5716
- (0, import_react14.useEffect)(() => {
5717
- if (!element) {
5718
- return;
5719
- }
5720
- const win = element.ownerDocument?.defaultView;
5721
- win?.addEventListener("scroll", onChange, { passive: true });
5722
- return () => {
5723
- win?.removeEventListener("scroll", onChange);
5724
- };
5725
- }, [element, onChange]);
5726
- }
5727
- function useResizeListener({ element, onChange }) {
5728
- (0, import_react14.useEffect)(() => {
5729
- if (!element) {
5730
- return;
5731
- }
5732
- const resizeObserver = new ResizeObserver(onChange);
5733
- resizeObserver.observe(element);
5734
- const win = element.ownerDocument?.defaultView;
5735
- win?.addEventListener("resize", onChange, { passive: true });
5736
- return () => {
5737
- resizeObserver.disconnect();
5738
- win?.removeEventListener("resize", onChange);
5739
- };
5740
- }, [element, onChange]);
5741
- }
5742
- function useMutationsListener({ element, onChange }) {
5743
- (0, import_react14.useEffect)(() => {
5744
- if (!element) {
5745
- return;
5746
- }
5747
- const mutationObserver = new MutationObserver(onChange);
5748
- mutationObserver.observe(element, { childList: true, subtree: true });
5749
- return () => {
5750
- mutationObserver.disconnect();
5751
- };
5752
- }, [element, onChange]);
5753
- }
5754
-
5755
- // src/components/spotlight-backdrop.tsx
5937
+ var React10 = __toESM(require("react"));
5756
5938
  function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
5757
5939
  const rect = useElementRect(element);
5758
5940
  const clipPath = element ? getRectClipPath(rect, canvas.defaultView) : void 0;
@@ -5774,7 +5956,7 @@ function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
5774
5956
  onExit();
5775
5957
  }
5776
5958
  };
5777
- return /* @__PURE__ */ React7.createElement(
5959
+ return /* @__PURE__ */ React10.createElement(
5778
5960
  "div",
5779
5961
  {
5780
5962
  style: backdropStyle,
@@ -5799,9 +5981,9 @@ function useCanvasDocument() {
5799
5981
  }
5800
5982
 
5801
5983
  // src/hooks/use-escape-on-canvas.ts
5802
- var import_react15 = require("react");
5984
+ var import_react17 = require("react");
5803
5985
  function useEscapeOnCanvas(canvasDocument, onEscape) {
5804
- (0, import_react15.useEffect)(() => {
5986
+ (0, import_react17.useEffect)(() => {
5805
5987
  if (!canvasDocument) {
5806
5988
  return;
5807
5989
  }
@@ -5818,10 +6000,10 @@ function useEscapeOnCanvas(canvasDocument, onEscape) {
5818
6000
  }
5819
6001
 
5820
6002
  // src/utils/after-render.ts
5821
- var import_editor_elements22 = require("@elementor/editor-elements");
6003
+ var import_editor_elements23 = require("@elementor/editor-elements");
5822
6004
  function doAfterRender(elementIds, callback) {
5823
6005
  const pending = elementIds.map((elementId) => {
5824
- const view = (0, import_editor_elements22.getContainer)(elementId)?.view;
6006
+ const view = (0, import_editor_elements23.getContainer)(elementId)?.view;
5825
6007
  if (!view || !hasDoAfterRender(view)) {
5826
6008
  return void 0;
5827
6009
  }