@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.js +121 -50
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +90 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +23 -23
- package/src/component-overridable-transformer.ts +23 -9
- package/src/create-component-type.ts +6 -1
- package/src/types.ts +1 -1
- package/src/utils/component-document-data.ts +25 -8
- package/src/utils/reconcile-component-instance-elements.ts +107 -0
package/dist/index.js
CHANGED
|
@@ -91,11 +91,11 @@ module.exports = __toCommonJS(index_exports);
|
|
|
91
91
|
// src/init.ts
|
|
92
92
|
var import_editor = require("@elementor/editor");
|
|
93
93
|
var import_editor_canvas6 = require("@elementor/editor-canvas");
|
|
94
|
-
var
|
|
94
|
+
var import_editor_documents5 = require("@elementor/editor-documents");
|
|
95
95
|
var import_editor_editing_panel7 = require("@elementor/editor-editing-panel");
|
|
96
96
|
var import_editor_elements_panel = require("@elementor/editor-elements-panel");
|
|
97
97
|
var import_editor_embedded_documents_manager2 = require("@elementor/editor-embedded-documents-manager");
|
|
98
|
-
var
|
|
98
|
+
var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
|
|
99
99
|
var import_store28 = require("@elementor/store");
|
|
100
100
|
var import_i18n16 = require("@wordpress/i18n");
|
|
101
101
|
|
|
@@ -417,14 +417,21 @@ var useIsSanitizedComponent = (componentId, key) => {
|
|
|
417
417
|
};
|
|
418
418
|
|
|
419
419
|
// src/utils/component-document-data.ts
|
|
420
|
-
var
|
|
421
|
-
var
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
420
|
+
var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
|
|
421
|
+
var getComponentDocumentParams = (id) => ({
|
|
422
|
+
action: "get_document_config",
|
|
423
|
+
unique_id: `document-${id}`,
|
|
424
|
+
data: { id }
|
|
425
|
+
});
|
|
426
|
+
var pendingRequests = /* @__PURE__ */ new Map();
|
|
427
|
+
var getComponentDocumentData = (id) => {
|
|
428
|
+
const pendingRequest = pendingRequests.get(id);
|
|
429
|
+
if (pendingRequest) {
|
|
430
|
+
return pendingRequest;
|
|
431
|
+
}
|
|
432
|
+
const request = import_editor_v1_adapters2.ajax.load(getComponentDocumentParams(id)).catch(() => null).finally(() => pendingRequests.delete(id));
|
|
433
|
+
pendingRequests.set(id, request);
|
|
434
|
+
return request;
|
|
428
435
|
};
|
|
429
436
|
|
|
430
437
|
// src/component-instance-transformer.ts
|
|
@@ -458,23 +465,27 @@ var import_editor_canvas2 = require("@elementor/editor-canvas");
|
|
|
458
465
|
var componentOverridableTransformer = (0, import_editor_canvas2.createTransformer)(
|
|
459
466
|
(value, options) => {
|
|
460
467
|
const { overrides } = options.renderContext ?? {};
|
|
468
|
+
const originValue = normalizeOriginValue(value.origin_value);
|
|
461
469
|
const overrideValue = overrides?.[value.override_key];
|
|
462
470
|
if (overrideValue) {
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
return transformOverride(value, options, overrideValue);
|
|
471
|
+
if (isOriginValueOverride(originValue)) {
|
|
472
|
+
return transformOverride(originValue, options, overrideValue);
|
|
466
473
|
}
|
|
467
474
|
return overrideValue;
|
|
468
475
|
}
|
|
469
|
-
return
|
|
476
|
+
return originValue;
|
|
470
477
|
}
|
|
471
478
|
);
|
|
472
|
-
function
|
|
479
|
+
function normalizeOriginValue(originValue) {
|
|
480
|
+
const isEmpty = !!originValue && Object.keys(originValue).length === 0;
|
|
481
|
+
return isEmpty ? null : originValue;
|
|
482
|
+
}
|
|
483
|
+
function transformOverride(originValue, options, overrideValue) {
|
|
473
484
|
const transformer = import_editor_canvas2.settingsTransformersRegistry.get("override");
|
|
474
485
|
if (!transformer) {
|
|
475
486
|
return null;
|
|
476
487
|
}
|
|
477
|
-
const transformedValue = transformer(
|
|
488
|
+
const transformedValue = transformer(originValue.value, options);
|
|
478
489
|
if (!transformedValue) {
|
|
479
490
|
return null;
|
|
480
491
|
}
|
|
@@ -484,7 +495,7 @@ function transformOverride(value, options, overrideValue) {
|
|
|
484
495
|
};
|
|
485
496
|
}
|
|
486
497
|
function isOriginValueOverride(originValue) {
|
|
487
|
-
return originValue
|
|
498
|
+
return originValue?.$$type === "override";
|
|
488
499
|
}
|
|
489
500
|
|
|
490
501
|
// src/component-override-transformer.ts
|
|
@@ -1126,7 +1137,7 @@ var import_i18n10 = require("@wordpress/i18n");
|
|
|
1126
1137
|
// src/utils/detach-component-instance/detach-component-instance.ts
|
|
1127
1138
|
var import_editor_canvas4 = require("@elementor/editor-canvas");
|
|
1128
1139
|
var import_editor_elements3 = require("@elementor/editor-elements");
|
|
1129
|
-
var
|
|
1140
|
+
var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
|
|
1130
1141
|
var import_store10 = require("@elementor/store");
|
|
1131
1142
|
var import_i18n9 = require("@wordpress/i18n");
|
|
1132
1143
|
|
|
@@ -1406,7 +1417,7 @@ async function detachComponentInstance({
|
|
|
1406
1417
|
if (!rootElement) {
|
|
1407
1418
|
throw new Error(`Component with ID "${componentId}" has no root element.`);
|
|
1408
1419
|
}
|
|
1409
|
-
const undoableDetach = (0,
|
|
1420
|
+
const undoableDetach = (0, import_editor_v1_adapters3.undoable)(
|
|
1410
1421
|
{
|
|
1411
1422
|
do: () => {
|
|
1412
1423
|
const overrides = extractInstanceOverrides(instanceContainer);
|
|
@@ -2548,7 +2559,7 @@ var import_react10 = require("react");
|
|
|
2548
2559
|
var import_editor_templates = require("@elementor/editor-templates");
|
|
2549
2560
|
|
|
2550
2561
|
// src/store/actions/load-components-assets.ts
|
|
2551
|
-
var
|
|
2562
|
+
var import_editor_documents = require("@elementor/editor-documents");
|
|
2552
2563
|
var import_editor_embedded_documents_manager = require("@elementor/editor-embedded-documents-manager");
|
|
2553
2564
|
|
|
2554
2565
|
// src/utils/get-component-documents.ts
|
|
@@ -2624,9 +2635,9 @@ async function loadComponentsAssets(elements) {
|
|
|
2624
2635
|
await loadComponentsOverridableProps([...documents.keys()]);
|
|
2625
2636
|
}
|
|
2626
2637
|
function updateDocumentState(documents) {
|
|
2627
|
-
const isDrafted = [...documents.values()].some(
|
|
2638
|
+
const isDrafted = [...documents.values()].some(import_editor_documents.isDocumentDirty);
|
|
2628
2639
|
if (isDrafted) {
|
|
2629
|
-
(0,
|
|
2640
|
+
(0, import_editor_documents.setDocumentModifiedStatus)(true);
|
|
2630
2641
|
}
|
|
2631
2642
|
}
|
|
2632
2643
|
|
|
@@ -2647,10 +2658,10 @@ function LoadTemplateComponentsInternal() {
|
|
|
2647
2658
|
|
|
2648
2659
|
// src/create-component-type.ts
|
|
2649
2660
|
var import_editor_canvas5 = require("@elementor/editor-canvas");
|
|
2650
|
-
var
|
|
2661
|
+
var import_editor_documents3 = require("@elementor/editor-documents");
|
|
2651
2662
|
var import_editor_notifications2 = require("@elementor/editor-notifications");
|
|
2652
2663
|
var import_store23 = require("@elementor/store");
|
|
2653
|
-
var
|
|
2664
|
+
var import_utils6 = require("@elementor/utils");
|
|
2654
2665
|
var import_i18n13 = require("@wordpress/i18n");
|
|
2655
2666
|
|
|
2656
2667
|
// src/utils/format-component-elements-id.ts
|
|
@@ -2669,29 +2680,85 @@ function formatComponentElementsId(elements, path) {
|
|
|
2669
2680
|
});
|
|
2670
2681
|
}
|
|
2671
2682
|
|
|
2672
|
-
// src/utils/
|
|
2673
|
-
var import_editor_documents3 = require("@elementor/editor-documents");
|
|
2683
|
+
// src/utils/reconcile-component-instance-elements.ts
|
|
2674
2684
|
var import_editor_elements8 = require("@elementor/editor-elements");
|
|
2675
|
-
var
|
|
2685
|
+
var import_utils5 = require("@elementor/utils");
|
|
2686
|
+
var ELEMENT_ID_LENGTH2 = 7;
|
|
2687
|
+
function overridesRecordToMapping(overrides) {
|
|
2688
|
+
const mapping = {};
|
|
2689
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
2690
|
+
mapping[key] = { value };
|
|
2691
|
+
}
|
|
2692
|
+
return mapping;
|
|
2693
|
+
}
|
|
2694
|
+
function getElementConfig(element) {
|
|
2695
|
+
const type = element.elType === "widget" ? element.widgetType : element.elType;
|
|
2696
|
+
if (!type) {
|
|
2697
|
+
return void 0;
|
|
2698
|
+
}
|
|
2699
|
+
return (0, import_editor_elements8.getWidgetsCache)()?.[type];
|
|
2700
|
+
}
|
|
2701
|
+
function deriveIds(element, seed) {
|
|
2702
|
+
const id = (0, import_utils5.hashString)(seed, ELEMENT_ID_LENGTH2);
|
|
2703
|
+
return {
|
|
2704
|
+
...element,
|
|
2705
|
+
id,
|
|
2706
|
+
elements: (element.elements ?? []).map((child, index) => deriveIds(child, `${id}_${index}`))
|
|
2707
|
+
};
|
|
2708
|
+
}
|
|
2709
|
+
function reconcileElementTree(element, overridesMapping) {
|
|
2710
|
+
const elementConfig = getElementConfig(element);
|
|
2711
|
+
const withOverrides = applyOverridesToSettings(element.settings ?? {}, overridesMapping);
|
|
2712
|
+
const effectiveSettings = unwrapOverridableSettings(withOverrides);
|
|
2713
|
+
const originalChildren = element.elements ?? [];
|
|
2714
|
+
const originalChildIds = new Set(originalChildren.map((child) => child.id));
|
|
2715
|
+
const attributes = {
|
|
2716
|
+
elements: [...originalChildren],
|
|
2717
|
+
settings: effectiveSettings
|
|
2718
|
+
};
|
|
2719
|
+
if (elementConfig?.children_dependencies?.length) {
|
|
2720
|
+
(0, import_editor_elements8.reconcileInitialChildren)({
|
|
2721
|
+
elementId: element.id,
|
|
2722
|
+
elementConfig,
|
|
2723
|
+
attributes
|
|
2724
|
+
});
|
|
2725
|
+
}
|
|
2726
|
+
const reconciledChildren = (attributes.elements ?? []).map(
|
|
2727
|
+
(child) => originalChildIds.has(child.id) ? child : deriveIds(child, `${element.id}_${child.elType}`)
|
|
2728
|
+
).map((child) => reconcileElementTree(child, overridesMapping));
|
|
2729
|
+
return {
|
|
2730
|
+
...element,
|
|
2731
|
+
elements: reconciledChildren
|
|
2732
|
+
};
|
|
2733
|
+
}
|
|
2734
|
+
function reconcileComponentInstanceElements(elements, overrides = {}) {
|
|
2735
|
+
const overridesMapping = overridesRecordToMapping(overrides);
|
|
2736
|
+
return elements.map((element) => reconcileElementTree(element, overridesMapping));
|
|
2737
|
+
}
|
|
2738
|
+
|
|
2739
|
+
// src/utils/switch-to-component.ts
|
|
2740
|
+
var import_editor_documents2 = require("@elementor/editor-documents");
|
|
2741
|
+
var import_editor_elements9 = require("@elementor/editor-elements");
|
|
2742
|
+
var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
|
|
2676
2743
|
async function switchToComponent(componentId, componentInstanceId, element) {
|
|
2677
2744
|
const selector = getSelector(element, componentInstanceId);
|
|
2678
|
-
(0,
|
|
2679
|
-
await (0,
|
|
2745
|
+
(0, import_editor_documents2.invalidateDocumentData)(componentId);
|
|
2746
|
+
await (0, import_editor_documents2.switchToDocument)(componentId, {
|
|
2680
2747
|
selector,
|
|
2681
2748
|
mode: "autosave",
|
|
2682
2749
|
setAsInitial: false,
|
|
2683
2750
|
shouldScroll: false
|
|
2684
2751
|
});
|
|
2685
2752
|
await loadComponentsOverridableProps([componentId], { force: true });
|
|
2686
|
-
const currentDocumentContainer = (0,
|
|
2753
|
+
const currentDocumentContainer = (0, import_editor_elements9.getCurrentDocumentContainer)();
|
|
2687
2754
|
const topLevelElement = currentDocumentContainer?.children?.[0];
|
|
2688
2755
|
if (topLevelElement) {
|
|
2689
|
-
(0,
|
|
2756
|
+
(0, import_editor_elements9.selectElement)(topLevelElement.id);
|
|
2690
2757
|
expandNavigator();
|
|
2691
2758
|
}
|
|
2692
2759
|
}
|
|
2693
2760
|
async function expandNavigator() {
|
|
2694
|
-
await (0,
|
|
2761
|
+
await (0, import_editor_v1_adapters4.__privateRunCommand)("navigator/expand-all");
|
|
2695
2762
|
}
|
|
2696
2763
|
function getSelector(element, componentInstanceId) {
|
|
2697
2764
|
if (element) {
|
|
@@ -2802,7 +2869,7 @@ function createComponentView(options) {
|
|
|
2802
2869
|
eventsManagerConfig = legacyWindow.elementorCommon.eventsManager.config;
|
|
2803
2870
|
#componentRenderContext;
|
|
2804
2871
|
isComponentCurrentlyEdited() {
|
|
2805
|
-
const currentDocument = (0,
|
|
2872
|
+
const currentDocument = (0, import_editor_documents3.getCurrentDocument)();
|
|
2806
2873
|
return currentDocument?.id === this.getComponentId();
|
|
2807
2874
|
}
|
|
2808
2875
|
getRenderContext() {
|
|
@@ -2845,7 +2912,11 @@ function createComponentView(options) {
|
|
|
2845
2912
|
};
|
|
2846
2913
|
const instanceId = this.model.get("id");
|
|
2847
2914
|
const elements = componentInstance.elements ?? [];
|
|
2848
|
-
const
|
|
2915
|
+
const reconciledElements = reconcileComponentInstanceElements(
|
|
2916
|
+
elements,
|
|
2917
|
+
componentInstance.overrides ?? {}
|
|
2918
|
+
);
|
|
2919
|
+
const formattedElements = formatComponentElementsId(reconciledElements, [instanceId]);
|
|
2849
2920
|
this.collection = legacyWindow.elementor.createBackboneElementsCollection(formattedElements);
|
|
2850
2921
|
this.collection.models.forEach(setInactiveRecursively);
|
|
2851
2922
|
settings.component_instance = "<template data-children-placeholder></template>";
|
|
@@ -2881,7 +2952,7 @@ function createComponentView(options) {
|
|
|
2881
2952
|
}
|
|
2882
2953
|
_getContextMenuConfig() {
|
|
2883
2954
|
const isAdministrator = isUserAdministrator();
|
|
2884
|
-
const hasPro = (0,
|
|
2955
|
+
const hasPro = (0, import_utils6.hasProInstalled)();
|
|
2885
2956
|
const isOutdated = isProOutdatedForComponents();
|
|
2886
2957
|
const showPromoBadge = !hasPro && !isOutdated;
|
|
2887
2958
|
const badgeClass = "elementor-context-menu-list__item__shortcut__promotion-badge";
|
|
@@ -2975,7 +3046,7 @@ function createComponentView(options) {
|
|
|
2975
3046
|
notifyComponentEditUpdate();
|
|
2976
3047
|
return;
|
|
2977
3048
|
}
|
|
2978
|
-
if (!(0,
|
|
3049
|
+
if (!(0, import_utils6.hasProInstalled)()) {
|
|
2979
3050
|
notifyComponentEditUpgrade();
|
|
2980
3051
|
return;
|
|
2981
3052
|
}
|
|
@@ -3072,9 +3143,9 @@ function PopulateStore() {
|
|
|
3072
3143
|
}
|
|
3073
3144
|
|
|
3074
3145
|
// src/prevent-circular-nesting.ts
|
|
3075
|
-
var
|
|
3146
|
+
var import_editor_elements10 = require("@elementor/editor-elements");
|
|
3076
3147
|
var import_editor_notifications3 = require("@elementor/editor-notifications");
|
|
3077
|
-
var
|
|
3148
|
+
var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
|
|
3078
3149
|
var import_store26 = require("@elementor/store");
|
|
3079
3150
|
var import_i18n14 = require("@wordpress/i18n");
|
|
3080
3151
|
var COMPONENT_TYPE = "e-component";
|
|
@@ -3084,15 +3155,15 @@ var COMPONENT_CIRCULAR_NESTING_ALERT = {
|
|
|
3084
3155
|
id: "circular-component-nesting-blocked"
|
|
3085
3156
|
};
|
|
3086
3157
|
function initCircularNestingPrevention() {
|
|
3087
|
-
(0,
|
|
3158
|
+
(0, import_editor_v1_adapters5.blockCommand)({
|
|
3088
3159
|
command: "document/elements/create",
|
|
3089
3160
|
condition: blockCircularCreate
|
|
3090
3161
|
});
|
|
3091
|
-
(0,
|
|
3162
|
+
(0, import_editor_v1_adapters5.blockCommand)({
|
|
3092
3163
|
command: "document/elements/move",
|
|
3093
3164
|
condition: blockCircularMove
|
|
3094
3165
|
});
|
|
3095
|
-
(0,
|
|
3166
|
+
(0, import_editor_v1_adapters5.blockCommand)({
|
|
3096
3167
|
command: "document/elements/paste",
|
|
3097
3168
|
condition: blockCircularPaste
|
|
3098
3169
|
});
|
|
@@ -3167,7 +3238,7 @@ function blockCircularMove(args) {
|
|
|
3167
3238
|
if (!container) {
|
|
3168
3239
|
return false;
|
|
3169
3240
|
}
|
|
3170
|
-
const allElements = (0,
|
|
3241
|
+
const allElements = (0, import_editor_elements10.getAllDescendants)(container);
|
|
3171
3242
|
return allElements.some((element) => {
|
|
3172
3243
|
const componentId = extractComponentIdFromContainer(element);
|
|
3173
3244
|
if (componentId === null) {
|
|
@@ -3204,7 +3275,7 @@ function removeComponentStyles(id) {
|
|
|
3204
3275
|
}
|
|
3205
3276
|
|
|
3206
3277
|
// src/sync/publish-draft-components-in-page-before-save.ts
|
|
3207
|
-
var
|
|
3278
|
+
var import_editor_documents4 = require("@elementor/editor-documents");
|
|
3208
3279
|
var import_editor_notifications4 = require("@elementor/editor-notifications");
|
|
3209
3280
|
var import_http_client2 = require("@elementor/http-client");
|
|
3210
3281
|
var import_i18n15 = require("@wordpress/i18n");
|
|
@@ -3216,7 +3287,7 @@ async function publishDraftComponentsInPageBeforeSave({ status, elements }) {
|
|
|
3216
3287
|
return;
|
|
3217
3288
|
}
|
|
3218
3289
|
const documents = await getComponentDocuments({ elements });
|
|
3219
|
-
const draftIds = [...documents.values()].filter(
|
|
3290
|
+
const draftIds = [...documents.values()].filter(import_editor_documents4.isDocumentDirty).map((document2) => document2.id);
|
|
3220
3291
|
if (draftIds.length === 0) {
|
|
3221
3292
|
return;
|
|
3222
3293
|
}
|
|
@@ -3229,7 +3300,7 @@ async function publishDraftComponentsInPageBeforeSave({ status, elements }) {
|
|
|
3229
3300
|
}
|
|
3230
3301
|
throw error;
|
|
3231
3302
|
}
|
|
3232
|
-
draftIds.forEach((id) => (0,
|
|
3303
|
+
draftIds.forEach((id) => (0, import_editor_documents4.invalidateDocumentData)(id));
|
|
3233
3304
|
}
|
|
3234
3305
|
function isInsufficientPermissionsError(error) {
|
|
3235
3306
|
return error instanceof import_http_client2.AxiosError && error.response?.data?.code === INSUFFICIENT_PERMISSIONS_ERROR_CODE;
|
|
@@ -3262,12 +3333,12 @@ var beforeSave = ({ container, status }) => {
|
|
|
3262
3333
|
};
|
|
3263
3334
|
|
|
3264
3335
|
// src/sync/load-component-data-after-instance-added.ts
|
|
3265
|
-
var
|
|
3336
|
+
var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
|
|
3266
3337
|
function initLoadComponentDataAfterInstanceAdded() {
|
|
3267
|
-
(0,
|
|
3338
|
+
(0, import_editor_v1_adapters6.registerDataHook)("after", "document/elements/paste", (_args, result) => {
|
|
3268
3339
|
load(result);
|
|
3269
3340
|
});
|
|
3270
|
-
(0,
|
|
3341
|
+
(0, import_editor_v1_adapters6.registerDataHook)("after", "document/elements/import", (_args, result) => {
|
|
3271
3342
|
load(result);
|
|
3272
3343
|
});
|
|
3273
3344
|
}
|
|
@@ -3302,8 +3373,8 @@ function init() {
|
|
|
3302
3373
|
id: "components-populate-store",
|
|
3303
3374
|
component: PopulateStore
|
|
3304
3375
|
});
|
|
3305
|
-
(0,
|
|
3306
|
-
const { id, config } = (0,
|
|
3376
|
+
(0, import_editor_v1_adapters7.registerDataHook)("after", "editor/documents/attach-preview", () => {
|
|
3377
|
+
const { id, config } = (0, import_editor_documents5.getV1CurrentDocument)() ?? {};
|
|
3307
3378
|
if (!id) {
|
|
3308
3379
|
return;
|
|
3309
3380
|
}
|