@elementor/editor-interactions 4.0.0-537 → 4.0.0-539
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.d.mts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +130 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +136 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
- package/src/components/controls/time-frame-indicator.tsx +24 -19
- package/src/components/interaction-details.tsx +10 -9
- package/src/configs/time-constants.ts +5 -0
- package/src/providers/document-elements-interactions-provider.ts +5 -1
- package/src/providers/utils/normalize-interactions.ts +65 -0
- package/src/types.ts +5 -0
- package/src/utils/prop-value-utils.ts +28 -19
- package/src/utils/size-transform-utils.ts +67 -0
- package/src/utils/time-conversion.ts +10 -0
package/dist/index.mjs
CHANGED
|
@@ -92,7 +92,7 @@ var PopupStateProvider = ({ children }) => {
|
|
|
92
92
|
|
|
93
93
|
// src/components/interactions-list.tsx
|
|
94
94
|
import * as React12 from "react";
|
|
95
|
-
import { useCallback as useCallback5, useEffect as useEffect2, useMemo as useMemo4, useRef } from "react";
|
|
95
|
+
import { useCallback as useCallback5, useEffect as useEffect2, useMemo as useMemo4, useRef as useRef2 } from "react";
|
|
96
96
|
import { Repeater } from "@elementor/editor-controls";
|
|
97
97
|
import { InfoCircleFilledIcon, PlayerPlayIcon } from "@elementor/icons";
|
|
98
98
|
import { Alert, AlertTitle, Box, IconButton, Tooltip } from "@elementor/ui";
|
|
@@ -116,6 +116,56 @@ function useInteractionItemContext() {
|
|
|
116
116
|
return context;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
// src/utils/prop-value-utils.ts
|
|
120
|
+
import { sizePropTypeUtil } from "@elementor/editor-props";
|
|
121
|
+
|
|
122
|
+
// src/configs/time-constants.ts
|
|
123
|
+
var TIME_UNITS = ["s", "ms"];
|
|
124
|
+
var DEFAULT_TIME_UNIT = "ms";
|
|
125
|
+
|
|
126
|
+
// src/utils/size-transform-utils.ts
|
|
127
|
+
var SIZE_REGEX = /^(?:(-?\d*\.?\d+)([a-z%]+)|([a-z%]+))$/i;
|
|
128
|
+
var parseSizeValue = (value, allowedUnits, defaultValue, defaultUnit) => {
|
|
129
|
+
if (typeof value === "number") {
|
|
130
|
+
return {
|
|
131
|
+
size: value,
|
|
132
|
+
unit: defaultUnit
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
const sizeValue = tryParse(value, allowedUnits, defaultUnit);
|
|
136
|
+
if (sizeValue) {
|
|
137
|
+
return sizeValue;
|
|
138
|
+
}
|
|
139
|
+
if (defaultValue) {
|
|
140
|
+
const fallbackSize = tryParse(defaultValue, allowedUnits, defaultUnit);
|
|
141
|
+
if (fallbackSize) {
|
|
142
|
+
return fallbackSize;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return createSizeValue(null, defaultUnit);
|
|
146
|
+
};
|
|
147
|
+
var tryParse = (value, allowedUnits, defaultUnit) => {
|
|
148
|
+
if (typeof value === "number") {
|
|
149
|
+
return createSizeValue(value, defaultUnit);
|
|
150
|
+
}
|
|
151
|
+
const match = value && value.match(SIZE_REGEX);
|
|
152
|
+
if (!match) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const size = match[1] ? parseFloat(match[1]) : null;
|
|
156
|
+
const unit = match[2] || match[3];
|
|
157
|
+
if (!allowedUnits.includes(unit)) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
return createSizeValue(size, unit);
|
|
161
|
+
};
|
|
162
|
+
var formatSizeValue = ({ size, unit }) => {
|
|
163
|
+
return `${size ?? ""}${unit}`;
|
|
164
|
+
};
|
|
165
|
+
var createSizeValue = (size, unit) => {
|
|
166
|
+
return { size, unit };
|
|
167
|
+
};
|
|
168
|
+
|
|
119
169
|
// src/utils/temp-id-utils.ts
|
|
120
170
|
var TEMP_ID_PREFIX = "temp-";
|
|
121
171
|
function generateTempInteractionId() {
|
|
@@ -134,8 +184,8 @@ var createNumber = (value) => ({
|
|
|
134
184
|
var createTimingConfig = (duration, delay) => ({
|
|
135
185
|
$$type: "timing-config",
|
|
136
186
|
value: {
|
|
137
|
-
duration:
|
|
138
|
-
delay:
|
|
187
|
+
duration: sizePropTypeUtil.create(parseSizeValue(duration, TIME_UNITS, void 0, DEFAULT_TIME_UNIT)),
|
|
188
|
+
delay: sizePropTypeUtil.create(parseSizeValue(delay, TIME_UNITS, void 0, DEFAULT_TIME_UNIT))
|
|
139
189
|
}
|
|
140
190
|
});
|
|
141
191
|
var createBoolean = (value) => ({
|
|
@@ -252,6 +302,9 @@ var createDefaultInteractionItem = () => {
|
|
|
252
302
|
var extractString = (prop, fallback = "") => {
|
|
253
303
|
return prop?.value ?? fallback;
|
|
254
304
|
};
|
|
305
|
+
var extractSize = (prop) => {
|
|
306
|
+
return formatSizeValue(prop?.value);
|
|
307
|
+
};
|
|
255
308
|
var extractNumber = (prop, fallback = 0) => {
|
|
256
309
|
return prop?.value ?? fallback;
|
|
257
310
|
};
|
|
@@ -389,30 +442,47 @@ function EffectType({ value, onChange }) {
|
|
|
389
442
|
|
|
390
443
|
// src/components/controls/time-frame-indicator.tsx
|
|
391
444
|
import * as React8 from "react";
|
|
392
|
-
import { useCallback as useCallback2 } from "react";
|
|
445
|
+
import { useCallback as useCallback2, useRef } from "react";
|
|
393
446
|
import { UnstableSizeField } from "@elementor/editor-controls";
|
|
394
|
-
|
|
395
|
-
|
|
447
|
+
|
|
448
|
+
// src/utils/time-conversion.ts
|
|
449
|
+
var UNIT_TO_MS = {
|
|
450
|
+
ms: 1,
|
|
451
|
+
s: 1e3
|
|
452
|
+
};
|
|
453
|
+
var convertTimeUnit = (value, from, to) => {
|
|
454
|
+
return value * UNIT_TO_MS[from] / UNIT_TO_MS[to];
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
// src/components/controls/time-frame-indicator.tsx
|
|
396
458
|
function TimeFrameIndicator({ value, onChange, defaultValue }) {
|
|
397
|
-
const sizeValue =
|
|
459
|
+
const sizeValue = parseSizeValue(value, TIME_UNITS, defaultValue, DEFAULT_TIME_UNIT);
|
|
460
|
+
const prevUnitRef = useRef(sizeValue.unit);
|
|
398
461
|
const setValue = useCallback2(
|
|
399
462
|
(size) => {
|
|
400
|
-
|
|
463
|
+
const unitChanged = prevUnitRef.current !== size.unit;
|
|
464
|
+
if (unitChanged) {
|
|
465
|
+
const fromUnit = prevUnitRef.current;
|
|
466
|
+
const toUnit = size.unit;
|
|
467
|
+
size.size = convertTimeUnit(Number(size.size), fromUnit, toUnit);
|
|
468
|
+
prevUnitRef.current = toUnit;
|
|
469
|
+
}
|
|
470
|
+
onChange(formatSizeValue(size));
|
|
401
471
|
},
|
|
402
472
|
[onChange]
|
|
403
473
|
);
|
|
404
474
|
const handleChange = (newValue) => {
|
|
405
|
-
setValue(newValue
|
|
475
|
+
setValue(newValue);
|
|
406
476
|
};
|
|
407
477
|
const handleBlur = () => {
|
|
408
478
|
if (!sizeValue.size) {
|
|
409
|
-
setValue(defaultValue);
|
|
479
|
+
setValue(parseSizeValue(defaultValue, TIME_UNITS, void 0, DEFAULT_TIME_UNIT));
|
|
410
480
|
}
|
|
411
481
|
};
|
|
412
482
|
return /* @__PURE__ */ React8.createElement(
|
|
413
483
|
UnstableSizeField,
|
|
414
484
|
{
|
|
415
|
-
units:
|
|
485
|
+
units: TIME_UNITS,
|
|
416
486
|
value: sizeValue,
|
|
417
487
|
onChange: handleChange,
|
|
418
488
|
onBlur: handleBlur,
|
|
@@ -424,12 +494,6 @@ function TimeFrameIndicator({ value, onChange, defaultValue }) {
|
|
|
424
494
|
}
|
|
425
495
|
);
|
|
426
496
|
}
|
|
427
|
-
var toSizeValue = (value) => {
|
|
428
|
-
return sizePropTypeUtil.create({
|
|
429
|
-
size: Number(value),
|
|
430
|
-
unit: DEFAULT_UNIT
|
|
431
|
-
}).value;
|
|
432
|
-
};
|
|
433
497
|
|
|
434
498
|
// src/components/interaction-details.tsx
|
|
435
499
|
var DEFAULT_VALUES = {
|
|
@@ -473,8 +537,8 @@ var InteractionDetails = ({ interaction, onChange, onPlayInteraction }) => {
|
|
|
473
537
|
const effect = extractString(interaction.animation.value.effect, DEFAULT_VALUES.effect);
|
|
474
538
|
const type = extractString(interaction.animation.value.type, DEFAULT_VALUES.type);
|
|
475
539
|
const direction = extractString(interaction.animation.value.direction, DEFAULT_VALUES.direction);
|
|
476
|
-
const duration =
|
|
477
|
-
const delay =
|
|
540
|
+
const duration = extractSize(interaction.animation.value.timing_config.value.duration);
|
|
541
|
+
const delay = extractSize(interaction.animation.value.timing_config.value.delay);
|
|
478
542
|
const replay = extractBoolean(interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay);
|
|
479
543
|
const easing = extractString(interaction.animation.value.config?.value.easing, DEFAULT_VALUES.easing);
|
|
480
544
|
const relativeTo = extractString(interaction.animation.value.config?.value.relativeTo, DEFAULT_VALUES.relativeTo);
|
|
@@ -560,14 +624,14 @@ var InteractionDetails = ({ interaction, onChange, onPlayInteraction }) => {
|
|
|
560
624
|
TimeFrameIndicator,
|
|
561
625
|
{
|
|
562
626
|
value: String(duration),
|
|
563
|
-
onChange: (v) => updateInteraction({ duration:
|
|
627
|
+
onChange: (v) => updateInteraction({ duration: v }),
|
|
564
628
|
defaultValue: DEFAULT_VALUES.duration
|
|
565
629
|
}
|
|
566
630
|
)), controlVisibilityConfig.delay(interactionValues) && /* @__PURE__ */ React9.createElement(Field, { label: __5("Delay", "elementor") }, /* @__PURE__ */ React9.createElement(
|
|
567
631
|
TimeFrameIndicator,
|
|
568
632
|
{
|
|
569
633
|
value: String(delay),
|
|
570
|
-
onChange: (v) => updateInteraction({ delay:
|
|
634
|
+
onChange: (v) => updateInteraction({ delay: v }),
|
|
571
635
|
defaultValue: DEFAULT_VALUES.delay
|
|
572
636
|
}
|
|
573
637
|
))), controlVisibilityConfig.relativeTo(interactionValues) && RelativeToControl && /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(Divider, null), /* @__PURE__ */ React9.createElement(Grid, { container: true, spacing: 1.5 }, /* @__PURE__ */ React9.createElement(Field, { label: __5("Relative To", "elementor") }, /* @__PURE__ */ React9.createElement(
|
|
@@ -701,7 +765,7 @@ var InteractionsListItem = ({ index, value }) => {
|
|
|
701
765
|
var MAX_NUMBER_OF_INTERACTIONS = 5;
|
|
702
766
|
function InteractionsList(props) {
|
|
703
767
|
const { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;
|
|
704
|
-
const hasInitializedRef =
|
|
768
|
+
const hasInitializedRef = useRef2(false);
|
|
705
769
|
const handleUpdateInteractions = useCallback5(
|
|
706
770
|
(newInteractions) => {
|
|
707
771
|
onSelectInteractions(newInteractions);
|
|
@@ -907,6 +971,54 @@ function createInteractionsProvider({
|
|
|
907
971
|
// src/providers/document-elements-interactions-provider.ts
|
|
908
972
|
import { getCurrentDocumentId, getElementInteractions, getElements } from "@elementor/editor-elements";
|
|
909
973
|
import { __privateListenTo as listenTo, windowEvent } from "@elementor/editor-v1-adapters";
|
|
974
|
+
|
|
975
|
+
// src/providers/utils/normalize-interactions.ts
|
|
976
|
+
import {
|
|
977
|
+
isTransformable,
|
|
978
|
+
numberPropTypeUtil
|
|
979
|
+
} from "@elementor/editor-props";
|
|
980
|
+
var FIELD_NORMALIZERS = {
|
|
981
|
+
size: (value) => {
|
|
982
|
+
const sizeProp = value;
|
|
983
|
+
const { size, unit } = sizeProp.value;
|
|
984
|
+
const numberPropValue = convertTimeUnit(size, unit, "ms");
|
|
985
|
+
return numberPropTypeUtil.create(numberPropValue);
|
|
986
|
+
}
|
|
987
|
+
};
|
|
988
|
+
var normalizeInteractions = (interactions) => {
|
|
989
|
+
if (!interactions) {
|
|
990
|
+
return;
|
|
991
|
+
}
|
|
992
|
+
if (interactions.items.length === 0) {
|
|
993
|
+
return interactions;
|
|
994
|
+
}
|
|
995
|
+
return {
|
|
996
|
+
...interactions,
|
|
997
|
+
items: interactions.items.map(normalizeNode)
|
|
998
|
+
};
|
|
999
|
+
};
|
|
1000
|
+
var normalizeNode = (node) => {
|
|
1001
|
+
if (Array.isArray(node)) {
|
|
1002
|
+
return node.map(normalizeNode);
|
|
1003
|
+
}
|
|
1004
|
+
if (node !== null && typeof node === "object") {
|
|
1005
|
+
if (isTransformable(node) && node.value !== void 0) {
|
|
1006
|
+
const normalizer = FIELD_NORMALIZERS[node.$$type];
|
|
1007
|
+
if (normalizer) {
|
|
1008
|
+
return normalizer(node);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
const typedNode = node;
|
|
1012
|
+
const out = {};
|
|
1013
|
+
for (const k in typedNode) {
|
|
1014
|
+
out[k] = normalizeNode(typedNode[k]);
|
|
1015
|
+
}
|
|
1016
|
+
return out;
|
|
1017
|
+
}
|
|
1018
|
+
return node;
|
|
1019
|
+
};
|
|
1020
|
+
|
|
1021
|
+
// src/providers/document-elements-interactions-provider.ts
|
|
910
1022
|
var ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = "document-elements-interactions-";
|
|
911
1023
|
var documentElementsInteractionsProvider = createInteractionsProvider({
|
|
912
1024
|
key: () => {
|
|
@@ -934,10 +1046,11 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
|
|
|
934
1046
|
});
|
|
935
1047
|
return filtered.map((element) => {
|
|
936
1048
|
const interactions = getElementInteractions(element.id);
|
|
1049
|
+
const normalizedInteractions = normalizeInteractions(interactions);
|
|
937
1050
|
return {
|
|
938
1051
|
elementId: element.id,
|
|
939
1052
|
dataId: element.id,
|
|
940
|
-
interactions:
|
|
1053
|
+
interactions: normalizedInteractions || { version: 1, items: [] }
|
|
941
1054
|
};
|
|
942
1055
|
});
|
|
943
1056
|
}
|