@elementor/editor-interactions 3.33.0-258 → 3.33.0-260
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 +47 -30
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +46 -29
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
- package/src/components/controls/direction.tsx +1 -0
- package/src/components/controls/effect-type.tsx +1 -0
- package/src/components/interaction-details.tsx +36 -19
- package/src/components/interactions-list.tsx +3 -3
package/dist/index.js
CHANGED
|
@@ -68,7 +68,7 @@ var EmptyState = ({ onCreateInteraction }) => {
|
|
|
68
68
|
|
|
69
69
|
// src/components/interactions-tab.tsx
|
|
70
70
|
var React11 = __toESM(require("react"));
|
|
71
|
-
var
|
|
71
|
+
var import_react4 = require("react");
|
|
72
72
|
var import_editor_elements2 = require("@elementor/editor-elements");
|
|
73
73
|
var import_session = require("@elementor/session");
|
|
74
74
|
var import_ui9 = require("@elementor/ui");
|
|
@@ -121,7 +121,7 @@ var PopupStateProvider = ({ children }) => {
|
|
|
121
121
|
|
|
122
122
|
// src/components/interactions-list.tsx
|
|
123
123
|
var React10 = __toESM(require("react"));
|
|
124
|
-
var
|
|
124
|
+
var import_react3 = require("react");
|
|
125
125
|
var import_editor_controls = require("@elementor/editor-controls");
|
|
126
126
|
var import_icons3 = require("@elementor/icons");
|
|
127
127
|
var import_ui8 = require("@elementor/ui");
|
|
@@ -144,7 +144,6 @@ function getInteractionsConfig() {
|
|
|
144
144
|
|
|
145
145
|
// src/components/interaction-details.tsx
|
|
146
146
|
var React9 = __toESM(require("react"));
|
|
147
|
-
var import_react3 = require("react");
|
|
148
147
|
var import_ui7 = require("@elementor/ui");
|
|
149
148
|
var import_i18n7 = require("@wordpress/i18n");
|
|
150
149
|
|
|
@@ -166,7 +165,8 @@ function Direction({ value, onChange }) {
|
|
|
166
165
|
size: "tiny",
|
|
167
166
|
exclusive: true,
|
|
168
167
|
onChange: (event, newValue) => onChange(newValue),
|
|
169
|
-
value
|
|
168
|
+
value,
|
|
169
|
+
"aria-label": (0, import_i18n2.__)("Direction", "elementor")
|
|
170
170
|
},
|
|
171
171
|
availableDirections.map((direction) => {
|
|
172
172
|
return /* @__PURE__ */ React4.createElement(import_ui2.Tooltip, { key: direction.key, title: direction.label, placement: "top" }, /* @__PURE__ */ React4.createElement(import_ui2.ToggleButton, { key: direction.key, value: direction.key }, direction.icon));
|
|
@@ -215,7 +215,8 @@ function EffectType({ value, onChange }) {
|
|
|
215
215
|
size: "tiny",
|
|
216
216
|
exclusive: true,
|
|
217
217
|
onChange: (event, newValue) => onChange(newValue),
|
|
218
|
-
value
|
|
218
|
+
value,
|
|
219
|
+
"aria-label": (0, import_i18n4.__)("Type", "elementor")
|
|
219
220
|
},
|
|
220
221
|
availableEffectTypes.map((effectType) => {
|
|
221
222
|
return /* @__PURE__ */ React6.createElement(import_ui4.Tooltip, { key: effectType.key, title: effectType.label, placement: "top" }, /* @__PURE__ */ React6.createElement(import_ui4.ToggleButton, { key: effectType.key, value: effectType.key }, effectType.label));
|
|
@@ -282,29 +283,45 @@ function Trigger({ value, onChange }) {
|
|
|
282
283
|
|
|
283
284
|
// src/components/interaction-details.tsx
|
|
284
285
|
var DELIMITER = "-";
|
|
286
|
+
var DEFAULT_INTERACTION = "load-fade-in--300-0";
|
|
287
|
+
var getDefaultInteractionDetails = () => {
|
|
288
|
+
const [trigger, effect, type, direction, duration, delay] = DEFAULT_INTERACTION.split(DELIMITER);
|
|
289
|
+
return {
|
|
290
|
+
trigger,
|
|
291
|
+
effect,
|
|
292
|
+
type,
|
|
293
|
+
direction,
|
|
294
|
+
duration,
|
|
295
|
+
delay
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
var buildInteractionDetails = (interaction) => {
|
|
299
|
+
const [trigger, effect, type, direction, duration, delay] = interaction.split(DELIMITER);
|
|
300
|
+
const defaultInteractionDetails = getDefaultInteractionDetails();
|
|
301
|
+
return {
|
|
302
|
+
trigger: trigger || defaultInteractionDetails.trigger,
|
|
303
|
+
effect: effect || defaultInteractionDetails.effect,
|
|
304
|
+
type: type || defaultInteractionDetails.type,
|
|
305
|
+
direction: direction || defaultInteractionDetails.direction,
|
|
306
|
+
duration: duration || defaultInteractionDetails.duration,
|
|
307
|
+
delay: delay || defaultInteractionDetails.delay
|
|
308
|
+
};
|
|
309
|
+
};
|
|
285
310
|
var InteractionDetails = ({ interaction, onChange }) => {
|
|
286
|
-
const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
trigger: trigger || "load",
|
|
290
|
-
effect: effect || "fade",
|
|
291
|
-
type: type || "in",
|
|
292
|
-
direction: direction || "",
|
|
293
|
-
duration: duration || "300",
|
|
294
|
-
delay: delay || "0"
|
|
295
|
-
};
|
|
296
|
-
});
|
|
297
|
-
(0, import_react3.useEffect)(() => {
|
|
298
|
-
const newValue = Object.values(interactionDetails).join(DELIMITER);
|
|
299
|
-
onChange(newValue);
|
|
300
|
-
}, [interactionDetails, onChange]);
|
|
311
|
+
const interactionDetails = React9.useMemo(() => {
|
|
312
|
+
return buildInteractionDetails(interaction);
|
|
313
|
+
}, [interaction]);
|
|
301
314
|
const handleChange = (key, value) => {
|
|
302
|
-
|
|
315
|
+
if (value === null) {
|
|
316
|
+
value = getDefaultInteractionDetails()[key];
|
|
317
|
+
}
|
|
318
|
+
const newInteractionDetails = { ...interactionDetails, [key]: value };
|
|
319
|
+
onChange(Object.values(newInteractionDetails).join(DELIMITER));
|
|
303
320
|
};
|
|
304
321
|
return /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(import_ui7.Grid, { container: true, spacing: 2, sx: { p: 1.5 } }, /* @__PURE__ */ React9.createElement(Trigger, { value: interactionDetails.trigger, onChange: (v) => handleChange("trigger", v) })), /* @__PURE__ */ React9.createElement(import_ui7.Divider, { sx: { mx: 1.5 } }), /* @__PURE__ */ React9.createElement(import_ui7.Grid, { container: true, spacing: 2, sx: { p: 1.5 } }, /* @__PURE__ */ React9.createElement(Effect, { value: interactionDetails.effect, onChange: (v) => handleChange("effect", v) }), /* @__PURE__ */ React9.createElement(EffectType, { value: interactionDetails.type, onChange: (v) => handleChange("type", v) }), /* @__PURE__ */ React9.createElement(
|
|
305
322
|
Direction,
|
|
306
323
|
{
|
|
307
|
-
value: interactionDetails.direction
|
|
324
|
+
value: interactionDetails.direction,
|
|
308
325
|
onChange: (v) => handleChange("direction", v)
|
|
309
326
|
}
|
|
310
327
|
), /* @__PURE__ */ React9.createElement(
|
|
@@ -327,11 +344,11 @@ var InteractionDetails = ({ interaction, onChange }) => {
|
|
|
327
344
|
// src/components/interactions-list.tsx
|
|
328
345
|
function InteractionsList(props) {
|
|
329
346
|
const { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;
|
|
330
|
-
const [interactionId, setInteractionId] = (0,
|
|
347
|
+
const [interactionId, setInteractionId] = (0, import_react3.useState)(selectedInteraction);
|
|
331
348
|
if (triggerCreateOnShowEmpty && !interactionId) {
|
|
332
|
-
setInteractionId(
|
|
349
|
+
setInteractionId(DEFAULT_INTERACTION);
|
|
333
350
|
}
|
|
334
|
-
(0,
|
|
351
|
+
(0, import_react3.useEffect)(() => {
|
|
335
352
|
if (interactionId !== selectedInteraction) {
|
|
336
353
|
onSelectInteraction(interactionId);
|
|
337
354
|
}
|
|
@@ -360,7 +377,7 @@ function InteractionsList(props) {
|
|
|
360
377
|
isSortable: false,
|
|
361
378
|
disableAddItemButton: !!interactionId,
|
|
362
379
|
itemSettings: {
|
|
363
|
-
initialValues:
|
|
380
|
+
initialValues: DEFAULT_INTERACTION,
|
|
364
381
|
Label: ({ value }) => displayLabel(value),
|
|
365
382
|
Icon: () => null,
|
|
366
383
|
Content: ({ value }) => /* @__PURE__ */ React10.createElement(
|
|
@@ -386,8 +403,8 @@ var InteractionsTab = ({ elementId }) => {
|
|
|
386
403
|
};
|
|
387
404
|
function InteractionsTabContent({ elementId }) {
|
|
388
405
|
const existingInteractions = (0, import_editor_elements2.useElementInteractions)(elementId);
|
|
389
|
-
const [firstInteraction, setFirstInteraction] = (0,
|
|
390
|
-
const [showInteractions, setShowInteractions] = (0,
|
|
406
|
+
const [firstInteraction, setFirstInteraction] = (0, import_react4.useState)(false);
|
|
407
|
+
const [showInteractions, setShowInteractions] = (0, import_react4.useState)(() => {
|
|
391
408
|
const parsed = JSON.parse(existingInteractions || "{}");
|
|
392
409
|
if (parsed && parsed?.items?.length > 0) {
|
|
393
410
|
return true;
|
|
@@ -406,7 +423,7 @@ function InteractionsTabContent({ elementId }) {
|
|
|
406
423
|
}
|
|
407
424
|
function InteractionsContent({ firstInteraction }) {
|
|
408
425
|
const { interactions, setInteractions, playInteractions } = useInteractionsContext();
|
|
409
|
-
const applyInteraction = (0,
|
|
426
|
+
const applyInteraction = (0, import_react4.useCallback)(
|
|
410
427
|
(interaction) => {
|
|
411
428
|
if (!interaction) {
|
|
412
429
|
setInteractions(void 0);
|
|
@@ -427,7 +444,7 @@ function InteractionsContent({ firstInteraction }) {
|
|
|
427
444
|
},
|
|
428
445
|
[setInteractions]
|
|
429
446
|
);
|
|
430
|
-
const selectedInteraction = (0,
|
|
447
|
+
const selectedInteraction = (0, import_react4.useMemo)(() => {
|
|
431
448
|
try {
|
|
432
449
|
const parsed = JSON.parse(interactions || "{}");
|
|
433
450
|
if (parsed && parsed?.items) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( 'load-fade-in-left-100-0' );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: interactionId ?? 'load-fade-in-left-100-0',\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst [ interactionDetails, setInteractionDetails ] = useState( () => {\n\t\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\n\t\treturn {\n\t\t\ttrigger: trigger || 'load',\n\t\t\teffect: effect || 'fade',\n\t\t\ttype: type || 'in',\n\t\t\tdirection: direction || '',\n\t\t\tduration: duration || '300',\n\t\t\tdelay: delay || '0',\n\t\t};\n\t} );\n\n\tuseEffect( () => {\n\t\tconst newValue = Object.values( interactionDetails ).join( DELIMITER );\n\t\tonChange( newValue );\n\t}, [ interactionDetails, onChange ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tsetInteractionDetails( ( prev ) => ( { ...prev, [ key ]: value } ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction ?? '' }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\treturn elements\n\t\t\t\t.filter( ( element ) => {\n\t\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\t\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if interactions array has items or string is not empty\n\t\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} )\n\t\t\t\t.map( ( element ) => {\n\t\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\t\t// data-id in template is always set to element.id (from $this->get_id())\n\t\t\t\t\t// So we use element.id, not _cssid (which is used for id attribute, not data-id)\n\t\t\t\t\tconst dataId = String( element.id );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\tdataId,\n\t\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_icons","import_ui","import_i18n","React","import_react","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_ui","import_i18n","React","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","listenTo"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { DEFAULT_INTERACTION, InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( DEFAULT_INTERACTION );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: DEFAULT_INTERACTION,\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\nexport const DEFAULT_INTERACTION = 'load-fade-in--300-0';\n\nconst getDefaultInteractionDetails = () => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = DEFAULT_INTERACTION.split( DELIMITER );\n\n\treturn {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t};\n};\n\nconst buildInteractionDetails = ( interaction: string ) => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\tconst defaultInteractionDetails = getDefaultInteractionDetails();\n\n\treturn {\n\t\ttrigger: trigger || defaultInteractionDetails.trigger,\n\t\teffect: effect || defaultInteractionDetails.effect,\n\t\ttype: type || defaultInteractionDetails.type,\n\t\tdirection: direction || defaultInteractionDetails.direction,\n\t\tduration: duration || defaultInteractionDetails.duration,\n\t\tdelay: delay || defaultInteractionDetails.delay,\n\t};\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst interactionDetails = React.useMemo( () => {\n\t\treturn buildInteractionDetails( interaction );\n\t}, [ interaction ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tif ( value === null ) {\n\t\t\tvalue = getDefaultInteractionDetails()[ key ];\n\t\t}\n\t\tconst newInteractionDetails = { ...interactionDetails, [ key ]: value };\n\t\tonChange( Object.values( newInteractionDetails ).join( DELIMITER ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Direction', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Type', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\treturn elements\n\t\t\t\t.filter( ( element ) => {\n\t\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\t\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if interactions array has items or string is not empty\n\t\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} )\n\t\t\t\t.map( ( element ) => {\n\t\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\t\t// data-id in template is always set to element.id (from $this->get_id())\n\t\t\t\t\t// So we use element.id, not _cssid (which is used for id attribute, not data-id)\n\t\t\t\t\tconst dataId = String( element.id );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\tdataId,\n\t\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_icons","import_ui","import_i18n","React","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_ui","import_i18n","React","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","listenTo"]}
|
package/dist/index.mjs
CHANGED
|
@@ -26,7 +26,7 @@ var EmptyState = ({ onCreateInteraction }) => {
|
|
|
26
26
|
|
|
27
27
|
// src/components/interactions-tab.tsx
|
|
28
28
|
import * as React11 from "react";
|
|
29
|
-
import { useCallback as useCallback2, useMemo, useState as
|
|
29
|
+
import { useCallback as useCallback2, useMemo as useMemo2, useState as useState3 } from "react";
|
|
30
30
|
import { useElementInteractions as useElementInteractions2 } from "@elementor/editor-elements";
|
|
31
31
|
import { SessionStorageProvider } from "@elementor/session";
|
|
32
32
|
import { Stack as Stack2 } from "@elementor/ui";
|
|
@@ -79,7 +79,7 @@ var PopupStateProvider = ({ children }) => {
|
|
|
79
79
|
|
|
80
80
|
// src/components/interactions-list.tsx
|
|
81
81
|
import * as React10 from "react";
|
|
82
|
-
import { useEffect
|
|
82
|
+
import { useEffect, useState as useState2 } from "react";
|
|
83
83
|
import { Repeater } from "@elementor/editor-controls";
|
|
84
84
|
import { PlayerPlayIcon } from "@elementor/icons";
|
|
85
85
|
import { IconButton } from "@elementor/ui";
|
|
@@ -102,7 +102,6 @@ function getInteractionsConfig() {
|
|
|
102
102
|
|
|
103
103
|
// src/components/interaction-details.tsx
|
|
104
104
|
import * as React9 from "react";
|
|
105
|
-
import { useEffect, useState as useState2 } from "react";
|
|
106
105
|
import { Divider, Grid as Grid6 } from "@elementor/ui";
|
|
107
106
|
import { __ as __7 } from "@wordpress/i18n";
|
|
108
107
|
|
|
@@ -124,7 +123,8 @@ function Direction({ value, onChange }) {
|
|
|
124
123
|
size: "tiny",
|
|
125
124
|
exclusive: true,
|
|
126
125
|
onChange: (event, newValue) => onChange(newValue),
|
|
127
|
-
value
|
|
126
|
+
value,
|
|
127
|
+
"aria-label": __2("Direction", "elementor")
|
|
128
128
|
},
|
|
129
129
|
availableDirections.map((direction) => {
|
|
130
130
|
return /* @__PURE__ */ React4.createElement(Tooltip, { key: direction.key, title: direction.label, placement: "top" }, /* @__PURE__ */ React4.createElement(ToggleButton, { key: direction.key, value: direction.key }, direction.icon));
|
|
@@ -173,7 +173,8 @@ function EffectType({ value, onChange }) {
|
|
|
173
173
|
size: "tiny",
|
|
174
174
|
exclusive: true,
|
|
175
175
|
onChange: (event, newValue) => onChange(newValue),
|
|
176
|
-
value
|
|
176
|
+
value,
|
|
177
|
+
"aria-label": __4("Type", "elementor")
|
|
177
178
|
},
|
|
178
179
|
availableEffectTypes.map((effectType) => {
|
|
179
180
|
return /* @__PURE__ */ React6.createElement(Tooltip2, { key: effectType.key, title: effectType.label, placement: "top" }, /* @__PURE__ */ React6.createElement(ToggleButton2, { key: effectType.key, value: effectType.key }, effectType.label));
|
|
@@ -240,29 +241,45 @@ function Trigger({ value, onChange }) {
|
|
|
240
241
|
|
|
241
242
|
// src/components/interaction-details.tsx
|
|
242
243
|
var DELIMITER = "-";
|
|
244
|
+
var DEFAULT_INTERACTION = "load-fade-in--300-0";
|
|
245
|
+
var getDefaultInteractionDetails = () => {
|
|
246
|
+
const [trigger, effect, type, direction, duration, delay] = DEFAULT_INTERACTION.split(DELIMITER);
|
|
247
|
+
return {
|
|
248
|
+
trigger,
|
|
249
|
+
effect,
|
|
250
|
+
type,
|
|
251
|
+
direction,
|
|
252
|
+
duration,
|
|
253
|
+
delay
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
var buildInteractionDetails = (interaction) => {
|
|
257
|
+
const [trigger, effect, type, direction, duration, delay] = interaction.split(DELIMITER);
|
|
258
|
+
const defaultInteractionDetails = getDefaultInteractionDetails();
|
|
259
|
+
return {
|
|
260
|
+
trigger: trigger || defaultInteractionDetails.trigger,
|
|
261
|
+
effect: effect || defaultInteractionDetails.effect,
|
|
262
|
+
type: type || defaultInteractionDetails.type,
|
|
263
|
+
direction: direction || defaultInteractionDetails.direction,
|
|
264
|
+
duration: duration || defaultInteractionDetails.duration,
|
|
265
|
+
delay: delay || defaultInteractionDetails.delay
|
|
266
|
+
};
|
|
267
|
+
};
|
|
243
268
|
var InteractionDetails = ({ interaction, onChange }) => {
|
|
244
|
-
const
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
trigger: trigger || "load",
|
|
248
|
-
effect: effect || "fade",
|
|
249
|
-
type: type || "in",
|
|
250
|
-
direction: direction || "",
|
|
251
|
-
duration: duration || "300",
|
|
252
|
-
delay: delay || "0"
|
|
253
|
-
};
|
|
254
|
-
});
|
|
255
|
-
useEffect(() => {
|
|
256
|
-
const newValue = Object.values(interactionDetails).join(DELIMITER);
|
|
257
|
-
onChange(newValue);
|
|
258
|
-
}, [interactionDetails, onChange]);
|
|
269
|
+
const interactionDetails = React9.useMemo(() => {
|
|
270
|
+
return buildInteractionDetails(interaction);
|
|
271
|
+
}, [interaction]);
|
|
259
272
|
const handleChange = (key, value) => {
|
|
260
|
-
|
|
273
|
+
if (value === null) {
|
|
274
|
+
value = getDefaultInteractionDetails()[key];
|
|
275
|
+
}
|
|
276
|
+
const newInteractionDetails = { ...interactionDetails, [key]: value };
|
|
277
|
+
onChange(Object.values(newInteractionDetails).join(DELIMITER));
|
|
261
278
|
};
|
|
262
279
|
return /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(Grid6, { container: true, spacing: 2, sx: { p: 1.5 } }, /* @__PURE__ */ React9.createElement(Trigger, { value: interactionDetails.trigger, onChange: (v) => handleChange("trigger", v) })), /* @__PURE__ */ React9.createElement(Divider, { sx: { mx: 1.5 } }), /* @__PURE__ */ React9.createElement(Grid6, { container: true, spacing: 2, sx: { p: 1.5 } }, /* @__PURE__ */ React9.createElement(Effect, { value: interactionDetails.effect, onChange: (v) => handleChange("effect", v) }), /* @__PURE__ */ React9.createElement(EffectType, { value: interactionDetails.type, onChange: (v) => handleChange("type", v) }), /* @__PURE__ */ React9.createElement(
|
|
263
280
|
Direction,
|
|
264
281
|
{
|
|
265
|
-
value: interactionDetails.direction
|
|
282
|
+
value: interactionDetails.direction,
|
|
266
283
|
onChange: (v) => handleChange("direction", v)
|
|
267
284
|
}
|
|
268
285
|
), /* @__PURE__ */ React9.createElement(
|
|
@@ -285,11 +302,11 @@ var InteractionDetails = ({ interaction, onChange }) => {
|
|
|
285
302
|
// src/components/interactions-list.tsx
|
|
286
303
|
function InteractionsList(props) {
|
|
287
304
|
const { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;
|
|
288
|
-
const [interactionId, setInteractionId] =
|
|
305
|
+
const [interactionId, setInteractionId] = useState2(selectedInteraction);
|
|
289
306
|
if (triggerCreateOnShowEmpty && !interactionId) {
|
|
290
|
-
setInteractionId(
|
|
307
|
+
setInteractionId(DEFAULT_INTERACTION);
|
|
291
308
|
}
|
|
292
|
-
|
|
309
|
+
useEffect(() => {
|
|
293
310
|
if (interactionId !== selectedInteraction) {
|
|
294
311
|
onSelectInteraction(interactionId);
|
|
295
312
|
}
|
|
@@ -318,7 +335,7 @@ function InteractionsList(props) {
|
|
|
318
335
|
isSortable: false,
|
|
319
336
|
disableAddItemButton: !!interactionId,
|
|
320
337
|
itemSettings: {
|
|
321
|
-
initialValues:
|
|
338
|
+
initialValues: DEFAULT_INTERACTION,
|
|
322
339
|
Label: ({ value }) => displayLabel(value),
|
|
323
340
|
Icon: () => null,
|
|
324
341
|
Content: ({ value }) => /* @__PURE__ */ React10.createElement(
|
|
@@ -344,8 +361,8 @@ var InteractionsTab = ({ elementId }) => {
|
|
|
344
361
|
};
|
|
345
362
|
function InteractionsTabContent({ elementId }) {
|
|
346
363
|
const existingInteractions = useElementInteractions2(elementId);
|
|
347
|
-
const [firstInteraction, setFirstInteraction] =
|
|
348
|
-
const [showInteractions, setShowInteractions] =
|
|
364
|
+
const [firstInteraction, setFirstInteraction] = useState3(false);
|
|
365
|
+
const [showInteractions, setShowInteractions] = useState3(() => {
|
|
349
366
|
const parsed = JSON.parse(existingInteractions || "{}");
|
|
350
367
|
if (parsed && parsed?.items?.length > 0) {
|
|
351
368
|
return true;
|
|
@@ -385,7 +402,7 @@ function InteractionsContent({ firstInteraction }) {
|
|
|
385
402
|
},
|
|
386
403
|
[setInteractions]
|
|
387
404
|
);
|
|
388
|
-
const selectedInteraction =
|
|
405
|
+
const selectedInteraction = useMemo2(() => {
|
|
389
406
|
try {
|
|
390
407
|
const parsed = JSON.parse(interactions || "{}");
|
|
391
408
|
if (parsed && parsed?.items) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( 'load-fade-in-left-100-0' );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: interactionId ?? 'load-fade-in-left-100-0',\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst [ interactionDetails, setInteractionDetails ] = useState( () => {\n\t\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\n\t\treturn {\n\t\t\ttrigger: trigger || 'load',\n\t\t\teffect: effect || 'fade',\n\t\t\ttype: type || 'in',\n\t\t\tdirection: direction || '',\n\t\t\tduration: duration || '300',\n\t\t\tdelay: delay || '0',\n\t\t};\n\t} );\n\n\tuseEffect( () => {\n\t\tconst newValue = Object.values( interactionDetails ).join( DELIMITER );\n\t\tonChange( newValue );\n\t}, [ interactionDetails, onChange ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tsetInteractionDetails( ( prev ) => ( { ...prev, [ key ]: value } ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction ?? '' }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\treturn elements\n\t\t\t\t.filter( ( element ) => {\n\t\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\t\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if interactions array has items or string is not empty\n\t\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} )\n\t\t\t\t.map( ( element ) => {\n\t\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\t\t// data-id in template is always set to element.id (from $this->get_id())\n\t\t\t\t\t// So we use element.id, not _cssid (which is used for id attribute, not data-id)\n\t\t\t\t\tconst dataId = String( element.id );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\tdataId,\n\t\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","useCallback","useState","useElementInteractions","Stack","React","React","createContext","useContext","React","useEffect","useState","__","React","useState","Grid","__","React","Typography","__","React","Grid","Typography","__","React","Grid","ToggleButton","ToggleButtonGroup","Tooltip","Typography","__","React","MenuListItem","Grid","Select","Typography","__","React","MenuListItem","Grid","Select","Typography","__","useState","Grid","__","useState","useEffect","__","useElementInteractions","useState","useCallback","Stack"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { DEFAULT_INTERACTION, InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( DEFAULT_INTERACTION );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: DEFAULT_INTERACTION,\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\nexport const DEFAULT_INTERACTION = 'load-fade-in--300-0';\n\nconst getDefaultInteractionDetails = () => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = DEFAULT_INTERACTION.split( DELIMITER );\n\n\treturn {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t};\n};\n\nconst buildInteractionDetails = ( interaction: string ) => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\tconst defaultInteractionDetails = getDefaultInteractionDetails();\n\n\treturn {\n\t\ttrigger: trigger || defaultInteractionDetails.trigger,\n\t\teffect: effect || defaultInteractionDetails.effect,\n\t\ttype: type || defaultInteractionDetails.type,\n\t\tdirection: direction || defaultInteractionDetails.direction,\n\t\tduration: duration || defaultInteractionDetails.duration,\n\t\tdelay: delay || defaultInteractionDetails.delay,\n\t};\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst interactionDetails = React.useMemo( () => {\n\t\treturn buildInteractionDetails( interaction );\n\t}, [ interaction ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tif ( value === null ) {\n\t\t\tvalue = getDefaultInteractionDetails()[ key ];\n\t\t}\n\t\tconst newInteractionDetails = { ...interactionDetails, [ key ]: value };\n\t\tonChange( Object.values( newInteractionDetails ).join( DELIMITER ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Direction', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Type', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\treturn elements\n\t\t\t\t.filter( ( element ) => {\n\t\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\t\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if interactions array has items or string is not empty\n\t\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} )\n\t\t\t\t.map( ( element ) => {\n\t\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\t\t// data-id in template is always set to element.id (from $this->get_id())\n\t\t\t\t\t// So we use element.id, not _cssid (which is used for id attribute, not data-id)\n\t\t\t\t\tconst dataId = String( element.id );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\tdataId,\n\t\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","useCallback","useMemo","useState","useElementInteractions","Stack","React","React","createContext","useContext","React","useState","__","React","Grid","__","React","Typography","__","React","Grid","Typography","__","React","Grid","ToggleButton","ToggleButtonGroup","Tooltip","Typography","__","React","MenuListItem","Grid","Select","Typography","__","React","MenuListItem","Grid","Select","Typography","__","Grid","__","useState","__","useElementInteractions","useState","useCallback","useMemo","Stack"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-interactions",
|
|
3
|
-
"version": "3.33.0-
|
|
3
|
+
"version": "3.33.0-260",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,13 +39,13 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/editor-controls": "3.33.0-
|
|
43
|
-
"@elementor/editor-elements": "3.33.0-
|
|
44
|
-
"@elementor/editor-ui": "3.33.0-
|
|
42
|
+
"@elementor/editor-controls": "3.33.0-260",
|
|
43
|
+
"@elementor/editor-elements": "3.33.0-260",
|
|
44
|
+
"@elementor/editor-ui": "3.33.0-260",
|
|
45
45
|
"@elementor/icons": "^1.61.0",
|
|
46
|
-
"@elementor/editor-v1-adapters": "3.33.0-
|
|
47
|
-
"@elementor/utils": "3.33.0-
|
|
48
|
-
"@elementor/session": "3.33.0-
|
|
46
|
+
"@elementor/editor-v1-adapters": "3.33.0-260",
|
|
47
|
+
"@elementor/utils": "3.33.0-260",
|
|
48
|
+
"@elementor/session": "3.33.0-260",
|
|
49
49
|
"@elementor/ui": "1.36.17",
|
|
50
50
|
"@wordpress/i18n": "^5.13.0"
|
|
51
51
|
},
|
|
@@ -26,6 +26,7 @@ export function Direction( { value, onChange }: FieldProps ) {
|
|
|
26
26
|
exclusive
|
|
27
27
|
onChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }
|
|
28
28
|
value={ value }
|
|
29
|
+
aria-label={ __( 'Direction', 'elementor' ) }
|
|
29
30
|
>
|
|
30
31
|
{ availableDirections.map( ( direction ) => {
|
|
31
32
|
return (
|
|
@@ -23,6 +23,7 @@ export function EffectType( { value, onChange }: FieldProps ) {
|
|
|
23
23
|
exclusive
|
|
24
24
|
onChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }
|
|
25
25
|
value={ value }
|
|
26
|
+
aria-label={ __( 'Type', 'elementor' ) }
|
|
26
27
|
>
|
|
27
28
|
{ availableEffectTypes.map( ( effectType ) => {
|
|
28
29
|
return (
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
3
2
|
import { Divider, Grid } from '@elementor/ui';
|
|
4
3
|
import { __ } from '@wordpress/i18n';
|
|
5
4
|
|
|
@@ -15,31 +14,49 @@ type InteractionDetailsProps = {
|
|
|
15
14
|
interaction: string;
|
|
16
15
|
onChange: ( interaction: string ) => void;
|
|
17
16
|
};
|
|
17
|
+
export const DEFAULT_INTERACTION = 'load-fade-in--300-0';
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
const [
|
|
21
|
-
|
|
19
|
+
const getDefaultInteractionDetails = () => {
|
|
20
|
+
const [ trigger, effect, type, direction, duration, delay ] = DEFAULT_INTERACTION.split( DELIMITER );
|
|
21
|
+
|
|
22
|
+
return {
|
|
23
|
+
trigger,
|
|
24
|
+
effect,
|
|
25
|
+
type,
|
|
26
|
+
direction,
|
|
27
|
+
duration,
|
|
28
|
+
delay,
|
|
29
|
+
};
|
|
30
|
+
};
|
|
22
31
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
type: type || 'in',
|
|
27
|
-
direction: direction || '',
|
|
28
|
-
duration: duration || '300',
|
|
29
|
-
delay: delay || '0',
|
|
30
|
-
};
|
|
31
|
-
} );
|
|
32
|
+
const buildInteractionDetails = ( interaction: string ) => {
|
|
33
|
+
const [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );
|
|
34
|
+
const defaultInteractionDetails = getDefaultInteractionDetails();
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
return {
|
|
37
|
+
trigger: trigger || defaultInteractionDetails.trigger,
|
|
38
|
+
effect: effect || defaultInteractionDetails.effect,
|
|
39
|
+
type: type || defaultInteractionDetails.type,
|
|
40
|
+
direction: direction || defaultInteractionDetails.direction,
|
|
41
|
+
duration: duration || defaultInteractionDetails.duration,
|
|
42
|
+
delay: delay || defaultInteractionDetails.delay,
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {
|
|
47
|
+
const interactionDetails = React.useMemo( () => {
|
|
48
|
+
return buildInteractionDetails( interaction );
|
|
49
|
+
}, [ interaction ] );
|
|
37
50
|
|
|
38
51
|
const handleChange = < K extends keyof typeof interactionDetails >(
|
|
39
52
|
key: K,
|
|
40
53
|
value: ( typeof interactionDetails )[ K ]
|
|
41
54
|
) => {
|
|
42
|
-
|
|
55
|
+
if ( value === null ) {
|
|
56
|
+
value = getDefaultInteractionDetails()[ key ];
|
|
57
|
+
}
|
|
58
|
+
const newInteractionDetails = { ...interactionDetails, [ key ]: value };
|
|
59
|
+
onChange( Object.values( newInteractionDetails ).join( DELIMITER ) );
|
|
43
60
|
};
|
|
44
61
|
|
|
45
62
|
return (
|
|
@@ -52,7 +69,7 @@ export const InteractionDetails = ( { interaction, onChange }: InteractionDetail
|
|
|
52
69
|
<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />
|
|
53
70
|
<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />
|
|
54
71
|
<Direction
|
|
55
|
-
value={ interactionDetails.direction
|
|
72
|
+
value={ interactionDetails.direction }
|
|
56
73
|
onChange={ ( v ) => handleChange( 'direction', v ) }
|
|
57
74
|
/>
|
|
58
75
|
<TimeFrameIndicator
|
|
@@ -6,7 +6,7 @@ import { IconButton } from '@elementor/ui';
|
|
|
6
6
|
import { __ } from '@wordpress/i18n';
|
|
7
7
|
|
|
8
8
|
import { getInteractionsConfig } from '../utils/get-interactions-config';
|
|
9
|
-
import { InteractionDetails } from './interaction-details';
|
|
9
|
+
import { DEFAULT_INTERACTION, InteractionDetails } from './interaction-details';
|
|
10
10
|
|
|
11
11
|
export type InteractionListProps = {
|
|
12
12
|
onSelectInteraction: ( interaction: string | null ) => void;
|
|
@@ -21,7 +21,7 @@ export function InteractionsList( props: InteractionListProps ) {
|
|
|
21
21
|
const [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );
|
|
22
22
|
|
|
23
23
|
if ( triggerCreateOnShowEmpty && ! interactionId ) {
|
|
24
|
-
setInteractionId(
|
|
24
|
+
setInteractionId( DEFAULT_INTERACTION );
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
useEffect( () => {
|
|
@@ -56,7 +56,7 @@ export function InteractionsList( props: InteractionListProps ) {
|
|
|
56
56
|
isSortable={ false }
|
|
57
57
|
disableAddItemButton={ !! interactionId }
|
|
58
58
|
itemSettings={ {
|
|
59
|
-
initialValues:
|
|
59
|
+
initialValues: DEFAULT_INTERACTION,
|
|
60
60
|
Label: ( { value } ) => displayLabel( value ),
|
|
61
61
|
Icon: () => null,
|
|
62
62
|
Content: ( { value } ) => (
|