@elementor/editor-canvas 3.35.0-399 → 3.35.0-401

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.d.mts CHANGED
@@ -12,6 +12,8 @@ declare const STYLE_SCHEMA_URI = "elementor://styles/schema/{category}";
12
12
 
13
13
  declare function init(): void;
14
14
 
15
+ declare function isAtomicWidget(container: V1Element | undefined): boolean;
16
+
15
17
  type DomRenderer = {
16
18
  register: TwingArrayLoader['setTemplate'];
17
19
  render: TwingEnvironment['render'];
@@ -209,8 +211,8 @@ declare const styleTransformersRegistry: {
209
211
  };
210
212
  };
211
213
 
212
- declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">) => void;
213
214
  declare const endDragElementFromPanel: () => void;
215
+ declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">, event: React.DragEvent) => void;
214
216
 
215
217
  declare function getCanvasIframeDocument(): Document | null | undefined;
216
218
 
@@ -251,4 +253,4 @@ declare const UnknownStyleStateError: {
251
253
  isError(error: unknown): error is Error;
252
254
  };
253
255
 
254
- export { type AnyTransformer, BREAKPOINTS_SCHEMA_URI, type BackboneModel, type CreateTemplatedElementTypeOptions, DOCUMENT_STRUCTURE_URI, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, RenderContext, type ReplacementSettings, STYLE_SCHEMA_URI, UnknownStyleStateError, UnknownStyleTypeError, WIDGET_SCHEMA_URI, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
256
+ export { type AnyTransformer, BREAKPOINTS_SCHEMA_URI, type BackboneModel, type CreateTemplatedElementTypeOptions, DOCUMENT_STRUCTURE_URI, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, RenderContext, type ReplacementSettings, STYLE_SCHEMA_URI, UnknownStyleStateError, UnknownStyleTypeError, WIDGET_SCHEMA_URI, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, isAtomicWidget, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
package/dist/index.d.ts CHANGED
@@ -12,6 +12,8 @@ declare const STYLE_SCHEMA_URI = "elementor://styles/schema/{category}";
12
12
 
13
13
  declare function init(): void;
14
14
 
15
+ declare function isAtomicWidget(container: V1Element | undefined): boolean;
16
+
15
17
  type DomRenderer = {
16
18
  register: TwingArrayLoader['setTemplate'];
17
19
  render: TwingEnvironment['render'];
@@ -209,8 +211,8 @@ declare const styleTransformersRegistry: {
209
211
  };
210
212
  };
211
213
 
212
- declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">) => void;
213
214
  declare const endDragElementFromPanel: () => void;
215
+ declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">, event: React.DragEvent) => void;
214
216
 
215
217
  declare function getCanvasIframeDocument(): Document | null | undefined;
216
218
 
@@ -251,4 +253,4 @@ declare const UnknownStyleStateError: {
251
253
  isError(error: unknown): error is Error;
252
254
  };
253
255
 
254
- export { type AnyTransformer, BREAKPOINTS_SCHEMA_URI, type BackboneModel, type CreateTemplatedElementTypeOptions, DOCUMENT_STRUCTURE_URI, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, RenderContext, type ReplacementSettings, STYLE_SCHEMA_URI, UnknownStyleStateError, UnknownStyleTypeError, WIDGET_SCHEMA_URI, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
256
+ export { type AnyTransformer, BREAKPOINTS_SCHEMA_URI, type BackboneModel, type CreateTemplatedElementTypeOptions, DOCUMENT_STRUCTURE_URI, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, RenderContext, type ReplacementSettings, STYLE_SCHEMA_URI, UnknownStyleStateError, UnknownStyleTypeError, WIDGET_SCHEMA_URI, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, isAtomicWidget, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
package/dist/index.js CHANGED
@@ -44,6 +44,7 @@ __export(index_exports, {
44
44
  endDragElementFromPanel: () => endDragElementFromPanel,
45
45
  getCanvasIframeDocument: () => getCanvasIframeDocument,
46
46
  init: () => init,
47
+ isAtomicWidget: () => isAtomicWidget,
47
48
  registerElementType: () => registerElementType,
48
49
  settingsTransformersRegistry: () => settingsTransformersRegistry,
49
50
  startDragElementFromPanel: () => startDragElementFromPanel,
@@ -3588,13 +3589,23 @@ var RenderContext = class {
3588
3589
  };
3589
3590
 
3590
3591
  // src/sync/drag-element-from-panel.ts
3591
- var startDragElementFromPanel = (props) => {
3592
+ var DRAG_GROUPS = ["elementor-element"];
3593
+ var endDragElementFromPanel = () => {
3594
+ getElementorChannels()?.panelElements?.trigger("element:drag:end");
3595
+ };
3596
+ var startDragElementFromPanel = (props, event) => {
3597
+ setDragGroups(event);
3592
3598
  const channels = getElementorChannels();
3593
3599
  channels?.editor.reply("element:dragged", null);
3594
3600
  channels?.panelElements.reply("element:selected", getLegacyPanelElementView(props)).trigger("element:drag:start");
3595
3601
  };
3596
- var endDragElementFromPanel = () => {
3597
- getElementorChannels()?.panelElements?.trigger("element:drag:end");
3602
+ var setDragGroups = (event) => {
3603
+ const dataContainer = { groups: getDragGroups(event) };
3604
+ event.dataTransfer?.setData(JSON.stringify(dataContainer), "true");
3605
+ };
3606
+ var getDragGroups = (event) => {
3607
+ const dataContainer = event.dataTransfer?.getData("text/plain");
3608
+ return dataContainer ? JSON.parse(dataContainer).groups : DRAG_GROUPS;
3598
3609
  };
3599
3610
  var getElementorChannels = () => {
3600
3611
  const extendedWindow = window;
@@ -3637,6 +3648,7 @@ var getLegacyPanelElementView = ({ settings, ...rest }) => {
3637
3648
  endDragElementFromPanel,
3638
3649
  getCanvasIframeDocument,
3639
3650
  init,
3651
+ isAtomicWidget,
3640
3652
  registerElementType,
3641
3653
  settingsTransformersRegistry,
3642
3654
  startDragElementFromPanel,
package/dist/index.mjs CHANGED
@@ -3579,13 +3579,23 @@ var RenderContext = class {
3579
3579
  };
3580
3580
 
3581
3581
  // src/sync/drag-element-from-panel.ts
3582
- var startDragElementFromPanel = (props) => {
3582
+ var DRAG_GROUPS = ["elementor-element"];
3583
+ var endDragElementFromPanel = () => {
3584
+ getElementorChannels()?.panelElements?.trigger("element:drag:end");
3585
+ };
3586
+ var startDragElementFromPanel = (props, event) => {
3587
+ setDragGroups(event);
3583
3588
  const channels = getElementorChannels();
3584
3589
  channels?.editor.reply("element:dragged", null);
3585
3590
  channels?.panelElements.reply("element:selected", getLegacyPanelElementView(props)).trigger("element:drag:start");
3586
3591
  };
3587
- var endDragElementFromPanel = () => {
3588
- getElementorChannels()?.panelElements?.trigger("element:drag:end");
3592
+ var setDragGroups = (event) => {
3593
+ const dataContainer = { groups: getDragGroups(event) };
3594
+ event.dataTransfer?.setData(JSON.stringify(dataContainer), "true");
3595
+ };
3596
+ var getDragGroups = (event) => {
3597
+ const dataContainer = event.dataTransfer?.getData("text/plain");
3598
+ return dataContainer ? JSON.parse(dataContainer).groups : DRAG_GROUPS;
3589
3599
  };
3590
3600
  var getElementorChannels = () => {
3591
3601
  const extendedWindow = window;
@@ -3627,6 +3637,7 @@ export {
3627
3637
  endDragElementFromPanel,
3628
3638
  getCanvasIframeDocument,
3629
3639
  init,
3640
+ isAtomicWidget,
3630
3641
  registerElementType,
3631
3642
  settingsTransformersRegistry,
3632
3643
  startDragElementFromPanel,
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-399",
4
+ "version": "3.35.0-401",
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-399",
41
- "@elementor/editor-controls": "3.35.0-399",
42
- "@elementor/editor-documents": "3.35.0-399",
43
- "@elementor/editor-elements": "3.35.0-399",
44
- "@elementor/editor-interactions": "3.35.0-399",
45
- "@elementor/editor-mcp": "3.35.0-399",
46
- "@elementor/editor-notifications": "3.35.0-399",
47
- "@elementor/editor-props": "3.35.0-399",
48
- "@elementor/editor-responsive": "3.35.0-399",
49
- "@elementor/editor-styles": "3.35.0-399",
50
- "@elementor/editor-styles-repository": "3.35.0-399",
51
- "@elementor/editor-ui": "3.35.0-399",
52
- "@elementor/editor-v1-adapters": "3.35.0-399",
53
- "@elementor/schema": "3.35.0-399",
54
- "@elementor/twing": "3.35.0-399",
40
+ "@elementor/editor": "3.35.0-401",
41
+ "@elementor/editor-controls": "3.35.0-401",
42
+ "@elementor/editor-documents": "3.35.0-401",
43
+ "@elementor/editor-elements": "3.35.0-401",
44
+ "@elementor/editor-interactions": "3.35.0-401",
45
+ "@elementor/editor-mcp": "3.35.0-401",
46
+ "@elementor/editor-notifications": "3.35.0-401",
47
+ "@elementor/editor-props": "3.35.0-401",
48
+ "@elementor/editor-responsive": "3.35.0-401",
49
+ "@elementor/editor-styles": "3.35.0-401",
50
+ "@elementor/editor-styles-repository": "3.35.0-401",
51
+ "@elementor/editor-ui": "3.35.0-401",
52
+ "@elementor/editor-v1-adapters": "3.35.0-401",
53
+ "@elementor/schema": "3.35.0-401",
54
+ "@elementor/twing": "3.35.0-401",
55
55
  "@elementor/ui": "1.36.17",
56
- "@elementor/utils": "3.35.0-399",
57
- "@elementor/wp-media": "3.35.0-399",
56
+ "@elementor/utils": "3.35.0-401",
57
+ "@elementor/wp-media": "3.35.0-401",
58
58
  "@floating-ui/react": "^0.27.5",
59
59
  "@wordpress/i18n": "^5.13.0"
60
60
  },
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@ export { BREAKPOINTS_SCHEMA_URI } from './mcp/resources/breakpoints-resource';
2
2
  export { STYLE_SCHEMA_URI } from './mcp/resources/widgets-schema-resource';
3
3
 
4
4
  export { init } from './init';
5
+ export { isAtomicWidget } from './style-commands/utils';
5
6
 
6
7
  export {
7
8
  createTemplatedElementView,
@@ -0,0 +1,69 @@
1
+ import { endDragElementFromPanel, startDragElementFromPanel } from '../drag-element-from-panel';
2
+ import { type CanvasExtendedWindow } from '../types';
3
+
4
+ const EXPECTED_DRAG_GROUPS = [ 'elementor-element' ];
5
+
6
+ const mockTrigger = jest.fn();
7
+ const mockReply = jest.fn( () => ( { trigger: mockTrigger } ) );
8
+
9
+ describe( 'drag-element-from-panel', () => {
10
+ const extendedWindow = window as unknown as CanvasExtendedWindow;
11
+
12
+ extendedWindow.elementor = {
13
+ channels: {
14
+ editor: { reply: mockReply },
15
+ panelElements: { reply: mockReply, trigger: mockTrigger },
16
+ } as unknown as never,
17
+ modules: {
18
+ elements: {
19
+ models: {
20
+ Element: jest.fn( ( props ) => props ),
21
+ },
22
+ },
23
+ },
24
+ };
25
+
26
+ describe( 'startDragElementFromPanel', () => {
27
+ it( 'should set dataTransfer with drag groups', () => {
28
+ // Arrange
29
+ const mockSetData = jest.fn();
30
+ const mockEvent = {
31
+ dataTransfer: {
32
+ setData: mockSetData,
33
+ getData: () => '',
34
+ },
35
+ } as unknown as React.DragEvent;
36
+
37
+ // Act
38
+ startDragElementFromPanel( { elType: 'widget', widgetType: 'test' }, mockEvent );
39
+
40
+ // Assert
41
+ expect( mockSetData ).toHaveBeenCalledWith( JSON.stringify( { groups: EXPECTED_DRAG_GROUPS } ), 'true' );
42
+ } );
43
+
44
+ it( 'should trigger panel element events', () => {
45
+ // Arrange
46
+ const mockEvent = {
47
+ dataTransfer: { setData: jest.fn(), getData: () => '' },
48
+ } as unknown as React.DragEvent;
49
+
50
+ // Act
51
+ startDragElementFromPanel( { elType: 'widget', widgetType: 'test' }, mockEvent );
52
+
53
+ // Assert
54
+ expect( mockReply ).toHaveBeenCalledWith( 'element:dragged', null );
55
+ expect( mockReply ).toHaveBeenCalledWith( 'element:selected', expect.any( Object ) );
56
+ expect( mockTrigger ).toHaveBeenCalledWith( 'element:drag:start' );
57
+ } );
58
+ } );
59
+
60
+ describe( 'endDragElementFromPanel', () => {
61
+ it( 'should trigger element:drag:end event', () => {
62
+ // Act
63
+ endDragElementFromPanel();
64
+
65
+ // Assert
66
+ expect( mockTrigger ).toHaveBeenCalledWith( 'element:drag:end' );
67
+ } );
68
+ } );
69
+ } );
@@ -2,7 +2,15 @@ import { type V1ElementModelProps } from '@elementor/editor-elements';
2
2
 
3
3
  import { type CanvasExtendedWindow } from './types';
4
4
 
5
- export const startDragElementFromPanel = ( props: Omit< V1ElementModelProps, 'id' > ) => {
5
+ const DRAG_GROUPS = [ 'elementor-element' ];
6
+
7
+ export const endDragElementFromPanel = () => {
8
+ getElementorChannels()?.panelElements?.trigger( 'element:drag:end' );
9
+ };
10
+
11
+ export const startDragElementFromPanel = ( props: Omit< V1ElementModelProps, 'id' >, event: React.DragEvent ) => {
12
+ setDragGroups( event );
13
+
6
14
  const channels = getElementorChannels();
7
15
 
8
16
  channels?.editor.reply( 'element:dragged', null );
@@ -12,8 +20,15 @@ export const startDragElementFromPanel = ( props: Omit< V1ElementModelProps, 'id
12
20
  .trigger( 'element:drag:start' );
13
21
  };
14
22
 
15
- export const endDragElementFromPanel = () => {
16
- getElementorChannels()?.panelElements?.trigger( 'element:drag:end' );
23
+ const setDragGroups = ( event: React.DragEvent ) => {
24
+ const dataContainer = { groups: getDragGroups( event ) };
25
+ event.dataTransfer?.setData( JSON.stringify( dataContainer ), 'true' );
26
+ };
27
+
28
+ const getDragGroups = ( event: React.DragEvent ) => {
29
+ const dataContainer = event.dataTransfer?.getData( 'text/plain' );
30
+
31
+ return dataContainer ? JSON.parse( dataContainer ).groups : DRAG_GROUPS;
17
32
  };
18
33
 
19
34
  const getElementorChannels = () => {