@elementor/editor-components 3.35.0-385 → 3.35.0-387

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
@@ -42,7 +42,7 @@ var import_editor_editing_panel6 = 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
- var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
45
+ var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
46
46
  var import_store64 = require("@elementor/store");
47
47
  var import_i18n24 = require("@wordpress/i18n");
48
48
 
@@ -1671,7 +1671,7 @@ var onElementDrop = (_args, element) => {
1671
1671
  };
1672
1672
 
1673
1673
  // src/create-component-type.ts
1674
- var TYPE = "e-component";
1674
+ var COMPONENT_WIDGET_TYPE = "e-component";
1675
1675
  var updateGroups = (groups, config) => {
1676
1676
  const disableMap = new Map(Object.entries(config.disable ?? {}));
1677
1677
  const addMap = new Map(Object.entries(config.add ?? {}));
@@ -1826,11 +1826,16 @@ function setInactiveRecursively(model) {
1826
1826
  }
1827
1827
  }
1828
1828
 
1829
+ // src/utils/is-component-instance.ts
1830
+ function isComponentInstance(elementModel) {
1831
+ return [elementModel.widgetType, elementModel.elType].includes(COMPONENT_WIDGET_TYPE);
1832
+ }
1833
+
1829
1834
  // src/utils/get-component-ids.ts
1830
1835
  var getComponentIds = async (elements) => {
1831
1836
  const components = elements.map(async ({ widgetType, elType, elements: childElements, settings }) => {
1832
1837
  const ids = [];
1833
- const isComponent = [widgetType, elType].includes(TYPE);
1838
+ const isComponent = isComponentInstance({ widgetType, elType });
1834
1839
  if (isComponent) {
1835
1840
  const componentId = settings?.component_instance?.value?.component_id.value;
1836
1841
  const document = await getComponentDocumentData(componentId);
@@ -3271,16 +3276,99 @@ function isPropAllowed(bind) {
3271
3276
  return !FORBIDDEN_KEYS.includes(bind);
3272
3277
  }
3273
3278
 
3279
+ // src/hooks/regenerate-override-keys.ts
3280
+ var import_editor_elements10 = require("@elementor/editor-elements");
3281
+ var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
3282
+ var import_utils8 = require("@elementor/utils");
3283
+ function initRegenerateOverrideKeys() {
3284
+ (0, import_editor_v1_adapters6.registerDataHook)("after", "document/elements/duplicate", (_args, result) => {
3285
+ regenerateOverrideKeysForContainers(result);
3286
+ });
3287
+ (0, import_editor_v1_adapters6.registerDataHook)("after", "document/elements/paste", (_args, result) => {
3288
+ regenerateOverrideKeysForContainers(result);
3289
+ });
3290
+ (0, import_editor_v1_adapters6.registerDataHook)("after", "document/elements/import", (_args, result) => {
3291
+ regenerateOverrideKeysForContainers(result);
3292
+ });
3293
+ }
3294
+ function regenerateOverrideKeysForContainers(result) {
3295
+ const containers = Array.isArray(result) ? result : [result];
3296
+ containers.forEach((container) => {
3297
+ regenerateOverrideKeysRecursive(container.id);
3298
+ });
3299
+ }
3300
+ function regenerateOverrideKeysRecursive(elementId) {
3301
+ const container = (0, import_editor_elements10.getContainer)(elementId);
3302
+ if (!container) {
3303
+ return;
3304
+ }
3305
+ getAllElements(container).forEach(regenerateOverrideKeys);
3306
+ }
3307
+ function getAllElements(container) {
3308
+ const children = (container.children ?? []).flatMap(getAllElements) ?? [];
3309
+ return [container, ...children];
3310
+ }
3311
+ function regenerateOverrideKeys(element) {
3312
+ if (!isComponentInstance(element.model.toJSON())) {
3313
+ return;
3314
+ }
3315
+ const settings = element.settings?.toJSON() ?? {};
3316
+ if (!hasOverrides(settings)) {
3317
+ return;
3318
+ }
3319
+ const componentInstance = settings.component_instance;
3320
+ const overrides = componentInstance.value.overrides;
3321
+ const newOverrides = overrides.value.map((override) => {
3322
+ if (!componentInstanceOverridePropTypeUtil.isValid(override)) {
3323
+ return override;
3324
+ }
3325
+ return {
3326
+ ...override,
3327
+ value: {
3328
+ ...override.value,
3329
+ override_key: (0, import_utils8.generateUniqueId)("prop")
3330
+ }
3331
+ };
3332
+ });
3333
+ const newComponentInstance = {
3334
+ ...componentInstance,
3335
+ value: {
3336
+ ...componentInstance.value,
3337
+ overrides: {
3338
+ ...overrides,
3339
+ value: newOverrides
3340
+ }
3341
+ }
3342
+ };
3343
+ (0, import_editor_elements10.updateElementSettings)({
3344
+ id: element.id,
3345
+ props: { component_instance: newComponentInstance },
3346
+ withHistory: false
3347
+ });
3348
+ }
3349
+ function hasOverrides(settings) {
3350
+ if (!componentInstancePropTypeUtil.isValid(settings?.component_instance)) {
3351
+ return false;
3352
+ }
3353
+ const componentInstance = componentInstancePropTypeUtil.extract(settings?.component_instance);
3354
+ const overrides = componentInstance?.overrides;
3355
+ if (!componentInstanceOverridesPropTypeUtil.isValid(overrides)) {
3356
+ return false;
3357
+ }
3358
+ const overridesValue = overrides?.value;
3359
+ return !!overridesValue?.length;
3360
+ }
3361
+
3274
3362
  // src/mcp/index.ts
3275
3363
  var import_editor_mcp2 = require("@elementor/editor-mcp");
3276
3364
 
3277
3365
  // src/mcp/save-as-component-tool.ts
3278
3366
  var import_editor_canvas7 = require("@elementor/editor-canvas");
3279
- var import_editor_elements10 = require("@elementor/editor-elements");
3367
+ var import_editor_elements11 = require("@elementor/editor-elements");
3280
3368
  var import_editor_mcp = require("@elementor/editor-mcp");
3281
3369
  var import_http_client2 = require("@elementor/http-client");
3282
3370
  var import_schema6 = require("@elementor/schema");
3283
- var import_utils8 = require("@elementor/utils");
3371
+ var import_utils9 = require("@elementor/utils");
3284
3372
  var InputSchema = {
3285
3373
  element_id: import_schema6.z.string().describe(
3286
3374
  'The unique identifier of the element to save as a component. Use the "list-elements" tool to find available element IDs in the current document.'
@@ -3311,7 +3399,7 @@ var ERROR_MESSAGES2 = {
3311
3399
  var handleSaveAsComponent = async (params) => {
3312
3400
  const { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;
3313
3401
  const validElementTypes = getValidElementTypes();
3314
- const container = (0, import_editor_elements10.getContainer)(elementId);
3402
+ const container = (0, import_editor_elements11.getContainer)(elementId);
3315
3403
  if (!container) {
3316
3404
  throw new Error(ERROR_MESSAGES2.ELEMENT_NOT_FOUND);
3317
3405
  }
@@ -3327,7 +3415,7 @@ var handleSaveAsComponent = async (params) => {
3327
3415
  if (overridableProps) {
3328
3416
  updateElementDataWithOverridableProps(element, overridableProps);
3329
3417
  }
3330
- const uid = (0, import_utils8.generateUniqueId)("component");
3418
+ const uid = (0, import_utils9.generateUniqueId)("component");
3331
3419
  try {
3332
3420
  await apiClient.validate({
3333
3421
  items: [
@@ -3349,7 +3437,7 @@ var handleSaveAsComponent = async (params) => {
3349
3437
  };
3350
3438
  function enrichOverridableProps(input, rootElement) {
3351
3439
  const enrichedProps = {};
3352
- const defaultGroupId = (0, import_utils8.generateUniqueId)("group");
3440
+ const defaultGroupId = (0, import_utils9.generateUniqueId)("group");
3353
3441
  Object.entries(input.props).forEach(([, prop]) => {
3354
3442
  const { elementId, propKey } = prop;
3355
3443
  const element = findElementById(rootElement, elementId);
@@ -3358,7 +3446,7 @@ function enrichOverridableProps(input, rootElement) {
3358
3446
  }
3359
3447
  const elType = element.elType;
3360
3448
  const widgetType = element.widgetType || element.elType;
3361
- const elementType = (0, import_editor_elements10.getElementType)(widgetType);
3449
+ const elementType = (0, import_editor_elements11.getElementType)(widgetType);
3362
3450
  if (!elementType) {
3363
3451
  throw new Error(
3364
3452
  `Element type "${widgetType}" is not atomic or does not have a settings schema. Cannot expose property "${propKey}" for element "${elementId}".`
@@ -3370,7 +3458,7 @@ function enrichOverridableProps(input, rootElement) {
3370
3458
  `Property "${propKey}" does not exist in element "${elementId}" (type: ${widgetType}). Available properties: ${availableProps}`
3371
3459
  );
3372
3460
  }
3373
- const overrideKey = (0, import_utils8.generateUniqueId)("prop");
3461
+ const overrideKey = (0, import_utils9.generateUniqueId)("prop");
3374
3462
  const originValue = element.settings?.[propKey] ? element.settings[propKey] : elementType.propsSchema[propKey].default ?? null;
3375
3463
  const label = generateLabel(propKey);
3376
3464
  enrichedProps[overrideKey] = {
@@ -3428,11 +3516,11 @@ function findElementById(root, targetId) {
3428
3516
  return null;
3429
3517
  }
3430
3518
  function generateLabel(propKey) {
3431
- const uniqueId = (0, import_utils8.generateUniqueId)("prop");
3519
+ const uniqueId = (0, import_utils9.generateUniqueId)("prop");
3432
3520
  return `${uniqueId} - ${propKey}`;
3433
3521
  }
3434
3522
  function getValidElementTypes() {
3435
- const types = (0, import_editor_elements10.getWidgetsCache)();
3523
+ const types = (0, import_editor_elements11.getWidgetsCache)();
3436
3524
  if (!types) {
3437
3525
  return [];
3438
3526
  }
@@ -3643,7 +3731,7 @@ var componentsStylesProvider = (0, import_editor_styles_repository.createStylesP
3643
3731
  });
3644
3732
 
3645
3733
  // src/sync/create-components-before-save.ts
3646
- var import_editor_elements11 = require("@elementor/editor-elements");
3734
+ var import_editor_elements12 = require("@elementor/editor-elements");
3647
3735
  var import_store58 = require("@elementor/store");
3648
3736
  async function createComponentsBeforeSave({
3649
3737
  elements,
@@ -3708,7 +3796,7 @@ function shouldUpdateElement(element, uidToComponentId) {
3708
3796
  return { shouldUpdate: false, newComponentId: null };
3709
3797
  }
3710
3798
  function updateElementComponentId(elementId, componentId) {
3711
- (0, import_editor_elements11.updateElementSettings)({
3799
+ (0, import_editor_elements12.updateElementSettings)({
3712
3800
  id: elementId,
3713
3801
  props: {
3714
3802
  component_instance: {
@@ -3805,17 +3893,17 @@ function init() {
3805
3893
  (0, import_store64.__registerSlice)(slice);
3806
3894
  (0, import_editor_panels4.__registerPanel)(panel);
3807
3895
  (0, import_editor_canvas8.registerElementType)(
3808
- TYPE,
3896
+ COMPONENT_WIDGET_TYPE,
3809
3897
  (options) => createComponentType({ ...options, showLockedByModal: openEditModeDialog })
3810
3898
  );
3811
- (0, import_editor_v1_adapters6.registerDataHook)("dependency", "editor/documents/close", (args) => {
3899
+ (0, import_editor_v1_adapters7.registerDataHook)("dependency", "editor/documents/close", (args) => {
3812
3900
  const document = (0, import_editor_documents12.getV1CurrentDocument)();
3813
3901
  if (document.config.type === COMPONENT_DOCUMENT_TYPE) {
3814
3902
  args.mode = "autosave";
3815
3903
  }
3816
3904
  return true;
3817
3905
  });
3818
- (0, import_editor_v1_adapters6.registerDataHook)("after", "preview/drop", onElementDrop);
3906
+ (0, import_editor_v1_adapters7.registerDataHook)("after", "preview/drop", onElementDrop);
3819
3907
  window.elementorCommon.__beforeSave = beforeSave;
3820
3908
  (0, import_editor_elements_panel.injectTab)({
3821
3909
  id: "components",
@@ -3838,7 +3926,7 @@ function init() {
3838
3926
  id: "component-panel-header",
3839
3927
  component: ComponentPanelHeader
3840
3928
  });
3841
- (0, import_editor_v1_adapters6.registerDataHook)("after", "editor/documents/attach-preview", async () => {
3929
+ (0, import_editor_v1_adapters7.registerDataHook)("after", "editor/documents/attach-preview", async () => {
3842
3930
  const { id: id2, config } = (0, import_editor_documents12.getV1CurrentDocument)();
3843
3931
  if (id2) {
3844
3932
  removeComponentStyles(id2);
@@ -3863,6 +3951,7 @@ function init() {
3863
3951
  import_editor_canvas8.settingsTransformersRegistry.register("component-instance", componentInstanceTransformer);
3864
3952
  import_editor_canvas8.settingsTransformersRegistry.register("overridable", componentOverridableTransformer);
3865
3953
  import_editor_canvas8.settingsTransformersRegistry.register("override", componentOverrideTransformer);
3954
+ initRegenerateOverrideKeys();
3866
3955
  initMcp();
3867
3956
  }
3868
3957
  // Annotate the CommonJS export names for ESM import in node: