@elementor/editor-components 3.35.0-464 → 3.35.0-466

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-components",
3
3
  "description": "Elementor editor components",
4
- "version": "3.35.0-464",
4
+ "version": "3.35.0-466",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -40,30 +40,30 @@
40
40
  "dev": "tsup --config=../../tsup.dev.ts"
41
41
  },
42
42
  "dependencies": {
43
- "@elementor/editor": "3.35.0-464",
44
- "@elementor/editor-canvas": "3.35.0-464",
45
- "@elementor/editor-controls": "3.35.0-464",
46
- "@elementor/editor-documents": "3.35.0-464",
47
- "@elementor/editor-editing-panel": "3.35.0-464",
48
- "@elementor/editor-elements": "3.35.0-464",
49
- "@elementor/editor-elements-panel": "3.35.0-464",
50
- "@elementor/editor-mcp": "3.35.0-464",
51
- "@elementor/editor-panels": "3.35.0-464",
52
- "@elementor/editor-props": "3.35.0-464",
53
- "@elementor/editor-styles-repository": "3.35.0-464",
54
- "@elementor/editor-ui": "3.35.0-464",
55
- "@elementor/editor-v1-adapters": "3.35.0-464",
56
- "@elementor/http-client": "3.35.0-464",
43
+ "@elementor/editor": "3.35.0-466",
44
+ "@elementor/editor-canvas": "3.35.0-466",
45
+ "@elementor/editor-controls": "3.35.0-466",
46
+ "@elementor/editor-documents": "3.35.0-466",
47
+ "@elementor/editor-editing-panel": "3.35.0-466",
48
+ "@elementor/editor-elements": "3.35.0-466",
49
+ "@elementor/editor-elements-panel": "3.35.0-466",
50
+ "@elementor/editor-mcp": "3.35.0-466",
51
+ "@elementor/editor-panels": "3.35.0-466",
52
+ "@elementor/editor-props": "3.35.0-466",
53
+ "@elementor/editor-styles-repository": "3.35.0-466",
54
+ "@elementor/editor-ui": "3.35.0-466",
55
+ "@elementor/editor-v1-adapters": "3.35.0-466",
56
+ "@elementor/http-client": "3.35.0-466",
57
57
  "@elementor/icons": "^1.63.0",
58
- "@elementor/mixpanel": "3.35.0-464",
59
- "@elementor/query": "3.35.0-464",
60
- "@elementor/schema": "3.35.0-464",
61
- "@elementor/store": "3.35.0-464",
58
+ "@elementor/mixpanel": "3.35.0-466",
59
+ "@elementor/query": "3.35.0-466",
60
+ "@elementor/schema": "3.35.0-466",
61
+ "@elementor/store": "3.35.0-466",
62
62
  "@elementor/ui": "1.36.17",
63
- "@elementor/utils": "3.35.0-464",
63
+ "@elementor/utils": "3.35.0-466",
64
64
  "@wordpress/i18n": "^5.13.0",
65
- "@elementor/editor-notifications": "3.35.0-464",
66
- "@elementor/editor-current-user": "3.35.0-464"
65
+ "@elementor/editor-notifications": "3.35.0-466",
66
+ "@elementor/editor-current-user": "3.35.0-466"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "react": "^18.3.1",
@@ -2,10 +2,10 @@ import * as React from 'react';
2
2
  import { type ComponentType } from 'react';
3
3
  import {
4
4
  ControlReplacementsProvider,
5
- createControl,
6
5
  PropKeyProvider,
7
6
  PropProvider,
8
7
  useBoundProp,
8
+ useControlReplacement,
9
9
  } from '@elementor/editor-controls';
10
10
  import { createTopLevelObjectType, getControlReplacements, useElement } from '@elementor/editor-editing-panel';
11
11
  import { type PropValue } from '@elementor/editor-props';
@@ -26,7 +26,6 @@ export function OverridablePropControl< T extends object >( {
26
26
  ...props
27
27
  }: T & { OriginalControl: ComponentType< T > } ) {
28
28
  const { elementType } = useElement();
29
- const Control = createControl( OriginalControl );
30
29
 
31
30
  const { value, bind, setValue, placeholder, ...propContext } = useBoundProp( componentOverridablePropTypeUtil );
32
31
  const componentId = useCurrentComponentId();
@@ -97,10 +96,31 @@ export function OverridablePropControl< T extends object >( {
97
96
  >
98
97
  <PropKeyProvider bind={ bind }>
99
98
  <ControlReplacementsProvider replacements={ filteredReplacements }>
100
- <Control { ...( props as T ) } />
99
+ <ControlWithReplacements OriginalControl={ OriginalControl } props={ props as T } />
101
100
  </ControlReplacementsProvider>
102
101
  </PropKeyProvider>
103
102
  </PropProvider>
104
103
  </OverridablePropProvider>
105
104
  );
106
105
  }
106
+
107
+ type ControlComponentType = ComponentType< object & { OriginalControl: ComponentType } >;
108
+
109
+ function ControlWithReplacements< T extends object >( {
110
+ OriginalControl,
111
+ props,
112
+ }: {
113
+ OriginalControl: ComponentType< T >;
114
+ props: T;
115
+ } ) {
116
+ const { ControlToRender, isReplaced } = useControlReplacement( OriginalControl as ControlComponentType );
117
+
118
+ if ( isReplaced ) {
119
+ const ReplacementControl = ControlToRender as unknown as ComponentType<
120
+ T & { OriginalControl: ComponentType< T > }
121
+ >;
122
+ return <ReplacementControl { ...props } OriginalControl={ OriginalControl } />;
123
+ }
124
+
125
+ return <OriginalControl { ...props } />;
126
+ }
@@ -1,7 +1,7 @@
1
- import { getContainer, updateElementSettings } from '@elementor/editor-elements';
2
1
  import { __dispatch as dispatch, __getState as getState } from '@elementor/store';
3
2
 
4
3
  import { type ComponentId } from '../../types';
4
+ import { revertElementOverridableSetting } from '../../utils/revert-element-overridable-setting';
5
5
  import { type Source, trackComponentEvent } from '../../utils/tracking';
6
6
  import { selectCurrentComponent, selectOverridableProps, slice } from '../store';
7
7
  import { removePropFromAllGroups } from '../utils/groups-transformers';
@@ -25,7 +25,7 @@ export function deleteOverridableProp( { componentId, propKey, source }: DeleteP
25
25
  return;
26
26
  }
27
27
 
28
- revertElementSetting( prop.elementId, prop.propKey, prop.originValue );
28
+ revertElementOverridableSetting( prop.elementId, prop.propKey, prop.originValue, propKey );
29
29
 
30
30
  const { [ propKey ]: removedProp, ...remainingProps } = overridableProps.props;
31
31
 
@@ -54,17 +54,3 @@ export function deleteOverridableProp( { componentId, propKey, source }: DeleteP
54
54
  element_type: removedProp.widgetType ?? removedProp.elType,
55
55
  } );
56
56
  }
57
-
58
- function revertElementSetting( elementId: string, settingKey: string, originValue: unknown ): void {
59
- const container = getContainer( elementId );
60
-
61
- if ( ! container ) {
62
- return;
63
- }
64
-
65
- updateElementSettings( {
66
- id: elementId,
67
- props: { [ settingKey ]: originValue ?? null },
68
- withHistory: false,
69
- } );
70
- }
@@ -0,0 +1,94 @@
1
+ import { getContainer, getElementSetting, updateElementSettings } from '@elementor/editor-elements';
2
+
3
+ import {
4
+ type ComponentInstanceOverrideProp,
5
+ componentInstanceOverridePropTypeUtil,
6
+ } from '../prop-types/component-instance-override-prop-type';
7
+ import {
8
+ componentInstanceOverridesPropTypeUtil,
9
+ type ComponentInstanceOverridesPropValue,
10
+ } from '../prop-types/component-instance-overrides-prop-type';
11
+ import {
12
+ type ComponentInstanceProp,
13
+ componentInstancePropTypeUtil,
14
+ type ComponentInstancePropValue,
15
+ } from '../prop-types/component-instance-prop-type';
16
+ import { componentOverridablePropTypeUtil } from '../prop-types/component-overridable-prop-type';
17
+ import { isComponentInstance } from './is-component-instance';
18
+
19
+ export function revertElementOverridableSetting(
20
+ elementId: string,
21
+ settingKey: string,
22
+ originValue: unknown,
23
+ overrideKey: string
24
+ ): void {
25
+ const container = getContainer( elementId );
26
+
27
+ if ( ! container ) {
28
+ return;
29
+ }
30
+
31
+ if ( isComponentInstance( container.model.toJSON() ) ) {
32
+ revertComponentInstanceSetting( elementId, overrideKey );
33
+
34
+ return;
35
+ }
36
+
37
+ updateElementSettings( {
38
+ id: elementId,
39
+ props: { [ settingKey ]: originValue ?? null },
40
+ withHistory: false,
41
+ } );
42
+ }
43
+
44
+ function revertComponentInstanceSetting( elementId: string, overrideKey: string ): void {
45
+ const setting = getElementSetting< ComponentInstanceProp >( elementId, 'component_instance' );
46
+
47
+ const componentInstance = componentInstancePropTypeUtil.extract( setting );
48
+ const overrides = componentInstanceOverridesPropTypeUtil.extract( componentInstance?.overrides );
49
+
50
+ if ( ! overrides ) {
51
+ return;
52
+ }
53
+
54
+ const updatedOverrides = getUpdatedComponentInstanceOverrides( overrides, overrideKey );
55
+
56
+ const updatedSetting = componentInstancePropTypeUtil.create( {
57
+ ...componentInstance,
58
+ overrides: componentInstanceOverridesPropTypeUtil.create( updatedOverrides ),
59
+ } as ComponentInstancePropValue );
60
+
61
+ updateElementSettings( {
62
+ id: elementId,
63
+ props: { component_instance: updatedSetting },
64
+ withHistory: false,
65
+ } );
66
+ }
67
+
68
+ function getUpdatedComponentInstanceOverrides(
69
+ overrides: NonNullable< ComponentInstanceOverridesPropValue >,
70
+ overrideKey: string
71
+ ): ComponentInstanceOverridesPropValue {
72
+ return overrides
73
+ .map( ( item ) => {
74
+ const isOverridable = componentOverridablePropTypeUtil.isValid( item );
75
+ if ( ! isOverridable ) {
76
+ // we revert only overridable values
77
+ return item;
78
+ }
79
+
80
+ const isOriginValueOverride = componentInstanceOverridePropTypeUtil.isValid( item.value.origin_value );
81
+
82
+ if ( ! isOriginValueOverride ) {
83
+ // component instances cannot have overridables with origin value that is not an override
84
+ return null;
85
+ }
86
+
87
+ if ( item.value.override_key !== overrideKey ) {
88
+ return item;
89
+ }
90
+
91
+ return item.value.origin_value as ComponentInstanceOverrideProp;
92
+ } )
93
+ .filter( ( item ): item is NonNullable< typeof item > => item !== null );
94
+ }