@elementor/editor-canvas 3.35.0-400 → 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
@@ -211,8 +211,8 @@ declare const styleTransformersRegistry: {
211
211
  };
212
212
  };
213
213
 
214
- declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">) => void;
215
214
  declare const endDragElementFromPanel: () => void;
215
+ declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">, event: React.DragEvent) => void;
216
216
 
217
217
  declare function getCanvasIframeDocument(): Document | null | undefined;
218
218
 
package/dist/index.d.ts CHANGED
@@ -211,8 +211,8 @@ declare const styleTransformersRegistry: {
211
211
  };
212
212
  };
213
213
 
214
- declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">) => void;
215
214
  declare const endDragElementFromPanel: () => void;
215
+ declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">, event: React.DragEvent) => void;
216
216
 
217
217
  declare function getCanvasIframeDocument(): Document | null | undefined;
218
218
 
package/dist/index.js CHANGED
@@ -3589,13 +3589,23 @@ var RenderContext = class {
3589
3589
  };
3590
3590
 
3591
3591
  // src/sync/drag-element-from-panel.ts
3592
- 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);
3593
3598
  const channels = getElementorChannels();
3594
3599
  channels?.editor.reply("element:dragged", null);
3595
3600
  channels?.panelElements.reply("element:selected", getLegacyPanelElementView(props)).trigger("element:drag:start");
3596
3601
  };
3597
- var endDragElementFromPanel = () => {
3598
- 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;
3599
3609
  };
3600
3610
  var getElementorChannels = () => {
3601
3611
  const extendedWindow = window;
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;
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-400",
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-400",
41
- "@elementor/editor-controls": "3.35.0-400",
42
- "@elementor/editor-documents": "3.35.0-400",
43
- "@elementor/editor-elements": "3.35.0-400",
44
- "@elementor/editor-interactions": "3.35.0-400",
45
- "@elementor/editor-mcp": "3.35.0-400",
46
- "@elementor/editor-notifications": "3.35.0-400",
47
- "@elementor/editor-props": "3.35.0-400",
48
- "@elementor/editor-responsive": "3.35.0-400",
49
- "@elementor/editor-styles": "3.35.0-400",
50
- "@elementor/editor-styles-repository": "3.35.0-400",
51
- "@elementor/editor-ui": "3.35.0-400",
52
- "@elementor/editor-v1-adapters": "3.35.0-400",
53
- "@elementor/schema": "3.35.0-400",
54
- "@elementor/twing": "3.35.0-400",
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-400",
57
- "@elementor/wp-media": "3.35.0-400",
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
  },
@@ -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 = () => {