@elementor/editor-canvas 3.35.0-493 → 3.35.0

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.mjs CHANGED
@@ -1469,8 +1469,8 @@ function escapeURL(value) {
1469
1469
 
1470
1470
  // src/legacy/create-element-type.ts
1471
1471
  function createElementType(type) {
1472
- const legacyWindow2 = window;
1473
- return class extends legacyWindow2.elementor.modules.elements.types.Widget {
1472
+ const legacyWindow = window;
1473
+ return class extends legacyWindow.elementor.modules.elements.types.Widget {
1474
1474
  getType() {
1475
1475
  return type;
1476
1476
  }
@@ -1480,8 +1480,8 @@ function createElementType(type) {
1480
1480
  };
1481
1481
  }
1482
1482
  function createElementViewClassDeclaration() {
1483
- const legacyWindow2 = window;
1484
- return class extends legacyWindow2.elementor.modules.elements.views.Widget {
1483
+ const legacyWindow = window;
1484
+ return class extends legacyWindow.elementor.modules.elements.views.Widget {
1485
1485
  // Dispatch `render` event so the overlay layer will be updated
1486
1486
  onRender(...args) {
1487
1487
  super.onRender(...args);
@@ -1527,12 +1527,16 @@ function createElementViewClassDeclaration() {
1527
1527
  );
1528
1528
  }
1529
1529
  #dispatchPreviewEvent(eventType) {
1530
- legacyWindow2.elementor?.$preview?.[0]?.contentWindow.dispatchEvent(
1530
+ const element = this.getDomElement().get(0);
1531
+ if (!element) {
1532
+ return;
1533
+ }
1534
+ legacyWindow.elementor?.$preview?.[0]?.contentWindow.dispatchEvent(
1531
1535
  new CustomEvent(eventType, {
1532
1536
  detail: {
1533
1537
  id: this.model.get("id"),
1534
1538
  type: this.model.get("widgetType"),
1535
- element: this.getDomElement().get(0)
1539
+ element
1536
1540
  }
1537
1541
  })
1538
1542
  );
@@ -1687,14 +1691,11 @@ function createTemplatedElementView({
1687
1691
  }
1688
1692
 
1689
1693
  // src/legacy/replacements/inline-editing/inline-editing-elements.tsx
1690
- import * as React5 from "react";
1691
- import { useEffect as useEffect7, useRef as useRef2, useState as useState4 } from "react";
1694
+ import * as React6 from "react";
1692
1695
  import { createRoot } from "react-dom/client";
1693
- import { InlineEditor } from "@elementor/editor-controls";
1694
1696
  import { getContainer, getElementLabel, getElementType } from "@elementor/editor-elements";
1695
1697
  import { htmlPropTypeUtil as htmlPropTypeUtil2, stringPropTypeUtil as stringPropTypeUtil2 } from "@elementor/editor-props";
1696
- import { __privateRunCommandSync as runCommandSync, isExperimentActive, undoable } from "@elementor/editor-v1-adapters";
1697
- import { Box as Box2, ThemeProvider } from "@elementor/ui";
1698
+ import { __privateRunCommandSync as runCommandSync, getCurrentEditMode, undoable } from "@elementor/editor-v1-adapters";
1698
1699
  import { __ } from "@wordpress/i18n";
1699
1700
 
1700
1701
  // src/legacy/replacements/base.ts
@@ -1735,6 +1736,207 @@ var ReplacementBase = class {
1735
1736
  }
1736
1737
  };
1737
1738
 
1739
+ // src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
1740
+ import * as React5 from "react";
1741
+ import { useEffect as useEffect7, useState as useState4 } from "react";
1742
+ import { InlineEditor, InlineEditorToolbar } from "@elementor/editor-controls";
1743
+ import { Box as Box2, ThemeProvider } from "@elementor/ui";
1744
+ import { FloatingPortal as FloatingPortal2, useInteractions as useInteractions2 } from "@floating-ui/react";
1745
+
1746
+ // src/legacy/replacements/inline-editing/inline-editing-utils.ts
1747
+ var INLINE_EDITING_PROPERTY_PER_TYPE = {
1748
+ "e-form-label": "text",
1749
+ "e-heading": "title",
1750
+ "e-paragraph": "paragraph"
1751
+ };
1752
+ var calcSelectionCenterOffsets = (view) => {
1753
+ const frameWindow = view.root?.defaultView;
1754
+ const selection = frameWindow?.getSelection();
1755
+ const editorContainer = view.dom;
1756
+ if (!selection || !editorContainer) {
1757
+ return null;
1758
+ }
1759
+ const range = selection.getRangeAt(0);
1760
+ const selectionRect = range.getBoundingClientRect();
1761
+ const editorContainerRect = editorContainer.getBoundingClientRect();
1762
+ if (!selectionRect || !editorContainerRect) {
1763
+ return null;
1764
+ }
1765
+ const verticalOffset = selectionRect.top - editorContainerRect.top;
1766
+ const selectionCenter = selectionRect?.left + selectionRect?.width / 2;
1767
+ const horizontalOffset = selectionCenter - editorContainerRect.left;
1768
+ return { left: horizontalOffset, top: verticalOffset };
1769
+ };
1770
+ var getComputedStyle = (styles, offsets) => {
1771
+ const transform = extractTransformValue(styles);
1772
+ return transform ? {
1773
+ ...styles,
1774
+ marginLeft: `${offsets.left}px`,
1775
+ marginTop: `${offsets.top}px`,
1776
+ pointerEvents: "none"
1777
+ } : {
1778
+ display: "none"
1779
+ };
1780
+ };
1781
+ var extractTransformValue = (styles) => {
1782
+ const translateRegex = /translate\([^)]*\)\s?/g;
1783
+ const numericValuesRegex = /(-?\d+\.?\d*)/g;
1784
+ const translateValue = styles?.transform?.match(translateRegex)?.[0];
1785
+ const values = translateValue?.match(numericValuesRegex);
1786
+ if (!translateValue || !values) {
1787
+ return null;
1788
+ }
1789
+ const [numericX, numericY] = values.map(Number);
1790
+ if (!numericX || !numericY) {
1791
+ return null;
1792
+ }
1793
+ return styles.transform;
1794
+ };
1795
+
1796
+ // src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
1797
+ var TOP_BAR_SELECTOR = "#elementor-editor-wrapper-v2";
1798
+ var NAVIGATOR_SELECTOR = "#elementor-navigator";
1799
+ var EDITING_PANEL = "#elementor-panel";
1800
+ var EDITOR_ELEMENTS_OUT_OF_IFRAME = [TOP_BAR_SELECTOR, NAVIGATOR_SELECTOR, EDITING_PANEL];
1801
+ var EDITOR_WRAPPER_SELECTOR = "inline-editor-wrapper";
1802
+ var CanvasInlineEditor = ({
1803
+ elementClasses,
1804
+ initialValue,
1805
+ expectedTag,
1806
+ rootElement,
1807
+ id,
1808
+ setValue,
1809
+ onBlur
1810
+ }) => {
1811
+ const [selectionOffsets, setSelectionOffsets] = useState4(null);
1812
+ const [editor, setEditor] = useState4(null);
1813
+ const onSelectionEnd = (view) => {
1814
+ const hasSelection = !view.state.selection.empty;
1815
+ setSelectionOffsets(hasSelection ? calcSelectionCenterOffsets(view) : null);
1816
+ };
1817
+ useOnClickOutsideIframe(onBlur);
1818
+ return /* @__PURE__ */ React5.createElement(ThemeProvider, null, /* @__PURE__ */ React5.createElement(InlineEditingOverlay, { expectedTag, rootElement, id }), /* @__PURE__ */ React5.createElement("style", null, `
1819
+ .${EDITOR_WRAPPER_SELECTOR}, .${EDITOR_WRAPPER_SELECTOR} > * {
1820
+ height: 100%;
1821
+ }
1822
+ .ProseMirror > * {
1823
+ height: 100%;
1824
+ }
1825
+ `), /* @__PURE__ */ React5.createElement(
1826
+ InlineEditor,
1827
+ {
1828
+ onEditorCreate: setEditor,
1829
+ editorProps: {
1830
+ attributes: {
1831
+ style: "outline: none;overflow-wrap: normal;height:100%"
1832
+ }
1833
+ },
1834
+ elementClasses,
1835
+ value: initialValue,
1836
+ setValue,
1837
+ onBlur,
1838
+ autofocus: true,
1839
+ expectedTag,
1840
+ wrapperClassName: EDITOR_WRAPPER_SELECTOR,
1841
+ onSelectionEnd
1842
+ }
1843
+ ), selectionOffsets && editor && /* @__PURE__ */ React5.createElement(
1844
+ InlineEditingToolbarWrapper,
1845
+ {
1846
+ expectedTag,
1847
+ editor,
1848
+ rootElement,
1849
+ id,
1850
+ selectionOffsets
1851
+ }
1852
+ ));
1853
+ };
1854
+ var InlineEditingOverlay = ({
1855
+ expectedTag,
1856
+ rootElement,
1857
+ id
1858
+ }) => {
1859
+ const inlineEditedElement = getInlineEditorElement(rootElement, expectedTag);
1860
+ const [overlayRefElement, setOverlayElement] = useState4(inlineEditedElement);
1861
+ useEffect7(() => {
1862
+ setOverlayElement(getInlineEditorElement(rootElement, expectedTag));
1863
+ }, [expectedTag, rootElement]);
1864
+ return overlayRefElement ? /* @__PURE__ */ React5.createElement(OutlineOverlay, { element: overlayRefElement, id, isSelected: true }) : null;
1865
+ };
1866
+ var InlineEditingToolbarWrapper = ({
1867
+ expectedTag,
1868
+ editor,
1869
+ rootElement,
1870
+ id,
1871
+ selectionOffsets
1872
+ }) => {
1873
+ const [element, setElement] = useState4(null);
1874
+ useEffect7(() => {
1875
+ setElement(getInlineEditorElement(rootElement, expectedTag));
1876
+ }, [expectedTag, rootElement]);
1877
+ return element ? /* @__PURE__ */ React5.createElement(InlineEditingToolbar, { element, editor, id, selectionOffsets }) : null;
1878
+ };
1879
+ var InlineEditingToolbar = ({
1880
+ element,
1881
+ editor,
1882
+ id,
1883
+ selectionOffsets
1884
+ }) => {
1885
+ const { floating } = useFloatingOnElement({
1886
+ element,
1887
+ isSelected: true
1888
+ });
1889
+ const { getFloatingProps, getReferenceProps } = useInteractions2();
1890
+ const style = getComputedStyle(floating.styles, selectionOffsets);
1891
+ useBindReactPropsToElement(element, getReferenceProps);
1892
+ return /* @__PURE__ */ React5.createElement(FloatingPortal2, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ React5.createElement(
1893
+ Box2,
1894
+ {
1895
+ ref: floating.setRef,
1896
+ style: {
1897
+ ...floating.styles,
1898
+ pointerEvents: "none"
1899
+ },
1900
+ role: "presentation",
1901
+ ...getFloatingProps({ style })
1902
+ },
1903
+ floating.styles.transform && /* @__PURE__ */ React5.createElement(
1904
+ Box2,
1905
+ {
1906
+ sx: {
1907
+ position: "relative",
1908
+ transform: "translateY(-100%)",
1909
+ height: "max-content"
1910
+ }
1911
+ },
1912
+ /* @__PURE__ */ React5.createElement(
1913
+ InlineEditorToolbar,
1914
+ {
1915
+ editor,
1916
+ elementId: id,
1917
+ sx: {
1918
+ transform: "translateX(-50%)"
1919
+ }
1920
+ }
1921
+ )
1922
+ )
1923
+ ));
1924
+ };
1925
+ var getInlineEditorElement = (elementWrapper, expectedTag) => {
1926
+ return !expectedTag ? null : elementWrapper.querySelector(expectedTag);
1927
+ };
1928
+ var useOnClickOutsideIframe = (handleUnmount) => {
1929
+ const asyncUnmountInlineEditor = React5.useCallback(() => queueMicrotask(handleUnmount), [handleUnmount]);
1930
+ useEffect7(() => {
1931
+ EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach(
1932
+ (selector) => document?.querySelector(selector)?.addEventListener("mousedown", asyncUnmountInlineEditor)
1933
+ );
1934
+ return () => EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach(
1935
+ (selector) => document?.querySelector(selector)?.removeEventListener("mousedown", asyncUnmountInlineEditor)
1936
+ );
1937
+ }, []);
1938
+ };
1939
+
1738
1940
  // src/legacy/replacements/inline-editing/inline-editing-eligibility.ts
1739
1941
  import { htmlPropTypeUtil, stringPropTypeUtil } from "@elementor/editor-props";
1740
1942
  var hasKey = (propType) => {
@@ -1764,33 +1966,8 @@ var isInlineEditingAllowed = ({ rawValue, propTypeFromSchema }) => {
1764
1966
  return htmlPropTypeUtil.isValid(rawValue) || stringPropTypeUtil.isValid(rawValue);
1765
1967
  };
1766
1968
 
1767
- // src/legacy/replacements/inline-editing/inline-editing-utils.ts
1768
- var INLINE_EDITING_PROPERTY_PER_TYPE = {
1769
- "e-form-label": "text",
1770
- "e-heading": "title",
1771
- "e-paragraph": "paragraph"
1772
- };
1773
- var legacyWindow = window;
1774
- var getInitialPopoverPosition = () => {
1775
- const positionFallback = { left: 0, top: 0 };
1776
- const iFrameElement = legacyWindow?.elementor?.$preview?.get(0);
1777
- const iFramePosition = iFrameElement?.getBoundingClientRect() ?? positionFallback;
1778
- const previewElement = legacyWindow?.elementor?.$previewWrapper?.get(0);
1779
- const previewPosition = previewElement ? { left: previewElement.scrollLeft, top: previewElement.scrollTop } : positionFallback;
1780
- return {
1781
- left: iFramePosition.left + previewPosition.left,
1782
- top: iFramePosition.top + previewPosition.top
1783
- };
1784
- };
1785
-
1786
1969
  // src/legacy/replacements/inline-editing/inline-editing-elements.tsx
1787
- var EXPERIMENT_KEY = "v4-inline-text-editing";
1788
1970
  var HISTORY_DEBOUNCE_WAIT = 800;
1789
- var TOP_BAR_SELECTOR = "#elementor-editor-wrapper-v2";
1790
- var NAVIGATOR_SELECTOR = "#elementor-navigator";
1791
- var V4_EDITING_PANEL = "main.MuiBox-root";
1792
- var V3_EDITING_PANEL = "#elementor-panel-content-wrapper";
1793
- var BLUR_TRIGGERING_SELECTORS = [TOP_BAR_SELECTOR, NAVIGATOR_SELECTOR, V4_EDITING_PANEL, V3_EDITING_PANEL];
1794
1971
  var InlineEditingReplacement = class extends ReplacementBase {
1795
1972
  inlineEditorRoot = null;
1796
1973
  handlerAttached = false;
@@ -1804,7 +1981,7 @@ var InlineEditingReplacement = class extends ReplacementBase {
1804
1981
  return !!this.inlineEditorRoot;
1805
1982
  }
1806
1983
  shouldRenderReplacement() {
1807
- return isExperimentActive(EXPERIMENT_KEY) && this.isInlineEditingEligible();
1984
+ return this.isInlineEditingEligible() && getCurrentEditMode() === "edit";
1808
1985
  }
1809
1986
  handleRenderInlineEditor = () => {
1810
1987
  if (this.isEditingModeActive() || !this.isInlineEditingEligible()) {
@@ -1871,11 +2048,11 @@ var InlineEditingReplacement = class extends ReplacementBase {
1871
2048
  }
1872
2049
  getExtractedContentValue() {
1873
2050
  const propValue = this.getInlineEditablePropValue();
1874
- return htmlPropTypeUtil2.extract(propValue) ?? stringPropTypeUtil2.extract(propValue) ?? "";
2051
+ return htmlPropTypeUtil2.extract(propValue) ?? "";
1875
2052
  }
1876
2053
  setContentValue(value) {
1877
2054
  const settingKey = this.getInlineEditablePropertyName();
1878
- const valueToSave = value ? htmlPropTypeUtil2.create(value) : null;
2055
+ const valueToSave = htmlPropTypeUtil2.create(value || "");
1879
2056
  undoable(
1880
2057
  {
1881
2058
  do: () => {
@@ -1950,65 +2127,26 @@ var InlineEditingReplacement = class extends ReplacementBase {
1950
2127
  if (this.isEditingModeActive()) {
1951
2128
  this.resetInlineEditorRoot();
1952
2129
  }
1953
- const InlineEditorApp = this.InlineEditorApp;
1954
- const wrapperClasses = "elementor";
1955
2130
  const elementClasses = this.element.children?.[0]?.classList.toString() ?? "";
2131
+ const propValue = this.getExtractedContentValue();
2132
+ const expectedTag = this.getExpectedTag();
1956
2133
  this.element.innerHTML = "";
1957
2134
  this.inlineEditorRoot = createRoot(this.element);
1958
2135
  this.inlineEditorRoot.render(
1959
- /* @__PURE__ */ React5.createElement(InlineEditorApp, { wrapperClasses, elementClasses })
1960
- );
1961
- }
1962
- InlineEditorApp = ({ wrapperClasses, elementClasses }) => {
1963
- const propValue = this.getExtractedContentValue();
1964
- const expectedTag = this.getExpectedTag();
1965
- const wrapperRef = useRef2(null);
1966
- const [isWrapperRendered, setIsWrapperRendered] = useState4(false);
1967
- useEffect7(() => {
1968
- setIsWrapperRendered(!!wrapperRef.current);
1969
- BLUR_TRIGGERING_SELECTORS.forEach(
1970
- (selector) => document?.querySelector(selector)?.addEventListener("mousedown", asyncUnmountInlineEditor)
1971
- );
1972
- return () => BLUR_TRIGGERING_SELECTORS.forEach(
1973
- (selector) => document?.querySelector(selector)?.removeEventListener("mousedown", asyncUnmountInlineEditor)
1974
- );
1975
- }, []);
1976
- const asyncUnmountInlineEditor = React5.useCallback(
1977
- () => queueMicrotask(this.unmountInlineEditor.bind(this)),
1978
- []
1979
- );
1980
- return /* @__PURE__ */ React5.createElement(ThemeProvider, null, /* @__PURE__ */ React5.createElement(
1981
- Box2,
1982
- {
1983
- ref: wrapperRef,
1984
- sx: {
1985
- "& .elementor-inline-editor-reset": {
1986
- margin: 0,
1987
- padding: 0
1988
- }
1989
- }
1990
- },
1991
- isWrapperRendered && /* @__PURE__ */ React5.createElement(OutlineOverlay, { element: wrapperRef.current, id: this.id, isSelected: true }),
1992
- /* @__PURE__ */ React5.createElement(
1993
- InlineEditor,
2136
+ /* @__PURE__ */ React6.createElement(
2137
+ CanvasInlineEditor,
1994
2138
  {
1995
- attributes: {
1996
- class: wrapperClasses,
1997
- style: "outline: none;"
1998
- },
1999
2139
  elementClasses,
2000
- value: propValue,
2001
- setValue: this.setContentValue.bind(this),
2002
- onBlur: this.unmountInlineEditor.bind(this),
2003
- autofocus: true,
2004
- showToolbar: true,
2005
- getInitialPopoverPosition,
2140
+ initialValue: propValue,
2006
2141
  expectedTag,
2007
- elementId: this.id
2142
+ rootElement: this.element,
2143
+ id: this.id,
2144
+ setValue: this.setContentValue.bind(this),
2145
+ onBlur: this.unmountInlineEditor.bind(this)
2008
2146
  }
2009
2147
  )
2010
- ));
2011
- };
2148
+ );
2149
+ }
2012
2150
  };
2013
2151
 
2014
2152
  // src/legacy/replacements/manager.ts
@@ -2093,13 +2231,13 @@ var createTemplatedElementTypeWithReplacements = ({
2093
2231
  renderer,
2094
2232
  element
2095
2233
  }) => {
2096
- const legacyWindow2 = window;
2234
+ const legacyWindow = window;
2097
2235
  const view = createViewWithReplacements({
2098
2236
  type,
2099
2237
  renderer,
2100
2238
  element
2101
2239
  });
2102
- return class extends legacyWindow2.elementor.modules.elements.types.Widget {
2240
+ return class extends legacyWindow.elementor.modules.elements.types.Widget {
2103
2241
  getType() {
2104
2242
  return type;
2105
2243
  }
@@ -2117,7 +2255,7 @@ function registerElementType(type, elementTypeGenerator) {
2117
2255
  function initLegacyViews() {
2118
2256
  __privateListenTo(v1ReadyEvent2(), () => {
2119
2257
  const config = getWidgetsCache2() ?? {};
2120
- const legacyWindow2 = window;
2258
+ const legacyWindow = window;
2121
2259
  const renderer = createDomRenderer();
2122
2260
  Object.entries(config).forEach(([type, element]) => {
2123
2261
  if (!element.atomic) {
@@ -2131,7 +2269,7 @@ function initLegacyViews() {
2131
2269
  } else {
2132
2270
  ElementType = createElementType(type);
2133
2271
  }
2134
- legacyWindow2.elementor.elementsManager.registerElementType(new ElementType());
2272
+ legacyWindow.elementor.elementsManager.registerElementType(new ElementType());
2135
2273
  });
2136
2274
  });
2137
2275
  }
@@ -2213,7 +2351,7 @@ function extractElementData(element) {
2213
2351
 
2214
2352
  // src/mcp/tools/build-composition/tool.ts
2215
2353
  import {
2216
- createElement as createElement7,
2354
+ createElement as createElement8,
2217
2355
  deleteElement,
2218
2356
  getContainer as getContainer3,
2219
2357
  getWidgetsCache as getWidgetsCache6
@@ -2221,7 +2359,7 @@ import {
2221
2359
 
2222
2360
  // src/composition-builder/composition-builder.ts
2223
2361
  import {
2224
- createElement as createElement6,
2362
+ createElement as createElement7,
2225
2363
  generateElementId,
2226
2364
  getContainer as getContainer2,
2227
2365
  getWidgetsCache as getWidgetsCache5
@@ -2439,7 +2577,7 @@ var CompositionBuilder = class _CompositionBuilder {
2439
2577
  rootContainers = [];
2440
2578
  containerElements = [];
2441
2579
  api = {
2442
- createElement: createElement6,
2580
+ createElement: createElement7,
2443
2581
  getWidgetsCache: getWidgetsCache5,
2444
2582
  generateElementId,
2445
2583
  getContainer: getContainer2,
@@ -2828,7 +2966,7 @@ var initBuildCompositionsTool = (reg) => {
2828
2966
  const documentContainer = getContainer3("document");
2829
2967
  try {
2830
2968
  const compositionBuilder = CompositionBuilder.fromXMLString(xmlStructure, {
2831
- createElement: createElement7,
2969
+ createElement: createElement8,
2832
2970
  getWidgetsCache: getWidgetsCache6
2833
2971
  });
2834
2972
  compositionBuilder.setElementConfig(elementConfig);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-canvas",
3
3
  "description": "Elementor Editor Canvas",
4
- "version": "3.35.0-493",
4
+ "version": "3.35.0",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,24 +37,24 @@
37
37
  "react-dom": "^18.3.1"
38
38
  },
39
39
  "dependencies": {
40
- "@elementor/editor": "3.35.0-493",
41
- "@elementor/editor-controls": "3.35.0-493",
42
- "@elementor/editor-documents": "3.35.0-493",
43
- "@elementor/editor-elements": "3.35.0-493",
44
- "@elementor/editor-interactions": "3.35.0-493",
45
- "@elementor/editor-mcp": "3.35.0-493",
46
- "@elementor/editor-notifications": "3.35.0-493",
47
- "@elementor/editor-props": "3.35.0-493",
48
- "@elementor/editor-responsive": "3.35.0-493",
49
- "@elementor/editor-styles": "3.35.0-493",
50
- "@elementor/editor-styles-repository": "3.35.0-493",
51
- "@elementor/editor-ui": "3.35.0-493",
52
- "@elementor/editor-v1-adapters": "3.35.0-493",
53
- "@elementor/schema": "3.35.0-493",
54
- "@elementor/twing": "3.35.0-493",
40
+ "@elementor/editor": "3.35.0",
41
+ "@elementor/editor-controls": "3.35.0",
42
+ "@elementor/editor-documents": "3.35.0",
43
+ "@elementor/editor-elements": "3.35.0",
44
+ "@elementor/editor-interactions": "3.35.0",
45
+ "@elementor/editor-mcp": "3.35.0",
46
+ "@elementor/editor-notifications": "3.35.0",
47
+ "@elementor/editor-props": "3.35.0",
48
+ "@elementor/editor-responsive": "3.35.0",
49
+ "@elementor/editor-styles": "3.35.0",
50
+ "@elementor/editor-styles-repository": "3.35.0",
51
+ "@elementor/editor-ui": "3.35.0",
52
+ "@elementor/editor-v1-adapters": "3.35.0",
53
+ "@elementor/schema": "3.35.0",
54
+ "@elementor/twing": "3.35.0",
55
55
  "@elementor/ui": "1.36.17",
56
- "@elementor/utils": "3.35.0-493",
57
- "@elementor/wp-media": "3.35.0-493",
56
+ "@elementor/utils": "3.35.0",
57
+ "@elementor/wp-media": "3.35.0",
58
58
  "@floating-ui/react": "^0.27.5",
59
59
  "@wordpress/i18n": "^5.13.0"
60
60
  },
@@ -80,12 +80,18 @@ export function createElementViewClassDeclaration(): typeof ElementView {
80
80
  }
81
81
 
82
82
  #dispatchPreviewEvent( eventType: string ) {
83
+ const element = this.getDomElement().get( 0 );
84
+
85
+ if ( ! element ) {
86
+ return;
87
+ }
88
+
83
89
  legacyWindow.elementor?.$preview?.[ 0 ]?.contentWindow.dispatchEvent(
84
90
  new CustomEvent( eventType, {
85
91
  detail: {
86
92
  id: this.model.get( 'id' ),
87
93
  type: this.model.get( 'widgetType' ),
88
- element: this.getDomElement().get( 0 ),
94
+ element,
89
95
  },
90
96
  } )
91
97
  );