@elementor/editor-components 3.35.0-331 → 3.35.0-333

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-components",
3
3
  "description": "Elementor editor components",
4
- "version": "3.35.0-331",
4
+ "version": "3.35.0-333",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -40,28 +40,28 @@
40
40
  "dev": "tsup --config=../../tsup.dev.ts"
41
41
  },
42
42
  "dependencies": {
43
- "@elementor/editor": "3.35.0-331",
44
- "@elementor/editor-canvas": "3.35.0-331",
45
- "@elementor/editor-controls": "3.35.0-331",
46
- "@elementor/editor-documents": "3.35.0-331",
47
- "@elementor/editor-editing-panel": "3.35.0-331",
48
- "@elementor/editor-elements": "3.35.0-331",
49
- "@elementor/editor-elements-panel": "3.35.0-331",
50
- "@elementor/editor-mcp": "3.35.0-331",
51
- "@elementor/editor-props": "3.35.0-331",
52
- "@elementor/editor-styles-repository": "3.35.0-331",
53
- "@elementor/editor-ui": "3.35.0-331",
54
- "@elementor/editor-v1-adapters": "3.35.0-331",
55
- "@elementor/http-client": "3.35.0-331",
43
+ "@elementor/editor": "3.35.0-333",
44
+ "@elementor/editor-canvas": "3.35.0-333",
45
+ "@elementor/editor-controls": "3.35.0-333",
46
+ "@elementor/editor-documents": "3.35.0-333",
47
+ "@elementor/editor-editing-panel": "3.35.0-333",
48
+ "@elementor/editor-elements": "3.35.0-333",
49
+ "@elementor/editor-elements-panel": "3.35.0-333",
50
+ "@elementor/editor-mcp": "3.35.0-333",
51
+ "@elementor/editor-props": "3.35.0-333",
52
+ "@elementor/editor-styles-repository": "3.35.0-333",
53
+ "@elementor/editor-ui": "3.35.0-333",
54
+ "@elementor/editor-v1-adapters": "3.35.0-333",
55
+ "@elementor/http-client": "3.35.0-333",
56
56
  "@elementor/icons": "^1.62.0",
57
- "@elementor/mixpanel": "3.35.0-331",
58
- "@elementor/query": "3.35.0-331",
59
- "@elementor/schema": "3.35.0-331",
60
- "@elementor/store": "3.35.0-331",
57
+ "@elementor/mixpanel": "3.35.0-333",
58
+ "@elementor/query": "3.35.0-333",
59
+ "@elementor/schema": "3.35.0-333",
60
+ "@elementor/store": "3.35.0-333",
61
61
  "@elementor/ui": "1.36.17",
62
- "@elementor/utils": "3.35.0-331",
62
+ "@elementor/utils": "3.35.0-333",
63
63
  "@wordpress/i18n": "^5.13.0",
64
- "@elementor/editor-notifications": "3.35.0-331"
64
+ "@elementor/editor-notifications": "3.35.0-333"
65
65
  },
66
66
  "peerDependencies": {
67
67
  "react": "^18.3.1",
@@ -17,8 +17,48 @@ import { trackComponentEvent } from './utils/tracking';
17
17
 
18
18
  type ContextMenuEventData = { location: string; secondaryLocation: string; trigger: string };
19
19
 
20
+ export type ContextMenuAction = {
21
+ name: string;
22
+ icon: string;
23
+ title: string | ( () => string );
24
+ isEnabled: () => boolean;
25
+ callback: ( _: unknown, eventData: ContextMenuEventData ) => void;
26
+ };
27
+
28
+ type ContextMenuGroupConfig = {
29
+ disable: Record< string, string[] >;
30
+ add: Record< string, { index: number; action: ContextMenuAction } >;
31
+ };
32
+
33
+ type ContextMenuGroup = {
34
+ name: string;
35
+ actions: ContextMenuAction[];
36
+ };
37
+
20
38
  export const TYPE = 'e-component';
21
39
 
40
+ const updateGroups = ( groups: ContextMenuGroup[], config: ContextMenuGroupConfig ): ContextMenuGroup[] => {
41
+ const disableMap = new Map( Object.entries( config.disable ?? {} ) );
42
+ const addMap = new Map( Object.entries( config.add ?? {} ) );
43
+
44
+ return groups.map( ( group ) => {
45
+ const disabledActions = disableMap.get( group.name ) ?? [];
46
+ const addConfig = addMap.get( group.name );
47
+
48
+ // Update disabled actions
49
+ const updatedActions = group.actions.map( ( action ) =>
50
+ disabledActions.includes( action.name ) ? { ...action, isEnabled: () => false } : action
51
+ );
52
+
53
+ // Insert additional action if needed
54
+ if ( addConfig ) {
55
+ updatedActions.splice( addConfig.index, 0, addConfig.action );
56
+ }
57
+
58
+ return { ...group, actions: updatedActions };
59
+ } );
60
+ };
61
+
22
62
  export function createComponentType(
23
63
  options: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }
24
64
  ): typeof ElementType {
@@ -30,13 +70,15 @@ export function createComponentType(
30
70
  }
31
71
 
32
72
  getView() {
33
- return createComponentView( options );
73
+ return createComponentView( { ...options } );
34
74
  }
35
75
  };
36
76
  }
37
77
 
38
78
  function createComponentView(
39
- options: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }
79
+ options: CreateTemplatedElementTypeOptions & {
80
+ showLockedByModal?: ( lockedBy: string ) => void;
81
+ }
40
82
  ): typeof ElementView {
41
83
  return class extends createTemplatedElementView( options ) {
42
84
  legacyWindow = window as unknown as LegacyWindow & ExtendedWindow;
@@ -94,22 +136,38 @@ function createComponentView(
94
136
  return filteredGroups;
95
137
  }
96
138
 
97
- const newGroup = [
98
- {
99
- name: 'edit component',
100
- actions: [
101
- {
102
- name: 'edit component',
103
- icon: 'eicon-edit',
104
- title: () => __( 'Edit Component', 'elementor' ),
105
- isEnabled: () => true,
106
- callback: ( _: unknown, eventData: ContextMenuEventData ) =>
107
- this.editComponent( eventData ),
108
- },
109
- ],
139
+ const newGroups = updateGroups(
140
+ filteredGroups as ContextMenuGroup[],
141
+ this._getContextMenuConfig() as unknown as ContextMenuGroupConfig
142
+ );
143
+ return newGroups;
144
+ }
145
+
146
+ _getContextMenuConfig() {
147
+ const legacyWindow = this.legacyWindow || ( window as unknown as LegacyWindow & ExtendedWindow );
148
+ const elementorWithConfig = legacyWindow.elementor as typeof legacyWindow.elementor & {
149
+ config?: { user?: { is_administrator?: boolean } };
150
+ };
151
+ const isAdministrator = elementorWithConfig.config?.user?.is_administrator ?? false;
152
+
153
+ const addedGroup = {
154
+ general: {
155
+ index: 1,
156
+ action: {
157
+ name: 'edit component',
158
+ icon: 'eicon-edit',
159
+ title: () => __( 'Edit Component', 'elementor' ),
160
+ isEnabled: () => true,
161
+ callback: ( _: unknown, eventData: ContextMenuEventData ) => this.editComponent( eventData ),
162
+ },
110
163
  },
111
- ];
112
- return [ ...filteredGroups, ...newGroup ];
164
+ };
165
+
166
+ const disabledGroup = {
167
+ clipboard: [ 'pasteStyle', 'resetStyle' ],
168
+ };
169
+
170
+ return { add: isAdministrator ? addedGroup : {}, disable: disabledGroup };
113
171
  }
114
172
 
115
173
  async switchDocument() {