@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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @elementor/editor-canvas@0.13.1 build
2
+ > @elementor/editor-canvas@0.14.0 build
3
3
  > tsup --config=../../tsup.build.ts
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -10,13 +10,13 @@
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
12
  CJS Build start
13
- ESM dist/index.mjs 29.82 KB
14
- ESM dist/index.mjs.map 62.58 KB
15
- ESM ⚡️ Build success in 181ms
16
- CJS dist/index.js 32.49 KB
17
- CJS dist/index.js.map 62.41 KB
18
- CJS ⚡️ Build success in 184ms
13
+ CJS dist/index.js 32.61 KB
14
+ CJS dist/index.js.map 63.36 KB
15
+ CJS ⚡️ Build success in 244ms
16
+ ESM dist/index.mjs 29.90 KB
17
+ ESM dist/index.mjs.map 63.58 KB
18
+ ESM ⚡️ Build success in 246ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 20884ms
21
- DTS dist/index.d.mts 751.00 B
22
- DTS dist/index.d.ts 751.00 B
20
+ DTS ⚡️ Build success in 21204ms
21
+ DTS dist/index.d.mts 972.00 B
22
+ DTS dist/index.d.ts 972.00 B
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
- [brand]: true;
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(name: TransformerName, transformer: AnyTransformer): /*elided*/ any;
15
- all(): TransformersMap;
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(name: TransformerName, transformer: AnyTransformer): /*elided*/ any;
20
- all(): TransformersMap;
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
- [brand]: true;
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(name: TransformerName, transformer: AnyTransformer): /*elided*/ any;
15
- all(): TransformersMap;
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(name: TransformerName, transformer: AnyTransformer): /*elided*/ any;
20
- all(): TransformersMap;
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
- // Add an animation frame to support scroll events (without it the floating element will stay in the same position).
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": element.dataset.id,
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 domElements = (0, import_editor_elements.useElementsDomRef)();
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 && domElements.map((el) => /* @__PURE__ */ React2.createElement(
156
- ElementOverlay,
157
- {
158
- element: el,
159
- key: el.dataset.id,
160
- isSelected: selected.element?.id === el.dataset.id
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(name, transformer) {
170
- transformers[name] = transformer;
172
+ register(type, transformer) {
173
+ transformers[type] = transformer;
171
174
  return this;
172
175
  },
173
- all() {
174
- return transformers;
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("string", plainTransformer).register("url", plainTransformer).register("number", plainTransformer).register("boolean", plainTransformer).register("classes", arrayTransformer).register("link", linkTransformer).register("image", imageTransformer).register("image-src", imageSrcTransformer).register("image-attachment-id", plainTransformer);
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 = "0px", y = "0px" }) => `${x} ${y}`
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 = "auto", height = "auto" }) => `${width} ${height}`
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("color", plainTransformer).register("number", plainTransformer).register("string", plainTransformer).register("url", plainTransformer).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-attachment-id", plainTransformer).register("image-src", imageSrcTransformer).register("image", imageTransformer).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[value.$$type];
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.all(),
547
+ transformers: styleTransformersRegistry,
538
548
  schema: (0, import_editor_styles.getStylesSchema)(),
539
549
  onPropResolve: enqueueUsedFonts
540
550
  });