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