@elementor/editor-interactions 4.0.0-667 → 4.0.0-669
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 +150 -51
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +157 -48
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -11
- package/src/commands/get-clipboard-elements.ts +11 -0
- package/src/commands/paste-interactions.ts +136 -0
- package/src/init.ts +2 -0
package/dist/index.mjs
CHANGED
|
@@ -1058,37 +1058,145 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
|
|
|
1058
1058
|
}
|
|
1059
1059
|
});
|
|
1060
1060
|
|
|
1061
|
+
// src/commands/paste-interactions.ts
|
|
1062
|
+
import {
|
|
1063
|
+
getContainer,
|
|
1064
|
+
getElementInteractions as getElementInteractions3,
|
|
1065
|
+
getElementLabel,
|
|
1066
|
+
getWidgetsCache,
|
|
1067
|
+
updateElementInteractions as updateElementInteractions2
|
|
1068
|
+
} from "@elementor/editor-elements";
|
|
1069
|
+
import {
|
|
1070
|
+
__privateListenTo as listenTo2,
|
|
1071
|
+
commandStartEvent,
|
|
1072
|
+
undoable
|
|
1073
|
+
} from "@elementor/editor-v1-adapters";
|
|
1074
|
+
import { __ as __6 } from "@wordpress/i18n";
|
|
1075
|
+
|
|
1076
|
+
// src/commands/get-clipboard-elements.ts
|
|
1077
|
+
function getClipboardElements(storageKey = "clipboard") {
|
|
1078
|
+
try {
|
|
1079
|
+
const storedData = JSON.parse(localStorage.getItem("elementor") ?? "{}");
|
|
1080
|
+
return storedData[storageKey]?.elements;
|
|
1081
|
+
} catch {
|
|
1082
|
+
return void 0;
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
// src/commands/paste-interactions.ts
|
|
1087
|
+
function isAtomicContainer(container) {
|
|
1088
|
+
const type = container?.model.get("widgetType") || container?.model.get("elType");
|
|
1089
|
+
const widgetsCache = getWidgetsCache();
|
|
1090
|
+
const elementConfig = widgetsCache?.[type];
|
|
1091
|
+
return Boolean(elementConfig?.atomic_props_schema);
|
|
1092
|
+
}
|
|
1093
|
+
function getTitleForContainers(containers) {
|
|
1094
|
+
return containers.length > 1 ? __6("Elements", "elementor") : getElementLabel(containers[0].id);
|
|
1095
|
+
}
|
|
1096
|
+
function normalizeClipboardInteractions(raw) {
|
|
1097
|
+
if (!raw) {
|
|
1098
|
+
return null;
|
|
1099
|
+
}
|
|
1100
|
+
const parsed = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
1101
|
+
if (!parsed?.items?.length) {
|
|
1102
|
+
return null;
|
|
1103
|
+
}
|
|
1104
|
+
return { version: parsed.version ?? 1, items: parsed.items };
|
|
1105
|
+
}
|
|
1106
|
+
function regenerateInteractionIds(interactions) {
|
|
1107
|
+
const cloned = structuredClone(interactions);
|
|
1108
|
+
cloned.items?.forEach((item) => {
|
|
1109
|
+
if (item.$$type === "interaction-item" && item.value) {
|
|
1110
|
+
item.value.interaction_id = createString(generateTempInteractionId());
|
|
1111
|
+
}
|
|
1112
|
+
});
|
|
1113
|
+
return cloned;
|
|
1114
|
+
}
|
|
1115
|
+
function initPasteInteractionsCommand() {
|
|
1116
|
+
const undoablePasteInteractions = undoable(
|
|
1117
|
+
{
|
|
1118
|
+
do: ({ containers, newInteractions }) => {
|
|
1119
|
+
const pasted = regenerateInteractionIds(newInteractions);
|
|
1120
|
+
return containers.map((container) => {
|
|
1121
|
+
const elementId = container.id;
|
|
1122
|
+
const previous = getElementInteractions3(elementId);
|
|
1123
|
+
updateElementInteractions2({
|
|
1124
|
+
elementId,
|
|
1125
|
+
interactions: pasted
|
|
1126
|
+
});
|
|
1127
|
+
return { elementId, previous: previous ?? { version: 1, items: [] } };
|
|
1128
|
+
});
|
|
1129
|
+
},
|
|
1130
|
+
undo: (_, revertData) => {
|
|
1131
|
+
revertData.forEach(({ elementId, previous }) => {
|
|
1132
|
+
updateElementInteractions2({
|
|
1133
|
+
elementId,
|
|
1134
|
+
interactions: previous.items?.length ? previous : void 0
|
|
1135
|
+
});
|
|
1136
|
+
});
|
|
1137
|
+
}
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
title: ({ containers }) => getTitleForContainers(containers),
|
|
1141
|
+
subtitle: __6("Interactions Pasted", "elementor")
|
|
1142
|
+
}
|
|
1143
|
+
);
|
|
1144
|
+
listenTo2(commandStartEvent("document/elements/paste-interactions"), (e) => {
|
|
1145
|
+
const args = e.args;
|
|
1146
|
+
const containers = args.containers ?? (args.container ? [args.container] : []);
|
|
1147
|
+
const storageKey = args.storageKey ?? "clipboard";
|
|
1148
|
+
if (!containers.length) {
|
|
1149
|
+
return;
|
|
1150
|
+
}
|
|
1151
|
+
const clipboardElements = getClipboardElements(storageKey);
|
|
1152
|
+
const [clipboardElement] = clipboardElements ?? [];
|
|
1153
|
+
if (!clipboardElement) {
|
|
1154
|
+
return;
|
|
1155
|
+
}
|
|
1156
|
+
const newInteractions = normalizeClipboardInteractions(clipboardElement.interactions);
|
|
1157
|
+
if (!newInteractions) {
|
|
1158
|
+
return;
|
|
1159
|
+
}
|
|
1160
|
+
const existingContainers = containers.filter((c) => getContainer(c.id));
|
|
1161
|
+
const validContainers = existingContainers.filter(isAtomicContainer);
|
|
1162
|
+
if (!validContainers.length) {
|
|
1163
|
+
return;
|
|
1164
|
+
}
|
|
1165
|
+
undoablePasteInteractions({ containers: validContainers, newInteractions });
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1061
1169
|
// src/components/controls/direction.tsx
|
|
1062
1170
|
import * as React12 from "react";
|
|
1063
1171
|
import { useMemo as useMemo4 } from "react";
|
|
1064
1172
|
import { ToggleButtonGroupUi } from "@elementor/editor-controls";
|
|
1065
1173
|
import { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from "@elementor/icons";
|
|
1066
|
-
import { __ as
|
|
1174
|
+
import { __ as __7 } from "@wordpress/i18n";
|
|
1067
1175
|
function Direction({ value, onChange, interactionType }) {
|
|
1068
1176
|
const options = useMemo4(() => {
|
|
1069
1177
|
const isIn = interactionType === "in";
|
|
1070
1178
|
return [
|
|
1071
1179
|
{
|
|
1072
1180
|
value: "top",
|
|
1073
|
-
label: isIn ?
|
|
1181
|
+
label: isIn ? __7("From top", "elementor") : __7("To top", "elementor"),
|
|
1074
1182
|
renderContent: ({ size }) => isIn ? /* @__PURE__ */ React12.createElement(ArrowDownSmallIcon, { fontSize: size }) : /* @__PURE__ */ React12.createElement(ArrowUpSmallIcon, { fontSize: size }),
|
|
1075
1183
|
showTooltip: true
|
|
1076
1184
|
},
|
|
1077
1185
|
{
|
|
1078
1186
|
value: "bottom",
|
|
1079
|
-
label: interactionType === "in" ?
|
|
1187
|
+
label: interactionType === "in" ? __7("From bottom", "elementor") : __7("To bottom", "elementor"),
|
|
1080
1188
|
renderContent: ({ size }) => isIn ? /* @__PURE__ */ React12.createElement(ArrowUpSmallIcon, { fontSize: size }) : /* @__PURE__ */ React12.createElement(ArrowDownSmallIcon, { fontSize: size }),
|
|
1081
1189
|
showTooltip: true
|
|
1082
1190
|
},
|
|
1083
1191
|
{
|
|
1084
1192
|
value: "left",
|
|
1085
|
-
label: interactionType === "in" ?
|
|
1193
|
+
label: interactionType === "in" ? __7("From left", "elementor") : __7("To left", "elementor"),
|
|
1086
1194
|
renderContent: ({ size }) => isIn ? /* @__PURE__ */ React12.createElement(ArrowRightIcon, { fontSize: size }) : /* @__PURE__ */ React12.createElement(ArrowLeftIcon, { fontSize: size }),
|
|
1087
1195
|
showTooltip: true
|
|
1088
1196
|
},
|
|
1089
1197
|
{
|
|
1090
1198
|
value: "right",
|
|
1091
|
-
label: interactionType === "in" ?
|
|
1199
|
+
label: interactionType === "in" ? __7("From right", "elementor") : __7("To right", "elementor"),
|
|
1092
1200
|
renderContent: ({ size }) => isIn ? /* @__PURE__ */ React12.createElement(ArrowLeftIcon, { fontSize: size }) : /* @__PURE__ */ React12.createElement(ArrowRightIcon, { fontSize: size }),
|
|
1093
1201
|
showTooltip: true
|
|
1094
1202
|
}
|
|
@@ -1099,21 +1207,21 @@ function Direction({ value, onChange, interactionType }) {
|
|
|
1099
1207
|
|
|
1100
1208
|
// src/components/controls/easing.tsx
|
|
1101
1209
|
import * as React15 from "react";
|
|
1102
|
-
import { __ as
|
|
1210
|
+
import { __ as __10 } from "@wordpress/i18n";
|
|
1103
1211
|
|
|
1104
1212
|
// src/ui/promotion-select.tsx
|
|
1105
1213
|
import * as React14 from "react";
|
|
1106
1214
|
import { useRef as useRef4 } from "react";
|
|
1107
1215
|
import { MenuListItem } from "@elementor/editor-ui";
|
|
1108
1216
|
import { MenuSubheader, Select } from "@elementor/ui";
|
|
1109
|
-
import { __ as
|
|
1217
|
+
import { __ as __9 } from "@wordpress/i18n";
|
|
1110
1218
|
|
|
1111
1219
|
// src/ui/interactions-promotion-chip.tsx
|
|
1112
1220
|
import * as React13 from "react";
|
|
1113
1221
|
import { forwardRef, useImperativeHandle, useState as useState5 } from "react";
|
|
1114
1222
|
import { PromotionChip, PromotionPopover, useCanvasClickHandler } from "@elementor/editor-ui";
|
|
1115
1223
|
import { Box as Box3 } from "@elementor/ui";
|
|
1116
|
-
import { __ as
|
|
1224
|
+
import { __ as __8 } from "@wordpress/i18n";
|
|
1117
1225
|
var InteractionsPromotionChip = forwardRef(
|
|
1118
1226
|
({ content, upgradeUrl, anchorRef }, ref) => {
|
|
1119
1227
|
const [isOpen, setIsOpen] = useState5(false);
|
|
@@ -1128,9 +1236,9 @@ var InteractionsPromotionChip = forwardRef(
|
|
|
1128
1236
|
PromotionPopover,
|
|
1129
1237
|
{
|
|
1130
1238
|
open: isOpen,
|
|
1131
|
-
title:
|
|
1239
|
+
title: __8("Interactions", "elementor"),
|
|
1132
1240
|
content,
|
|
1133
|
-
ctaText:
|
|
1241
|
+
ctaText: __8("Upgrade now", "elementor"),
|
|
1134
1242
|
ctaUrl: upgradeUrl,
|
|
1135
1243
|
anchorRef,
|
|
1136
1244
|
placement: anchorRef ? "right-start" : void 0,
|
|
@@ -1192,7 +1300,7 @@ function PromotionSelect({
|
|
|
1192
1300
|
promotionRef.current?.toggle();
|
|
1193
1301
|
}
|
|
1194
1302
|
},
|
|
1195
|
-
promotionLabel ??
|
|
1303
|
+
promotionLabel ?? __9("PRO features", "elementor"),
|
|
1196
1304
|
/* @__PURE__ */ React14.createElement(
|
|
1197
1305
|
InteractionsPromotionChip,
|
|
1198
1306
|
{
|
|
@@ -1209,13 +1317,13 @@ function PromotionSelect({
|
|
|
1209
1317
|
|
|
1210
1318
|
// src/components/controls/easing.tsx
|
|
1211
1319
|
var EASING_OPTIONS = {
|
|
1212
|
-
easeIn:
|
|
1213
|
-
easeInOut:
|
|
1214
|
-
easeOut:
|
|
1215
|
-
backIn:
|
|
1216
|
-
backInOut:
|
|
1217
|
-
backOut:
|
|
1218
|
-
linear:
|
|
1320
|
+
easeIn: __10("Ease In", "elementor"),
|
|
1321
|
+
easeInOut: __10("Ease In Out", "elementor"),
|
|
1322
|
+
easeOut: __10("Ease Out", "elementor"),
|
|
1323
|
+
backIn: __10("Back In", "elementor"),
|
|
1324
|
+
backInOut: __10("Back In Out", "elementor"),
|
|
1325
|
+
backOut: __10("Back Out", "elementor"),
|
|
1326
|
+
linear: __10("Linear", "elementor")
|
|
1219
1327
|
};
|
|
1220
1328
|
var BASE_EASINGS = ["easeIn"];
|
|
1221
1329
|
function Easing({}) {
|
|
@@ -1231,7 +1339,7 @@ function Easing({}) {
|
|
|
1231
1339
|
value: DEFAULT_VALUES.easing,
|
|
1232
1340
|
baseOptions,
|
|
1233
1341
|
disabledOptions,
|
|
1234
|
-
promotionContent:
|
|
1342
|
+
promotionContent: __10("Upgrade to control the smoothness of the interaction.", "elementor"),
|
|
1235
1343
|
upgradeUrl: "https://go.elementor.com/go-pro-interactions-easing-modal/"
|
|
1236
1344
|
}
|
|
1237
1345
|
);
|
|
@@ -1239,12 +1347,12 @@ function Easing({}) {
|
|
|
1239
1347
|
|
|
1240
1348
|
// src/components/controls/effect.tsx
|
|
1241
1349
|
import * as React16 from "react";
|
|
1242
|
-
import { __ as
|
|
1350
|
+
import { __ as __11 } from "@wordpress/i18n";
|
|
1243
1351
|
var EFFECT_OPTIONS = {
|
|
1244
|
-
fade:
|
|
1245
|
-
slide:
|
|
1246
|
-
scale:
|
|
1247
|
-
custom:
|
|
1352
|
+
fade: __11("Fade", "elementor"),
|
|
1353
|
+
slide: __11("Slide", "elementor"),
|
|
1354
|
+
scale: __11("Scale", "elementor"),
|
|
1355
|
+
custom: __11("Custom", "elementor")
|
|
1248
1356
|
};
|
|
1249
1357
|
var BASE_EFFECTS = ["fade", "slide", "scale"];
|
|
1250
1358
|
function Effect({ value, onChange }) {
|
|
@@ -1261,8 +1369,8 @@ function Effect({ value, onChange }) {
|
|
|
1261
1369
|
onChange,
|
|
1262
1370
|
baseOptions,
|
|
1263
1371
|
disabledOptions,
|
|
1264
|
-
promotionLabel:
|
|
1265
|
-
promotionContent:
|
|
1372
|
+
promotionLabel: __11("PRO effects", "elementor"),
|
|
1373
|
+
promotionContent: __11(
|
|
1266
1374
|
"Upgrade to further customize your animation with opacity, scale, move, rotate and more.",
|
|
1267
1375
|
"elementor"
|
|
1268
1376
|
),
|
|
@@ -1274,19 +1382,19 @@ function Effect({ value, onChange }) {
|
|
|
1274
1382
|
// src/components/controls/effect-type.tsx
|
|
1275
1383
|
import * as React17 from "react";
|
|
1276
1384
|
import { ToggleButtonGroupUi as ToggleButtonGroupUi2 } from "@elementor/editor-controls";
|
|
1277
|
-
import { __ as
|
|
1385
|
+
import { __ as __12 } from "@wordpress/i18n";
|
|
1278
1386
|
function EffectType({ value, onChange }) {
|
|
1279
1387
|
const options = [
|
|
1280
1388
|
{
|
|
1281
1389
|
value: "in",
|
|
1282
|
-
label:
|
|
1283
|
-
renderContent: () =>
|
|
1390
|
+
label: __12("In", "elementor"),
|
|
1391
|
+
renderContent: () => __12("In", "elementor"),
|
|
1284
1392
|
showTooltip: true
|
|
1285
1393
|
},
|
|
1286
1394
|
{
|
|
1287
1395
|
value: "out",
|
|
1288
|
-
label:
|
|
1289
|
-
renderContent: () =>
|
|
1396
|
+
label: __12("Out", "elementor"),
|
|
1397
|
+
renderContent: () => __12("Out", "elementor"),
|
|
1290
1398
|
showTooltip: true
|
|
1291
1399
|
}
|
|
1292
1400
|
];
|
|
@@ -1298,10 +1406,10 @@ import * as React18 from "react";
|
|
|
1298
1406
|
import { ToggleButtonGroupUi as ToggleButtonGroupUi3 } from "@elementor/editor-controls";
|
|
1299
1407
|
import { CheckIcon, MinusIcon } from "@elementor/icons";
|
|
1300
1408
|
import { Box as Box4 } from "@elementor/ui";
|
|
1301
|
-
import { __ as
|
|
1409
|
+
import { __ as __13 } from "@wordpress/i18n";
|
|
1302
1410
|
var REPLAY_OPTIONS = {
|
|
1303
|
-
no:
|
|
1304
|
-
yes:
|
|
1411
|
+
no: __13("No", "elementor"),
|
|
1412
|
+
yes: __13("Yes", "elementor")
|
|
1305
1413
|
};
|
|
1306
1414
|
var BASE_REPLAY = ["no"];
|
|
1307
1415
|
var OVERLAY_GRID = "1 / 1";
|
|
@@ -1326,7 +1434,7 @@ function Replay({ onChange, anchorRef }) {
|
|
|
1326
1434
|
return /* @__PURE__ */ React18.createElement(Box4, { sx: { display: "grid", alignItems: "center" } }, /* @__PURE__ */ React18.createElement(Box4, { sx: { gridArea: OVERLAY_GRID } }, /* @__PURE__ */ React18.createElement(ToggleButtonGroupUi3, { items: options, exclusive: true, onChange, value: false })), /* @__PURE__ */ React18.createElement(Box4, { sx: { gridArea: OVERLAY_GRID, marginInlineEnd: CHIP_OFFSET, justifySelf: "end" } }, /* @__PURE__ */ React18.createElement(
|
|
1327
1435
|
InteractionsPromotionChip,
|
|
1328
1436
|
{
|
|
1329
|
-
content:
|
|
1437
|
+
content: __13("Upgrade to run the animation every time its trigger occurs.", "elementor"),
|
|
1330
1438
|
upgradeUrl: "https://go.elementor.com/go-pro-interactions-replay-modal/",
|
|
1331
1439
|
anchorRef
|
|
1332
1440
|
}
|
|
@@ -1335,13 +1443,13 @@ function Replay({ onChange, anchorRef }) {
|
|
|
1335
1443
|
|
|
1336
1444
|
// src/components/controls/trigger.tsx
|
|
1337
1445
|
import * as React19 from "react";
|
|
1338
|
-
import { __ as
|
|
1446
|
+
import { __ as __14 } from "@wordpress/i18n";
|
|
1339
1447
|
var TRIGGER_OPTIONS = {
|
|
1340
|
-
load:
|
|
1341
|
-
scrollIn:
|
|
1342
|
-
scrollOn:
|
|
1343
|
-
hover:
|
|
1344
|
-
click:
|
|
1448
|
+
load: __14("Page load", "elementor"),
|
|
1449
|
+
scrollIn: __14("Scroll into view", "elementor"),
|
|
1450
|
+
scrollOn: __14("While scrolling", "elementor"),
|
|
1451
|
+
hover: __14("On hover", "elementor"),
|
|
1452
|
+
click: __14("On click", "elementor")
|
|
1345
1453
|
};
|
|
1346
1454
|
var BASE_TRIGGERS = ["load", "scrollIn"];
|
|
1347
1455
|
function Trigger({ value, onChange }) {
|
|
@@ -1358,15 +1466,15 @@ function Trigger({ value, onChange }) {
|
|
|
1358
1466
|
onChange,
|
|
1359
1467
|
baseOptions,
|
|
1360
1468
|
disabledOptions,
|
|
1361
|
-
promotionLabel:
|
|
1362
|
-
promotionContent:
|
|
1469
|
+
promotionLabel: __14("PRO triggers", "elementor"),
|
|
1470
|
+
promotionContent: __14("Upgrade to unlock more interactions triggers.", "elementor"),
|
|
1363
1471
|
upgradeUrl: "https://go.elementor.com/go-pro-interactions-triggers-modal/"
|
|
1364
1472
|
}
|
|
1365
1473
|
);
|
|
1366
1474
|
}
|
|
1367
1475
|
|
|
1368
1476
|
// src/hooks/on-duplicate.ts
|
|
1369
|
-
import { getAllDescendants, getContainer } from "@elementor/editor-elements";
|
|
1477
|
+
import { getAllDescendants, getContainer as getContainer2 } from "@elementor/editor-elements";
|
|
1370
1478
|
import { registerDataHook } from "@elementor/editor-v1-adapters";
|
|
1371
1479
|
function initCleanInteractionIdsOnDuplicate() {
|
|
1372
1480
|
registerDataHook("after", "document/elements/duplicate", (_args, result) => {
|
|
@@ -1377,7 +1485,7 @@ function initCleanInteractionIdsOnDuplicate() {
|
|
|
1377
1485
|
});
|
|
1378
1486
|
}
|
|
1379
1487
|
function cleanInteractionIdsRecursive(elementId) {
|
|
1380
|
-
const container =
|
|
1488
|
+
const container = getContainer2(elementId);
|
|
1381
1489
|
if (!container) {
|
|
1382
1490
|
return;
|
|
1383
1491
|
}
|
|
@@ -1386,7 +1494,7 @@ function cleanInteractionIdsRecursive(elementId) {
|
|
|
1386
1494
|
});
|
|
1387
1495
|
}
|
|
1388
1496
|
function cleanInteractionIds(elementId) {
|
|
1389
|
-
const container =
|
|
1497
|
+
const container = getContainer2(elementId);
|
|
1390
1498
|
if (!container) {
|
|
1391
1499
|
return;
|
|
1392
1500
|
}
|
|
@@ -1485,7 +1593,7 @@ var initInteractionsSchemaResource = (reg) => {
|
|
|
1485
1593
|
};
|
|
1486
1594
|
|
|
1487
1595
|
// src/mcp/tools/manage-element-interaction-tool.ts
|
|
1488
|
-
import { updateElementInteractions as
|
|
1596
|
+
import { updateElementInteractions as updateElementInteractions3 } from "@elementor/editor-elements";
|
|
1489
1597
|
import { z as z2 } from "@elementor/schema";
|
|
1490
1598
|
import { isProActive as isProActive2 } from "@elementor/utils";
|
|
1491
1599
|
var EMPTY_INTERACTIONS = {
|
|
@@ -1616,7 +1724,7 @@ var initManageElementInteractionTool = (reg) => {
|
|
|
1616
1724
|
items: updatedItems
|
|
1617
1725
|
};
|
|
1618
1726
|
try {
|
|
1619
|
-
|
|
1727
|
+
updateElementInteractions3({ elementId, interactions: updatedInteractions });
|
|
1620
1728
|
} catch (error) {
|
|
1621
1729
|
throw new Error(
|
|
1622
1730
|
`Failed to update interactions for element "${elementId}": ${error instanceof Error ? error.message : "Unknown error"}`
|
|
@@ -1707,6 +1815,7 @@ function init() {
|
|
|
1707
1815
|
try {
|
|
1708
1816
|
interactionsRepository.register(documentElementsInteractionsProvider);
|
|
1709
1817
|
initCleanInteractionIdsOnDuplicate();
|
|
1818
|
+
initPasteInteractionsCommand();
|
|
1710
1819
|
registerInteractionsControl({
|
|
1711
1820
|
type: "trigger",
|
|
1712
1821
|
component: Trigger,
|