@elementor/editor-canvas 0.7.1 → 0.9.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 (44) hide show
  1. package/.turbo/turbo-build.log +9 -9
  2. package/CHANGELOG.md +57 -0
  3. package/dist/index.js +241 -215
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +243 -217
  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 +214 -16
  11. package/src/renderers/__tests__/create-props-resolver.test.ts +175 -0
  12. package/src/renderers/__tests__/create-props-resolver.transformers.test.ts +325 -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 +7 -9
  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/style-transformers/stroke-transformer.ts +16 -0
  27. package/src/renderers/types.ts +12 -0
  28. package/src/styles-renderer/__tests__/enqueue-used-fonts.test.ts +0 -60
  29. package/src/styles-renderer/__tests__/index.test.ts +0 -777
  30. package/src/styles-renderer/enqueue-used-fonts.ts +0 -22
  31. package/src/styles-renderer/index.ts +0 -2
  32. package/src/styles-renderer/resolve.ts +0 -103
  33. package/src/styles-renderer/transformers/background-image-overlay-transformer.ts +0 -31
  34. package/src/styles-renderer/transformers/stroke-transformer.ts +0 -9
  35. package/src/styles-renderer/types.ts +0 -16
  36. /package/src/{styles-renderer → renderers}/errors.ts +0 -0
  37. /package/src/{styles-renderer/transformers → renderers/style-transformers}/background-color-overlay-transformer.ts +0 -0
  38. /package/src/{styles-renderer/transformers → renderers/style-transformers}/background-transformer.ts +0 -0
  39. /package/src/{styles-renderer/transformers → renderers/style-transformers}/create-combine-array-transformer.ts +0 -0
  40. /package/src/{styles-renderer/transformers → renderers/style-transformers}/dimensions.ts +0 -0
  41. /package/src/{styles-renderer/transformers → renderers/style-transformers}/layout-direction-transformer.ts +0 -0
  42. /package/src/{styles-renderer/transformers → renderers/style-transformers}/primitive-transformer.ts +0 -0
  43. /package/src/{styles-renderer/transformers → renderers/style-transformers}/shadow-transformer.ts +0 -0
  44. /package/src/{styles-renderer/transformers → renderers/style-transformers}/size-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,28 +333,14 @@ 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
191
- var validCorners = ["top-left", "top-right", "bottom-left", "bottom-right"];
342
+ // src/renderers/style-transformers/create-corner-sizes-transformer.ts
343
+ var validCorners = ["start-start", "start-end", "end-start", "end-end"];
192
344
  var createCornerSizesTransformer = (keyGenerator) => (value) => {
193
345
  const props = Object.entries(value).reduce((acc, [corner, cornerValue]) => {
194
346
  if (validCorners.includes(corner)) {
@@ -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,36 @@ 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
- return `${value.width} ${value.color}`;
448
+ const parsed = {
449
+ "-webkit-text-stroke": `${value.width} ${value.color}`,
450
+ stroke: `${value.color}`,
451
+ "stroke-width": `${value.width}`
452
+ };
453
+ return createMultiPropsValue(parsed);
282
454
  };
283
455
  var stroke_transformer_default = strokeTransformer;
284
456
 
285
- // src/styles-renderer/transformers/index.ts
286
- var transformers_default = {
457
+ // src/renderers/style-transformers/index.ts
458
+ var styleTransformers = {
287
459
  size: size_transformer_default,
288
460
  shadow: shadow_transformer_default,
289
461
  stroke: stroke_transformer_default,
@@ -291,182 +463,28 @@ var transformers_default = {
291
463
  color: primitiveTransformer,
292
464
  number: primitiveTransformer,
293
465
  string: primitiveTransformer,
466
+ url: primitiveTransformer,
294
467
  dimensions: dimensions_default,
295
468
  "background-color-overlay": background_color_overlay_transformer_default,
296
469
  "background-image-overlay": background_image_overlay_transformer_default,
470
+ "background-image-position-offset": background_image_position_offset_transformer_default,
471
+ "background-image-size-scale": background_image_size_scale_transformer_default,
297
472
  "background-overlay": create_combine_array_transformer_default(","),
298
473
  "box-shadow": create_combine_array_transformer_default(","),
299
474
  "border-width": create_edge_sizes_transformer_default((edgeKey) => `border-${edgeKey}-width`),
300
475
  "border-radius": create_corner_sizes_transformer_default((cornerKey) => `border-${cornerKey}-radius`),
301
476
  "image-attachment-id": imageAttachmentTransformer,
302
477
  "image-src": imageSrcTransformer,
478
+ image: imageTransformer,
303
479
  "layout-direction": layout_direction_transformer_default
304
480
  };
305
481
 
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
482
  // src/sync/enqueue-font.ts
449
483
  var enqueueFont = (fontFamily, context = "preview") => {
450
484
  const extendedWindow = window;
451
485
  return extendedWindow.elementor?.helpers?.enqueueFont?.(fontFamily, context) ?? null;
452
486
  };
453
487
 
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
488
  // src/sync/get-canvas-iframe-body.ts
471
489
  function getCanvasIframeBody() {
472
490
  const extendedWindow = window;
@@ -478,23 +496,25 @@ var WRAPPER_DATA_ATTR = "data-styles-container";
478
496
  var SELECTOR_PREFIX = ".elementor";
479
497
  function initStylesRenderer() {
480
498
  let abortController = null;
499
+ const resolve = createPropsResolver(styleTransformers, { onPropResolve: enqueueUsedFonts });
481
500
  listenTo(v1ReadyEvent(), () => {
482
501
  stylesRepository.subscribe(async () => {
483
502
  const styleContainer = getStylesContainer();
484
- const breakpoints = getBreakpointsMap();
485
503
  const styles = stylesRepository.all().reverse();
504
+ const breakpoints = getBreakpointsMap();
505
+ const schema = getStylesSchema();
486
506
  if (abortController) {
487
507
  abortController.abort();
488
508
  }
489
509
  abortController = new AbortController();
490
- styleContainer.innerHTML = await render({
491
- transformers: transformers_default,
510
+ styleContainer.innerHTML = await renderStyles({
492
511
  styles,
512
+ resolve,
493
513
  breakpoints,
494
514
  selectorPrefix: SELECTOR_PREFIX,
495
- signal: abortController.signal
515
+ signal: abortController.signal,
516
+ schema
496
517
  });
497
- enqueueUsedFonts(styles);
498
518
  });
499
519
  });
500
520
  }
@@ -514,6 +534,12 @@ function createStylesContainer() {
514
534
  el.setAttribute(WRAPPER_DATA_ATTR, "");
515
535
  return el;
516
536
  }
537
+ function enqueueUsedFonts({ key, value }) {
538
+ if (key !== "font-family" || typeof value !== "string") {
539
+ return;
540
+ }
541
+ enqueueFont(value);
542
+ }
517
543
 
518
544
  // src/init.tsx
519
545
  function init() {