@elementor/editor-canvas 0.7.0 → 0.8.0

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.
Files changed (43) hide show
  1. package/.turbo/turbo-build.log +9 -9
  2. package/CHANGELOG.md +60 -0
  3. package/dist/index.js +247 -223
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +249 -225
  6. package/dist/index.mjs.map +1 -1
  7. package/package.json +15 -12
  8. package/src/__tests__/init-styles-renderer.test.ts +26 -11
  9. package/src/init-styles-renderer.ts +36 -18
  10. package/src/{styles-renderer → renderers}/__tests__/__mocks__/styles-schema.ts +210 -12
  11. package/src/renderers/__tests__/create-props-resolver.test.ts +175 -0
  12. package/src/renderers/__tests__/create-props-resolver.transformers.test.ts +323 -0
  13. package/src/renderers/__tests__/render-styles.test.ts +126 -0
  14. package/src/renderers/create-props-resolver.ts +123 -0
  15. package/src/{styles-renderer → renderers}/multi-props.ts +1 -1
  16. package/src/{styles-renderer/render.ts → renderers/render-styles.ts} +18 -17
  17. package/src/renderers/style-transformers/background-image-overlay-transformer.ts +24 -0
  18. package/src/renderers/style-transformers/background-image-position-offset-transformer.ts +10 -0
  19. package/src/renderers/style-transformers/background-image-size-scale-transformer.ts +10 -0
  20. package/src/{styles-renderer/transformers → renderers/style-transformers}/create-corner-sizes-transformer.ts +2 -4
  21. package/src/{styles-renderer/transformers → renderers/style-transformers}/create-edge-sizes-transformer.ts +2 -2
  22. package/src/{styles-renderer/transformers → renderers/style-transformers}/image-attachment.ts +1 -1
  23. package/src/{styles-renderer/transformers → renderers/style-transformers}/image-src.ts +4 -7
  24. package/src/renderers/style-transformers/image.ts +25 -0
  25. package/src/{styles-renderer/transformers → renderers/style-transformers}/index.ts +9 -2
  26. package/src/renderers/types.ts +12 -0
  27. package/src/styles-renderer/__tests__/enqueue-used-fonts.test.ts +0 -60
  28. package/src/styles-renderer/__tests__/index.test.ts +0 -777
  29. package/src/styles-renderer/enqueue-used-fonts.ts +0 -22
  30. package/src/styles-renderer/index.ts +0 -2
  31. package/src/styles-renderer/resolve.ts +0 -103
  32. package/src/styles-renderer/transformers/background-image-overlay-transformer.ts +0 -31
  33. package/src/styles-renderer/types.ts +0 -16
  34. /package/src/{styles-renderer → renderers}/errors.ts +0 -0
  35. /package/src/{styles-renderer/transformers → renderers/style-transformers}/background-color-overlay-transformer.ts +0 -0
  36. /package/src/{styles-renderer/transformers → renderers/style-transformers}/background-transformer.ts +0 -0
  37. /package/src/{styles-renderer/transformers → renderers/style-transformers}/create-combine-array-transformer.ts +0 -0
  38. /package/src/{styles-renderer/transformers → renderers/style-transformers}/dimensions.ts +0 -0
  39. /package/src/{styles-renderer/transformers → renderers/style-transformers}/layout-direction-transformer.ts +0 -0
  40. /package/src/{styles-renderer/transformers → renderers/style-transformers}/primitive-transformer.ts +0 -0
  41. /package/src/{styles-renderer/transformers → renderers/style-transformers}/shadow-transformer.ts +0 -0
  42. /package/src/{styles-renderer/transformers → renderers/style-transformers}/size-transformer.ts +0 -0
  43. /package/src/{styles-renderer/transformers → renderers/style-transformers}/stroke-transformer.ts +0 -0
@@ -1,22 +1,22 @@
1
1
 
2
- > @elementor/editor-canvas@0.7.0 build
2
+ > @elementor/editor-canvas@0.8.0 build
3
3
  > tsup --config=../../tsup.build.ts
4
4
 
5
5
  CLI Building entry: src/index.ts
6
6
  CLI Using tsconfig: ../../../tsconfig.json
7
- CLI tsup v8.3.5
7
+ CLI tsup v8.4.0
8
8
  CLI Using tsup config: /home/runner/work/elementor-packages/elementor-packages/tsup.build.ts
9
9
  CLI Target: esnext
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
12
  CJS Build start
13
- ESM dist/index.mjs 17.35 KB
14
- ESM dist/index.mjs.map 35.87 KB
15
- ESM ⚡️ Build success in 160ms
16
- CJS dist/index.js 18.93 KB
17
- CJS dist/index.js.map 35.87 KB
18
- CJS ⚡️ Build success in 161ms
13
+ CJS dist/index.js 19.95 KB
14
+ CJS dist/index.js.map 38.48 KB
15
+ CJS ⚡️ Build success in 173ms
16
+ ESM dist/index.mjs 18.33 KB
17
+ ESM dist/index.mjs.map 38.46 KB
18
+ ESM ⚡️ Build success in 178ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 15999ms
20
+ DTS ⚡️ Build success in 17766ms
21
21
  DTS dist/index.d.mts 13.00 B
22
22
  DTS dist/index.d.ts 13.00 B
package/CHANGELOG.md CHANGED
@@ -1,5 +1,65 @@
1
1
  # @elementor/editor-canvas
2
2
 
3
+ ## 0.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c9133d7: Add background image overlay custom size
8
+ - 910044c: update `@elementor/icons` and `@elementor/ui` packages.
9
+ - 0953b40: Background image overlay resolution canvas connection
10
+ - 15c964f: Add background image overlay custom position
11
+ - 5caf78d: update `@elementor/ui` package.
12
+
13
+ ### Patch Changes
14
+
15
+ - da38fa9: Remove unused exports and add missing dependencies.
16
+ - 35f9714: Add default background image to background overlay repeater
17
+ - dc93616: Move resolver out of style renderer to allow dom renderer use it
18
+ - Updated dependencies [c9133d7]
19
+ - Updated dependencies [86863c1]
20
+ - Updated dependencies [e6c904a]
21
+ - Updated dependencies [188069d]
22
+ - Updated dependencies [e441663]
23
+ - Updated dependencies [efdadea]
24
+ - Updated dependencies [da38fa9]
25
+ - Updated dependencies [910044c]
26
+ - Updated dependencies [4ed562a]
27
+ - Updated dependencies [9ca4eab]
28
+ - Updated dependencies [15c964f]
29
+ - Updated dependencies [5caf78d]
30
+ - Updated dependencies [ffad70a]
31
+ - Updated dependencies [ad6fde0]
32
+ - Updated dependencies [ebd9676]
33
+ - Updated dependencies [d99471a]
34
+ - Updated dependencies [b8e2a85]
35
+ - @elementor/editor-props@0.9.0
36
+ - @elementor/editor-styles-repository@0.7.0
37
+ - @elementor/editor-elements@0.5.2
38
+ - @elementor/editor-v1-adapters@0.10.0
39
+ - @elementor/editor-responsive@0.13.0
40
+ - @elementor/editor@0.18.0
41
+ - @elementor/utils@0.3.1
42
+ - @elementor/editor-styles@0.5.5
43
+ - @elementor/wp-media@0.4.1
44
+
45
+ ## 0.7.1
46
+
47
+ ### Patch Changes
48
+
49
+ - 6c4d4a7: refactored CSS class menu and fix it's keyboard navigation
50
+ - b34f498: Fix global class styles not updating
51
+ - Updated dependencies [d61b1bc]
52
+ - Updated dependencies [6c4d4a7]
53
+ - Updated dependencies [a8b60c9]
54
+ - Updated dependencies [b34f498]
55
+ - Updated dependencies [19b0381]
56
+ - @elementor/editor-styles-repository@0.6.0
57
+ - @elementor/editor-elements@0.5.1
58
+ - @elementor/editor@0.17.5
59
+ - @elementor/editor-v1-adapters@0.9.1
60
+ - @elementor/editor-styles@0.5.4
61
+ - @elementor/editor-responsive@0.12.6
62
+
3
63
  ## 0.7.0
4
64
 
5
65
  ### Minor Changes
package/dist/index.js CHANGED
@@ -150,36 +150,201 @@ function ElementsOverlays() {
150
150
 
151
151
  // src/init-styles-renderer.ts
152
152
  var import_editor_responsive = require("@elementor/editor-responsive");
153
+ var import_editor_styles = require("@elementor/editor-styles");
153
154
  var import_editor_styles_repository = require("@elementor/editor-styles-repository");
155
+ var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
156
+
157
+ // src/renderers/create-props-resolver.ts
158
+ var import_editor_props = require("@elementor/editor-props");
154
159
 
155
- // src/styles-renderer/transformers/background-color-overlay-transformer.ts
160
+ // src/renderers/multi-props.ts
161
+ var isMultiProps = (propValue) => {
162
+ return !!propValue && typeof propValue === "object" && "$$multi-props" in propValue && propValue["$$multi-props"] === true;
163
+ };
164
+ var createMultiPropsValue = (props) => {
165
+ return {
166
+ "$$multi-props": true,
167
+ value: props
168
+ };
169
+ };
170
+ var getMultiPropsValue = (multiProps) => {
171
+ return multiProps.value;
172
+ };
173
+
174
+ // src/renderers/create-props-resolver.ts
175
+ var TRANSFORM_DEPTH_LIMIT = 3;
176
+ function createPropsResolver(transformers, { onPropResolve } = {}) {
177
+ async function transform({ value, key, type, signal, depth = 0 }) {
178
+ if (value === null || value === void 0) {
179
+ return null;
180
+ }
181
+ if (!(0, import_editor_props.isTransformable)(value)) {
182
+ return value;
183
+ }
184
+ if (depth > TRANSFORM_DEPTH_LIMIT) {
185
+ return null;
186
+ }
187
+ if (value.disabled === true) {
188
+ return null;
189
+ }
190
+ if (type.kind === "union") {
191
+ type = type.prop_types[value.$$type];
192
+ if (!type) {
193
+ return null;
194
+ }
195
+ }
196
+ let resolvedValue = value.value;
197
+ if (type.kind === "object") {
198
+ resolvedValue = await resolve({
199
+ props: resolvedValue,
200
+ schema: type.shape,
201
+ signal
202
+ });
203
+ }
204
+ if (type.kind === "array") {
205
+ resolvedValue = await Promise.all(
206
+ resolvedValue.map(
207
+ (item) => transform({ value: item, key, type: type.item_prop_type, depth, signal })
208
+ )
209
+ );
210
+ }
211
+ const transformer = transformers[value.$$type];
212
+ if (!transformer) {
213
+ return null;
214
+ }
215
+ try {
216
+ const transformed = await transformer(resolvedValue, { key, signal });
217
+ return transform({ value: transformed, key, type, signal, depth: depth + 1 });
218
+ } catch {
219
+ return null;
220
+ }
221
+ }
222
+ async function resolve({ props, schema, signal }) {
223
+ const promises = Promise.all(
224
+ Object.entries(schema).map(async ([key, type]) => {
225
+ const value = props[key] ?? type.default;
226
+ const transformed = await transform({ value, key, type, signal });
227
+ if (transformed === null) {
228
+ return;
229
+ }
230
+ onPropResolve?.({ key, value: transformed });
231
+ if (isMultiProps(transformed)) {
232
+ return getMultiPropsValue(transformed);
233
+ }
234
+ return { [key]: transformed };
235
+ })
236
+ );
237
+ return Object.assign({}, ...(await promises).filter(Boolean));
238
+ }
239
+ return resolve;
240
+ }
241
+
242
+ // src/renderers/errors.ts
243
+ var import_utils = require("@elementor/utils");
244
+ var UnknownStyleTypeError = (0, import_utils.createError)({
245
+ code: "unknown_style_type",
246
+ message: "Unknown style type"
247
+ });
248
+
249
+ // src/renderers/render-styles.ts
250
+ var SELECTORS_MAP = {
251
+ class: "."
252
+ };
253
+ async function renderStyles({
254
+ resolve,
255
+ styles,
256
+ schema,
257
+ breakpoints,
258
+ selectorPrefix = "",
259
+ signal
260
+ }) {
261
+ const stylesCssPromises = styles.map(async (style) => {
262
+ const variantCssPromises = Object.values(style.variants).map(async (variant) => {
263
+ const css = await propsToCss({ props: variant.props, schema, resolve, signal });
264
+ return createStyleWrapper().forStyle(style).withPrefix(selectorPrefix).withState(variant.meta.state).withMediaQuery(variant.meta.breakpoint ? breakpoints[variant.meta.breakpoint] : null).wrap(css);
265
+ });
266
+ const variantsCss = await Promise.all(variantCssPromises);
267
+ return wrapCssWithStyleElement(style.id, variantsCss.join(""));
268
+ });
269
+ const stylesCss = await Promise.all(stylesCssPromises);
270
+ return stylesCss.join("");
271
+ }
272
+ function createStyleWrapper(value = "", wrapper) {
273
+ return {
274
+ forStyle: ({ id, type }) => {
275
+ const symbol = SELECTORS_MAP[type];
276
+ if (!symbol) {
277
+ throw new UnknownStyleTypeError({ context: { type } });
278
+ }
279
+ return createStyleWrapper(`${value}${symbol}${id}`, wrapper);
280
+ },
281
+ withPrefix: (prefix) => createStyleWrapper([prefix, value].filter(Boolean).join(" "), wrapper),
282
+ withState: (state) => createStyleWrapper(state ? `${value}:${state}` : value, wrapper),
283
+ withMediaQuery: (breakpoint) => {
284
+ if (!breakpoint?.type) {
285
+ return createStyleWrapper(value, wrapper);
286
+ }
287
+ const size2 = `${breakpoint.type}:${breakpoint.width}px`;
288
+ return createStyleWrapper(value, (css) => `@media(${size2}){${css}}`);
289
+ },
290
+ wrap: (css) => {
291
+ const res = `${value}{${css}}`;
292
+ if (!wrapper) {
293
+ return res;
294
+ }
295
+ return wrapper(res);
296
+ }
297
+ };
298
+ }
299
+ async function propsToCss({ props, resolve, signal, schema }) {
300
+ const transformed = await resolve({ props, schema, signal });
301
+ return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
302
+ acc.push(propName + ":" + propValue + ";");
303
+ return acc;
304
+ }, []).join("");
305
+ }
306
+ function wrapCssWithStyleElement(id, css) {
307
+ return `<style data-style-id="${id}">${css}</style>`;
308
+ }
309
+
310
+ // src/renderers/style-transformers/background-color-overlay-transformer.ts
156
311
  var backgroundColorOverlayTransformer = (value) => {
157
312
  return `linear-gradient(${value}, ${value})`;
158
313
  };
159
314
  var background_color_overlay_transformer_default = backgroundColorOverlayTransformer;
160
315
 
161
- // src/styles-renderer/transformers/background-image-overlay-transformer.ts
162
- var defaultPositionValue = "0% 0%";
316
+ // src/renderers/style-transformers/background-image-overlay-transformer.ts
317
+ var DEFAULT_POSITION_VALUE = "0% 0%";
163
318
  var backgroundImageOverlayTransformer = (value) => {
164
- const { "image-src": imageSrc, size: size2 = null, position = null, repeat = null, attachment = null } = value;
165
- let resultBackgroundStyle = imageSrc;
166
- if (repeat) {
167
- resultBackgroundStyle += ` ${repeat}`;
168
- }
169
- if (attachment) {
170
- resultBackgroundStyle += ` ${attachment}`;
171
- }
172
- if (position && !size2) {
173
- resultBackgroundStyle += ` ${position}`;
174
- }
175
- if (size2) {
176
- resultBackgroundStyle += ` ${position || defaultPositionValue} / ${size2}`;
319
+ const { image: imageSrc, size: size2 = null, position = null, repeat = null, attachment = null } = value;
320
+ if (!imageSrc) {
321
+ return null;
177
322
  }
178
- return resultBackgroundStyle;
323
+ const backgroundStyles = [
324
+ imageSrc,
325
+ repeat,
326
+ attachment,
327
+ size2 ? `${position || DEFAULT_POSITION_VALUE} / ${size2}` : position
328
+ ].filter(Boolean);
329
+ return backgroundStyles.join(" ");
179
330
  };
180
331
  var background_image_overlay_transformer_default = backgroundImageOverlayTransformer;
181
332
 
182
- // src/styles-renderer/transformers/background-transformer.ts
333
+ // src/renderers/style-transformers/background-image-position-offset-transformer.ts
334
+ var backgroundImagePositionOffsetTransformer = ({
335
+ x = "0px",
336
+ y = "0px"
337
+ }) => `${x} ${y}`;
338
+ var background_image_position_offset_transformer_default = backgroundImagePositionOffsetTransformer;
339
+
340
+ // src/renderers/style-transformers/background-image-size-scale-transformer.ts
341
+ var backgroundImageSizeScaleTransformer = ({
342
+ width = "auto",
343
+ height = "auto"
344
+ }) => `${width} ${height}`;
345
+ var background_image_size_scale_transformer_default = backgroundImageSizeScaleTransformer;
346
+
347
+ // src/renderers/style-transformers/background-transformer.ts
183
348
  var backgroundTransformer = (value) => {
184
349
  const overlays = value["background-overlay"] ?? "";
185
350
  const color = value.color ?? "";
@@ -187,27 +352,13 @@ var backgroundTransformer = (value) => {
187
352
  };
188
353
  var background_transformer_default = backgroundTransformer;
189
354
 
190
- // src/styles-renderer/transformers/create-combine-array-transformer.ts
355
+ // src/renderers/style-transformers/create-combine-array-transformer.ts
191
356
  var createCombineArrayTransformer = (delimiter) => {
192
357
  return (value) => value.filter(Boolean).join(delimiter);
193
358
  };
194
359
  var create_combine_array_transformer_default = createCombineArrayTransformer;
195
360
 
196
- // src/styles-renderer/multi-props.ts
197
- var isMultiProps = (propValue) => {
198
- return !!propValue && typeof propValue === "object" && "$$multi-props" in propValue && propValue["$$multi-props"] === true;
199
- };
200
- var createMultiPropsValue = (props) => {
201
- return {
202
- "$$multi-props": true,
203
- value: props
204
- };
205
- };
206
- var getMultiPropsValue = (multiProps) => {
207
- return multiProps.value;
208
- };
209
-
210
- // src/styles-renderer/transformers/create-corner-sizes-transformer.ts
361
+ // src/renderers/style-transformers/create-corner-sizes-transformer.ts
211
362
  var validCorners = ["top-left", "top-right", "bottom-left", "bottom-right"];
212
363
  var createCornerSizesTransformer = (keyGenerator) => (value) => {
213
364
  const props = Object.entries(value).reduce((acc, [corner, cornerValue]) => {
@@ -221,7 +372,7 @@ var createCornerSizesTransformer = (keyGenerator) => (value) => {
221
372
  };
222
373
  var create_corner_sizes_transformer_default = createCornerSizesTransformer;
223
374
 
224
- // src/styles-renderer/transformers/create-edge-sizes-transformer.ts
375
+ // src/renderers/style-transformers/create-edge-sizes-transformer.ts
225
376
  var validEdges = ["top", "right", "bottom", "left"];
226
377
  var createEdgeSizesTransformer = (keyGenerator) => (value) => {
227
378
  const props = Object.entries(value).reduce((acc, [edge, edgeValue]) => {
@@ -235,7 +386,7 @@ var createEdgeSizesTransformer = (keyGenerator) => (value) => {
235
386
  };
236
387
  var create_edge_sizes_transformer_default = createEdgeSizesTransformer;
237
388
 
238
- // src/styles-renderer/transformers/dimensions.ts
389
+ // src/renderers/style-transformers/dimensions.ts
239
390
  var validKeys = ["top", "right", "bottom", "left"];
240
391
  var dimensions = (value, { key }) => {
241
392
  const parsed = Object.entries(value).reduce((acc, [dimensionKey, dimensionValue]) => {
@@ -248,25 +399,40 @@ var dimensions = (value, { key }) => {
248
399
  };
249
400
  var dimensions_default = dimensions;
250
401
 
251
- // src/styles-renderer/transformers/image-attachment.ts
402
+ // src/renderers/style-transformers/image.ts
403
+ var imageTransformer = (value) => {
404
+ const { src, size: size2 } = value;
405
+ if (src.url) {
406
+ return `url(${src.url})`;
407
+ }
408
+ const sizeUrl = src.attachment?.sizes[size2]?.url;
409
+ if (sizeUrl) {
410
+ return `url(${sizeUrl})`;
411
+ }
412
+ const attachmentUrl = src.attachment?.url;
413
+ if (attachmentUrl) {
414
+ return `url(${attachmentUrl})`;
415
+ }
416
+ return null;
417
+ };
418
+
419
+ // src/renderers/style-transformers/image-attachment.ts
252
420
  var import_wp_media = require("@elementor/wp-media");
253
421
  var imageAttachmentTransformer = async (value) => {
254
422
  const attachment = await (0, import_wp_media.getMediaAttachment)({ id: value });
255
423
  if (!attachment) {
256
424
  return null;
257
425
  }
258
- return attachment.url;
426
+ return attachment;
259
427
  };
260
428
 
261
- // src/styles-renderer/transformers/image-src.ts
262
- var imageSrcTransformer = (value) => {
263
- const url = value.id ?? value.url?.value;
264
- if (url) {
265
- return `url(${url})`;
266
- }
267
- };
429
+ // src/renderers/style-transformers/image-src.ts
430
+ var imageSrcTransformer = (value) => ({
431
+ attachment: value.id,
432
+ url: value.url
433
+ });
268
434
 
269
- // src/styles-renderer/transformers/layout-direction-transformer.ts
435
+ // src/renderers/style-transformers/layout-direction-transformer.ts
270
436
  var validKeys2 = ["row", "column"];
271
437
  var layoutDirectionTransformer = (value, { key }) => {
272
438
  const parsed = Object.entries(value).reduce((acc, [dimensionKey, dimensionValue]) => {
@@ -279,31 +445,31 @@ var layoutDirectionTransformer = (value, { key }) => {
279
445
  };
280
446
  var layout_direction_transformer_default = layoutDirectionTransformer;
281
447
 
282
- // src/styles-renderer/transformers/primitive-transformer.ts
448
+ // src/renderers/style-transformers/primitive-transformer.ts
283
449
  var primitiveTransformer = (value) => {
284
450
  return value;
285
451
  };
286
452
 
287
- // src/styles-renderer/transformers/shadow-transformer.ts
453
+ // src/renderers/style-transformers/shadow-transformer.ts
288
454
  var shadowTransformer = (value) => {
289
455
  return [value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position].filter(Boolean).join(" ");
290
456
  };
291
457
  var shadow_transformer_default = shadowTransformer;
292
458
 
293
- // src/styles-renderer/transformers/size-transformer.ts
459
+ // src/renderers/style-transformers/size-transformer.ts
294
460
  var sizeTransformer = (value) => {
295
461
  return `${value.size}${value.unit}`;
296
462
  };
297
463
  var size_transformer_default = sizeTransformer;
298
464
 
299
- // src/styles-renderer/transformers/stroke-transformer.ts
465
+ // src/renderers/style-transformers/stroke-transformer.ts
300
466
  var strokeTransformer = (value) => {
301
467
  return `${value.width} ${value.color}`;
302
468
  };
303
469
  var stroke_transformer_default = strokeTransformer;
304
470
 
305
- // src/styles-renderer/transformers/index.ts
306
- var transformers_default = {
471
+ // src/renderers/style-transformers/index.ts
472
+ var styleTransformers = {
307
473
  size: size_transformer_default,
308
474
  shadow: shadow_transformer_default,
309
475
  stroke: stroke_transformer_default,
@@ -311,180 +477,28 @@ var transformers_default = {
311
477
  color: primitiveTransformer,
312
478
  number: primitiveTransformer,
313
479
  string: primitiveTransformer,
480
+ url: primitiveTransformer,
314
481
  dimensions: dimensions_default,
315
482
  "background-color-overlay": background_color_overlay_transformer_default,
316
483
  "background-image-overlay": background_image_overlay_transformer_default,
484
+ "background-image-position-offset": background_image_position_offset_transformer_default,
485
+ "background-image-size-scale": background_image_size_scale_transformer_default,
317
486
  "background-overlay": create_combine_array_transformer_default(","),
318
487
  "box-shadow": create_combine_array_transformer_default(","),
319
488
  "border-width": create_edge_sizes_transformer_default((edgeKey) => `border-${edgeKey}-width`),
320
489
  "border-radius": create_corner_sizes_transformer_default((cornerKey) => `border-${cornerKey}-radius`),
321
490
  "image-attachment-id": imageAttachmentTransformer,
322
491
  "image-src": imageSrcTransformer,
492
+ image: imageTransformer,
323
493
  "layout-direction": layout_direction_transformer_default
324
494
  };
325
495
 
326
- // src/styles-renderer/render.ts
327
- var import_editor_styles = require("@elementor/editor-styles");
328
-
329
- // src/styles-renderer/errors.ts
330
- var import_utils = require("@elementor/utils");
331
- var UnknownStyleTypeError = (0, import_utils.createError)({
332
- code: "unknown_style_type",
333
- message: "Unknown style type"
334
- });
335
-
336
- // src/styles-renderer/resolve.ts
337
- var import_editor_props = require("@elementor/editor-props");
338
- var TRANSFORM_DEPTH_LIMIT = 3;
339
- async function resolve({ props, schema, transformers, signal }) {
340
- const promises = Promise.all(
341
- Object.entries(schema).map(async ([propKey, propType]) => {
342
- const value = props[propKey] ?? propType.default;
343
- const transformed = await transform(value, propKey, propType, transformers, 0, signal);
344
- if (transformed === null) {
345
- return;
346
- }
347
- if (isMultiProps(transformed)) {
348
- return getMultiPropsValue(transformed);
349
- }
350
- return { [propKey]: transformed };
351
- })
352
- );
353
- return Object.assign({}, ...(await promises).filter(Boolean));
354
- }
355
- async function transform(value, propKey, propType, transformers, depth = 0, signal) {
356
- if (!value && value !== 0) {
357
- return null;
358
- }
359
- if (!(0, import_editor_props.isTransformable)(value)) {
360
- return value;
361
- }
362
- if (depth > TRANSFORM_DEPTH_LIMIT) {
363
- return null;
364
- }
365
- if (value.disabled === true) {
366
- return null;
367
- }
368
- if (propType.kind === "union") {
369
- propType = propType.prop_types[value.$$type];
370
- if (!propType) {
371
- return null;
372
- }
373
- }
374
- let resolvedValue = value.value;
375
- if (propType.kind === "object") {
376
- resolvedValue = await resolve({
377
- transformers,
378
- props: resolvedValue,
379
- schema: propType.shape,
380
- signal
381
- });
382
- }
383
- if (propType.kind === "array") {
384
- resolvedValue = await Promise.all(
385
- resolvedValue.map(
386
- (item) => transform(item, propKey, propType.item_prop_type, transformers, depth, signal)
387
- )
388
- );
389
- }
390
- const transformer = transformers[value.$$type];
391
- if (!transformer) {
392
- return null;
393
- }
394
- try {
395
- const transformed = await transformer(resolvedValue, { key: propKey, signal });
396
- return transform(transformed, propKey, propType, transformers, depth + 1, signal);
397
- } catch {
398
- return null;
399
- }
400
- }
401
-
402
- // src/styles-renderer/render.ts
403
- var SELECTORS_MAP = {
404
- class: "."
405
- };
406
- async function render({
407
- transformers,
408
- styles,
409
- breakpoints,
410
- selectorPrefix = "",
411
- signal
412
- }) {
413
- const stylesCssPromises = styles.map(async (style) => {
414
- const variantCssPromises = Object.values(style.variants).map(async (variant) => {
415
- const css = await propsToCss(variant.props, transformers, signal);
416
- return createStyleWrapper().forStyle(style).withPrefix(selectorPrefix).withState(variant.meta.state).withMediaQuery(variant.meta.breakpoint ? breakpoints[variant.meta.breakpoint] : null).wrap(css);
417
- });
418
- const variantsCss = await Promise.all(variantCssPromises);
419
- return wrapCssWithStyleElement(style.id, variantsCss.join(""));
420
- });
421
- const stylesCss = await Promise.all(stylesCssPromises);
422
- return stylesCss.join("");
423
- }
424
- function createStyleWrapper(value = "", wrapper) {
425
- return {
426
- forStyle: ({ id, type }) => {
427
- const symbol = SELECTORS_MAP[type];
428
- if (!symbol) {
429
- throw new UnknownStyleTypeError({ context: { type } });
430
- }
431
- return createStyleWrapper(`${value}${symbol}${id}`, wrapper);
432
- },
433
- withPrefix: (prefix) => createStyleWrapper([prefix, value].filter(Boolean).join(" "), wrapper),
434
- withState: (state) => createStyleWrapper(state ? `${value}:${state}` : value, wrapper),
435
- withMediaQuery: (breakpoint) => {
436
- if (!breakpoint?.type) {
437
- return createStyleWrapper(value, wrapper);
438
- }
439
- const size2 = `${breakpoint.type}:${breakpoint.width}px`;
440
- return createStyleWrapper(value, (css) => `@media(${size2}){${css}}`);
441
- },
442
- wrap: (css) => {
443
- const res = `${value}{${css}}`;
444
- if (!wrapper) {
445
- return res;
446
- }
447
- return wrapper(res);
448
- }
449
- };
450
- }
451
- async function propsToCss(props, transformers, signal) {
452
- const schema = (0, import_editor_styles.getStylesSchema)();
453
- const transformed = await resolve({ props, schema, transformers, signal });
454
- return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
455
- acc.push(propName + ":" + propValue + ";");
456
- return acc;
457
- }, []).join("");
458
- }
459
- function wrapCssWithStyleElement(id, css) {
460
- return `<style data-style-id="${id}">${css}</style>`;
461
- }
462
-
463
- // src/styles-renderer/enqueue-used-fonts.ts
464
- var import_utils2 = require("@elementor/utils");
465
-
466
496
  // src/sync/enqueue-font.ts
467
497
  var enqueueFont = (fontFamily, context = "preview") => {
468
498
  const extendedWindow = window;
469
499
  return extendedWindow.elementor?.helpers?.enqueueFont?.(fontFamily, context) ?? null;
470
500
  };
471
501
 
472
- // src/styles-renderer/enqueue-used-fonts.ts
473
- function enqueueUsedFonts(styles) {
474
- try {
475
- styles.forEach((styleDef) => {
476
- Object.values(styleDef.variants).forEach((variant) => {
477
- const fontFamily = variant.props["font-family"];
478
- if (fontFamily?.value) {
479
- enqueueFont(fontFamily.value);
480
- }
481
- });
482
- });
483
- } catch (error) {
484
- console.error(`Cannot enqueue font': ${(0, import_utils2.ensureError)(error).message}`);
485
- }
486
- }
487
-
488
502
  // src/sync/get-canvas-iframe-body.ts
489
503
  function getCanvasIframeBody() {
490
504
  const extendedWindow = window;
@@ -496,22 +510,26 @@ var WRAPPER_DATA_ATTR = "data-styles-container";
496
510
  var SELECTOR_PREFIX = ".elementor";
497
511
  function initStylesRenderer() {
498
512
  let abortController = null;
499
- import_editor_styles_repository.stylesRepository.subscribe(async () => {
500
- const styleContainer = getStylesContainer();
501
- const styles = import_editor_styles_repository.stylesRepository.all();
502
- const breakpoints = (0, import_editor_responsive.getBreakpointsMap)();
503
- if (abortController) {
504
- abortController.abort();
505
- }
506
- abortController = new AbortController();
507
- styleContainer.innerHTML = await render({
508
- transformers: transformers_default,
509
- styles,
510
- breakpoints,
511
- selectorPrefix: SELECTOR_PREFIX,
512
- signal: abortController.signal
513
+ const resolve = createPropsResolver(styleTransformers, { onPropResolve: enqueueUsedFonts });
514
+ (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.v1ReadyEvent)(), () => {
515
+ import_editor_styles_repository.stylesRepository.subscribe(async () => {
516
+ const styleContainer = getStylesContainer();
517
+ const styles = import_editor_styles_repository.stylesRepository.all().reverse();
518
+ const breakpoints = (0, import_editor_responsive.getBreakpointsMap)();
519
+ const schema = (0, import_editor_styles.getStylesSchema)();
520
+ if (abortController) {
521
+ abortController.abort();
522
+ }
523
+ abortController = new AbortController();
524
+ styleContainer.innerHTML = await renderStyles({
525
+ styles,
526
+ resolve,
527
+ breakpoints,
528
+ selectorPrefix: SELECTOR_PREFIX,
529
+ signal: abortController.signal,
530
+ schema
531
+ });
513
532
  });
514
- enqueueUsedFonts(styles);
515
533
  });
516
534
  }
517
535
  function getStylesContainer() {
@@ -530,6 +548,12 @@ function createStylesContainer() {
530
548
  el.setAttribute(WRAPPER_DATA_ATTR, "");
531
549
  return el;
532
550
  }
551
+ function enqueueUsedFonts({ key, value }) {
552
+ if (key !== "font-family" || typeof value !== "string") {
553
+ return;
554
+ }
555
+ enqueueFont(value);
556
+ }
533
557
 
534
558
  // src/init.tsx
535
559
  function init() {