@elementor/editor-components 3.35.0-388 → 3.35.0-390

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.
Files changed (29) hide show
  1. package/dist/index.js +407 -173
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.mjs +381 -143
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +22 -22
  6. package/src/component-instance-transformer.ts +2 -2
  7. package/src/component-override-transformer.ts +2 -2
  8. package/src/components/component-properties-panel/component-properties-panel-content.tsx +4 -4
  9. package/src/components/control-label.tsx +15 -0
  10. package/src/components/instance-editing-panel/instance-editing-panel.tsx +27 -20
  11. package/src/components/instance-editing-panel/override-prop-control.tsx +207 -0
  12. package/src/components/instance-editing-panel/override-props-group.tsx +13 -7
  13. package/src/components/overridable-props/overridable-prop-control.tsx +23 -5
  14. package/src/components/overridable-props/overridable-prop-indicator.tsx +10 -6
  15. package/src/create-component-type.ts +4 -3
  16. package/src/hooks/regenerate-override-keys.ts +6 -4
  17. package/src/hooks/use-controls-by-widget-type.ts +40 -0
  18. package/src/prop-types/component-instance-override-prop-type.ts +0 -1
  19. package/src/prop-types/component-instance-overrides-prop-type.ts +5 -1
  20. package/src/prop-types/component-instance-prop-type.ts +2 -1
  21. package/src/store/actions/set-overridable-prop.ts +4 -1
  22. package/src/store/actions/update-overridable-prop-params.ts +58 -0
  23. package/src/store/actions/update-overridable-prop.ts +30 -38
  24. package/src/store/store.ts +8 -0
  25. package/src/sync/create-components-before-save.ts +9 -5
  26. package/src/types.ts +3 -20
  27. package/src/utils/get-component-ids.ts +11 -6
  28. package/src/utils/get-prop-type-for-component-override.ts +23 -0
  29. package/src/store/actions/update-overridable-prop-origin-value.ts +0 -37
package/dist/index.js CHANGED
@@ -38,12 +38,12 @@ module.exports = __toCommonJS(index_exports);
38
38
  var import_editor = require("@elementor/editor");
39
39
  var import_editor_canvas8 = require("@elementor/editor-canvas");
40
40
  var import_editor_documents12 = require("@elementor/editor-documents");
41
- var import_editor_editing_panel6 = require("@elementor/editor-editing-panel");
41
+ var import_editor_editing_panel8 = require("@elementor/editor-editing-panel");
42
42
  var import_editor_elements_panel = require("@elementor/editor-elements-panel");
43
43
  var import_editor_panels4 = require("@elementor/editor-panels");
44
44
  var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
45
45
  var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
46
- var import_store64 = require("@elementor/store");
46
+ var import_store63 = require("@elementor/store");
47
47
  var import_i18n24 = require("@wordpress/i18n");
48
48
 
49
49
  // src/component-instance-transformer.ts
@@ -195,6 +195,9 @@ var getCreatedThisSession = (state) => state[SLICE_NAME].createdThisSession;
195
195
  var getPath = (state) => state[SLICE_NAME].path;
196
196
  var getCurrentComponentId = (state) => state[SLICE_NAME].currentComponentId;
197
197
  var selectComponent = (state, componentId) => state[SLICE_NAME].data.find((component) => component.id === componentId);
198
+ var useComponent = (componentId) => {
199
+ return (0, import_store2.__useSelector)((state) => componentId ? selectComponent(state, componentId) : null);
200
+ };
198
201
  var selectComponents = (0, import_store2.__createSelector)(
199
202
  selectData,
200
203
  selectUnpublishedData,
@@ -235,6 +238,11 @@ var selectOverridableProps = (0, import_store2.__createSelector)(
235
238
  return component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;
236
239
  }
237
240
  );
241
+ var useOverridableProps = (componentId) => {
242
+ return (0, import_store2.__useSelector)(
243
+ (state) => componentId ? selectOverridableProps(state, componentId) : null
244
+ );
245
+ };
238
246
  var selectIsOverridablePropsLoaded = (0, import_store2.__createSelector)(
239
247
  selectComponent,
240
248
  (component) => {
@@ -692,11 +700,11 @@ function reorderOverridableGroups({ componentId, newOrder }) {
692
700
  );
693
701
  }
694
702
 
695
- // src/store/actions/update-overridable-prop.ts
703
+ // src/store/actions/update-overridable-prop-params.ts
696
704
  var import_store17 = require("@elementor/store");
697
- function updateOverridableProp({
705
+ function updateOverridablePropParams({
698
706
  componentId,
699
- propKey,
707
+ overrideKey,
700
708
  label,
701
709
  groupId
702
710
  }) {
@@ -704,7 +712,7 @@ function updateOverridableProp({
704
712
  if (!overridableProps) {
705
713
  return;
706
714
  }
707
- const prop = overridableProps.props[propKey];
715
+ const prop = overridableProps.props[overrideKey];
708
716
  if (!prop) {
709
717
  return;
710
718
  }
@@ -715,7 +723,7 @@ function updateOverridableProp({
715
723
  label,
716
724
  groupId: newGroupId
717
725
  };
718
- const updatedGroups = movePropBetweenGroups(overridableProps.groups, propKey, oldGroupId, newGroupId);
726
+ const updatedGroups = movePropBetweenGroups(overridableProps.groups, overrideKey, oldGroupId, newGroupId);
719
727
  (0, import_store17.__dispatch)(
720
728
  slice.actions.setOverridableProps({
721
729
  componentId,
@@ -723,7 +731,7 @@ function updateOverridableProp({
723
731
  ...overridableProps,
724
732
  props: {
725
733
  ...overridableProps.props,
726
- [propKey]: updatedProp
734
+ [overrideKey]: updatedProp
727
735
  },
728
736
  groups: updatedGroups
729
737
  }
@@ -734,7 +742,7 @@ function updateOverridableProp({
734
742
 
735
743
  // src/components/component-panel-header/use-overridable-props.ts
736
744
  var import_store19 = require("@elementor/store");
737
- function useOverridableProps(componentId) {
745
+ function useOverridableProps2(componentId) {
738
746
  return (0, import_store19.__useSelector)((state) => {
739
747
  if (!componentId) {
740
748
  return void 0;
@@ -1253,7 +1261,7 @@ function validateGroupLabel(label, existingGroups) {
1253
1261
  function useCurrentEditableItem() {
1254
1262
  const [editingGroupId, setEditingGroupId] = (0, import_react4.useState)(null);
1255
1263
  const currentComponentId = useCurrentComponentId();
1256
- const overridableProps = useOverridableProps(currentComponentId);
1264
+ const overridableProps = useOverridableProps2(currentComponentId);
1257
1265
  const allGroupsRecord = overridableProps?.groups?.items ?? {};
1258
1266
  const currentGroup = editingGroupId ? allGroupsRecord[editingGroupId] : null;
1259
1267
  const validateLabel = (newLabel) => {
@@ -1316,7 +1324,7 @@ function generateUniqueLabel(groups) {
1316
1324
  // src/components/component-properties-panel/component-properties-panel-content.tsx
1317
1325
  function ComponentPropertiesPanelContent({ onClose }) {
1318
1326
  const currentComponentId = useCurrentComponentId();
1319
- const overridableProps = useOverridableProps(currentComponentId);
1327
+ const overridableProps = useOverridableProps2(currentComponentId);
1320
1328
  const [isAddingGroup, setIsAddingGroup] = (0, import_react5.useState)(false);
1321
1329
  const introductionRef = (0, import_react5.useRef)(null);
1322
1330
  const groupLabelEditable = useCurrentEditableItem();
@@ -1359,10 +1367,10 @@ function ComponentPropertiesPanelContent({ onClose }) {
1359
1367
  deleteOverridableProp({ componentId: currentComponentId, propKey });
1360
1368
  (0, import_editor_documents4.setDocumentModifiedStatus)(true);
1361
1369
  };
1362
- const handlePropertyUpdate = (propKey, data) => {
1363
- updateOverridableProp({
1370
+ const handlePropertyUpdate = (overrideKey, data) => {
1371
+ updateOverridablePropParams({
1364
1372
  componentId: currentComponentId,
1365
- propKey,
1373
+ overrideKey,
1366
1374
  label: data.label,
1367
1375
  groupId: data.group
1368
1376
  });
@@ -1500,7 +1508,7 @@ var slideUp = import_ui9.keyframes`
1500
1508
  var MESSAGE_KEY = "components-properties-introduction";
1501
1509
  var ComponentPanelHeader = () => {
1502
1510
  const currentComponentId = useCurrentComponentId();
1503
- const overridableProps = useOverridableProps(currentComponentId);
1511
+ const overridableProps = useOverridableProps2(currentComponentId);
1504
1512
  const onBack = useNavigateBack();
1505
1513
  const componentName = getComponentName();
1506
1514
  const [isMessageSuppressed, suppressMessage] = (0, import_editor_current_user.useSuppressedMessage)(MESSAGE_KEY);
@@ -1838,6 +1846,9 @@ var getComponentIds = async (elements) => {
1838
1846
  const isComponent = isComponentInstance({ widgetType, elType });
1839
1847
  if (isComponent) {
1840
1848
  const componentId = settings?.component_instance?.value?.component_id.value;
1849
+ if (!componentId) {
1850
+ return;
1851
+ }
1841
1852
  const document = await getComponentDocumentData(componentId);
1842
1853
  childElements = document?.elements;
1843
1854
  if (Boolean(componentId)) {
@@ -1845,12 +1856,13 @@ var getComponentIds = async (elements) => {
1845
1856
  }
1846
1857
  }
1847
1858
  if (!!childElements?.length) {
1848
- ids.push(...await getComponentIds(childElements));
1859
+ const newIds = await getComponentIds(childElements);
1860
+ ids.push(...Array.from(new Set(newIds)));
1849
1861
  }
1850
1862
  return ids;
1851
1863
  });
1852
1864
  const result = (await Promise.all(components)).flat();
1853
- return Array.from(new Set(result));
1865
+ return Array.from(new Set(result)).filter((value) => value !== void 0);
1854
1866
  };
1855
1867
 
1856
1868
  // src/store/actions/load-components-overridable-props.ts
@@ -2807,22 +2819,26 @@ var EditModeDialog = ({ lockedBy }) => {
2807
2819
  };
2808
2820
 
2809
2821
  // src/components/instance-editing-panel/instance-editing-panel.tsx
2810
- var React23 = __toESM(require("react"));
2811
- var import_editor_editing_panel3 = require("@elementor/editor-editing-panel");
2812
- var import_editor_elements8 = require("@elementor/editor-elements");
2822
+ var React25 = __toESM(require("react"));
2823
+ var import_editor_controls4 = require("@elementor/editor-controls");
2824
+ var import_editor_editing_panel5 = require("@elementor/editor-editing-panel");
2825
+ var import_editor_elements11 = require("@elementor/editor-elements");
2813
2826
  var import_editor_panels3 = require("@elementor/editor-panels");
2814
2827
  var import_icons14 = require("@elementor/icons");
2815
- var import_store42 = require("@elementor/store");
2816
- var import_ui19 = require("@elementor/ui");
2828
+ var import_ui21 = require("@elementor/ui");
2817
2829
  var import_i18n21 = require("@wordpress/i18n");
2818
2830
 
2831
+ // src/hooks/use-component-instance-settings.ts
2832
+ var import_editor_editing_panel2 = require("@elementor/editor-editing-panel");
2833
+ var import_editor_elements8 = require("@elementor/editor-elements");
2834
+
2819
2835
  // src/prop-types/component-instance-prop-type.ts
2820
- var import_editor_props3 = require("@elementor/editor-props");
2821
- var import_schema4 = require("@elementor/schema");
2836
+ var import_editor_props4 = require("@elementor/editor-props");
2837
+ var import_schema5 = require("@elementor/schema");
2822
2838
 
2823
2839
  // src/prop-types/component-instance-overrides-prop-type.ts
2824
- var import_editor_props2 = require("@elementor/editor-props");
2825
- var import_schema3 = require("@elementor/schema");
2840
+ var import_editor_props3 = require("@elementor/editor-props");
2841
+ var import_schema4 = require("@elementor/schema");
2826
2842
 
2827
2843
  // src/prop-types/component-instance-override-prop-type.ts
2828
2844
  var import_editor_props = require("@elementor/editor-props");
@@ -2839,21 +2855,42 @@ var componentInstanceOverridePropTypeUtil = (0, import_editor_props.createPropUt
2839
2855
  })
2840
2856
  );
2841
2857
 
2858
+ // src/prop-types/component-overridable-prop-type.ts
2859
+ var import_editor_props2 = require("@elementor/editor-props");
2860
+ var import_schema3 = require("@elementor/schema");
2861
+ var componentOverridablePropTypeUtil = (0, import_editor_props2.createPropUtils)(
2862
+ "overridable",
2863
+ import_schema3.z.object({
2864
+ override_key: import_schema3.z.string(),
2865
+ origin_value: import_schema3.z.object({
2866
+ $$type: import_schema3.z.string(),
2867
+ value: import_schema3.z.unknown()
2868
+ }).nullable()
2869
+ })
2870
+ );
2871
+
2842
2872
  // src/prop-types/component-instance-overrides-prop-type.ts
2843
- var componentInstanceOverridesPropTypeUtil = (0, import_editor_props2.createPropUtils)(
2873
+ var componentInstanceOverridesPropTypeUtil = (0, import_editor_props3.createPropUtils)(
2844
2874
  "overrides",
2845
- import_schema3.z.array(componentInstanceOverridePropTypeUtil.schema).optional().default([])
2875
+ import_schema4.z.array(import_schema4.z.union([componentInstanceOverridePropTypeUtil.schema, componentOverridablePropTypeUtil.schema])).optional().default([])
2846
2876
  );
2847
2877
 
2848
2878
  // src/prop-types/component-instance-prop-type.ts
2849
- var componentInstancePropTypeUtil = (0, import_editor_props3.createPropUtils)(
2879
+ var componentInstancePropTypeUtil = (0, import_editor_props4.createPropUtils)(
2850
2880
  "component-instance",
2851
- import_schema4.z.object({
2852
- component_id: import_editor_props3.numberPropTypeUtil.schema,
2853
- overrides: import_schema4.z.optional(componentInstanceOverridesPropTypeUtil.schema)
2881
+ import_schema5.z.object({
2882
+ component_id: import_editor_props4.numberPropTypeUtil.schema,
2883
+ overrides: import_schema5.z.optional(componentInstanceOverridesPropTypeUtil.schema)
2854
2884
  })
2855
2885
  );
2856
2886
 
2887
+ // src/hooks/use-component-instance-settings.ts
2888
+ function useComponentInstanceSettings() {
2889
+ const { element } = (0, import_editor_editing_panel2.useElement)();
2890
+ const settings = (0, import_editor_elements8.useElementSetting)(element.id, "component_instance");
2891
+ return componentInstancePropTypeUtil.extract(settings);
2892
+ }
2893
+
2857
2894
  // src/components/instance-editing-panel/empty-state.tsx
2858
2895
  var React21 = __toESM(require("react"));
2859
2896
  var import_icons13 = require("@elementor/icons");
@@ -2881,13 +2918,228 @@ var EmptyState2 = ({ onEditComponent }) => {
2881
2918
  };
2882
2919
 
2883
2920
  // src/components/instance-editing-panel/override-props-group.tsx
2884
- var React22 = __toESM(require("react"));
2921
+ var React24 = __toESM(require("react"));
2885
2922
  var import_react13 = require("react");
2886
- var import_editor_editing_panel2 = require("@elementor/editor-editing-panel");
2923
+ var import_editor_editing_panel4 = require("@elementor/editor-editing-panel");
2887
2924
  var import_editor_ui10 = require("@elementor/editor-ui");
2925
+ var import_ui20 = require("@elementor/ui");
2926
+
2927
+ // src/components/instance-editing-panel/override-prop-control.tsx
2928
+ var React23 = __toESM(require("react"));
2929
+ var import_editor_controls3 = require("@elementor/editor-controls");
2930
+ var import_editor_editing_panel3 = require("@elementor/editor-editing-panel");
2931
+ var import_ui19 = require("@elementor/ui");
2932
+
2933
+ // src/hooks/use-controls-by-widget-type.ts
2934
+ var import_editor_elements9 = require("@elementor/editor-elements");
2935
+ function useControlsByWidgetType(type) {
2936
+ const elementType = (0, import_editor_elements9.getElementType)(type);
2937
+ if (!elementType) {
2938
+ return {};
2939
+ }
2940
+ const controls = iterateControls(elementType.controls);
2941
+ return getControlsByBind(controls);
2942
+ }
2943
+ function iterateControls(controls) {
2944
+ return controls.map((control) => {
2945
+ if (control.type === "control" && "bind" in control.value) {
2946
+ return control;
2947
+ }
2948
+ if (control.type === "section") {
2949
+ return iterateControls(control.value.items);
2950
+ }
2951
+ return null;
2952
+ }).filter(Boolean).flat();
2953
+ }
2954
+ function getControlsByBind(controls) {
2955
+ return controls.reduce(
2956
+ (controlsByBind, control) => ({
2957
+ ...controlsByBind,
2958
+ [control.value.bind]: control
2959
+ }),
2960
+ {}
2961
+ );
2962
+ }
2963
+
2964
+ // src/store/actions/update-overridable-prop.ts
2965
+ var import_store42 = require("@elementor/store");
2966
+ function updateOverridableProp(componentId, propValue, originPropFields) {
2967
+ const overridableProps = selectOverridableProps((0, import_store42.__getState)(), componentId);
2968
+ if (!overridableProps) {
2969
+ return;
2970
+ }
2971
+ const existingOverridableProp = overridableProps.props[propValue.override_key];
2972
+ if (!existingOverridableProp) {
2973
+ return;
2974
+ }
2975
+ const newOverridableProp = originPropFields ? {
2976
+ originValue: propValue.origin_value,
2977
+ originPropFields
2978
+ } : {
2979
+ originValue: propValue.origin_value
2980
+ };
2981
+ const newOverridableProps = {
2982
+ ...overridableProps,
2983
+ props: {
2984
+ ...overridableProps.props,
2985
+ [existingOverridableProp.overrideKey]: {
2986
+ ...existingOverridableProp,
2987
+ ...newOverridableProp
2988
+ }
2989
+ }
2990
+ };
2991
+ (0, import_store42.__dispatch)(
2992
+ slice.actions.setOverridableProps({
2993
+ componentId,
2994
+ overridableProps: newOverridableProps
2995
+ })
2996
+ );
2997
+ }
2998
+
2999
+ // src/utils/get-prop-type-for-component-override.ts
3000
+ var import_editor_elements10 = require("@elementor/editor-elements");
3001
+ var getPropTypeForComponentOverride = (overridableProp) => {
3002
+ if (overridableProp.originPropFields) {
3003
+ return getPropType(overridableProp.originPropFields);
3004
+ }
3005
+ const { elType, widgetType, propKey } = overridableProp;
3006
+ return getPropType({
3007
+ elType,
3008
+ widgetType,
3009
+ propKey
3010
+ });
3011
+ };
3012
+ function getPropType({ widgetType, propKey }) {
3013
+ const widgetPropsSchema = (0, import_editor_elements10.getWidgetsCache)()?.[widgetType]?.atomic_props_schema;
3014
+ return widgetPropsSchema?.[propKey];
3015
+ }
3016
+
3017
+ // src/components/control-label.tsx
3018
+ var React22 = __toESM(require("react"));
3019
+ var import_editor_controls2 = require("@elementor/editor-controls");
2888
3020
  var import_ui18 = require("@elementor/ui");
2889
- function OverridePropsGroup({ group, props }) {
2890
- const [isOpen, setIsOpen] = (0, import_editor_editing_panel2.useStateByElement)(group.id, true);
3021
+ var ControlLabel = ({ children, ...props }) => {
3022
+ return /* @__PURE__ */ React22.createElement(import_ui18.Stack, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React22.createElement(import_editor_controls2.ControlFormLabel, { ...props }, children), /* @__PURE__ */ React22.createElement(import_editor_controls2.ControlAdornments, null));
3023
+ };
3024
+
3025
+ // src/components/instance-editing-panel/override-prop-control.tsx
3026
+ function OverridePropControl({ overridableProp, overrides }) {
3027
+ return /* @__PURE__ */ React23.createElement(import_editor_editing_panel3.SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React23.createElement(OverrideControl, { overridableProp, overrides }));
3028
+ }
3029
+ function OverrideControl({ overridableProp, overrides }) {
3030
+ const componentId = useCurrentComponentId();
3031
+ const { value: instanceValue, setValue: setInstanceValue } = (0, import_editor_controls3.useBoundProp)(componentInstancePropTypeUtil);
3032
+ const controls = useControlsByWidgetType(
3033
+ overridableProp?.originPropFields?.widgetType ?? overridableProp.widgetType
3034
+ );
3035
+ const propType = getPropTypeForComponentOverride(overridableProp);
3036
+ if (!propType) {
3037
+ return null;
3038
+ }
3039
+ const propTypeSchema = (0, import_editor_editing_panel3.createTopLevelObjectType)({
3040
+ schema: {
3041
+ [overridableProp.overrideKey]: propType
3042
+ }
3043
+ });
3044
+ const componentInstanceId = instanceValue.component_id?.value;
3045
+ if (!componentInstanceId) {
3046
+ throw new Error("Component ID is required");
3047
+ }
3048
+ const matchingOverride = getMatchingOverride(overrides, overridableProp.overrideKey);
3049
+ const propValue = matchingOverride ? getPropValue(matchingOverride) : overridableProp.originValue;
3050
+ const value = {
3051
+ [overridableProp.overrideKey]: propValue
3052
+ };
3053
+ const setValue = (newValue) => {
3054
+ const newPropValue = newValue[overridableProp.overrideKey];
3055
+ const newOverrideValue = createOverrideValue(overridableProp.overrideKey, newPropValue, componentInstanceId);
3056
+ let newOverrides = overrides?.map((override) => override === matchingOverride ? newOverrideValue : override) ?? [];
3057
+ if (!matchingOverride) {
3058
+ newOverrides = [...newOverrides, newOverrideValue];
3059
+ }
3060
+ setInstanceValue({
3061
+ ...instanceValue,
3062
+ overrides: componentInstanceOverridesPropTypeUtil.create(newOverrides)
3063
+ });
3064
+ const overridableValue = componentOverridablePropTypeUtil.extract(newOverrideValue);
3065
+ if (overridableValue && componentId) {
3066
+ if (overridableProp.originPropFields) {
3067
+ updateOverridableProp(componentId, overridableValue, overridableProp.originPropFields);
3068
+ return;
3069
+ }
3070
+ const { elType, widgetType, propKey } = overridableProp;
3071
+ updateOverridableProp(componentId, overridableValue, { elType, widgetType, propKey });
3072
+ }
3073
+ };
3074
+ return /* @__PURE__ */ React23.createElement(
3075
+ import_editor_controls3.PropProvider,
3076
+ {
3077
+ propType: propTypeSchema,
3078
+ value,
3079
+ setValue,
3080
+ isDisabled: () => {
3081
+ return false;
3082
+ }
3083
+ },
3084
+ /* @__PURE__ */ React23.createElement(import_editor_controls3.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React23.createElement(import_ui19.Stack, { direction: "column", gap: 1, mb: 1.5 }, /* @__PURE__ */ React23.createElement(ControlLabel, null, overridableProp.label), getControl(controls, overridableProp?.originPropFields ?? overridableProp)))
3085
+ );
3086
+ }
3087
+ function getPropValue(value) {
3088
+ const overridableValue = componentOverridablePropTypeUtil.extract(value);
3089
+ if (overridableValue) {
3090
+ return value;
3091
+ }
3092
+ if (componentInstanceOverridePropTypeUtil.isValid(value)) {
3093
+ return value.value.override_value;
3094
+ }
3095
+ return null;
3096
+ }
3097
+ function getMatchingOverride(overrides, overrideKey) {
3098
+ return overrides?.find((override) => {
3099
+ const overridableValue = componentOverridablePropTypeUtil.extract(override);
3100
+ let comparedOverrideKey = null;
3101
+ if (overridableValue) {
3102
+ comparedOverrideKey = overridableValue.origin_value?.value?.override_key;
3103
+ } else {
3104
+ comparedOverrideKey = override.value.override_key;
3105
+ }
3106
+ return comparedOverrideKey === overrideKey;
3107
+ }) ?? null;
3108
+ }
3109
+ function createOverrideValue(overrideKey, overrideValue, componentId) {
3110
+ const overridableValue = componentOverridablePropTypeUtil.extract(overrideValue);
3111
+ if (overridableValue) {
3112
+ const innerOverride = componentInstanceOverridePropTypeUtil.create({
3113
+ override_key: overrideKey,
3114
+ override_value: overridableValue.origin_value,
3115
+ schema_source: {
3116
+ type: "component",
3117
+ id: componentId
3118
+ }
3119
+ });
3120
+ return componentOverridablePropTypeUtil.create({
3121
+ override_key: overridableValue.override_key,
3122
+ origin_value: innerOverride
3123
+ });
3124
+ }
3125
+ return componentInstanceOverridePropTypeUtil.create({
3126
+ override_key: overrideKey,
3127
+ override_value: overrideValue,
3128
+ schema_source: {
3129
+ type: "component",
3130
+ id: componentId
3131
+ }
3132
+ });
3133
+ }
3134
+ function getControl(controls, originPropFields) {
3135
+ const ControlComponent = import_editor_editing_panel3.controlsRegistry.get(controls[originPropFields.propKey].value.type);
3136
+ const controlProps = controls[originPropFields.propKey].value.props;
3137
+ return /* @__PURE__ */ React23.createElement(ControlComponent, { ...controlProps });
3138
+ }
3139
+
3140
+ // src/components/instance-editing-panel/override-props-group.tsx
3141
+ function OverridePropsGroup({ group, props, overrides }) {
3142
+ const [isOpen, setIsOpen] = (0, import_editor_editing_panel4.useStateByElement)(group.id, true);
2891
3143
  const handleClick = () => {
2892
3144
  setIsOpen(!isOpen);
2893
3145
  };
@@ -2895,8 +3147,8 @@ function OverridePropsGroup({ group, props }) {
2895
3147
  const labelId = `label-${id2}`;
2896
3148
  const contentId = `content-${id2}`;
2897
3149
  const title = group.label;
2898
- return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(
2899
- import_ui18.ListItemButton,
3150
+ return /* @__PURE__ */ React24.createElement(import_ui20.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ React24.createElement(
3151
+ import_ui20.ListItemButton,
2900
3152
  {
2901
3153
  id: labelId,
2902
3154
  "aria-controls": contentId,
@@ -2905,29 +3157,33 @@ function OverridePropsGroup({ group, props }) {
2905
3157
  p: 0,
2906
3158
  sx: { "&:hover": { backgroundColor: "transparent" } }
2907
3159
  },
2908
- /* @__PURE__ */ React22.createElement(import_ui18.Stack, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React22.createElement(
2909
- import_ui18.ListItemText,
3160
+ /* @__PURE__ */ React24.createElement(import_ui20.Stack, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React24.createElement(
3161
+ import_ui20.ListItemText,
2910
3162
  {
2911
3163
  secondary: title,
2912
3164
  secondaryTypographyProps: { color: "text.primary", variant: "caption", fontWeight: "bold" },
2913
3165
  sx: { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 }
2914
3166
  }
2915
3167
  )),
2916
- /* @__PURE__ */ React22.createElement(import_editor_ui10.CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
2917
- ), /* @__PURE__ */ React22.createElement(import_ui18.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React22.createElement(import_ui18.Stack, { direction: "column", gap: 1, p: 2 }, group.props.map((propId) => (
2918
- // TODO: Render actual controls
2919
- /* @__PURE__ */ React22.createElement("pre", { key: propId }, JSON.stringify(props[propId], null, 2))
3168
+ /* @__PURE__ */ React24.createElement(import_editor_ui10.CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
3169
+ ), /* @__PURE__ */ React24.createElement(import_ui20.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React24.createElement(import_ui20.Stack, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React24.createElement(
3170
+ OverridePropControl,
3171
+ {
3172
+ key: overrideKey,
3173
+ overridableProp: props[overrideKey],
3174
+ overrides
3175
+ }
2920
3176
  )))));
2921
3177
  }
2922
3178
 
2923
3179
  // src/components/instance-editing-panel/instance-editing-panel.tsx
2924
3180
  function InstanceEditingPanel() {
2925
- const { element } = (0, import_editor_editing_panel3.useElement)();
2926
- const settings = (0, import_editor_elements8.useElementSetting)(element.id, "component_instance");
2927
- const componentId = componentInstancePropTypeUtil.extract(settings)?.component_id?.value;
2928
- const component = componentId ? selectComponent((0, import_store42.__getState)(), componentId) : null;
2929
- const overridableProps = componentId ? selectOverridableProps((0, import_store42.__getState)(), componentId) : null;
2930
- const componentInstanceId = (0, import_editor_elements8.useSelectedElement)()?.element?.id ?? null;
3181
+ const settings = useComponentInstanceSettings();
3182
+ const componentId = settings?.component_id?.value;
3183
+ const overrides = settings?.overrides?.value;
3184
+ const component = useComponent(componentId ?? null);
3185
+ const overridableProps = useOverridableProps(componentId ?? null);
3186
+ const componentInstanceId = (0, import_editor_elements11.useSelectedElement)()?.element?.id ?? null;
2931
3187
  if (!componentId || !overridableProps || !component) {
2932
3188
  return null;
2933
3189
  }
@@ -2937,114 +3193,84 @@ function InstanceEditingPanel() {
2937
3193
  (groupId) => overridableProps.groups.items[groupId] ? overridableProps.groups.items[groupId] : null
2938
3194
  ).filter(Boolean);
2939
3195
  const isEmpty = groups.length === 0 || Object.keys(overridableProps.props).length === 0;
2940
- return /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement(import_editor_panels3.PanelHeader, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React23.createElement(import_ui19.Stack, { direction: "row", alignContent: "space-between", flexGrow: 1 }, /* @__PURE__ */ React23.createElement(import_ui19.Stack, { direction: "row", alignItems: "center", justifyContent: "start", gap: 1, flexGrow: 1 }, /* @__PURE__ */ React23.createElement(import_icons14.ComponentsIcon, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React23.createElement(import_editor_panels3.PanelHeaderTitle, null, component.name)), /* @__PURE__ */ React23.createElement(import_ui19.Tooltip, { title: panelTitle }, /* @__PURE__ */ React23.createElement(import_ui19.IconButton, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React23.createElement(import_icons14.PencilIcon, { fontSize: "tiny" }))))), /* @__PURE__ */ React23.createElement(import_editor_panels3.PanelBody, null, isEmpty ? /* @__PURE__ */ React23.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React23.createElement(import_ui19.Stack, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React23.createElement(OverridePropsGroup, { key: group.id, group, props: overridableProps.props })))));
3196
+ return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(import_editor_panels3.PanelHeader, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React25.createElement(import_ui21.Stack, { direction: "row", alignContent: "space-between", flexGrow: 1 }, /* @__PURE__ */ React25.createElement(import_ui21.Stack, { direction: "row", alignItems: "center", justifyContent: "start", gap: 1, flexGrow: 1 }, /* @__PURE__ */ React25.createElement(import_icons14.ComponentsIcon, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React25.createElement(import_editor_panels3.PanelHeaderTitle, null, component.name)), /* @__PURE__ */ React25.createElement(import_ui21.Tooltip, { title: panelTitle }, /* @__PURE__ */ React25.createElement(import_ui21.IconButton, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React25.createElement(import_icons14.PencilIcon, { fontSize: "tiny" }))))), /* @__PURE__ */ React25.createElement(import_editor_panels3.PanelBody, null, /* @__PURE__ */ React25.createElement(import_editor_controls4.ControlAdornmentsProvider, { items: (0, import_editor_editing_panel5.getFieldIndicators)("settings") }, isEmpty ? /* @__PURE__ */ React25.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React25.createElement(import_ui21.Stack, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React25.createElement(
3197
+ OverridePropsGroup,
3198
+ {
3199
+ key: group.id,
3200
+ group,
3201
+ props: overridableProps.props,
3202
+ overrides
3203
+ }
3204
+ ))))));
2941
3205
  }
2942
3206
 
2943
3207
  // src/components/overridable-props/overridable-prop-control.tsx
2944
- var React25 = __toESM(require("react"));
2945
- var import_editor_controls2 = require("@elementor/editor-controls");
2946
- var import_editor_editing_panel4 = require("@elementor/editor-editing-panel");
2947
-
2948
- // src/prop-types/component-overridable-prop-type.ts
2949
- var import_editor_props4 = require("@elementor/editor-props");
2950
- var import_schema5 = require("@elementor/schema");
2951
- var componentOverridablePropTypeUtil = (0, import_editor_props4.createPropUtils)(
2952
- "overridable",
2953
- import_schema5.z.object({
2954
- override_key: import_schema5.z.string(),
2955
- origin_value: import_schema5.z.object({
2956
- $$type: import_schema5.z.string(),
2957
- value: import_schema5.z.unknown()
2958
- }).nullable()
2959
- })
2960
- );
3208
+ var React27 = __toESM(require("react"));
3209
+ var import_editor_controls5 = require("@elementor/editor-controls");
3210
+ var import_editor_editing_panel6 = require("@elementor/editor-editing-panel");
2961
3211
 
2962
3212
  // src/provider/overridable-prop-context.tsx
2963
- var React24 = __toESM(require("react"));
3213
+ var React26 = __toESM(require("react"));
2964
3214
  var import_react14 = require("react");
2965
3215
  var OverridablePropContext = (0, import_react14.createContext)(null);
2966
3216
  function OverridablePropProvider({ children, ...props }) {
2967
- return /* @__PURE__ */ React24.createElement(OverridablePropContext.Provider, { value: props }, children);
3217
+ return /* @__PURE__ */ React26.createElement(OverridablePropContext.Provider, { value: props }, children);
2968
3218
  }
2969
3219
  var useOverridablePropValue = () => (0, import_react14.useContext)(OverridablePropContext)?.value;
2970
3220
 
2971
- // src/store/actions/update-overridable-prop-origin-value.ts
2972
- var import_store44 = require("@elementor/store");
2973
- function updateOverridablePropOriginValue(componentId, propValue) {
2974
- const overridableProps = selectOverridableProps((0, import_store44.__getState)(), componentId);
2975
- if (!overridableProps) {
2976
- return;
2977
- }
2978
- const existingOverridableProp = overridableProps.props[propValue.override_key];
2979
- if (!existingOverridableProp) {
2980
- return;
2981
- }
2982
- const newOverridableProps = {
2983
- ...overridableProps,
2984
- props: {
2985
- ...overridableProps.props,
2986
- [existingOverridableProp.overrideKey]: {
2987
- ...existingOverridableProp,
2988
- originValue: propValue.origin_value
2989
- }
2990
- }
2991
- };
2992
- (0, import_store44.__dispatch)(
2993
- slice.actions.setOverridableProps({
2994
- componentId,
2995
- overridableProps: newOverridableProps
2996
- })
2997
- );
2998
- }
2999
-
3000
3221
  // src/components/overridable-props/overridable-prop-control.tsx
3001
3222
  function OverridablePropControl({
3002
3223
  OriginalControl,
3003
3224
  ...props
3004
3225
  }) {
3005
- const { elementType } = (0, import_editor_editing_panel4.useElement)();
3006
- const { value, bind, setValue, placeholder, ...propContext } = (0, import_editor_controls2.useBoundProp)(componentOverridablePropTypeUtil);
3226
+ const { elementType } = (0, import_editor_editing_panel6.useElement)();
3227
+ const { value, bind, setValue, placeholder, ...propContext } = (0, import_editor_controls5.useBoundProp)(componentOverridablePropTypeUtil);
3007
3228
  const componentId = useCurrentComponentId();
3229
+ const overridableProps = useOverridableProps(componentId);
3008
3230
  if (!componentId) {
3009
3231
  return null;
3010
3232
  }
3011
3233
  if (!value?.override_key) {
3012
3234
  throw new Error("Override key is required");
3013
3235
  }
3236
+ const isComponentInstance2 = elementType.key === "e-component";
3014
3237
  const setOverridableValue = (newValue) => {
3015
- const propValue = {
3238
+ const propValue2 = {
3016
3239
  ...value,
3017
3240
  origin_value: newValue[bind]
3018
3241
  };
3019
- setValue(propValue);
3020
- updateOverridablePropOriginValue(componentId, propValue);
3242
+ setValue(propValue2);
3243
+ updateOverridableProp(componentId, propValue2);
3021
3244
  };
3022
- const propType = (0, import_editor_editing_panel4.createTopLevelObjectType)({
3245
+ const defaultPropType = elementType.propsSchema[bind];
3246
+ const propType = (0, import_editor_editing_panel6.createTopLevelObjectType)({
3023
3247
  schema: {
3024
- [bind]: elementType.propsSchema[bind]
3248
+ [bind]: isComponentInstance2 && overridableProps ? getPropTypeForComponentOverride(overridableProps.props[value.override_key]) ?? defaultPropType : defaultPropType
3025
3249
  }
3026
3250
  });
3251
+ const propValue = isComponentInstance2 ? (value.origin_value?.value).override_value : value.origin_value;
3027
3252
  const objectPlaceholder = placeholder ? { [bind]: placeholder } : void 0;
3028
- return /* @__PURE__ */ React25.createElement(OverridablePropProvider, { value }, /* @__PURE__ */ React25.createElement(
3029
- import_editor_controls2.PropProvider,
3253
+ return /* @__PURE__ */ React27.createElement(OverridablePropProvider, { value }, /* @__PURE__ */ React27.createElement(
3254
+ import_editor_controls5.PropProvider,
3030
3255
  {
3031
3256
  ...propContext,
3032
3257
  propType,
3033
3258
  setValue: setOverridableValue,
3034
- value: { [bind]: value.origin_value },
3259
+ value: {
3260
+ [bind]: propValue
3261
+ },
3035
3262
  placeholder: objectPlaceholder
3036
3263
  },
3037
- /* @__PURE__ */ React25.createElement(import_editor_controls2.PropKeyProvider, { bind }, /* @__PURE__ */ React25.createElement(import_editor_controls2.ControlReplacementsProvider, { replacements: [] }, /* @__PURE__ */ React25.createElement(OriginalControl, { ...props })))
3264
+ /* @__PURE__ */ React27.createElement(import_editor_controls5.PropKeyProvider, { bind }, /* @__PURE__ */ React27.createElement(import_editor_controls5.ControlReplacementsProvider, { replacements: [] }, /* @__PURE__ */ React27.createElement(OriginalControl, { ...props })))
3038
3265
  ));
3039
3266
  }
3040
3267
 
3041
3268
  // src/components/overridable-props/overridable-prop-indicator.tsx
3042
- var React27 = __toESM(require("react"));
3043
- var import_editor_controls3 = require("@elementor/editor-controls");
3044
- var import_editor_editing_panel5 = require("@elementor/editor-editing-panel");
3045
- var import_editor_elements9 = require("@elementor/editor-elements");
3046
- var import_store51 = require("@elementor/store");
3047
- var import_ui21 = require("@elementor/ui");
3269
+ var React29 = __toESM(require("react"));
3270
+ var import_editor_controls6 = require("@elementor/editor-controls");
3271
+ var import_editor_editing_panel7 = require("@elementor/editor-editing-panel");
3272
+ var import_editor_elements12 = require("@elementor/editor-elements");
3273
+ var import_ui23 = require("@elementor/ui");
3048
3274
  var import_i18n23 = require("@wordpress/i18n");
3049
3275
 
3050
3276
  // src/store/actions/set-overridable-prop.ts
@@ -3059,7 +3285,8 @@ function setOverridableProp({
3059
3285
  propKey,
3060
3286
  elType,
3061
3287
  widgetType,
3062
- originValue
3288
+ originValue,
3289
+ originPropFields
3063
3290
  }) {
3064
3291
  const overridableProps = selectOverridableProps((0, import_store47.__getState)(), componentId);
3065
3292
  if (!overridableProps) {
@@ -3081,7 +3308,8 @@ function setOverridableProp({
3081
3308
  widgetType,
3082
3309
  elType,
3083
3310
  originValue,
3084
- groupId: currentGroupId
3311
+ groupId: currentGroupId,
3312
+ originPropFields
3085
3313
  };
3086
3314
  const stateAfterRemovingDuplicates = removePropsFromState(
3087
3315
  { ...overridableProps, groups: groupsAfterResolve },
@@ -3110,13 +3338,13 @@ function setOverridableProp({
3110
3338
  }
3111
3339
 
3112
3340
  // src/components/overridable-props/indicator.tsx
3113
- var React26 = __toESM(require("react"));
3341
+ var React28 = __toESM(require("react"));
3114
3342
  var import_react15 = require("react");
3115
3343
  var import_icons15 = require("@elementor/icons");
3116
- var import_ui20 = require("@elementor/ui");
3344
+ var import_ui22 = require("@elementor/ui");
3117
3345
  var import_i18n22 = require("@wordpress/i18n");
3118
3346
  var SIZE2 = "tiny";
3119
- var IconContainer = (0, import_ui20.styled)(import_ui20.Box)`
3347
+ var IconContainer = (0, import_ui22.styled)(import_ui22.Box)`
3120
3348
  pointer-events: none;
3121
3349
  opacity: 0;
3122
3350
  transition: opacity 0.2s ease-in-out;
@@ -3133,7 +3361,7 @@ var IconContainer = (0, import_ui20.styled)(import_ui20.Box)`
3133
3361
  stroke-width: 2px;
3134
3362
  }
3135
3363
  `;
3136
- var Content = (0, import_ui20.styled)(import_ui20.Box)`
3364
+ var Content = (0, import_ui22.styled)(import_ui22.Box)`
3137
3365
  position: relative;
3138
3366
  display: flex;
3139
3367
  align-items: center;
@@ -3170,13 +3398,13 @@ var Content = (0, import_ui20.styled)(import_ui20.Box)`
3170
3398
  }
3171
3399
  }
3172
3400
  `;
3173
- var Indicator = (0, import_react15.forwardRef)(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */ React26.createElement(Content, { ref, ...props, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React26.createElement(
3401
+ var Indicator = (0, import_react15.forwardRef)(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */ React28.createElement(Content, { ref, ...props, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React28.createElement(
3174
3402
  IconContainer,
3175
3403
  {
3176
3404
  className: "icon",
3177
3405
  "aria-label": isOverridable ? (0, import_i18n22.__)("Overridable property", "elementor") : (0, import_i18n22.__)("Make prop overridable", "elementor")
3178
3406
  },
3179
- isOverridable ? /* @__PURE__ */ React26.createElement(import_icons15.CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React26.createElement(import_icons15.PlusIcon, { fontSize: SIZE2 })
3407
+ isOverridable ? /* @__PURE__ */ React28.createElement(import_icons15.CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React28.createElement(import_icons15.PlusIcon, { fontSize: SIZE2 })
3180
3408
  )));
3181
3409
 
3182
3410
  // src/components/overridable-props/utils/get-overridable-prop.ts
@@ -3195,33 +3423,35 @@ function getOverridableProp({
3195
3423
  // src/components/overridable-props/overridable-prop-indicator.tsx
3196
3424
  var FORBIDDEN_KEYS = ["_cssid", "attributes"];
3197
3425
  function OverridablePropIndicator() {
3198
- const { bind } = (0, import_editor_controls3.useBoundProp)();
3426
+ const { bind } = (0, import_editor_controls6.useBoundProp)();
3199
3427
  const componentId = useCurrentComponentId();
3200
- if (!isPropAllowed(bind) || !componentId) {
3428
+ const overridableProps = useOverridableProps(componentId);
3429
+ if (!isPropAllowed(bind) || !componentId || !overridableProps) {
3201
3430
  return null;
3202
3431
  }
3203
- const overridableProps = selectOverridableProps((0, import_store51.__getState)(), componentId);
3204
- return /* @__PURE__ */ React27.createElement(Content2, { componentId, overridableProps });
3432
+ return /* @__PURE__ */ React29.createElement(Content2, { componentId, overridableProps });
3205
3433
  }
3206
3434
  function Content2({ componentId, overridableProps }) {
3207
3435
  const {
3208
3436
  element: { id: elementId },
3209
3437
  elementType
3210
- } = (0, import_editor_editing_panel5.useElement)();
3211
- const { value, bind, propType } = (0, import_editor_controls3.useBoundProp)();
3438
+ } = (0, import_editor_editing_panel7.useElement)();
3439
+ const { value, bind, propType } = (0, import_editor_controls6.useBoundProp)();
3212
3440
  const contextOverridableValue = useOverridablePropValue();
3213
- const { value: boundPropOverridableValue, setValue: setOverridableValue } = (0, import_editor_controls3.useBoundProp)(
3441
+ const { value: boundPropOverridableValue, setValue: setOverridableValue } = (0, import_editor_controls6.useBoundProp)(
3214
3442
  componentOverridablePropTypeUtil
3215
3443
  );
3216
3444
  const overridableValue = boundPropOverridableValue ?? contextOverridableValue;
3217
- const popupState = (0, import_ui21.usePopupState)({
3445
+ const popupState = (0, import_ui23.usePopupState)({
3218
3446
  variant: "popover"
3219
3447
  });
3220
- const triggerProps = (0, import_ui21.bindTrigger)(popupState);
3221
- const popoverProps = (0, import_ui21.bindPopover)(popupState);
3222
- const { elType } = (0, import_editor_elements9.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
3448
+ const triggerProps = (0, import_ui23.bindTrigger)(popupState);
3449
+ const popoverProps = (0, import_ui23.bindPopover)(popupState);
3450
+ const { elType } = (0, import_editor_elements12.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
3223
3451
  const handleSubmit = ({ label, group }) => {
3224
- const originValue = !overridableValue ? value ?? propType.default : overridableValue?.origin_value ?? {};
3452
+ const propTypeDefault = propType.default ?? {};
3453
+ const originValue = (!overridableValue ? value : overridableValue?.origin_value) ?? propTypeDefault;
3454
+ const matchingOverridableProp = overridableValue ? overridableProps?.props?.[overridableValue.override_key] : void 0;
3225
3455
  const overridablePropConfig = setOverridableProp({
3226
3456
  componentId,
3227
3457
  overrideKey: overridableValue?.override_key ?? null,
@@ -3231,7 +3461,8 @@ function Content2({ componentId, overridableProps }) {
3231
3461
  propKey: bind,
3232
3462
  elType: elType ?? "widget",
3233
3463
  widgetType: elementType.key,
3234
- originValue
3464
+ originValue,
3465
+ originPropFields: matchingOverridableProp?.originPropFields
3235
3466
  });
3236
3467
  if (!overridableValue && overridablePropConfig) {
3237
3468
  setOverridableValue({
@@ -3242,8 +3473,8 @@ function Content2({ componentId, overridableProps }) {
3242
3473
  popupState.close();
3243
3474
  };
3244
3475
  const overridableConfig = overridableValue ? getOverridableProp({ componentId, overrideKey: overridableValue.override_key }) : void 0;
3245
- return /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement(import_ui21.Tooltip, { placement: "top", title: (0, import_i18n23.__)("Override Property", "elementor") }, /* @__PURE__ */ React27.createElement(Indicator, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React27.createElement(
3246
- import_ui21.Popover,
3476
+ return /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(import_ui23.Tooltip, { placement: "top", title: (0, import_i18n23.__)("Override Property", "elementor") }, /* @__PURE__ */ React29.createElement(Indicator, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React29.createElement(
3477
+ import_ui23.Popover,
3247
3478
  {
3248
3479
  disableScrollLock: true,
3249
3480
  anchorOrigin: {
@@ -3259,7 +3490,7 @@ function Content2({ componentId, overridableProps }) {
3259
3490
  },
3260
3491
  ...popoverProps
3261
3492
  },
3262
- /* @__PURE__ */ React27.createElement(
3493
+ /* @__PURE__ */ React29.createElement(
3263
3494
  OverridablePropForm,
3264
3495
  {
3265
3496
  onSubmit: handleSubmit,
@@ -3277,7 +3508,7 @@ function isPropAllowed(bind) {
3277
3508
  }
3278
3509
 
3279
3510
  // src/hooks/regenerate-override-keys.ts
3280
- var import_editor_elements10 = require("@elementor/editor-elements");
3511
+ var import_editor_elements13 = require("@elementor/editor-elements");
3281
3512
  var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
3282
3513
  var import_utils8 = require("@elementor/utils");
3283
3514
  function initRegenerateOverrideKeys() {
@@ -3298,7 +3529,7 @@ function regenerateOverrideKeysForContainers(result) {
3298
3529
  });
3299
3530
  }
3300
3531
  function regenerateOverrideKeysRecursive(elementId) {
3301
- const container = (0, import_editor_elements10.getContainer)(elementId);
3532
+ const container = (0, import_editor_elements13.getContainer)(elementId);
3302
3533
  if (!container) {
3303
3534
  return;
3304
3535
  }
@@ -3340,7 +3571,7 @@ function regenerateOverrideKeys(element) {
3340
3571
  }
3341
3572
  }
3342
3573
  };
3343
- (0, import_editor_elements10.updateElementSettings)({
3574
+ (0, import_editor_elements13.updateElementSettings)({
3344
3575
  id: element.id,
3345
3576
  props: { component_instance: newComponentInstance },
3346
3577
  withHistory: false
@@ -3364,7 +3595,7 @@ var import_editor_mcp2 = require("@elementor/editor-mcp");
3364
3595
 
3365
3596
  // src/mcp/save-as-component-tool.ts
3366
3597
  var import_editor_canvas7 = require("@elementor/editor-canvas");
3367
- var import_editor_elements11 = require("@elementor/editor-elements");
3598
+ var import_editor_elements14 = require("@elementor/editor-elements");
3368
3599
  var import_editor_mcp = require("@elementor/editor-mcp");
3369
3600
  var import_http_client2 = require("@elementor/http-client");
3370
3601
  var import_schema6 = require("@elementor/schema");
@@ -3399,7 +3630,7 @@ var ERROR_MESSAGES2 = {
3399
3630
  var handleSaveAsComponent = async (params) => {
3400
3631
  const { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;
3401
3632
  const validElementTypes = getValidElementTypes();
3402
- const container = (0, import_editor_elements11.getContainer)(elementId);
3633
+ const container = (0, import_editor_elements14.getContainer)(elementId);
3403
3634
  if (!container) {
3404
3635
  throw new Error(ERROR_MESSAGES2.ELEMENT_NOT_FOUND);
3405
3636
  }
@@ -3446,7 +3677,7 @@ function enrichOverridableProps(input, rootElement) {
3446
3677
  }
3447
3678
  const elType = element.elType;
3448
3679
  const widgetType = element.widgetType || element.elType;
3449
- const elementType = (0, import_editor_elements11.getElementType)(widgetType);
3680
+ const elementType = (0, import_editor_elements14.getElementType)(widgetType);
3450
3681
  if (!elementType) {
3451
3682
  throw new Error(
3452
3683
  `Element type "${widgetType}" is not atomic or does not have a settings schema. Cannot expose property "${propKey}" for element "${elementId}".`
@@ -3520,7 +3751,7 @@ function generateLabel(propKey) {
3520
3751
  return `${uniqueId} - ${propKey}`;
3521
3752
  }
3522
3753
  function getValidElementTypes() {
3523
- const types = (0, import_editor_elements11.getWidgetsCache)();
3754
+ const types = (0, import_editor_elements14.getWidgetsCache)();
3524
3755
  if (!types) {
3525
3756
  return [];
3526
3757
  }
@@ -3693,28 +3924,28 @@ function initMcp() {
3693
3924
 
3694
3925
  // src/populate-store.ts
3695
3926
  var import_react16 = require("react");
3696
- var import_store53 = require("@elementor/store");
3927
+ var import_store52 = require("@elementor/store");
3697
3928
  function PopulateStore() {
3698
3929
  (0, import_react16.useEffect)(() => {
3699
- (0, import_store53.__dispatch)(loadComponents());
3930
+ (0, import_store52.__dispatch)(loadComponents());
3700
3931
  }, []);
3701
3932
  return null;
3702
3933
  }
3703
3934
 
3704
3935
  // src/store/actions/remove-component-styles.ts
3705
- var import_store54 = require("@elementor/store");
3936
+ var import_store53 = require("@elementor/store");
3706
3937
  function removeComponentStyles(id2) {
3707
3938
  apiClient.invalidateComponentConfigCache(id2);
3708
- (0, import_store54.__dispatch)(slice.actions.removeStyles({ id: id2 }));
3939
+ (0, import_store53.__dispatch)(slice.actions.removeStyles({ id: id2 }));
3709
3940
  }
3710
3941
 
3711
3942
  // src/store/components-styles-provider.ts
3712
3943
  var import_editor_styles_repository = require("@elementor/editor-styles-repository");
3713
- var import_store56 = require("@elementor/store");
3944
+ var import_store55 = require("@elementor/store");
3714
3945
  var componentsStylesProvider = (0, import_editor_styles_repository.createStylesProvider)({
3715
3946
  key: "components-styles",
3716
3947
  priority: 100,
3717
- subscribe: (cb) => (0, import_store56.__subscribeWithSelector)(
3948
+ subscribe: (cb) => (0, import_store55.__subscribeWithSelector)(
3718
3949
  (state) => state[SLICE_NAME],
3719
3950
  () => {
3720
3951
  cb();
@@ -3722,29 +3953,29 @@ var componentsStylesProvider = (0, import_editor_styles_repository.createStylesP
3722
3953
  ),
3723
3954
  actions: {
3724
3955
  all: () => {
3725
- return selectFlatStyles((0, import_store56.__getState)());
3956
+ return selectFlatStyles((0, import_store55.__getState)());
3726
3957
  },
3727
3958
  get: (id2) => {
3728
- return selectFlatStyles((0, import_store56.__getState)()).find((style) => style.id === id2) ?? null;
3959
+ return selectFlatStyles((0, import_store55.__getState)()).find((style) => style.id === id2) ?? null;
3729
3960
  }
3730
3961
  }
3731
3962
  });
3732
3963
 
3733
3964
  // src/sync/create-components-before-save.ts
3734
- var import_editor_elements12 = require("@elementor/editor-elements");
3735
- var import_store58 = require("@elementor/store");
3965
+ var import_editor_elements15 = require("@elementor/editor-elements");
3966
+ var import_store57 = require("@elementor/store");
3736
3967
  async function createComponentsBeforeSave({
3737
3968
  elements,
3738
3969
  status
3739
3970
  }) {
3740
- const unpublishedComponents = selectUnpublishedComponents((0, import_store58.__getState)());
3971
+ const unpublishedComponents = selectUnpublishedComponents((0, import_store57.__getState)());
3741
3972
  if (!unpublishedComponents.length) {
3742
3973
  return;
3743
3974
  }
3744
3975
  try {
3745
3976
  const uidToComponentId = await createComponents(unpublishedComponents, status);
3746
3977
  updateComponentInstances(elements, uidToComponentId);
3747
- (0, import_store58.__dispatch)(
3978
+ (0, import_store57.__dispatch)(
3748
3979
  slice.actions.add(
3749
3980
  unpublishedComponents.map((component) => ({
3750
3981
  id: uidToComponentId.get(component.uid),
@@ -3754,7 +3985,7 @@ async function createComponentsBeforeSave({
3754
3985
  }))
3755
3986
  )
3756
3987
  );
3757
- (0, import_store58.__dispatch)(slice.actions.resetUnpublished());
3988
+ (0, import_store57.__dispatch)(slice.actions.resetUnpublished());
3758
3989
  } catch (error) {
3759
3990
  throw new Error(`Failed to publish components and update component instances: ${error}`);
3760
3991
  }
@@ -3789,14 +4020,17 @@ function updateComponentInstances(elements, uidToComponentId) {
3789
4020
  function shouldUpdateElement(element, uidToComponentId) {
3790
4021
  if (element.widgetType === "e-component") {
3791
4022
  const currentComponentId = element.settings?.component_instance?.value?.component_id.value;
3792
- if (currentComponentId && uidToComponentId.has(currentComponentId)) {
3793
- return { shouldUpdate: true, newComponentId: uidToComponentId.get(currentComponentId) };
4023
+ if (currentComponentId && uidToComponentId.has(currentComponentId.toString())) {
4024
+ return {
4025
+ shouldUpdate: true,
4026
+ newComponentId: uidToComponentId.get(currentComponentId.toString())
4027
+ };
3794
4028
  }
3795
4029
  }
3796
4030
  return { shouldUpdate: false, newComponentId: null };
3797
4031
  }
3798
4032
  function updateElementComponentId(elementId, componentId) {
3799
- (0, import_editor_elements12.updateElementSettings)({
4033
+ (0, import_editor_elements15.updateElementSettings)({
3800
4034
  id: elementId,
3801
4035
  props: {
3802
4036
  component_instance: {
@@ -3811,7 +4045,7 @@ function updateElementComponentId(elementId, componentId) {
3811
4045
  }
3812
4046
 
3813
4047
  // src/sync/set-component-overridable-props-settings-before-save.ts
3814
- var import_store60 = require("@elementor/store");
4048
+ var import_store59 = require("@elementor/store");
3815
4049
  var setComponentOverridablePropsSettingsBeforeSave = ({
3816
4050
  container
3817
4051
  }) => {
@@ -3819,7 +4053,7 @@ var setComponentOverridablePropsSettingsBeforeSave = ({
3819
4053
  if (!currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE) {
3820
4054
  return;
3821
4055
  }
3822
- const overridableProps = selectOverridableProps((0, import_store60.__getState)(), currentDocument.id);
4056
+ const overridableProps = selectOverridableProps((0, import_store59.__getState)(), currentDocument.id);
3823
4057
  if (overridableProps) {
3824
4058
  container.settings.set("overridable_props", overridableProps);
3825
4059
  }
@@ -3827,7 +4061,7 @@ var setComponentOverridablePropsSettingsBeforeSave = ({
3827
4061
 
3828
4062
  // src/sync/update-archived-component-before-save.ts
3829
4063
  var import_editor_notifications = require("@elementor/editor-notifications");
3830
- var import_store62 = require("@elementor/store");
4064
+ var import_store61 = require("@elementor/store");
3831
4065
  var failedNotification = (message) => ({
3832
4066
  type: "error",
3833
4067
  message: `Failed to archive components: ${message}`,
@@ -3840,7 +4074,7 @@ var successNotification = (message) => ({
3840
4074
  });
3841
4075
  var updateArchivedComponentBeforeSave = async () => {
3842
4076
  try {
3843
- const archivedComponents = selectArchivedComponents((0, import_store62.__getState)());
4077
+ const archivedComponents = selectArchivedComponents((0, import_store61.__getState)());
3844
4078
  if (!archivedComponents.length) {
3845
4079
  return;
3846
4080
  }
@@ -3890,7 +4124,7 @@ var beforeSave = ({ container, status }) => {
3890
4124
  // src/init.ts
3891
4125
  function init() {
3892
4126
  import_editor_styles_repository2.stylesRepository.register(componentsStylesProvider);
3893
- (0, import_store64.__registerSlice)(slice);
4127
+ (0, import_store63.__registerSlice)(slice);
3894
4128
  (0, import_editor_panels4.__registerPanel)(panel);
3895
4129
  (0, import_editor_canvas8.registerElementType)(
3896
4130
  COMPONENT_WIDGET_TYPE,
@@ -3922,7 +4156,7 @@ function init() {
3922
4156
  id: "edit-component",
3923
4157
  component: EditComponent
3924
4158
  });
3925
- (0, import_editor_editing_panel6.injectIntoPanelHeaderTop)({
4159
+ (0, import_editor_editing_panel8.injectIntoPanelHeaderTop)({
3926
4160
  id: "component-panel-header",
3927
4161
  component: ComponentPanelHeader
3928
4162
  });
@@ -3933,17 +4167,17 @@ function init() {
3933
4167
  }
3934
4168
  await loadComponentsAssets(config?.elements ?? []);
3935
4169
  });
3936
- (0, import_editor_editing_panel6.registerFieldIndicator)({
3937
- fieldType: import_editor_editing_panel6.FIELD_TYPE.SETTINGS,
4170
+ (0, import_editor_editing_panel8.registerFieldIndicator)({
4171
+ fieldType: import_editor_editing_panel8.FIELD_TYPE.SETTINGS,
3938
4172
  id: "component-overridable-prop",
3939
4173
  priority: 1,
3940
4174
  indicator: OverridablePropIndicator
3941
4175
  });
3942
- (0, import_editor_editing_panel6.registerControlReplacement)({
4176
+ (0, import_editor_editing_panel8.registerControlReplacement)({
3943
4177
  component: OverridablePropControl,
3944
4178
  condition: ({ value }) => componentOverridablePropTypeUtil.isValid(value)
3945
4179
  });
3946
- (0, import_editor_editing_panel6.registerEditingPanelReplacement)({
4180
+ (0, import_editor_editing_panel8.registerEditingPanelReplacement)({
3947
4181
  id: "component-instance-edit-panel",
3948
4182
  condition: (_, elementType) => elementType.key === "e-component",
3949
4183
  component: InstanceEditingPanel