@elementor/editor-canvas 4.2.0-923 → 4.2.0-925
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 +196 -56
- package/dist/index.mjs +159 -19
- package/package.json +18 -18
- package/src/legacy/__tests__/init-legacy-views.test.ts +66 -0
- package/src/legacy/init-legacy-views.ts +20 -10
- package/src/mcp/canvas-mcp.ts +5 -0
- package/src/mcp/resources/__tests__/dynamic-tags-resource.test.ts +85 -0
- package/src/mcp/resources/dynamic-tags-resource.ts +52 -0
- package/src/mcp/tools/build-composition/prompt.ts +8 -0
- package/src/mcp/tools/build-composition/tool.ts +2 -0
- package/src/mcp/tools/configure-element/prompt.ts +16 -0
- package/src/mcp/tools/configure-element/tool.ts +2 -0
- package/src/mcp/utils/__tests__/resolve-dynamic-tag.test.ts +102 -0
- package/src/mcp/utils/do-update-element-property.ts +5 -1
- package/src/mcp/utils/resolve-dynamic-tag.ts +102 -0
package/dist/index.js
CHANGED
|
@@ -3734,22 +3734,29 @@ function registerModelExtensions(type, extensions) {
|
|
|
3734
3734
|
}
|
|
3735
3735
|
function registerElementType(type, elementTypeGenerator) {
|
|
3736
3736
|
elementsLegacyTypes[type] = elementTypeGenerator;
|
|
3737
|
+
if ((0, import_editor_v1_adapters14.__privateIsReady)()) {
|
|
3738
|
+
registerElementInLegacyManager(type, createDomRenderer());
|
|
3739
|
+
}
|
|
3737
3740
|
}
|
|
3738
3741
|
function initLegacyViews() {
|
|
3739
3742
|
(0, import_editor_v1_adapters14.__privateListenTo)((0, import_editor_v1_adapters14.v1ReadyEvent)(), () => {
|
|
3740
3743
|
const widgetsCache = (0, import_editor_elements10.getWidgetsCache)() ?? {};
|
|
3741
|
-
const legacyWindow = window;
|
|
3742
3744
|
const renderer = createDomRenderer();
|
|
3743
3745
|
registerProPromotionTypes(widgetsCache);
|
|
3744
|
-
Object.
|
|
3745
|
-
|
|
3746
|
-
return;
|
|
3747
|
-
}
|
|
3748
|
-
const ResolvedElementType = resolveElementType(type, renderer, element);
|
|
3749
|
-
tryRegisterElement(legacyWindow, type, element, ResolvedElementType);
|
|
3746
|
+
Object.keys(widgetsCache).forEach((type) => {
|
|
3747
|
+
registerElementInLegacyManager(type, renderer);
|
|
3750
3748
|
});
|
|
3751
3749
|
});
|
|
3752
3750
|
}
|
|
3751
|
+
function registerElementInLegacyManager(type, renderer) {
|
|
3752
|
+
const element = ((0, import_editor_elements10.getWidgetsCache)() ?? {})[type];
|
|
3753
|
+
if (!element?.atomic) {
|
|
3754
|
+
return;
|
|
3755
|
+
}
|
|
3756
|
+
const legacyWindow = window;
|
|
3757
|
+
const ResolvedElementType = resolveElementType(type, renderer, element);
|
|
3758
|
+
tryRegisterElement(legacyWindow, type, element, ResolvedElementType);
|
|
3759
|
+
}
|
|
3753
3760
|
function registerProPromotionTypes(widgetsCache) {
|
|
3754
3761
|
Object.entries(widgetsCache).forEach(([type, element]) => {
|
|
3755
3762
|
if (element.meta?.is_pro_promotion) {
|
|
@@ -3823,6 +3830,9 @@ function initTabsModelExtensions() {
|
|
|
3823
3830
|
registerModelExtensions("e-tab", tabModelExtensions);
|
|
3824
3831
|
}
|
|
3825
3832
|
|
|
3833
|
+
// src/mcp/canvas-mcp.ts
|
|
3834
|
+
var import_editor_props11 = require("@elementor/editor-props");
|
|
3835
|
+
|
|
3826
3836
|
// src/mcp/resources/available-widgets-resource.ts
|
|
3827
3837
|
var import_editor_v1_adapters15 = require("@elementor/editor-v1-adapters");
|
|
3828
3838
|
var AVAILABLE_WIDGETS_URI = "elementor://context/available-widgets";
|
|
@@ -3972,8 +3982,109 @@ function extractElementData(element) {
|
|
|
3972
3982
|
return result;
|
|
3973
3983
|
}
|
|
3974
3984
|
|
|
3975
|
-
// src/mcp/resources/
|
|
3985
|
+
// src/mcp/resources/dynamic-tags-resource.ts
|
|
3986
|
+
var import_editor_props7 = require("@elementor/editor-props");
|
|
3987
|
+
|
|
3988
|
+
// src/mcp/utils/resolve-dynamic-tag.ts
|
|
3976
3989
|
var import_editor_v1_adapters17 = require("@elementor/editor-v1-adapters");
|
|
3990
|
+
var DYNAMIC_PROP_TYPE_KEY = "dynamic";
|
|
3991
|
+
var OMITTED_DYNAMIC_SETTING_KEYS = ["fallback"];
|
|
3992
|
+
var getAtomicDynamicTags = () => {
|
|
3993
|
+
const config = (0, import_editor_v1_adapters17.getElementorConfig)();
|
|
3994
|
+
return config.atomicDynamicTags?.tags ?? {};
|
|
3995
|
+
};
|
|
3996
|
+
var getDynamicTagNamesByCategories = (categories) => {
|
|
3997
|
+
if (!categories.length) {
|
|
3998
|
+
return [];
|
|
3999
|
+
}
|
|
4000
|
+
const wanted = new Set(categories);
|
|
4001
|
+
return Object.values(getAtomicDynamicTags()).filter((tag) => tag.categories?.some((category) => wanted.has(category))).map((tag) => tag.name);
|
|
4002
|
+
};
|
|
4003
|
+
var dynamicTagLLMResolver = (value) => {
|
|
4004
|
+
const input = value ?? {};
|
|
4005
|
+
const tag = input.name ? getAtomicDynamicTags()[input.name] : void 0;
|
|
4006
|
+
if (!tag) {
|
|
4007
|
+
return {
|
|
4008
|
+
$$type: DYNAMIC_PROP_TYPE_KEY,
|
|
4009
|
+
value: { name: input.name ?? "", group: "", settings: {} }
|
|
4010
|
+
};
|
|
4011
|
+
}
|
|
4012
|
+
return {
|
|
4013
|
+
$$type: DYNAMIC_PROP_TYPE_KEY,
|
|
4014
|
+
value: {
|
|
4015
|
+
name: tag.name,
|
|
4016
|
+
group: tag.group,
|
|
4017
|
+
settings: buildStrictSettings(tag.props_schema ?? {}, input.settings ?? {})
|
|
4018
|
+
}
|
|
4019
|
+
};
|
|
4020
|
+
};
|
|
4021
|
+
var buildStrictSettings = (schema2, provided) => {
|
|
4022
|
+
const settings = {};
|
|
4023
|
+
for (const [key, propType] of Object.entries(schema2)) {
|
|
4024
|
+
if (OMITTED_DYNAMIC_SETTING_KEYS.includes(key)) {
|
|
4025
|
+
continue;
|
|
4026
|
+
}
|
|
4027
|
+
const resolved = provided[key] !== void 0 ? wrapSettingValue(provided[key], propType) : defaultSettingValue(propType);
|
|
4028
|
+
if (resolved !== void 0 && resolved !== null) {
|
|
4029
|
+
settings[key] = resolved;
|
|
4030
|
+
}
|
|
4031
|
+
}
|
|
4032
|
+
return settings;
|
|
4033
|
+
};
|
|
4034
|
+
var wrapSettingValue = (raw, propType) => {
|
|
4035
|
+
if (raw !== null && typeof raw === "object") {
|
|
4036
|
+
return raw;
|
|
4037
|
+
}
|
|
4038
|
+
return propType.key ? { $$type: propType.key, value: raw } : raw;
|
|
4039
|
+
};
|
|
4040
|
+
var defaultSettingValue = (propType) => {
|
|
4041
|
+
if (propType.initial_value !== null && propType.initial_value !== void 0) {
|
|
4042
|
+
return propType.initial_value;
|
|
4043
|
+
}
|
|
4044
|
+
if (propType.default !== null && propType.default !== void 0) {
|
|
4045
|
+
return wrapSettingValue(propType.default, propType);
|
|
4046
|
+
}
|
|
4047
|
+
return void 0;
|
|
4048
|
+
};
|
|
4049
|
+
|
|
4050
|
+
// src/mcp/resources/dynamic-tags-resource.ts
|
|
4051
|
+
var DYNAMIC_TAGS_URI = "elementor://dynamic-tags";
|
|
4052
|
+
var settingsSchema = (propsSchema) => {
|
|
4053
|
+
return Object.fromEntries(
|
|
4054
|
+
Object.entries(propsSchema ?? {}).filter(([key]) => !OMITTED_DYNAMIC_SETTING_KEYS.includes(key)).map(([key, propType]) => [key, import_editor_props7.Schema.propTypeToJsonSchema(propType)])
|
|
4055
|
+
);
|
|
4056
|
+
};
|
|
4057
|
+
var buildDynamicTagsList = () => {
|
|
4058
|
+
return Object.values(getAtomicDynamicTags()).map((tag) => ({
|
|
4059
|
+
name: tag.name,
|
|
4060
|
+
label: tag.label,
|
|
4061
|
+
categories: tag.categories,
|
|
4062
|
+
settings: settingsSchema(tag.props_schema)
|
|
4063
|
+
}));
|
|
4064
|
+
};
|
|
4065
|
+
var initDynamicTagsResource = (reg) => {
|
|
4066
|
+
const { resource } = reg;
|
|
4067
|
+
resource(
|
|
4068
|
+
"dynamic-tags",
|
|
4069
|
+
DYNAMIC_TAGS_URI,
|
|
4070
|
+
{
|
|
4071
|
+
description: `List of available dynamic tags. To bind a property to a dynamic source, set its value to { "$$type": "dynamic", "value": { "name": <tag name>, "settings": { ... } } } using a tag whose name appears in that property's allowed list, and populate "settings" per the tag entry here.`,
|
|
4072
|
+
mimeType: "application/json"
|
|
4073
|
+
},
|
|
4074
|
+
async (uri) => ({
|
|
4075
|
+
contents: [
|
|
4076
|
+
{
|
|
4077
|
+
uri: uri.href,
|
|
4078
|
+
mimeType: "application/json",
|
|
4079
|
+
text: JSON.stringify(buildDynamicTagsList())
|
|
4080
|
+
}
|
|
4081
|
+
]
|
|
4082
|
+
})
|
|
4083
|
+
);
|
|
4084
|
+
};
|
|
4085
|
+
|
|
4086
|
+
// src/mcp/resources/editor-state-resource.ts
|
|
4087
|
+
var import_editor_v1_adapters18 = require("@elementor/editor-v1-adapters");
|
|
3977
4088
|
var CURRENTLY_VIEWED_SCREEN = "The user is currently viewing the Elementor editor";
|
|
3978
4089
|
var PAGE_CONTENT_CHARACTER_LIMIT = 500;
|
|
3979
4090
|
var PREVIEW_TEXT_NODE_MIN_LENGTH = 2;
|
|
@@ -3994,8 +4105,8 @@ var initEditorStateResource = (reg) => {
|
|
|
3994
4105
|
lastSerializedState = serialized;
|
|
3995
4106
|
sendResourceUpdated({ uri: EDITOR_STATE_URI });
|
|
3996
4107
|
};
|
|
3997
|
-
(0,
|
|
3998
|
-
[(0,
|
|
4108
|
+
(0, import_editor_v1_adapters18.__privateListenTo)(
|
|
4109
|
+
[(0, import_editor_v1_adapters18.commandEndEvent)("editor/documents/switch"), (0, import_editor_v1_adapters18.commandEndEvent)("editor/documents/attach-preview")],
|
|
3999
4110
|
notifyIfChanged
|
|
4000
4111
|
);
|
|
4001
4112
|
lastSerializedState = JSON.stringify(buildState());
|
|
@@ -4069,7 +4180,7 @@ function getPageTitle() {
|
|
|
4069
4180
|
}
|
|
4070
4181
|
|
|
4071
4182
|
// src/mcp/resources/general-context-resource.ts
|
|
4072
|
-
var
|
|
4183
|
+
var import_editor_v1_adapters19 = require("@elementor/editor-v1-adapters");
|
|
4073
4184
|
var GENERAL_CONTEXT_URI = "elementor://context/general";
|
|
4074
4185
|
var initGeneralContextResource = (reg) => {
|
|
4075
4186
|
const { resource, sendResourceUpdated } = reg;
|
|
@@ -4130,11 +4241,11 @@ var initGeneralContextResource = (reg) => {
|
|
|
4130
4241
|
};
|
|
4131
4242
|
}
|
|
4132
4243
|
);
|
|
4133
|
-
(0,
|
|
4244
|
+
(0, import_editor_v1_adapters19.__privateListenTo)(
|
|
4134
4245
|
[
|
|
4135
|
-
(0,
|
|
4136
|
-
(0,
|
|
4137
|
-
(0,
|
|
4246
|
+
(0, import_editor_v1_adapters19.commandEndEvent)("editor/documents/switch"),
|
|
4247
|
+
(0, import_editor_v1_adapters19.commandEndEvent)("editor/documents/attach-preview"),
|
|
4248
|
+
(0, import_editor_v1_adapters19.commandEndEvent)("document/elements/settings")
|
|
4138
4249
|
],
|
|
4139
4250
|
pushUpdateIfChanged
|
|
4140
4251
|
);
|
|
@@ -4143,7 +4254,7 @@ var initGeneralContextResource = (reg) => {
|
|
|
4143
4254
|
|
|
4144
4255
|
// src/mcp/resources/selected-element-resource.ts
|
|
4145
4256
|
var import_editor_elements12 = require("@elementor/editor-elements");
|
|
4146
|
-
var
|
|
4257
|
+
var import_editor_v1_adapters20 = require("@elementor/editor-v1-adapters");
|
|
4147
4258
|
var SELECTED_ELEMENT_URI = "elementor://context/selected-element";
|
|
4148
4259
|
var initSelectedElementResource = (reg) => {
|
|
4149
4260
|
const { resource, sendResourceUpdated } = reg;
|
|
@@ -4174,11 +4285,11 @@ var initSelectedElementResource = (reg) => {
|
|
|
4174
4285
|
}
|
|
4175
4286
|
publishIfChanged(readSelectionFromEditor());
|
|
4176
4287
|
};
|
|
4177
|
-
(0,
|
|
4288
|
+
(0, import_editor_v1_adapters20.__privateListenTo)(
|
|
4178
4289
|
[
|
|
4179
|
-
(0,
|
|
4180
|
-
(0,
|
|
4181
|
-
(0,
|
|
4290
|
+
(0, import_editor_v1_adapters20.commandEndEvent)("document/elements/select"),
|
|
4291
|
+
(0, import_editor_v1_adapters20.commandEndEvent)("document/elements/deselect-all"),
|
|
4292
|
+
(0, import_editor_v1_adapters20.commandEndEvent)("document/elements/settings")
|
|
4182
4293
|
],
|
|
4183
4294
|
onCommand
|
|
4184
4295
|
);
|
|
@@ -4296,9 +4407,9 @@ var import_editor_elements15 = require("@elementor/editor-elements");
|
|
|
4296
4407
|
|
|
4297
4408
|
// src/mcp/utils/do-update-element-property.ts
|
|
4298
4409
|
var import_editor_elements13 = require("@elementor/editor-elements");
|
|
4299
|
-
var
|
|
4410
|
+
var import_editor_props8 = require("@elementor/editor-props");
|
|
4300
4411
|
var import_editor_styles5 = require("@elementor/editor-styles");
|
|
4301
|
-
var
|
|
4412
|
+
var import_editor_v1_adapters21 = require("@elementor/editor-v1-adapters");
|
|
4302
4413
|
|
|
4303
4414
|
// src/mcp/utils/merge-custom-css.ts
|
|
4304
4415
|
var CUSTOM_CSS_SEPARATOR = "\n";
|
|
@@ -4321,9 +4432,12 @@ var LOCAL_STYLE_META = {
|
|
|
4321
4432
|
};
|
|
4322
4433
|
function resolvePropValue(value, forceKey) {
|
|
4323
4434
|
const Utils = window.elementorV2.editorVariables.Utils;
|
|
4324
|
-
return
|
|
4435
|
+
return import_editor_props8.Schema.adjustLlmPropValueSchema(value, {
|
|
4325
4436
|
forceKey,
|
|
4326
|
-
transformers:
|
|
4437
|
+
transformers: {
|
|
4438
|
+
...Utils.globalVariablesLLMResolvers,
|
|
4439
|
+
[DYNAMIC_PROP_TYPE_KEY]: dynamicTagLLMResolver
|
|
4440
|
+
}
|
|
4327
4441
|
});
|
|
4328
4442
|
}
|
|
4329
4443
|
var doUpdateElementProperty = (params) => {
|
|
@@ -4373,7 +4487,7 @@ var doUpdateElementProperty = (params) => {
|
|
|
4373
4487
|
}
|
|
4374
4488
|
if (propertyRawSchema.kind === "plain") {
|
|
4375
4489
|
if (typeof propertyMapValue[stylePropName] !== "object") {
|
|
4376
|
-
const propUtil = (0,
|
|
4490
|
+
const propUtil = (0, import_editor_props8.getPropSchemaFromCache)(propertyRawSchema.key);
|
|
4377
4491
|
if (propUtil) {
|
|
4378
4492
|
const plainValue = propUtil.create(propertyMapValue[stylePropName]);
|
|
4379
4493
|
propertyMapValue[stylePropName] = plainValue;
|
|
@@ -4426,7 +4540,7 @@ var doUpdateElementProperty = (params) => {
|
|
|
4426
4540
|
}
|
|
4427
4541
|
const propKey = elementPropSchema[propertyName].key;
|
|
4428
4542
|
const value = resolvePropValue(propertyValue, propKey);
|
|
4429
|
-
const { valid, jsonSchema } =
|
|
4543
|
+
const { valid, jsonSchema } = import_editor_props8.Schema.validatePropValue(elementPropSchema[propertyName], propertyValue);
|
|
4430
4544
|
if (!valid) {
|
|
4431
4545
|
throw new Error(
|
|
4432
4546
|
`Invalid PropValue for elementId: ${elementId}. PropKey: ${propKey}, PropValue: ${JSON.stringify(
|
|
@@ -4442,12 +4556,12 @@ Expected Schema: ${jsonSchema}`
|
|
|
4442
4556
|
},
|
|
4443
4557
|
withHistory: false
|
|
4444
4558
|
});
|
|
4445
|
-
(0,
|
|
4559
|
+
(0, import_editor_v1_adapters21.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
|
|
4446
4560
|
};
|
|
4447
4561
|
|
|
4448
4562
|
// src/mcp/utils/validate-input.ts
|
|
4449
4563
|
var import_editor_elements14 = require("@elementor/editor-elements");
|
|
4450
|
-
var
|
|
4564
|
+
var import_editor_props9 = require("@elementor/editor-props");
|
|
4451
4565
|
var import_editor_styles6 = require("@elementor/editor-styles");
|
|
4452
4566
|
var _widgetsSchema = null;
|
|
4453
4567
|
var validateInput = {
|
|
@@ -4481,10 +4595,10 @@ var validateInput = {
|
|
|
4481
4595
|
if (!propSchema) {
|
|
4482
4596
|
errors.push(`Property "${propName}" is not defined in the schema.`);
|
|
4483
4597
|
hasInvalidKey = true;
|
|
4484
|
-
} else if (!
|
|
4598
|
+
} else if (!import_editor_props9.Schema.isPropKeyConfigurable(propName, propSchema)) {
|
|
4485
4599
|
errors.push(`Property "${propName}" is not configurable.`);
|
|
4486
4600
|
} else {
|
|
4487
|
-
const { valid } =
|
|
4601
|
+
const { valid } = import_editor_props9.Schema.validatePropValue(propSchema, propValue);
|
|
4488
4602
|
if (!valid) {
|
|
4489
4603
|
errors.push(
|
|
4490
4604
|
`Invalid property "${propName}". Validate input with resource [${STYLE_SCHEMA_URI.replace(
|
|
@@ -4868,6 +4982,13 @@ Some elements have internal tree structures (nesting). When using these elements
|
|
|
4868
4982
|
- NO LINKS in configuration
|
|
4869
4983
|
- Retry on errors up to 10x
|
|
4870
4984
|
|
|
4985
|
+
# DYNAMIC TAGS
|
|
4986
|
+
- A value can be made dynamic wherever its schema exposes a \`"$$type": "dynamic"\` variant. This may be the property root OR a NESTED field (e.g. an image's \`src\`, not the whole \`image\`).
|
|
4987
|
+
- Put the dynamic object EXACTLY at that node, in place of the static variant. The variant's \`name\` lists the allowed tags; read [${DYNAMIC_TAGS_URI}] for each tag's settings schema.
|
|
4988
|
+
- Provide at that node: \`{ "$$type": "dynamic", "value": { "name": "<allowed tag>", "settings": { ... } } }\`
|
|
4989
|
+
- Example (image): \`{ "$$type": "image", "value": { "src": { "$$type": "dynamic", "value": { "name": "<image tag>", "settings": { ... } } } } }\`
|
|
4990
|
+
- Do NOT send \`group\` (it is resolved automatically). Populate \`settings\` strictly per the tag's schema; use \`{}\` only when it has none.
|
|
4991
|
+
|
|
4871
4992
|
Note about configuration ids: These names are visible to the end-user, make sure they make sense, related and relevant.
|
|
4872
4993
|
|
|
4873
4994
|
# DESIGN PHILOSOPHY: CONTEXT-DRIVEN CREATIVITY
|
|
@@ -5089,7 +5210,8 @@ var initBuildCompositionsTool = (reg) => {
|
|
|
5089
5210
|
{ description: "Global Classes", uri: "elementor://global-classes" },
|
|
5090
5211
|
{ description: "Global Variables", uri: "elementor://global-variables" },
|
|
5091
5212
|
{ description: "Styles best practices", uri: BEST_PRACTICES_URI },
|
|
5092
|
-
{ description: "Available widgets for this tool", uri: AVAILABLE_WIDGETS_URI_V4 }
|
|
5213
|
+
{ description: "Available widgets for this tool", uri: AVAILABLE_WIDGETS_URI_V4 },
|
|
5214
|
+
{ description: "Dynamic tags catalog", uri: DYNAMIC_TAGS_URI }
|
|
5093
5215
|
],
|
|
5094
5216
|
outputSchema,
|
|
5095
5217
|
handler: async (rawParams) => {
|
|
@@ -5254,6 +5376,21 @@ For styleProperties, use the style schema provided, as it also uses the PropType
|
|
|
5254
5376
|
For all non-primitive types, provide the key property as defined in the schema as $$type in the generated object, as it is MANDATORY for parsing.
|
|
5255
5377
|
|
|
5256
5378
|
Use the EXACT "PROP-TYPE" Schema given, and ALWAYS include the "key" property from the original configuration for every property you are changing.
|
|
5379
|
+
|
|
5380
|
+
# Dynamic tags
|
|
5381
|
+
A value can be made dynamic wherever its schema exposes a variant with "$$type": "dynamic". This may be the property root OR a NESTED field: for example an image is made dynamic on its "src" (the root stays "image"), NOT on the whole "image" value.
|
|
5382
|
+
Put the dynamic object EXACTLY at the node whose schema offers the "dynamic" variant, in place of the static variant. The variant's "name" enumerates the tags allowed at that node.
|
|
5383
|
+
1. Read the [${DYNAMIC_TAGS_URI}] resource for each allowed tag's settings schema.
|
|
5384
|
+
2. Provide, at that node:
|
|
5385
|
+
{
|
|
5386
|
+
"$$type": "dynamic",
|
|
5387
|
+
"value": {
|
|
5388
|
+
"name": "<allowed tag name>",
|
|
5389
|
+
"settings": { /* strictly per the tag's settings schema */ }
|
|
5390
|
+
}
|
|
5391
|
+
}
|
|
5392
|
+
Image example: { "$$type": "image", "value": { "src": { "$$type": "dynamic", "value": { "name": "<image tag>", "settings": { ... } } } } }
|
|
5393
|
+
Do NOT send "group" (it is resolved automatically). Use { "settings": {} } only when the tag has no settings.
|
|
5257
5394
|
`);
|
|
5258
5395
|
configureElementToolPrompt.parameter("elementId", "The ID of the element to configure. MANDATORY.");
|
|
5259
5396
|
configureElementToolPrompt.parameter(
|
|
@@ -5361,7 +5498,8 @@ var initConfigureElementTool = (reg) => {
|
|
|
5361
5498
|
requiredResources: [
|
|
5362
5499
|
{ description: "Widgets schema", uri: WIDGET_SCHEMA_URI },
|
|
5363
5500
|
{ description: "Styles schema", uri: STYLE_SCHEMA_URI },
|
|
5364
|
-
{ description: "Configure element guide", uri: CONFIGURE_ELEMENT_GUIDE_URI }
|
|
5501
|
+
{ description: "Configure element guide", uri: CONFIGURE_ELEMENT_GUIDE_URI },
|
|
5502
|
+
{ description: "Dynamic tags catalog", uri: DYNAMIC_TAGS_URI }
|
|
5365
5503
|
],
|
|
5366
5504
|
handler: ({ elementId, propertiesToChange, elementType, stylePropertiesToChange }) => {
|
|
5367
5505
|
const widgetData = (0, import_editor_elements17.getWidgetsCache)()?.[elementType];
|
|
@@ -5457,7 +5595,7 @@ Check the styles schema at the resource [${STYLE_SCHEMA_URI.replace(
|
|
|
5457
5595
|
|
|
5458
5596
|
// src/mcp/tools/get-element-config/tool.ts
|
|
5459
5597
|
var import_editor_elements18 = require("@elementor/editor-elements");
|
|
5460
|
-
var
|
|
5598
|
+
var import_editor_props10 = require("@elementor/editor-props");
|
|
5461
5599
|
var import_schema5 = require("@elementor/schema");
|
|
5462
5600
|
var schema = {
|
|
5463
5601
|
elementId: import_schema5.z.string()
|
|
@@ -5514,7 +5652,7 @@ var initGetElementConfigTool = (reg) => {
|
|
|
5514
5652
|
}
|
|
5515
5653
|
const propValues = {};
|
|
5516
5654
|
const stylePropValues = {};
|
|
5517
|
-
|
|
5655
|
+
import_editor_props10.Schema.configurableKeys(propSchema).forEach((key) => {
|
|
5518
5656
|
propValues[key] = structuredClone(elementRawSettings.get(key));
|
|
5519
5657
|
});
|
|
5520
5658
|
const elementStyles = (0, import_editor_elements18.getElementStyles)(elementId) || {};
|
|
@@ -5550,9 +5688,11 @@ var initGetElementConfigTool = (reg) => {
|
|
|
5550
5688
|
|
|
5551
5689
|
// src/mcp/canvas-mcp.ts
|
|
5552
5690
|
var initCanvasMcp = (reg) => {
|
|
5691
|
+
import_editor_props11.Schema.setDynamicTagNamesResolver(getDynamicTagNamesByCategories);
|
|
5553
5692
|
initWidgetsSchemaResource(reg);
|
|
5554
5693
|
initAvailableWidgetsResource(reg);
|
|
5555
5694
|
initDocumentStructureResource(reg);
|
|
5695
|
+
initDynamicTagsResource(reg);
|
|
5556
5696
|
initSelectedElementResource(reg);
|
|
5557
5697
|
initEditorStateResource(reg);
|
|
5558
5698
|
initGeneralContextResource(reg);
|
|
@@ -5677,14 +5817,14 @@ Note: The "size" property controls image resolution/loading, not visual size. Se
|
|
|
5677
5817
|
// src/prevent-link-in-link-commands.ts
|
|
5678
5818
|
var import_editor_elements19 = require("@elementor/editor-elements");
|
|
5679
5819
|
var import_editor_notifications3 = require("@elementor/editor-notifications");
|
|
5680
|
-
var
|
|
5820
|
+
var import_editor_v1_adapters22 = require("@elementor/editor-v1-adapters");
|
|
5681
5821
|
var import_i18n4 = require("@wordpress/i18n");
|
|
5682
5822
|
function initLinkInLinkPrevention() {
|
|
5683
|
-
(0,
|
|
5823
|
+
(0, import_editor_v1_adapters22.blockCommand)({
|
|
5684
5824
|
command: "document/elements/paste",
|
|
5685
5825
|
condition: blockLinkInLinkPaste
|
|
5686
5826
|
});
|
|
5687
|
-
(0,
|
|
5827
|
+
(0, import_editor_v1_adapters22.blockCommand)({
|
|
5688
5828
|
command: "document/elements/move",
|
|
5689
5829
|
condition: blockLinkInLinkMove
|
|
5690
5830
|
});
|
|
@@ -5759,12 +5899,12 @@ function shouldBlock(sourceElements, targetElements) {
|
|
|
5759
5899
|
|
|
5760
5900
|
// src/style-commands/paste-style.ts
|
|
5761
5901
|
var import_editor_elements22 = require("@elementor/editor-elements");
|
|
5762
|
-
var
|
|
5763
|
-
var
|
|
5902
|
+
var import_editor_props13 = require("@elementor/editor-props");
|
|
5903
|
+
var import_editor_v1_adapters24 = require("@elementor/editor-v1-adapters");
|
|
5764
5904
|
|
|
5765
5905
|
// src/utils/command-utils.ts
|
|
5766
5906
|
var import_editor_elements20 = require("@elementor/editor-elements");
|
|
5767
|
-
var
|
|
5907
|
+
var import_editor_props12 = require("@elementor/editor-props");
|
|
5768
5908
|
var import_i18n5 = require("@wordpress/i18n");
|
|
5769
5909
|
function hasAtomicWidgets(args) {
|
|
5770
5910
|
const { containers = [args.container] } = args;
|
|
@@ -5782,7 +5922,7 @@ function getClassesProp(container) {
|
|
|
5782
5922
|
return null;
|
|
5783
5923
|
}
|
|
5784
5924
|
const [propKey] = Object.entries(propsSchema).find(
|
|
5785
|
-
([, propType]) => propType.kind === "plain" && propType.key ===
|
|
5925
|
+
([, propType]) => propType.kind === "plain" && propType.key === import_editor_props12.CLASSES_PROP_KEY
|
|
5786
5926
|
) ?? [];
|
|
5787
5927
|
return propKey ?? null;
|
|
5788
5928
|
}
|
|
@@ -5807,9 +5947,9 @@ function getTitleForContainers(containers) {
|
|
|
5807
5947
|
// src/style-commands/undoable-actions/paste-element-style.ts
|
|
5808
5948
|
var import_editor_elements21 = require("@elementor/editor-elements");
|
|
5809
5949
|
var import_editor_styles_repository4 = require("@elementor/editor-styles-repository");
|
|
5810
|
-
var
|
|
5950
|
+
var import_editor_v1_adapters23 = require("@elementor/editor-v1-adapters");
|
|
5811
5951
|
var import_i18n6 = require("@wordpress/i18n");
|
|
5812
|
-
var undoablePasteElementStyle = () => (0,
|
|
5952
|
+
var undoablePasteElementStyle = () => (0, import_editor_v1_adapters23.undoable)(
|
|
5813
5953
|
{
|
|
5814
5954
|
do: ({ containers, newStyle }) => {
|
|
5815
5955
|
return containers.map((container) => {
|
|
@@ -5885,12 +6025,12 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters22.undoable)(
|
|
|
5885
6025
|
// src/style-commands/paste-style.ts
|
|
5886
6026
|
function initPasteStyleCommand() {
|
|
5887
6027
|
const pasteElementStyleCommand = undoablePasteElementStyle();
|
|
5888
|
-
(0,
|
|
6028
|
+
(0, import_editor_v1_adapters24.blockCommand)({
|
|
5889
6029
|
command: "document/elements/paste-style",
|
|
5890
6030
|
condition: hasAtomicWidgets
|
|
5891
6031
|
});
|
|
5892
|
-
(0,
|
|
5893
|
-
(0,
|
|
6032
|
+
(0, import_editor_v1_adapters24.__privateListenTo)(
|
|
6033
|
+
(0, import_editor_v1_adapters24.commandStartEvent)("document/elements/paste-style"),
|
|
5894
6034
|
(e) => pasteStyles(e.args, pasteElementStyleCommand)
|
|
5895
6035
|
);
|
|
5896
6036
|
}
|
|
@@ -5931,8 +6071,8 @@ function pasteClasses(containers, classes) {
|
|
|
5931
6071
|
return;
|
|
5932
6072
|
}
|
|
5933
6073
|
const classesSetting = (0, import_editor_elements22.getElementSetting)(container.id, classesProp);
|
|
5934
|
-
const currentClasses =
|
|
5935
|
-
const newClasses =
|
|
6074
|
+
const currentClasses = import_editor_props13.classesPropTypeUtil.extract(classesSetting) ?? [];
|
|
6075
|
+
const newClasses = import_editor_props13.classesPropTypeUtil.create(Array.from(/* @__PURE__ */ new Set([...classes, ...currentClasses])));
|
|
5936
6076
|
(0, import_editor_elements22.updateElementSettings)({
|
|
5937
6077
|
id: container.id,
|
|
5938
6078
|
props: { [classesProp]: newClasses }
|
|
@@ -5941,14 +6081,14 @@ function pasteClasses(containers, classes) {
|
|
|
5941
6081
|
}
|
|
5942
6082
|
|
|
5943
6083
|
// src/style-commands/reset-style.ts
|
|
5944
|
-
var
|
|
6084
|
+
var import_editor_v1_adapters26 = require("@elementor/editor-v1-adapters");
|
|
5945
6085
|
|
|
5946
6086
|
// src/style-commands/undoable-actions/reset-element-style.ts
|
|
5947
6087
|
var import_editor_elements23 = require("@elementor/editor-elements");
|
|
5948
6088
|
var import_editor_styles_repository5 = require("@elementor/editor-styles-repository");
|
|
5949
|
-
var
|
|
6089
|
+
var import_editor_v1_adapters25 = require("@elementor/editor-v1-adapters");
|
|
5950
6090
|
var import_i18n7 = require("@wordpress/i18n");
|
|
5951
|
-
var undoableResetElementStyle = () => (0,
|
|
6091
|
+
var undoableResetElementStyle = () => (0, import_editor_v1_adapters25.undoable)(
|
|
5952
6092
|
{
|
|
5953
6093
|
do: ({ containers }) => {
|
|
5954
6094
|
return containers.map((container) => {
|
|
@@ -5992,12 +6132,12 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters24.undoable)(
|
|
|
5992
6132
|
// src/style-commands/reset-style.ts
|
|
5993
6133
|
function initResetStyleCommand() {
|
|
5994
6134
|
const resetElementStyles = undoableResetElementStyle();
|
|
5995
|
-
(0,
|
|
6135
|
+
(0, import_editor_v1_adapters26.blockCommand)({
|
|
5996
6136
|
command: "document/elements/reset-style",
|
|
5997
6137
|
condition: hasAtomicWidgets
|
|
5998
6138
|
});
|
|
5999
|
-
(0,
|
|
6000
|
-
(0,
|
|
6139
|
+
(0, import_editor_v1_adapters26.__privateListenTo)(
|
|
6140
|
+
(0, import_editor_v1_adapters26.commandStartEvent)("document/elements/reset-style"),
|
|
6001
6141
|
(e) => resetStyles(e.args, resetElementStyles)
|
|
6002
6142
|
);
|
|
6003
6143
|
}
|
|
@@ -6146,9 +6286,9 @@ function getRectClipPath(rect, viewport) {
|
|
|
6146
6286
|
}
|
|
6147
6287
|
|
|
6148
6288
|
// src/hooks/use-canvas-document.ts
|
|
6149
|
-
var
|
|
6289
|
+
var import_editor_v1_adapters27 = require("@elementor/editor-v1-adapters");
|
|
6150
6290
|
function useCanvasDocument() {
|
|
6151
|
-
return (0,
|
|
6291
|
+
return (0, import_editor_v1_adapters27.__privateUseListenTo)((0, import_editor_v1_adapters27.commandEndEvent)("editor/documents/attach-preview"), () => (0, import_editor_v1_adapters27.getCanvasIframeDocument)());
|
|
6152
6292
|
}
|
|
6153
6293
|
|
|
6154
6294
|
// src/hooks/use-escape-on-canvas.ts
|