@elementor/editor-canvas 4.1.0-787 → 4.1.0-788

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
@@ -52,7 +52,7 @@ type LegacyWindow = Window & {
52
52
  elementsManager: {
53
53
  registerElementType: (type: ElementType) => void;
54
54
  getElementTypeClass: (type: string) => typeof ElementType | undefined;
55
- _elementTypes: Record<string, ElementType>;
55
+ elementTypes: Record<string, ElementType>;
56
56
  };
57
57
  $preview: JQueryElement & [
58
58
  {
package/dist/index.d.ts CHANGED
@@ -52,7 +52,7 @@ type LegacyWindow = Window & {
52
52
  elementsManager: {
53
53
  registerElementType: (type: ElementType) => void;
54
54
  getElementTypeClass: (type: string) => typeof ElementType | undefined;
55
- _elementTypes: Record<string, ElementType>;
55
+ elementTypes: Record<string, ElementType>;
56
56
  };
57
57
  $preview: JQueryElement & [
58
58
  {
package/dist/index.js CHANGED
@@ -2169,7 +2169,7 @@ function createTemplatedElementView({
2169
2169
  this.triggerMethod("render:template");
2170
2170
  }
2171
2171
  afterSettingsResolve(settings) {
2172
- return this._getLinkAttributes(settings);
2172
+ return settings;
2173
2173
  }
2174
2174
  _beforeRender() {
2175
2175
  createBeforeRender(this);
@@ -2192,28 +2192,6 @@ function createTemplatedElementView({
2192
2192
  const id = this.model.get("id");
2193
2193
  return originId ?? id;
2194
2194
  }
2195
- _getLinkAttributes(settings) {
2196
- const linkAttributes = Object.entries(this._handleActionLinkAttributes(settings)).map(([key, value]) => `${key}="${value}"`).join(" ");
2197
- return {
2198
- ...settings,
2199
- link: linkAttributes ? {
2200
- tag: settings?.link?.tag,
2201
- attributes: linkAttributes
2202
- } : null
2203
- };
2204
- }
2205
- _handleActionLinkAttributes(settings) {
2206
- const link = settings.link;
2207
- if (!link || typeof link !== "object" || !("href" in link) || !link.href) {
2208
- return {};
2209
- }
2210
- const isActionLink = "tag" in link && link.tag === "button";
2211
- const urlAttrKey = isActionLink ? "data-action-link" : "href";
2212
- return {
2213
- [urlAttrKey]: link.href,
2214
- target: ("target" in link && link.target) ?? "_self"
2215
- };
2216
- }
2217
2195
  };
2218
2196
  }
2219
2197
 
@@ -2278,6 +2256,11 @@ function createNestedTemplatedElementView({
2278
2256
  _lastResolvedSettingsHash: null,
2279
2257
  _domUpdateWasSkipped: false,
2280
2258
  template: false,
2259
+ attributes() {
2260
+ return {
2261
+ "data-model-cid": this.model.cid
2262
+ };
2263
+ },
2281
2264
  getTemplateType() {
2282
2265
  return "twig";
2283
2266
  },
@@ -2369,12 +2352,18 @@ function createNestedTemplatedElementView({
2369
2352
  return;
2370
2353
  }
2371
2354
  this._destroyAlpine();
2355
+ const overlayHTML = this.getHandlesOverlay()?.get(0)?.outerHTML ?? "";
2356
+ const needsTagSwap = oldEl.tagName !== newEl.tagName;
2357
+ const targetEl = needsTagSwap ? (oldEl.ownerDocument ?? document).createElement(newEl.tagName) : oldEl;
2372
2358
  Array.from(newEl.attributes).forEach((attr) => {
2373
- oldEl.setAttribute(attr.name, attr.value);
2359
+ targetEl.setAttribute(attr.name, attr.value);
2374
2360
  });
2375
- oldEl.setAttribute("draggable", "true");
2376
- const overlayHTML = this.getHandlesOverlay()?.get(0)?.outerHTML ?? "";
2377
- oldEl.innerHTML = overlayHTML + newEl.innerHTML;
2361
+ targetEl.setAttribute("draggable", "true");
2362
+ targetEl.innerHTML = overlayHTML + newEl.innerHTML;
2363
+ if (needsTagSwap) {
2364
+ oldEl.replaceWith(targetEl);
2365
+ this.setElement(legacyWindow.jQuery(targetEl));
2366
+ }
2378
2367
  },
2379
2368
  async _renderChildren() {
2380
2369
  if (this._shouldReuseChildren()) {
@@ -3198,7 +3187,7 @@ function tryRegisterElement(legacyWindow, type, element, ResolvedElementType) {
3198
3187
  } catch {
3199
3188
  const canOverrideExisting = canBeNestedTemplated(element) && isAlreadyRegistered;
3200
3189
  if (canOverrideExisting) {
3201
- elementsManager._elementTypes[type] = new ResolvedElementType();
3190
+ elementsManager.elementTypes[type] = new ResolvedElementType();
3202
3191
  }
3203
3192
  }
3204
3193
  }
package/dist/index.mjs CHANGED
@@ -2135,7 +2135,7 @@ function createTemplatedElementView({
2135
2135
  this.triggerMethod("render:template");
2136
2136
  }
2137
2137
  afterSettingsResolve(settings) {
2138
- return this._getLinkAttributes(settings);
2138
+ return settings;
2139
2139
  }
2140
2140
  _beforeRender() {
2141
2141
  createBeforeRender(this);
@@ -2158,28 +2158,6 @@ function createTemplatedElementView({
2158
2158
  const id = this.model.get("id");
2159
2159
  return originId ?? id;
2160
2160
  }
2161
- _getLinkAttributes(settings) {
2162
- const linkAttributes = Object.entries(this._handleActionLinkAttributes(settings)).map(([key, value]) => `${key}="${value}"`).join(" ");
2163
- return {
2164
- ...settings,
2165
- link: linkAttributes ? {
2166
- tag: settings?.link?.tag,
2167
- attributes: linkAttributes
2168
- } : null
2169
- };
2170
- }
2171
- _handleActionLinkAttributes(settings) {
2172
- const link = settings.link;
2173
- if (!link || typeof link !== "object" || !("href" in link) || !link.href) {
2174
- return {};
2175
- }
2176
- const isActionLink = "tag" in link && link.tag === "button";
2177
- const urlAttrKey = isActionLink ? "data-action-link" : "href";
2178
- return {
2179
- [urlAttrKey]: link.href,
2180
- target: ("target" in link && link.target) ?? "_self"
2181
- };
2182
- }
2183
2161
  };
2184
2162
  }
2185
2163
 
@@ -2244,6 +2222,11 @@ function createNestedTemplatedElementView({
2244
2222
  _lastResolvedSettingsHash: null,
2245
2223
  _domUpdateWasSkipped: false,
2246
2224
  template: false,
2225
+ attributes() {
2226
+ return {
2227
+ "data-model-cid": this.model.cid
2228
+ };
2229
+ },
2247
2230
  getTemplateType() {
2248
2231
  return "twig";
2249
2232
  },
@@ -2335,12 +2318,18 @@ function createNestedTemplatedElementView({
2335
2318
  return;
2336
2319
  }
2337
2320
  this._destroyAlpine();
2321
+ const overlayHTML = this.getHandlesOverlay()?.get(0)?.outerHTML ?? "";
2322
+ const needsTagSwap = oldEl.tagName !== newEl.tagName;
2323
+ const targetEl = needsTagSwap ? (oldEl.ownerDocument ?? document).createElement(newEl.tagName) : oldEl;
2338
2324
  Array.from(newEl.attributes).forEach((attr) => {
2339
- oldEl.setAttribute(attr.name, attr.value);
2325
+ targetEl.setAttribute(attr.name, attr.value);
2340
2326
  });
2341
- oldEl.setAttribute("draggable", "true");
2342
- const overlayHTML = this.getHandlesOverlay()?.get(0)?.outerHTML ?? "";
2343
- oldEl.innerHTML = overlayHTML + newEl.innerHTML;
2327
+ targetEl.setAttribute("draggable", "true");
2328
+ targetEl.innerHTML = overlayHTML + newEl.innerHTML;
2329
+ if (needsTagSwap) {
2330
+ oldEl.replaceWith(targetEl);
2331
+ this.setElement(legacyWindow.jQuery(targetEl));
2332
+ }
2344
2333
  },
2345
2334
  async _renderChildren() {
2346
2335
  if (this._shouldReuseChildren()) {
@@ -3168,7 +3157,7 @@ function tryRegisterElement(legacyWindow, type, element, ResolvedElementType) {
3168
3157
  } catch {
3169
3158
  const canOverrideExisting = canBeNestedTemplated(element) && isAlreadyRegistered;
3170
3159
  if (canOverrideExisting) {
3171
- elementsManager._elementTypes[type] = new ResolvedElementType();
3160
+ elementsManager.elementTypes[type] = new ResolvedElementType();
3172
3161
  }
3173
3162
  }
3174
3163
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-canvas",
3
3
  "description": "Elementor Editor Canvas",
4
- "version": "4.1.0-787",
4
+ "version": "4.1.0-788",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,25 +37,25 @@
37
37
  "react-dom": "^18.3.1"
38
38
  },
39
39
  "dependencies": {
40
- "@elementor/editor": "4.1.0-787",
40
+ "@elementor/editor": "4.1.0-788",
41
41
  "dompurify": "^3.2.6",
42
- "@elementor/editor-controls": "4.1.0-787",
43
- "@elementor/editor-documents": "4.1.0-787",
44
- "@elementor/editor-elements": "4.1.0-787",
45
- "@elementor/editor-interactions": "4.1.0-787",
46
- "@elementor/editor-mcp": "4.1.0-787",
47
- "@elementor/editor-notifications": "4.1.0-787",
48
- "@elementor/editor-props": "4.1.0-787",
49
- "@elementor/editor-responsive": "4.1.0-787",
50
- "@elementor/editor-styles": "4.1.0-787",
51
- "@elementor/editor-styles-repository": "4.1.0-787",
52
- "@elementor/editor-ui": "4.1.0-787",
53
- "@elementor/editor-v1-adapters": "4.1.0-787",
54
- "@elementor/schema": "4.1.0-787",
55
- "@elementor/twing": "4.1.0-787",
42
+ "@elementor/editor-controls": "4.1.0-788",
43
+ "@elementor/editor-documents": "4.1.0-788",
44
+ "@elementor/editor-elements": "4.1.0-788",
45
+ "@elementor/editor-interactions": "4.1.0-788",
46
+ "@elementor/editor-mcp": "4.1.0-788",
47
+ "@elementor/editor-notifications": "4.1.0-788",
48
+ "@elementor/editor-props": "4.1.0-788",
49
+ "@elementor/editor-responsive": "4.1.0-788",
50
+ "@elementor/editor-styles": "4.1.0-788",
51
+ "@elementor/editor-styles-repository": "4.1.0-788",
52
+ "@elementor/editor-ui": "4.1.0-788",
53
+ "@elementor/editor-v1-adapters": "4.1.0-788",
54
+ "@elementor/schema": "4.1.0-788",
55
+ "@elementor/twing": "4.1.0-788",
56
56
  "@elementor/ui": "1.37.5",
57
- "@elementor/utils": "4.1.0-787",
58
- "@elementor/wp-media": "4.1.0-787",
57
+ "@elementor/utils": "4.1.0-788",
58
+ "@elementor/wp-media": "4.1.0-788",
59
59
  "@floating-ui/react": "^0.27.5",
60
60
  "@wordpress/i18n": "^5.13.0"
61
61
  },
@@ -109,6 +109,12 @@ export function createNestedTemplatedElementView( {
109
109
 
110
110
  template: false,
111
111
 
112
+ attributes() {
113
+ return {
114
+ 'data-model-cid': this.model.cid,
115
+ };
116
+ },
117
+
112
118
  getTemplateType() {
113
119
  return 'twig';
114
120
  },
@@ -240,14 +246,21 @@ export function createNestedTemplatedElementView( {
240
246
 
241
247
  this._destroyAlpine();
242
248
 
249
+ const overlayHTML = this.getHandlesOverlay()?.get( 0 )?.outerHTML ?? '';
250
+ const needsTagSwap = oldEl.tagName !== newEl.tagName;
251
+ const targetEl = needsTagSwap ? ( oldEl.ownerDocument ?? document ).createElement( newEl.tagName ) : oldEl;
252
+
243
253
  Array.from( newEl.attributes ).forEach( ( attr ) => {
244
- oldEl.setAttribute( attr.name, attr.value );
254
+ targetEl.setAttribute( attr.name, attr.value );
245
255
  } );
246
256
 
247
- oldEl.setAttribute( 'draggable', 'true' );
257
+ targetEl.setAttribute( 'draggable', 'true' );
258
+ targetEl.innerHTML = overlayHTML + newEl.innerHTML;
248
259
 
249
- const overlayHTML = this.getHandlesOverlay()?.get( 0 )?.outerHTML ?? '';
250
- oldEl.innerHTML = overlayHTML + newEl.innerHTML;
260
+ if ( needsTagSwap ) {
261
+ oldEl.replaceWith( targetEl );
262
+ this.setElement( legacyWindow.jQuery( targetEl as unknown as string ) );
263
+ }
251
264
  },
252
265
 
253
266
  async _renderChildren() {
@@ -186,7 +186,7 @@ export function createTemplatedElementView( {
186
186
  }
187
187
 
188
188
  afterSettingsResolve( settings: { [ key: string ]: unknown } ) {
189
- return this._getLinkAttributes( settings );
189
+ return settings;
190
190
  }
191
191
 
192
192
  _beforeRender() {
@@ -214,37 +214,5 @@ export function createTemplatedElementView( {
214
214
 
215
215
  return originId ?? id;
216
216
  }
217
-
218
- _getLinkAttributes( settings: { [ key: string ]: unknown } ) {
219
- const linkAttributes = Object.entries( this._handleActionLinkAttributes( settings ) )
220
- .map( ( [ key, value ] ) => `${ key }="${ value }"` )
221
- .join( ' ' );
222
-
223
- return {
224
- ...settings,
225
- link: linkAttributes
226
- ? {
227
- tag: ( settings?.link as { tag?: string } )?.tag,
228
- attributes: linkAttributes,
229
- }
230
- : null,
231
- };
232
- }
233
-
234
- _handleActionLinkAttributes( settings: { [ key: string ]: unknown } ) {
235
- const link = settings.link;
236
-
237
- if ( ! link || typeof link !== 'object' || ! ( 'href' in link ) || ! link.href ) {
238
- return {};
239
- }
240
-
241
- const isActionLink = 'tag' in link && link.tag === 'button';
242
- const urlAttrKey = isActionLink ? 'data-action-link' : 'href';
243
-
244
- return {
245
- [ urlAttrKey ]: link.href,
246
- target: ( 'target' in link && link.target ) ?? '_self',
247
- };
248
- }
249
217
  };
250
218
  }
@@ -101,7 +101,7 @@ function tryRegisterElement(
101
101
  const canOverrideExisting = canBeNestedTemplated( element ) && isAlreadyRegistered;
102
102
 
103
103
  if ( canOverrideExisting ) {
104
- elementsManager._elementTypes[ type ] = new ResolvedElementType();
104
+ elementsManager.elementTypes[ type ] = new ResolvedElementType();
105
105
  }
106
106
  }
107
107
  }
@@ -37,7 +37,7 @@ export type LegacyWindow = Window & {
37
37
  elementsManager: {
38
38
  registerElementType: ( type: ElementType ) => void;
39
39
  getElementTypeClass: ( type: string ) => typeof ElementType | undefined;
40
- _elementTypes: Record< string, ElementType >;
40
+ elementTypes: Record< string, ElementType >;
41
41
  };
42
42
  $preview: JQueryElement &
43
43
  [