@elementor/editor-canvas 0.13.1 → 0.14.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 +10 -10
- package/CHANGELOG.md +17 -0
- package/dist/index.d.mts +9 -8
- package/dist/index.d.ts +9 -8
- package/dist/index.js +38 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +46 -31
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -6
- package/src/__tests__/__mocks__/styles-schema.ts +3 -3
- package/src/__tests__/settings-props-resolver.test.ts +1 -1
- package/src/__tests__/styles-prop-resolver.test.ts +7 -7
- package/src/components/__tests__/elements-overlays.test.tsx +39 -34
- package/src/components/element-overlay.tsx +3 -2
- package/src/components/elements-overlays.tsx +26 -9
- package/src/hooks/use-floating-on-element.ts +9 -6
- package/src/init-settings-transformers.ts +1 -5
- package/src/init-style-transformers.ts +2 -6
- package/src/init-styles-renderer.ts +1 -1
- package/src/renderers/__tests__/create-dom-renderer.test.ts +66 -0
- package/src/renderers/__tests__/create-props-resolver.test.ts +123 -15
- package/src/renderers/create-dom-renderer.ts +56 -0
- package/src/renderers/create-props-resolver.ts +7 -7
- package/src/renderers/render-styles.ts +4 -0
- package/src/transformers/create-transformers-registry.ts +16 -5
- package/src/transformers/styles/background-image-position-offset-transformer.ts +1 -1
- package/src/transformers/styles/background-image-size-scale-transformer.ts +1 -1
- package/src/transformers/types.ts +1 -5
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @elementor/editor-canvas@0.
|
|
2
|
+
> @elementor/editor-canvas@0.14.0 build
|
|
3
3
|
> tsup --config=../../tsup.build.ts
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -10,13 +10,13 @@
|
|
|
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[32m32.61 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m63.36 KB[39m
|
|
15
|
+
[32mCJS[39m ⚡️ Build success in 244ms
|
|
16
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m29.90 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m63.58 KB[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 246ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
21
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[
|
|
22
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 21204ms
|
|
21
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m972.00 B[39m
|
|
22
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m972.00 B[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @elementor/editor-canvas
|
|
2
2
|
|
|
3
|
+
## 0.14.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- efd54a9: Add fallback transformer to the transformers registry
|
|
8
|
+
- b0a15b9: Create DOM renderer
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 5387bcf: Fix overlay on settings change
|
|
13
|
+
- Updated dependencies [5387bcf]
|
|
14
|
+
- Updated dependencies [efd54a9]
|
|
15
|
+
- @elementor/editor-elements@0.6.5
|
|
16
|
+
- @elementor/editor-props@0.11.1
|
|
17
|
+
- @elementor/editor-styles-repository@0.7.8
|
|
18
|
+
- @elementor/editor-styles@0.6.4
|
|
19
|
+
|
|
3
20
|
## 0.13.1
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
|
+
import * as _elementor_editor_props from '@elementor/editor-props';
|
|
2
|
+
|
|
1
3
|
type UnbrandedTransformer<TValue> = (value: TValue, options: {
|
|
2
4
|
key: string;
|
|
3
5
|
signal?: AbortSignal;
|
|
4
6
|
}) => unknown;
|
|
5
|
-
declare const brand: unique symbol;
|
|
6
7
|
type Transformer<TValue> = UnbrandedTransformer<TValue> & {
|
|
7
|
-
|
|
8
|
+
__transformer: true;
|
|
8
9
|
};
|
|
9
|
-
type TransformerName = string;
|
|
10
10
|
type AnyTransformer = Transformer<any>;
|
|
11
|
-
type TransformersMap = Record<string, AnyTransformer>;
|
|
12
11
|
|
|
13
12
|
declare const styleTransformersRegistry: {
|
|
14
|
-
register(
|
|
15
|
-
|
|
13
|
+
register(type: _elementor_editor_props.PropTypeKey, transformer: AnyTransformer): /*elided*/ any;
|
|
14
|
+
registerFallback(transformer: AnyTransformer): /*elided*/ any;
|
|
15
|
+
get(type: _elementor_editor_props.PropTypeKey): AnyTransformer | null;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
declare const settingsTransformersRegistry: {
|
|
19
|
-
register(
|
|
20
|
-
|
|
19
|
+
register(type: _elementor_editor_props.PropTypeKey, transformer: AnyTransformer): /*elided*/ any;
|
|
20
|
+
registerFallback(transformer: AnyTransformer): /*elided*/ any;
|
|
21
|
+
get(type: _elementor_editor_props.PropTypeKey): AnyTransformer | null;
|
|
21
22
|
};
|
|
22
23
|
|
|
23
24
|
export { settingsTransformersRegistry, styleTransformersRegistry };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
|
+
import * as _elementor_editor_props from '@elementor/editor-props';
|
|
2
|
+
|
|
1
3
|
type UnbrandedTransformer<TValue> = (value: TValue, options: {
|
|
2
4
|
key: string;
|
|
3
5
|
signal?: AbortSignal;
|
|
4
6
|
}) => unknown;
|
|
5
|
-
declare const brand: unique symbol;
|
|
6
7
|
type Transformer<TValue> = UnbrandedTransformer<TValue> & {
|
|
7
|
-
|
|
8
|
+
__transformer: true;
|
|
8
9
|
};
|
|
9
|
-
type TransformerName = string;
|
|
10
10
|
type AnyTransformer = Transformer<any>;
|
|
11
|
-
type TransformersMap = Record<string, AnyTransformer>;
|
|
12
11
|
|
|
13
12
|
declare const styleTransformersRegistry: {
|
|
14
|
-
register(
|
|
15
|
-
|
|
13
|
+
register(type: _elementor_editor_props.PropTypeKey, transformer: AnyTransformer): /*elided*/ any;
|
|
14
|
+
registerFallback(transformer: AnyTransformer): /*elided*/ any;
|
|
15
|
+
get(type: _elementor_editor_props.PropTypeKey): AnyTransformer | null;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
declare const settingsTransformersRegistry: {
|
|
19
|
-
register(
|
|
20
|
-
|
|
19
|
+
register(type: _elementor_editor_props.PropTypeKey, transformer: AnyTransformer): /*elided*/ any;
|
|
20
|
+
registerFallback(transformer: AnyTransformer): /*elided*/ any;
|
|
21
|
+
get(type: _elementor_editor_props.PropTypeKey): AnyTransformer | null;
|
|
21
22
|
};
|
|
22
23
|
|
|
23
24
|
export { settingsTransformersRegistry, styleTransformersRegistry };
|
package/dist/index.js
CHANGED
|
@@ -91,10 +91,7 @@ function useFloatingOnElement({ element, isSelected }) {
|
|
|
91
91
|
// Must be controlled for interactions (like hover) to work.
|
|
92
92
|
open: isOpen || isSelected,
|
|
93
93
|
onOpenChange: setIsOpen,
|
|
94
|
-
|
|
95
|
-
whileElementsMounted: (...args) => (0, import_react3.autoUpdate)(...args, { animationFrame: true }),
|
|
96
|
-
// The first element in the canvas is `display: contents` so we need to use the first child.
|
|
97
|
-
elements: { reference: element.firstElementChild },
|
|
94
|
+
whileElementsMounted: import_react3.autoUpdate,
|
|
98
95
|
middleware: [
|
|
99
96
|
// Match the floating element's size to the reference element.
|
|
100
97
|
(0, import_react3.size)({
|
|
@@ -109,6 +106,9 @@ function useFloatingOnElement({ element, isSelected }) {
|
|
|
109
106
|
(0, import_react3.offset)(({ rects }) => -rects.reference.height / 2 - rects.floating.height / 2)
|
|
110
107
|
]
|
|
111
108
|
});
|
|
109
|
+
(0, import_react2.useEffect)(() => {
|
|
110
|
+
refs.setReference(element);
|
|
111
|
+
}, [element, refs]);
|
|
112
112
|
return {
|
|
113
113
|
isVisible: isOpen || isSelected,
|
|
114
114
|
context,
|
|
@@ -127,7 +127,7 @@ var OverlayBox = (0, import_ui.styled)(import_ui.Box, { shouldForwardProp: (prop
|
|
|
127
127
|
outlineOffset: isSelected ? "-2px" : "-1px",
|
|
128
128
|
pointerEvents: "none"
|
|
129
129
|
}));
|
|
130
|
-
function ElementOverlay({ element, isSelected }) {
|
|
130
|
+
function ElementOverlay({ element, isSelected, id }) {
|
|
131
131
|
const { context, floating, isVisible } = useFloatingOnElement({ element, isSelected });
|
|
132
132
|
const { getFloatingProps, getReferenceProps } = (0, import_react4.useInteractions)([(0, import_react4.useHover)(context)]);
|
|
133
133
|
useBindReactPropsToElement(element, getReferenceProps);
|
|
@@ -137,7 +137,7 @@ function ElementOverlay({ element, isSelected }) {
|
|
|
137
137
|
ref: floating.setRef,
|
|
138
138
|
isSelected,
|
|
139
139
|
style: floating.styles,
|
|
140
|
-
"data-element-overlay":
|
|
140
|
+
"data-element-overlay": id,
|
|
141
141
|
role: "presentation",
|
|
142
142
|
...getFloatingProps()
|
|
143
143
|
}
|
|
@@ -147,31 +147,38 @@ function ElementOverlay({ element, isSelected }) {
|
|
|
147
147
|
// src/components/elements-overlays.tsx
|
|
148
148
|
function ElementsOverlays() {
|
|
149
149
|
const selected = (0, import_editor_elements.useSelectedElement)();
|
|
150
|
-
const
|
|
150
|
+
const elements = useElementsDom();
|
|
151
151
|
const currentEditMode = (0, import_editor_v1_adapters.useEditMode)();
|
|
152
152
|
const isEditMode = currentEditMode === "edit";
|
|
153
153
|
const isKitRouteActive = (0, import_editor_v1_adapters.__privateUseIsRouteActive)("panel/global");
|
|
154
154
|
const isActive = isEditMode && !isKitRouteActive;
|
|
155
|
-
return isActive &&
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
return isActive && elements.map(([id, element]) => /* @__PURE__ */ React2.createElement(ElementOverlay, { key: id, id, element, isSelected: selected.element?.id === id }));
|
|
156
|
+
}
|
|
157
|
+
var ELEMENTS_DATA_ATTR = "atomic";
|
|
158
|
+
function useElementsDom() {
|
|
159
|
+
return (0, import_editor_v1_adapters.__privateUseListenTo)(
|
|
160
|
+
[(0, import_editor_v1_adapters.windowEvent)("elementor/editor/element-rendered"), (0, import_editor_v1_adapters.windowEvent)("elementor/editor/element-destroyed")],
|
|
161
|
+
() => {
|
|
162
|
+
return (0, import_editor_elements.getElements)().filter((el) => ELEMENTS_DATA_ATTR in (el.view?.el?.dataset ?? {})).map((element) => [element.id, element.view?.getDomElement?.()?.get?.(0)]).filter((item) => !!item[1]);
|
|
161
163
|
}
|
|
162
|
-
)
|
|
164
|
+
);
|
|
163
165
|
}
|
|
164
166
|
|
|
165
167
|
// src/transformers/create-transformers-registry.ts
|
|
166
168
|
function createTransformersRegistry() {
|
|
167
169
|
const transformers = {};
|
|
170
|
+
let fallbackTransformer = null;
|
|
168
171
|
return {
|
|
169
|
-
register(
|
|
170
|
-
transformers[
|
|
172
|
+
register(type, transformer) {
|
|
173
|
+
transformers[type] = transformer;
|
|
171
174
|
return this;
|
|
172
175
|
},
|
|
173
|
-
|
|
174
|
-
|
|
176
|
+
registerFallback(transformer) {
|
|
177
|
+
fallbackTransformer = transformer;
|
|
178
|
+
return this;
|
|
179
|
+
},
|
|
180
|
+
get(type) {
|
|
181
|
+
return transformers[type] ?? fallbackTransformer;
|
|
175
182
|
}
|
|
176
183
|
};
|
|
177
184
|
}
|
|
@@ -237,7 +244,7 @@ var plainTransformer = createTransformer((value) => {
|
|
|
237
244
|
|
|
238
245
|
// src/init-settings-transformers.ts
|
|
239
246
|
function initSettingsTransformers() {
|
|
240
|
-
settingsTransformersRegistry.register("
|
|
247
|
+
settingsTransformersRegistry.register("classes", arrayTransformer).register("link", linkTransformer).register("image", imageTransformer).register("image-src", imageSrcTransformer).registerFallback(plainTransformer);
|
|
241
248
|
}
|
|
242
249
|
|
|
243
250
|
// src/style-transformers-registry.ts
|
|
@@ -279,12 +286,12 @@ var backgroundImageOverlayTransformer = createTransformer((value) => {
|
|
|
279
286
|
|
|
280
287
|
// src/transformers/styles/background-image-position-offset-transformer.ts
|
|
281
288
|
var backgroundImagePositionOffsetTransformer = createTransformer(
|
|
282
|
-
({ x
|
|
289
|
+
({ x, y }) => `${x ?? "0px"} ${y ?? "0px"}`
|
|
283
290
|
);
|
|
284
291
|
|
|
285
292
|
// src/transformers/styles/background-image-size-scale-transformer.ts
|
|
286
293
|
var backgroundImageSizeScaleTransformer = createTransformer(
|
|
287
|
-
({ width
|
|
294
|
+
({ width, height }) => `${width ?? "auto"} ${height ?? "auto"}`
|
|
288
295
|
);
|
|
289
296
|
|
|
290
297
|
// src/transformers/styles/background-transformer.ts
|
|
@@ -354,7 +361,7 @@ function initStyleTransformers() {
|
|
|
354
361
|
["block-start", "block-end", "inline-start", "inline-end"],
|
|
355
362
|
({ propKey, key }) => `${propKey}-${key}`
|
|
356
363
|
)
|
|
357
|
-
).register("
|
|
364
|
+
).register("box-shadow", createCombineArrayTransformer(",")).register("background", backgroundTransformer).register("background-overlay", createCombineArrayTransformer(",")).register("background-color-overlay", backgroundColorOverlayTransformer).register("background-image-overlay", backgroundImageOverlayTransformer).register("background-gradient-overlay", backgroundGradientOverlayTransformer).register("gradient-color-stop", createCombineArrayTransformer(",")).register("color-stop", colorStopTransformer).register("background-image-position-offset", backgroundImagePositionOffsetTransformer).register("background-image-size-scale", backgroundImageSizeScaleTransformer).register("image-src", imageSrcTransformer).register("image", imageTransformer).register(
|
|
358
365
|
"layout-direction",
|
|
359
366
|
createMultiPropsTransformer(["row", "column"], ({ propKey, key }) => `${key}-${propKey}`)
|
|
360
367
|
).register(
|
|
@@ -369,7 +376,7 @@ function initStyleTransformers() {
|
|
|
369
376
|
["start-start", "start-end", "end-start", "end-end"],
|
|
370
377
|
({ key }) => `border-${key}-radius`
|
|
371
378
|
)
|
|
372
|
-
);
|
|
379
|
+
).registerFallback(plainTransformer);
|
|
373
380
|
}
|
|
374
381
|
|
|
375
382
|
// src/init-styles-renderer.ts
|
|
@@ -388,9 +395,6 @@ function createPropsResolver({ transformers, schema: initialSchema, onPropResolv
|
|
|
388
395
|
Object.entries(schema).map(async ([key, type]) => {
|
|
389
396
|
const value = props[key] ?? type.default;
|
|
390
397
|
const transformed = await transform({ value, key, type, signal });
|
|
391
|
-
if (transformed === null) {
|
|
392
|
-
return;
|
|
393
|
-
}
|
|
394
398
|
onPropResolve?.({ key, value: transformed });
|
|
395
399
|
if (isMultiProps(transformed)) {
|
|
396
400
|
return getMultiPropsValue(transformed);
|
|
@@ -419,6 +423,9 @@ function createPropsResolver({ transformers, schema: initialSchema, onPropResolv
|
|
|
419
423
|
return null;
|
|
420
424
|
}
|
|
421
425
|
}
|
|
426
|
+
if (value.$$type !== type.key) {
|
|
427
|
+
return null;
|
|
428
|
+
}
|
|
422
429
|
let resolvedValue = value.value;
|
|
423
430
|
if (type.kind === "object") {
|
|
424
431
|
resolvedValue = await resolve({
|
|
@@ -434,7 +441,7 @@ function createPropsResolver({ transformers, schema: initialSchema, onPropResolv
|
|
|
434
441
|
)
|
|
435
442
|
);
|
|
436
443
|
}
|
|
437
|
-
const transformer = transformers
|
|
444
|
+
const transformer = transformers.get(value.$$type);
|
|
438
445
|
if (!transformer) {
|
|
439
446
|
return null;
|
|
440
447
|
}
|
|
@@ -507,6 +514,9 @@ function createStyleWrapper(value = "", wrapper) {
|
|
|
507
514
|
async function propsToCss({ props, resolve, signal }) {
|
|
508
515
|
const transformed = await resolve({ props, signal });
|
|
509
516
|
return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
|
|
517
|
+
if (propValue === null) {
|
|
518
|
+
return acc;
|
|
519
|
+
}
|
|
510
520
|
acc.push(propName + ":" + propValue + ";");
|
|
511
521
|
return acc;
|
|
512
522
|
}, []).join("");
|
|
@@ -534,7 +544,7 @@ function initStylesRenderer() {
|
|
|
534
544
|
(0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.v1ReadyEvent)(), () => {
|
|
535
545
|
let abortController = null;
|
|
536
546
|
const resolve = createPropsResolver({
|
|
537
|
-
transformers: styleTransformersRegistry
|
|
547
|
+
transformers: styleTransformersRegistry,
|
|
538
548
|
schema: (0, import_editor_styles.getStylesSchema)(),
|
|
539
549
|
onPropResolve: enqueueUsedFonts
|
|
540
550
|
});
|