@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.
- package/.turbo/turbo-build.log +9 -9
- package/CHANGELOG.md +42 -0
- package/dist/index.js +234 -213
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +236 -215
- package/dist/index.mjs.map +1 -1
- package/package.json +15 -12
- package/src/__tests__/init-styles-renderer.test.ts +19 -9
- package/src/init-styles-renderer.ts +20 -7
- package/src/{styles-renderer → renderers}/__tests__/__mocks__/styles-schema.ts +210 -12
- package/src/renderers/__tests__/create-props-resolver.test.ts +175 -0
- package/src/renderers/__tests__/create-props-resolver.transformers.test.ts +323 -0
- package/src/renderers/__tests__/render-styles.test.ts +126 -0
- package/src/renderers/create-props-resolver.ts +123 -0
- package/src/{styles-renderer → renderers}/multi-props.ts +1 -1
- package/src/{styles-renderer/render.ts → renderers/render-styles.ts} +18 -17
- package/src/renderers/style-transformers/background-image-overlay-transformer.ts +24 -0
- package/src/renderers/style-transformers/background-image-position-offset-transformer.ts +10 -0
- package/src/renderers/style-transformers/background-image-size-scale-transformer.ts +10 -0
- package/src/{styles-renderer/transformers → renderers/style-transformers}/create-corner-sizes-transformer.ts +2 -4
- package/src/{styles-renderer/transformers → renderers/style-transformers}/create-edge-sizes-transformer.ts +2 -2
- package/src/{styles-renderer/transformers → renderers/style-transformers}/image-attachment.ts +1 -1
- package/src/{styles-renderer/transformers → renderers/style-transformers}/image-src.ts +4 -7
- package/src/renderers/style-transformers/image.ts +25 -0
- package/src/{styles-renderer/transformers → renderers/style-transformers}/index.ts +9 -2
- package/src/renderers/types.ts +12 -0
- package/src/styles-renderer/__tests__/enqueue-used-fonts.test.ts +0 -60
- package/src/styles-renderer/__tests__/index.test.ts +0 -777
- package/src/styles-renderer/enqueue-used-fonts.ts +0 -22
- package/src/styles-renderer/index.ts +0 -2
- package/src/styles-renderer/resolve.ts +0 -103
- package/src/styles-renderer/transformers/background-image-overlay-transformer.ts +0 -31
- package/src/styles-renderer/types.ts +0 -16
- /package/src/{styles-renderer → renderers}/errors.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/background-color-overlay-transformer.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/background-transformer.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/create-combine-array-transformer.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/dimensions.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/layout-direction-transformer.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/primitive-transformer.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/shadow-transformer.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/size-transformer.ts +0 -0
- /package/src/{styles-renderer/transformers → renderers/style-transformers}/stroke-transformer.ts +0 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
|
|
2
|
-
> @elementor/editor-canvas@0.
|
|
2
|
+
> @elementor/editor-canvas@0.8.0 build
|
|
3
3
|
> tsup --config=../../tsup.build.ts
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
6
6
|
[34mCLI[39m Using tsconfig: ../../../tsconfig.json
|
|
7
|
-
[34mCLI[39m tsup v8.
|
|
7
|
+
[34mCLI[39m tsup v8.4.0
|
|
8
8
|
[34mCLI[39m Using tsup config: /home/runner/work/elementor-packages/elementor-packages/tsup.build.ts
|
|
9
9
|
[34mCLI[39m Target: esnext
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mESM[39m Build start
|
|
12
12
|
[34mCJS[39m Build start
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m19.95 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m38.48 KB[39m
|
|
15
|
+
[32mCJS[39m ⚡️ Build success in 173ms
|
|
16
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m18.33 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m38.46 KB[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 178ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 17766ms
|
|
21
21
|
[32mDTS[39m [1mdist/index.d.mts [22m[32m13.00 B[39m
|
|
22
22
|
[32mDTS[39m [1mdist/index.d.ts [22m[32m13.00 B[39m
|
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/
|
|
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/
|
|
163
|
-
var
|
|
316
|
+
// src/renderers/style-transformers/background-image-overlay-transformer.ts
|
|
317
|
+
var DEFAULT_POSITION_VALUE = "0% 0%";
|
|
164
318
|
var backgroundImageOverlayTransformer = (value) => {
|
|
165
|
-
const {
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
|
426
|
+
return attachment;
|
|
260
427
|
};
|
|
261
428
|
|
|
262
|
-
// src/
|
|
263
|
-
var imageSrcTransformer = (value) => {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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/
|
|
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/
|
|
448
|
+
// src/renderers/style-transformers/primitive-transformer.ts
|
|
284
449
|
var primitiveTransformer = (value) => {
|
|
285
450
|
return value;
|
|
286
451
|
};
|
|
287
452
|
|
|
288
|
-
// src/
|
|
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/
|
|
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/
|
|
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/
|
|
307
|
-
var
|
|
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
|
|
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() {
|