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