@elementor/editor-components 3.35.0-432 → 3.35.0-434

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/dist/index.js CHANGED
@@ -2740,6 +2740,7 @@ var Components = () => {
2740
2740
 
2741
2741
  // src/components/consts.ts
2742
2742
  var COMPONENT_DOCUMENT_TYPE = "elementor_component";
2743
+ var OVERRIDABLE_PROP_REPLACEMENT_ID = "overridable-prop";
2743
2744
 
2744
2745
  // src/components/create-component-form/create-component-form.tsx
2745
2746
  var React19 = __toESM(require("react"));
@@ -3415,10 +3416,10 @@ var EditModeDialog = ({ lockedBy }) => {
3415
3416
  };
3416
3417
 
3417
3418
  // src/components/instance-editing-panel/instance-editing-panel.tsx
3418
- var React27 = __toESM(require("react"));
3419
+ var React28 = __toESM(require("react"));
3419
3420
  var import_editor_controls4 = require("@elementor/editor-controls");
3420
3421
  var import_editor_editing_panel5 = require("@elementor/editor-editing-panel");
3421
- var import_editor_elements14 = require("@elementor/editor-elements");
3422
+ var import_editor_elements15 = require("@elementor/editor-elements");
3422
3423
  var import_editor_panels3 = require("@elementor/editor-panels");
3423
3424
  var import_icons14 = require("@elementor/icons");
3424
3425
  var import_ui22 = require("@elementor/ui");
@@ -3514,16 +3515,17 @@ var EmptyState2 = ({ onEditComponent }) => {
3514
3515
  };
3515
3516
 
3516
3517
  // src/components/instance-editing-panel/override-props-group.tsx
3517
- var React26 = __toESM(require("react"));
3518
- var import_react15 = require("react");
3518
+ var React27 = __toESM(require("react"));
3519
+ var import_react16 = require("react");
3519
3520
  var import_editor_editing_panel4 = require("@elementor/editor-editing-panel");
3520
3521
  var import_editor_ui11 = require("@elementor/editor-ui");
3521
3522
  var import_ui21 = require("@elementor/ui");
3522
3523
 
3523
3524
  // src/components/instance-editing-panel/override-prop-control.tsx
3524
- var React25 = __toESM(require("react"));
3525
+ var React26 = __toESM(require("react"));
3525
3526
  var import_editor_controls3 = require("@elementor/editor-controls");
3526
3527
  var import_editor_editing_panel3 = require("@elementor/editor-editing-panel");
3528
+ var import_editor_elements14 = require("@elementor/editor-elements");
3527
3529
  var import_ui20 = require("@elementor/ui");
3528
3530
 
3529
3531
  // src/hooks/use-controls-by-widget-type.ts
@@ -3557,8 +3559,51 @@ function getControlsByBind(controls) {
3557
3559
  );
3558
3560
  }
3559
3561
 
3562
+ // src/provider/overridable-prop-context.tsx
3563
+ var React24 = __toESM(require("react"));
3564
+ var import_react15 = require("react");
3565
+ var OverridablePropContext = (0, import_react15.createContext)(null);
3566
+ function OverridablePropProvider({ children, ...props }) {
3567
+ return /* @__PURE__ */ React24.createElement(OverridablePropContext.Provider, { value: props }, children);
3568
+ }
3569
+ var useOverridablePropValue = () => (0, import_react15.useContext)(OverridablePropContext)?.value;
3570
+ var useComponentInstanceElement = () => (0, import_react15.useContext)(OverridablePropContext)?.componentInstanceElement;
3571
+
3560
3572
  // src/store/actions/update-overridable-prop.ts
3561
3573
  var import_store53 = require("@elementor/store");
3574
+
3575
+ // src/utils/resolve-override-prop-value.ts
3576
+ var resolveOverridePropValue = (originalPropValue) => {
3577
+ const isOverridable = componentOverridablePropTypeUtil.isValid(originalPropValue);
3578
+ if (isOverridable) {
3579
+ return getOverridableValue(originalPropValue);
3580
+ }
3581
+ const isOverride = componentInstanceOverridePropTypeUtil.isValid(originalPropValue);
3582
+ if (isOverride) {
3583
+ return getOverrideValue(originalPropValue);
3584
+ }
3585
+ return originalPropValue;
3586
+ };
3587
+ function getOverridableValue(overridableProp) {
3588
+ const overridableValue = componentOverridablePropTypeUtil.extract(overridableProp);
3589
+ if (!overridableValue) {
3590
+ return null;
3591
+ }
3592
+ const isOverride = componentInstanceOverridePropTypeUtil.isValid(overridableValue.origin_value);
3593
+ if (isOverride) {
3594
+ return getOverrideValue(overridableValue.origin_value);
3595
+ }
3596
+ return overridableValue.origin_value;
3597
+ }
3598
+ function getOverrideValue(overrideProp) {
3599
+ const overrideValue = componentInstanceOverridePropTypeUtil.extract(overrideProp);
3600
+ if (!overrideValue) {
3601
+ return null;
3602
+ }
3603
+ return overrideValue.override_value;
3604
+ }
3605
+
3606
+ // src/store/actions/update-overridable-prop.ts
3562
3607
  function updateOverridableProp(componentId, propValue, originPropFields) {
3563
3608
  const overridableProps = selectOverridableProps((0, import_store53.__getState)(), componentId);
3564
3609
  if (!overridableProps) {
@@ -3568,11 +3613,12 @@ function updateOverridableProp(componentId, propValue, originPropFields) {
3568
3613
  if (!existingOverridableProp) {
3569
3614
  return;
3570
3615
  }
3616
+ const originValue = resolveOverridePropValue(propValue.origin_value);
3571
3617
  const newOverridableProp = originPropFields ? {
3572
- originValue: propValue.origin_value,
3618
+ originValue,
3573
3619
  originPropFields
3574
3620
  } : {
3575
- originValue: propValue.origin_value
3621
+ originValue
3576
3622
  };
3577
3623
  const newOverridableProps = {
3578
3624
  ...overridableProps,
@@ -3598,11 +3644,12 @@ var getPropTypeForComponentOverride = (overridableProp) => {
3598
3644
  if (overridableProp.originPropFields) {
3599
3645
  return getPropType(overridableProp.originPropFields);
3600
3646
  }
3601
- const { elType, widgetType, propKey } = overridableProp;
3647
+ const { elType, widgetType, propKey, elementId } = overridableProp;
3602
3648
  return getPropType({
3603
3649
  elType,
3604
3650
  widgetType,
3605
- propKey
3651
+ propKey,
3652
+ elementId
3606
3653
  });
3607
3654
  };
3608
3655
  function getPropType({ widgetType, propKey }) {
@@ -3611,23 +3658,25 @@ function getPropType({ widgetType, propKey }) {
3611
3658
  }
3612
3659
 
3613
3660
  // src/components/control-label.tsx
3614
- var React24 = __toESM(require("react"));
3661
+ var React25 = __toESM(require("react"));
3615
3662
  var import_editor_controls2 = require("@elementor/editor-controls");
3616
3663
  var import_ui19 = require("@elementor/ui");
3617
3664
  var ControlLabel = ({ children, ...props }) => {
3618
- return /* @__PURE__ */ React24.createElement(import_ui19.Stack, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React24.createElement(import_editor_controls2.ControlFormLabel, { ...props }, children), /* @__PURE__ */ React24.createElement(import_editor_controls2.ControlAdornments, null));
3665
+ return /* @__PURE__ */ React25.createElement(import_ui19.Stack, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React25.createElement(import_editor_controls2.ControlFormLabel, { ...props }, children), /* @__PURE__ */ React25.createElement(import_editor_controls2.ControlAdornments, null));
3619
3666
  };
3620
3667
 
3621
3668
  // src/components/instance-editing-panel/override-prop-control.tsx
3622
3669
  function OverridePropControl({ overridableProp, overrides }) {
3623
- return /* @__PURE__ */ React25.createElement(import_editor_editing_panel3.SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React25.createElement(OverrideControl, { overridableProp, overrides }));
3670
+ return /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React26.createElement(OverrideControl, { overridableProp, overrides }));
3624
3671
  }
3625
3672
  function OverrideControl({ overridableProp, overrides }) {
3673
+ const componentInstanceElement = (0, import_editor_editing_panel3.useElement)();
3626
3674
  const componentId = useCurrentComponentId();
3627
3675
  const { value: instanceValue, setValue: setInstanceValue } = (0, import_editor_controls3.useBoundProp)(componentInstancePropTypeUtil);
3628
3676
  const controls = useControlsByWidgetType(
3629
3677
  overridableProp?.originPropFields?.widgetType ?? overridableProp.widgetType
3630
3678
  );
3679
+ const controlReplacements = (0, import_editor_editing_panel3.getControlReplacements)();
3631
3680
  const propType = getPropTypeForComponentOverride(overridableProp);
3632
3681
  if (!propType) {
3633
3682
  return null;
@@ -3642,13 +3691,18 @@ function OverrideControl({ overridableProp, overrides }) {
3642
3691
  throw new Error("Component ID is required");
3643
3692
  }
3644
3693
  const matchingOverride = getMatchingOverride(overrides, overridableProp.overrideKey);
3645
- const propValue = matchingOverride ? getPropValue(matchingOverride) : overridableProp.originValue;
3694
+ const propValue = matchingOverride ? resolveOverridePropValue(matchingOverride) : overridableProp.originValue;
3646
3695
  const value = {
3647
3696
  [overridableProp.overrideKey]: propValue
3648
3697
  };
3649
3698
  const setValue = (newValue) => {
3650
3699
  const newPropValue = newValue[overridableProp.overrideKey];
3651
- const newOverrideValue = createOverrideValue(overridableProp.overrideKey, newPropValue, componentInstanceId);
3700
+ const newOverrideValue = createOverrideValue({
3701
+ matchingOverride,
3702
+ overrideKey: overridableProp.overrideKey,
3703
+ overrideValue: newPropValue,
3704
+ componentId: componentInstanceId
3705
+ });
3652
3706
  let newOverrides = overrides?.map((override) => override === matchingOverride ? newOverrideValue : override) ?? [];
3653
3707
  if (!matchingOverride) {
3654
3708
  newOverrides = [...newOverrides, newOverrideValue];
@@ -3663,33 +3717,41 @@ function OverrideControl({ overridableProp, overrides }) {
3663
3717
  updateOverridableProp(componentId, overridableValue, overridableProp.originPropFields);
3664
3718
  return;
3665
3719
  }
3666
- const { elType, widgetType, propKey } = overridableProp;
3667
- updateOverridableProp(componentId, overridableValue, { elType, widgetType, propKey });
3720
+ const { elType: elType2, widgetType: widgetType2, propKey: propKey2, elementId: elementId2 } = overridableProp;
3721
+ updateOverridableProp(componentId, overridableValue, { elType: elType2, widgetType: widgetType2, propKey: propKey2, elementId: elementId2 });
3668
3722
  }
3669
3723
  };
3670
- return /* @__PURE__ */ React25.createElement(
3671
- import_editor_controls3.PropProvider,
3724
+ const { control, controlProps, layout } = getControlParams(
3725
+ controls,
3726
+ overridableProp?.originPropFields ?? overridableProp,
3727
+ overridableProp.label
3728
+ );
3729
+ const { elementId, widgetType, elType, propKey } = overridableProp.originPropFields ?? overridableProp;
3730
+ const type = elType === "widget" ? widgetType : elType;
3731
+ const elementType = (0, import_editor_elements14.getElementType)(type);
3732
+ if (!elementType) {
3733
+ return null;
3734
+ }
3735
+ return /* @__PURE__ */ React26.createElement(
3736
+ OverridablePropProvider,
3672
3737
  {
3673
- propType: propTypeSchema,
3674
- value,
3675
- setValue,
3676
- isDisabled: () => {
3677
- return false;
3678
- }
3738
+ value: componentOverridablePropTypeUtil.extract(matchingOverride) ?? void 0,
3739
+ componentInstanceElement
3679
3740
  },
3680
- /* @__PURE__ */ React25.createElement(import_editor_controls3.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React25.createElement(import_ui20.Stack, { direction: "column", gap: 1, mb: 1.5 }, /* @__PURE__ */ React25.createElement(ControlLabel, null, overridableProp.label), getControl(controls, overridableProp?.originPropFields ?? overridableProp)))
3741
+ /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.ElementProvider, { element: { id: elementId, type }, elementType }, /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.SettingsField, { bind: propKey, propDisplayName: overridableProp.label }, /* @__PURE__ */ React26.createElement(
3742
+ import_editor_controls3.PropProvider,
3743
+ {
3744
+ propType: propTypeSchema,
3745
+ value,
3746
+ setValue,
3747
+ isDisabled: () => {
3748
+ return false;
3749
+ }
3750
+ },
3751
+ /* @__PURE__ */ React26.createElement(import_editor_controls3.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React26.createElement(import_editor_controls3.ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ React26.createElement(import_ui20.Stack, { direction: "column", gap: 1, mb: 1.5 }, layout !== "custom" && /* @__PURE__ */ React26.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ React26.createElement(OriginalControl, { control, controlProps }))))
3752
+ )))
3681
3753
  );
3682
3754
  }
3683
- function getPropValue(value) {
3684
- const overridableValue = componentOverridablePropTypeUtil.extract(value);
3685
- if (overridableValue) {
3686
- return value;
3687
- }
3688
- if (componentInstanceOverridePropTypeUtil.isValid(value)) {
3689
- return value.value.override_value;
3690
- }
3691
- return null;
3692
- }
3693
3755
  function getMatchingOverride(overrides, overrideKey) {
3694
3756
  return overrides?.find((override) => {
3695
3757
  const overridableValue = componentOverridablePropTypeUtil.extract(override);
@@ -3702,19 +3764,26 @@ function getMatchingOverride(overrides, overrideKey) {
3702
3764
  return comparedOverrideKey === overrideKey;
3703
3765
  }) ?? null;
3704
3766
  }
3705
- function createOverrideValue(overrideKey, overrideValue, componentId) {
3706
- const overridableValue = componentOverridablePropTypeUtil.extract(overrideValue);
3707
- if (overridableValue) {
3767
+ function createOverrideValue({
3768
+ matchingOverride,
3769
+ overrideKey,
3770
+ overrideValue,
3771
+ componentId
3772
+ }) {
3773
+ const overridableValue = componentOverridablePropTypeUtil.extract(matchingOverride);
3774
+ const newOverridableValue = componentOverridablePropTypeUtil.extract(overrideValue);
3775
+ const anyOverridable = newOverridableValue ?? overridableValue;
3776
+ if (anyOverridable) {
3708
3777
  const innerOverride = componentInstanceOverridePropTypeUtil.create({
3709
3778
  override_key: overrideKey,
3710
- override_value: overridableValue.origin_value,
3779
+ override_value: resolveOverridePropValue(overrideValue),
3711
3780
  schema_source: {
3712
3781
  type: "component",
3713
3782
  id: componentId
3714
3783
  }
3715
3784
  });
3716
3785
  return componentOverridablePropTypeUtil.create({
3717
- override_key: overridableValue.override_key,
3786
+ override_key: anyOverridable.override_key,
3718
3787
  origin_value: innerOverride
3719
3788
  });
3720
3789
  }
@@ -3727,10 +3796,41 @@ function createOverrideValue(overrideKey, overrideValue, componentId) {
3727
3796
  }
3728
3797
  });
3729
3798
  }
3730
- function getControl(controls, originPropFields) {
3731
- const ControlComponent = import_editor_editing_panel3.controlsRegistry.get(controls[originPropFields.propKey].value.type);
3732
- const controlProps = controls[originPropFields.propKey].value.props;
3733
- return /* @__PURE__ */ React25.createElement(ControlComponent, { ...controlProps });
3799
+ function getControlParams(controls, originPropFields, label) {
3800
+ const control = controls[originPropFields.propKey];
3801
+ const { value } = control;
3802
+ const layout = getControlLayout(control);
3803
+ const controlProps = populateChildControlProps(value.props);
3804
+ if (layout === "custom") {
3805
+ controlProps.label = label ?? value.label;
3806
+ }
3807
+ return {
3808
+ control,
3809
+ controlProps,
3810
+ layout
3811
+ };
3812
+ }
3813
+ function OriginalControl({ control, controlProps }) {
3814
+ const { value } = control;
3815
+ return /* @__PURE__ */ React26.createElement(import_editor_editing_panel3.BaseControl, { type: value.type, props: controlProps });
3816
+ }
3817
+ function getControlLayout(control) {
3818
+ return control.value.meta?.layout || import_editor_editing_panel3.controlsRegistry.getLayout(control.value.type);
3819
+ }
3820
+ function populateChildControlProps(props) {
3821
+ if (props.childControlType) {
3822
+ const childComponent = import_editor_editing_panel3.controlsRegistry.get(props.childControlType);
3823
+ const childPropType = import_editor_editing_panel3.controlsRegistry.getPropTypeUtil(props.childControlType);
3824
+ props = {
3825
+ ...props,
3826
+ childControlConfig: {
3827
+ component: childComponent,
3828
+ props: props.childControlProps || {},
3829
+ propTypeUtil: childPropType
3830
+ }
3831
+ };
3832
+ }
3833
+ return props;
3734
3834
  }
3735
3835
 
3736
3836
  // src/components/instance-editing-panel/override-props-group.tsx
@@ -3739,11 +3839,11 @@ function OverridePropsGroup({ group, props, overrides }) {
3739
3839
  const handleClick = () => {
3740
3840
  setIsOpen(!isOpen);
3741
3841
  };
3742
- const id2 = (0, import_react15.useId)();
3842
+ const id2 = (0, import_react16.useId)();
3743
3843
  const labelId = `label-${id2}`;
3744
3844
  const contentId = `content-${id2}`;
3745
3845
  const title = group.label;
3746
- return /* @__PURE__ */ React26.createElement(import_ui21.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ React26.createElement(
3846
+ return /* @__PURE__ */ React27.createElement(import_ui21.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ React27.createElement(
3747
3847
  import_ui21.ListItemButton,
3748
3848
  {
3749
3849
  id: labelId,
@@ -3753,7 +3853,7 @@ function OverridePropsGroup({ group, props, overrides }) {
3753
3853
  p: 0,
3754
3854
  sx: { "&:hover": { backgroundColor: "transparent" } }
3755
3855
  },
3756
- /* @__PURE__ */ React26.createElement(import_ui21.Stack, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React26.createElement(
3856
+ /* @__PURE__ */ React27.createElement(import_ui21.Stack, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React27.createElement(
3757
3857
  import_ui21.ListItemText,
3758
3858
  {
3759
3859
  secondary: title,
@@ -3761,8 +3861,8 @@ function OverridePropsGroup({ group, props, overrides }) {
3761
3861
  sx: { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 }
3762
3862
  }
3763
3863
  )),
3764
- /* @__PURE__ */ React26.createElement(import_editor_ui11.CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
3765
- ), /* @__PURE__ */ React26.createElement(import_ui21.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React26.createElement(import_ui21.Stack, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React26.createElement(
3864
+ /* @__PURE__ */ React27.createElement(import_editor_ui11.CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
3865
+ ), /* @__PURE__ */ React27.createElement(import_ui21.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React27.createElement(import_ui21.Stack, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React27.createElement(
3766
3866
  OverridePropControl,
3767
3867
  {
3768
3868
  key: overrideKey,
@@ -3779,7 +3879,7 @@ function InstanceEditingPanel() {
3779
3879
  const overrides = settings?.overrides?.value;
3780
3880
  const component = useComponent(componentId ?? null);
3781
3881
  const overridableProps = useOverridableProps(componentId ?? null);
3782
- const componentInstanceId = (0, import_editor_elements14.useSelectedElement)()?.element?.id ?? null;
3882
+ const componentInstanceId = (0, import_editor_elements15.useSelectedElement)()?.element?.id ?? null;
3783
3883
  if (!componentId || !overridableProps || !component) {
3784
3884
  return null;
3785
3885
  }
@@ -3788,40 +3888,31 @@ function InstanceEditingPanel() {
3788
3888
  const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
3789
3889
  const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
3790
3890
  const isEmpty = groups.length === 0 || Object.keys(overridableProps.props).length === 0;
3791
- return /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement(import_editor_panels3.PanelHeader, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React27.createElement(import_ui22.Stack, { direction: "row", alignContent: "space-between", flexGrow: 1 }, /* @__PURE__ */ React27.createElement(import_ui22.Stack, { direction: "row", alignItems: "center", justifyContent: "start", gap: 1, flexGrow: 1 }, /* @__PURE__ */ React27.createElement(import_icons14.ComponentsIcon, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React27.createElement(import_editor_panels3.PanelHeaderTitle, null, component.name)), /* @__PURE__ */ React27.createElement(import_ui22.Tooltip, { title: panelTitle }, /* @__PURE__ */ React27.createElement(import_ui22.IconButton, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React27.createElement(import_icons14.PencilIcon, { fontSize: "tiny" }))))), /* @__PURE__ */ React27.createElement(import_editor_panels3.PanelBody, null, /* @__PURE__ */ React27.createElement(import_editor_controls4.ControlAdornmentsProvider, { items: (0, import_editor_editing_panel5.getFieldIndicators)("settings") }, isEmpty ? /* @__PURE__ */ React27.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React27.createElement(import_ui22.Stack, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React27.createElement(
3891
+ return /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement(import_editor_panels3.PanelHeader, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React28.createElement(import_ui22.Stack, { direction: "row", alignContent: "space-between", flexGrow: 1 }, /* @__PURE__ */ React28.createElement(import_ui22.Stack, { direction: "row", alignItems: "center", justifyContent: "start", gap: 1, flexGrow: 1 }, /* @__PURE__ */ React28.createElement(import_icons14.ComponentsIcon, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React28.createElement(import_editor_panels3.PanelHeaderTitle, null, component.name)), /* @__PURE__ */ React28.createElement(import_ui22.Tooltip, { title: panelTitle }, /* @__PURE__ */ React28.createElement(import_ui22.IconButton, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React28.createElement(import_icons14.PencilIcon, { fontSize: "tiny" }))))), /* @__PURE__ */ React28.createElement(import_editor_panels3.PanelBody, null, /* @__PURE__ */ React28.createElement(import_editor_controls4.ControlAdornmentsProvider, { items: (0, import_editor_editing_panel5.getFieldIndicators)("settings") }, isEmpty ? /* @__PURE__ */ React28.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React28.createElement(import_ui22.Stack, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React28.createElement(React28.Fragment, { key: group.id }, /* @__PURE__ */ React28.createElement(
3792
3892
  OverridePropsGroup,
3793
3893
  {
3794
- key: group.id,
3795
3894
  group,
3796
3895
  props: overridableProps.props,
3797
3896
  overrides
3798
3897
  }
3799
- ))))));
3898
+ ), /* @__PURE__ */ React28.createElement(import_ui22.Divider, null)))))));
3800
3899
  }
3801
3900
 
3802
3901
  // src/components/overridable-props/overridable-prop-control.tsx
3803
3902
  var React29 = __toESM(require("react"));
3804
3903
  var import_editor_controls5 = require("@elementor/editor-controls");
3805
3904
  var import_editor_editing_panel6 = require("@elementor/editor-editing-panel");
3806
-
3807
- // src/provider/overridable-prop-context.tsx
3808
- var React28 = __toESM(require("react"));
3809
- var import_react16 = require("react");
3810
- var OverridablePropContext = (0, import_react16.createContext)(null);
3811
- function OverridablePropProvider({ children, ...props }) {
3812
- return /* @__PURE__ */ React28.createElement(OverridablePropContext.Provider, { value: props }, children);
3813
- }
3814
- var useOverridablePropValue = () => (0, import_react16.useContext)(OverridablePropContext)?.value;
3815
-
3816
- // src/components/overridable-props/overridable-prop-control.tsx
3817
3905
  function OverridablePropControl({
3818
- OriginalControl,
3906
+ OriginalControl: OriginalControl2,
3819
3907
  ...props
3820
3908
  }) {
3821
3909
  const { elementType } = (0, import_editor_editing_panel6.useElement)();
3822
3910
  const { value, bind, setValue, placeholder, ...propContext } = (0, import_editor_controls5.useBoundProp)(componentOverridablePropTypeUtil);
3823
3911
  const componentId = useCurrentComponentId();
3824
3912
  const overridableProps = useOverridableProps(componentId);
3913
+ const filteredReplacements = (0, import_editor_editing_panel6.getControlReplacements)().filter(
3914
+ (r) => !r.id || r.id !== OVERRIDABLE_PROP_REPLACEMENT_ID
3915
+ );
3825
3916
  if (!componentId) {
3826
3917
  return null;
3827
3918
  }
@@ -3829,6 +3920,7 @@ function OverridablePropControl({
3829
3920
  throw new Error("Override key is required");
3830
3921
  }
3831
3922
  const isComponentInstance2 = elementType.key === "e-component";
3923
+ const overridablePropData = overridableProps?.props?.[value.override_key];
3832
3924
  const setOverridableValue = (newValue) => {
3833
3925
  const propValue2 = {
3834
3926
  ...value,
@@ -3836,14 +3928,18 @@ function OverridablePropControl({
3836
3928
  };
3837
3929
  setValue(propValue2);
3838
3930
  if (!isComponentInstance2) {
3839
- const existingProp = overridableProps?.props?.[propValue2.override_key];
3840
- updateOverridableProp(componentId, propValue2, existingProp?.originPropFields);
3931
+ updateOverridableProp(componentId, propValue2, overridablePropData?.originPropFields);
3841
3932
  }
3842
3933
  };
3843
3934
  const defaultPropType = elementType.propsSchema[bind];
3935
+ const overridePropType = overridablePropData ? getPropTypeForComponentOverride(overridablePropData) : void 0;
3936
+ const resolvedPropType = overridePropType ?? defaultPropType;
3937
+ if (!resolvedPropType) {
3938
+ return null;
3939
+ }
3844
3940
  const propType = (0, import_editor_editing_panel6.createTopLevelObjectType)({
3845
3941
  schema: {
3846
- [bind]: isComponentInstance2 && overridableProps ? getPropTypeForComponentOverride(overridableProps.props[value.override_key]) ?? defaultPropType : defaultPropType
3942
+ [bind]: resolvedPropType
3847
3943
  }
3848
3944
  });
3849
3945
  const propValue = isComponentInstance2 ? (value.origin_value?.value).override_value : value.origin_value;
@@ -3859,7 +3955,7 @@ function OverridablePropControl({
3859
3955
  },
3860
3956
  placeholder: objectPlaceholder
3861
3957
  },
3862
- /* @__PURE__ */ React29.createElement(import_editor_controls5.PropKeyProvider, { bind }, /* @__PURE__ */ React29.createElement(import_editor_controls5.ControlReplacementsProvider, { replacements: [] }, /* @__PURE__ */ React29.createElement(OriginalControl, { ...props })))
3958
+ /* @__PURE__ */ React29.createElement(import_editor_controls5.PropKeyProvider, { bind }, /* @__PURE__ */ React29.createElement(import_editor_controls5.ControlReplacementsProvider, { replacements: filteredReplacements }, /* @__PURE__ */ React29.createElement(OriginalControl2, { ...props })))
3863
3959
  ));
3864
3960
  }
3865
3961
 
@@ -3867,7 +3963,7 @@ function OverridablePropControl({
3867
3963
  var React31 = __toESM(require("react"));
3868
3964
  var import_editor_controls6 = require("@elementor/editor-controls");
3869
3965
  var import_editor_editing_panel7 = require("@elementor/editor-editing-panel");
3870
- var import_editor_elements15 = require("@elementor/editor-elements");
3966
+ var import_editor_elements16 = require("@elementor/editor-elements");
3871
3967
  var import_ui24 = require("@elementor/ui");
3872
3968
  var import_i18n28 = require("@wordpress/i18n");
3873
3969
 
@@ -4036,6 +4132,7 @@ function Content2({ componentId, overridableProps }) {
4036
4132
  } = (0, import_editor_editing_panel7.useElement)();
4037
4133
  const { value, bind, propType } = (0, import_editor_controls6.useBoundProp)();
4038
4134
  const contextOverridableValue = useOverridablePropValue();
4135
+ const componentInstanceElement = useComponentInstanceElement();
4039
4136
  const { value: boundPropOverridableValue, setValue: setOverridableValue } = (0, import_editor_controls6.useBoundProp)(
4040
4137
  componentOverridablePropTypeUtil
4041
4138
  );
@@ -4045,20 +4142,20 @@ function Content2({ componentId, overridableProps }) {
4045
4142
  });
4046
4143
  const triggerProps = (0, import_ui24.bindTrigger)(popupState);
4047
4144
  const popoverProps = (0, import_ui24.bindPopover)(popupState);
4048
- const { elType } = (0, import_editor_elements15.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
4145
+ const { elType } = (0, import_editor_elements16.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
4049
4146
  const handleSubmit = ({ label, group }) => {
4050
4147
  const propTypeDefault = propType.default ?? {};
4051
- const originValue = (!overridableValue ? value : overridableValue?.origin_value) ?? propTypeDefault;
4148
+ const originValue = resolveOverridePropValue(overridableValue?.origin_value) ?? value ?? propTypeDefault;
4052
4149
  const matchingOverridableProp = overridableValue ? overridableProps?.props?.[overridableValue.override_key] : void 0;
4053
4150
  const overridablePropConfig = setOverridableProp({
4054
4151
  componentId,
4055
4152
  overrideKey: overridableValue?.override_key ?? null,
4056
- elementId,
4153
+ elementId: componentInstanceElement?.element.id ?? elementId,
4057
4154
  label,
4058
4155
  groupId: group,
4059
4156
  propKey: bind,
4060
4157
  elType: elType ?? "widget",
4061
- widgetType: elementType.key,
4158
+ widgetType: componentInstanceElement?.elementType.key ?? elementType.key,
4062
4159
  originValue,
4063
4160
  originPropFields: matchingOverridableProp?.originPropFields
4064
4161
  });
@@ -4107,7 +4204,7 @@ function isPropAllowed(bind) {
4107
4204
  }
4108
4205
 
4109
4206
  // src/hooks/regenerate-override-keys.ts
4110
- var import_editor_elements16 = require("@elementor/editor-elements");
4207
+ var import_editor_elements17 = require("@elementor/editor-elements");
4111
4208
  var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
4112
4209
  var import_utils8 = require("@elementor/utils");
4113
4210
  function initRegenerateOverrideKeys() {
@@ -4128,11 +4225,11 @@ function regenerateOverrideKeysForContainers(result) {
4128
4225
  });
4129
4226
  }
4130
4227
  function regenerateOverrideKeysRecursive(elementId) {
4131
- const container = (0, import_editor_elements16.getContainer)(elementId);
4228
+ const container = (0, import_editor_elements17.getContainer)(elementId);
4132
4229
  if (!container) {
4133
4230
  return;
4134
4231
  }
4135
- (0, import_editor_elements16.getAllDescendants)(container).forEach(regenerateOverrideKeys);
4232
+ (0, import_editor_elements17.getAllDescendants)(container).forEach(regenerateOverrideKeys);
4136
4233
  }
4137
4234
  function regenerateOverrideKeys(element) {
4138
4235
  if (!isComponentInstance(element.model.toJSON())) {
@@ -4166,7 +4263,7 @@ function regenerateOverrideKeys(element) {
4166
4263
  }
4167
4264
  }
4168
4265
  };
4169
- (0, import_editor_elements16.updateElementSettings)({
4266
+ (0, import_editor_elements17.updateElementSettings)({
4170
4267
  id: element.id,
4171
4268
  props: { component_instance: newComponentInstance },
4172
4269
  withHistory: false
@@ -4190,7 +4287,7 @@ var import_editor_mcp3 = require("@elementor/editor-mcp");
4190
4287
 
4191
4288
  // src/mcp/save-as-component-tool.ts
4192
4289
  var import_editor_canvas8 = require("@elementor/editor-canvas");
4193
- var import_editor_elements17 = require("@elementor/editor-elements");
4290
+ var import_editor_elements18 = require("@elementor/editor-elements");
4194
4291
  var import_editor_mcp2 = require("@elementor/editor-mcp");
4195
4292
  var import_http_client2 = require("@elementor/http-client");
4196
4293
  var import_schema6 = require("@elementor/schema");
@@ -4228,7 +4325,7 @@ var ERROR_MESSAGES3 = {
4228
4325
  var handleSaveAsComponent = async (params) => {
4229
4326
  const { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;
4230
4327
  const validElementTypes = getValidElementTypes();
4231
- const container = (0, import_editor_elements17.getContainer)(elementId);
4328
+ const container = (0, import_editor_elements18.getContainer)(elementId);
4232
4329
  if (!container) {
4233
4330
  throw new Error(ERROR_MESSAGES3.ELEMENT_NOT_FOUND);
4234
4331
  }
@@ -4275,7 +4372,7 @@ function enrichOverridableProps(input, rootElement) {
4275
4372
  }
4276
4373
  const elType = element.elType;
4277
4374
  const widgetType = element.widgetType || element.elType;
4278
- const elementType = (0, import_editor_elements17.getElementType)(widgetType);
4375
+ const elementType = (0, import_editor_elements18.getElementType)(widgetType);
4279
4376
  if (!elementType) {
4280
4377
  throw new Error(
4281
4378
  `Element type "${widgetType}" is not atomic or does not have a settings schema. Cannot expose property "${propKey}" for element "${elementId}".`
@@ -4344,7 +4441,7 @@ function findElementById(root, targetId) {
4344
4441
  return null;
4345
4442
  }
4346
4443
  function getValidElementTypes() {
4347
- const types = (0, import_editor_elements17.getWidgetsCache)();
4444
+ const types = (0, import_editor_elements18.getWidgetsCache)();
4348
4445
  if (!types) {
4349
4446
  return [];
4350
4447
  }
@@ -4531,7 +4628,7 @@ function PopulateStore() {
4531
4628
  }
4532
4629
 
4533
4630
  // src/prevent-circular-nesting.ts
4534
- var import_editor_elements18 = require("@elementor/editor-elements");
4631
+ var import_editor_elements19 = require("@elementor/editor-elements");
4535
4632
  var import_editor_notifications4 = require("@elementor/editor-notifications");
4536
4633
  var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
4537
4634
  var import_store64 = require("@elementor/store");
@@ -4626,7 +4723,7 @@ function blockCircularMove(args) {
4626
4723
  if (!container) {
4627
4724
  return false;
4628
4725
  }
4629
- const allElements = (0, import_editor_elements18.getAllDescendants)(container);
4726
+ const allElements = (0, import_editor_elements19.getAllDescendants)(container);
4630
4727
  return allElements.some((element) => {
4631
4728
  const componentId = extractComponentIdFromContainer(element);
4632
4729
  if (componentId === null) {
@@ -4687,7 +4784,7 @@ var componentsStylesProvider = (0, import_editor_styles_repository.createStylesP
4687
4784
  });
4688
4785
 
4689
4786
  // src/sync/create-components-before-save.ts
4690
- var import_editor_elements19 = require("@elementor/editor-elements");
4787
+ var import_editor_elements20 = require("@elementor/editor-elements");
4691
4788
  var import_store70 = require("@elementor/store");
4692
4789
  async function createComponentsBeforeSave({
4693
4790
  elements,
@@ -4755,7 +4852,7 @@ function shouldUpdateElement(element, uidToComponentId) {
4755
4852
  return { shouldUpdate: false, newComponentId: null };
4756
4853
  }
4757
4854
  function updateElementComponentId(elementId, componentId) {
4758
- (0, import_editor_elements19.updateElementSettings)({
4855
+ (0, import_editor_elements20.updateElementSettings)({
4759
4856
  id: elementId,
4760
4857
  props: {
4761
4858
  component_instance: {
@@ -4905,6 +5002,7 @@ function init() {
4905
5002
  indicator: OverridablePropIndicator
4906
5003
  });
4907
5004
  (0, import_editor_editing_panel8.registerControlReplacement)({
5005
+ id: OVERRIDABLE_PROP_REPLACEMENT_ID,
4908
5006
  component: OverridablePropControl,
4909
5007
  condition: ({ value }) => componentOverridablePropTypeUtil.isValid(value)
4910
5008
  });