@elementor/editor-canvas 0.7.1 → 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 +42 -0
  3. package/dist/index.js +234 -213
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +236 -215
  6. package/dist/index.mjs.map +1 -1
  7. package/package.json +15 -12
  8. package/src/__tests__/init-styles-renderer.test.ts +19 -9
  9. package/src/init-styles-renderer.ts +20 -7
  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
package/dist/index.mjs CHANGED
@@ -129,37 +129,203 @@ function ElementsOverlays() {
129
129
 
130
130
  // src/init-styles-renderer.ts
131
131
  import { getBreakpointsMap } from "@elementor/editor-responsive";
132
+ import { getStylesSchema } from "@elementor/editor-styles";
132
133
  import { stylesRepository } from "@elementor/editor-styles-repository";
133
134
  import { __privateListenTo as listenTo, v1ReadyEvent } from "@elementor/editor-v1-adapters";
134
135
 
135
- // src/styles-renderer/transformers/background-color-overlay-transformer.ts
136
+ // src/renderers/create-props-resolver.ts
137
+ import {
138
+ isTransformable
139
+ } from "@elementor/editor-props";
140
+
141
+ // src/renderers/multi-props.ts
142
+ var isMultiProps = (propValue) => {
143
+ return !!propValue && typeof propValue === "object" && "$$multi-props" in propValue && propValue["$$multi-props"] === true;
144
+ };
145
+ var createMultiPropsValue = (props) => {
146
+ return {
147
+ "$$multi-props": true,
148
+ value: props
149
+ };
150
+ };
151
+ var getMultiPropsValue = (multiProps) => {
152
+ return multiProps.value;
153
+ };
154
+
155
+ // src/renderers/create-props-resolver.ts
156
+ var TRANSFORM_DEPTH_LIMIT = 3;
157
+ function createPropsResolver(transformers, { onPropResolve } = {}) {
158
+ async function transform({ value, key, type, signal, depth = 0 }) {
159
+ if (value === null || value === void 0) {
160
+ return null;
161
+ }
162
+ if (!isTransformable(value)) {
163
+ return value;
164
+ }
165
+ if (depth > TRANSFORM_DEPTH_LIMIT) {
166
+ return null;
167
+ }
168
+ if (value.disabled === true) {
169
+ return null;
170
+ }
171
+ if (type.kind === "union") {
172
+ type = type.prop_types[value.$$type];
173
+ if (!type) {
174
+ return null;
175
+ }
176
+ }
177
+ let resolvedValue = value.value;
178
+ if (type.kind === "object") {
179
+ resolvedValue = await resolve({
180
+ props: resolvedValue,
181
+ schema: type.shape,
182
+ signal
183
+ });
184
+ }
185
+ if (type.kind === "array") {
186
+ resolvedValue = await Promise.all(
187
+ resolvedValue.map(
188
+ (item) => transform({ value: item, key, type: type.item_prop_type, depth, signal })
189
+ )
190
+ );
191
+ }
192
+ const transformer = transformers[value.$$type];
193
+ if (!transformer) {
194
+ return null;
195
+ }
196
+ try {
197
+ const transformed = await transformer(resolvedValue, { key, signal });
198
+ return transform({ value: transformed, key, type, signal, depth: depth + 1 });
199
+ } catch {
200
+ return null;
201
+ }
202
+ }
203
+ async function resolve({ props, schema, signal }) {
204
+ const promises = Promise.all(
205
+ Object.entries(schema).map(async ([key, type]) => {
206
+ const value = props[key] ?? type.default;
207
+ const transformed = await transform({ value, key, type, signal });
208
+ if (transformed === null) {
209
+ return;
210
+ }
211
+ onPropResolve?.({ key, value: transformed });
212
+ if (isMultiProps(transformed)) {
213
+ return getMultiPropsValue(transformed);
214
+ }
215
+ return { [key]: transformed };
216
+ })
217
+ );
218
+ return Object.assign({}, ...(await promises).filter(Boolean));
219
+ }
220
+ return resolve;
221
+ }
222
+
223
+ // src/renderers/errors.ts
224
+ import { createError } from "@elementor/utils";
225
+ var UnknownStyleTypeError = createError({
226
+ code: "unknown_style_type",
227
+ message: "Unknown style type"
228
+ });
229
+
230
+ // src/renderers/render-styles.ts
231
+ var SELECTORS_MAP = {
232
+ class: "."
233
+ };
234
+ async function renderStyles({
235
+ resolve,
236
+ styles,
237
+ schema,
238
+ breakpoints,
239
+ selectorPrefix = "",
240
+ signal
241
+ }) {
242
+ const stylesCssPromises = styles.map(async (style) => {
243
+ const variantCssPromises = Object.values(style.variants).map(async (variant) => {
244
+ const css = await propsToCss({ props: variant.props, schema, resolve, signal });
245
+ return createStyleWrapper().forStyle(style).withPrefix(selectorPrefix).withState(variant.meta.state).withMediaQuery(variant.meta.breakpoint ? breakpoints[variant.meta.breakpoint] : null).wrap(css);
246
+ });
247
+ const variantsCss = await Promise.all(variantCssPromises);
248
+ return wrapCssWithStyleElement(style.id, variantsCss.join(""));
249
+ });
250
+ const stylesCss = await Promise.all(stylesCssPromises);
251
+ return stylesCss.join("");
252
+ }
253
+ function createStyleWrapper(value = "", wrapper) {
254
+ return {
255
+ forStyle: ({ id, type }) => {
256
+ const symbol = SELECTORS_MAP[type];
257
+ if (!symbol) {
258
+ throw new UnknownStyleTypeError({ context: { type } });
259
+ }
260
+ return createStyleWrapper(`${value}${symbol}${id}`, wrapper);
261
+ },
262
+ withPrefix: (prefix) => createStyleWrapper([prefix, value].filter(Boolean).join(" "), wrapper),
263
+ withState: (state) => createStyleWrapper(state ? `${value}:${state}` : value, wrapper),
264
+ withMediaQuery: (breakpoint) => {
265
+ if (!breakpoint?.type) {
266
+ return createStyleWrapper(value, wrapper);
267
+ }
268
+ const size2 = `${breakpoint.type}:${breakpoint.width}px`;
269
+ return createStyleWrapper(value, (css) => `@media(${size2}){${css}}`);
270
+ },
271
+ wrap: (css) => {
272
+ const res = `${value}{${css}}`;
273
+ if (!wrapper) {
274
+ return res;
275
+ }
276
+ return wrapper(res);
277
+ }
278
+ };
279
+ }
280
+ async function propsToCss({ props, resolve, signal, schema }) {
281
+ const transformed = await resolve({ props, schema, signal });
282
+ return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
283
+ acc.push(propName + ":" + propValue + ";");
284
+ return acc;
285
+ }, []).join("");
286
+ }
287
+ function wrapCssWithStyleElement(id, css) {
288
+ return `<style data-style-id="${id}">${css}</style>`;
289
+ }
290
+
291
+ // src/renderers/style-transformers/background-color-overlay-transformer.ts
136
292
  var backgroundColorOverlayTransformer = (value) => {
137
293
  return `linear-gradient(${value}, ${value})`;
138
294
  };
139
295
  var background_color_overlay_transformer_default = backgroundColorOverlayTransformer;
140
296
 
141
- // src/styles-renderer/transformers/background-image-overlay-transformer.ts
142
- var defaultPositionValue = "0% 0%";
297
+ // src/renderers/style-transformers/background-image-overlay-transformer.ts
298
+ var DEFAULT_POSITION_VALUE = "0% 0%";
143
299
  var backgroundImageOverlayTransformer = (value) => {
144
- const { "image-src": imageSrc, size: size2 = null, position = null, repeat = null, attachment = null } = value;
145
- let resultBackgroundStyle = imageSrc;
146
- if (repeat) {
147
- resultBackgroundStyle += ` ${repeat}`;
148
- }
149
- if (attachment) {
150
- resultBackgroundStyle += ` ${attachment}`;
151
- }
152
- if (position && !size2) {
153
- resultBackgroundStyle += ` ${position}`;
154
- }
155
- if (size2) {
156
- resultBackgroundStyle += ` ${position || defaultPositionValue} / ${size2}`;
300
+ const { image: imageSrc, size: size2 = null, position = null, repeat = null, attachment = null } = value;
301
+ if (!imageSrc) {
302
+ return null;
157
303
  }
158
- return resultBackgroundStyle;
304
+ const backgroundStyles = [
305
+ imageSrc,
306
+ repeat,
307
+ attachment,
308
+ size2 ? `${position || DEFAULT_POSITION_VALUE} / ${size2}` : position
309
+ ].filter(Boolean);
310
+ return backgroundStyles.join(" ");
159
311
  };
160
312
  var background_image_overlay_transformer_default = backgroundImageOverlayTransformer;
161
313
 
162
- // src/styles-renderer/transformers/background-transformer.ts
314
+ // src/renderers/style-transformers/background-image-position-offset-transformer.ts
315
+ var backgroundImagePositionOffsetTransformer = ({
316
+ x = "0px",
317
+ y = "0px"
318
+ }) => `${x} ${y}`;
319
+ var background_image_position_offset_transformer_default = backgroundImagePositionOffsetTransformer;
320
+
321
+ // src/renderers/style-transformers/background-image-size-scale-transformer.ts
322
+ var backgroundImageSizeScaleTransformer = ({
323
+ width = "auto",
324
+ height = "auto"
325
+ }) => `${width} ${height}`;
326
+ var background_image_size_scale_transformer_default = backgroundImageSizeScaleTransformer;
327
+
328
+ // src/renderers/style-transformers/background-transformer.ts
163
329
  var backgroundTransformer = (value) => {
164
330
  const overlays = value["background-overlay"] ?? "";
165
331
  const color = value.color ?? "";
@@ -167,27 +333,13 @@ var backgroundTransformer = (value) => {
167
333
  };
168
334
  var background_transformer_default = backgroundTransformer;
169
335
 
170
- // src/styles-renderer/transformers/create-combine-array-transformer.ts
336
+ // src/renderers/style-transformers/create-combine-array-transformer.ts
171
337
  var createCombineArrayTransformer = (delimiter) => {
172
338
  return (value) => value.filter(Boolean).join(delimiter);
173
339
  };
174
340
  var create_combine_array_transformer_default = createCombineArrayTransformer;
175
341
 
176
- // src/styles-renderer/multi-props.ts
177
- var isMultiProps = (propValue) => {
178
- return !!propValue && typeof propValue === "object" && "$$multi-props" in propValue && propValue["$$multi-props"] === true;
179
- };
180
- var createMultiPropsValue = (props) => {
181
- return {
182
- "$$multi-props": true,
183
- value: props
184
- };
185
- };
186
- var getMultiPropsValue = (multiProps) => {
187
- return multiProps.value;
188
- };
189
-
190
- // src/styles-renderer/transformers/create-corner-sizes-transformer.ts
342
+ // src/renderers/style-transformers/create-corner-sizes-transformer.ts
191
343
  var validCorners = ["top-left", "top-right", "bottom-left", "bottom-right"];
192
344
  var createCornerSizesTransformer = (keyGenerator) => (value) => {
193
345
  const props = Object.entries(value).reduce((acc, [corner, cornerValue]) => {
@@ -201,7 +353,7 @@ var createCornerSizesTransformer = (keyGenerator) => (value) => {
201
353
  };
202
354
  var create_corner_sizes_transformer_default = createCornerSizesTransformer;
203
355
 
204
- // src/styles-renderer/transformers/create-edge-sizes-transformer.ts
356
+ // src/renderers/style-transformers/create-edge-sizes-transformer.ts
205
357
  var validEdges = ["top", "right", "bottom", "left"];
206
358
  var createEdgeSizesTransformer = (keyGenerator) => (value) => {
207
359
  const props = Object.entries(value).reduce((acc, [edge, edgeValue]) => {
@@ -215,7 +367,7 @@ var createEdgeSizesTransformer = (keyGenerator) => (value) => {
215
367
  };
216
368
  var create_edge_sizes_transformer_default = createEdgeSizesTransformer;
217
369
 
218
- // src/styles-renderer/transformers/dimensions.ts
370
+ // src/renderers/style-transformers/dimensions.ts
219
371
  var validKeys = ["top", "right", "bottom", "left"];
220
372
  var dimensions = (value, { key }) => {
221
373
  const parsed = Object.entries(value).reduce((acc, [dimensionKey, dimensionValue]) => {
@@ -228,25 +380,40 @@ var dimensions = (value, { key }) => {
228
380
  };
229
381
  var dimensions_default = dimensions;
230
382
 
231
- // src/styles-renderer/transformers/image-attachment.ts
383
+ // src/renderers/style-transformers/image.ts
384
+ var imageTransformer = (value) => {
385
+ const { src, size: size2 } = value;
386
+ if (src.url) {
387
+ return `url(${src.url})`;
388
+ }
389
+ const sizeUrl = src.attachment?.sizes[size2]?.url;
390
+ if (sizeUrl) {
391
+ return `url(${sizeUrl})`;
392
+ }
393
+ const attachmentUrl = src.attachment?.url;
394
+ if (attachmentUrl) {
395
+ return `url(${attachmentUrl})`;
396
+ }
397
+ return null;
398
+ };
399
+
400
+ // src/renderers/style-transformers/image-attachment.ts
232
401
  import { getMediaAttachment } from "@elementor/wp-media";
233
402
  var imageAttachmentTransformer = async (value) => {
234
403
  const attachment = await getMediaAttachment({ id: value });
235
404
  if (!attachment) {
236
405
  return null;
237
406
  }
238
- return attachment.url;
407
+ return attachment;
239
408
  };
240
409
 
241
- // src/styles-renderer/transformers/image-src.ts
242
- var imageSrcTransformer = (value) => {
243
- const url = value.id ?? value.url?.value;
244
- if (url) {
245
- return `url(${url})`;
246
- }
247
- };
410
+ // src/renderers/style-transformers/image-src.ts
411
+ var imageSrcTransformer = (value) => ({
412
+ attachment: value.id,
413
+ url: value.url
414
+ });
248
415
 
249
- // src/styles-renderer/transformers/layout-direction-transformer.ts
416
+ // src/renderers/style-transformers/layout-direction-transformer.ts
250
417
  var validKeys2 = ["row", "column"];
251
418
  var layoutDirectionTransformer = (value, { key }) => {
252
419
  const parsed = Object.entries(value).reduce((acc, [dimensionKey, dimensionValue]) => {
@@ -259,31 +426,31 @@ var layoutDirectionTransformer = (value, { key }) => {
259
426
  };
260
427
  var layout_direction_transformer_default = layoutDirectionTransformer;
261
428
 
262
- // src/styles-renderer/transformers/primitive-transformer.ts
429
+ // src/renderers/style-transformers/primitive-transformer.ts
263
430
  var primitiveTransformer = (value) => {
264
431
  return value;
265
432
  };
266
433
 
267
- // src/styles-renderer/transformers/shadow-transformer.ts
434
+ // src/renderers/style-transformers/shadow-transformer.ts
268
435
  var shadowTransformer = (value) => {
269
436
  return [value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position].filter(Boolean).join(" ");
270
437
  };
271
438
  var shadow_transformer_default = shadowTransformer;
272
439
 
273
- // src/styles-renderer/transformers/size-transformer.ts
440
+ // src/renderers/style-transformers/size-transformer.ts
274
441
  var sizeTransformer = (value) => {
275
442
  return `${value.size}${value.unit}`;
276
443
  };
277
444
  var size_transformer_default = sizeTransformer;
278
445
 
279
- // src/styles-renderer/transformers/stroke-transformer.ts
446
+ // src/renderers/style-transformers/stroke-transformer.ts
280
447
  var strokeTransformer = (value) => {
281
448
  return `${value.width} ${value.color}`;
282
449
  };
283
450
  var stroke_transformer_default = strokeTransformer;
284
451
 
285
- // src/styles-renderer/transformers/index.ts
286
- var transformers_default = {
452
+ // src/renderers/style-transformers/index.ts
453
+ var styleTransformers = {
287
454
  size: size_transformer_default,
288
455
  shadow: shadow_transformer_default,
289
456
  stroke: stroke_transformer_default,
@@ -291,182 +458,28 @@ var transformers_default = {
291
458
  color: primitiveTransformer,
292
459
  number: primitiveTransformer,
293
460
  string: primitiveTransformer,
461
+ url: primitiveTransformer,
294
462
  dimensions: dimensions_default,
295
463
  "background-color-overlay": background_color_overlay_transformer_default,
296
464
  "background-image-overlay": background_image_overlay_transformer_default,
465
+ "background-image-position-offset": background_image_position_offset_transformer_default,
466
+ "background-image-size-scale": background_image_size_scale_transformer_default,
297
467
  "background-overlay": create_combine_array_transformer_default(","),
298
468
  "box-shadow": create_combine_array_transformer_default(","),
299
469
  "border-width": create_edge_sizes_transformer_default((edgeKey) => `border-${edgeKey}-width`),
300
470
  "border-radius": create_corner_sizes_transformer_default((cornerKey) => `border-${cornerKey}-radius`),
301
471
  "image-attachment-id": imageAttachmentTransformer,
302
472
  "image-src": imageSrcTransformer,
473
+ image: imageTransformer,
303
474
  "layout-direction": layout_direction_transformer_default
304
475
  };
305
476
 
306
- // src/styles-renderer/render.ts
307
- import {
308
- getStylesSchema
309
- } from "@elementor/editor-styles";
310
-
311
- // src/styles-renderer/errors.ts
312
- import { createError } from "@elementor/utils";
313
- var UnknownStyleTypeError = createError({
314
- code: "unknown_style_type",
315
- message: "Unknown style type"
316
- });
317
-
318
- // src/styles-renderer/resolve.ts
319
- import { isTransformable } from "@elementor/editor-props";
320
- var TRANSFORM_DEPTH_LIMIT = 3;
321
- async function resolve({ props, schema, transformers, signal }) {
322
- const promises = Promise.all(
323
- Object.entries(schema).map(async ([propKey, propType]) => {
324
- const value = props[propKey] ?? propType.default;
325
- const transformed = await transform(value, propKey, propType, transformers, 0, signal);
326
- if (transformed === null) {
327
- return;
328
- }
329
- if (isMultiProps(transformed)) {
330
- return getMultiPropsValue(transformed);
331
- }
332
- return { [propKey]: transformed };
333
- })
334
- );
335
- return Object.assign({}, ...(await promises).filter(Boolean));
336
- }
337
- async function transform(value, propKey, propType, transformers, depth = 0, signal) {
338
- if (!value && value !== 0) {
339
- return null;
340
- }
341
- if (!isTransformable(value)) {
342
- return value;
343
- }
344
- if (depth > TRANSFORM_DEPTH_LIMIT) {
345
- return null;
346
- }
347
- if (value.disabled === true) {
348
- return null;
349
- }
350
- if (propType.kind === "union") {
351
- propType = propType.prop_types[value.$$type];
352
- if (!propType) {
353
- return null;
354
- }
355
- }
356
- let resolvedValue = value.value;
357
- if (propType.kind === "object") {
358
- resolvedValue = await resolve({
359
- transformers,
360
- props: resolvedValue,
361
- schema: propType.shape,
362
- signal
363
- });
364
- }
365
- if (propType.kind === "array") {
366
- resolvedValue = await Promise.all(
367
- resolvedValue.map(
368
- (item) => transform(item, propKey, propType.item_prop_type, transformers, depth, signal)
369
- )
370
- );
371
- }
372
- const transformer = transformers[value.$$type];
373
- if (!transformer) {
374
- return null;
375
- }
376
- try {
377
- const transformed = await transformer(resolvedValue, { key: propKey, signal });
378
- return transform(transformed, propKey, propType, transformers, depth + 1, signal);
379
- } catch {
380
- return null;
381
- }
382
- }
383
-
384
- // src/styles-renderer/render.ts
385
- var SELECTORS_MAP = {
386
- class: "."
387
- };
388
- async function render({
389
- transformers,
390
- styles,
391
- breakpoints,
392
- selectorPrefix = "",
393
- signal
394
- }) {
395
- const stylesCssPromises = styles.map(async (style) => {
396
- const variantCssPromises = Object.values(style.variants).map(async (variant) => {
397
- const css = await propsToCss(variant.props, transformers, signal);
398
- return createStyleWrapper().forStyle(style).withPrefix(selectorPrefix).withState(variant.meta.state).withMediaQuery(variant.meta.breakpoint ? breakpoints[variant.meta.breakpoint] : null).wrap(css);
399
- });
400
- const variantsCss = await Promise.all(variantCssPromises);
401
- return wrapCssWithStyleElement(style.id, variantsCss.join(""));
402
- });
403
- const stylesCss = await Promise.all(stylesCssPromises);
404
- return stylesCss.join("");
405
- }
406
- function createStyleWrapper(value = "", wrapper) {
407
- return {
408
- forStyle: ({ id, type }) => {
409
- const symbol = SELECTORS_MAP[type];
410
- if (!symbol) {
411
- throw new UnknownStyleTypeError({ context: { type } });
412
- }
413
- return createStyleWrapper(`${value}${symbol}${id}`, wrapper);
414
- },
415
- withPrefix: (prefix) => createStyleWrapper([prefix, value].filter(Boolean).join(" "), wrapper),
416
- withState: (state) => createStyleWrapper(state ? `${value}:${state}` : value, wrapper),
417
- withMediaQuery: (breakpoint) => {
418
- if (!breakpoint?.type) {
419
- return createStyleWrapper(value, wrapper);
420
- }
421
- const size2 = `${breakpoint.type}:${breakpoint.width}px`;
422
- return createStyleWrapper(value, (css) => `@media(${size2}){${css}}`);
423
- },
424
- wrap: (css) => {
425
- const res = `${value}{${css}}`;
426
- if (!wrapper) {
427
- return res;
428
- }
429
- return wrapper(res);
430
- }
431
- };
432
- }
433
- async function propsToCss(props, transformers, signal) {
434
- const schema = getStylesSchema();
435
- const transformed = await resolve({ props, schema, transformers, signal });
436
- return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
437
- acc.push(propName + ":" + propValue + ";");
438
- return acc;
439
- }, []).join("");
440
- }
441
- function wrapCssWithStyleElement(id, css) {
442
- return `<style data-style-id="${id}">${css}</style>`;
443
- }
444
-
445
- // src/styles-renderer/enqueue-used-fonts.ts
446
- import { ensureError } from "@elementor/utils";
447
-
448
477
  // src/sync/enqueue-font.ts
449
478
  var enqueueFont = (fontFamily, context = "preview") => {
450
479
  const extendedWindow = window;
451
480
  return extendedWindow.elementor?.helpers?.enqueueFont?.(fontFamily, context) ?? null;
452
481
  };
453
482
 
454
- // src/styles-renderer/enqueue-used-fonts.ts
455
- function enqueueUsedFonts(styles) {
456
- try {
457
- styles.forEach((styleDef) => {
458
- Object.values(styleDef.variants).forEach((variant) => {
459
- const fontFamily = variant.props["font-family"];
460
- if (fontFamily?.value) {
461
- enqueueFont(fontFamily.value);
462
- }
463
- });
464
- });
465
- } catch (error) {
466
- console.error(`Cannot enqueue font': ${ensureError(error).message}`);
467
- }
468
- }
469
-
470
483
  // src/sync/get-canvas-iframe-body.ts
471
484
  function getCanvasIframeBody() {
472
485
  const extendedWindow = window;
@@ -478,23 +491,25 @@ var WRAPPER_DATA_ATTR = "data-styles-container";
478
491
  var SELECTOR_PREFIX = ".elementor";
479
492
  function initStylesRenderer() {
480
493
  let abortController = null;
494
+ const resolve = createPropsResolver(styleTransformers, { onPropResolve: enqueueUsedFonts });
481
495
  listenTo(v1ReadyEvent(), () => {
482
496
  stylesRepository.subscribe(async () => {
483
497
  const styleContainer = getStylesContainer();
484
- const breakpoints = getBreakpointsMap();
485
498
  const styles = stylesRepository.all().reverse();
499
+ const breakpoints = getBreakpointsMap();
500
+ const schema = getStylesSchema();
486
501
  if (abortController) {
487
502
  abortController.abort();
488
503
  }
489
504
  abortController = new AbortController();
490
- styleContainer.innerHTML = await render({
491
- transformers: transformers_default,
505
+ styleContainer.innerHTML = await renderStyles({
492
506
  styles,
507
+ resolve,
493
508
  breakpoints,
494
509
  selectorPrefix: SELECTOR_PREFIX,
495
- signal: abortController.signal
510
+ signal: abortController.signal,
511
+ schema
496
512
  });
497
- enqueueUsedFonts(styles);
498
513
  });
499
514
  });
500
515
  }
@@ -514,6 +529,12 @@ function createStylesContainer() {
514
529
  el.setAttribute(WRAPPER_DATA_ATTR, "");
515
530
  return el;
516
531
  }
532
+ function enqueueUsedFonts({ key, value }) {
533
+ if (key !== "font-family" || typeof value !== "string") {
534
+ return;
535
+ }
536
+ enqueueFont(value);
537
+ }
517
538
 
518
539
  // src/init.tsx
519
540
  function init() {