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