@elementor/editor-components 4.3.0-999 → 4.3.0-beta2

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
@@ -334,14 +334,21 @@ var useIsSanitizedComponent = (componentId, key) => {
334
334
  };
335
335
 
336
336
  // src/utils/component-document-data.ts
337
- import { getV1DocumentsManager } from "@elementor/editor-documents";
338
- var getComponentDocumentData = async (id) => {
339
- const documentManager = getV1DocumentsManager();
340
- try {
341
- return await documentManager.request(id);
342
- } catch {
343
- return null;
344
- }
337
+ import { ajax as ajax2 } from "@elementor/editor-v1-adapters";
338
+ var getComponentDocumentParams = (id) => ({
339
+ action: "get_document_config",
340
+ unique_id: `document-${id}`,
341
+ data: { id }
342
+ });
343
+ var pendingRequests = /* @__PURE__ */ new Map();
344
+ var getComponentDocumentData = (id) => {
345
+ const pendingRequest = pendingRequests.get(id);
346
+ if (pendingRequest) {
347
+ return pendingRequest;
348
+ }
349
+ const request = ajax2.load(getComponentDocumentParams(id)).catch(() => null).finally(() => pendingRequests.delete(id));
350
+ pendingRequests.set(id, request);
351
+ return request;
345
352
  };
346
353
 
347
354
  // src/component-instance-transformer.ts
@@ -375,23 +382,27 @@ import { createTransformer as createTransformer2, settingsTransformersRegistry }
375
382
  var componentOverridableTransformer = createTransformer2(
376
383
  (value, options) => {
377
384
  const { overrides } = options.renderContext ?? {};
385
+ const originValue = normalizeOriginValue(value.origin_value);
378
386
  const overrideValue = overrides?.[value.override_key];
379
387
  if (overrideValue) {
380
- const isOverride = isOriginValueOverride(value.origin_value);
381
- if (isOverride) {
382
- return transformOverride(value, options, overrideValue);
388
+ if (isOriginValueOverride(originValue)) {
389
+ return transformOverride(originValue, options, overrideValue);
383
390
  }
384
391
  return overrideValue;
385
392
  }
386
- return value.origin_value;
393
+ return originValue;
387
394
  }
388
395
  );
389
- function transformOverride(value, options, overrideValue) {
396
+ function normalizeOriginValue(originValue) {
397
+ const isEmpty = !!originValue && Object.keys(originValue).length === 0;
398
+ return isEmpty ? null : originValue;
399
+ }
400
+ function transformOverride(originValue, options, overrideValue) {
390
401
  const transformer = settingsTransformersRegistry.get("override");
391
402
  if (!transformer) {
392
403
  return null;
393
404
  }
394
- const transformedValue = transformer(value.origin_value.value, options);
405
+ const transformedValue = transformer(originValue.value, options);
395
406
  if (!transformedValue) {
396
407
  return null;
397
408
  }
@@ -401,7 +412,7 @@ function transformOverride(value, options, overrideValue) {
401
412
  };
402
413
  }
403
414
  function isOriginValueOverride(originValue) {
404
- return originValue.$$type === "override";
415
+ return originValue?.$$type === "override";
405
416
  }
406
417
 
407
418
  // src/component-override-transformer.ts
@@ -2612,6 +2623,65 @@ function formatComponentElementsId(elements, path) {
2612
2623
  });
2613
2624
  }
2614
2625
 
2626
+ // src/utils/reconcile-component-instance-elements.ts
2627
+ import {
2628
+ getWidgetsCache as getWidgetsCache2,
2629
+ reconcileInitialChildren
2630
+ } from "@elementor/editor-elements";
2631
+ import { hashString as hashString2 } from "@elementor/utils";
2632
+ var ELEMENT_ID_LENGTH2 = 7;
2633
+ function overridesRecordToMapping(overrides) {
2634
+ const mapping = {};
2635
+ for (const [key, value] of Object.entries(overrides)) {
2636
+ mapping[key] = { value };
2637
+ }
2638
+ return mapping;
2639
+ }
2640
+ function getElementConfig(element) {
2641
+ const type = element.elType === "widget" ? element.widgetType : element.elType;
2642
+ if (!type) {
2643
+ return void 0;
2644
+ }
2645
+ return getWidgetsCache2()?.[type];
2646
+ }
2647
+ function deriveIds(element, seed) {
2648
+ const id = hashString2(seed, ELEMENT_ID_LENGTH2);
2649
+ return {
2650
+ ...element,
2651
+ id,
2652
+ elements: (element.elements ?? []).map((child, index) => deriveIds(child, `${id}_${index}`))
2653
+ };
2654
+ }
2655
+ function reconcileElementTree(element, overridesMapping) {
2656
+ const elementConfig = getElementConfig(element);
2657
+ const withOverrides = applyOverridesToSettings(element.settings ?? {}, overridesMapping);
2658
+ const effectiveSettings = unwrapOverridableSettings(withOverrides);
2659
+ const originalChildren = element.elements ?? [];
2660
+ const originalChildIds = new Set(originalChildren.map((child) => child.id));
2661
+ const attributes = {
2662
+ elements: [...originalChildren],
2663
+ settings: effectiveSettings
2664
+ };
2665
+ if (elementConfig?.children_dependencies?.length) {
2666
+ reconcileInitialChildren({
2667
+ elementId: element.id,
2668
+ elementConfig,
2669
+ attributes
2670
+ });
2671
+ }
2672
+ const reconciledChildren = (attributes.elements ?? []).map(
2673
+ (child) => originalChildIds.has(child.id) ? child : deriveIds(child, `${element.id}_${child.elType}`)
2674
+ ).map((child) => reconcileElementTree(child, overridesMapping));
2675
+ return {
2676
+ ...element,
2677
+ elements: reconciledChildren
2678
+ };
2679
+ }
2680
+ function reconcileComponentInstanceElements(elements, overrides = {}) {
2681
+ const overridesMapping = overridesRecordToMapping(overrides);
2682
+ return elements.map((element) => reconcileElementTree(element, overridesMapping));
2683
+ }
2684
+
2615
2685
  // src/utils/switch-to-component.ts
2616
2686
  import { invalidateDocumentData, switchToDocument } from "@elementor/editor-documents";
2617
2687
  import { getCurrentDocumentContainer, selectElement as selectElement2 } from "@elementor/editor-elements";
@@ -2788,7 +2858,11 @@ function createComponentView(options) {
2788
2858
  };
2789
2859
  const instanceId = this.model.get("id");
2790
2860
  const elements = componentInstance.elements ?? [];
2791
- const formattedElements = formatComponentElementsId(elements, [instanceId]);
2861
+ const reconciledElements = reconcileComponentInstanceElements(
2862
+ elements,
2863
+ componentInstance.overrides ?? {}
2864
+ );
2865
+ const formattedElements = formatComponentElementsId(reconciledElements, [instanceId]);
2792
2866
  this.collection = legacyWindow.elementor.createBackboneElementsCollection(formattedElements);
2793
2867
  this.collection.models.forEach(setInactiveRecursively);
2794
2868
  settings.component_instance = "<template data-children-placeholder></template>";