@elementor/editor-interactions 4.0.0-678 → 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 +90 -46
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +74 -30
- package/dist/index.mjs.map +1 -1
- package/package.json +12 -11
- package/src/components/interactions-list.tsx +16 -3
- package/src/components/interactions-tab.tsx +3 -0
- package/src/contexts/interactions-context.tsx +2 -0
- package/src/utils/tracking.ts +42 -0
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
|
|
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,
|
|
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,
|
|
1156
|
+
const elements = (0, import_editor_elements4.getElements)();
|
|
1113
1157
|
const filtered = elements.filter((element) => {
|
|
1114
|
-
const interactions = (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
1184
|
-
(0,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
1612
|
+
const container = (0, import_editor_elements6.getContainer)(elementId);
|
|
1569
1613
|
if (!container) {
|
|
1570
1614
|
return;
|
|
1571
1615
|
}
|
|
1572
|
-
(0,
|
|
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,
|
|
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
|
|
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,
|
|
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"}`
|