@elementor/editor-canvas 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +9 -9
- package/CHANGELOG.md +57 -0
- package/dist/index.js +241 -215
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +243 -217
- 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 +214 -16
- package/src/renderers/__tests__/create-props-resolver.test.ts +175 -0
- package/src/renderers/__tests__/create-props-resolver.transformers.test.ts +325 -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 +7 -9
- 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/style-transformers/stroke-transformer.ts +16 -0
- 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/transformers/stroke-transformer.ts +0 -9
- 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/.turbo/turbo-build.log
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
|
|
2
|
-
> @elementor/editor-canvas@0.
|
|
2
|
+
> @elementor/editor-canvas@0.9.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
|
-
[32mESM[39m [1mdist/index.mjs [22m[
|
|
14
|
-
[32mESM[39m [1mdist/index.mjs.map [22m[
|
|
15
|
-
[32mESM[39m ⚡️ Build success in
|
|
16
|
-
[32mCJS[39m [1mdist/index.js [22m[
|
|
17
|
-
[32mCJS[39m [1mdist/index.js.map [22m[
|
|
18
|
-
[32mCJS[39m ⚡️ Build success in
|
|
13
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m18.47 KB[39m
|
|
14
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m38.82 KB[39m
|
|
15
|
+
[32mESM[39m ⚡️ Build success in 105ms
|
|
16
|
+
[32mCJS[39m [1mdist/index.js [22m[32m20.09 KB[39m
|
|
17
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m38.83 KB[39m
|
|
18
|
+
[32mCJS[39m ⚡️ Build success in 108ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 18574ms
|
|
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,62 @@
|
|
|
1
1
|
# @elementor/editor-canvas
|
|
2
2
|
|
|
3
|
+
## 0.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c41674c: Update stroke renderer to be compatible with SVG widget
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 6b064c5: Make atomic border radius control use logical properties
|
|
12
|
+
- Updated dependencies [6b064c5]
|
|
13
|
+
- @elementor/editor-props@0.9.1
|
|
14
|
+
- @elementor/editor-styles-repository@0.7.1
|
|
15
|
+
- @elementor/editor-elements@0.5.3
|
|
16
|
+
- @elementor/editor-styles@0.5.6
|
|
17
|
+
|
|
18
|
+
## 0.8.0
|
|
19
|
+
|
|
20
|
+
### Minor Changes
|
|
21
|
+
|
|
22
|
+
- c9133d7: Add background image overlay custom size
|
|
23
|
+
- 910044c: update `@elementor/icons` and `@elementor/ui` packages.
|
|
24
|
+
- 0953b40: Background image overlay resolution canvas connection
|
|
25
|
+
- 15c964f: Add background image overlay custom position
|
|
26
|
+
- 5caf78d: update `@elementor/ui` package.
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- da38fa9: Remove unused exports and add missing dependencies.
|
|
31
|
+
- 35f9714: Add default background image to background overlay repeater
|
|
32
|
+
- dc93616: Move resolver out of style renderer to allow dom renderer use it
|
|
33
|
+
- Updated dependencies [c9133d7]
|
|
34
|
+
- Updated dependencies [86863c1]
|
|
35
|
+
- Updated dependencies [e6c904a]
|
|
36
|
+
- Updated dependencies [188069d]
|
|
37
|
+
- Updated dependencies [e441663]
|
|
38
|
+
- Updated dependencies [efdadea]
|
|
39
|
+
- Updated dependencies [da38fa9]
|
|
40
|
+
- Updated dependencies [910044c]
|
|
41
|
+
- Updated dependencies [4ed562a]
|
|
42
|
+
- Updated dependencies [9ca4eab]
|
|
43
|
+
- Updated dependencies [15c964f]
|
|
44
|
+
- Updated dependencies [5caf78d]
|
|
45
|
+
- Updated dependencies [ffad70a]
|
|
46
|
+
- Updated dependencies [ad6fde0]
|
|
47
|
+
- Updated dependencies [ebd9676]
|
|
48
|
+
- Updated dependencies [d99471a]
|
|
49
|
+
- Updated dependencies [b8e2a85]
|
|
50
|
+
- @elementor/editor-props@0.9.0
|
|
51
|
+
- @elementor/editor-styles-repository@0.7.0
|
|
52
|
+
- @elementor/editor-elements@0.5.2
|
|
53
|
+
- @elementor/editor-v1-adapters@0.10.0
|
|
54
|
+
- @elementor/editor-responsive@0.13.0
|
|
55
|
+
- @elementor/editor@0.18.0
|
|
56
|
+
- @elementor/utils@0.3.1
|
|
57
|
+
- @elementor/editor-styles@0.5.5
|
|
58
|
+
- @elementor/wp-media@0.4.1
|
|
59
|
+
|
|
3
60
|
## 0.7.1
|
|
4
61
|
|
|
5
62
|
### 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,28 +352,14 @@ 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
|
|
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
|
|
212
|
-
var validCorners = ["top-left", "top-right", "bottom-left", "bottom-right"];
|
|
361
|
+
// src/renderers/style-transformers/create-corner-sizes-transformer.ts
|
|
362
|
+
var validCorners = ["start-start", "start-end", "end-start", "end-end"];
|
|
213
363
|
var createCornerSizesTransformer = (keyGenerator) => (value) => {
|
|
214
364
|
const props = Object.entries(value).reduce((acc, [corner, cornerValue]) => {
|
|
215
365
|
if (validCorners.includes(corner)) {
|
|
@@ -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,36 @@ 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
|
+
const parsed = {
|
|
468
|
+
"-webkit-text-stroke": `${value.width} ${value.color}`,
|
|
469
|
+
stroke: `${value.color}`,
|
|
470
|
+
"stroke-width": `${value.width}`
|
|
471
|
+
};
|
|
472
|
+
return createMultiPropsValue(parsed);
|
|
303
473
|
};
|
|
304
474
|
var stroke_transformer_default = strokeTransformer;
|
|
305
475
|
|
|
306
|
-
// src/
|
|
307
|
-
var
|
|
476
|
+
// src/renderers/style-transformers/index.ts
|
|
477
|
+
var styleTransformers = {
|
|
308
478
|
size: size_transformer_default,
|
|
309
479
|
shadow: shadow_transformer_default,
|
|
310
480
|
stroke: stroke_transformer_default,
|
|
@@ -312,180 +482,28 @@ var transformers_default = {
|
|
|
312
482
|
color: primitiveTransformer,
|
|
313
483
|
number: primitiveTransformer,
|
|
314
484
|
string: primitiveTransformer,
|
|
485
|
+
url: primitiveTransformer,
|
|
315
486
|
dimensions: dimensions_default,
|
|
316
487
|
"background-color-overlay": background_color_overlay_transformer_default,
|
|
317
488
|
"background-image-overlay": background_image_overlay_transformer_default,
|
|
489
|
+
"background-image-position-offset": background_image_position_offset_transformer_default,
|
|
490
|
+
"background-image-size-scale": background_image_size_scale_transformer_default,
|
|
318
491
|
"background-overlay": create_combine_array_transformer_default(","),
|
|
319
492
|
"box-shadow": create_combine_array_transformer_default(","),
|
|
320
493
|
"border-width": create_edge_sizes_transformer_default((edgeKey) => `border-${edgeKey}-width`),
|
|
321
494
|
"border-radius": create_corner_sizes_transformer_default((cornerKey) => `border-${cornerKey}-radius`),
|
|
322
495
|
"image-attachment-id": imageAttachmentTransformer,
|
|
323
496
|
"image-src": imageSrcTransformer,
|
|
497
|
+
image: imageTransformer,
|
|
324
498
|
"layout-direction": layout_direction_transformer_default
|
|
325
499
|
};
|
|
326
500
|
|
|
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
501
|
// src/sync/enqueue-font.ts
|
|
468
502
|
var enqueueFont = (fontFamily, context = "preview") => {
|
|
469
503
|
const extendedWindow = window;
|
|
470
504
|
return extendedWindow.elementor?.helpers?.enqueueFont?.(fontFamily, context) ?? null;
|
|
471
505
|
};
|
|
472
506
|
|
|
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
507
|
// src/sync/get-canvas-iframe-body.ts
|
|
490
508
|
function getCanvasIframeBody() {
|
|
491
509
|
const extendedWindow = window;
|
|
@@ -497,23 +515,25 @@ var WRAPPER_DATA_ATTR = "data-styles-container";
|
|
|
497
515
|
var SELECTOR_PREFIX = ".elementor";
|
|
498
516
|
function initStylesRenderer() {
|
|
499
517
|
let abortController = null;
|
|
518
|
+
const resolve = createPropsResolver(styleTransformers, { onPropResolve: enqueueUsedFonts });
|
|
500
519
|
(0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.v1ReadyEvent)(), () => {
|
|
501
520
|
import_editor_styles_repository.stylesRepository.subscribe(async () => {
|
|
502
521
|
const styleContainer = getStylesContainer();
|
|
503
|
-
const breakpoints = (0, import_editor_responsive.getBreakpointsMap)();
|
|
504
522
|
const styles = import_editor_styles_repository.stylesRepository.all().reverse();
|
|
523
|
+
const breakpoints = (0, import_editor_responsive.getBreakpointsMap)();
|
|
524
|
+
const schema = (0, import_editor_styles.getStylesSchema)();
|
|
505
525
|
if (abortController) {
|
|
506
526
|
abortController.abort();
|
|
507
527
|
}
|
|
508
528
|
abortController = new AbortController();
|
|
509
|
-
styleContainer.innerHTML = await
|
|
510
|
-
transformers: transformers_default,
|
|
529
|
+
styleContainer.innerHTML = await renderStyles({
|
|
511
530
|
styles,
|
|
531
|
+
resolve,
|
|
512
532
|
breakpoints,
|
|
513
533
|
selectorPrefix: SELECTOR_PREFIX,
|
|
514
|
-
signal: abortController.signal
|
|
534
|
+
signal: abortController.signal,
|
|
535
|
+
schema
|
|
515
536
|
});
|
|
516
|
-
enqueueUsedFonts(styles);
|
|
517
537
|
});
|
|
518
538
|
});
|
|
519
539
|
}
|
|
@@ -533,6 +553,12 @@ function createStylesContainer() {
|
|
|
533
553
|
el.setAttribute(WRAPPER_DATA_ATTR, "");
|
|
534
554
|
return el;
|
|
535
555
|
}
|
|
556
|
+
function enqueueUsedFonts({ key, value }) {
|
|
557
|
+
if (key !== "font-family" || typeof value !== "string") {
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
enqueueFont(value);
|
|
561
|
+
}
|
|
536
562
|
|
|
537
563
|
// src/init.tsx
|
|
538
564
|
function init() {
|