@elementor/editor-canvas 3.33.0-218 → 3.33.0-219

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
@@ -102,6 +102,10 @@ declare class ElementView {
102
102
  $el: JQueryElement;
103
103
  model: BackboneModel<ElementModel>;
104
104
  collection: BackboneCollection<ElementModel>;
105
+ children: {
106
+ length: number;
107
+ findByIndex: (index: number) => ElementView;
108
+ };
105
109
  constructor(...args: unknown[]);
106
110
  onRender(...args: unknown[]): void;
107
111
  onDestroy(...args: unknown[]): void;
@@ -119,8 +123,12 @@ declare class ElementView {
119
123
  _renderTemplate(): void;
120
124
  _renderChildren(): void;
121
125
  attachBuffer(collectionView: this, buffer: DocumentFragment): void;
122
- triggerMethod(method: string): void;
126
+ triggerMethod(method: string, ...args: unknown[]): void;
123
127
  bindUIElements(): void;
128
+ _ensureViewIsIntact(): void;
129
+ _isRendering: boolean;
130
+ resetChildViewContainer(): void;
131
+ isRendered: boolean;
124
132
  options?: {
125
133
  model: BackboneModel<ElementModel>;
126
134
  };
@@ -134,15 +142,21 @@ type JQueryElement = {
134
142
  };
135
143
  type BackboneModel<Model extends object> = {
136
144
  get: <T extends keyof Model>(key: T) => Model[T];
145
+ set: <T extends keyof Model>(key: T, value: Model[T]) => void;
137
146
  toJSON: () => ToJSON<Model>;
138
147
  };
139
148
  type BackboneCollection<Model extends object> = {
140
149
  models: BackboneModel<Model>[];
150
+ forEach: (callback: (model: BackboneModel<Model>) => void) => void;
141
151
  };
142
152
  type ElementModel = {
143
153
  id: string;
144
154
  settings: BackboneModel<Props>;
145
155
  widgetType: string;
156
+ editSettings?: BackboneModel<{
157
+ inactive?: boolean;
158
+ }>;
159
+ elements?: BackboneCollection<ElementModel>;
146
160
  };
147
161
  type ToJSON<T> = {
148
162
  [K in keyof T]: T[K] extends BackboneModel<infer M> ? ToJSON<M> : T[K];
@@ -165,4 +179,4 @@ type ElementLegacyType = {
165
179
  };
166
180
  declare function registerElementType(type: string, elementTypeGenerator: ElementLegacyType[keyof ElementLegacyType]): void;
167
181
 
168
- export { type AnyTransformer, type CreateTemplatedElementTypeOptions, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
182
+ export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
package/dist/index.d.ts CHANGED
@@ -102,6 +102,10 @@ declare class ElementView {
102
102
  $el: JQueryElement;
103
103
  model: BackboneModel<ElementModel>;
104
104
  collection: BackboneCollection<ElementModel>;
105
+ children: {
106
+ length: number;
107
+ findByIndex: (index: number) => ElementView;
108
+ };
105
109
  constructor(...args: unknown[]);
106
110
  onRender(...args: unknown[]): void;
107
111
  onDestroy(...args: unknown[]): void;
@@ -119,8 +123,12 @@ declare class ElementView {
119
123
  _renderTemplate(): void;
120
124
  _renderChildren(): void;
121
125
  attachBuffer(collectionView: this, buffer: DocumentFragment): void;
122
- triggerMethod(method: string): void;
126
+ triggerMethod(method: string, ...args: unknown[]): void;
123
127
  bindUIElements(): void;
128
+ _ensureViewIsIntact(): void;
129
+ _isRendering: boolean;
130
+ resetChildViewContainer(): void;
131
+ isRendered: boolean;
124
132
  options?: {
125
133
  model: BackboneModel<ElementModel>;
126
134
  };
@@ -134,15 +142,21 @@ type JQueryElement = {
134
142
  };
135
143
  type BackboneModel<Model extends object> = {
136
144
  get: <T extends keyof Model>(key: T) => Model[T];
145
+ set: <T extends keyof Model>(key: T, value: Model[T]) => void;
137
146
  toJSON: () => ToJSON<Model>;
138
147
  };
139
148
  type BackboneCollection<Model extends object> = {
140
149
  models: BackboneModel<Model>[];
150
+ forEach: (callback: (model: BackboneModel<Model>) => void) => void;
141
151
  };
142
152
  type ElementModel = {
143
153
  id: string;
144
154
  settings: BackboneModel<Props>;
145
155
  widgetType: string;
156
+ editSettings?: BackboneModel<{
157
+ inactive?: boolean;
158
+ }>;
159
+ elements?: BackboneCollection<ElementModel>;
146
160
  };
147
161
  type ToJSON<T> = {
148
162
  [K in keyof T]: T[K] extends BackboneModel<infer M> ? ToJSON<M> : T[K];
@@ -165,4 +179,4 @@ type ElementLegacyType = {
165
179
  };
166
180
  declare function registerElementType(type: string, elementTypeGenerator: ElementLegacyType[keyof ElementLegacyType]): void;
167
181
 
168
- export { type AnyTransformer, type CreateTemplatedElementTypeOptions, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
182
+ export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
package/dist/index.js CHANGED
@@ -1238,25 +1238,27 @@ function createTemplatedElementView({
1238
1238
  });
1239
1239
  return class extends BaseView {
1240
1240
  #abortController = null;
1241
- __renderChildren;
1242
- constructor(...args) {
1243
- super(...args);
1244
- this.__renderChildren = this._renderChildren;
1245
- this._renderChildren = () => {
1246
- };
1247
- }
1248
1241
  getTemplateType() {
1249
1242
  return "twig";
1250
1243
  }
1251
1244
  renderOnChange() {
1252
1245
  this.render();
1253
1246
  }
1254
- // Overriding Marionette original render method to inject our renderer.
1255
- async _renderTemplate() {
1256
- this.#beforeRenderTemplate();
1247
+ // Override `render` function to support async `_renderTemplate`
1248
+ // Note that `_renderChildren` asynchronity is still NOT supported, so only the parent element rendering can be async
1249
+ render() {
1257
1250
  this.#abortController?.abort();
1258
1251
  this.#abortController = new AbortController();
1259
- const process = signalizedProcess(this.#abortController.signal).then((_, signal) => {
1252
+ const process = signalizedProcess(this.#abortController.signal).then(() => this.#beforeRender()).then(() => this._renderTemplate()).then(() => {
1253
+ this._renderChildren();
1254
+ this.#afterRender();
1255
+ });
1256
+ return process.execute();
1257
+ }
1258
+ // Overriding Marionette original `_renderTemplate` method to inject our renderer.
1259
+ async _renderTemplate() {
1260
+ this.triggerMethod("before:render:template");
1261
+ const process = signalizedProcess(this.#abortController?.signal).then((_, signal) => {
1260
1262
  const settings = this.model.get("settings").toJSON();
1261
1263
  return resolveProps({
1262
1264
  props: settings,
@@ -1272,20 +1274,24 @@ function createTemplatedElementView({
1272
1274
  base_styles: baseStylesDictionary
1273
1275
  };
1274
1276
  return renderer.render(templateKey, context);
1275
- }).then((html) => this.$el.html(html)).then(() => this.__renderChildren());
1277
+ }).then((html) => this.$el.html(html));
1276
1278
  await process.execute();
1277
- this.#afterRenderTemplate();
1279
+ this.bindUIElements();
1280
+ this.triggerMethod("render:template");
1278
1281
  }
1279
1282
  afterSettingsResolve(settings) {
1280
1283
  return settings;
1281
1284
  }
1282
- // Emulating the original Marionette behavior.
1283
- #beforeRenderTemplate() {
1284
- this.triggerMethod("before:render:template");
1285
+ #beforeRender() {
1286
+ this._ensureViewIsIntact();
1287
+ this._isRendering = true;
1288
+ this.resetChildViewContainer();
1289
+ this.triggerMethod("before:render", this);
1285
1290
  }
1286
- #afterRenderTemplate() {
1287
- this.bindUIElements();
1288
- this.triggerMethod("render:template");
1291
+ #afterRender() {
1292
+ this._isRendering = false;
1293
+ this.isRendered = true;
1294
+ this.triggerMethod("render", this);
1289
1295
  }
1290
1296
  };
1291
1297
  }
package/dist/index.mjs CHANGED
@@ -1200,25 +1200,27 @@ function createTemplatedElementView({
1200
1200
  });
1201
1201
  return class extends BaseView {
1202
1202
  #abortController = null;
1203
- __renderChildren;
1204
- constructor(...args) {
1205
- super(...args);
1206
- this.__renderChildren = this._renderChildren;
1207
- this._renderChildren = () => {
1208
- };
1209
- }
1210
1203
  getTemplateType() {
1211
1204
  return "twig";
1212
1205
  }
1213
1206
  renderOnChange() {
1214
1207
  this.render();
1215
1208
  }
1216
- // Overriding Marionette original render method to inject our renderer.
1217
- async _renderTemplate() {
1218
- this.#beforeRenderTemplate();
1209
+ // Override `render` function to support async `_renderTemplate`
1210
+ // Note that `_renderChildren` asynchronity is still NOT supported, so only the parent element rendering can be async
1211
+ render() {
1219
1212
  this.#abortController?.abort();
1220
1213
  this.#abortController = new AbortController();
1221
- const process = signalizedProcess(this.#abortController.signal).then((_, signal) => {
1214
+ const process = signalizedProcess(this.#abortController.signal).then(() => this.#beforeRender()).then(() => this._renderTemplate()).then(() => {
1215
+ this._renderChildren();
1216
+ this.#afterRender();
1217
+ });
1218
+ return process.execute();
1219
+ }
1220
+ // Overriding Marionette original `_renderTemplate` method to inject our renderer.
1221
+ async _renderTemplate() {
1222
+ this.triggerMethod("before:render:template");
1223
+ const process = signalizedProcess(this.#abortController?.signal).then((_, signal) => {
1222
1224
  const settings = this.model.get("settings").toJSON();
1223
1225
  return resolveProps({
1224
1226
  props: settings,
@@ -1234,20 +1236,24 @@ function createTemplatedElementView({
1234
1236
  base_styles: baseStylesDictionary
1235
1237
  };
1236
1238
  return renderer.render(templateKey, context);
1237
- }).then((html) => this.$el.html(html)).then(() => this.__renderChildren());
1239
+ }).then((html) => this.$el.html(html));
1238
1240
  await process.execute();
1239
- this.#afterRenderTemplate();
1241
+ this.bindUIElements();
1242
+ this.triggerMethod("render:template");
1240
1243
  }
1241
1244
  afterSettingsResolve(settings) {
1242
1245
  return settings;
1243
1246
  }
1244
- // Emulating the original Marionette behavior.
1245
- #beforeRenderTemplate() {
1246
- this.triggerMethod("before:render:template");
1247
+ #beforeRender() {
1248
+ this._ensureViewIsIntact();
1249
+ this._isRendering = true;
1250
+ this.resetChildViewContainer();
1251
+ this.triggerMethod("before:render", this);
1247
1252
  }
1248
- #afterRenderTemplate() {
1249
- this.bindUIElements();
1250
- this.triggerMethod("render:template");
1253
+ #afterRender() {
1254
+ this._isRendering = false;
1255
+ this.isRendered = true;
1256
+ this.triggerMethod("render", this);
1251
1257
  }
1252
1258
  };
1253
1259
  }
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.33.0-218",
4
+ "version": "3.33.0-219",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,19 +37,19 @@
37
37
  "react-dom": "^18.3.1"
38
38
  },
39
39
  "dependencies": {
40
- "@elementor/editor": "3.33.0-218",
41
- "@elementor/editor-notifications": "3.33.0-218",
42
- "@elementor/editor-documents": "3.33.0-218",
43
- "@elementor/editor-elements": "3.33.0-218",
44
- "@elementor/editor-props": "3.33.0-218",
45
- "@elementor/editor-responsive": "3.33.0-218",
46
- "@elementor/editor-styles": "3.33.0-218",
47
- "@elementor/editor-styles-repository": "3.33.0-218",
48
- "@elementor/editor-v1-adapters": "3.33.0-218",
49
- "@elementor/twing": "3.33.0-218",
40
+ "@elementor/editor": "3.33.0-219",
41
+ "@elementor/editor-notifications": "3.33.0-219",
42
+ "@elementor/editor-documents": "3.33.0-219",
43
+ "@elementor/editor-elements": "3.33.0-219",
44
+ "@elementor/editor-props": "3.33.0-219",
45
+ "@elementor/editor-responsive": "3.33.0-219",
46
+ "@elementor/editor-styles": "3.33.0-219",
47
+ "@elementor/editor-styles-repository": "3.33.0-219",
48
+ "@elementor/editor-v1-adapters": "3.33.0-219",
49
+ "@elementor/twing": "3.33.0-219",
50
50
  "@elementor/ui": "1.36.12",
51
- "@elementor/utils": "3.33.0-218",
52
- "@elementor/wp-media": "3.33.0-218",
51
+ "@elementor/utils": "3.33.0-219",
52
+ "@elementor/wp-media": "3.33.0-219",
53
53
  "@floating-ui/react": "^0.27.5",
54
54
  "@wordpress/i18n": "^5.13.0"
55
55
  },
@@ -71,18 +71,6 @@ export function createTemplatedElementView( {
71
71
  return class extends BaseView {
72
72
  #abortController: AbortController | null = null;
73
73
 
74
- __renderChildren: () => void;
75
-
76
- constructor( ...args: unknown[] ) {
77
- super( ...args );
78
-
79
- // This override blocks the regular usage of `_renderChildren` method,
80
- // and assigns it to another method which will be called later in the `_renderTemplate` method.
81
- this.__renderChildren = this._renderChildren;
82
-
83
- this._renderChildren = () => {};
84
- }
85
-
86
74
  getTemplateType() {
87
75
  return 'twig';
88
76
  }
@@ -91,14 +79,28 @@ export function createTemplatedElementView( {
91
79
  this.render();
92
80
  }
93
81
 
94
- // Overriding Marionette original render method to inject our renderer.
95
- async _renderTemplate() {
96
- this.#beforeRenderTemplate();
97
-
82
+ // Override `render` function to support async `_renderTemplate`
83
+ // Note that `_renderChildren` asynchronity is still NOT supported, so only the parent element rendering can be async
84
+ render() {
98
85
  this.#abortController?.abort();
99
86
  this.#abortController = new AbortController();
100
87
 
101
88
  const process = signalizedProcess( this.#abortController.signal )
89
+ .then( () => this.#beforeRender() )
90
+ .then( () => this._renderTemplate() )
91
+ .then( () => {
92
+ this._renderChildren();
93
+ this.#afterRender();
94
+ } );
95
+
96
+ return process.execute();
97
+ }
98
+
99
+ // Overriding Marionette original `_renderTemplate` method to inject our renderer.
100
+ async _renderTemplate() {
101
+ this.triggerMethod( 'before:render:template' );
102
+
103
+ const process = signalizedProcess( this.#abortController?.signal as AbortSignal )
102
104
  .then( ( _, signal ) => {
103
105
  const settings = this.model.get( 'settings' ).toJSON();
104
106
 
@@ -121,27 +123,34 @@ export function createTemplatedElementView( {
121
123
 
122
124
  return renderer.render( templateKey, context );
123
125
  } )
124
- .then( ( html ) => this.$el.html( html ) )
125
- .then( () => this.__renderChildren() );
126
+ .then( ( html ) => this.$el.html( html ) );
126
127
 
127
128
  await process.execute();
128
129
 
129
- this.#afterRenderTemplate();
130
+ this.bindUIElements();
131
+
132
+ this.triggerMethod( 'render:template' );
130
133
  }
131
134
 
132
135
  afterSettingsResolve( settings: { [ key: string ]: unknown } ) {
133
136
  return settings;
134
137
  }
135
138
 
136
- // Emulating the original Marionette behavior.
137
- #beforeRenderTemplate() {
138
- this.triggerMethod( 'before:render:template' );
139
+ #beforeRender() {
140
+ this._ensureViewIsIntact();
141
+
142
+ this._isRendering = true;
143
+
144
+ this.resetChildViewContainer();
145
+
146
+ this.triggerMethod( 'before:render', this );
139
147
  }
140
148
 
141
- #afterRenderTemplate() {
142
- this.bindUIElements();
149
+ #afterRender() {
150
+ this._isRendering = false;
151
+ this.isRendered = true;
143
152
 
144
- this.triggerMethod( 'render:template' );
153
+ this.triggerMethod( 'render', this );
145
154
  }
146
155
  };
147
156
  }
@@ -40,6 +40,11 @@ export declare class ElementView {
40
40
 
41
41
  collection: BackboneCollection< ElementModel >;
42
42
 
43
+ children: {
44
+ length: number;
45
+ findByIndex: ( index: number ) => ElementView;
46
+ };
47
+
43
48
  constructor( ...args: unknown[] );
44
49
 
45
50
  onRender( ...args: unknown[] ): void;
@@ -71,10 +76,18 @@ export declare class ElementView {
71
76
 
72
77
  attachBuffer( collectionView: this, buffer: DocumentFragment ): void;
73
78
 
74
- triggerMethod( method: string ): void;
79
+ triggerMethod( method: string, ...args: unknown[] ): void;
75
80
 
76
81
  bindUIElements(): void;
77
82
 
83
+ _ensureViewIsIntact(): void;
84
+
85
+ _isRendering: boolean;
86
+
87
+ resetChildViewContainer(): void;
88
+
89
+ isRendered: boolean;
90
+
78
91
  options?: {
79
92
  model: BackboneModel< ElementModel >;
80
93
  };
@@ -90,19 +103,23 @@ type JQueryElement = {
90
103
  get: ( index: number ) => HTMLElement;
91
104
  };
92
105
 
93
- type BackboneModel< Model extends object > = {
106
+ export type BackboneModel< Model extends object > = {
94
107
  get: < T extends keyof Model >( key: T ) => Model[ T ];
108
+ set: < T extends keyof Model >( key: T, value: Model[ T ] ) => void;
95
109
  toJSON: () => ToJSON< Model >;
96
110
  };
97
111
 
98
112
  type BackboneCollection< Model extends object > = {
99
113
  models: BackboneModel< Model >[];
114
+ forEach: ( callback: ( model: BackboneModel< Model > ) => void ) => void;
100
115
  };
101
116
 
102
- type ElementModel = {
117
+ export type ElementModel = {
103
118
  id: string;
104
119
  settings: BackboneModel< Props >;
105
120
  widgetType: string;
121
+ editSettings?: BackboneModel< { inactive?: boolean } >;
122
+ elements?: BackboneCollection< ElementModel >;
106
123
  };
107
124
 
108
125
  type ToJSON< T > = {