@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.mjs CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  import { injectTab } from "@elementor/editor-elements-panel";
16
16
  import { __registerPanel as registerPanel } from "@elementor/editor-panels";
17
17
  import { stylesRepository } from "@elementor/editor-styles-repository";
18
- import { registerDataHook } from "@elementor/editor-v1-adapters";
18
+ import { registerDataHook as registerDataHook2 } from "@elementor/editor-v1-adapters";
19
19
  import { __registerSlice as registerSlice } from "@elementor/store";
20
20
  import { __ as __24 } from "@wordpress/i18n";
21
21
 
@@ -1677,7 +1677,7 @@ var onElementDrop = (_args, element) => {
1677
1677
  };
1678
1678
 
1679
1679
  // src/create-component-type.ts
1680
- var TYPE = "e-component";
1680
+ var COMPONENT_WIDGET_TYPE = "e-component";
1681
1681
  var updateGroups = (groups, config) => {
1682
1682
  const disableMap = new Map(Object.entries(config.disable ?? {}));
1683
1683
  const addMap = new Map(Object.entries(config.add ?? {}));
@@ -1832,11 +1832,16 @@ function setInactiveRecursively(model) {
1832
1832
  }
1833
1833
  }
1834
1834
 
1835
+ // src/utils/is-component-instance.ts
1836
+ function isComponentInstance(elementModel) {
1837
+ return [elementModel.widgetType, elementModel.elType].includes(COMPONENT_WIDGET_TYPE);
1838
+ }
1839
+
1835
1840
  // src/utils/get-component-ids.ts
1836
1841
  var getComponentIds = async (elements) => {
1837
1842
  const components = elements.map(async ({ widgetType, elType, elements: childElements, settings }) => {
1838
1843
  const ids = [];
1839
- const isComponent = [widgetType, elType].includes(TYPE);
1844
+ const isComponent = isComponentInstance({ widgetType, elType });
1840
1845
  if (isComponent) {
1841
1846
  const componentId = settings?.component_instance?.value?.component_id.value;
1842
1847
  const document = await getComponentDocumentData(componentId);
@@ -3281,16 +3286,99 @@ function isPropAllowed(bind) {
3281
3286
  return !FORBIDDEN_KEYS.includes(bind);
3282
3287
  }
3283
3288
 
3289
+ // src/hooks/regenerate-override-keys.ts
3290
+ import { getContainer as getContainer3, updateElementSettings as updateElementSettings2 } from "@elementor/editor-elements";
3291
+ import { registerDataHook } from "@elementor/editor-v1-adapters";
3292
+ import { generateUniqueId as generateUniqueId5 } from "@elementor/utils";
3293
+ function initRegenerateOverrideKeys() {
3294
+ registerDataHook("after", "document/elements/duplicate", (_args, result) => {
3295
+ regenerateOverrideKeysForContainers(result);
3296
+ });
3297
+ registerDataHook("after", "document/elements/paste", (_args, result) => {
3298
+ regenerateOverrideKeysForContainers(result);
3299
+ });
3300
+ registerDataHook("after", "document/elements/import", (_args, result) => {
3301
+ regenerateOverrideKeysForContainers(result);
3302
+ });
3303
+ }
3304
+ function regenerateOverrideKeysForContainers(result) {
3305
+ const containers = Array.isArray(result) ? result : [result];
3306
+ containers.forEach((container) => {
3307
+ regenerateOverrideKeysRecursive(container.id);
3308
+ });
3309
+ }
3310
+ function regenerateOverrideKeysRecursive(elementId) {
3311
+ const container = getContainer3(elementId);
3312
+ if (!container) {
3313
+ return;
3314
+ }
3315
+ getAllElements(container).forEach(regenerateOverrideKeys);
3316
+ }
3317
+ function getAllElements(container) {
3318
+ const children = (container.children ?? []).flatMap(getAllElements) ?? [];
3319
+ return [container, ...children];
3320
+ }
3321
+ function regenerateOverrideKeys(element) {
3322
+ if (!isComponentInstance(element.model.toJSON())) {
3323
+ return;
3324
+ }
3325
+ const settings = element.settings?.toJSON() ?? {};
3326
+ if (!hasOverrides(settings)) {
3327
+ return;
3328
+ }
3329
+ const componentInstance = settings.component_instance;
3330
+ const overrides = componentInstance.value.overrides;
3331
+ const newOverrides = overrides.value.map((override) => {
3332
+ if (!componentInstanceOverridePropTypeUtil.isValid(override)) {
3333
+ return override;
3334
+ }
3335
+ return {
3336
+ ...override,
3337
+ value: {
3338
+ ...override.value,
3339
+ override_key: generateUniqueId5("prop")
3340
+ }
3341
+ };
3342
+ });
3343
+ const newComponentInstance = {
3344
+ ...componentInstance,
3345
+ value: {
3346
+ ...componentInstance.value,
3347
+ overrides: {
3348
+ ...overrides,
3349
+ value: newOverrides
3350
+ }
3351
+ }
3352
+ };
3353
+ updateElementSettings2({
3354
+ id: element.id,
3355
+ props: { component_instance: newComponentInstance },
3356
+ withHistory: false
3357
+ });
3358
+ }
3359
+ function hasOverrides(settings) {
3360
+ if (!componentInstancePropTypeUtil.isValid(settings?.component_instance)) {
3361
+ return false;
3362
+ }
3363
+ const componentInstance = componentInstancePropTypeUtil.extract(settings?.component_instance);
3364
+ const overrides = componentInstance?.overrides;
3365
+ if (!componentInstanceOverridesPropTypeUtil.isValid(overrides)) {
3366
+ return false;
3367
+ }
3368
+ const overridesValue = overrides?.value;
3369
+ return !!overridesValue?.length;
3370
+ }
3371
+
3284
3372
  // src/mcp/index.ts
3285
3373
  import { getMCPByDomain as getMCPByDomain2 } from "@elementor/editor-mcp";
3286
3374
 
3287
3375
  // src/mcp/save-as-component-tool.ts
3288
3376
  import { DOCUMENT_STRUCTURE_URI, WIDGET_SCHEMA_URI } from "@elementor/editor-canvas";
3289
- import { getContainer as getContainer3, getElementType, getWidgetsCache as getWidgetsCache3 } from "@elementor/editor-elements";
3377
+ import { getContainer as getContainer4, getElementType, getWidgetsCache as getWidgetsCache3 } from "@elementor/editor-elements";
3290
3378
  import { getMCPByDomain, toolPrompts } from "@elementor/editor-mcp";
3291
3379
  import { AxiosError } from "@elementor/http-client";
3292
3380
  import { z as z6 } from "@elementor/schema";
3293
- import { generateUniqueId as generateUniqueId5 } from "@elementor/utils";
3381
+ import { generateUniqueId as generateUniqueId6 } from "@elementor/utils";
3294
3382
  var InputSchema = {
3295
3383
  element_id: z6.string().describe(
3296
3384
  '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.'
@@ -3321,7 +3409,7 @@ var ERROR_MESSAGES2 = {
3321
3409
  var handleSaveAsComponent = async (params) => {
3322
3410
  const { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;
3323
3411
  const validElementTypes = getValidElementTypes();
3324
- const container = getContainer3(elementId);
3412
+ const container = getContainer4(elementId);
3325
3413
  if (!container) {
3326
3414
  throw new Error(ERROR_MESSAGES2.ELEMENT_NOT_FOUND);
3327
3415
  }
@@ -3337,7 +3425,7 @@ var handleSaveAsComponent = async (params) => {
3337
3425
  if (overridableProps) {
3338
3426
  updateElementDataWithOverridableProps(element, overridableProps);
3339
3427
  }
3340
- const uid = generateUniqueId5("component");
3428
+ const uid = generateUniqueId6("component");
3341
3429
  try {
3342
3430
  await apiClient.validate({
3343
3431
  items: [
@@ -3359,7 +3447,7 @@ var handleSaveAsComponent = async (params) => {
3359
3447
  };
3360
3448
  function enrichOverridableProps(input, rootElement) {
3361
3449
  const enrichedProps = {};
3362
- const defaultGroupId = generateUniqueId5("group");
3450
+ const defaultGroupId = generateUniqueId6("group");
3363
3451
  Object.entries(input.props).forEach(([, prop]) => {
3364
3452
  const { elementId, propKey } = prop;
3365
3453
  const element = findElementById(rootElement, elementId);
@@ -3380,7 +3468,7 @@ function enrichOverridableProps(input, rootElement) {
3380
3468
  `Property "${propKey}" does not exist in element "${elementId}" (type: ${widgetType}). Available properties: ${availableProps}`
3381
3469
  );
3382
3470
  }
3383
- const overrideKey = generateUniqueId5("prop");
3471
+ const overrideKey = generateUniqueId6("prop");
3384
3472
  const originValue = element.settings?.[propKey] ? element.settings[propKey] : elementType.propsSchema[propKey].default ?? null;
3385
3473
  const label = generateLabel(propKey);
3386
3474
  enrichedProps[overrideKey] = {
@@ -3438,7 +3526,7 @@ function findElementById(root, targetId) {
3438
3526
  return null;
3439
3527
  }
3440
3528
  function generateLabel(propKey) {
3441
- const uniqueId = generateUniqueId5("prop");
3529
+ const uniqueId = generateUniqueId6("prop");
3442
3530
  return `${uniqueId} - ${propKey}`;
3443
3531
  }
3444
3532
  function getValidElementTypes() {
@@ -3653,7 +3741,7 @@ var componentsStylesProvider = createStylesProvider({
3653
3741
  });
3654
3742
 
3655
3743
  // src/sync/create-components-before-save.ts
3656
- import { updateElementSettings as updateElementSettings2 } from "@elementor/editor-elements";
3744
+ import { updateElementSettings as updateElementSettings3 } from "@elementor/editor-elements";
3657
3745
  import { __dispatch as dispatch15, __getState as getState18 } from "@elementor/store";
3658
3746
  async function createComponentsBeforeSave({
3659
3747
  elements,
@@ -3718,7 +3806,7 @@ function shouldUpdateElement(element, uidToComponentId) {
3718
3806
  return { shouldUpdate: false, newComponentId: null };
3719
3807
  }
3720
3808
  function updateElementComponentId(elementId, componentId) {
3721
- updateElementSettings2({
3809
+ updateElementSettings3({
3722
3810
  id: elementId,
3723
3811
  props: {
3724
3812
  component_instance: {
@@ -3815,17 +3903,17 @@ function init() {
3815
3903
  registerSlice(slice);
3816
3904
  registerPanel(panel);
3817
3905
  registerElementType(
3818
- TYPE,
3906
+ COMPONENT_WIDGET_TYPE,
3819
3907
  (options) => createComponentType({ ...options, showLockedByModal: openEditModeDialog })
3820
3908
  );
3821
- registerDataHook("dependency", "editor/documents/close", (args) => {
3909
+ registerDataHook2("dependency", "editor/documents/close", (args) => {
3822
3910
  const document = getV1CurrentDocument();
3823
3911
  if (document.config.type === COMPONENT_DOCUMENT_TYPE) {
3824
3912
  args.mode = "autosave";
3825
3913
  }
3826
3914
  return true;
3827
3915
  });
3828
- registerDataHook("after", "preview/drop", onElementDrop);
3916
+ registerDataHook2("after", "preview/drop", onElementDrop);
3829
3917
  window.elementorCommon.__beforeSave = beforeSave;
3830
3918
  injectTab({
3831
3919
  id: "components",
@@ -3848,7 +3936,7 @@ function init() {
3848
3936
  id: "component-panel-header",
3849
3937
  component: ComponentPanelHeader
3850
3938
  });
3851
- registerDataHook("after", "editor/documents/attach-preview", async () => {
3939
+ registerDataHook2("after", "editor/documents/attach-preview", async () => {
3852
3940
  const { id: id2, config } = getV1CurrentDocument();
3853
3941
  if (id2) {
3854
3942
  removeComponentStyles(id2);
@@ -3873,6 +3961,7 @@ function init() {
3873
3961
  settingsTransformersRegistry2.register("component-instance", componentInstanceTransformer);
3874
3962
  settingsTransformersRegistry2.register("overridable", componentOverridableTransformer);
3875
3963
  settingsTransformersRegistry2.register("override", componentOverrideTransformer);
3964
+ initRegenerateOverrideKeys();
3876
3965
  initMcp();
3877
3966
  }
3878
3967
  export {