@elementor/editor-components 3.35.0-489 → 3.35.0-490

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
@@ -44,7 +44,7 @@ var import_editor_panels5 = require("@elementor/editor-panels");
44
44
  var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
45
45
  var import_editor_v1_adapters14 = require("@elementor/editor-v1-adapters");
46
46
  var import_store80 = require("@elementor/store");
47
- var import_i18n30 = require("@wordpress/i18n");
47
+ var import_i18n31 = require("@wordpress/i18n");
48
48
 
49
49
  // src/component-instance-transformer.ts
50
50
  var import_editor_canvas = require("@elementor/editor-canvas");
@@ -146,6 +146,12 @@ var slice = (0, import_store2.__createSlice)({
146
146
  addUnpublished: (state, { payload }) => {
147
147
  state.unpublishedData.unshift(payload);
148
148
  },
149
+ removeUnpublished: (state, { payload }) => {
150
+ const uidsToRemove = Array.isArray(payload) ? payload : [payload];
151
+ state.unpublishedData = state.unpublishedData.filter(
152
+ (component) => !uidsToRemove.includes(component.uid)
153
+ );
154
+ },
149
155
  resetUnpublished: (state) => {
150
156
  state.unpublishedData = [];
151
157
  },
@@ -159,6 +165,9 @@ var slice = (0, import_store2.__createSlice)({
159
165
  addCreatedThisSession: (state, { payload }) => {
160
166
  state.createdThisSession.push(payload);
161
167
  },
168
+ removeCreatedThisSession: (state, { payload }) => {
169
+ state.createdThisSession = state.createdThisSession.filter((uid) => uid !== payload);
170
+ },
162
171
  archive: (state, { payload }) => {
163
172
  const component = state.data.find((comp) => comp.id === payload);
164
173
  if (component) {
@@ -2978,13 +2987,13 @@ var OVERRIDABLE_PROP_REPLACEMENT_ID = "overridable-prop";
2978
2987
  // src/components/create-component-form/create-component-form.tsx
2979
2988
  var React19 = __toESM(require("react"));
2980
2989
  var import_react10 = require("react");
2981
- var import_editor_elements10 = require("@elementor/editor-elements");
2990
+ var import_editor_elements11 = require("@elementor/editor-elements");
2982
2991
  var import_editor_notifications3 = require("@elementor/editor-notifications");
2983
2992
  var import_editor_ui11 = require("@elementor/editor-ui");
2984
2993
  var import_icons11 = require("@elementor/icons");
2985
2994
  var import_store47 = require("@elementor/store");
2986
2995
  var import_ui16 = require("@elementor/ui");
2987
- var import_i18n22 = require("@wordpress/i18n");
2996
+ var import_i18n23 = require("@wordpress/i18n");
2988
2997
 
2989
2998
  // src/prevent-non-atomic-nesting.ts
2990
2999
  var import_editor_canvas6 = require("@elementor/editor-canvas");
@@ -3105,9 +3114,11 @@ function findNonAtomicElementsInElement(element) {
3105
3114
  }
3106
3115
 
3107
3116
  // src/store/actions/create-unpublished-component.ts
3117
+ var import_editor_elements10 = require("@elementor/editor-elements");
3108
3118
  var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
3109
3119
  var import_store45 = require("@elementor/store");
3110
3120
  var import_utils4 = require("@elementor/utils");
3121
+ var import_i18n22 = require("@wordpress/i18n");
3111
3122
  async function createUnpublishedComponent({
3112
3123
  name,
3113
3124
  element,
@@ -3119,6 +3130,13 @@ async function createUnpublishedComponent({
3119
3130
  const generatedUid = uid ?? (0, import_utils4.generateUniqueId)("component");
3120
3131
  const componentBase = { uid: generatedUid, name };
3121
3132
  const elementDataWithOverridablesReverted = revertAllOverridablesInElementData(element);
3133
+ const container = (0, import_editor_elements10.getContainer)(element.id);
3134
+ const modelFromContainer = container?.model?.toJSON?.();
3135
+ const originalElement = {
3136
+ model: modelFromContainer ?? element,
3137
+ parentId: container?.parent?.id ?? "",
3138
+ index: container?.view?._index ?? 0
3139
+ };
3122
3140
  (0, import_store45.__dispatch)(
3123
3141
  slice.actions.addUnpublished({
3124
3142
  ...componentBase,
@@ -3135,9 +3153,30 @@ async function createUnpublishedComponent({
3135
3153
  component_name: name,
3136
3154
  ...eventData
3137
3155
  });
3138
- await (0, import_editor_v1_adapters5.__privateRunCommand)("document/save/auto");
3156
+ try {
3157
+ await (0, import_editor_v1_adapters5.__privateRunCommand)("document/save/auto");
3158
+ } catch (error) {
3159
+ restoreOriginalElement(originalElement, componentInstance.id);
3160
+ (0, import_store45.__dispatch)(slice.actions.removeUnpublished(generatedUid));
3161
+ (0, import_store45.__dispatch)(slice.actions.removeCreatedThisSession(generatedUid));
3162
+ throw error;
3163
+ }
3139
3164
  return { uid: generatedUid, instanceId: componentInstance.id };
3140
3165
  }
3166
+ function restoreOriginalElement(originalElement, componentInstanceId) {
3167
+ (0, import_editor_elements10.deleteElement)({ elementId: componentInstanceId, options: { useHistory: false } });
3168
+ const clonedModel = structuredClone(originalElement.model);
3169
+ (0, import_editor_elements10.createElements)({
3170
+ title: (0, import_i18n22.__)("Restore Element", "elementor"),
3171
+ elements: [
3172
+ {
3173
+ containerId: originalElement.parentId,
3174
+ model: clonedModel,
3175
+ options: { at: originalElement.index }
3176
+ }
3177
+ ]
3178
+ });
3179
+ }
3141
3180
 
3142
3181
  // src/components/create-component-form/hooks/use-form.ts
3143
3182
  var import_react9 = require("react");
@@ -3232,7 +3271,7 @@ function CreateComponentForm() {
3232
3271
  (0, import_editor_notifications3.notify)(notification);
3233
3272
  return;
3234
3273
  }
3235
- setElement({ element: event.detail.element, elementLabel: (0, import_editor_elements10.getElementLabel)(event.detail.element.id) });
3274
+ setElement({ element: event.detail.element, elementLabel: (0, import_editor_elements11.getElementLabel)(event.detail.element.id) });
3236
3275
  setAnchorPosition(event.detail.anchorPosition);
3237
3276
  eventData.current = getComponentEventData(event.detail.element, event.detail.options);
3238
3277
  trackComponentEvent({
@@ -3265,17 +3304,18 @@ function CreateComponentForm() {
3265
3304
  }
3266
3305
  (0, import_editor_notifications3.notify)({
3267
3306
  type: "success",
3268
- message: (0, import_i18n22.__)("Component created successfully.", "elementor"),
3307
+ message: (0, import_i18n23.__)("Component created successfully.", "elementor"),
3269
3308
  id: `component-saved-successfully-${uid}`
3270
3309
  });
3271
3310
  resetAndClosePopup();
3272
3311
  } catch {
3273
- const errorMessage = (0, import_i18n22.__)("Failed to create component. Please try again.", "elementor");
3312
+ const errorMessage = (0, import_i18n23.__)("Failed to create component. Please try again.", "elementor");
3274
3313
  (0, import_editor_notifications3.notify)({
3275
3314
  type: "error",
3276
3315
  message: errorMessage,
3277
3316
  id: "component-save-failed"
3278
3317
  });
3318
+ resetAndClosePopup();
3279
3319
  }
3280
3320
  };
3281
3321
  const resetAndClosePopup = () => {
@@ -3315,7 +3355,7 @@ function shouldOpenForm(element, componentsCount) {
3315
3355
  shouldOpen: false,
3316
3356
  notification: {
3317
3357
  type: "default",
3318
- message: (0, import_i18n22.__)(
3358
+ message: (0, import_i18n23.__)(
3319
3359
  "Components require atomic elements only. Remove widgets to create this component.",
3320
3360
  "elementor"
3321
3361
  ),
@@ -3329,7 +3369,7 @@ function shouldOpenForm(element, componentsCount) {
3329
3369
  notification: {
3330
3370
  type: "default",
3331
3371
  /* translators: %s is the maximum number of components */
3332
- message: (0, import_i18n22.__)(
3372
+ message: (0, import_i18n23.__)(
3333
3373
  `You've reached the limit of %s components. Please remove an existing one to create a new component.`,
3334
3374
  "elementor"
3335
3375
  ).replace("%s", MAX_COMPONENTS.toString()),
@@ -3365,10 +3405,10 @@ var Form2 = ({
3365
3405
  }
3366
3406
  };
3367
3407
  const texts = {
3368
- heading: (0, import_i18n22.__)("Create component", "elementor"),
3369
- name: (0, import_i18n22.__)("Name", "elementor"),
3370
- cancel: (0, import_i18n22.__)("Cancel", "elementor"),
3371
- create: (0, import_i18n22.__)("Create", "elementor")
3408
+ heading: (0, import_i18n23.__)("Create component", "elementor"),
3409
+ name: (0, import_i18n23.__)("Name", "elementor"),
3410
+ cancel: (0, import_i18n23.__)("Cancel", "elementor"),
3411
+ create: (0, import_i18n23.__)("Create", "elementor")
3372
3412
  };
3373
3413
  const nameInputId = "component-name";
3374
3414
  return /* @__PURE__ */ React19.createElement(import_editor_ui11.Form, { onSubmit: handleSubmit }, /* @__PURE__ */ React19.createElement(import_ui16.Stack, { alignItems: "start", width: "268px" }, /* @__PURE__ */ React19.createElement(
@@ -3424,7 +3464,7 @@ function updateCurrentComponent({
3424
3464
  var React20 = __toESM(require("react"));
3425
3465
  var import_react12 = require("react");
3426
3466
  var import_react_dom = require("react-dom");
3427
- var import_i18n23 = require("@wordpress/i18n");
3467
+ var import_i18n24 = require("@wordpress/i18n");
3428
3468
 
3429
3469
  // src/hooks/use-canvas-document.ts
3430
3470
  var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
@@ -3550,7 +3590,7 @@ function Backdrop({
3550
3590
  onKeyDown: handleKeyDown,
3551
3591
  role: "button",
3552
3592
  tabIndex: 0,
3553
- "aria-label": (0, import_i18n23.__)("Exit component editing mode", "elementor")
3593
+ "aria-label": (0, import_i18n24.__)("Exit component editing mode", "elementor")
3554
3594
  }
3555
3595
  );
3556
3596
  }
@@ -3698,37 +3738,37 @@ var React22 = __toESM(require("react"));
3698
3738
  var import_editor_ui12 = require("@elementor/editor-ui");
3699
3739
  var import_icons12 = require("@elementor/icons");
3700
3740
  var import_ui17 = require("@elementor/ui");
3701
- var import_i18n24 = require("@wordpress/i18n");
3741
+ var import_i18n25 = require("@wordpress/i18n");
3702
3742
  var openEditModeDialog = (lockedBy) => {
3703
3743
  (0, import_editor_ui12.openDialog)({
3704
3744
  component: /* @__PURE__ */ React22.createElement(EditModeDialog, { lockedBy })
3705
3745
  });
3706
3746
  };
3707
3747
  var EditModeDialog = ({ lockedBy }) => {
3708
- const content = (0, import_i18n24.__)("%s is currently editing this document", "elementor").replace("%s", lockedBy);
3709
- return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(import_ui17.DialogHeader, { logo: false }, /* @__PURE__ */ React22.createElement(import_ui17.Box, { display: "flex", alignItems: "center", gap: 1 }, /* @__PURE__ */ React22.createElement(import_ui17.Icon, { color: "secondary" }, /* @__PURE__ */ React22.createElement(import_icons12.InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ React22.createElement(import_ui17.Typography, { variant: "subtitle1" }, content))), /* @__PURE__ */ React22.createElement(import_ui17.DialogContent, null, /* @__PURE__ */ React22.createElement(import_ui17.Stack, { spacing: 2, direction: "column" }, /* @__PURE__ */ React22.createElement(import_ui17.Typography, { variant: "body2" }, (0, import_i18n24.__)(
3748
+ const content = (0, import_i18n25.__)("%s is currently editing this document", "elementor").replace("%s", lockedBy);
3749
+ return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(import_ui17.DialogHeader, { logo: false }, /* @__PURE__ */ React22.createElement(import_ui17.Box, { display: "flex", alignItems: "center", gap: 1 }, /* @__PURE__ */ React22.createElement(import_ui17.Icon, { color: "secondary" }, /* @__PURE__ */ React22.createElement(import_icons12.InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ React22.createElement(import_ui17.Typography, { variant: "subtitle1" }, content))), /* @__PURE__ */ React22.createElement(import_ui17.DialogContent, null, /* @__PURE__ */ React22.createElement(import_ui17.Stack, { spacing: 2, direction: "column" }, /* @__PURE__ */ React22.createElement(import_ui17.Typography, { variant: "body2" }, (0, import_i18n25.__)(
3710
3750
  "You can wait for them to finish or reach out to coordinate your changes together.",
3711
3751
  "elementor"
3712
- )), /* @__PURE__ */ React22.createElement(import_ui17.DialogActions, null, /* @__PURE__ */ React22.createElement(import_ui17.Button, { color: "secondary", variant: "contained", onClick: import_editor_ui12.closeDialog }, (0, import_i18n24.__)("Close", "elementor"))))));
3752
+ )), /* @__PURE__ */ React22.createElement(import_ui17.DialogActions, null, /* @__PURE__ */ React22.createElement(import_ui17.Button, { color: "secondary", variant: "contained", onClick: import_editor_ui12.closeDialog }, (0, import_i18n25.__)("Close", "elementor"))))));
3713
3753
  };
3714
3754
 
3715
3755
  // src/components/instance-editing-panel/instance-editing-panel.tsx
3716
3756
  var React28 = __toESM(require("react"));
3717
3757
  var import_editor_controls4 = require("@elementor/editor-controls");
3718
3758
  var import_editor_editing_panel5 = require("@elementor/editor-editing-panel");
3719
- var import_editor_elements15 = require("@elementor/editor-elements");
3759
+ var import_editor_elements16 = require("@elementor/editor-elements");
3720
3760
  var import_editor_panels4 = require("@elementor/editor-panels");
3721
3761
  var import_editor_ui14 = require("@elementor/editor-ui");
3722
3762
  var import_icons14 = require("@elementor/icons");
3723
3763
  var import_ui22 = require("@elementor/ui");
3724
- var import_i18n26 = require("@wordpress/i18n");
3764
+ var import_i18n27 = require("@wordpress/i18n");
3725
3765
 
3726
3766
  // src/hooks/use-component-instance-settings.ts
3727
3767
  var import_editor_editing_panel2 = require("@elementor/editor-editing-panel");
3728
- var import_editor_elements11 = require("@elementor/editor-elements");
3768
+ var import_editor_elements12 = require("@elementor/editor-elements");
3729
3769
  function useComponentInstanceSettings() {
3730
3770
  const { element } = (0, import_editor_editing_panel2.useElement)();
3731
- const settings = (0, import_editor_elements11.useElementSetting)(element.id, "component_instance");
3771
+ const settings = (0, import_editor_elements12.useElementSetting)(element.id, "component_instance");
3732
3772
  return componentInstancePropTypeUtil.extract(settings);
3733
3773
  }
3734
3774
 
@@ -3736,13 +3776,13 @@ function useComponentInstanceSettings() {
3736
3776
  var React23 = __toESM(require("react"));
3737
3777
  var import_icons13 = require("@elementor/icons");
3738
3778
  var import_ui18 = require("@elementor/ui");
3739
- var import_i18n25 = require("@wordpress/i18n");
3779
+ var import_i18n26 = require("@wordpress/i18n");
3740
3780
  var EmptyState2 = ({ onEditComponent }) => {
3741
3781
  const { canEdit } = useComponentsPermissions();
3742
- const message = canEdit ? (0, import_i18n25.__)(
3782
+ const message = canEdit ? (0, import_i18n26.__)(
3743
3783
  "Edit the component to add properties, manage them or update the design across all instances.",
3744
3784
  "elementor"
3745
- ) : (0, import_i18n25.__)(
3785
+ ) : (0, import_i18n26.__)(
3746
3786
  "With your current role, you cannot edit this component. Contact an administrator to add properties.",
3747
3787
  "elementor"
3748
3788
  );
@@ -3757,9 +3797,9 @@ var EmptyState2 = ({ onEditComponent }) => {
3757
3797
  gap: 1.5
3758
3798
  },
3759
3799
  /* @__PURE__ */ React23.createElement(import_icons13.ComponentPropListIcon, { fontSize: "large" }),
3760
- /* @__PURE__ */ React23.createElement(import_ui18.Typography, { align: "center", variant: "subtitle2" }, (0, import_i18n25.__)("No properties yet", "elementor")),
3800
+ /* @__PURE__ */ React23.createElement(import_ui18.Typography, { align: "center", variant: "subtitle2" }, (0, import_i18n26.__)("No properties yet", "elementor")),
3761
3801
  /* @__PURE__ */ React23.createElement(import_ui18.Typography, { align: "center", variant: "caption", maxWidth: "170px" }, message),
3762
- canEdit && /* @__PURE__ */ React23.createElement(import_ui18.Button, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React23.createElement(import_icons13.PencilIcon, { fontSize: "small" }), (0, import_i18n25.__)("Edit component", "elementor"))
3802
+ canEdit && /* @__PURE__ */ React23.createElement(import_ui18.Button, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React23.createElement(import_icons13.PencilIcon, { fontSize: "small" }), (0, import_i18n26.__)("Edit component", "elementor"))
3763
3803
  );
3764
3804
  };
3765
3805
 
@@ -3774,13 +3814,13 @@ var import_ui21 = require("@elementor/ui");
3774
3814
  var React26 = __toESM(require("react"));
3775
3815
  var import_editor_controls3 = require("@elementor/editor-controls");
3776
3816
  var import_editor_editing_panel3 = require("@elementor/editor-editing-panel");
3777
- var import_editor_elements14 = require("@elementor/editor-elements");
3817
+ var import_editor_elements15 = require("@elementor/editor-elements");
3778
3818
  var import_ui20 = require("@elementor/ui");
3779
3819
 
3780
3820
  // src/hooks/use-controls-by-widget-type.ts
3781
- var import_editor_elements12 = require("@elementor/editor-elements");
3821
+ var import_editor_elements13 = require("@elementor/editor-elements");
3782
3822
  function useControlsByWidgetType(type) {
3783
- const elementType = (0, import_editor_elements12.getElementType)(type);
3823
+ const elementType = (0, import_editor_elements13.getElementType)(type);
3784
3824
  if (!elementType) {
3785
3825
  return {};
3786
3826
  }
@@ -3888,7 +3928,7 @@ function updateOverridableProp(componentId, propValue, originPropFields) {
3888
3928
  }
3889
3929
 
3890
3930
  // src/utils/get-prop-type-for-component-override.ts
3891
- var import_editor_elements13 = require("@elementor/editor-elements");
3931
+ var import_editor_elements14 = require("@elementor/editor-elements");
3892
3932
  var getPropTypeForComponentOverride = (overridableProp) => {
3893
3933
  if (overridableProp.originPropFields) {
3894
3934
  return getPropType(overridableProp.originPropFields);
@@ -3902,7 +3942,7 @@ var getPropTypeForComponentOverride = (overridableProp) => {
3902
3942
  });
3903
3943
  };
3904
3944
  function getPropType({ widgetType, propKey }) {
3905
- const widgetPropsSchema = (0, import_editor_elements13.getWidgetsCache)()?.[widgetType]?.atomic_props_schema;
3945
+ const widgetPropsSchema = (0, import_editor_elements14.getWidgetsCache)()?.[widgetType]?.atomic_props_schema;
3906
3946
  return widgetPropsSchema?.[propKey];
3907
3947
  }
3908
3948
 
@@ -3983,14 +4023,14 @@ function OverrideControl({ overridableProp, overrides }) {
3983
4023
  overridableProp.label
3984
4024
  );
3985
4025
  const { elementId, widgetType, elType, propKey } = overridableProp.originPropFields ?? overridableProp;
3986
- const elementContainer = (0, import_editor_elements14.getContainer)(elementId);
4026
+ const elementContainer = (0, import_editor_elements15.getContainer)(elementId);
3987
4027
  if (!elementContainer) {
3988
4028
  throw new OverrideControlInnerElementNotFoundError({
3989
4029
  context: { componentId: componentInstanceId, elementId }
3990
4030
  });
3991
4031
  }
3992
4032
  const type = elType === "widget" ? widgetType : elType;
3993
- const elementType = (0, import_editor_elements14.getElementType)(type);
4033
+ const elementType = (0, import_editor_elements15.getElementType)(type);
3994
4034
  if (!elementType) {
3995
4035
  return null;
3996
4036
  }
@@ -4142,11 +4182,11 @@ function InstanceEditingPanel() {
4142
4182
  const overrides = settings?.overrides?.value;
4143
4183
  const component = useComponent(componentId ?? null);
4144
4184
  const overridableProps = useOverridableProps(componentId ?? null);
4145
- const componentInstanceId = (0, import_editor_elements15.useSelectedElement)()?.element?.id ?? null;
4185
+ const componentInstanceId = (0, import_editor_elements16.useSelectedElement)()?.element?.id ?? null;
4146
4186
  if (!componentId || !overridableProps || !component) {
4147
4187
  return null;
4148
4188
  }
4149
- const panelTitle = (0, import_i18n26.__)("Edit %s", "elementor").replace("%s", component.name);
4189
+ const panelTitle = (0, import_i18n27.__)("Edit %s", "elementor").replace("%s", component.name);
4150
4190
  const handleEditComponent = () => switchToComponent(componentId, componentInstanceId);
4151
4191
  const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
4152
4192
  const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
@@ -4237,9 +4277,9 @@ function ControlWithReplacements({
4237
4277
  var React31 = __toESM(require("react"));
4238
4278
  var import_editor_controls6 = require("@elementor/editor-controls");
4239
4279
  var import_editor_editing_panel7 = require("@elementor/editor-editing-panel");
4240
- var import_editor_elements16 = require("@elementor/editor-elements");
4280
+ var import_editor_elements17 = require("@elementor/editor-elements");
4241
4281
  var import_ui24 = require("@elementor/ui");
4242
- var import_i18n28 = require("@wordpress/i18n");
4282
+ var import_i18n29 = require("@wordpress/i18n");
4243
4283
 
4244
4284
  // src/store/actions/set-overridable-prop.ts
4245
4285
  var import_store58 = require("@elementor/store");
@@ -4324,7 +4364,7 @@ var React30 = __toESM(require("react"));
4324
4364
  var import_react16 = require("react");
4325
4365
  var import_icons15 = require("@elementor/icons");
4326
4366
  var import_ui23 = require("@elementor/ui");
4327
- var import_i18n27 = require("@wordpress/i18n");
4367
+ var import_i18n28 = require("@wordpress/i18n");
4328
4368
  var SIZE2 = "tiny";
4329
4369
  var IconContainer = (0, import_ui23.styled)(import_ui23.Box)`
4330
4370
  pointer-events: none;
@@ -4384,7 +4424,7 @@ var Indicator2 = (0, import_react16.forwardRef)(({ isOpen, isOverridable, ...pro
4384
4424
  IconContainer,
4385
4425
  {
4386
4426
  className: "icon",
4387
- "aria-label": isOverridable ? (0, import_i18n27.__)("Overridable property", "elementor") : (0, import_i18n27.__)("Make prop overridable", "elementor")
4427
+ "aria-label": isOverridable ? (0, import_i18n28.__)("Overridable property", "elementor") : (0, import_i18n28.__)("Make prop overridable", "elementor")
4388
4428
  },
4389
4429
  isOverridable ? /* @__PURE__ */ React30.createElement(import_icons15.CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React30.createElement(import_icons15.PlusIcon, { fontSize: SIZE2 })
4390
4430
  )));
@@ -4429,7 +4469,7 @@ function Content2({ componentId, overridableProps }) {
4429
4469
  });
4430
4470
  const triggerProps = (0, import_ui24.bindTrigger)(popupState);
4431
4471
  const popoverProps = (0, import_ui24.bindPopover)(popupState);
4432
- const { elType } = (0, import_editor_elements16.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
4472
+ const { elType } = (0, import_editor_elements17.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
4433
4473
  const handleSubmit = ({ label, group }) => {
4434
4474
  const propTypeDefault = propType.default ?? {};
4435
4475
  const originValue = resolveOverridePropValue(overridableValue?.origin_value) ?? value ?? propTypeDefault;
@@ -4456,7 +4496,7 @@ function Content2({ componentId, overridableProps }) {
4456
4496
  popupState.close();
4457
4497
  };
4458
4498
  const overridableConfig = overridableValue ? getOverridableProp({ componentId, overrideKey: overridableValue.override_key }) : void 0;
4459
- return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(import_ui24.Tooltip, { placement: "top", title: (0, import_i18n28.__)("Override Property", "elementor") }, /* @__PURE__ */ React31.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React31.createElement(
4499
+ return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(import_ui24.Tooltip, { placement: "top", title: (0, import_i18n29.__)("Override Property", "elementor") }, /* @__PURE__ */ React31.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React31.createElement(
4460
4500
  import_ui24.Popover,
4461
4501
  {
4462
4502
  disableScrollLock: true,
@@ -4496,7 +4536,7 @@ var import_editor_mcp2 = require("@elementor/editor-mcp");
4496
4536
 
4497
4537
  // src/mcp/save-as-component-tool.ts
4498
4538
  var import_editor_canvas7 = require("@elementor/editor-canvas");
4499
- var import_editor_elements17 = require("@elementor/editor-elements");
4539
+ var import_editor_elements18 = require("@elementor/editor-elements");
4500
4540
  var import_editor_mcp = require("@elementor/editor-mcp");
4501
4541
  var import_http_client2 = require("@elementor/http-client");
4502
4542
  var import_schema6 = require("@elementor/schema");
@@ -4534,7 +4574,7 @@ var ERROR_MESSAGES3 = {
4534
4574
  var handleSaveAsComponent = async (params) => {
4535
4575
  const { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;
4536
4576
  const validElementTypes = getValidElementTypes();
4537
- const container = (0, import_editor_elements17.getContainer)(elementId);
4577
+ const container = (0, import_editor_elements18.getContainer)(elementId);
4538
4578
  if (!container) {
4539
4579
  throw new Error(ERROR_MESSAGES3.ELEMENT_NOT_FOUND);
4540
4580
  }
@@ -4588,7 +4628,7 @@ function enrichOverridableProps(input, rootElement) {
4588
4628
  }
4589
4629
  const elType = element.elType;
4590
4630
  const widgetType = element.widgetType || element.elType;
4591
- const elementType = (0, import_editor_elements17.getElementType)(widgetType);
4631
+ const elementType = (0, import_editor_elements18.getElementType)(widgetType);
4592
4632
  if (!elementType) {
4593
4633
  throw new Error(
4594
4634
  `Element type "${widgetType}" is not atomic or does not have a settings schema. Cannot expose property "${propKey}" for element "${elementId}".`
@@ -4657,7 +4697,7 @@ function findElementById(root, targetId) {
4657
4697
  return null;
4658
4698
  }
4659
4699
  function getValidElementTypes() {
4660
- const types = (0, import_editor_elements17.getWidgetsCache)();
4700
+ const types = (0, import_editor_elements18.getWidgetsCache)();
4661
4701
  if (!types) {
4662
4702
  return [];
4663
4703
  }
@@ -4844,15 +4884,15 @@ function PopulateStore() {
4844
4884
  }
4845
4885
 
4846
4886
  // src/prevent-circular-nesting.ts
4847
- var import_editor_elements18 = require("@elementor/editor-elements");
4887
+ var import_editor_elements19 = require("@elementor/editor-elements");
4848
4888
  var import_editor_notifications4 = require("@elementor/editor-notifications");
4849
4889
  var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
4850
4890
  var import_store64 = require("@elementor/store");
4851
- var import_i18n29 = require("@wordpress/i18n");
4891
+ var import_i18n30 = require("@wordpress/i18n");
4852
4892
  var COMPONENT_TYPE = "e-component";
4853
4893
  var COMPONENT_CIRCULAR_NESTING_ALERT = {
4854
4894
  type: "default",
4855
- message: (0, import_i18n29.__)("Can't add this component - components that contain each other can't be nested.", "elementor"),
4895
+ message: (0, import_i18n30.__)("Can't add this component - components that contain each other can't be nested.", "elementor"),
4856
4896
  id: "circular-component-nesting-blocked"
4857
4897
  };
4858
4898
  function initCircularNestingPrevention() {
@@ -4939,7 +4979,7 @@ function blockCircularMove(args) {
4939
4979
  if (!container) {
4940
4980
  return false;
4941
4981
  }
4942
- const allElements = (0, import_editor_elements18.getAllDescendants)(container);
4982
+ const allElements = (0, import_editor_elements19.getAllDescendants)(container);
4943
4983
  return allElements.some((element) => {
4944
4984
  const componentId = extractComponentIdFromContainer(element);
4945
4985
  if (componentId === null) {
@@ -5000,7 +5040,7 @@ var componentsStylesProvider = (0, import_editor_styles_repository.createStylesP
5000
5040
  });
5001
5041
 
5002
5042
  // src/sync/create-components-before-save.ts
5003
- var import_editor_elements19 = require("@elementor/editor-elements");
5043
+ var import_editor_elements20 = require("@elementor/editor-elements");
5004
5044
  var import_store70 = require("@elementor/store");
5005
5045
  async function createComponentsBeforeSave({
5006
5046
  elements,
@@ -5025,7 +5065,9 @@ async function createComponentsBeforeSave({
5025
5065
  );
5026
5066
  (0, import_store70.__dispatch)(slice.actions.resetUnpublished());
5027
5067
  } catch (error) {
5028
- throw new Error(`Failed to publish components and update component instances: ${error}`);
5068
+ const failedUids = unpublishedComponents.map((component) => component.uid);
5069
+ (0, import_store70.__dispatch)(slice.actions.removeUnpublished(failedUids));
5070
+ throw new Error(`Failed to publish components: ${error}`);
5029
5071
  }
5030
5072
  }
5031
5073
  async function createComponents(components, status) {
@@ -5068,7 +5110,7 @@ function shouldUpdateElement(element, uidToComponentId) {
5068
5110
  return { shouldUpdate: false, newComponentId: null };
5069
5111
  }
5070
5112
  function updateElementComponentId(elementId, componentId) {
5071
- (0, import_editor_elements19.updateElementSettings)({
5113
+ (0, import_editor_elements20.updateElementSettings)({
5072
5114
  id: elementId,
5073
5115
  props: {
5074
5116
  component_instance: {
@@ -5171,7 +5213,7 @@ var updateExistingComponentsBeforeSave = async ({
5171
5213
  };
5172
5214
 
5173
5215
  // src/sync/cleanup-overridable-props-on-delete.ts
5174
- var import_editor_elements20 = require("@elementor/editor-elements");
5216
+ var import_editor_elements21 = require("@elementor/editor-elements");
5175
5217
  var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
5176
5218
  var import_store78 = require("@elementor/store");
5177
5219
  function initCleanupOverridablePropsOnDelete() {
@@ -5221,12 +5263,12 @@ function initCleanupOverridablePropsOnDelete() {
5221
5263
  });
5222
5264
  }
5223
5265
  function collectDeletedElementIds(containers) {
5224
- const elementIds = containers.filter(Boolean).flatMap((container) => [container, ...(0, import_editor_elements20.getAllDescendants)(container)]).map((element) => element.model?.get?.("id") ?? element.id).filter((id2) => Boolean(id2));
5266
+ const elementIds = containers.filter(Boolean).flatMap((container) => [container, ...(0, import_editor_elements21.getAllDescendants)(container)]).map((element) => element.model?.get?.("id") ?? element.id).filter((id2) => Boolean(id2));
5225
5267
  return elementIds;
5226
5268
  }
5227
5269
 
5228
5270
  // src/sync/handle-component-edit-mode-container.ts
5229
- var import_editor_elements21 = require("@elementor/editor-elements");
5271
+ var import_editor_elements22 = require("@elementor/editor-elements");
5230
5272
  var import_editor_v1_adapters10 = require("@elementor/editor-v1-adapters");
5231
5273
  var V4_DEFAULT_CONTAINER_TYPE = "e-flexbox";
5232
5274
  function initHandleComponentEditModeContainer() {
@@ -5276,11 +5318,11 @@ function initRedirectDropIntoComponent() {
5276
5318
  });
5277
5319
  }
5278
5320
  function createEmptyTopLevelContainer(container) {
5279
- const newContainer = (0, import_editor_elements21.createElement)({
5321
+ const newContainer = (0, import_editor_elements22.createElement)({
5280
5322
  containerId: container.id,
5281
5323
  model: { elType: V4_DEFAULT_CONTAINER_TYPE }
5282
5324
  });
5283
- (0, import_editor_elements21.selectElement)(newContainer.id);
5325
+ (0, import_editor_elements22.selectElement)(newContainer.id);
5284
5326
  }
5285
5327
  function getComponentContainer(container) {
5286
5328
  const topLevelElement = container.children?.[0];
@@ -5313,7 +5355,7 @@ function load(result) {
5313
5355
  }
5314
5356
 
5315
5357
  // src/sync/regenerate-override-keys.ts
5316
- var import_editor_elements22 = require("@elementor/editor-elements");
5358
+ var import_editor_elements23 = require("@elementor/editor-elements");
5317
5359
  var import_editor_v1_adapters12 = require("@elementor/editor-v1-adapters");
5318
5360
  var import_utils10 = require("@elementor/utils");
5319
5361
  function initRegenerateOverrideKeys() {
@@ -5334,11 +5376,11 @@ function regenerateOverrideKeysForContainers(result) {
5334
5376
  });
5335
5377
  }
5336
5378
  function regenerateOverrideKeysRecursive(elementId) {
5337
- const container = (0, import_editor_elements22.getContainer)(elementId);
5379
+ const container = (0, import_editor_elements23.getContainer)(elementId);
5338
5380
  if (!container) {
5339
5381
  return;
5340
5382
  }
5341
- (0, import_editor_elements22.getAllDescendants)(container).forEach(regenerateOverrideKeys);
5383
+ (0, import_editor_elements23.getAllDescendants)(container).forEach(regenerateOverrideKeys);
5342
5384
  }
5343
5385
  function regenerateOverrideKeys(element) {
5344
5386
  if (!isComponentInstance(element.model.toJSON())) {
@@ -5372,7 +5414,7 @@ function regenerateOverrideKeys(element) {
5372
5414
  }
5373
5415
  }
5374
5416
  };
5375
- (0, import_editor_elements22.updateElementSettings)({
5417
+ (0, import_editor_elements23.updateElementSettings)({
5376
5418
  id: element.id,
5377
5419
  props: { component_instance: newComponentInstance },
5378
5420
  withHistory: false
@@ -5449,7 +5491,7 @@ function init() {
5449
5491
  window.elementorCommon.__beforeSave = beforeSave;
5450
5492
  (0, import_editor_elements_panel.injectTab)({
5451
5493
  id: "components",
5452
- label: (0, import_i18n30.__)("Components", "elementor"),
5494
+ label: (0, import_i18n31.__)("Components", "elementor"),
5453
5495
  component: Components,
5454
5496
  position: 1
5455
5497
  });