@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 +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +25 -19
- package/dist/index.mjs +25 -19
- package/package.json +13 -13
- package/src/legacy/create-templated-element-type.ts +34 -25
- package/src/legacy/types.ts +20 -3
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
|
-
//
|
|
1255
|
-
|
|
1256
|
-
|
|
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((
|
|
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))
|
|
1277
|
+
}).then((html) => this.$el.html(html));
|
|
1276
1278
|
await process.execute();
|
|
1277
|
-
this
|
|
1279
|
+
this.bindUIElements();
|
|
1280
|
+
this.triggerMethod("render:template");
|
|
1278
1281
|
}
|
|
1279
1282
|
afterSettingsResolve(settings) {
|
|
1280
1283
|
return settings;
|
|
1281
1284
|
}
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
this.
|
|
1285
|
+
#beforeRender() {
|
|
1286
|
+
this._ensureViewIsIntact();
|
|
1287
|
+
this._isRendering = true;
|
|
1288
|
+
this.resetChildViewContainer();
|
|
1289
|
+
this.triggerMethod("before:render", this);
|
|
1285
1290
|
}
|
|
1286
|
-
#
|
|
1287
|
-
this.
|
|
1288
|
-
this.
|
|
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
|
-
//
|
|
1217
|
-
|
|
1218
|
-
|
|
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((
|
|
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))
|
|
1239
|
+
}).then((html) => this.$el.html(html));
|
|
1238
1240
|
await process.execute();
|
|
1239
|
-
this
|
|
1241
|
+
this.bindUIElements();
|
|
1242
|
+
this.triggerMethod("render:template");
|
|
1240
1243
|
}
|
|
1241
1244
|
afterSettingsResolve(settings) {
|
|
1242
1245
|
return settings;
|
|
1243
1246
|
}
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
this.
|
|
1247
|
+
#beforeRender() {
|
|
1248
|
+
this._ensureViewIsIntact();
|
|
1249
|
+
this._isRendering = true;
|
|
1250
|
+
this.resetChildViewContainer();
|
|
1251
|
+
this.triggerMethod("before:render", this);
|
|
1247
1252
|
}
|
|
1248
|
-
#
|
|
1249
|
-
this.
|
|
1250
|
-
this.
|
|
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-
|
|
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-
|
|
41
|
-
"@elementor/editor-notifications": "3.33.0-
|
|
42
|
-
"@elementor/editor-documents": "3.33.0-
|
|
43
|
-
"@elementor/editor-elements": "3.33.0-
|
|
44
|
-
"@elementor/editor-props": "3.33.0-
|
|
45
|
-
"@elementor/editor-responsive": "3.33.0-
|
|
46
|
-
"@elementor/editor-styles": "3.33.0-
|
|
47
|
-
"@elementor/editor-styles-repository": "3.33.0-
|
|
48
|
-
"@elementor/editor-v1-adapters": "3.33.0-
|
|
49
|
-
"@elementor/twing": "3.33.0-
|
|
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-
|
|
52
|
-
"@elementor/wp-media": "3.33.0-
|
|
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
|
-
//
|
|
95
|
-
|
|
96
|
-
|
|
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
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
#
|
|
142
|
-
this.
|
|
149
|
+
#afterRender() {
|
|
150
|
+
this._isRendering = false;
|
|
151
|
+
this.isRendered = true;
|
|
143
152
|
|
|
144
|
-
this.triggerMethod( 'render
|
|
153
|
+
this.triggerMethod( 'render', this );
|
|
145
154
|
}
|
|
146
155
|
};
|
|
147
156
|
}
|
package/src/legacy/types.ts
CHANGED
|
@@ -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 > = {
|