@elementor/editor-interactions 4.0.0-677 → 4.0.0-679

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
@@ -152,6 +152,7 @@ var InteractionsProvider = ({ children, elementId }) => {
152
152
  (0, import_editor_elements2.playElementInteractions)(elementId, interactionId);
153
153
  };
154
154
  const contextValue = {
155
+ elementId,
155
156
  interactions,
156
157
  setInteractions,
157
158
  playInteractions
@@ -181,32 +182,6 @@ var PopupStateProvider = ({ children }) => {
181
182
  return /* @__PURE__ */ React3.createElement(PopupStateContext.Provider, { value: { openByDefault, triggerDefaultOpen, resetDefaultOpen } }, children);
182
183
  };
183
184
 
184
- // src/components/interactions-list.tsx
185
- var React10 = __toESM(require("react"));
186
- var import_react9 = require("react");
187
- var import_editor_controls5 = require("@elementor/editor-controls");
188
- var import_icons2 = require("@elementor/icons");
189
- var import_ui6 = require("@elementor/ui");
190
- var import_i18n5 = require("@wordpress/i18n");
191
-
192
- // src/contexts/interactions-item-context.tsx
193
- var React4 = __toESM(require("react"));
194
- var import_react4 = require("react");
195
- var InteractionItemContext = (0, import_react4.createContext)(null);
196
- function InteractionItemContextProvider({
197
- value,
198
- children
199
- }) {
200
- return /* @__PURE__ */ React4.createElement(InteractionItemContext.Provider, { value }, children);
201
- }
202
- function useInteractionItemContext() {
203
- const context = (0, import_react4.useContext)(InteractionItemContext);
204
- if (!context) {
205
- throw new Error("useInteractionItemContext must be used within InteractionItemContextProvider");
206
- }
207
- return context;
208
- }
209
-
210
185
  // src/utils/prop-value-utils.ts
211
186
  var import_editor_props = require("@elementor/editor-props");
212
187
 
@@ -460,6 +435,67 @@ var buildDisplayLabel = (item) => {
460
435
  return `${triggerLabel}: ${effectLabel} ${typeLabel}`;
461
436
  };
462
437
 
438
+ // src/utils/tracking.ts
439
+ var import_editor_elements3 = require("@elementor/editor-elements");
440
+ var import_events = require("@elementor/events");
441
+ var TRIGGER_LABELS2 = {
442
+ load: "On page load",
443
+ scrollIn: "Scroll into view",
444
+ scrollOut: "Scroll out of view",
445
+ scrollOn: "While scrolling",
446
+ hover: "Hover",
447
+ click: "Click"
448
+ };
449
+ var capitalize2 = (s) => s.charAt(0).toUpperCase() + s.slice(1);
450
+ var trackInteractionCreated = (elementId, item) => {
451
+ const { dispatchEvent, config } = (0, import_events.getMixpanel)();
452
+ if (!config?.names?.interactions?.created) {
453
+ return;
454
+ }
455
+ const trigger = extractString(item.value.trigger);
456
+ const effect = extractString(item.value.animation.value.effect);
457
+ const type = extractString(item.value.animation.value.type);
458
+ dispatchEvent?.(config.names.interactions.created, {
459
+ app_type: config?.appTypes?.editor,
460
+ window_name: config?.appTypes?.editor,
461
+ interaction_type: config?.triggers?.click,
462
+ target_name: (0, import_editor_elements3.getElementLabel)(elementId),
463
+ interaction_result: "interaction_created",
464
+ target_location: config?.locations?.widgetPanel,
465
+ location_l1: (0, import_editor_elements3.getElementLabel)(elementId),
466
+ location_l2: "interactions",
467
+ interaction_description: "interaction_created",
468
+ interaction_trigger: TRIGGER_LABELS2[trigger] ?? capitalize2(trigger),
469
+ interaction_effect: effect === "custom" ? capitalize2(effect) : `${capitalize2(effect)} ${capitalize2(type)}`
470
+ });
471
+ };
472
+
473
+ // src/components/interactions-list.tsx
474
+ var React10 = __toESM(require("react"));
475
+ var import_react9 = require("react");
476
+ var import_editor_controls5 = require("@elementor/editor-controls");
477
+ var import_icons2 = require("@elementor/icons");
478
+ var import_ui6 = require("@elementor/ui");
479
+ var import_i18n5 = require("@wordpress/i18n");
480
+
481
+ // src/contexts/interactions-item-context.tsx
482
+ var React4 = __toESM(require("react"));
483
+ var import_react4 = require("react");
484
+ var InteractionItemContext = (0, import_react4.createContext)(null);
485
+ function InteractionItemContextProvider({
486
+ value,
487
+ children
488
+ }) {
489
+ return /* @__PURE__ */ React4.createElement(InteractionItemContext.Provider, { value }, children);
490
+ }
491
+ function useInteractionItemContext() {
492
+ const context = (0, import_react4.useContext)(InteractionItemContext);
493
+ if (!context) {
494
+ throw new Error("useInteractionItemContext must be used within InteractionItemContextProvider");
495
+ }
496
+ return context;
497
+ }
498
+
463
499
  // src/components/interactions-list-item.tsx
464
500
  var React9 = __toESM(require("react"));
465
501
  var import_react8 = require("react");
@@ -901,6 +937,7 @@ var InteractionsListItem = ({
901
937
  var MAX_NUMBER_OF_INTERACTIONS = 5;
902
938
  function InteractionsList(props) {
903
939
  const { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;
940
+ const { elementId } = useInteractionsContext();
904
941
  const hasInitializedRef = (0, import_react9.useRef)(false);
905
942
  const handleUpdateInteractions = (0, import_react9.useCallback)(
906
943
  (newInteractions) => {
@@ -926,13 +963,19 @@ function InteractionsList(props) {
926
963
  "elementor"
927
964
  ))) : void 0;
928
965
  const handleRepeaterChange = (0, import_react9.useCallback)(
929
- (newItems) => {
966
+ (newItems, _, meta) => {
930
967
  handleUpdateInteractions({
931
968
  ...interactions,
932
969
  items: newItems
933
970
  });
971
+ if (meta?.action?.type === "add") {
972
+ const addedItem = meta.action.payload[0]?.item;
973
+ if (addedItem) {
974
+ trackInteractionCreated(elementId, addedItem);
975
+ }
976
+ }
934
977
  },
935
- [interactions, handleUpdateInteractions]
978
+ [interactions, handleUpdateInteractions, elementId]
936
979
  );
937
980
  const handleInteractionChange = (0, import_react9.useCallback)(
938
981
  (index, newInteractionValue) => {
@@ -1000,6 +1043,7 @@ function InteractionsTabContent({ elementId }) {
1000
1043
  {
1001
1044
  onCreateInteraction: () => {
1002
1045
  firstInteractionState[1](true);
1046
+ trackInteractionCreated(elementId, createDefaultInteractionItem());
1003
1047
  }
1004
1048
  }
1005
1049
  ));
@@ -1090,12 +1134,12 @@ function createInteractionsProvider({
1090
1134
  }
1091
1135
 
1092
1136
  // src/providers/document-elements-interactions-provider.ts
1093
- var import_editor_elements3 = require("@elementor/editor-elements");
1137
+ var import_editor_elements4 = require("@elementor/editor-elements");
1094
1138
  var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
1095
1139
  var ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = "document-elements-interactions-";
1096
1140
  var documentElementsInteractionsProvider = createInteractionsProvider({
1097
1141
  key: () => {
1098
- const documentId = (0, import_editor_elements3.getCurrentDocumentId)();
1142
+ const documentId = (0, import_editor_elements4.getCurrentDocumentId)();
1099
1143
  if (!documentId) {
1100
1144
  const pendingKey = `${ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX}pending`;
1101
1145
  return pendingKey;
@@ -1109,16 +1153,16 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
1109
1153
  },
1110
1154
  actions: {
1111
1155
  all: () => {
1112
- const elements = (0, import_editor_elements3.getElements)();
1156
+ const elements = (0, import_editor_elements4.getElements)();
1113
1157
  const filtered = elements.filter((element) => {
1114
- const interactions = (0, import_editor_elements3.getElementInteractions)(element.id);
1158
+ const interactions = (0, import_editor_elements4.getElementInteractions)(element.id);
1115
1159
  if (!interactions) {
1116
1160
  return false;
1117
1161
  }
1118
1162
  return interactions?.items?.length > 0;
1119
1163
  });
1120
1164
  return filtered.map((element) => {
1121
- const interactions = (0, import_editor_elements3.getElementInteractions)(element.id);
1165
+ const interactions = (0, import_editor_elements4.getElementInteractions)(element.id);
1122
1166
  return {
1123
1167
  elementId: element.id,
1124
1168
  dataId: element.id,
@@ -1130,7 +1174,7 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
1130
1174
  });
1131
1175
 
1132
1176
  // src/commands/paste-interactions.ts
1133
- var import_editor_elements4 = require("@elementor/editor-elements");
1177
+ var import_editor_elements5 = require("@elementor/editor-elements");
1134
1178
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
1135
1179
  var import_i18n6 = require("@wordpress/i18n");
1136
1180
 
@@ -1147,12 +1191,12 @@ function getClipboardElements(storageKey = "clipboard") {
1147
1191
  // src/commands/paste-interactions.ts
1148
1192
  function isAtomicContainer(container) {
1149
1193
  const type = container?.model.get("widgetType") || container?.model.get("elType");
1150
- const widgetsCache = (0, import_editor_elements4.getWidgetsCache)();
1194
+ const widgetsCache = (0, import_editor_elements5.getWidgetsCache)();
1151
1195
  const elementConfig = widgetsCache?.[type];
1152
1196
  return Boolean(elementConfig?.atomic_props_schema);
1153
1197
  }
1154
1198
  function getTitleForContainers(containers) {
1155
- return containers.length > 1 ? (0, import_i18n6.__)("Elements", "elementor") : (0, import_editor_elements4.getElementLabel)(containers[0].id);
1199
+ return containers.length > 1 ? (0, import_i18n6.__)("Elements", "elementor") : (0, import_editor_elements5.getElementLabel)(containers[0].id);
1156
1200
  }
1157
1201
  function normalizeClipboardInteractions(raw) {
1158
1202
  if (!raw) {
@@ -1180,8 +1224,8 @@ function initPasteInteractionsCommand() {
1180
1224
  const pasted = regenerateInteractionIds(newInteractions);
1181
1225
  return containers.map((container) => {
1182
1226
  const elementId = container.id;
1183
- const previous = (0, import_editor_elements4.getElementInteractions)(elementId);
1184
- (0, import_editor_elements4.updateElementInteractions)({
1227
+ const previous = (0, import_editor_elements5.getElementInteractions)(elementId);
1228
+ (0, import_editor_elements5.updateElementInteractions)({
1185
1229
  elementId,
1186
1230
  interactions: pasted
1187
1231
  });
@@ -1190,7 +1234,7 @@ function initPasteInteractionsCommand() {
1190
1234
  },
1191
1235
  undo: (_, revertData) => {
1192
1236
  revertData.forEach(({ elementId, previous }) => {
1193
- (0, import_editor_elements4.updateElementInteractions)({
1237
+ (0, import_editor_elements5.updateElementInteractions)({
1194
1238
  elementId,
1195
1239
  interactions: previous.items?.length ? previous : void 0
1196
1240
  });
@@ -1218,7 +1262,7 @@ function initPasteInteractionsCommand() {
1218
1262
  if (!newInteractions) {
1219
1263
  return;
1220
1264
  }
1221
- const existingContainers = containers.filter((c) => (0, import_editor_elements4.getContainer)(c.id));
1265
+ const existingContainers = containers.filter((c) => (0, import_editor_elements5.getContainer)(c.id));
1222
1266
  const validContainers = existingContainers.filter(isAtomicContainer);
1223
1267
  if (!validContainers.length) {
1224
1268
  return;
@@ -1554,7 +1598,7 @@ function Trigger({ value, onChange }) {
1554
1598
  }
1555
1599
 
1556
1600
  // src/hooks/on-duplicate.ts
1557
- var import_editor_elements5 = require("@elementor/editor-elements");
1601
+ var import_editor_elements6 = require("@elementor/editor-elements");
1558
1602
  var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
1559
1603
  function initCleanInteractionIdsOnDuplicate() {
1560
1604
  (0, import_editor_v1_adapters4.registerDataHook)("after", "document/elements/duplicate", (_args, result) => {
@@ -1565,16 +1609,16 @@ function initCleanInteractionIdsOnDuplicate() {
1565
1609
  });
1566
1610
  }
1567
1611
  function cleanInteractionIdsRecursive(elementId) {
1568
- const container = (0, import_editor_elements5.getContainer)(elementId);
1612
+ const container = (0, import_editor_elements6.getContainer)(elementId);
1569
1613
  if (!container) {
1570
1614
  return;
1571
1615
  }
1572
- (0, import_editor_elements5.getAllDescendants)(container).forEach((element) => {
1616
+ (0, import_editor_elements6.getAllDescendants)(container).forEach((element) => {
1573
1617
  cleanInteractionIds(element.id);
1574
1618
  });
1575
1619
  }
1576
1620
  function cleanInteractionIds(elementId) {
1577
- const container = (0, import_editor_elements5.getContainer)(elementId);
1621
+ const container = (0, import_editor_elements6.getContainer)(elementId);
1578
1622
  if (!container) {
1579
1623
  return;
1580
1624
  }
@@ -1673,7 +1717,7 @@ var initInteractionsSchemaResource = (reg) => {
1673
1717
  };
1674
1718
 
1675
1719
  // src/mcp/tools/manage-element-interaction-tool.ts
1676
- var import_editor_elements6 = require("@elementor/editor-elements");
1720
+ var import_editor_elements7 = require("@elementor/editor-elements");
1677
1721
  var import_schema3 = require("@elementor/schema");
1678
1722
  var import_utils2 = require("@elementor/utils");
1679
1723
  var EMPTY_INTERACTIONS = {
@@ -1804,7 +1848,7 @@ var initManageElementInteractionTool = (reg) => {
1804
1848
  items: updatedItems
1805
1849
  };
1806
1850
  try {
1807
- (0, import_editor_elements6.updateElementInteractions)({ elementId, interactions: updatedInteractions });
1851
+ (0, import_editor_elements7.updateElementInteractions)({ elementId, interactions: updatedInteractions });
1808
1852
  } catch (error) {
1809
1853
  throw new Error(
1810
1854
  `Failed to update interactions for element "${elementId}": ${error instanceof Error ? error.message : "Unknown error"}`