@elementor/editor-canvas 4.4.0-1146 → 4.4.0-1148

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 CHANGED
@@ -4344,11 +4344,6 @@ function initTabsModelExtensions() {
4344
4344
  // src/mcp/canvas-mcp.ts
4345
4345
  var import_editor_props8 = require("@elementor/editor-props");
4346
4346
 
4347
- // src/mcp/icon-library-experiment.ts
4348
- var import_editor_v1_adapters18 = require("@elementor/editor-v1-adapters");
4349
- var ICON_LIBRARY_EXPERIMENT = "e_svg_library";
4350
- var isIconLibraryActive = () => (0, import_editor_v1_adapters18.isExperimentActive)(ICON_LIBRARY_EXPERIMENT);
4351
-
4352
4347
  // src/mcp/resources/available-widgets-resource.ts
4353
4348
  var import_http_client3 = require("@elementor/http-client");
4354
4349
  var MCP_PROXY_URL2 = "elementor/v1/mcp-proxy";
@@ -4425,7 +4420,7 @@ var initBestPracticesResource = (reg) => {
4425
4420
 
4426
4421
  // src/mcp/resources/document-structure-resource.ts
4427
4422
  var import_editor_elements10 = require("@elementor/editor-elements");
4428
- var import_editor_v1_adapters19 = require("@elementor/editor-v1-adapters");
4423
+ var import_editor_v1_adapters18 = require("@elementor/editor-v1-adapters");
4429
4424
  var DOCUMENT_STRUCTURE_URI = "elementor://document/structure";
4430
4425
  var initDocumentStructureResource = (reg) => {
4431
4426
  const { resource, sendResourceUpdated } = reg;
@@ -4438,15 +4433,15 @@ var initDocumentStructureResource = (reg) => {
4438
4433
  sendResourceUpdated({ uri: DOCUMENT_STRUCTURE_URI });
4439
4434
  }
4440
4435
  };
4441
- (0, import_editor_v1_adapters19.__privateListenTo)(
4436
+ (0, import_editor_v1_adapters18.__privateListenTo)(
4442
4437
  [
4443
- (0, import_editor_v1_adapters19.commandEndEvent)("document/elements/create"),
4444
- (0, import_editor_v1_adapters19.commandEndEvent)("document/elements/delete"),
4445
- (0, import_editor_v1_adapters19.commandEndEvent)("document/elements/move"),
4446
- (0, import_editor_v1_adapters19.commandEndEvent)("document/elements/copy"),
4447
- (0, import_editor_v1_adapters19.commandEndEvent)("document/elements/paste"),
4448
- (0, import_editor_v1_adapters19.commandEndEvent)("editor/documents/attach-preview"),
4449
- (0, import_editor_v1_adapters19.commandEndEvent)("editor/documents/switch")
4438
+ (0, import_editor_v1_adapters18.commandEndEvent)("document/elements/create"),
4439
+ (0, import_editor_v1_adapters18.commandEndEvent)("document/elements/delete"),
4440
+ (0, import_editor_v1_adapters18.commandEndEvent)("document/elements/move"),
4441
+ (0, import_editor_v1_adapters18.commandEndEvent)("document/elements/copy"),
4442
+ (0, import_editor_v1_adapters18.commandEndEvent)("document/elements/paste"),
4443
+ (0, import_editor_v1_adapters18.commandEndEvent)("editor/documents/attach-preview"),
4444
+ (0, import_editor_v1_adapters18.commandEndEvent)("editor/documents/switch")
4450
4445
  ],
4451
4446
  updateDocumentStructure
4452
4447
  );
@@ -4549,7 +4544,7 @@ var initDynamicTagsResource = (reg) => {
4549
4544
  };
4550
4545
 
4551
4546
  // src/mcp/resources/editor-state-resource.ts
4552
- var import_editor_v1_adapters20 = require("@elementor/editor-v1-adapters");
4547
+ var import_editor_v1_adapters19 = require("@elementor/editor-v1-adapters");
4553
4548
  var CURRENTLY_VIEWED_SCREEN = "The user is currently viewing the Elementor editor";
4554
4549
  var PAGE_CONTENT_CHARACTER_LIMIT = 500;
4555
4550
  var PREVIEW_TEXT_NODE_MIN_LENGTH = 2;
@@ -4570,8 +4565,8 @@ var initEditorStateResource = (reg) => {
4570
4565
  lastSerializedState = serialized;
4571
4566
  sendResourceUpdated({ uri: EDITOR_STATE_URI });
4572
4567
  };
4573
- (0, import_editor_v1_adapters20.__privateListenTo)(
4574
- [(0, import_editor_v1_adapters20.commandEndEvent)("editor/documents/switch"), (0, import_editor_v1_adapters20.commandEndEvent)("editor/documents/attach-preview")],
4568
+ (0, import_editor_v1_adapters19.__privateListenTo)(
4569
+ [(0, import_editor_v1_adapters19.commandEndEvent)("editor/documents/switch"), (0, import_editor_v1_adapters19.commandEndEvent)("editor/documents/attach-preview")],
4575
4570
  notifyIfChanged
4576
4571
  );
4577
4572
  lastSerializedState = JSON.stringify(buildState());
@@ -4645,7 +4640,7 @@ function getPageTitle() {
4645
4640
  }
4646
4641
 
4647
4642
  // src/mcp/resources/general-context-resource.ts
4648
- var import_editor_v1_adapters21 = require("@elementor/editor-v1-adapters");
4643
+ var import_editor_v1_adapters20 = require("@elementor/editor-v1-adapters");
4649
4644
  var GENERAL_CONTEXT_URI = "elementor://context/general";
4650
4645
  var initGeneralContextResource = (reg) => {
4651
4646
  const { resource, sendResourceUpdated } = reg;
@@ -4706,11 +4701,11 @@ var initGeneralContextResource = (reg) => {
4706
4701
  };
4707
4702
  }
4708
4703
  );
4709
- (0, import_editor_v1_adapters21.__privateListenTo)(
4704
+ (0, import_editor_v1_adapters20.__privateListenTo)(
4710
4705
  [
4711
- (0, import_editor_v1_adapters21.commandEndEvent)("editor/documents/switch"),
4712
- (0, import_editor_v1_adapters21.commandEndEvent)("editor/documents/attach-preview"),
4713
- (0, import_editor_v1_adapters21.commandEndEvent)("document/elements/settings")
4706
+ (0, import_editor_v1_adapters20.commandEndEvent)("editor/documents/switch"),
4707
+ (0, import_editor_v1_adapters20.commandEndEvent)("editor/documents/attach-preview"),
4708
+ (0, import_editor_v1_adapters20.commandEndEvent)("document/elements/settings")
4714
4709
  ],
4715
4710
  pushUpdateIfChanged
4716
4711
  );
@@ -4719,7 +4714,7 @@ var initGeneralContextResource = (reg) => {
4719
4714
 
4720
4715
  // src/mcp/resources/selected-element-resource.ts
4721
4716
  var import_editor_elements11 = require("@elementor/editor-elements");
4722
- var import_editor_v1_adapters22 = require("@elementor/editor-v1-adapters");
4717
+ var import_editor_v1_adapters21 = require("@elementor/editor-v1-adapters");
4723
4718
  var SELECTED_ELEMENT_URI = "elementor://context/selected-element";
4724
4719
  var initSelectedElementResource = (reg) => {
4725
4720
  const { resource, sendResourceUpdated } = reg;
@@ -4750,11 +4745,11 @@ var initSelectedElementResource = (reg) => {
4750
4745
  }
4751
4746
  publishIfChanged(readSelectionFromEditor());
4752
4747
  };
4753
- (0, import_editor_v1_adapters22.__privateListenTo)(
4748
+ (0, import_editor_v1_adapters21.__privateListenTo)(
4754
4749
  [
4755
- (0, import_editor_v1_adapters22.commandEndEvent)("document/elements/select"),
4756
- (0, import_editor_v1_adapters22.commandEndEvent)("document/elements/deselect-all"),
4757
- (0, import_editor_v1_adapters22.commandEndEvent)("document/elements/settings")
4750
+ (0, import_editor_v1_adapters21.commandEndEvent)("document/elements/select"),
4751
+ (0, import_editor_v1_adapters21.commandEndEvent)("document/elements/deselect-all"),
4752
+ (0, import_editor_v1_adapters21.commandEndEvent)("document/elements/settings")
4758
4753
  ],
4759
4754
  onCommand
4760
4755
  );
@@ -4872,7 +4867,7 @@ var import_editor_props7 = require("@elementor/editor-props");
4872
4867
  var import_editor_elements13 = require("@elementor/editor-elements");
4873
4868
  var import_editor_props6 = require("@elementor/editor-props");
4874
4869
  var import_editor_styles4 = require("@elementor/editor-styles");
4875
- var import_editor_v1_adapters24 = require("@elementor/editor-v1-adapters");
4870
+ var import_editor_v1_adapters23 = require("@elementor/editor-v1-adapters");
4876
4871
 
4877
4872
  // src/mcp/utils/merge-custom-css.ts
4878
4873
  var CUSTOM_CSS_SEPARATOR = "\n";
@@ -4941,11 +4936,11 @@ function resolveCanonicalPropKeys(elementType, props) {
4941
4936
  }
4942
4937
 
4943
4938
  // src/mcp/utils/resolve-dynamic-tag.ts
4944
- var import_editor_v1_adapters23 = require("@elementor/editor-v1-adapters");
4939
+ var import_editor_v1_adapters22 = require("@elementor/editor-v1-adapters");
4945
4940
  var DYNAMIC_PROP_TYPE_KEY = "dynamic";
4946
4941
  var OMITTED_DYNAMIC_SETTING_KEYS = ["fallback"];
4947
4942
  var getAtomicDynamicTags = () => {
4948
- const config = (0, import_editor_v1_adapters23.getElementorConfig)();
4943
+ const config = (0, import_editor_v1_adapters22.getElementorConfig)();
4949
4944
  return config.atomicDynamicTags?.tags ?? {};
4950
4945
  };
4951
4946
  var getDynamicTagNamesByCategories = (categories) => {
@@ -5146,7 +5141,7 @@ Expected Schema: ${jsonSchema}`
5146
5141
  },
5147
5142
  withHistory: false
5148
5143
  });
5149
- (0, import_editor_v1_adapters24.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
5144
+ (0, import_editor_v1_adapters23.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
5150
5145
  };
5151
5146
 
5152
5147
  // src/mcp/tools/configure-element/prompt.ts
@@ -5190,7 +5185,6 @@ Setting a Font Awesome icon on an e-svg, after resolving it with \`find-icons\`:
5190
5185
  `;
5191
5186
  var CONFIGURE_ELEMENT_GUIDE_URI = "elementor://canvas/tools/configure-element-guide";
5192
5187
  var generatePrompt = () => {
5193
- const iconLibraryActive = isIconLibraryActive();
5194
5188
  const configureElementToolPrompt = (0, import_editor_mcp2.toolPrompts)("configure-element");
5195
5189
  configureElementToolPrompt.description(`
5196
5190
  Configure an existing element on the page.
@@ -5249,7 +5243,7 @@ Put the dynamic object EXACTLY at the node whose schema offers the "dynamic" var
5249
5243
  Image example: { "$$type": "image", "value": { "src": { "$$type": "dynamic", "value": { "name": "<image tag>", "settings": { ... } } } } }
5250
5244
  Do NOT send "group" (it is resolved automatically). Use { "settings": {} } only when the tag has no settings.
5251
5245
 
5252
- ${iconLibraryActive ? ICONS_SECTION : ""}`);
5246
+ ${ICONS_SECTION}`);
5253
5247
  configureElementToolPrompt.parameter("elementId", "The ID of the element to configure. MANDATORY.");
5254
5248
  configureElementToolPrompt.parameter(
5255
5249
  "elementType",
@@ -5286,9 +5280,7 @@ ${iconLibraryActive ? ICONS_SECTION : ""}`);
5286
5280
  };
5287
5281
  \`\`\`
5288
5282
  `);
5289
- if (iconLibraryActive) {
5290
- configureElementToolPrompt.example(ICON_EXAMPLE);
5291
- }
5283
+ configureElementToolPrompt.example(ICON_EXAMPLE);
5292
5284
  configureElementToolPrompt.instruction(
5293
5285
  "The $$type property is MANDATORY for every value in propertiesToChange; it is not used in the style parameter (raw CSS only)."
5294
5286
  );
@@ -5651,9 +5643,7 @@ var initCanvasMcp = (reg) => {
5651
5643
  initGeneralContextResource(reg);
5652
5644
  initBestPracticesResource(reg);
5653
5645
  initConfigureElementTool(reg);
5654
- if (isIconLibraryActive()) {
5655
- initFindIconsTool(reg);
5656
- }
5646
+ initFindIconsTool(reg);
5657
5647
  initGetPageStructureTool(reg);
5658
5648
  initBreakpointsResource(reg);
5659
5649
  };
@@ -5757,14 +5747,14 @@ Note: The "size" property controls image resolution/loading, not visual size. Se
5757
5747
  // src/prevent-link-in-link-commands.ts
5758
5748
  var import_editor_elements15 = require("@elementor/editor-elements");
5759
5749
  var import_editor_notifications6 = require("@elementor/editor-notifications");
5760
- var import_editor_v1_adapters25 = require("@elementor/editor-v1-adapters");
5750
+ var import_editor_v1_adapters24 = require("@elementor/editor-v1-adapters");
5761
5751
  var import_i18n7 = require("@wordpress/i18n");
5762
5752
  function initLinkInLinkPrevention() {
5763
- (0, import_editor_v1_adapters25.blockCommand)({
5753
+ (0, import_editor_v1_adapters24.blockCommand)({
5764
5754
  command: "document/elements/paste",
5765
5755
  condition: blockLinkInLinkPaste
5766
5756
  });
5767
- (0, import_editor_v1_adapters25.blockCommand)({
5757
+ (0, import_editor_v1_adapters24.blockCommand)({
5768
5758
  command: "document/elements/move",
5769
5759
  condition: blockLinkInLinkMove
5770
5760
  });
@@ -5840,7 +5830,7 @@ function shouldBlock(sourceElements, targetElements) {
5840
5830
  // src/style-commands/paste-style.ts
5841
5831
  var import_editor_elements18 = require("@elementor/editor-elements");
5842
5832
  var import_editor_props10 = require("@elementor/editor-props");
5843
- var import_editor_v1_adapters27 = require("@elementor/editor-v1-adapters");
5833
+ var import_editor_v1_adapters26 = require("@elementor/editor-v1-adapters");
5844
5834
 
5845
5835
  // src/utils/command-utils.ts
5846
5836
  var import_editor_elements16 = require("@elementor/editor-elements");
@@ -5887,9 +5877,9 @@ function getTitleForContainers(containers) {
5887
5877
  // src/style-commands/undoable-actions/paste-element-style.ts
5888
5878
  var import_editor_elements17 = require("@elementor/editor-elements");
5889
5879
  var import_editor_styles_repository4 = require("@elementor/editor-styles-repository");
5890
- var import_editor_v1_adapters26 = require("@elementor/editor-v1-adapters");
5880
+ var import_editor_v1_adapters25 = require("@elementor/editor-v1-adapters");
5891
5881
  var import_i18n9 = require("@wordpress/i18n");
5892
- var undoablePasteElementStyle = () => (0, import_editor_v1_adapters26.undoable)(
5882
+ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters25.undoable)(
5893
5883
  {
5894
5884
  do: ({ containers, newStyle }) => {
5895
5885
  return containers.map((container) => {
@@ -5965,12 +5955,12 @@ var undoablePasteElementStyle = () => (0, import_editor_v1_adapters26.undoable)(
5965
5955
  // src/style-commands/paste-style.ts
5966
5956
  function initPasteStyleCommand() {
5967
5957
  const pasteElementStyleCommand = undoablePasteElementStyle();
5968
- (0, import_editor_v1_adapters27.blockCommand)({
5958
+ (0, import_editor_v1_adapters26.blockCommand)({
5969
5959
  command: "document/elements/paste-style",
5970
5960
  condition: hasAtomicWidgets
5971
5961
  });
5972
- (0, import_editor_v1_adapters27.__privateListenTo)(
5973
- (0, import_editor_v1_adapters27.commandStartEvent)("document/elements/paste-style"),
5962
+ (0, import_editor_v1_adapters26.__privateListenTo)(
5963
+ (0, import_editor_v1_adapters26.commandStartEvent)("document/elements/paste-style"),
5974
5964
  (e) => pasteStyles(e.args, pasteElementStyleCommand)
5975
5965
  );
5976
5966
  }
@@ -6021,14 +6011,14 @@ function pasteClasses(containers, classes) {
6021
6011
  }
6022
6012
 
6023
6013
  // src/style-commands/reset-style.ts
6024
- var import_editor_v1_adapters29 = require("@elementor/editor-v1-adapters");
6014
+ var import_editor_v1_adapters28 = require("@elementor/editor-v1-adapters");
6025
6015
 
6026
6016
  // src/style-commands/undoable-actions/reset-element-style.ts
6027
6017
  var import_editor_elements19 = require("@elementor/editor-elements");
6028
6018
  var import_editor_styles_repository5 = require("@elementor/editor-styles-repository");
6029
- var import_editor_v1_adapters28 = require("@elementor/editor-v1-adapters");
6019
+ var import_editor_v1_adapters27 = require("@elementor/editor-v1-adapters");
6030
6020
  var import_i18n10 = require("@wordpress/i18n");
6031
- var undoableResetElementStyle = () => (0, import_editor_v1_adapters28.undoable)(
6021
+ var undoableResetElementStyle = () => (0, import_editor_v1_adapters27.undoable)(
6032
6022
  {
6033
6023
  do: ({ containers }) => {
6034
6024
  return containers.map((container) => {
@@ -6072,12 +6062,12 @@ var undoableResetElementStyle = () => (0, import_editor_v1_adapters28.undoable)(
6072
6062
  // src/style-commands/reset-style.ts
6073
6063
  function initResetStyleCommand() {
6074
6064
  const resetElementStyles = undoableResetElementStyle();
6075
- (0, import_editor_v1_adapters29.blockCommand)({
6065
+ (0, import_editor_v1_adapters28.blockCommand)({
6076
6066
  command: "document/elements/reset-style",
6077
6067
  condition: hasAtomicWidgets
6078
6068
  });
6079
- (0, import_editor_v1_adapters29.__privateListenTo)(
6080
- (0, import_editor_v1_adapters29.commandStartEvent)("document/elements/reset-style"),
6069
+ (0, import_editor_v1_adapters28.__privateListenTo)(
6070
+ (0, import_editor_v1_adapters28.commandStartEvent)("document/elements/reset-style"),
6081
6071
  (e) => resetStyles(e.args, resetElementStyles)
6082
6072
  );
6083
6073
  }
@@ -6229,9 +6219,9 @@ function getRectClipPath(rect, viewport) {
6229
6219
  }
6230
6220
 
6231
6221
  // src/hooks/use-canvas-document.ts
6232
- var import_editor_v1_adapters30 = require("@elementor/editor-v1-adapters");
6222
+ var import_editor_v1_adapters29 = require("@elementor/editor-v1-adapters");
6233
6223
  function useCanvasDocument() {
6234
- return (0, import_editor_v1_adapters30.__privateUseListenTo)((0, import_editor_v1_adapters30.commandEndEvent)("editor/documents/attach-preview"), () => (0, import_editor_v1_adapters30.getCanvasIframeDocument)());
6224
+ return (0, import_editor_v1_adapters29.__privateUseListenTo)((0, import_editor_v1_adapters29.commandEndEvent)("editor/documents/attach-preview"), () => (0, import_editor_v1_adapters29.getCanvasIframeDocument)());
6235
6225
  }
6236
6226
 
6237
6227
  // src/hooks/use-escape-on-canvas.ts
package/dist/index.mjs CHANGED
@@ -4314,11 +4314,6 @@ function initTabsModelExtensions() {
4314
4314
  // src/mcp/canvas-mcp.ts
4315
4315
  import { Schema as Schema3 } from "@elementor/editor-props";
4316
4316
 
4317
- // src/mcp/icon-library-experiment.ts
4318
- import { isExperimentActive } from "@elementor/editor-v1-adapters";
4319
- var ICON_LIBRARY_EXPERIMENT = "e_svg_library";
4320
- var isIconLibraryActive = () => isExperimentActive(ICON_LIBRARY_EXPERIMENT);
4321
-
4322
4317
  // src/mcp/resources/available-widgets-resource.ts
4323
4318
  import { httpService as httpService3 } from "@elementor/http-client";
4324
4319
  var MCP_PROXY_URL2 = "elementor/v1/mcp-proxy";
@@ -5171,7 +5166,6 @@ Setting a Font Awesome icon on an e-svg, after resolving it with \`find-icons\`:
5171
5166
  `;
5172
5167
  var CONFIGURE_ELEMENT_GUIDE_URI = "elementor://canvas/tools/configure-element-guide";
5173
5168
  var generatePrompt = () => {
5174
- const iconLibraryActive = isIconLibraryActive();
5175
5169
  const configureElementToolPrompt = toolPrompts("configure-element");
5176
5170
  configureElementToolPrompt.description(`
5177
5171
  Configure an existing element on the page.
@@ -5230,7 +5224,7 @@ Put the dynamic object EXACTLY at the node whose schema offers the "dynamic" var
5230
5224
  Image example: { "$$type": "image", "value": { "src": { "$$type": "dynamic", "value": { "name": "<image tag>", "settings": { ... } } } } }
5231
5225
  Do NOT send "group" (it is resolved automatically). Use { "settings": {} } only when the tag has no settings.
5232
5226
 
5233
- ${iconLibraryActive ? ICONS_SECTION : ""}`);
5227
+ ${ICONS_SECTION}`);
5234
5228
  configureElementToolPrompt.parameter("elementId", "The ID of the element to configure. MANDATORY.");
5235
5229
  configureElementToolPrompt.parameter(
5236
5230
  "elementType",
@@ -5267,9 +5261,7 @@ ${iconLibraryActive ? ICONS_SECTION : ""}`);
5267
5261
  };
5268
5262
  \`\`\`
5269
5263
  `);
5270
- if (iconLibraryActive) {
5271
- configureElementToolPrompt.example(ICON_EXAMPLE);
5272
- }
5264
+ configureElementToolPrompt.example(ICON_EXAMPLE);
5273
5265
  configureElementToolPrompt.instruction(
5274
5266
  "The $$type property is MANDATORY for every value in propertiesToChange; it is not used in the style parameter (raw CSS only)."
5275
5267
  );
@@ -5632,9 +5624,7 @@ var initCanvasMcp = (reg) => {
5632
5624
  initGeneralContextResource(reg);
5633
5625
  initBestPracticesResource(reg);
5634
5626
  initConfigureElementTool(reg);
5635
- if (isIconLibraryActive()) {
5636
- initFindIconsTool(reg);
5637
- }
5627
+ initFindIconsTool(reg);
5638
5628
  initGetPageStructureTool(reg);
5639
5629
  initBreakpointsResource(reg);
5640
5630
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-canvas",
3
3
  "description": "Elementor Editor Canvas",
4
- "version": "4.4.0-1146",
4
+ "version": "4.4.0-1148",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,26 +37,26 @@
37
37
  "react-dom": "^18.3.1"
38
38
  },
39
39
  "dependencies": {
40
- "@elementor/editor": "4.4.0-1146",
41
- "@elementor/editor-controls": "4.4.0-1146",
42
- "@elementor/editor-documents": "4.4.0-1146",
43
- "@elementor/editor-elements": "4.4.0-1146",
44
- "@elementor/editor-interactions": "4.4.0-1146",
45
- "@elementor/editor-mcp": "4.4.0-1146",
46
- "@elementor/editor-notifications": "4.4.0-1146",
47
- "@elementor/editor-props": "4.4.0-1146",
48
- "@elementor/editor-responsive": "4.4.0-1146",
49
- "@elementor/editor-styles": "4.4.0-1146",
50
- "@elementor/editor-styles-repository": "4.4.0-1146",
51
- "@elementor/editor-ui": "4.4.0-1146",
52
- "@elementor/editor-v1-adapters": "4.4.0-1146",
53
- "@elementor/events": "4.4.0-1146",
54
- "@elementor/http-client": "4.4.0-1146",
55
- "@elementor/schema": "4.4.0-1146",
56
- "@elementor/twing": "4.4.0-1146",
40
+ "@elementor/editor": "4.4.0-1148",
41
+ "@elementor/editor-controls": "4.4.0-1148",
42
+ "@elementor/editor-documents": "4.4.0-1148",
43
+ "@elementor/editor-elements": "4.4.0-1148",
44
+ "@elementor/editor-interactions": "4.4.0-1148",
45
+ "@elementor/editor-mcp": "4.4.0-1148",
46
+ "@elementor/editor-notifications": "4.4.0-1148",
47
+ "@elementor/editor-props": "4.4.0-1148",
48
+ "@elementor/editor-responsive": "4.4.0-1148",
49
+ "@elementor/editor-styles": "4.4.0-1148",
50
+ "@elementor/editor-styles-repository": "4.4.0-1148",
51
+ "@elementor/editor-ui": "4.4.0-1148",
52
+ "@elementor/editor-v1-adapters": "4.4.0-1148",
53
+ "@elementor/events": "4.4.0-1148",
54
+ "@elementor/http-client": "4.4.0-1148",
55
+ "@elementor/schema": "4.4.0-1148",
56
+ "@elementor/twing": "4.4.0-1148",
57
57
  "@elementor/ui": "1.41.4",
58
- "@elementor/utils": "4.4.0-1146",
59
- "@elementor/wp-media": "4.4.0-1146",
58
+ "@elementor/utils": "4.4.0-1148",
59
+ "@elementor/wp-media": "4.4.0-1148",
60
60
  "@floating-ui/react": "^0.27.5",
61
61
  "@wordpress/i18n": "^5.13.0",
62
62
  "dompurify": "^3.2.6"
@@ -0,0 +1,33 @@
1
+ import { initCanvasMcp } from '../canvas-mcp';
2
+ import { initFindIconsTool } from '../tools/find-icons/tool';
3
+
4
+ jest.mock( '@elementor/editor-props', () => ( {
5
+ Schema: { setDynamicTagNamesResolver: jest.fn() },
6
+ } ) );
7
+
8
+ jest.mock( '../resources/available-widgets-resource', () => ( { initAvailableWidgetsResource: jest.fn() } ) );
9
+ jest.mock( '../resources/best-practices-resource', () => ( { initBestPracticesResource: jest.fn() } ) );
10
+ jest.mock( '../resources/breakpoints-resource', () => ( { initBreakpointsResource: jest.fn() } ) );
11
+ jest.mock( '../resources/document-structure-resource', () => ( { initDocumentStructureResource: jest.fn() } ) );
12
+ jest.mock( '../resources/dynamic-tags-resource', () => ( { initDynamicTagsResource: jest.fn() } ) );
13
+ jest.mock( '../resources/editor-state-resource', () => ( { initEditorStateResource: jest.fn() } ) );
14
+ jest.mock( '../resources/general-context-resource', () => ( { initGeneralContextResource: jest.fn() } ) );
15
+ jest.mock( '../resources/selected-element-resource', () => ( { initSelectedElementResource: jest.fn() } ) );
16
+ jest.mock( '../resources/widgets-schema-resource', () => ( { initWidgetsSchemaResource: jest.fn() } ) );
17
+ jest.mock( '../tools/configure-element/tool', () => ( { initConfigureElementTool: jest.fn() } ) );
18
+ jest.mock( '../tools/find-icons/tool', () => ( { initFindIconsTool: jest.fn() } ) );
19
+ jest.mock( '../tools/get-page-structure/tool', () => ( { initGetPageStructureTool: jest.fn() } ) );
20
+ jest.mock( '../utils/resolve-dynamic-tag', () => ( { getDynamicTagNamesByCategories: jest.fn() } ) );
21
+
22
+ describe( 'initCanvasMcp', () => {
23
+ it( 'should always register the find-icons tool', () => {
24
+ // Arrange.
25
+ const reg = { addTool: jest.fn() } as never;
26
+
27
+ // Act.
28
+ initCanvasMcp( reg );
29
+
30
+ // Assert.
31
+ expect( initFindIconsTool ).toHaveBeenCalledWith( reg );
32
+ } );
33
+ } );
@@ -1,7 +1,6 @@
1
1
  import { type MCPRegistryEntry } from '@elementor/editor-mcp';
2
2
  import { Schema } from '@elementor/editor-props';
3
3
 
4
- import { isIconLibraryActive } from './icon-library-experiment';
5
4
  import { initAvailableWidgetsResource } from './resources/available-widgets-resource';
6
5
  import { initBestPracticesResource } from './resources/best-practices-resource';
7
6
  import { initBreakpointsResource } from './resources/breakpoints-resource';
@@ -30,9 +29,7 @@ export const initCanvasMcp = ( reg: MCPRegistryEntry ) => {
30
29
  initGeneralContextResource( reg );
31
30
  initBestPracticesResource( reg );
32
31
  initConfigureElementTool( reg );
33
- if ( isIconLibraryActive() ) {
34
- initFindIconsTool( reg );
35
- }
32
+ initFindIconsTool( reg );
36
33
  initGetPageStructureTool( reg );
37
34
  initBreakpointsResource( reg );
38
35
  };
@@ -0,0 +1,34 @@
1
+ import { generatePrompt } from '../prompt';
2
+
3
+ const mockPromptParts: string[] = [];
4
+
5
+ jest.mock( '@elementor/editor-mcp', () => ( {
6
+ toolPrompts: () => {
7
+ const record = ( ...args: unknown[] ) => {
8
+ mockPromptParts.push( ...args.filter( ( arg ): arg is string => 'string' === typeof arg ) );
9
+ };
10
+
11
+ return {
12
+ description: record,
13
+ parameter: record,
14
+ example: record,
15
+ instruction: record,
16
+ prompt: () => mockPromptParts.join( '\n' ),
17
+ };
18
+ },
19
+ } ) );
20
+
21
+ describe( 'configure-element prompt', () => {
22
+ beforeEach( () => {
23
+ mockPromptParts.length = 0;
24
+ } );
25
+
26
+ it( 'should always point agents at the find-icons tool for the svg property', () => {
27
+ // Act.
28
+ const prompt = generatePrompt();
29
+
30
+ // Assert.
31
+ expect( prompt ).toContain( '# Icons (the `svg` property on e-svg)' );
32
+ expect( prompt ).toContain( 'find-icons' );
33
+ } );
34
+ } );
@@ -1,6 +1,5 @@
1
1
  import { toolPrompts } from '@elementor/editor-mcp';
2
2
 
3
- import { isIconLibraryActive } from '../../icon-library-experiment';
4
3
  import { DYNAMIC_TAGS_URI } from '../../resources/dynamic-tags-resource';
5
4
  import { WIDGET_SCHEMA_URI } from '../../resources/widgets-schema-resource';
6
5
 
@@ -46,7 +45,6 @@ Setting a Font Awesome icon on an e-svg, after resolving it with \`find-icons\`:
46
45
  export const CONFIGURE_ELEMENT_GUIDE_URI = 'elementor://canvas/tools/configure-element-guide';
47
46
 
48
47
  export const generatePrompt = () => {
49
- const iconLibraryActive = isIconLibraryActive();
50
48
  const configureElementToolPrompt = toolPrompts( 'configure-element' );
51
49
 
52
50
  configureElementToolPrompt.description( `
@@ -106,7 +104,7 @@ Put the dynamic object EXACTLY at the node whose schema offers the "dynamic" var
106
104
  Image example: { "$$type": "image", "value": { "src": { "$$type": "dynamic", "value": { "name": "<image tag>", "settings": { ... } } } } }
107
105
  Do NOT send "group" (it is resolved automatically). Use { "settings": {} } only when the tag has no settings.
108
106
 
109
- ${ iconLibraryActive ? ICONS_SECTION : '' }` );
107
+ ${ ICONS_SECTION }` );
110
108
 
111
109
  configureElementToolPrompt.parameter( 'elementId', 'The ID of the element to configure. MANDATORY.' );
112
110
 
@@ -149,9 +147,7 @@ ${ iconLibraryActive ? ICONS_SECTION : '' }` );
149
147
  \`\`\`
150
148
  ` );
151
149
 
152
- if ( iconLibraryActive ) {
153
- configureElementToolPrompt.example( ICON_EXAMPLE );
154
- }
150
+ configureElementToolPrompt.example( ICON_EXAMPLE );
155
151
 
156
152
  configureElementToolPrompt.instruction(
157
153
  'The $$type property is MANDATORY for every value in propertiesToChange; it is not used in the style parameter (raw CSS only).'
@@ -1,5 +0,0 @@
1
- import { isExperimentActive } from '@elementor/editor-v1-adapters';
2
-
3
- const ICON_LIBRARY_EXPERIMENT = 'e_svg_library';
4
-
5
- export const isIconLibraryActive = () => isExperimentActive( ICON_LIBRARY_EXPERIMENT );