@elementor/editor-components 3.35.0-460 → 3.35.0-461
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 +191 -175
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +184 -168
- package/dist/index.mjs.map +1 -1
- package/package.json +22 -22
- package/src/init.ts +5 -2
- package/src/sync/load-component-data-after-instance-added.ts +20 -0
- /package/src/{hooks → sync}/cleanup-overridable-props-on-delete.ts +0 -0
- /package/src/{hooks → sync}/regenerate-override-keys.ts +0 -0
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 as
|
|
18
|
+
import { registerDataHook as registerDataHook4 } from "@elementor/editor-v1-adapters";
|
|
19
19
|
import { __registerSlice as registerSlice } from "@elementor/store";
|
|
20
20
|
import { __ as __30 } from "@wordpress/i18n";
|
|
21
21
|
|
|
@@ -4295,150 +4295,16 @@ function isPropAllowed(propType) {
|
|
|
4295
4295
|
return propType.meta.overridable !== false;
|
|
4296
4296
|
}
|
|
4297
4297
|
|
|
4298
|
-
// src/hooks/cleanup-overridable-props-on-delete.ts
|
|
4299
|
-
import { getAllDescendants as getAllDescendants3 } from "@elementor/editor-elements";
|
|
4300
|
-
import { registerDataHook } from "@elementor/editor-v1-adapters";
|
|
4301
|
-
import { __dispatch as dispatch15, __getState as getState19 } from "@elementor/store";
|
|
4302
|
-
function initCleanupOverridablePropsOnDelete() {
|
|
4303
|
-
registerDataHook("dependency", "document/elements/delete", (args) => {
|
|
4304
|
-
const state = getState19();
|
|
4305
|
-
if (!state) {
|
|
4306
|
-
return true;
|
|
4307
|
-
}
|
|
4308
|
-
const currentComponentId = selectCurrentComponentId(state);
|
|
4309
|
-
if (!currentComponentId) {
|
|
4310
|
-
return true;
|
|
4311
|
-
}
|
|
4312
|
-
const overridableProps = selectOverridableProps(state, currentComponentId);
|
|
4313
|
-
if (!overridableProps || Object.keys(overridableProps.props).length === 0) {
|
|
4314
|
-
return true;
|
|
4315
|
-
}
|
|
4316
|
-
const containers = args.containers ?? (args.container ? [args.container] : []);
|
|
4317
|
-
if (containers.length === 0) {
|
|
4318
|
-
return true;
|
|
4319
|
-
}
|
|
4320
|
-
const deletedElementIds = collectDeletedElementIds(containers);
|
|
4321
|
-
if (deletedElementIds.length === 0) {
|
|
4322
|
-
return true;
|
|
4323
|
-
}
|
|
4324
|
-
const propKeysToDelete = Object.entries(overridableProps.props).filter(([, prop]) => deletedElementIds.includes(prop.elementId)).map(([propKey]) => propKey);
|
|
4325
|
-
if (propKeysToDelete.length === 0) {
|
|
4326
|
-
return true;
|
|
4327
|
-
}
|
|
4328
|
-
const remainingProps = Object.fromEntries(
|
|
4329
|
-
Object.entries(overridableProps.props).filter(([propKey]) => !propKeysToDelete.includes(propKey))
|
|
4330
|
-
);
|
|
4331
|
-
let updatedGroups = overridableProps.groups;
|
|
4332
|
-
for (const propKey of propKeysToDelete) {
|
|
4333
|
-
updatedGroups = removePropFromAllGroups(updatedGroups, propKey);
|
|
4334
|
-
}
|
|
4335
|
-
dispatch15(
|
|
4336
|
-
slice.actions.setOverridableProps({
|
|
4337
|
-
componentId: currentComponentId,
|
|
4338
|
-
overridableProps: {
|
|
4339
|
-
...overridableProps,
|
|
4340
|
-
props: remainingProps,
|
|
4341
|
-
groups: updatedGroups
|
|
4342
|
-
}
|
|
4343
|
-
})
|
|
4344
|
-
);
|
|
4345
|
-
return true;
|
|
4346
|
-
});
|
|
4347
|
-
}
|
|
4348
|
-
function collectDeletedElementIds(containers) {
|
|
4349
|
-
const elementIds = containers.filter(Boolean).flatMap((container) => [container, ...getAllDescendants3(container)]).map((element) => element.model?.get?.("id") ?? element.id).filter((id2) => Boolean(id2));
|
|
4350
|
-
return elementIds;
|
|
4351
|
-
}
|
|
4352
|
-
|
|
4353
|
-
// src/hooks/regenerate-override-keys.ts
|
|
4354
|
-
import { getAllDescendants as getAllDescendants4, getContainer as getContainer4, updateElementSettings as updateElementSettings2 } from "@elementor/editor-elements";
|
|
4355
|
-
import { registerDataHook as registerDataHook2 } from "@elementor/editor-v1-adapters";
|
|
4356
|
-
import { generateUniqueId as generateUniqueId5 } from "@elementor/utils";
|
|
4357
|
-
function initRegenerateOverrideKeys() {
|
|
4358
|
-
registerDataHook2("after", "document/elements/duplicate", (_args, result) => {
|
|
4359
|
-
regenerateOverrideKeysForContainers(result);
|
|
4360
|
-
});
|
|
4361
|
-
registerDataHook2("after", "document/elements/paste", (_args, result) => {
|
|
4362
|
-
regenerateOverrideKeysForContainers(result);
|
|
4363
|
-
});
|
|
4364
|
-
registerDataHook2("after", "document/elements/import", (_args, result) => {
|
|
4365
|
-
regenerateOverrideKeysForContainers(result);
|
|
4366
|
-
});
|
|
4367
|
-
}
|
|
4368
|
-
function regenerateOverrideKeysForContainers(result) {
|
|
4369
|
-
const containers = Array.isArray(result) ? result : [result];
|
|
4370
|
-
containers.forEach((container) => {
|
|
4371
|
-
regenerateOverrideKeysRecursive(container.id);
|
|
4372
|
-
});
|
|
4373
|
-
}
|
|
4374
|
-
function regenerateOverrideKeysRecursive(elementId) {
|
|
4375
|
-
const container = getContainer4(elementId);
|
|
4376
|
-
if (!container) {
|
|
4377
|
-
return;
|
|
4378
|
-
}
|
|
4379
|
-
getAllDescendants4(container).forEach(regenerateOverrideKeys);
|
|
4380
|
-
}
|
|
4381
|
-
function regenerateOverrideKeys(element) {
|
|
4382
|
-
if (!isComponentInstance(element.model.toJSON())) {
|
|
4383
|
-
return;
|
|
4384
|
-
}
|
|
4385
|
-
const settings = element.settings?.toJSON() ?? {};
|
|
4386
|
-
if (!hasOverrides(settings)) {
|
|
4387
|
-
return;
|
|
4388
|
-
}
|
|
4389
|
-
const componentInstance = settings.component_instance;
|
|
4390
|
-
const overrides = componentInstance.value.overrides;
|
|
4391
|
-
const newOverrides = overrides.value.map((override) => {
|
|
4392
|
-
if (!componentInstanceOverridePropTypeUtil.isValid(override)) {
|
|
4393
|
-
return override;
|
|
4394
|
-
}
|
|
4395
|
-
return {
|
|
4396
|
-
...override,
|
|
4397
|
-
value: {
|
|
4398
|
-
...override.value,
|
|
4399
|
-
override_key: generateUniqueId5("prop")
|
|
4400
|
-
}
|
|
4401
|
-
};
|
|
4402
|
-
});
|
|
4403
|
-
const newComponentInstance = {
|
|
4404
|
-
...componentInstance,
|
|
4405
|
-
value: {
|
|
4406
|
-
...componentInstance.value,
|
|
4407
|
-
overrides: {
|
|
4408
|
-
...overrides,
|
|
4409
|
-
value: newOverrides
|
|
4410
|
-
}
|
|
4411
|
-
}
|
|
4412
|
-
};
|
|
4413
|
-
updateElementSettings2({
|
|
4414
|
-
id: element.id,
|
|
4415
|
-
props: { component_instance: newComponentInstance },
|
|
4416
|
-
withHistory: false
|
|
4417
|
-
});
|
|
4418
|
-
}
|
|
4419
|
-
function hasOverrides(settings) {
|
|
4420
|
-
if (!componentInstancePropTypeUtil.isValid(settings?.component_instance)) {
|
|
4421
|
-
return false;
|
|
4422
|
-
}
|
|
4423
|
-
const componentInstance = componentInstancePropTypeUtil.extract(settings?.component_instance);
|
|
4424
|
-
const overrides = componentInstance?.overrides;
|
|
4425
|
-
if (!componentInstanceOverridesPropTypeUtil.isValid(overrides)) {
|
|
4426
|
-
return false;
|
|
4427
|
-
}
|
|
4428
|
-
const overridesValue = overrides?.value;
|
|
4429
|
-
return !!overridesValue?.length;
|
|
4430
|
-
}
|
|
4431
|
-
|
|
4432
4298
|
// src/mcp/index.ts
|
|
4433
4299
|
import { getMCPByDomain as getMCPByDomain2 } from "@elementor/editor-mcp";
|
|
4434
4300
|
|
|
4435
4301
|
// src/mcp/save-as-component-tool.ts
|
|
4436
4302
|
import { DOCUMENT_STRUCTURE_URI, WIDGET_SCHEMA_URI } from "@elementor/editor-canvas";
|
|
4437
|
-
import { getContainer as
|
|
4303
|
+
import { getContainer as getContainer4, getElementType as getElementType4, getWidgetsCache as getWidgetsCache4 } from "@elementor/editor-elements";
|
|
4438
4304
|
import { getMCPByDomain, toolPrompts } from "@elementor/editor-mcp";
|
|
4439
4305
|
import { AxiosError } from "@elementor/http-client";
|
|
4440
4306
|
import { z as z6 } from "@elementor/schema";
|
|
4441
|
-
import { generateUniqueId as
|
|
4307
|
+
import { generateUniqueId as generateUniqueId5 } from "@elementor/utils";
|
|
4442
4308
|
var InputSchema = {
|
|
4443
4309
|
element_id: z6.string().describe(
|
|
4444
4310
|
'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.'
|
|
@@ -4472,7 +4338,7 @@ var ERROR_MESSAGES3 = {
|
|
|
4472
4338
|
var handleSaveAsComponent = async (params) => {
|
|
4473
4339
|
const { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;
|
|
4474
4340
|
const validElementTypes = getValidElementTypes();
|
|
4475
|
-
const container =
|
|
4341
|
+
const container = getContainer4(elementId);
|
|
4476
4342
|
if (!container) {
|
|
4477
4343
|
throw new Error(ERROR_MESSAGES3.ELEMENT_NOT_FOUND);
|
|
4478
4344
|
}
|
|
@@ -4488,7 +4354,7 @@ var handleSaveAsComponent = async (params) => {
|
|
|
4488
4354
|
if (overridableProps) {
|
|
4489
4355
|
updateElementDataWithOverridableProps(element, overridableProps);
|
|
4490
4356
|
}
|
|
4491
|
-
const uid =
|
|
4357
|
+
const uid = generateUniqueId5("component");
|
|
4492
4358
|
try {
|
|
4493
4359
|
await apiClient.validate({
|
|
4494
4360
|
items: [
|
|
@@ -4510,7 +4376,7 @@ var handleSaveAsComponent = async (params) => {
|
|
|
4510
4376
|
};
|
|
4511
4377
|
function enrichOverridableProps(input, rootElement) {
|
|
4512
4378
|
const enrichedProps = {};
|
|
4513
|
-
const defaultGroupId =
|
|
4379
|
+
const defaultGroupId = generateUniqueId5("group");
|
|
4514
4380
|
Object.entries(input.props).forEach(([, prop]) => {
|
|
4515
4381
|
const { elementId, propKey, label } = prop;
|
|
4516
4382
|
const element = findElementById(rootElement, elementId);
|
|
@@ -4531,7 +4397,7 @@ function enrichOverridableProps(input, rootElement) {
|
|
|
4531
4397
|
`Property "${propKey}" does not exist in element "${elementId}" (type: ${widgetType}). Available properties: ${availableProps}`
|
|
4532
4398
|
);
|
|
4533
4399
|
}
|
|
4534
|
-
const overrideKey =
|
|
4400
|
+
const overrideKey = generateUniqueId5("prop");
|
|
4535
4401
|
const originValue = element.settings?.[propKey] ? element.settings[propKey] : elementType.propsSchema[propKey].default ?? null;
|
|
4536
4402
|
enrichedProps[overrideKey] = {
|
|
4537
4403
|
overrideKey,
|
|
@@ -4766,19 +4632,19 @@ function initMcp() {
|
|
|
4766
4632
|
|
|
4767
4633
|
// src/populate-store.ts
|
|
4768
4634
|
import { useEffect as useEffect6 } from "react";
|
|
4769
|
-
import { __dispatch as
|
|
4635
|
+
import { __dispatch as dispatch15 } from "@elementor/store";
|
|
4770
4636
|
function PopulateStore() {
|
|
4771
4637
|
useEffect6(() => {
|
|
4772
|
-
|
|
4638
|
+
dispatch15(loadComponents());
|
|
4773
4639
|
}, []);
|
|
4774
4640
|
return null;
|
|
4775
4641
|
}
|
|
4776
4642
|
|
|
4777
4643
|
// src/prevent-circular-nesting.ts
|
|
4778
|
-
import { getAllDescendants as
|
|
4644
|
+
import { getAllDescendants as getAllDescendants3 } from "@elementor/editor-elements";
|
|
4779
4645
|
import { notify as notify4 } from "@elementor/editor-notifications";
|
|
4780
4646
|
import { blockCommand as blockCommand2 } from "@elementor/editor-v1-adapters";
|
|
4781
|
-
import { __getState as
|
|
4647
|
+
import { __getState as getState19 } from "@elementor/store";
|
|
4782
4648
|
import { __ as __29 } from "@wordpress/i18n";
|
|
4783
4649
|
var COMPONENT_TYPE = "e-component";
|
|
4784
4650
|
var COMPONENT_CIRCULAR_NESTING_ALERT = {
|
|
@@ -4804,7 +4670,7 @@ function wouldCreateCircularNesting(componentIdToAdd) {
|
|
|
4804
4670
|
if (componentIdToAdd === void 0) {
|
|
4805
4671
|
return false;
|
|
4806
4672
|
}
|
|
4807
|
-
const state =
|
|
4673
|
+
const state = getState19();
|
|
4808
4674
|
const currentComponentId = selectCurrentComponentId(state);
|
|
4809
4675
|
const path = selectPath(state);
|
|
4810
4676
|
if (currentComponentId === null) {
|
|
@@ -4870,7 +4736,7 @@ function blockCircularMove(args) {
|
|
|
4870
4736
|
if (!container) {
|
|
4871
4737
|
return false;
|
|
4872
4738
|
}
|
|
4873
|
-
const allElements =
|
|
4739
|
+
const allElements = getAllDescendants3(container);
|
|
4874
4740
|
return allElements.some((element) => {
|
|
4875
4741
|
const componentId = extractComponentIdFromContainer(element);
|
|
4876
4742
|
if (componentId === null) {
|
|
@@ -4902,15 +4768,15 @@ function blockCircularPaste(args) {
|
|
|
4902
4768
|
}
|
|
4903
4769
|
|
|
4904
4770
|
// src/store/actions/remove-component-styles.ts
|
|
4905
|
-
import { __dispatch as
|
|
4771
|
+
import { __dispatch as dispatch16 } from "@elementor/store";
|
|
4906
4772
|
function removeComponentStyles(id2) {
|
|
4907
4773
|
apiClient.invalidateComponentConfigCache(id2);
|
|
4908
|
-
|
|
4774
|
+
dispatch16(slice.actions.removeStyles({ id: id2 }));
|
|
4909
4775
|
}
|
|
4910
4776
|
|
|
4911
4777
|
// src/store/components-styles-provider.ts
|
|
4912
4778
|
import { createStylesProvider } from "@elementor/editor-styles-repository";
|
|
4913
|
-
import { __getState as
|
|
4779
|
+
import { __getState as getState20, __subscribeWithSelector as subscribeWithSelector } from "@elementor/store";
|
|
4914
4780
|
var componentsStylesProvider = createStylesProvider({
|
|
4915
4781
|
key: "components-styles",
|
|
4916
4782
|
priority: 100,
|
|
@@ -4922,29 +4788,29 @@ var componentsStylesProvider = createStylesProvider({
|
|
|
4922
4788
|
),
|
|
4923
4789
|
actions: {
|
|
4924
4790
|
all: () => {
|
|
4925
|
-
return selectFlatStyles(
|
|
4791
|
+
return selectFlatStyles(getState20());
|
|
4926
4792
|
},
|
|
4927
4793
|
get: (id2) => {
|
|
4928
|
-
return selectFlatStyles(
|
|
4794
|
+
return selectFlatStyles(getState20()).find((style) => style.id === id2) ?? null;
|
|
4929
4795
|
}
|
|
4930
4796
|
}
|
|
4931
4797
|
});
|
|
4932
4798
|
|
|
4933
4799
|
// src/sync/create-components-before-save.ts
|
|
4934
|
-
import { updateElementSettings as
|
|
4935
|
-
import { __dispatch as
|
|
4800
|
+
import { updateElementSettings as updateElementSettings2 } from "@elementor/editor-elements";
|
|
4801
|
+
import { __dispatch as dispatch17, __getState as getState21 } from "@elementor/store";
|
|
4936
4802
|
async function createComponentsBeforeSave({
|
|
4937
4803
|
elements,
|
|
4938
4804
|
status
|
|
4939
4805
|
}) {
|
|
4940
|
-
const unpublishedComponents = selectUnpublishedComponents(
|
|
4806
|
+
const unpublishedComponents = selectUnpublishedComponents(getState21());
|
|
4941
4807
|
if (!unpublishedComponents.length) {
|
|
4942
4808
|
return;
|
|
4943
4809
|
}
|
|
4944
4810
|
try {
|
|
4945
4811
|
const uidToComponentId = await createComponents(unpublishedComponents, status);
|
|
4946
4812
|
updateComponentInstances(elements, uidToComponentId);
|
|
4947
|
-
|
|
4813
|
+
dispatch17(
|
|
4948
4814
|
slice.actions.add(
|
|
4949
4815
|
unpublishedComponents.map((component) => ({
|
|
4950
4816
|
id: uidToComponentId.get(component.uid),
|
|
@@ -4954,7 +4820,7 @@ async function createComponentsBeforeSave({
|
|
|
4954
4820
|
}))
|
|
4955
4821
|
)
|
|
4956
4822
|
);
|
|
4957
|
-
|
|
4823
|
+
dispatch17(slice.actions.resetUnpublished());
|
|
4958
4824
|
} catch (error) {
|
|
4959
4825
|
throw new Error(`Failed to publish components and update component instances: ${error}`);
|
|
4960
4826
|
}
|
|
@@ -4999,7 +4865,7 @@ function shouldUpdateElement(element, uidToComponentId) {
|
|
|
4999
4865
|
return { shouldUpdate: false, newComponentId: null };
|
|
5000
4866
|
}
|
|
5001
4867
|
function updateElementComponentId(elementId, componentId) {
|
|
5002
|
-
|
|
4868
|
+
updateElementSettings2({
|
|
5003
4869
|
id: elementId,
|
|
5004
4870
|
props: {
|
|
5005
4871
|
component_instance: {
|
|
@@ -5014,7 +4880,7 @@ function updateElementComponentId(elementId, componentId) {
|
|
|
5014
4880
|
}
|
|
5015
4881
|
|
|
5016
4882
|
// src/sync/set-component-overridable-props-settings-before-save.ts
|
|
5017
|
-
import { __getState as
|
|
4883
|
+
import { __getState as getState22 } from "@elementor/store";
|
|
5018
4884
|
var setComponentOverridablePropsSettingsBeforeSave = ({
|
|
5019
4885
|
container
|
|
5020
4886
|
}) => {
|
|
@@ -5022,7 +4888,7 @@ var setComponentOverridablePropsSettingsBeforeSave = ({
|
|
|
5022
4888
|
if (!currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE) {
|
|
5023
4889
|
return;
|
|
5024
4890
|
}
|
|
5025
|
-
const overridableProps = selectOverridableProps(
|
|
4891
|
+
const overridableProps = selectOverridableProps(getState22(), currentDocument.id);
|
|
5026
4892
|
if (overridableProps) {
|
|
5027
4893
|
container.settings.set("overridable_props", overridableProps);
|
|
5028
4894
|
}
|
|
@@ -5030,7 +4896,7 @@ var setComponentOverridablePropsSettingsBeforeSave = ({
|
|
|
5030
4896
|
|
|
5031
4897
|
// src/sync/update-archived-component-before-save.ts
|
|
5032
4898
|
import { notify as notify5 } from "@elementor/editor-notifications";
|
|
5033
|
-
import { __getState as
|
|
4899
|
+
import { __getState as getState23 } from "@elementor/store";
|
|
5034
4900
|
var failedNotification = (message) => ({
|
|
5035
4901
|
type: "error",
|
|
5036
4902
|
message: `Failed to archive components: ${message}`,
|
|
@@ -5038,7 +4904,7 @@ var failedNotification = (message) => ({
|
|
|
5038
4904
|
});
|
|
5039
4905
|
var updateArchivedComponentBeforeSave = async () => {
|
|
5040
4906
|
try {
|
|
5041
|
-
const archivedComponents = selectArchivedThisSession(
|
|
4907
|
+
const archivedComponents = selectArchivedThisSession(getState23());
|
|
5042
4908
|
if (!archivedComponents.length) {
|
|
5043
4909
|
return;
|
|
5044
4910
|
}
|
|
@@ -5053,15 +4919,15 @@ var updateArchivedComponentBeforeSave = async () => {
|
|
|
5053
4919
|
};
|
|
5054
4920
|
|
|
5055
4921
|
// src/sync/update-component-title-before-save.ts
|
|
5056
|
-
import { __dispatch as
|
|
4922
|
+
import { __dispatch as dispatch18, __getState as getState24 } from "@elementor/store";
|
|
5057
4923
|
var updateComponentTitleBeforeSave = async () => {
|
|
5058
|
-
const updatedComponentNames = selectUpdatedComponentNames(
|
|
4924
|
+
const updatedComponentNames = selectUpdatedComponentNames(getState24());
|
|
5059
4925
|
if (!updatedComponentNames.length) {
|
|
5060
4926
|
return;
|
|
5061
4927
|
}
|
|
5062
4928
|
const result = await apiClient.updateComponentTitle(updatedComponentNames);
|
|
5063
4929
|
if (result.failedIds.length === 0) {
|
|
5064
|
-
|
|
4930
|
+
dispatch18(slice.actions.cleanUpdatedComponentNames());
|
|
5065
4931
|
}
|
|
5066
4932
|
};
|
|
5067
4933
|
|
|
@@ -5093,6 +4959,155 @@ var beforeSave = ({ container, status }) => {
|
|
|
5093
4959
|
]);
|
|
5094
4960
|
};
|
|
5095
4961
|
|
|
4962
|
+
// src/sync/cleanup-overridable-props-on-delete.ts
|
|
4963
|
+
import { getAllDescendants as getAllDescendants4 } from "@elementor/editor-elements";
|
|
4964
|
+
import { registerDataHook } from "@elementor/editor-v1-adapters";
|
|
4965
|
+
import { __dispatch as dispatch19, __getState as getState25 } from "@elementor/store";
|
|
4966
|
+
function initCleanupOverridablePropsOnDelete() {
|
|
4967
|
+
registerDataHook("dependency", "document/elements/delete", (args) => {
|
|
4968
|
+
const state = getState25();
|
|
4969
|
+
if (!state) {
|
|
4970
|
+
return true;
|
|
4971
|
+
}
|
|
4972
|
+
const currentComponentId = selectCurrentComponentId(state);
|
|
4973
|
+
if (!currentComponentId) {
|
|
4974
|
+
return true;
|
|
4975
|
+
}
|
|
4976
|
+
const overridableProps = selectOverridableProps(state, currentComponentId);
|
|
4977
|
+
if (!overridableProps || Object.keys(overridableProps.props).length === 0) {
|
|
4978
|
+
return true;
|
|
4979
|
+
}
|
|
4980
|
+
const containers = args.containers ?? (args.container ? [args.container] : []);
|
|
4981
|
+
if (containers.length === 0) {
|
|
4982
|
+
return true;
|
|
4983
|
+
}
|
|
4984
|
+
const deletedElementIds = collectDeletedElementIds(containers);
|
|
4985
|
+
if (deletedElementIds.length === 0) {
|
|
4986
|
+
return true;
|
|
4987
|
+
}
|
|
4988
|
+
const propKeysToDelete = Object.entries(overridableProps.props).filter(([, prop]) => deletedElementIds.includes(prop.elementId)).map(([propKey]) => propKey);
|
|
4989
|
+
if (propKeysToDelete.length === 0) {
|
|
4990
|
+
return true;
|
|
4991
|
+
}
|
|
4992
|
+
const remainingProps = Object.fromEntries(
|
|
4993
|
+
Object.entries(overridableProps.props).filter(([propKey]) => !propKeysToDelete.includes(propKey))
|
|
4994
|
+
);
|
|
4995
|
+
let updatedGroups = overridableProps.groups;
|
|
4996
|
+
for (const propKey of propKeysToDelete) {
|
|
4997
|
+
updatedGroups = removePropFromAllGroups(updatedGroups, propKey);
|
|
4998
|
+
}
|
|
4999
|
+
dispatch19(
|
|
5000
|
+
slice.actions.setOverridableProps({
|
|
5001
|
+
componentId: currentComponentId,
|
|
5002
|
+
overridableProps: {
|
|
5003
|
+
...overridableProps,
|
|
5004
|
+
props: remainingProps,
|
|
5005
|
+
groups: updatedGroups
|
|
5006
|
+
}
|
|
5007
|
+
})
|
|
5008
|
+
);
|
|
5009
|
+
return true;
|
|
5010
|
+
});
|
|
5011
|
+
}
|
|
5012
|
+
function collectDeletedElementIds(containers) {
|
|
5013
|
+
const elementIds = containers.filter(Boolean).flatMap((container) => [container, ...getAllDescendants4(container)]).map((element) => element.model?.get?.("id") ?? element.id).filter((id2) => Boolean(id2));
|
|
5014
|
+
return elementIds;
|
|
5015
|
+
}
|
|
5016
|
+
|
|
5017
|
+
// src/sync/load-component-data-after-instance-added.ts
|
|
5018
|
+
import { registerDataHook as registerDataHook2 } from "@elementor/editor-v1-adapters";
|
|
5019
|
+
function initLoadComponentDataAfterInstanceAdded() {
|
|
5020
|
+
registerDataHook2("after", "document/elements/paste", (_args, result) => {
|
|
5021
|
+
load(result);
|
|
5022
|
+
});
|
|
5023
|
+
registerDataHook2("after", "document/elements/import", (_args, result) => {
|
|
5024
|
+
load(result);
|
|
5025
|
+
});
|
|
5026
|
+
}
|
|
5027
|
+
function load(result) {
|
|
5028
|
+
const containers = Array.isArray(result) ? result : [result];
|
|
5029
|
+
loadComponentsAssets(containers.map((container) => container.model.toJSON()));
|
|
5030
|
+
}
|
|
5031
|
+
|
|
5032
|
+
// src/sync/regenerate-override-keys.ts
|
|
5033
|
+
import { getAllDescendants as getAllDescendants5, getContainer as getContainer5, updateElementSettings as updateElementSettings3 } from "@elementor/editor-elements";
|
|
5034
|
+
import { registerDataHook as registerDataHook3 } from "@elementor/editor-v1-adapters";
|
|
5035
|
+
import { generateUniqueId as generateUniqueId6 } from "@elementor/utils";
|
|
5036
|
+
function initRegenerateOverrideKeys() {
|
|
5037
|
+
registerDataHook3("after", "document/elements/duplicate", (_args, result) => {
|
|
5038
|
+
regenerateOverrideKeysForContainers(result);
|
|
5039
|
+
});
|
|
5040
|
+
registerDataHook3("after", "document/elements/paste", (_args, result) => {
|
|
5041
|
+
regenerateOverrideKeysForContainers(result);
|
|
5042
|
+
});
|
|
5043
|
+
registerDataHook3("after", "document/elements/import", (_args, result) => {
|
|
5044
|
+
regenerateOverrideKeysForContainers(result);
|
|
5045
|
+
});
|
|
5046
|
+
}
|
|
5047
|
+
function regenerateOverrideKeysForContainers(result) {
|
|
5048
|
+
const containers = Array.isArray(result) ? result : [result];
|
|
5049
|
+
containers.forEach((container) => {
|
|
5050
|
+
regenerateOverrideKeysRecursive(container.id);
|
|
5051
|
+
});
|
|
5052
|
+
}
|
|
5053
|
+
function regenerateOverrideKeysRecursive(elementId) {
|
|
5054
|
+
const container = getContainer5(elementId);
|
|
5055
|
+
if (!container) {
|
|
5056
|
+
return;
|
|
5057
|
+
}
|
|
5058
|
+
getAllDescendants5(container).forEach(regenerateOverrideKeys);
|
|
5059
|
+
}
|
|
5060
|
+
function regenerateOverrideKeys(element) {
|
|
5061
|
+
if (!isComponentInstance(element.model.toJSON())) {
|
|
5062
|
+
return;
|
|
5063
|
+
}
|
|
5064
|
+
const settings = element.settings?.toJSON() ?? {};
|
|
5065
|
+
if (!hasOverrides(settings)) {
|
|
5066
|
+
return;
|
|
5067
|
+
}
|
|
5068
|
+
const componentInstance = settings.component_instance;
|
|
5069
|
+
const overrides = componentInstance.value.overrides;
|
|
5070
|
+
const newOverrides = overrides.value.map((override) => {
|
|
5071
|
+
if (!componentInstanceOverridePropTypeUtil.isValid(override)) {
|
|
5072
|
+
return override;
|
|
5073
|
+
}
|
|
5074
|
+
return {
|
|
5075
|
+
...override,
|
|
5076
|
+
value: {
|
|
5077
|
+
...override.value,
|
|
5078
|
+
override_key: generateUniqueId6("prop")
|
|
5079
|
+
}
|
|
5080
|
+
};
|
|
5081
|
+
});
|
|
5082
|
+
const newComponentInstance = {
|
|
5083
|
+
...componentInstance,
|
|
5084
|
+
value: {
|
|
5085
|
+
...componentInstance.value,
|
|
5086
|
+
overrides: {
|
|
5087
|
+
...overrides,
|
|
5088
|
+
value: newOverrides
|
|
5089
|
+
}
|
|
5090
|
+
}
|
|
5091
|
+
};
|
|
5092
|
+
updateElementSettings3({
|
|
5093
|
+
id: element.id,
|
|
5094
|
+
props: { component_instance: newComponentInstance },
|
|
5095
|
+
withHistory: false
|
|
5096
|
+
});
|
|
5097
|
+
}
|
|
5098
|
+
function hasOverrides(settings) {
|
|
5099
|
+
if (!componentInstancePropTypeUtil.isValid(settings?.component_instance)) {
|
|
5100
|
+
return false;
|
|
5101
|
+
}
|
|
5102
|
+
const componentInstance = componentInstancePropTypeUtil.extract(settings?.component_instance);
|
|
5103
|
+
const overrides = componentInstance?.overrides;
|
|
5104
|
+
if (!componentInstanceOverridesPropTypeUtil.isValid(overrides)) {
|
|
5105
|
+
return false;
|
|
5106
|
+
}
|
|
5107
|
+
const overridesValue = overrides?.value;
|
|
5108
|
+
return !!overridesValue?.length;
|
|
5109
|
+
}
|
|
5110
|
+
|
|
5096
5111
|
// src/init.ts
|
|
5097
5112
|
function init() {
|
|
5098
5113
|
stylesRepository.register(componentsStylesProvider);
|
|
@@ -5102,14 +5117,14 @@ function init() {
|
|
|
5102
5117
|
COMPONENT_WIDGET_TYPE,
|
|
5103
5118
|
(options) => createComponentType({ ...options, showLockedByModal: openEditModeDialog })
|
|
5104
5119
|
);
|
|
5105
|
-
|
|
5120
|
+
registerDataHook4("dependency", "editor/documents/close", (args) => {
|
|
5106
5121
|
const document = getV1CurrentDocument();
|
|
5107
5122
|
if (document.config.type === COMPONENT_DOCUMENT_TYPE) {
|
|
5108
5123
|
args.mode = "autosave";
|
|
5109
5124
|
}
|
|
5110
5125
|
return true;
|
|
5111
5126
|
});
|
|
5112
|
-
|
|
5127
|
+
registerDataHook4("after", "preview/drop", onElementDrop);
|
|
5113
5128
|
window.elementorCommon.__beforeSave = beforeSave;
|
|
5114
5129
|
injectTab({
|
|
5115
5130
|
id: "components",
|
|
@@ -5133,7 +5148,7 @@ function init() {
|
|
|
5133
5148
|
id: "component-panel-header",
|
|
5134
5149
|
component: ComponentPanelHeader
|
|
5135
5150
|
});
|
|
5136
|
-
|
|
5151
|
+
registerDataHook4("after", "editor/documents/attach-preview", async () => {
|
|
5137
5152
|
const { id: id2, config } = getV1CurrentDocument();
|
|
5138
5153
|
if (id2) {
|
|
5139
5154
|
removeComponentStyles(id2);
|
|
@@ -5164,6 +5179,7 @@ function init() {
|
|
|
5164
5179
|
initMcp();
|
|
5165
5180
|
initCircularNestingPrevention();
|
|
5166
5181
|
initNonAtomicNestingPrevention();
|
|
5182
|
+
initLoadComponentDataAfterInstanceAdded();
|
|
5167
5183
|
}
|
|
5168
5184
|
export {
|
|
5169
5185
|
init
|