@elementor/editor-interactions 4.0.0-533 → 4.0.0-535

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1010,20 +1010,43 @@ function Easing({}) {
1010
1010
  }));
1011
1011
  }
1012
1012
 
1013
- // src/components/controls/trigger.tsx
1013
+ // src/components/controls/replay.tsx
1014
1014
  var React15 = __toESM(require("react"));
1015
+ var import_editor_controls7 = require("@elementor/editor-controls");
1016
+ var import_icons4 = require("@elementor/icons");
1017
+ var import_i18n10 = require("@wordpress/i18n");
1018
+ function Replay({ onChange }) {
1019
+ const options = [
1020
+ {
1021
+ value: false,
1022
+ disabled: false,
1023
+ label: (0, import_i18n10.__)("No", "elementor"),
1024
+ renderContent: ({ size }) => /* @__PURE__ */ React15.createElement(import_icons4.MinusIcon, { fontSize: size })
1025
+ },
1026
+ {
1027
+ value: true,
1028
+ disabled: true,
1029
+ label: (0, import_i18n10.__)("Yes", "elementor"),
1030
+ renderContent: ({ size }) => /* @__PURE__ */ React15.createElement(import_icons4.CheckIcon, { fontSize: size })
1031
+ }
1032
+ ];
1033
+ return /* @__PURE__ */ React15.createElement(import_editor_controls7.ToggleButtonGroupUi, { items: options, exclusive: true, onChange, value: false });
1034
+ }
1035
+
1036
+ // src/components/controls/trigger.tsx
1037
+ var React16 = __toESM(require("react"));
1015
1038
  var import_editor_ui3 = require("@elementor/editor-ui");
1016
1039
  var import_ui9 = require("@elementor/ui");
1017
- var import_i18n10 = require("@wordpress/i18n");
1040
+ var import_i18n11 = require("@wordpress/i18n");
1018
1041
  function Trigger({ value, onChange }) {
1019
1042
  const availableTriggers = Object.entries({
1020
- load: (0, import_i18n10.__)("Page load", "elementor"),
1021
- scrollIn: (0, import_i18n10.__)("Scroll into view", "elementor")
1043
+ load: (0, import_i18n11.__)("Page load", "elementor"),
1044
+ scrollIn: (0, import_i18n11.__)("Scroll into view", "elementor")
1022
1045
  }).map(([key, label]) => ({
1023
1046
  key,
1024
1047
  label
1025
1048
  }));
1026
- return /* @__PURE__ */ React15.createElement(
1049
+ return /* @__PURE__ */ React16.createElement(
1027
1050
  import_ui9.Select,
1028
1051
  {
1029
1052
  fullWidth: true,
@@ -1033,7 +1056,7 @@ function Trigger({ value, onChange }) {
1033
1056
  value
1034
1057
  },
1035
1058
  availableTriggers.map((trigger) => {
1036
- return /* @__PURE__ */ React15.createElement(import_editor_ui3.MenuListItem, { key: trigger.key, value: trigger.key }, trigger.label);
1059
+ return /* @__PURE__ */ React16.createElement(import_editor_ui3.MenuListItem, { key: trigger.key, value: trigger.key }, trigger.label);
1037
1060
  })
1038
1061
  );
1039
1062
  }
@@ -1091,6 +1114,11 @@ function init() {
1091
1114
  component: Easing,
1092
1115
  options: ["easeIn"]
1093
1116
  });
1117
+ registerInteractionsControl({
1118
+ type: "replay",
1119
+ component: Replay,
1120
+ options: ["true", "false"]
1121
+ });
1094
1122
  } catch (error) {
1095
1123
  throw error;
1096
1124
  }
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/contexts/interactions-item-context.tsx","../src/utils/temp-id-utils.ts","../src/utils/prop-value-utils.ts","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../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/interaction-settings.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/components/controls/easing.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.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';\nexport { registerInteractionsControl } from './interactions-controls-registry';\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 page load 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, 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 type { ElementInteractions } from '../types';\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 ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\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\tfirstInteractionState[ 1 ]( 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( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\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={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ 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, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( interactionId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tconst normalizedValue = value && value.items?.length === 0 ? undefined : value;\n\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: normalizedValue,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( interactionId: string ) => {\n\t\tplayElementInteractions( elementId, interactionId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\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 { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { InteractionsListItem } from './interactions-list-item';\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( interactionId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst hasInitializedRef = useRef( false );\n\n\tconst handleUpdateInteractions = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tonSelectInteractions( newInteractions );\n\t\t},\n\t\t[ onSelectInteractions ]\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttriggerCreateOnShowEmpty &&\n\t\t\t! hasInitializedRef.current &&\n\t\t\t( ! interactions.items || interactions.items?.length === 0 )\n\t\t) {\n\t\t\thasInitializedRef.current = true;\n\t\t\tconst newState: ElementInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t\t};\n\t\t\thandleUpdateInteractions( newState );\n\t\t}\n\t}, [ triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactions.items?.length ] );\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\tconst handleRepeaterChange = useCallback(\n\t\t( newItems: ElementInteractions[ 'items' ] ) => {\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst handleInteractionChange = useCallback(\n\t\t( index: number, newInteractionValue: InteractionItemValue ) => {\n\t\t\tconst newItems = structuredClone( interactions.items );\n\t\t\tnewItems[ index ] = {\n\t\t\t\t$$type: 'interaction-item',\n\t\t\t\tvalue: newInteractionValue,\n\t\t\t};\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tonInteractionChange: handleInteractionChange,\n\t\t\tonPlayInteraction,\n\t\t} ),\n\t\t[ handleInteractionChange, onPlayInteraction ]\n\t);\n\n\treturn (\n\t\t<InteractionItemContextProvider value={ contextValue }>\n\t\t\t<Repeater\n\t\t\t\topenOnAdd\n\t\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tvalues={ interactions.items }\n\t\t\t\tsetValues={ handleRepeaterChange }\n\t\t\t\tshowDuplicate={ false }\n\t\t\t\tshowToggle={ false }\n\t\t\t\tisSortable={ false }\n\t\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\t\titemSettings={ {\n\t\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\t\tIcon: () => null,\n\t\t\t\t\tContent: InteractionsListItem,\n\t\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( extractString( value.value.interaction_id ) ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t),\n\t\t\t\t} }\n\t\t\t/>\n\t\t</InteractionItemContextProvider>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { InteractionItemValue } from '../types';\n\ntype InteractionItemContextValue = {\n\tonInteractionChange: ( index: number, newInteractionValue: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst InteractionItemContext = createContext< InteractionItemContextValue | null >( null );\n\nexport function InteractionItemContextProvider( {\n\tvalue,\n\tchildren,\n}: { value: InteractionItemContextValue } & React.PropsWithChildren ) {\n\treturn <InteractionItemContext.Provider value={ value }>{ children }</InteractionItemContext.Provider>;\n}\n\nexport function useInteractionItemContext() {\n\tconst context = useContext( InteractionItemContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionItemContext must be used within InteractionItemContextProvider' );\n\t}\n\treturn context;\n}\n","const TEMP_ID_PREFIX = 'temp-';\nconst TEMP_ID_REGEX = /^temp-[a-z0-9]+$/i;\n\nexport function generateTempInteractionId(): string {\n\treturn `${ TEMP_ID_PREFIX }${ Math.random().toString( 36 ).substring( 2, 11 ) }`;\n}\n\nexport function isTempId( id: string | undefined ): boolean {\n\treturn !! id && TEMP_ID_REGEX.test( id );\n}\n","import type {\n\tAnimationPresetPropValue,\n\tBooleanPropValue,\n\tConfigPropValue,\n\tElementInteractions,\n\tExcludedBreakpointsPropValue,\n\tInteractionBreakpointsPropValue,\n\tInteractionItemPropValue,\n\tInteractionItemValue,\n\tNumberPropValue,\n\tStringPropValue,\n\tTimingConfigPropValue,\n} from '../types';\nimport { generateTempInteractionId } from './temp-id-utils';\n\nexport const createString = ( value: string ): StringPropValue => ( {\n\t$$type: 'string',\n\tvalue,\n} );\n\nexport const createNumber = ( value: number ): NumberPropValue => ( {\n\t$$type: 'number',\n\tvalue,\n} );\n\nexport const createTimingConfig = ( duration: number, delay: number ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: createNumber( duration ),\n\t\tdelay: createNumber( delay ),\n\t},\n} );\n\nexport const createBoolean = ( value: boolean ): BooleanPropValue => ( {\n\t$$type: 'boolean',\n\tvalue,\n} );\n\nexport const createConfig = ( {\n\treplay,\n\teasing = 'easeIn',\n\trelativeTo = '',\n\toffsetTop = 0,\n\toffsetBottom = 100,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t\teasing: createString( easing ),\n\t\trelativeTo: createString( relativeTo ),\n\t\toffsetTop: createNumber( offsetTop ),\n\t\toffsetBottom: createNumber( offsetBottom ),\n\t},\n} );\n\nexport const extractBoolean = ( prop: BooleanPropValue | undefined, fallback = false ): boolean => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const createExcludedBreakpoints = ( breakpoints: string[] ): ExcludedBreakpointsPropValue => ( {\n\t$$type: 'excluded-breakpoints',\n\tvalue: breakpoints.map( createString ),\n} );\n\nexport const createInteractionBreakpoints = ( excluded: string[] ): InteractionBreakpointsPropValue => ( {\n\t$$type: 'interaction-breakpoints',\n\tvalue: {\n\t\texcluded: createExcludedBreakpoints( excluded ),\n\t},\n} );\n\nexport const extractExcludedBreakpoints = ( breakpoints: InteractionBreakpointsPropValue | undefined ): string[] => {\n\treturn breakpoints?.value.excluded.value.map( ( bp: StringPropValue ) => bp.value ) ?? [];\n};\n\nexport const createAnimationPreset = ( {\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( {\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n\texcludedBreakpoints,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\tinteractionId?: string;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n\texcludedBreakpoints?: string[];\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( {\n\t\t\teffect,\n\t\t\ttype,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t\t...( excludedBreakpoints &&\n\t\t\texcludedBreakpoints.length > 0 && {\n\t\t\t\tbreakpoints: createInteractionBreakpoints( excludedBreakpoints ),\n\t\t\t} ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 600,\n\t\tdelay: 0,\n\t\treplay: false,\n\t\teasing: 'easeIn',\n\t\tinteractionId: generateTempInteractionId(),\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const extractNumber = ( prop: NumberPropValue | undefined, fallback = 0 ): number => {\n\treturn prop?.value ?? fallback;\n};\n\nconst TRIGGER_LABELS: Record< string, string > = {\n\tload: 'On page load',\n\tscrollIn: 'Scroll into view',\n\tscrollOut: 'Scroll out of view',\n\tscrollOn: 'While scrolling',\n};\n\nconst capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n\nexport const buildDisplayLabel = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\n\tconst triggerLabel = TRIGGER_LABELS[ trigger ] || capitalize( trigger );\n\tconst effectLabel = capitalize( effect );\n\tconst typeLabel = capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { Divider, Tab, TabPanel, Tabs, useTabs } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useInteractionItemContext } from '../contexts/interactions-item-context';\nimport type { InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( { index, value }: { index: number; value: InteractionItemPropValue } ) => {\n\tconst { getTabsProps, getTabProps, getTabPanelProps } = useTabs< InteractionTabValue >( 'details' );\n\n\tconst context = useInteractionItemContext();\n\n\tconst handleChange = useCallback(\n\t\t( newInteractionValue: InteractionItemValue ) => {\n\t\t\tcontext?.onInteractionChange( index, newInteractionValue );\n\t\t},\n\t\t[ context, index ]\n\t);\n\n\tconst handlePlayInteraction = useCallback(\n\t\t( interactionId: string ) => {\n\t\t\tcontext?.onPlayInteraction( interactionId );\n\t\t},\n\t\t[ context ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs\n\t\t\t\tsize=\"small\"\n\t\t\t\tvariant=\"fullWidth\"\n\t\t\t\taria-label={ __( 'Interaction', 'elementor' ) }\n\t\t\t\t{ ...getTabsProps() }\n\t\t\t>\n\t\t\t\t<Tab label={ __( 'Details', 'elementor' ) } { ...getTabProps( 'details' ) } />\n\t\t\t\t<Tab label={ __( 'Settings', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t</Tabs>\n\n\t\t\t<Divider />\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'details' ) }>\n\t\t\t\t<InteractionDetails\n\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tonPlayInteraction={ handlePlayInteraction }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'settings' ) }>\n\t\t\t\t<InteractionSettings interaction={ value.value } onChange={ handleChange } />\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type PropsWithChildren, useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport type { InteractionItemValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractNumber,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 600,\n\tdelay: 0,\n\treplay: false,\n\teasing: 'easeIn',\n\trelativeTo: 'viewport',\n\toffsetTop: 15,\n\toffsetBottom: 85,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn' ];\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\toffsetTop: number;\n\toffsetBottom: number;\n};\n\ntype ControlVisibilityConfig = {\n\t[ key: string ]: ( values: InteractionValues ) => boolean;\n};\n\nconst controlVisibilityConfig: ControlVisibilityConfig = {\n\treplay: ( values ) => ! TRIGGERS_WITHOUT_REPLAY.includes( values.trigger ),\n\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\toffsetTop: ( values ) => values.trigger === 'scrollOn',\n\toffsetBottom: ( values ) => values.trigger === 'scrollOn',\n\n\tduration: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n\tdelay: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n};\n\nfunction useControlComponent( controlName: InteractionsControlType, isVisible: boolean = true ) {\n\treturn useMemo( () => {\n\t\tif ( ! isVisible ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( controlName )?.component ?? null;\n\t}, [ controlName, isVisible ] );\n}\n\nexport const InteractionDetails = ( { interaction, onChange, onPlayInteraction }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = extractNumber( interaction.animation.value.timing_config.value.duration, DEFAULT_VALUES.duration );\n\tconst delay = extractNumber( interaction.animation.value.timing_config.value.delay, DEFAULT_VALUES.delay );\n\tconst replay = extractBoolean( interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay );\n\tconst easing = extractString( interaction.animation.value.config?.value.easing, DEFAULT_VALUES.easing );\n\tconst relativeTo = extractString( interaction.animation.value.config?.value.relativeTo, DEFAULT_VALUES.relativeTo );\n\tconst offsetTop = extractNumber( interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop );\n\tconst offsetBottom = extractNumber(\n\t\tinteraction.animation.value.config?.value.offsetBottom,\n\t\tDEFAULT_VALUES.offsetBottom\n\t);\n\n\tconst interactionValues = {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t\teasing,\n\t\treplay,\n\t\trelativeTo,\n\t\toffsetTop,\n\t\toffsetBottom,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst ReplayControl = useControlComponent( 'replay', controlVisibilityConfig.replay( interactionValues ) );\n\tconst RelativeToControl = useControlComponent(\n\t\t'relativeTo',\n\t\tcontrolVisibilityConfig.relativeTo( interactionValues )\n\t);\n\tconst OffsetTopControl = useControlComponent( 'offsetTop', controlVisibilityConfig.offsetTop( interactionValues ) );\n\tconst OffsetBottomControl = useControlComponent(\n\t\t'offsetBottom',\n\t\tcontrolVisibilityConfig.offsetBottom( interactionValues )\n\t);\n\n\tconst EasingControl = useControlComponent( 'easing' );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: number;\n\t\t\tdelay: number;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\toffsetTop: number;\n\t\t\toffsetBottom: number;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\n\t\tconst updatedInteraction = {\n\t\t\t...interaction,\n\t\t\tinteraction_id: interaction.interaction_id,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: updates.replay ?? replay,\n\t\t\t\teasing: updates.easing ?? easing,\n\t\t\t\trelativeTo: updates.relativeTo ?? relativeTo,\n\t\t\t\toffsetTop: updates.offsetTop ?? offsetTop,\n\t\t\t\toffsetBottom: updates.offsetBottom ?? offsetBottom,\n\t\t\t} ),\n\t\t};\n\n\t\tonChange( updatedInteraction );\n\n\t\tconst interactionId = extractString( updatedInteraction.interaction_id );\n\n\t\tsetTimeout( () => {\n\t\t\tonPlayInteraction( interactionId );\n\t\t}, 0 );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t{ TriggerControl && (\n\t\t\t\t\t<Field label={ __( 'Trigger', 'elementor' ) }>\n\t\t\t\t\t\t<TriggerControl value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<Field label={ __( 'Replay', 'elementor' ) }>\n\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t<Divider />\n\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t<Direction\n\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\tinteractionType={ type }\n\t\t\t\t\t/>\n\t\t\t\t</Field>\n\n\t\t\t\t{ controlVisibilityConfig.duration( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Duration', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.duration }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ controlVisibilityConfig.delay( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Delay', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( delay ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { delay: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.delay }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t{ controlVisibilityConfig.relativeTo( interactionValues ) && RelativeToControl && (\n\t\t\t\t<>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t\t<Field label={ __( 'Relative To', 'elementor' ) }>\n\t\t\t\t\t\t\t<RelativeToControl\n\t\t\t\t\t\t\t\tvalue={ relativeTo }\n\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { relativeTo: v } ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t{ OffsetTopControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Top', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetTopControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetTop ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { offsetTop: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ OffsetBottomControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Bottom', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetBottomControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetBottom ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) =>\n\t\t\t\t\t\t\t\t\t\tupdateInteraction( { offsetBottom: parseInt( v, 10 ) } )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Divider />\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ EasingControl && (\n\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t<Field label={ __( 'Easing', 'elementor' ) }>\n\t\t\t\t\t\t<EasingControl\n\t\t\t\t\t\t\tvalue={ easing }\n\t\t\t\t\t\t\tonChange={ ( v ) => {\n\t\t\t\t\t\t\t\tupdateInteraction( { easing: v } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t</PopoverContent>\n\t);\n};\n\ntype FieldProps = {\n\tlabel: string;\n} & PropsWithChildren;\n\nfunction Field( { label, children }: FieldProps ) {\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\toffsetTop: FieldProps;\n\toffsetBottom: FieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\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<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t>\n\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { UnstableSizeField } from '@elementor/editor-controls';\nimport { sizePropTypeUtil, type SizePropValue } from '@elementor/editor-props';\n\nimport { type FieldProps } from '../../types';\n\nconst DEFAULT_UNIT = 'ms';\n\nexport function TimeFrameIndicator( { value, onChange, defaultValue }: FieldProps & { defaultValue: number } ) {\n\tconst sizeValue = toSizeValue( value ?? defaultValue );\n\n\tconst setValue = useCallback(\n\t\t( size: number ) => {\n\t\t\tonChange( String( size ) );\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\tconst handleChange = ( newValue: SizePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue.size as number );\n\t};\n\n\tconst handleBlur = () => {\n\t\tif ( ! sizeValue.size ) {\n\t\t\tsetValue( defaultValue );\n\t\t}\n\t};\n\n\treturn (\n\t\t<UnstableSizeField\n\t\t\tunits={ [ DEFAULT_UNIT ] }\n\t\t\tvalue={ sizeValue }\n\t\t\tonChange={ handleChange }\n\t\t\tonBlur={ handleBlur }\n\t\t\tInputProps={ {\n\t\t\t\tinputProps: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nconst toSizeValue = ( value: string ): SizePropValue[ 'value' ] => {\n\treturn sizePropTypeUtil.create( {\n\t\tsize: Number( value ),\n\t\tunit: DEFAULT_UNIT,\n\t} ).value;\n};\n","import * as React from 'react';\nimport { type SyntheticEvent, useCallback, useMemo, useState } from 'react';\nimport { ControlFormLabel, PopoverContent } from '@elementor/editor-controls';\nimport { useBreakpoints } from '@elementor/editor-responsive';\nimport { Autocomplete, Chip, Grid, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { InteractionItemValue } from '../types';\nimport { createInteractionBreakpoints, extractExcludedBreakpoints } from '../utils/prop-value-utils';\n\ntype BreakpointOption = {\n\tlabel: string;\n\tvalue: string;\n};\n\ntype InteractionSettingsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n};\n\nconst SIZE = 'tiny';\n\nexport const InteractionSettings = ( { interaction, onChange }: InteractionSettingsProps ) => {\n\tconst breakpoints = useBreakpoints();\n\n\tconst availableBreakpoints = useMemo(\n\t\t() => breakpoints.map( ( breakpoint ) => ( { label: breakpoint.label, value: String( breakpoint.id ) } ) ),\n\t\t[ breakpoints ]\n\t);\n\n\tconst [ selectedBreakpoints, setSelectedBreakpoints ] = useState< BreakpointOption[] >( () => {\n\t\tconst excluded = extractExcludedBreakpoints( interaction.breakpoints ).filter( ( excludedBreakpoint ) => {\n\t\t\treturn availableBreakpoints.some( ( { value } ) => value === excludedBreakpoint );\n\t\t} );\n\n\t\treturn availableBreakpoints.filter( ( { value } ) => {\n\t\t\treturn ! excluded.includes( value );\n\t\t} );\n\t} );\n\n\tconst handleBreakpointChange = useCallback(\n\t\t( _: SyntheticEvent, newValue: BreakpointOption[] ) => {\n\t\t\tsetSelectedBreakpoints( newValue );\n\n\t\t\tconst selectedValues = newValue.map( ( option ) => option.value );\n\n\t\t\tconst newExcluded = availableBreakpoints\n\t\t\t\t.filter( ( breakpoint ) => ! selectedValues.includes( breakpoint.value ) )\n\t\t\t\t.map( ( breakpoint ) => breakpoint.value );\n\n\t\t\tconst updatedInteraction: InteractionItemValue = {\n\t\t\t\t...interaction,\n\t\t\t\t...( newExcluded.length > 0 && {\n\t\t\t\t\tbreakpoints: createInteractionBreakpoints( newExcluded ),\n\t\t\t\t} ),\n\t\t\t};\n\n\t\t\tif ( newExcluded.length === 0 ) {\n\t\t\t\tdelete updatedInteraction.breakpoints;\n\t\t\t}\n\n\t\t\tonChange( updatedInteraction );\n\t\t},\n\t\t[ interaction, availableBreakpoints, onChange ]\n\t);\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Stack direction=\"column\" gap={ 1 }>\n\t\t\t\t\t\t<ControlFormLabel sx={ { width: '100%' } }>\n\t\t\t\t\t\t\t{ __( 'Trigger on', 'elementor' ) }\n\t\t\t\t\t\t</ControlFormLabel>\n\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tvalue={ selectedBreakpoints }\n\t\t\t\t\t\t\tonChange={ handleBreakpointChange }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\toptions={ availableBreakpoints }\n\t\t\t\t\t\t\tisOptionEqualToValue={ ( option, value ) => option.value === value.value }\n\t\t\t\t\t\t\trenderInput={ ( params ) => <TextField { ...params } /> }\n\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\tvalues.map( ( option, index ) => {\n\t\t\t\t\t\t\t\t\tconst { key, ...chipProps } = getTagProps( { index } );\n\t\t\t\t\t\t\t\t\treturn <Chip key={ key } size={ SIZE } label={ option.label } { ...chipProps } />;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</PopoverContent>\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 { 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\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn interactions?.items?.length > 0;\n\t\t\t} );\n\n\t\t\treturn filtered.map( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId: element.id,\n\t\t\t\t\tinteractions: interactions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nconst EASING_OPTIONS = {\n\teaseIn: __( 'Ease In', 'elementor' ),\n\teaseInOut: __( 'Ease In Out', 'elementor' ),\n\teaseOut: __( 'Ease Out', 'elementor' ),\n\tbackIn: __( 'Back In', 'elementor' ),\n\tbackInOut: __( 'Back In Out', 'elementor' ),\n\tbackOut: __( 'Back Out', 'elementor' ),\n\tlinear: __( 'Linear', 'elementor' ),\n};\n\nconst DEFAULT_EASING = 'easeIn';\n\nexport function Easing( {}: FieldProps ) {\n\tconst availableOptions = Object.entries( EASING_OPTIONS ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select value={ DEFAULT_EASING } onChange={ () => {} } fullWidth displayEmpty size=\"tiny\">\n\t\t\t{ availableOptions.map( ( option ) => {\n\t\t\t\tconst isDisabled = DEFAULT_EASING !== option.key;\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ option.key } value={ option.key } disabled={ isDisabled }>\n\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } 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} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\tvalue={ value }\n\t\t>\n\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value ) {\n\t\t\tinteraction.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { Easing } from './components/controls/easing';\nimport { Trigger } from './components/controls/trigger';\nimport { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { registerInteractionsControl } from './interactions-controls-registry';\nimport { 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\tinitCleanInteractionIdsOnDuplicate();\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'trigger',\n\t\t\tcomponent: Trigger,\n\t\t\toptions: [ 'load', 'scrollIn' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'easing',\n\t\t\tcomponent: Easing,\n\t\t\toptions: [ 'easeIn' ],\n\t\t} );\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_editor_controls","import_icons","import_ui","import_i18n","React","import_react","React","import_react","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_icons","import_i18n","React","import_ui","import_i18n","React","import_editor_controls","import_i18n","React","import_react","import_editor_controls","React","import_react","import_editor_controls","import_ui","import_i18n","import_editor_elements","listenTo","React","import_editor_ui","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","import_editor_v1_adapters"]}
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/contexts/interactions-item-context.tsx","../src/utils/temp-id-utils.ts","../src/utils/prop-value-utils.ts","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../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/interaction-settings.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/components/controls/easing.tsx","../src/components/controls/replay.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.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';\nexport { registerInteractionsControl } from './interactions-controls-registry';\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 page load 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, 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 type { ElementInteractions } from '../types';\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 ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\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\tfirstInteractionState[ 1 ]( 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( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\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={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ 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, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( interactionId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tconst normalizedValue = value && value.items?.length === 0 ? undefined : value;\n\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: normalizedValue,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( interactionId: string ) => {\n\t\tplayElementInteractions( elementId, interactionId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\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 { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { InteractionsListItem } from './interactions-list-item';\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( interactionId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst hasInitializedRef = useRef( false );\n\n\tconst handleUpdateInteractions = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tonSelectInteractions( newInteractions );\n\t\t},\n\t\t[ onSelectInteractions ]\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttriggerCreateOnShowEmpty &&\n\t\t\t! hasInitializedRef.current &&\n\t\t\t( ! interactions.items || interactions.items?.length === 0 )\n\t\t) {\n\t\t\thasInitializedRef.current = true;\n\t\t\tconst newState: ElementInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t\t};\n\t\t\thandleUpdateInteractions( newState );\n\t\t}\n\t}, [ triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactions.items?.length ] );\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\tconst handleRepeaterChange = useCallback(\n\t\t( newItems: ElementInteractions[ 'items' ] ) => {\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst handleInteractionChange = useCallback(\n\t\t( index: number, newInteractionValue: InteractionItemValue ) => {\n\t\t\tconst newItems = structuredClone( interactions.items );\n\t\t\tnewItems[ index ] = {\n\t\t\t\t$$type: 'interaction-item',\n\t\t\t\tvalue: newInteractionValue,\n\t\t\t};\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tonInteractionChange: handleInteractionChange,\n\t\t\tonPlayInteraction,\n\t\t} ),\n\t\t[ handleInteractionChange, onPlayInteraction ]\n\t);\n\n\treturn (\n\t\t<InteractionItemContextProvider value={ contextValue }>\n\t\t\t<Repeater\n\t\t\t\topenOnAdd\n\t\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tvalues={ interactions.items }\n\t\t\t\tsetValues={ handleRepeaterChange }\n\t\t\t\tshowDuplicate={ false }\n\t\t\t\tshowToggle={ false }\n\t\t\t\tisSortable={ false }\n\t\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\t\titemSettings={ {\n\t\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\t\tIcon: () => null,\n\t\t\t\t\tContent: InteractionsListItem,\n\t\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( extractString( value.value.interaction_id ) ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t),\n\t\t\t\t} }\n\t\t\t/>\n\t\t</InteractionItemContextProvider>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { InteractionItemValue } from '../types';\n\ntype InteractionItemContextValue = {\n\tonInteractionChange: ( index: number, newInteractionValue: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst InteractionItemContext = createContext< InteractionItemContextValue | null >( null );\n\nexport function InteractionItemContextProvider( {\n\tvalue,\n\tchildren,\n}: { value: InteractionItemContextValue } & React.PropsWithChildren ) {\n\treturn <InteractionItemContext.Provider value={ value }>{ children }</InteractionItemContext.Provider>;\n}\n\nexport function useInteractionItemContext() {\n\tconst context = useContext( InteractionItemContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionItemContext must be used within InteractionItemContextProvider' );\n\t}\n\treturn context;\n}\n","const TEMP_ID_PREFIX = 'temp-';\nconst TEMP_ID_REGEX = /^temp-[a-z0-9]+$/i;\n\nexport function generateTempInteractionId(): string {\n\treturn `${ TEMP_ID_PREFIX }${ Math.random().toString( 36 ).substring( 2, 11 ) }`;\n}\n\nexport function isTempId( id: string | undefined ): boolean {\n\treturn !! id && TEMP_ID_REGEX.test( id );\n}\n","import type {\n\tAnimationPresetPropValue,\n\tBooleanPropValue,\n\tConfigPropValue,\n\tElementInteractions,\n\tExcludedBreakpointsPropValue,\n\tInteractionBreakpointsPropValue,\n\tInteractionItemPropValue,\n\tInteractionItemValue,\n\tNumberPropValue,\n\tStringPropValue,\n\tTimingConfigPropValue,\n} from '../types';\nimport { generateTempInteractionId } from './temp-id-utils';\n\nexport const createString = ( value: string ): StringPropValue => ( {\n\t$$type: 'string',\n\tvalue,\n} );\n\nexport const createNumber = ( value: number ): NumberPropValue => ( {\n\t$$type: 'number',\n\tvalue,\n} );\n\nexport const createTimingConfig = ( duration: number, delay: number ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: createNumber( duration ),\n\t\tdelay: createNumber( delay ),\n\t},\n} );\n\nexport const createBoolean = ( value: boolean ): BooleanPropValue => ( {\n\t$$type: 'boolean',\n\tvalue,\n} );\n\nexport const createConfig = ( {\n\treplay,\n\teasing = 'easeIn',\n\trelativeTo = '',\n\toffsetTop = 0,\n\toffsetBottom = 100,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t\teasing: createString( easing ),\n\t\trelativeTo: createString( relativeTo ),\n\t\toffsetTop: createNumber( offsetTop ),\n\t\toffsetBottom: createNumber( offsetBottom ),\n\t},\n} );\n\nexport const extractBoolean = ( prop: BooleanPropValue | undefined, fallback = false ): boolean => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const createExcludedBreakpoints = ( breakpoints: string[] ): ExcludedBreakpointsPropValue => ( {\n\t$$type: 'excluded-breakpoints',\n\tvalue: breakpoints.map( createString ),\n} );\n\nexport const createInteractionBreakpoints = ( excluded: string[] ): InteractionBreakpointsPropValue => ( {\n\t$$type: 'interaction-breakpoints',\n\tvalue: {\n\t\texcluded: createExcludedBreakpoints( excluded ),\n\t},\n} );\n\nexport const extractExcludedBreakpoints = ( breakpoints: InteractionBreakpointsPropValue | undefined ): string[] => {\n\treturn breakpoints?.value.excluded.value.map( ( bp: StringPropValue ) => bp.value ) ?? [];\n};\n\nexport const createAnimationPreset = ( {\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( {\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n\texcludedBreakpoints,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\tinteractionId?: string;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n\texcludedBreakpoints?: string[];\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( {\n\t\t\teffect,\n\t\t\ttype,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t\t...( excludedBreakpoints &&\n\t\t\texcludedBreakpoints.length > 0 && {\n\t\t\t\tbreakpoints: createInteractionBreakpoints( excludedBreakpoints ),\n\t\t\t} ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 600,\n\t\tdelay: 0,\n\t\treplay: false,\n\t\teasing: 'easeIn',\n\t\tinteractionId: generateTempInteractionId(),\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const extractNumber = ( prop: NumberPropValue | undefined, fallback = 0 ): number => {\n\treturn prop?.value ?? fallback;\n};\n\nconst TRIGGER_LABELS: Record< string, string > = {\n\tload: 'On page load',\n\tscrollIn: 'Scroll into view',\n\tscrollOut: 'Scroll out of view',\n\tscrollOn: 'While scrolling',\n};\n\nconst capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n\nexport const buildDisplayLabel = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\n\tconst triggerLabel = TRIGGER_LABELS[ trigger ] || capitalize( trigger );\n\tconst effectLabel = capitalize( effect );\n\tconst typeLabel = capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { Divider, Tab, TabPanel, Tabs, useTabs } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useInteractionItemContext } from '../contexts/interactions-item-context';\nimport type { InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( { index, value }: { index: number; value: InteractionItemPropValue } ) => {\n\tconst { getTabsProps, getTabProps, getTabPanelProps } = useTabs< InteractionTabValue >( 'details' );\n\n\tconst context = useInteractionItemContext();\n\n\tconst handleChange = useCallback(\n\t\t( newInteractionValue: InteractionItemValue ) => {\n\t\t\tcontext?.onInteractionChange( index, newInteractionValue );\n\t\t},\n\t\t[ context, index ]\n\t);\n\n\tconst handlePlayInteraction = useCallback(\n\t\t( interactionId: string ) => {\n\t\t\tcontext?.onPlayInteraction( interactionId );\n\t\t},\n\t\t[ context ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs\n\t\t\t\tsize=\"small\"\n\t\t\t\tvariant=\"fullWidth\"\n\t\t\t\taria-label={ __( 'Interaction', 'elementor' ) }\n\t\t\t\t{ ...getTabsProps() }\n\t\t\t>\n\t\t\t\t<Tab label={ __( 'Details', 'elementor' ) } { ...getTabProps( 'details' ) } />\n\t\t\t\t<Tab label={ __( 'Settings', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t</Tabs>\n\n\t\t\t<Divider />\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'details' ) }>\n\t\t\t\t<InteractionDetails\n\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tonPlayInteraction={ handlePlayInteraction }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'settings' ) }>\n\t\t\t\t<InteractionSettings interaction={ value.value } onChange={ handleChange } />\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type PropsWithChildren, useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport type { InteractionItemValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractNumber,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 600,\n\tdelay: 0,\n\treplay: false,\n\teasing: 'easeIn',\n\trelativeTo: 'viewport',\n\toffsetTop: 15,\n\toffsetBottom: 85,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn' ];\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\toffsetTop: number;\n\toffsetBottom: number;\n};\n\ntype ControlVisibilityConfig = {\n\t[ key: string ]: ( values: InteractionValues ) => boolean;\n};\n\nconst controlVisibilityConfig: ControlVisibilityConfig = {\n\treplay: ( values ) => ! TRIGGERS_WITHOUT_REPLAY.includes( values.trigger ),\n\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\toffsetTop: ( values ) => values.trigger === 'scrollOn',\n\toffsetBottom: ( values ) => values.trigger === 'scrollOn',\n\n\tduration: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n\tdelay: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n};\n\nfunction useControlComponent( controlName: InteractionsControlType, isVisible: boolean = true ) {\n\treturn useMemo( () => {\n\t\tif ( ! isVisible ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( controlName )?.component ?? null;\n\t}, [ controlName, isVisible ] );\n}\n\nexport const InteractionDetails = ( { interaction, onChange, onPlayInteraction }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = extractNumber( interaction.animation.value.timing_config.value.duration, DEFAULT_VALUES.duration );\n\tconst delay = extractNumber( interaction.animation.value.timing_config.value.delay, DEFAULT_VALUES.delay );\n\tconst replay = extractBoolean( interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay );\n\tconst easing = extractString( interaction.animation.value.config?.value.easing, DEFAULT_VALUES.easing );\n\tconst relativeTo = extractString( interaction.animation.value.config?.value.relativeTo, DEFAULT_VALUES.relativeTo );\n\tconst offsetTop = extractNumber( interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop );\n\tconst offsetBottom = extractNumber(\n\t\tinteraction.animation.value.config?.value.offsetBottom,\n\t\tDEFAULT_VALUES.offsetBottom\n\t);\n\n\tconst interactionValues = {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t\teasing,\n\t\treplay,\n\t\trelativeTo,\n\t\toffsetTop,\n\t\toffsetBottom,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst ReplayControl = useControlComponent( 'replay', controlVisibilityConfig.replay( interactionValues ) );\n\tconst RelativeToControl = useControlComponent(\n\t\t'relativeTo',\n\t\tcontrolVisibilityConfig.relativeTo( interactionValues )\n\t);\n\tconst OffsetTopControl = useControlComponent( 'offsetTop', controlVisibilityConfig.offsetTop( interactionValues ) );\n\tconst OffsetBottomControl = useControlComponent(\n\t\t'offsetBottom',\n\t\tcontrolVisibilityConfig.offsetBottom( interactionValues )\n\t);\n\n\tconst EasingControl = useControlComponent( 'easing' );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: number;\n\t\t\tdelay: number;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\toffsetTop: number;\n\t\t\toffsetBottom: number;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\n\t\tconst updatedInteraction = {\n\t\t\t...interaction,\n\t\t\tinteraction_id: interaction.interaction_id,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: updates.replay ?? replay,\n\t\t\t\teasing: updates.easing ?? easing,\n\t\t\t\trelativeTo: updates.relativeTo ?? relativeTo,\n\t\t\t\toffsetTop: updates.offsetTop ?? offsetTop,\n\t\t\t\toffsetBottom: updates.offsetBottom ?? offsetBottom,\n\t\t\t} ),\n\t\t};\n\n\t\tonChange( updatedInteraction );\n\n\t\tconst interactionId = extractString( updatedInteraction.interaction_id );\n\n\t\tsetTimeout( () => {\n\t\t\tonPlayInteraction( interactionId );\n\t\t}, 0 );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t{ TriggerControl && (\n\t\t\t\t\t<Field label={ __( 'Trigger', 'elementor' ) }>\n\t\t\t\t\t\t<TriggerControl value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<Field label={ __( 'Replay', 'elementor' ) }>\n\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t<Divider />\n\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t<Direction\n\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\tinteractionType={ type }\n\t\t\t\t\t/>\n\t\t\t\t</Field>\n\n\t\t\t\t{ controlVisibilityConfig.duration( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Duration', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.duration }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ controlVisibilityConfig.delay( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Delay', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( delay ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { delay: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.delay }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t{ controlVisibilityConfig.relativeTo( interactionValues ) && RelativeToControl && (\n\t\t\t\t<>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t\t<Field label={ __( 'Relative To', 'elementor' ) }>\n\t\t\t\t\t\t\t<RelativeToControl\n\t\t\t\t\t\t\t\tvalue={ relativeTo }\n\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { relativeTo: v } ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t{ OffsetTopControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Top', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetTopControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetTop ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { offsetTop: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ OffsetBottomControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Bottom', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetBottomControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetBottom ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) =>\n\t\t\t\t\t\t\t\t\t\tupdateInteraction( { offsetBottom: parseInt( v, 10 ) } )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Divider />\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ EasingControl && (\n\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t<Field label={ __( 'Easing', 'elementor' ) }>\n\t\t\t\t\t\t<EasingControl\n\t\t\t\t\t\t\tvalue={ easing }\n\t\t\t\t\t\t\tonChange={ ( v ) => {\n\t\t\t\t\t\t\t\tupdateInteraction( { easing: v } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t</PopoverContent>\n\t);\n};\n\ntype FieldProps = {\n\tlabel: string;\n} & PropsWithChildren;\n\nfunction Field( { label, children }: FieldProps ) {\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\toffsetTop: FieldProps;\n\toffsetBottom: FieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\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<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t>\n\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { UnstableSizeField } from '@elementor/editor-controls';\nimport { sizePropTypeUtil, type SizePropValue } from '@elementor/editor-props';\n\nimport { type FieldProps } from '../../types';\n\nconst DEFAULT_UNIT = 'ms';\n\nexport function TimeFrameIndicator( { value, onChange, defaultValue }: FieldProps & { defaultValue: number } ) {\n\tconst sizeValue = toSizeValue( value ?? defaultValue );\n\n\tconst setValue = useCallback(\n\t\t( size: number ) => {\n\t\t\tonChange( String( size ) );\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\tconst handleChange = ( newValue: SizePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue.size as number );\n\t};\n\n\tconst handleBlur = () => {\n\t\tif ( ! sizeValue.size ) {\n\t\t\tsetValue( defaultValue );\n\t\t}\n\t};\n\n\treturn (\n\t\t<UnstableSizeField\n\t\t\tunits={ [ DEFAULT_UNIT ] }\n\t\t\tvalue={ sizeValue }\n\t\t\tonChange={ handleChange }\n\t\t\tonBlur={ handleBlur }\n\t\t\tInputProps={ {\n\t\t\t\tinputProps: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nconst toSizeValue = ( value: string ): SizePropValue[ 'value' ] => {\n\treturn sizePropTypeUtil.create( {\n\t\tsize: Number( value ),\n\t\tunit: DEFAULT_UNIT,\n\t} ).value;\n};\n","import * as React from 'react';\nimport { type SyntheticEvent, useCallback, useMemo, useState } from 'react';\nimport { ControlFormLabel, PopoverContent } from '@elementor/editor-controls';\nimport { useBreakpoints } from '@elementor/editor-responsive';\nimport { Autocomplete, Chip, Grid, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { InteractionItemValue } from '../types';\nimport { createInteractionBreakpoints, extractExcludedBreakpoints } from '../utils/prop-value-utils';\n\ntype BreakpointOption = {\n\tlabel: string;\n\tvalue: string;\n};\n\ntype InteractionSettingsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n};\n\nconst SIZE = 'tiny';\n\nexport const InteractionSettings = ( { interaction, onChange }: InteractionSettingsProps ) => {\n\tconst breakpoints = useBreakpoints();\n\n\tconst availableBreakpoints = useMemo(\n\t\t() => breakpoints.map( ( breakpoint ) => ( { label: breakpoint.label, value: String( breakpoint.id ) } ) ),\n\t\t[ breakpoints ]\n\t);\n\n\tconst [ selectedBreakpoints, setSelectedBreakpoints ] = useState< BreakpointOption[] >( () => {\n\t\tconst excluded = extractExcludedBreakpoints( interaction.breakpoints ).filter( ( excludedBreakpoint ) => {\n\t\t\treturn availableBreakpoints.some( ( { value } ) => value === excludedBreakpoint );\n\t\t} );\n\n\t\treturn availableBreakpoints.filter( ( { value } ) => {\n\t\t\treturn ! excluded.includes( value );\n\t\t} );\n\t} );\n\n\tconst handleBreakpointChange = useCallback(\n\t\t( _: SyntheticEvent, newValue: BreakpointOption[] ) => {\n\t\t\tsetSelectedBreakpoints( newValue );\n\n\t\t\tconst selectedValues = newValue.map( ( option ) => option.value );\n\n\t\t\tconst newExcluded = availableBreakpoints\n\t\t\t\t.filter( ( breakpoint ) => ! selectedValues.includes( breakpoint.value ) )\n\t\t\t\t.map( ( breakpoint ) => breakpoint.value );\n\n\t\t\tconst updatedInteraction: InteractionItemValue = {\n\t\t\t\t...interaction,\n\t\t\t\t...( newExcluded.length > 0 && {\n\t\t\t\t\tbreakpoints: createInteractionBreakpoints( newExcluded ),\n\t\t\t\t} ),\n\t\t\t};\n\n\t\t\tif ( newExcluded.length === 0 ) {\n\t\t\t\tdelete updatedInteraction.breakpoints;\n\t\t\t}\n\n\t\t\tonChange( updatedInteraction );\n\t\t},\n\t\t[ interaction, availableBreakpoints, onChange ]\n\t);\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Stack direction=\"column\" gap={ 1 }>\n\t\t\t\t\t\t<ControlFormLabel sx={ { width: '100%' } }>\n\t\t\t\t\t\t\t{ __( 'Trigger on', 'elementor' ) }\n\t\t\t\t\t\t</ControlFormLabel>\n\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tvalue={ selectedBreakpoints }\n\t\t\t\t\t\t\tonChange={ handleBreakpointChange }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\toptions={ availableBreakpoints }\n\t\t\t\t\t\t\tisOptionEqualToValue={ ( option, value ) => option.value === value.value }\n\t\t\t\t\t\t\trenderInput={ ( params ) => <TextField { ...params } /> }\n\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\tvalues.map( ( option, index ) => {\n\t\t\t\t\t\t\t\t\tconst { key, ...chipProps } = getTagProps( { index } );\n\t\t\t\t\t\t\t\t\treturn <Chip key={ key } size={ SIZE } label={ option.label } { ...chipProps } />;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</PopoverContent>\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 { 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\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn interactions?.items?.length > 0;\n\t\t\t} );\n\n\t\t\treturn filtered.map( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId: element.id,\n\t\t\t\t\tinteractions: interactions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nconst EASING_OPTIONS = {\n\teaseIn: __( 'Ease In', 'elementor' ),\n\teaseInOut: __( 'Ease In Out', 'elementor' ),\n\teaseOut: __( 'Ease Out', 'elementor' ),\n\tbackIn: __( 'Back In', 'elementor' ),\n\tbackInOut: __( 'Back In Out', 'elementor' ),\n\tbackOut: __( 'Back Out', 'elementor' ),\n\tlinear: __( 'Linear', 'elementor' ),\n};\n\nconst DEFAULT_EASING = 'easeIn';\n\nexport function Easing( {}: FieldProps ) {\n\tconst availableOptions = Object.entries( EASING_OPTIONS ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select value={ DEFAULT_EASING } onChange={ () => {} } fullWidth displayEmpty size=\"tiny\">\n\t\t\t{ availableOptions.map( ( option ) => {\n\t\t\t\tconst isDisabled = DEFAULT_EASING !== option.key;\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ option.key } value={ option.key } disabled={ isDisabled }>\n\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { CheckIcon, MinusIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type ReplayFieldProps } from '../../types';\n\nexport function Replay( { onChange }: ReplayFieldProps ) {\n\tconst options: ToggleButtonGroupItem< boolean >[] = [\n\t\t{\n\t\t\tvalue: false,\n\t\t\tdisabled: false,\n\t\t\tlabel: __( 'No', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <MinusIcon fontSize={ size } />,\n\t\t},\n\t\t{\n\t\t\tvalue: true,\n\t\t\tdisabled: true,\n\t\t\tlabel: __( 'Yes', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <CheckIcon fontSize={ size } />,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ false } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } 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} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\tvalue={ value }\n\t\t>\n\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value ) {\n\t\t\tinteraction.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { Easing } from './components/controls/easing';\nimport { Replay } from './components/controls/replay';\nimport { Trigger } from './components/controls/trigger';\nimport { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { registerInteractionsControl } from './interactions-controls-registry';\nimport { 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\tinitCleanInteractionIdsOnDuplicate();\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'trigger',\n\t\t\tcomponent: Trigger,\n\t\t\toptions: [ 'load', 'scrollIn' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'easing',\n\t\t\tcomponent: Easing,\n\t\t\toptions: [ 'easeIn' ],\n\t\t} );\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'replay',\n\t\t\tcomponent: Replay,\n\t\t\toptions: [ 'true', 'false' ],\n\t\t} );\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_editor_controls","import_icons","import_ui","import_i18n","React","import_react","React","import_react","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_icons","import_i18n","React","import_ui","import_i18n","React","import_editor_controls","import_i18n","React","import_react","import_editor_controls","React","import_react","import_editor_controls","import_ui","import_i18n","import_editor_elements","listenTo","React","import_editor_ui","import_ui","import_i18n","React","import_editor_controls","import_icons","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","import_editor_v1_adapters"]}
package/dist/index.mjs CHANGED
@@ -971,20 +971,43 @@ function Easing({}) {
971
971
  }));
972
972
  }
973
973
 
974
- // src/components/controls/trigger.tsx
974
+ // src/components/controls/replay.tsx
975
975
  import * as React15 from "react";
976
+ import { ToggleButtonGroupUi as ToggleButtonGroupUi3 } from "@elementor/editor-controls";
977
+ import { CheckIcon, MinusIcon } from "@elementor/icons";
978
+ import { __ as __10 } from "@wordpress/i18n";
979
+ function Replay({ onChange }) {
980
+ const options = [
981
+ {
982
+ value: false,
983
+ disabled: false,
984
+ label: __10("No", "elementor"),
985
+ renderContent: ({ size }) => /* @__PURE__ */ React15.createElement(MinusIcon, { fontSize: size })
986
+ },
987
+ {
988
+ value: true,
989
+ disabled: true,
990
+ label: __10("Yes", "elementor"),
991
+ renderContent: ({ size }) => /* @__PURE__ */ React15.createElement(CheckIcon, { fontSize: size })
992
+ }
993
+ ];
994
+ return /* @__PURE__ */ React15.createElement(ToggleButtonGroupUi3, { items: options, exclusive: true, onChange, value: false });
995
+ }
996
+
997
+ // src/components/controls/trigger.tsx
998
+ import * as React16 from "react";
976
999
  import { MenuListItem as MenuListItem3 } from "@elementor/editor-ui";
977
1000
  import { Select as Select3 } from "@elementor/ui";
978
- import { __ as __10 } from "@wordpress/i18n";
1001
+ import { __ as __11 } from "@wordpress/i18n";
979
1002
  function Trigger({ value, onChange }) {
980
1003
  const availableTriggers = Object.entries({
981
- load: __10("Page load", "elementor"),
982
- scrollIn: __10("Scroll into view", "elementor")
1004
+ load: __11("Page load", "elementor"),
1005
+ scrollIn: __11("Scroll into view", "elementor")
983
1006
  }).map(([key, label]) => ({
984
1007
  key,
985
1008
  label
986
1009
  }));
987
- return /* @__PURE__ */ React15.createElement(
1010
+ return /* @__PURE__ */ React16.createElement(
988
1011
  Select3,
989
1012
  {
990
1013
  fullWidth: true,
@@ -994,7 +1017,7 @@ function Trigger({ value, onChange }) {
994
1017
  value
995
1018
  },
996
1019
  availableTriggers.map((trigger) => {
997
- return /* @__PURE__ */ React15.createElement(MenuListItem3, { key: trigger.key, value: trigger.key }, trigger.label);
1020
+ return /* @__PURE__ */ React16.createElement(MenuListItem3, { key: trigger.key, value: trigger.key }, trigger.label);
998
1021
  })
999
1022
  );
1000
1023
  }
@@ -1052,6 +1075,11 @@ function init() {
1052
1075
  component: Easing,
1053
1076
  options: ["easeIn"]
1054
1077
  });
1078
+ registerInteractionsControl({
1079
+ type: "replay",
1080
+ component: Replay,
1081
+ options: ["true", "false"]
1082
+ });
1055
1083
  } catch (error) {
1056
1084
  throw error;
1057
1085
  }
@@ -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/contexts/interactions-item-context.tsx","../src/utils/temp-id-utils.ts","../src/utils/prop-value-utils.ts","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../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/interaction-settings.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/components/controls/easing.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.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 page load 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, 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 type { ElementInteractions } from '../types';\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 ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\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\tfirstInteractionState[ 1 ]( 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( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\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={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ 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, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( interactionId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tconst normalizedValue = value && value.items?.length === 0 ? undefined : value;\n\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: normalizedValue,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( interactionId: string ) => {\n\t\tplayElementInteractions( elementId, interactionId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\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 { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { InteractionsListItem } from './interactions-list-item';\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( interactionId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst hasInitializedRef = useRef( false );\n\n\tconst handleUpdateInteractions = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tonSelectInteractions( newInteractions );\n\t\t},\n\t\t[ onSelectInteractions ]\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttriggerCreateOnShowEmpty &&\n\t\t\t! hasInitializedRef.current &&\n\t\t\t( ! interactions.items || interactions.items?.length === 0 )\n\t\t) {\n\t\t\thasInitializedRef.current = true;\n\t\t\tconst newState: ElementInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t\t};\n\t\t\thandleUpdateInteractions( newState );\n\t\t}\n\t}, [ triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactions.items?.length ] );\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\tconst handleRepeaterChange = useCallback(\n\t\t( newItems: ElementInteractions[ 'items' ] ) => {\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst handleInteractionChange = useCallback(\n\t\t( index: number, newInteractionValue: InteractionItemValue ) => {\n\t\t\tconst newItems = structuredClone( interactions.items );\n\t\t\tnewItems[ index ] = {\n\t\t\t\t$$type: 'interaction-item',\n\t\t\t\tvalue: newInteractionValue,\n\t\t\t};\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tonInteractionChange: handleInteractionChange,\n\t\t\tonPlayInteraction,\n\t\t} ),\n\t\t[ handleInteractionChange, onPlayInteraction ]\n\t);\n\n\treturn (\n\t\t<InteractionItemContextProvider value={ contextValue }>\n\t\t\t<Repeater\n\t\t\t\topenOnAdd\n\t\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tvalues={ interactions.items }\n\t\t\t\tsetValues={ handleRepeaterChange }\n\t\t\t\tshowDuplicate={ false }\n\t\t\t\tshowToggle={ false }\n\t\t\t\tisSortable={ false }\n\t\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\t\titemSettings={ {\n\t\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\t\tIcon: () => null,\n\t\t\t\t\tContent: InteractionsListItem,\n\t\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( extractString( value.value.interaction_id ) ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t),\n\t\t\t\t} }\n\t\t\t/>\n\t\t</InteractionItemContextProvider>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { InteractionItemValue } from '../types';\n\ntype InteractionItemContextValue = {\n\tonInteractionChange: ( index: number, newInteractionValue: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst InteractionItemContext = createContext< InteractionItemContextValue | null >( null );\n\nexport function InteractionItemContextProvider( {\n\tvalue,\n\tchildren,\n}: { value: InteractionItemContextValue } & React.PropsWithChildren ) {\n\treturn <InteractionItemContext.Provider value={ value }>{ children }</InteractionItemContext.Provider>;\n}\n\nexport function useInteractionItemContext() {\n\tconst context = useContext( InteractionItemContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionItemContext must be used within InteractionItemContextProvider' );\n\t}\n\treturn context;\n}\n","const TEMP_ID_PREFIX = 'temp-';\nconst TEMP_ID_REGEX = /^temp-[a-z0-9]+$/i;\n\nexport function generateTempInteractionId(): string {\n\treturn `${ TEMP_ID_PREFIX }${ Math.random().toString( 36 ).substring( 2, 11 ) }`;\n}\n\nexport function isTempId( id: string | undefined ): boolean {\n\treturn !! id && TEMP_ID_REGEX.test( id );\n}\n","import type {\n\tAnimationPresetPropValue,\n\tBooleanPropValue,\n\tConfigPropValue,\n\tElementInteractions,\n\tExcludedBreakpointsPropValue,\n\tInteractionBreakpointsPropValue,\n\tInteractionItemPropValue,\n\tInteractionItemValue,\n\tNumberPropValue,\n\tStringPropValue,\n\tTimingConfigPropValue,\n} from '../types';\nimport { generateTempInteractionId } from './temp-id-utils';\n\nexport const createString = ( value: string ): StringPropValue => ( {\n\t$$type: 'string',\n\tvalue,\n} );\n\nexport const createNumber = ( value: number ): NumberPropValue => ( {\n\t$$type: 'number',\n\tvalue,\n} );\n\nexport const createTimingConfig = ( duration: number, delay: number ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: createNumber( duration ),\n\t\tdelay: createNumber( delay ),\n\t},\n} );\n\nexport const createBoolean = ( value: boolean ): BooleanPropValue => ( {\n\t$$type: 'boolean',\n\tvalue,\n} );\n\nexport const createConfig = ( {\n\treplay,\n\teasing = 'easeIn',\n\trelativeTo = '',\n\toffsetTop = 0,\n\toffsetBottom = 100,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t\teasing: createString( easing ),\n\t\trelativeTo: createString( relativeTo ),\n\t\toffsetTop: createNumber( offsetTop ),\n\t\toffsetBottom: createNumber( offsetBottom ),\n\t},\n} );\n\nexport const extractBoolean = ( prop: BooleanPropValue | undefined, fallback = false ): boolean => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const createExcludedBreakpoints = ( breakpoints: string[] ): ExcludedBreakpointsPropValue => ( {\n\t$$type: 'excluded-breakpoints',\n\tvalue: breakpoints.map( createString ),\n} );\n\nexport const createInteractionBreakpoints = ( excluded: string[] ): InteractionBreakpointsPropValue => ( {\n\t$$type: 'interaction-breakpoints',\n\tvalue: {\n\t\texcluded: createExcludedBreakpoints( excluded ),\n\t},\n} );\n\nexport const extractExcludedBreakpoints = ( breakpoints: InteractionBreakpointsPropValue | undefined ): string[] => {\n\treturn breakpoints?.value.excluded.value.map( ( bp: StringPropValue ) => bp.value ) ?? [];\n};\n\nexport const createAnimationPreset = ( {\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( {\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n\texcludedBreakpoints,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\tinteractionId?: string;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n\texcludedBreakpoints?: string[];\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( {\n\t\t\teffect,\n\t\t\ttype,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t\t...( excludedBreakpoints &&\n\t\t\texcludedBreakpoints.length > 0 && {\n\t\t\t\tbreakpoints: createInteractionBreakpoints( excludedBreakpoints ),\n\t\t\t} ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 600,\n\t\tdelay: 0,\n\t\treplay: false,\n\t\teasing: 'easeIn',\n\t\tinteractionId: generateTempInteractionId(),\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const extractNumber = ( prop: NumberPropValue | undefined, fallback = 0 ): number => {\n\treturn prop?.value ?? fallback;\n};\n\nconst TRIGGER_LABELS: Record< string, string > = {\n\tload: 'On page load',\n\tscrollIn: 'Scroll into view',\n\tscrollOut: 'Scroll out of view',\n\tscrollOn: 'While scrolling',\n};\n\nconst capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n\nexport const buildDisplayLabel = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\n\tconst triggerLabel = TRIGGER_LABELS[ trigger ] || capitalize( trigger );\n\tconst effectLabel = capitalize( effect );\n\tconst typeLabel = capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { Divider, Tab, TabPanel, Tabs, useTabs } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useInteractionItemContext } from '../contexts/interactions-item-context';\nimport type { InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( { index, value }: { index: number; value: InteractionItemPropValue } ) => {\n\tconst { getTabsProps, getTabProps, getTabPanelProps } = useTabs< InteractionTabValue >( 'details' );\n\n\tconst context = useInteractionItemContext();\n\n\tconst handleChange = useCallback(\n\t\t( newInteractionValue: InteractionItemValue ) => {\n\t\t\tcontext?.onInteractionChange( index, newInteractionValue );\n\t\t},\n\t\t[ context, index ]\n\t);\n\n\tconst handlePlayInteraction = useCallback(\n\t\t( interactionId: string ) => {\n\t\t\tcontext?.onPlayInteraction( interactionId );\n\t\t},\n\t\t[ context ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs\n\t\t\t\tsize=\"small\"\n\t\t\t\tvariant=\"fullWidth\"\n\t\t\t\taria-label={ __( 'Interaction', 'elementor' ) }\n\t\t\t\t{ ...getTabsProps() }\n\t\t\t>\n\t\t\t\t<Tab label={ __( 'Details', 'elementor' ) } { ...getTabProps( 'details' ) } />\n\t\t\t\t<Tab label={ __( 'Settings', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t</Tabs>\n\n\t\t\t<Divider />\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'details' ) }>\n\t\t\t\t<InteractionDetails\n\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tonPlayInteraction={ handlePlayInteraction }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'settings' ) }>\n\t\t\t\t<InteractionSettings interaction={ value.value } onChange={ handleChange } />\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type PropsWithChildren, useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport type { InteractionItemValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractNumber,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 600,\n\tdelay: 0,\n\treplay: false,\n\teasing: 'easeIn',\n\trelativeTo: 'viewport',\n\toffsetTop: 15,\n\toffsetBottom: 85,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn' ];\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\toffsetTop: number;\n\toffsetBottom: number;\n};\n\ntype ControlVisibilityConfig = {\n\t[ key: string ]: ( values: InteractionValues ) => boolean;\n};\n\nconst controlVisibilityConfig: ControlVisibilityConfig = {\n\treplay: ( values ) => ! TRIGGERS_WITHOUT_REPLAY.includes( values.trigger ),\n\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\toffsetTop: ( values ) => values.trigger === 'scrollOn',\n\toffsetBottom: ( values ) => values.trigger === 'scrollOn',\n\n\tduration: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n\tdelay: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n};\n\nfunction useControlComponent( controlName: InteractionsControlType, isVisible: boolean = true ) {\n\treturn useMemo( () => {\n\t\tif ( ! isVisible ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( controlName )?.component ?? null;\n\t}, [ controlName, isVisible ] );\n}\n\nexport const InteractionDetails = ( { interaction, onChange, onPlayInteraction }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = extractNumber( interaction.animation.value.timing_config.value.duration, DEFAULT_VALUES.duration );\n\tconst delay = extractNumber( interaction.animation.value.timing_config.value.delay, DEFAULT_VALUES.delay );\n\tconst replay = extractBoolean( interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay );\n\tconst easing = extractString( interaction.animation.value.config?.value.easing, DEFAULT_VALUES.easing );\n\tconst relativeTo = extractString( interaction.animation.value.config?.value.relativeTo, DEFAULT_VALUES.relativeTo );\n\tconst offsetTop = extractNumber( interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop );\n\tconst offsetBottom = extractNumber(\n\t\tinteraction.animation.value.config?.value.offsetBottom,\n\t\tDEFAULT_VALUES.offsetBottom\n\t);\n\n\tconst interactionValues = {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t\teasing,\n\t\treplay,\n\t\trelativeTo,\n\t\toffsetTop,\n\t\toffsetBottom,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst ReplayControl = useControlComponent( 'replay', controlVisibilityConfig.replay( interactionValues ) );\n\tconst RelativeToControl = useControlComponent(\n\t\t'relativeTo',\n\t\tcontrolVisibilityConfig.relativeTo( interactionValues )\n\t);\n\tconst OffsetTopControl = useControlComponent( 'offsetTop', controlVisibilityConfig.offsetTop( interactionValues ) );\n\tconst OffsetBottomControl = useControlComponent(\n\t\t'offsetBottom',\n\t\tcontrolVisibilityConfig.offsetBottom( interactionValues )\n\t);\n\n\tconst EasingControl = useControlComponent( 'easing' );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: number;\n\t\t\tdelay: number;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\toffsetTop: number;\n\t\t\toffsetBottom: number;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\n\t\tconst updatedInteraction = {\n\t\t\t...interaction,\n\t\t\tinteraction_id: interaction.interaction_id,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: updates.replay ?? replay,\n\t\t\t\teasing: updates.easing ?? easing,\n\t\t\t\trelativeTo: updates.relativeTo ?? relativeTo,\n\t\t\t\toffsetTop: updates.offsetTop ?? offsetTop,\n\t\t\t\toffsetBottom: updates.offsetBottom ?? offsetBottom,\n\t\t\t} ),\n\t\t};\n\n\t\tonChange( updatedInteraction );\n\n\t\tconst interactionId = extractString( updatedInteraction.interaction_id );\n\n\t\tsetTimeout( () => {\n\t\t\tonPlayInteraction( interactionId );\n\t\t}, 0 );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t{ TriggerControl && (\n\t\t\t\t\t<Field label={ __( 'Trigger', 'elementor' ) }>\n\t\t\t\t\t\t<TriggerControl value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<Field label={ __( 'Replay', 'elementor' ) }>\n\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t<Divider />\n\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t<Direction\n\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\tinteractionType={ type }\n\t\t\t\t\t/>\n\t\t\t\t</Field>\n\n\t\t\t\t{ controlVisibilityConfig.duration( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Duration', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.duration }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ controlVisibilityConfig.delay( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Delay', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( delay ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { delay: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.delay }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t{ controlVisibilityConfig.relativeTo( interactionValues ) && RelativeToControl && (\n\t\t\t\t<>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t\t<Field label={ __( 'Relative To', 'elementor' ) }>\n\t\t\t\t\t\t\t<RelativeToControl\n\t\t\t\t\t\t\t\tvalue={ relativeTo }\n\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { relativeTo: v } ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t{ OffsetTopControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Top', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetTopControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetTop ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { offsetTop: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ OffsetBottomControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Bottom', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetBottomControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetBottom ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) =>\n\t\t\t\t\t\t\t\t\t\tupdateInteraction( { offsetBottom: parseInt( v, 10 ) } )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Divider />\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ EasingControl && (\n\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t<Field label={ __( 'Easing', 'elementor' ) }>\n\t\t\t\t\t\t<EasingControl\n\t\t\t\t\t\t\tvalue={ easing }\n\t\t\t\t\t\t\tonChange={ ( v ) => {\n\t\t\t\t\t\t\t\tupdateInteraction( { easing: v } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t</PopoverContent>\n\t);\n};\n\ntype FieldProps = {\n\tlabel: string;\n} & PropsWithChildren;\n\nfunction Field( { label, children }: FieldProps ) {\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\toffsetTop: FieldProps;\n\toffsetBottom: FieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\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<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t>\n\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { UnstableSizeField } from '@elementor/editor-controls';\nimport { sizePropTypeUtil, type SizePropValue } from '@elementor/editor-props';\n\nimport { type FieldProps } from '../../types';\n\nconst DEFAULT_UNIT = 'ms';\n\nexport function TimeFrameIndicator( { value, onChange, defaultValue }: FieldProps & { defaultValue: number } ) {\n\tconst sizeValue = toSizeValue( value ?? defaultValue );\n\n\tconst setValue = useCallback(\n\t\t( size: number ) => {\n\t\t\tonChange( String( size ) );\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\tconst handleChange = ( newValue: SizePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue.size as number );\n\t};\n\n\tconst handleBlur = () => {\n\t\tif ( ! sizeValue.size ) {\n\t\t\tsetValue( defaultValue );\n\t\t}\n\t};\n\n\treturn (\n\t\t<UnstableSizeField\n\t\t\tunits={ [ DEFAULT_UNIT ] }\n\t\t\tvalue={ sizeValue }\n\t\t\tonChange={ handleChange }\n\t\t\tonBlur={ handleBlur }\n\t\t\tInputProps={ {\n\t\t\t\tinputProps: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nconst toSizeValue = ( value: string ): SizePropValue[ 'value' ] => {\n\treturn sizePropTypeUtil.create( {\n\t\tsize: Number( value ),\n\t\tunit: DEFAULT_UNIT,\n\t} ).value;\n};\n","import * as React from 'react';\nimport { type SyntheticEvent, useCallback, useMemo, useState } from 'react';\nimport { ControlFormLabel, PopoverContent } from '@elementor/editor-controls';\nimport { useBreakpoints } from '@elementor/editor-responsive';\nimport { Autocomplete, Chip, Grid, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { InteractionItemValue } from '../types';\nimport { createInteractionBreakpoints, extractExcludedBreakpoints } from '../utils/prop-value-utils';\n\ntype BreakpointOption = {\n\tlabel: string;\n\tvalue: string;\n};\n\ntype InteractionSettingsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n};\n\nconst SIZE = 'tiny';\n\nexport const InteractionSettings = ( { interaction, onChange }: InteractionSettingsProps ) => {\n\tconst breakpoints = useBreakpoints();\n\n\tconst availableBreakpoints = useMemo(\n\t\t() => breakpoints.map( ( breakpoint ) => ( { label: breakpoint.label, value: String( breakpoint.id ) } ) ),\n\t\t[ breakpoints ]\n\t);\n\n\tconst [ selectedBreakpoints, setSelectedBreakpoints ] = useState< BreakpointOption[] >( () => {\n\t\tconst excluded = extractExcludedBreakpoints( interaction.breakpoints ).filter( ( excludedBreakpoint ) => {\n\t\t\treturn availableBreakpoints.some( ( { value } ) => value === excludedBreakpoint );\n\t\t} );\n\n\t\treturn availableBreakpoints.filter( ( { value } ) => {\n\t\t\treturn ! excluded.includes( value );\n\t\t} );\n\t} );\n\n\tconst handleBreakpointChange = useCallback(\n\t\t( _: SyntheticEvent, newValue: BreakpointOption[] ) => {\n\t\t\tsetSelectedBreakpoints( newValue );\n\n\t\t\tconst selectedValues = newValue.map( ( option ) => option.value );\n\n\t\t\tconst newExcluded = availableBreakpoints\n\t\t\t\t.filter( ( breakpoint ) => ! selectedValues.includes( breakpoint.value ) )\n\t\t\t\t.map( ( breakpoint ) => breakpoint.value );\n\n\t\t\tconst updatedInteraction: InteractionItemValue = {\n\t\t\t\t...interaction,\n\t\t\t\t...( newExcluded.length > 0 && {\n\t\t\t\t\tbreakpoints: createInteractionBreakpoints( newExcluded ),\n\t\t\t\t} ),\n\t\t\t};\n\n\t\t\tif ( newExcluded.length === 0 ) {\n\t\t\t\tdelete updatedInteraction.breakpoints;\n\t\t\t}\n\n\t\t\tonChange( updatedInteraction );\n\t\t},\n\t\t[ interaction, availableBreakpoints, onChange ]\n\t);\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Stack direction=\"column\" gap={ 1 }>\n\t\t\t\t\t\t<ControlFormLabel sx={ { width: '100%' } }>\n\t\t\t\t\t\t\t{ __( 'Trigger on', 'elementor' ) }\n\t\t\t\t\t\t</ControlFormLabel>\n\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tvalue={ selectedBreakpoints }\n\t\t\t\t\t\t\tonChange={ handleBreakpointChange }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\toptions={ availableBreakpoints }\n\t\t\t\t\t\t\tisOptionEqualToValue={ ( option, value ) => option.value === value.value }\n\t\t\t\t\t\t\trenderInput={ ( params ) => <TextField { ...params } /> }\n\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\tvalues.map( ( option, index ) => {\n\t\t\t\t\t\t\t\t\tconst { key, ...chipProps } = getTagProps( { index } );\n\t\t\t\t\t\t\t\t\treturn <Chip key={ key } size={ SIZE } label={ option.label } { ...chipProps } />;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</PopoverContent>\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 { 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\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn interactions?.items?.length > 0;\n\t\t\t} );\n\n\t\t\treturn filtered.map( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId: element.id,\n\t\t\t\t\tinteractions: interactions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nconst EASING_OPTIONS = {\n\teaseIn: __( 'Ease In', 'elementor' ),\n\teaseInOut: __( 'Ease In Out', 'elementor' ),\n\teaseOut: __( 'Ease Out', 'elementor' ),\n\tbackIn: __( 'Back In', 'elementor' ),\n\tbackInOut: __( 'Back In Out', 'elementor' ),\n\tbackOut: __( 'Back Out', 'elementor' ),\n\tlinear: __( 'Linear', 'elementor' ),\n};\n\nconst DEFAULT_EASING = 'easeIn';\n\nexport function Easing( {}: FieldProps ) {\n\tconst availableOptions = Object.entries( EASING_OPTIONS ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select value={ DEFAULT_EASING } onChange={ () => {} } fullWidth displayEmpty size=\"tiny\">\n\t\t\t{ availableOptions.map( ( option ) => {\n\t\t\t\tconst isDisabled = DEFAULT_EASING !== option.key;\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ option.key } value={ option.key } disabled={ isDisabled }>\n\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } 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} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\tvalue={ value }\n\t\t>\n\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value ) {\n\t\t\tinteraction.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { Easing } from './components/controls/easing';\nimport { Trigger } from './components/controls/trigger';\nimport { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { registerInteractionsControl } from './interactions-controls-registry';\nimport { 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\tinitCleanInteractionIdsOnDuplicate();\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'trigger',\n\t\t\tcomponent: Trigger,\n\t\t\toptions: [ 'load', 'scrollIn' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'easing',\n\t\t\tcomponent: Easing,\n\t\t\toptions: [ 'easeIn' ],\n\t\t} );\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","useCallback","useEffect","useMemo","__","React","createContext","useContext","React","useCallback","Divider","__","React","useMemo","__","React","__","React","__","React","ToggleButtonGroupUi","__","React","useCallback","useMemo","__","React","useCallback","useMemo","useState","ControlFormLabel","PopoverContent","Grid","Stack","__","useMemo","useState","useCallback","PopoverContent","Grid","Stack","ControlFormLabel","__","useCallback","__","Divider","useCallback","useEffect","useMemo","__","useElementInteractions","useState","useCallback","Stack","React","MenuListItem","Select","__","React","MenuListItem","Select","__"]}
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/contexts/interactions-item-context.tsx","../src/utils/temp-id-utils.ts","../src/utils/prop-value-utils.ts","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../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/interaction-settings.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/components/controls/easing.tsx","../src/components/controls/replay.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.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 page load 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, 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 type { ElementInteractions } from '../types';\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 ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\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\tfirstInteractionState[ 1 ]( 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( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\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={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ 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, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( interactionId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tconst normalizedValue = value && value.items?.length === 0 ? undefined : value;\n\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: normalizedValue,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( interactionId: string ) => {\n\t\tplayElementInteractions( elementId, interactionId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\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 { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { InteractionsListItem } from './interactions-list-item';\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( interactionId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst hasInitializedRef = useRef( false );\n\n\tconst handleUpdateInteractions = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tonSelectInteractions( newInteractions );\n\t\t},\n\t\t[ onSelectInteractions ]\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttriggerCreateOnShowEmpty &&\n\t\t\t! hasInitializedRef.current &&\n\t\t\t( ! interactions.items || interactions.items?.length === 0 )\n\t\t) {\n\t\t\thasInitializedRef.current = true;\n\t\t\tconst newState: ElementInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t\t};\n\t\t\thandleUpdateInteractions( newState );\n\t\t}\n\t}, [ triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactions.items?.length ] );\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\tconst handleRepeaterChange = useCallback(\n\t\t( newItems: ElementInteractions[ 'items' ] ) => {\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst handleInteractionChange = useCallback(\n\t\t( index: number, newInteractionValue: InteractionItemValue ) => {\n\t\t\tconst newItems = structuredClone( interactions.items );\n\t\t\tnewItems[ index ] = {\n\t\t\t\t$$type: 'interaction-item',\n\t\t\t\tvalue: newInteractionValue,\n\t\t\t};\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tonInteractionChange: handleInteractionChange,\n\t\t\tonPlayInteraction,\n\t\t} ),\n\t\t[ handleInteractionChange, onPlayInteraction ]\n\t);\n\n\treturn (\n\t\t<InteractionItemContextProvider value={ contextValue }>\n\t\t\t<Repeater\n\t\t\t\topenOnAdd\n\t\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tvalues={ interactions.items }\n\t\t\t\tsetValues={ handleRepeaterChange }\n\t\t\t\tshowDuplicate={ false }\n\t\t\t\tshowToggle={ false }\n\t\t\t\tisSortable={ false }\n\t\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\t\titemSettings={ {\n\t\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\t\tIcon: () => null,\n\t\t\t\t\tContent: InteractionsListItem,\n\t\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( extractString( value.value.interaction_id ) ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t),\n\t\t\t\t} }\n\t\t\t/>\n\t\t</InteractionItemContextProvider>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { InteractionItemValue } from '../types';\n\ntype InteractionItemContextValue = {\n\tonInteractionChange: ( index: number, newInteractionValue: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst InteractionItemContext = createContext< InteractionItemContextValue | null >( null );\n\nexport function InteractionItemContextProvider( {\n\tvalue,\n\tchildren,\n}: { value: InteractionItemContextValue } & React.PropsWithChildren ) {\n\treturn <InteractionItemContext.Provider value={ value }>{ children }</InteractionItemContext.Provider>;\n}\n\nexport function useInteractionItemContext() {\n\tconst context = useContext( InteractionItemContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionItemContext must be used within InteractionItemContextProvider' );\n\t}\n\treturn context;\n}\n","const TEMP_ID_PREFIX = 'temp-';\nconst TEMP_ID_REGEX = /^temp-[a-z0-9]+$/i;\n\nexport function generateTempInteractionId(): string {\n\treturn `${ TEMP_ID_PREFIX }${ Math.random().toString( 36 ).substring( 2, 11 ) }`;\n}\n\nexport function isTempId( id: string | undefined ): boolean {\n\treturn !! id && TEMP_ID_REGEX.test( id );\n}\n","import type {\n\tAnimationPresetPropValue,\n\tBooleanPropValue,\n\tConfigPropValue,\n\tElementInteractions,\n\tExcludedBreakpointsPropValue,\n\tInteractionBreakpointsPropValue,\n\tInteractionItemPropValue,\n\tInteractionItemValue,\n\tNumberPropValue,\n\tStringPropValue,\n\tTimingConfigPropValue,\n} from '../types';\nimport { generateTempInteractionId } from './temp-id-utils';\n\nexport const createString = ( value: string ): StringPropValue => ( {\n\t$$type: 'string',\n\tvalue,\n} );\n\nexport const createNumber = ( value: number ): NumberPropValue => ( {\n\t$$type: 'number',\n\tvalue,\n} );\n\nexport const createTimingConfig = ( duration: number, delay: number ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: createNumber( duration ),\n\t\tdelay: createNumber( delay ),\n\t},\n} );\n\nexport const createBoolean = ( value: boolean ): BooleanPropValue => ( {\n\t$$type: 'boolean',\n\tvalue,\n} );\n\nexport const createConfig = ( {\n\treplay,\n\teasing = 'easeIn',\n\trelativeTo = '',\n\toffsetTop = 0,\n\toffsetBottom = 100,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t\teasing: createString( easing ),\n\t\trelativeTo: createString( relativeTo ),\n\t\toffsetTop: createNumber( offsetTop ),\n\t\toffsetBottom: createNumber( offsetBottom ),\n\t},\n} );\n\nexport const extractBoolean = ( prop: BooleanPropValue | undefined, fallback = false ): boolean => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const createExcludedBreakpoints = ( breakpoints: string[] ): ExcludedBreakpointsPropValue => ( {\n\t$$type: 'excluded-breakpoints',\n\tvalue: breakpoints.map( createString ),\n} );\n\nexport const createInteractionBreakpoints = ( excluded: string[] ): InteractionBreakpointsPropValue => ( {\n\t$$type: 'interaction-breakpoints',\n\tvalue: {\n\t\texcluded: createExcludedBreakpoints( excluded ),\n\t},\n} );\n\nexport const extractExcludedBreakpoints = ( breakpoints: InteractionBreakpointsPropValue | undefined ): string[] => {\n\treturn breakpoints?.value.excluded.value.map( ( bp: StringPropValue ) => bp.value ) ?? [];\n};\n\nexport const createAnimationPreset = ( {\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( {\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n\texcludedBreakpoints,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\tinteractionId?: string;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n\texcludedBreakpoints?: string[];\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( {\n\t\t\teffect,\n\t\t\ttype,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t\t...( excludedBreakpoints &&\n\t\t\texcludedBreakpoints.length > 0 && {\n\t\t\t\tbreakpoints: createInteractionBreakpoints( excludedBreakpoints ),\n\t\t\t} ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 600,\n\t\tdelay: 0,\n\t\treplay: false,\n\t\teasing: 'easeIn',\n\t\tinteractionId: generateTempInteractionId(),\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const extractNumber = ( prop: NumberPropValue | undefined, fallback = 0 ): number => {\n\treturn prop?.value ?? fallback;\n};\n\nconst TRIGGER_LABELS: Record< string, string > = {\n\tload: 'On page load',\n\tscrollIn: 'Scroll into view',\n\tscrollOut: 'Scroll out of view',\n\tscrollOn: 'While scrolling',\n};\n\nconst capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n\nexport const buildDisplayLabel = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\n\tconst triggerLabel = TRIGGER_LABELS[ trigger ] || capitalize( trigger );\n\tconst effectLabel = capitalize( effect );\n\tconst typeLabel = capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { Divider, Tab, TabPanel, Tabs, useTabs } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useInteractionItemContext } from '../contexts/interactions-item-context';\nimport type { InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( { index, value }: { index: number; value: InteractionItemPropValue } ) => {\n\tconst { getTabsProps, getTabProps, getTabPanelProps } = useTabs< InteractionTabValue >( 'details' );\n\n\tconst context = useInteractionItemContext();\n\n\tconst handleChange = useCallback(\n\t\t( newInteractionValue: InteractionItemValue ) => {\n\t\t\tcontext?.onInteractionChange( index, newInteractionValue );\n\t\t},\n\t\t[ context, index ]\n\t);\n\n\tconst handlePlayInteraction = useCallback(\n\t\t( interactionId: string ) => {\n\t\t\tcontext?.onPlayInteraction( interactionId );\n\t\t},\n\t\t[ context ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs\n\t\t\t\tsize=\"small\"\n\t\t\t\tvariant=\"fullWidth\"\n\t\t\t\taria-label={ __( 'Interaction', 'elementor' ) }\n\t\t\t\t{ ...getTabsProps() }\n\t\t\t>\n\t\t\t\t<Tab label={ __( 'Details', 'elementor' ) } { ...getTabProps( 'details' ) } />\n\t\t\t\t<Tab label={ __( 'Settings', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t</Tabs>\n\n\t\t\t<Divider />\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'details' ) }>\n\t\t\t\t<InteractionDetails\n\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tonPlayInteraction={ handlePlayInteraction }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'settings' ) }>\n\t\t\t\t<InteractionSettings interaction={ value.value } onChange={ handleChange } />\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type PropsWithChildren, useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport type { InteractionItemValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractNumber,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 600,\n\tdelay: 0,\n\treplay: false,\n\teasing: 'easeIn',\n\trelativeTo: 'viewport',\n\toffsetTop: 15,\n\toffsetBottom: 85,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn' ];\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\toffsetTop: number;\n\toffsetBottom: number;\n};\n\ntype ControlVisibilityConfig = {\n\t[ key: string ]: ( values: InteractionValues ) => boolean;\n};\n\nconst controlVisibilityConfig: ControlVisibilityConfig = {\n\treplay: ( values ) => ! TRIGGERS_WITHOUT_REPLAY.includes( values.trigger ),\n\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\toffsetTop: ( values ) => values.trigger === 'scrollOn',\n\toffsetBottom: ( values ) => values.trigger === 'scrollOn',\n\n\tduration: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n\tdelay: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n};\n\nfunction useControlComponent( controlName: InteractionsControlType, isVisible: boolean = true ) {\n\treturn useMemo( () => {\n\t\tif ( ! isVisible ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( controlName )?.component ?? null;\n\t}, [ controlName, isVisible ] );\n}\n\nexport const InteractionDetails = ( { interaction, onChange, onPlayInteraction }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = extractNumber( interaction.animation.value.timing_config.value.duration, DEFAULT_VALUES.duration );\n\tconst delay = extractNumber( interaction.animation.value.timing_config.value.delay, DEFAULT_VALUES.delay );\n\tconst replay = extractBoolean( interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay );\n\tconst easing = extractString( interaction.animation.value.config?.value.easing, DEFAULT_VALUES.easing );\n\tconst relativeTo = extractString( interaction.animation.value.config?.value.relativeTo, DEFAULT_VALUES.relativeTo );\n\tconst offsetTop = extractNumber( interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop );\n\tconst offsetBottom = extractNumber(\n\t\tinteraction.animation.value.config?.value.offsetBottom,\n\t\tDEFAULT_VALUES.offsetBottom\n\t);\n\n\tconst interactionValues = {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t\teasing,\n\t\treplay,\n\t\trelativeTo,\n\t\toffsetTop,\n\t\toffsetBottom,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst ReplayControl = useControlComponent( 'replay', controlVisibilityConfig.replay( interactionValues ) );\n\tconst RelativeToControl = useControlComponent(\n\t\t'relativeTo',\n\t\tcontrolVisibilityConfig.relativeTo( interactionValues )\n\t);\n\tconst OffsetTopControl = useControlComponent( 'offsetTop', controlVisibilityConfig.offsetTop( interactionValues ) );\n\tconst OffsetBottomControl = useControlComponent(\n\t\t'offsetBottom',\n\t\tcontrolVisibilityConfig.offsetBottom( interactionValues )\n\t);\n\n\tconst EasingControl = useControlComponent( 'easing' );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: number;\n\t\t\tdelay: number;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\toffsetTop: number;\n\t\t\toffsetBottom: number;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\n\t\tconst updatedInteraction = {\n\t\t\t...interaction,\n\t\t\tinteraction_id: interaction.interaction_id,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: updates.replay ?? replay,\n\t\t\t\teasing: updates.easing ?? easing,\n\t\t\t\trelativeTo: updates.relativeTo ?? relativeTo,\n\t\t\t\toffsetTop: updates.offsetTop ?? offsetTop,\n\t\t\t\toffsetBottom: updates.offsetBottom ?? offsetBottom,\n\t\t\t} ),\n\t\t};\n\n\t\tonChange( updatedInteraction );\n\n\t\tconst interactionId = extractString( updatedInteraction.interaction_id );\n\n\t\tsetTimeout( () => {\n\t\t\tonPlayInteraction( interactionId );\n\t\t}, 0 );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t{ TriggerControl && (\n\t\t\t\t\t<Field label={ __( 'Trigger', 'elementor' ) }>\n\t\t\t\t\t\t<TriggerControl value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<Field label={ __( 'Replay', 'elementor' ) }>\n\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t<Divider />\n\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t<Direction\n\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\tinteractionType={ type }\n\t\t\t\t\t/>\n\t\t\t\t</Field>\n\n\t\t\t\t{ controlVisibilityConfig.duration( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Duration', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.duration }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ controlVisibilityConfig.delay( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Delay', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( delay ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { delay: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.delay }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t{ controlVisibilityConfig.relativeTo( interactionValues ) && RelativeToControl && (\n\t\t\t\t<>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t\t<Field label={ __( 'Relative To', 'elementor' ) }>\n\t\t\t\t\t\t\t<RelativeToControl\n\t\t\t\t\t\t\t\tvalue={ relativeTo }\n\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { relativeTo: v } ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t{ OffsetTopControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Top', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetTopControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetTop ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { offsetTop: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ OffsetBottomControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Bottom', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetBottomControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetBottom ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) =>\n\t\t\t\t\t\t\t\t\t\tupdateInteraction( { offsetBottom: parseInt( v, 10 ) } )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Divider />\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ EasingControl && (\n\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t<Field label={ __( 'Easing', 'elementor' ) }>\n\t\t\t\t\t\t<EasingControl\n\t\t\t\t\t\t\tvalue={ easing }\n\t\t\t\t\t\t\tonChange={ ( v ) => {\n\t\t\t\t\t\t\t\tupdateInteraction( { easing: v } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t</PopoverContent>\n\t);\n};\n\ntype FieldProps = {\n\tlabel: string;\n} & PropsWithChildren;\n\nfunction Field( { label, children }: FieldProps ) {\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\toffsetTop: FieldProps;\n\toffsetBottom: FieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\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<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t>\n\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { UnstableSizeField } from '@elementor/editor-controls';\nimport { sizePropTypeUtil, type SizePropValue } from '@elementor/editor-props';\n\nimport { type FieldProps } from '../../types';\n\nconst DEFAULT_UNIT = 'ms';\n\nexport function TimeFrameIndicator( { value, onChange, defaultValue }: FieldProps & { defaultValue: number } ) {\n\tconst sizeValue = toSizeValue( value ?? defaultValue );\n\n\tconst setValue = useCallback(\n\t\t( size: number ) => {\n\t\t\tonChange( String( size ) );\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\tconst handleChange = ( newValue: SizePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue.size as number );\n\t};\n\n\tconst handleBlur = () => {\n\t\tif ( ! sizeValue.size ) {\n\t\t\tsetValue( defaultValue );\n\t\t}\n\t};\n\n\treturn (\n\t\t<UnstableSizeField\n\t\t\tunits={ [ DEFAULT_UNIT ] }\n\t\t\tvalue={ sizeValue }\n\t\t\tonChange={ handleChange }\n\t\t\tonBlur={ handleBlur }\n\t\t\tInputProps={ {\n\t\t\t\tinputProps: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t);\n}\n\nconst toSizeValue = ( value: string ): SizePropValue[ 'value' ] => {\n\treturn sizePropTypeUtil.create( {\n\t\tsize: Number( value ),\n\t\tunit: DEFAULT_UNIT,\n\t} ).value;\n};\n","import * as React from 'react';\nimport { type SyntheticEvent, useCallback, useMemo, useState } from 'react';\nimport { ControlFormLabel, PopoverContent } from '@elementor/editor-controls';\nimport { useBreakpoints } from '@elementor/editor-responsive';\nimport { Autocomplete, Chip, Grid, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { InteractionItemValue } from '../types';\nimport { createInteractionBreakpoints, extractExcludedBreakpoints } from '../utils/prop-value-utils';\n\ntype BreakpointOption = {\n\tlabel: string;\n\tvalue: string;\n};\n\ntype InteractionSettingsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n};\n\nconst SIZE = 'tiny';\n\nexport const InteractionSettings = ( { interaction, onChange }: InteractionSettingsProps ) => {\n\tconst breakpoints = useBreakpoints();\n\n\tconst availableBreakpoints = useMemo(\n\t\t() => breakpoints.map( ( breakpoint ) => ( { label: breakpoint.label, value: String( breakpoint.id ) } ) ),\n\t\t[ breakpoints ]\n\t);\n\n\tconst [ selectedBreakpoints, setSelectedBreakpoints ] = useState< BreakpointOption[] >( () => {\n\t\tconst excluded = extractExcludedBreakpoints( interaction.breakpoints ).filter( ( excludedBreakpoint ) => {\n\t\t\treturn availableBreakpoints.some( ( { value } ) => value === excludedBreakpoint );\n\t\t} );\n\n\t\treturn availableBreakpoints.filter( ( { value } ) => {\n\t\t\treturn ! excluded.includes( value );\n\t\t} );\n\t} );\n\n\tconst handleBreakpointChange = useCallback(\n\t\t( _: SyntheticEvent, newValue: BreakpointOption[] ) => {\n\t\t\tsetSelectedBreakpoints( newValue );\n\n\t\t\tconst selectedValues = newValue.map( ( option ) => option.value );\n\n\t\t\tconst newExcluded = availableBreakpoints\n\t\t\t\t.filter( ( breakpoint ) => ! selectedValues.includes( breakpoint.value ) )\n\t\t\t\t.map( ( breakpoint ) => breakpoint.value );\n\n\t\t\tconst updatedInteraction: InteractionItemValue = {\n\t\t\t\t...interaction,\n\t\t\t\t...( newExcluded.length > 0 && {\n\t\t\t\t\tbreakpoints: createInteractionBreakpoints( newExcluded ),\n\t\t\t\t} ),\n\t\t\t};\n\n\t\t\tif ( newExcluded.length === 0 ) {\n\t\t\t\tdelete updatedInteraction.breakpoints;\n\t\t\t}\n\n\t\t\tonChange( updatedInteraction );\n\t\t},\n\t\t[ interaction, availableBreakpoints, onChange ]\n\t);\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Stack direction=\"column\" gap={ 1 }>\n\t\t\t\t\t\t<ControlFormLabel sx={ { width: '100%' } }>\n\t\t\t\t\t\t\t{ __( 'Trigger on', 'elementor' ) }\n\t\t\t\t\t\t</ControlFormLabel>\n\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tvalue={ selectedBreakpoints }\n\t\t\t\t\t\t\tonChange={ handleBreakpointChange }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\toptions={ availableBreakpoints }\n\t\t\t\t\t\t\tisOptionEqualToValue={ ( option, value ) => option.value === value.value }\n\t\t\t\t\t\t\trenderInput={ ( params ) => <TextField { ...params } /> }\n\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\tvalues.map( ( option, index ) => {\n\t\t\t\t\t\t\t\t\tconst { key, ...chipProps } = getTagProps( { index } );\n\t\t\t\t\t\t\t\t\treturn <Chip key={ key } size={ SIZE } label={ option.label } { ...chipProps } />;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</PopoverContent>\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 { 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\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn interactions?.items?.length > 0;\n\t\t\t} );\n\n\t\t\treturn filtered.map( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId: element.id,\n\t\t\t\t\tinteractions: interactions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nconst EASING_OPTIONS = {\n\teaseIn: __( 'Ease In', 'elementor' ),\n\teaseInOut: __( 'Ease In Out', 'elementor' ),\n\teaseOut: __( 'Ease Out', 'elementor' ),\n\tbackIn: __( 'Back In', 'elementor' ),\n\tbackInOut: __( 'Back In Out', 'elementor' ),\n\tbackOut: __( 'Back Out', 'elementor' ),\n\tlinear: __( 'Linear', 'elementor' ),\n};\n\nconst DEFAULT_EASING = 'easeIn';\n\nexport function Easing( {}: FieldProps ) {\n\tconst availableOptions = Object.entries( EASING_OPTIONS ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select value={ DEFAULT_EASING } onChange={ () => {} } fullWidth displayEmpty size=\"tiny\">\n\t\t\t{ availableOptions.map( ( option ) => {\n\t\t\t\tconst isDisabled = DEFAULT_EASING !== option.key;\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ option.key } value={ option.key } disabled={ isDisabled }>\n\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { CheckIcon, MinusIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type ReplayFieldProps } from '../../types';\n\nexport function Replay( { onChange }: ReplayFieldProps ) {\n\tconst options: ToggleButtonGroupItem< boolean >[] = [\n\t\t{\n\t\t\tvalue: false,\n\t\t\tdisabled: false,\n\t\t\tlabel: __( 'No', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <MinusIcon fontSize={ size } />,\n\t\t},\n\t\t{\n\t\t\tvalue: true,\n\t\t\tdisabled: true,\n\t\t\tlabel: __( 'Yes', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <CheckIcon fontSize={ size } />,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ false } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } 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} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\tvalue={ value }\n\t\t>\n\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value ) {\n\t\t\tinteraction.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { Easing } from './components/controls/easing';\nimport { Replay } from './components/controls/replay';\nimport { Trigger } from './components/controls/trigger';\nimport { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { registerInteractionsControl } from './interactions-controls-registry';\nimport { 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\tinitCleanInteractionIdsOnDuplicate();\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'trigger',\n\t\t\tcomponent: Trigger,\n\t\t\toptions: [ 'load', 'scrollIn' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'easing',\n\t\t\tcomponent: Easing,\n\t\t\toptions: [ 'easeIn' ],\n\t\t} );\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'replay',\n\t\t\tcomponent: Replay,\n\t\t\toptions: [ 'true', 'false' ],\n\t\t} );\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","useCallback","useEffect","useMemo","__","React","createContext","useContext","React","useCallback","Divider","__","React","useMemo","__","React","__","React","__","React","ToggleButtonGroupUi","__","React","useCallback","useMemo","__","React","useCallback","useMemo","useState","ControlFormLabel","PopoverContent","Grid","Stack","__","useMemo","useState","useCallback","PopoverContent","Grid","Stack","ControlFormLabel","__","useCallback","__","Divider","useCallback","useEffect","useMemo","__","useElementInteractions","useState","useCallback","Stack","React","MenuListItem","Select","__","React","ToggleButtonGroupUi","__","React","MenuListItem","Select","__"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-interactions",
3
- "version": "4.0.0-533",
3
+ "version": "4.0.0-535",
4
4
  "private": false,
5
5
  "author": "Elementor Team",
6
6
  "homepage": "https://elementor.com/",
@@ -39,16 +39,16 @@
39
39
  "dev": "tsup --config=../../tsup.dev.ts"
40
40
  },
41
41
  "dependencies": {
42
- "@elementor/editor-controls": "4.0.0-533",
43
- "@elementor/editor-elements": "4.0.0-533",
44
- "@elementor/editor-props": "4.0.0-533",
45
- "@elementor/editor-responsive": "4.0.0-533",
46
- "@elementor/editor-ui": "4.0.0-533",
47
- "@elementor/editor-v1-adapters": "4.0.0-533",
42
+ "@elementor/editor-controls": "4.0.0-535",
43
+ "@elementor/editor-elements": "4.0.0-535",
44
+ "@elementor/editor-props": "4.0.0-535",
45
+ "@elementor/editor-responsive": "4.0.0-535",
46
+ "@elementor/editor-ui": "4.0.0-535",
47
+ "@elementor/editor-v1-adapters": "4.0.0-535",
48
48
  "@elementor/icons": "^1.63.0",
49
- "@elementor/session": "4.0.0-533",
49
+ "@elementor/session": "4.0.0-535",
50
50
  "@elementor/ui": "1.36.17",
51
- "@elementor/utils": "4.0.0-533",
51
+ "@elementor/utils": "4.0.0-535",
52
52
  "@wordpress/i18n": "^5.13.0"
53
53
  },
54
54
  "peerDependencies": {
@@ -5,21 +5,21 @@ import { __ } from '@wordpress/i18n';
5
5
 
6
6
  import { type ReplayFieldProps } from '../../types';
7
7
 
8
- export function Replay( { disabled = true }: ReplayFieldProps ) {
8
+ export function Replay( { onChange }: ReplayFieldProps ) {
9
9
  const options: ToggleButtonGroupItem< boolean >[] = [
10
10
  {
11
11
  value: false,
12
+ disabled: false,
12
13
  label: __( 'No', 'elementor' ),
13
14
  renderContent: ( { size } ) => <MinusIcon fontSize={ size } />,
14
15
  },
15
16
  {
16
17
  value: true,
18
+ disabled: true,
17
19
  label: __( 'Yes', 'elementor' ),
18
20
  renderContent: ( { size } ) => <CheckIcon fontSize={ size } />,
19
21
  },
20
22
  ];
21
23
 
22
- return (
23
- <ToggleButtonGroupUi items={ options } exclusive onChange={ () => {} } value={ false } disabled={ disabled } />
24
- );
24
+ return <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ false } />;
25
25
  }
package/src/init.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Easing } from './components/controls/easing';
2
+ import { Replay } from './components/controls/replay';
2
3
  import { Trigger } from './components/controls/trigger';
3
4
  import { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';
4
5
  import { registerInteractionsControl } from './interactions-controls-registry';
@@ -20,6 +21,11 @@ export function init() {
20
21
  component: Easing,
21
22
  options: [ 'easeIn' ],
22
23
  } );
24
+ registerInteractionsControl( {
25
+ type: 'replay',
26
+ component: Replay,
27
+ options: [ 'true', 'false' ],
28
+ } );
23
29
  } catch ( error ) {
24
30
  throw error;
25
31
  }