@elementor/editor-interactions 4.1.0-719 → 4.1.0-720
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/package.json +12 -12
- package/src/index.ts +1 -0
package/dist/index.d.mts
CHANGED
|
@@ -146,6 +146,22 @@ declare const REPEAT_TOOLTIPS: {
|
|
|
146
146
|
loop: string;
|
|
147
147
|
};
|
|
148
148
|
|
|
149
|
+
declare const DEFAULT_VALUES: {
|
|
150
|
+
trigger: string;
|
|
151
|
+
effect: string;
|
|
152
|
+
type: string;
|
|
153
|
+
direction: string;
|
|
154
|
+
duration: number;
|
|
155
|
+
delay: number;
|
|
156
|
+
replay: boolean;
|
|
157
|
+
easing: string;
|
|
158
|
+
relativeTo: string;
|
|
159
|
+
repeat: string;
|
|
160
|
+
times: number;
|
|
161
|
+
start: number;
|
|
162
|
+
end: number;
|
|
163
|
+
};
|
|
164
|
+
|
|
149
165
|
type PlainKeyframeValue = {
|
|
150
166
|
opacity?: number;
|
|
151
167
|
scale?: {
|
|
@@ -245,4 +261,4 @@ declare const formatSizeValue: ({ size, unit }: SizeValue) => SizeStringValue;
|
|
|
245
261
|
|
|
246
262
|
declare const useElementInteractions: (elementId: ElementID) => ElementInteractions;
|
|
247
263
|
|
|
248
|
-
export { BASE_EASINGS, BASE_EFFECTS, BASE_REPLAY, BASE_TRIGGERS, type CreateInteractionsProviderOptions, EASING_OPTIONS, EFFECT_OPTIONS, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, EmptyState, type FieldProps, InteractionsTab, REPEAT_OPTIONS, REPEAT_TOOLTIPS, REPLAY_OPTIONS, type ReplayFieldProps, TRIGGER_OPTIONS, buildDisplayLabel, convertTimeUnit, createAnimationPreset, createBoolean, createConfig, createDefaultInteractionItem, createDefaultInteractions, createExcludedBreakpoints, createInteractionBreakpoints, createInteractionItem, createInteractionsProvider, createNumber, createString, createTimingConfig, extractBoolean, extractExcludedBreakpoints, extractSize, extractString, formatSizeValue, generateTempInteractionId, getInteractionsConfig, init, interactionsRepository, isTempId, parseSizeValue, registerInteractionsControl, resolveDirection, useElementInteractions };
|
|
264
|
+
export { BASE_EASINGS, BASE_EFFECTS, BASE_REPLAY, BASE_TRIGGERS, type CreateInteractionsProviderOptions, DEFAULT_VALUES, EASING_OPTIONS, EFFECT_OPTIONS, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, EmptyState, type FieldProps, InteractionsTab, REPEAT_OPTIONS, REPEAT_TOOLTIPS, REPLAY_OPTIONS, type ReplayFieldProps, TRIGGER_OPTIONS, buildDisplayLabel, convertTimeUnit, createAnimationPreset, createBoolean, createConfig, createDefaultInteractionItem, createDefaultInteractions, createExcludedBreakpoints, createInteractionBreakpoints, createInteractionItem, createInteractionsProvider, createNumber, createString, createTimingConfig, extractBoolean, extractExcludedBreakpoints, extractSize, extractString, formatSizeValue, generateTempInteractionId, getInteractionsConfig, init, interactionsRepository, isTempId, parseSizeValue, registerInteractionsControl, resolveDirection, useElementInteractions };
|
package/dist/index.d.ts
CHANGED
|
@@ -146,6 +146,22 @@ declare const REPEAT_TOOLTIPS: {
|
|
|
146
146
|
loop: string;
|
|
147
147
|
};
|
|
148
148
|
|
|
149
|
+
declare const DEFAULT_VALUES: {
|
|
150
|
+
trigger: string;
|
|
151
|
+
effect: string;
|
|
152
|
+
type: string;
|
|
153
|
+
direction: string;
|
|
154
|
+
duration: number;
|
|
155
|
+
delay: number;
|
|
156
|
+
replay: boolean;
|
|
157
|
+
easing: string;
|
|
158
|
+
relativeTo: string;
|
|
159
|
+
repeat: string;
|
|
160
|
+
times: number;
|
|
161
|
+
start: number;
|
|
162
|
+
end: number;
|
|
163
|
+
};
|
|
164
|
+
|
|
149
165
|
type PlainKeyframeValue = {
|
|
150
166
|
opacity?: number;
|
|
151
167
|
scale?: {
|
|
@@ -245,4 +261,4 @@ declare const formatSizeValue: ({ size, unit }: SizeValue) => SizeStringValue;
|
|
|
245
261
|
|
|
246
262
|
declare const useElementInteractions: (elementId: ElementID) => ElementInteractions;
|
|
247
263
|
|
|
248
|
-
export { BASE_EASINGS, BASE_EFFECTS, BASE_REPLAY, BASE_TRIGGERS, type CreateInteractionsProviderOptions, EASING_OPTIONS, EFFECT_OPTIONS, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, EmptyState, type FieldProps, InteractionsTab, REPEAT_OPTIONS, REPEAT_TOOLTIPS, REPLAY_OPTIONS, type ReplayFieldProps, TRIGGER_OPTIONS, buildDisplayLabel, convertTimeUnit, createAnimationPreset, createBoolean, createConfig, createDefaultInteractionItem, createDefaultInteractions, createExcludedBreakpoints, createInteractionBreakpoints, createInteractionItem, createInteractionsProvider, createNumber, createString, createTimingConfig, extractBoolean, extractExcludedBreakpoints, extractSize, extractString, formatSizeValue, generateTempInteractionId, getInteractionsConfig, init, interactionsRepository, isTempId, parseSizeValue, registerInteractionsControl, resolveDirection, useElementInteractions };
|
|
264
|
+
export { BASE_EASINGS, BASE_EFFECTS, BASE_REPLAY, BASE_TRIGGERS, type CreateInteractionsProviderOptions, DEFAULT_VALUES, EASING_OPTIONS, EFFECT_OPTIONS, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, EmptyState, type FieldProps, InteractionsTab, REPEAT_OPTIONS, REPEAT_TOOLTIPS, REPLAY_OPTIONS, type ReplayFieldProps, TRIGGER_OPTIONS, buildDisplayLabel, convertTimeUnit, createAnimationPreset, createBoolean, createConfig, createDefaultInteractionItem, createDefaultInteractions, createExcludedBreakpoints, createInteractionBreakpoints, createInteractionItem, createInteractionsProvider, createNumber, createString, createTimingConfig, extractBoolean, extractExcludedBreakpoints, extractSize, extractString, formatSizeValue, generateTempInteractionId, getInteractionsConfig, init, interactionsRepository, isTempId, parseSizeValue, registerInteractionsControl, resolveDirection, useElementInteractions };
|
package/dist/index.js
CHANGED
|
@@ -34,6 +34,7 @@ __export(index_exports, {
|
|
|
34
34
|
BASE_EFFECTS: () => BASE_EFFECTS,
|
|
35
35
|
BASE_REPLAY: () => BASE_REPLAY,
|
|
36
36
|
BASE_TRIGGERS: () => BASE_TRIGGERS,
|
|
37
|
+
DEFAULT_VALUES: () => DEFAULT_VALUES,
|
|
37
38
|
EASING_OPTIONS: () => EASING_OPTIONS,
|
|
38
39
|
EFFECT_OPTIONS: () => EFFECT_OPTIONS,
|
|
39
40
|
ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX: () => ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX,
|
|
@@ -2254,6 +2255,7 @@ function init() {
|
|
|
2254
2255
|
BASE_EFFECTS,
|
|
2255
2256
|
BASE_REPLAY,
|
|
2256
2257
|
BASE_TRIGGERS,
|
|
2258
|
+
DEFAULT_VALUES,
|
|
2257
2259
|
EASING_OPTIONS,
|
|
2258
2260
|
EFFECT_OPTIONS,
|
|
2259
2261
|
ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX,
|
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/hooks/use-element-interactions.ts","../src/interactions-controls-registry.ts","../src/utils/prop-value-utils.ts","../src/configs/time-constants.ts","../src/utils/size-transform-utils.ts","../src/utils/custom-effect-to-prop-value.ts","../src/utils/get-interactions-config.ts","../src/utils/temp-id-utils.ts","../src/utils/is-supported-interaction-item.ts","../src/utils/filter-interactions.ts","../src/contexts/popup-state-context.tsx","../src/utils/tracking.ts","../src/components/interactions-list.tsx","../src/contexts/interactions-item-context.tsx","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/utils/resolve-direction.ts","../src/components/controls/time-frame-indicator.tsx","../src/utils/time-conversion.ts","../src/components/field.tsx","../src/components/interaction-settings.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/commands/paste-interactions.ts","../src/commands/get-clipboard-elements.ts","../src/components/controls/direction.tsx","../src/components/controls/easing.tsx","../src/ui/promotion-select.tsx","../src/ui/interactions-promotion-chip.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/repeat.tsx","../src/ui/promotion-overlay-layout.tsx","../src/components/controls/replay.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.ts","../src/mcp/index.ts","../src/mcp/constants.ts","../src/mcp/resources/interactions-schema-resource.ts","../src/mcp/tools/schema.ts","../src/mcp/tools/manage-element-interaction-tool.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\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';\nexport type { InteractionItemPropValue, FieldProps, ReplayFieldProps } from './types';\nexport { TRIGGER_OPTIONS, BASE_TRIGGERS } from './components/controls/trigger';\nexport { EASING_OPTIONS, BASE_EASINGS } from './components/controls/easing';\nexport { REPLAY_OPTIONS, BASE_REPLAY } from './components/controls/replay';\nexport { EFFECT_OPTIONS, BASE_EFFECTS } from './components/controls/effect';\nexport { REPEAT_OPTIONS, REPEAT_TOOLTIPS } from './components/controls/repeat';\n\nexport {\n\tcreateString,\n\tcreateNumber,\n\tcreateBoolean,\n\tcreateTimingConfig,\n\tcreateConfig,\n\tcreateExcludedBreakpoints,\n\tcreateInteractionBreakpoints,\n\tcreateAnimationPreset,\n\tcreateInteractionItem,\n\tcreateDefaultInteractionItem,\n\tcreateDefaultInteractions,\n\textractString,\n\textractBoolean,\n\textractSize,\n\textractExcludedBreakpoints,\n\tbuildDisplayLabel,\n} from './utils/prop-value-utils';\n\nexport { generateTempInteractionId, isTempId } from './utils/temp-id-utils';\nexport { resolveDirection } from './utils/resolve-direction';\nexport { convertTimeUnit } from './utils/time-conversion';\nexport { parseSizeValue, formatSizeValue } from './utils/size-transform-utils';\nexport { useElementInteractions } from './hooks/use-element-interactions';\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 { 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 { useElementInteractions } from '../hooks/use-element-interactions';\nimport type { ElementInteractions } from '../types';\nimport { createDefaultInteractionItem } from '../utils/prop-value-utils';\nimport { trackInteractionCreated } from '../utils/tracking';\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\ttrackInteractionCreated( elementId, createDefaultInteractionItem() );\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} from '@elementor/editor-elements';\n\nimport { useElementInteractions } from '../hooks/use-element-interactions';\n\ntype InteractionsContextValue = {\n\telementId: string;\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\telementId,\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 { useState } from 'react';\nimport { type ElementID, type ElementInteractions, getElementInteractions } from '@elementor/editor-elements';\nimport { __privateUseListenTo as useListenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { filterInteractions } from '../utils/filter-interactions';\n\nexport const useElementInteractions = ( elementId: ElementID ) => {\n\tconst [ interactions, setInteractions ] = useState< ElementInteractions >( () => {\n\t\tconst initial = getElementInteractions( elementId );\n\t\tconst filteredInteractions = filterInteractions( initial?.items ?? [] );\n\n\t\treturn { version: initial?.version ?? 1, items: filteredInteractions };\n\t} );\n\n\tuseListenTo(\n\t\twindowEvent( 'elementor/element/update_interactions' ),\n\t\t() => {\n\t\t\tconst newInteractions = getElementInteractions( elementId );\n\t\t\tconst filteredInteractions = filterInteractions( newInteractions?.items ?? [] );\n\t\t\tsetInteractions( { version: newInteractions?.version ?? 1, items: filteredInteractions } );\n\t\t},\n\t\t[ elementId ]\n\t);\n\n\treturn interactions;\n};\n","import { type ComponentType } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport {\n\ttype DirectionFieldProps,\n\ttype FieldProps,\n\ttype RepeatFieldProps,\n\ttype ReplayFieldProps,\n\ttype TimesFieldProps,\n} from './types';\n\nexport type InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'repeat'\n\t| 'times'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'start'\n\t| 'end'\n\t| 'customEffects';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\tcustomEffects: FieldProps< PropValue >;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\trepeat: RepeatFieldProps;\n\ttimes: TimesFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\tstart: FieldProps;\n\tend: 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<\n\t\tFieldProps | DirectionFieldProps | ReplayFieldProps | RepeatFieldProps | TimesFieldProps\n\t>;\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 { type Unit } from '@elementor/editor-controls';\nimport { type PropValue, sizePropTypeUtil, type SizePropValue } from '@elementor/editor-props';\n\nimport { DEFAULT_TIME_UNIT, TIME_UNITS } from '../configs/time-constants';\nimport {\n\ttype AnimationPresetPropValue,\n\ttype BooleanPropValue,\n\ttype ConfigPropValue,\n\ttype ElementInteractions,\n\ttype ExcludedBreakpointsPropValue,\n\ttype InteractionBreakpointsPropValue,\n\ttype InteractionItemPropValue,\n\ttype InteractionItemValue,\n\ttype NumberPropValue,\n\ttype SizeStringValue,\n\ttype StringPropValue,\n\ttype TimingConfigPropValue,\n} from '../types';\nimport { formatSizeValue, parseSizeValue } from '../utils/size-transform-utils';\nimport { type PlainCustomEffect, toCustomEffectPropValue } from './custom-effect-to-prop-value';\nimport { getInteractionsConfig } from './get-interactions-config';\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: SizeStringValue, delay: SizeStringValue ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: sizePropTypeUtil.create( parseSizeValue( duration, TIME_UNITS, undefined, DEFAULT_TIME_UNIT ) ),\n\t\tdelay: sizePropTypeUtil.create( parseSizeValue( delay, TIME_UNITS, undefined, DEFAULT_TIME_UNIT ) ),\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 = 'viewport',\n\trepeat = '',\n\ttimes = 1,\n\tstart = 85,\n\tend = 15,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\trepeat?: string;\n\ttimes?: number;\n\tstart?: SizeStringValue;\n\tend?: SizeStringValue;\n} ): ConfigPropValue =>\n\t( {\n\t\t$$type: 'config',\n\t\tvalue: {\n\t\t\treplay: createBoolean( replay ),\n\t\t\teasing: createString( easing ),\n\t\t\trelativeTo: createString( relativeTo ),\n\t\t\trepeat: createString( repeat ),\n\t\t\ttimes: createNumber( times ),\n\t\t\tstart: createSize( start, '%' ),\n\t\t\tend: createSize( end, '%' ),\n\t\t},\n\t} ) as ConfigPropValue;\n\nconst createSize = ( value?: SizeStringValue, defaultUnit?: Unit, defaultValue?: SizeStringValue ) => {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\treturn sizePropTypeUtil.create( parseSizeValue( value, [ '%' ], defaultValue, defaultUnit ) );\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\trepeat,\n\ttimes,\n\tstart,\n\tend,\n\tcustomEffects,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: SizeStringValue;\n\tdelay: SizeStringValue;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\trepeat?: string;\n\ttimes?: number;\n\tstart?: SizeStringValue;\n\tend?: SizeStringValue;\n\tcustomEffects?: PropValue | PlainCustomEffect;\n} ): AnimationPresetPropValue => {\n\tconst customEffectProp = toCustomEffectPropValue( customEffects );\n\treturn {\n\t\t$$type: 'animation-preset-props',\n\t\tvalue: {\n\t\t\teffect: createString( effect ),\n\t\t\t...( customEffectProp !== undefined && { custom_effect: customEffectProp } ),\n\t\t\ttype: createString( type ),\n\t\t\tdirection: createString( direction ?? '' ),\n\t\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\t\tconfig: createConfig( {\n\t\t\t\treplay,\n\t\t\t\teasing,\n\t\t\t\trelativeTo,\n\t\t\t\trepeat,\n\t\t\t\ttimes,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t} ),\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\trepeat,\n\ttimes,\n\tstart,\n\tend,\n\texcludedBreakpoints,\n\tcustomEffects,\n}: {\n\ttrigger?: string;\n\teffect?: string;\n\ttype?: string;\n\tdirection?: string;\n\tduration?: SizeStringValue;\n\tdelay?: SizeStringValue;\n\tinteractionId?: string;\n\treplay?: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\trepeat?: string;\n\ttimes?: number;\n\tstart?: number;\n\tend?: number;\n\texcludedBreakpoints?: string[];\n\tcustomEffects?: PropValue | PlainCustomEffect;\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: effect ?? '',\n\t\t\ttype: type ?? '',\n\t\t\tdirection,\n\t\t\tduration: duration ?? 0,\n\t\t\tdelay: delay ?? 0,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\trepeat,\n\t\t\ttimes,\n\t\t\tstart,\n\t\t\tend,\n\t\t\tcustomEffects,\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\tconst { constants } = getInteractionsConfig();\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: constants.defaultDuration,\n\t\tdelay: constants.defaultDelay,\n\t\treplay: false,\n\t\teasing: constants.defaultEasing,\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 extractSize = ( prop?: SizePropValue, defaultValue?: SizeStringValue ): SizeStringValue => {\n\tif ( ! prop?.value ) {\n\t\treturn defaultValue as SizeStringValue;\n\t}\n\n\treturn formatSizeValue( prop.value );\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 = 'custom' === effect ? '' : capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import { type Unit } from '@elementor/editor-controls';\n\nexport const TIME_UNITS: Unit[] = [ 's', 'ms' ];\n\nexport const DEFAULT_TIME_UNIT = 'ms';\n","import { type Unit } from '@elementor/editor-controls';\nimport { type SizePropValue } from '@elementor/editor-props';\n\nimport { type SizeStringValue } from '../types';\n\ntype SizeValue = SizePropValue[ 'value' ];\ntype SizeUnit = SizeValue[ 'unit' ];\n\nconst SIZE_REGEX = /^(?:(-?\\d*\\.?\\d+)([a-z%]+)|([a-z%]+))$/i;\n\nexport const parseSizeValue = (\n\tvalue: SizeStringValue,\n\tallowedUnits: SizeUnit[],\n\tdefaultValue?: SizeStringValue,\n\tdefaultUnit?: Unit\n): SizeValue => {\n\tif ( typeof value === 'number' ) {\n\t\treturn {\n\t\t\tsize: value,\n\t\t\tunit: defaultUnit as Unit,\n\t\t};\n\t}\n\n\tconst sizeValue = tryParse( value, allowedUnits, defaultUnit );\n\n\tif ( sizeValue ) {\n\t\treturn sizeValue;\n\t}\n\n\tif ( defaultValue ) {\n\t\tconst fallbackSize = tryParse( defaultValue, allowedUnits, defaultUnit );\n\n\t\tif ( fallbackSize ) {\n\t\t\treturn fallbackSize;\n\t\t}\n\t}\n\n\treturn createSizeValue( null, defaultUnit );\n};\n\nconst tryParse = ( value: SizeStringValue, allowedUnits: SizeUnit[], defaultUnit?: Unit ): SizeValue | null => {\n\tif ( typeof value === 'number' ) {\n\t\treturn createSizeValue( value, defaultUnit );\n\t}\n\n\tconst match = value && value.match( SIZE_REGEX );\n\n\tif ( ! match ) {\n\t\tif ( value ) {\n\t\t\treturn {\n\t\t\t\tsize: Number( value ),\n\t\t\t\tunit: defaultUnit as Unit,\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconst size = match[ 1 ] ? parseFloat( match[ 1 ] ) : null;\n\tconst unit = ( match[ 2 ] || match[ 3 ] ) as SizeUnit;\n\n\tif ( ! allowedUnits.includes( unit ) ) {\n\t\treturn null;\n\t}\n\n\treturn createSizeValue( size, unit );\n};\n\nexport const formatSizeValue = ( { size, unit }: SizeValue ): SizeStringValue => {\n\treturn `${ size ?? '' }${ unit }` as SizeStringValue;\n};\n\nconst createSizeValue = ( size: number | null, unit?: SizeUnit ): SizeValue => {\n\treturn { size, unit } as SizeValue;\n};\n","import { type PropValue } from '@elementor/editor-props';\n\nconst CUSTOM_EFFECT_TYPE = 'custom-effect';\nconst KEYFRAMES_TYPE = 'keyframes';\nconst KEYFRAME_STOP_TYPE = 'keyframe-stop';\nconst KEYFRAME_STOP_SETTINGS_TYPE = 'keyframe-stop-settings';\nconst SIZE_TYPE = 'size';\nconst NUMBER_TYPE = 'number';\nconst TRANSFORM_SCALE_TYPE = 'transform-scale';\nconst TRANSFORM_ROTATE_TYPE = 'transform-rotate';\nconst TRANSFORM_MOVE_TYPE = 'transform-move';\nconst TRANSFORM_SKEW_TYPE = 'transform-skew';\nconst UNIT_PERCENT = '%';\nconst UNIT_DEG = 'deg';\nconst UNIT_PX = 'px';\n\nexport type PlainKeyframeValue = {\n\topacity?: number;\n\tscale?: { x: number; y: number };\n\trotate?: { x: number; y: number; z: number };\n\tmove?: { x: number; y: number; z: number };\n\tskew?: { x: number; y: number };\n};\n\nexport type PlainKeyframe = { stop: number; value: PlainKeyframeValue };\n\nexport type PlainCustomEffect = { keyframes: PlainKeyframe[] };\n\nconst isPlainCustomEffect = ( v: unknown ): v is PlainCustomEffect =>\n\ttypeof v === 'object' &&\n\tv !== null &&\n\t'keyframes' in v &&\n\tArray.isArray( ( v as PlainCustomEffect ).keyframes ) &&\n\t! ( '$$type' in v );\n\nconst toSizePropValue = ( size: number, unit: string = UNIT_PERCENT ): PropValue => ( {\n\t$$type: SIZE_TYPE,\n\tvalue: { size, unit },\n} );\n\nconst toNumberPropValue = ( n: number ): PropValue => ( {\n\t$$type: NUMBER_TYPE,\n\tvalue: n,\n} );\n\nconst toDimensionalNumberPropValue = (\n\ttype: string,\n\tplain: { x?: number; y?: number; z?: number },\n\tdefaults: { x: number; y: number; z: number }\n): PropValue => ( {\n\t$$type: type,\n\tvalue: {\n\t\tx: toNumberPropValue( plain.x ?? defaults.x ),\n\t\ty: toNumberPropValue( plain.y ?? defaults.y ),\n\t\tz: toNumberPropValue( plain.z ?? defaults.z ),\n\t},\n} );\n\nconst toDimensionalSizePropValue = (\n\ttype: string,\n\tplain: { x?: number; y?: number; z?: number },\n\tdefaults: { x: number; y: number; z: number },\n\tunit: string\n): PropValue => ( {\n\t$$type: type,\n\tvalue: {\n\t\tx: toSizePropValue( plain.x ?? defaults.x, unit ),\n\t\ty: toSizePropValue( plain.y ?? defaults.y, unit ),\n\t\tz: toSizePropValue( plain.z ?? defaults.z, unit ),\n\t},\n} );\n\nconst toSkewPropValue = ( plain: { x?: number; y?: number } ): PropValue => ( {\n\t$$type: TRANSFORM_SKEW_TYPE,\n\tvalue: {\n\t\tx: toSizePropValue( plain.x ?? 0, UNIT_DEG ),\n\t\ty: toSizePropValue( plain.y ?? 0, UNIT_DEG ),\n\t},\n} );\n\nconst toKeyframeStopSettingsPropValue = ( plain: PlainKeyframeValue ): PropValue => {\n\tconst value: Record< string, PropValue > = {};\n\tif ( plain.opacity !== undefined ) {\n\t\tconst percent = plain.opacity <= 1 ? Math.round( plain.opacity * 100 ) : plain.opacity;\n\t\tvalue.opacity = toSizePropValue( percent );\n\t}\n\tif ( plain.scale !== undefined ) {\n\t\tvalue.scale = toDimensionalNumberPropValue( TRANSFORM_SCALE_TYPE, plain.scale, { x: 1, y: 1, z: 1 } );\n\t}\n\tif ( plain.rotate !== undefined ) {\n\t\tvalue.rotate = toDimensionalSizePropValue(\n\t\t\tTRANSFORM_ROTATE_TYPE,\n\t\t\tplain.rotate,\n\t\t\t{ x: 0, y: 0, z: 0 },\n\t\t\tUNIT_DEG\n\t\t);\n\t}\n\tif ( plain.move !== undefined ) {\n\t\tvalue.move = toDimensionalSizePropValue( TRANSFORM_MOVE_TYPE, plain.move, { x: 0, y: 0, z: 0 }, UNIT_PX );\n\t}\n\tif ( plain.skew !== undefined ) {\n\t\tvalue.skew = toSkewPropValue( plain.skew );\n\t}\n\treturn { $$type: KEYFRAME_STOP_SETTINGS_TYPE, value };\n};\n\nconst isPlainKeyframe = ( v: unknown ): v is PlainKeyframe =>\n\ttypeof v === 'object' && v !== null && 'stop' in v && 'value' in v && ! ( '$$type' in v );\n\nconst toKeyframeStopPropValue = ( item: PlainKeyframe | PropValue ): PropValue => {\n\tif ( ! isPlainKeyframe( item ) ) {\n\t\treturn item as PropValue;\n\t}\n\treturn {\n\t\t$$type: KEYFRAME_STOP_TYPE,\n\t\tvalue: {\n\t\t\tstop: toSizePropValue( item.stop ),\n\t\t\tsettings: toKeyframeStopSettingsPropValue( item.value ),\n\t\t},\n\t};\n};\n\nconst toKeyframesPropValue = ( keyframes: ( PlainKeyframe | PropValue )[] ): PropValue => ( {\n\t$$type: KEYFRAMES_TYPE,\n\tvalue: keyframes.map( toKeyframeStopPropValue ),\n} );\n\nconst plainCustomEffectToPropValue = ( plain: PlainCustomEffect ): PropValue => ( {\n\t$$type: CUSTOM_EFFECT_TYPE,\n\tvalue: {\n\t\tkeyframes: toKeyframesPropValue( plain.keyframes as ( PlainKeyframe | PropValue )[] ),\n\t},\n} );\n\nexport const toCustomEffectPropValue = (\n\tcustomEffects: PropValue | PlainCustomEffect | undefined\n): PropValue | undefined => {\n\tif ( customEffects === undefined ) {\n\t\treturn undefined;\n\t}\n\tif ( isPlainCustomEffect( customEffects ) ) {\n\t\treturn plainCustomEffectToPropValue( customEffects );\n\t}\n\treturn customEffects as PropValue;\n};\n","import { type InteractionsConfig } from '../types';\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig ?? ( {} as InteractionsConfig );\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 { getInteractionsControlOptions, type InteractionsControlType } from '../interactions-controls-registry';\nimport { type InteractionItemPropValue } from '../types';\nimport { extractBoolean, extractString } from '../utils/prop-value-utils';\n\nexport function isSupportedInteractionItem( interaction: InteractionItemPropValue ): boolean {\n\tconst value = interaction.value;\n\n\tconst replay = extractBoolean( value.animation.value.config?.value.replay );\n\tif ( true === replay ) {\n\t\treturn hasSupport( 'replay', 'yes' );\n\t}\n\n\tconst trigger = extractString( value.trigger );\n\tconst easing = extractString( value.animation.value.config?.value.easing );\n\tconst effect = extractString( value.animation.value.effect );\n\n\tconst checks: Array< [ string, string ] > = [\n\t\t[ 'trigger', trigger ],\n\t\t[ 'easing', easing ],\n\t\t[ 'effect', effect ],\n\t];\n\n\treturn checks.every( ( [ controlType, controlValue ] ) => {\n\t\tif ( controlValue === '' || controlValue === null ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn hasSupport( controlType, controlValue );\n\t} );\n}\n\nfunction hasSupport( controlType: string, controlValue: string ) {\n\tconst supportedOptions = getInteractionsControlOptions( controlType as InteractionsControlType );\n\n\tif ( 1 > supportedOptions.length ) {\n\t\treturn true;\n\t}\n\n\treturn supportedOptions.includes( controlValue );\n}\n","import { type InteractionItemPropValue } from '@elementor/editor-elements';\n\nimport { isSupportedInteractionItem } from './is-supported-interaction-item';\n\nexport const filterInteractions = ( interactions: InteractionItemPropValue[] ) => {\n\treturn interactions.filter( ( interaction ) => {\n\t\treturn isSupportedInteractionItem( interaction );\n\t} );\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 { getElementLabel } from '@elementor/editor-elements';\nimport { getMixpanel } from '@elementor/events';\n\nimport type { InteractionItemPropValue } from '../types';\nimport { extractString } from './prop-value-utils';\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\thover: 'Hover',\n\tclick: 'Click',\n};\n\nconst capitalize = ( s: string ) => s.charAt( 0 ).toUpperCase() + s.slice( 1 );\n\nexport const trackInteractionCreated = ( elementId: string, item: InteractionItemPropValue ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.interactions?.created ) {\n\t\treturn;\n\t}\n\n\tconst trigger = extractString( item.value.trigger );\n\tconst effect = extractString( item.value.animation.value.effect );\n\tconst type = extractString( item.value.animation.value.type );\n\n\tdispatchEvent?.( config.names.interactions.created, {\n\t\tapp_type: config?.appTypes?.editor,\n\t\twindow_name: config?.appTypes?.editor,\n\t\tinteraction_type: config?.triggers?.click,\n\t\ttarget_name: getElementLabel( elementId ),\n\t\tinteraction_result: 'interaction_created',\n\t\ttarget_location: config?.locations?.widgetPanel,\n\t\tlocation_l1: getElementLabel( elementId ),\n\t\tlocation_l2: 'interactions',\n\t\tinteraction_description: 'interaction_created',\n\t\tinteraction_trigger: TRIGGER_LABELS[ trigger ] ?? capitalize( trigger ),\n\t\tinteraction_effect:\n\t\t\teffect === 'custom' ? capitalize( effect ) : `${ capitalize( effect ) } ${ capitalize( type ) }`,\n\t} );\n};\n","import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater, type SetRepeaterValuesMeta } 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 { useInteractionsContext } from '../contexts/interactions-context';\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { trackInteractionCreated } from '../utils/tracking';\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\tconst { elementId } = useInteractionsContext();\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(\n\t\t\tnewItems: ElementInteractions[ 'items' ],\n\t\t\t_: unknown,\n\t\t\tmeta?: SetRepeaterValuesMeta< InteractionItemPropValue >\n\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\tif ( meta?.action?.type === 'add' ) {\n\t\t\t\tconst addedItem = meta.action.payload[ 0 ]?.item;\n\t\t\t\tif ( addedItem ) {\n\t\t\t\t\ttrackInteractionCreated( elementId, addedItem );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[ interactions, handleUpdateInteractions, elementId ]\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","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 { extractString } from '../utils/prop-value-utils';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( {\n\tindex,\n\tvalue: interaction,\n}: {\n\tindex: number;\n\tvalue: InteractionItemPropValue;\n} ) => {\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\tconst interactionId = extractString( interaction.value.interaction_id );\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\tkey={ interactionId }\n\t\t\t\t\tinteraction={ interaction.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\n\t\t\t\t\tkey={ interactionId }\n\t\t\t\t\tinteraction={ interaction.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type ComponentType, useMemo } from 'react';\nimport { PopoverContent } from '@elementor/editor-controls';\nimport { type PropValue } from '@elementor/editor-props';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport { type FieldProps, type InteractionItemValue, type SizeStringValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractSize,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { resolveDirection } from '../utils/resolve-direction';\nimport { parseSizeValue } from '../utils/size-transform-utils';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Field } from './field';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nexport const 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\trepeat: '',\n\ttimes: 1,\n\tstart: 85,\n\tend: 15,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn', 'hover', 'click' ];\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| 'start'\n\t| 'end'\n\t| 'customEffects'\n\t| 'repeat'\n\t| 'times';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: SizeStringValue;\n\tdelay: SizeStringValue;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\tstart: SizeStringValue;\n\tend: SizeStringValue;\n\tcustomEffects?: PropValue;\n\trepeat: string;\n\ttimes: 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\tcustom: ( values ) => values.effect === 'custom',\n\teffectType: ( values ) => values.effect !== 'custom',\n\tdirection: ( values ) => values.effect !== 'custom',\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\tstart: ( values ) => values.trigger === 'scrollOn',\n\tend: ( values ) => values.trigger === 'scrollOn',\n\trepeat: ( values ) => values.trigger !== 'scrollOn',\n\ttimes: ( values ) => values.trigger !== 'scrollOn' && values.repeat === 'times',\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 normalizeTimesValue( value: unknown, fallback: number ): number {\n\tconst numericValue = Number( value );\n\tif ( ! Number.isFinite( numericValue ) ) {\n\t\treturn fallback;\n\t}\n\treturn Math.max( 1, Math.floor( numericValue ) );\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 customEffects = interaction.animation.value.custom_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 = extractSize( interaction.animation.value.timing_config.value.duration );\n\tconst delay = extractSize( interaction.animation.value.timing_config.value.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 configValue = interaction.animation.value.config?.value;\n\tconst repeat = extractString( configValue?.repeat, DEFAULT_VALUES.repeat );\n\tconst times = normalizeTimesValue( configValue?.times?.value, DEFAULT_VALUES.times );\n\n\tconst start = extractSize( interaction.animation.value.config?.value.start, DEFAULT_VALUES.start );\n\tconst end = extractSize( interaction.animation.value.config?.value.end, DEFAULT_VALUES.end );\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\trepeat,\n\t\ttimes,\n\t\tstart,\n\t\tend,\n\t\tcustomEffects,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst EffectControl = useControlComponent( 'effect' );\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 StartControl = useControlComponent( 'start', controlVisibilityConfig.start( interactionValues ) );\n\tconst EndControl = useControlComponent( 'end', controlVisibilityConfig.end( interactionValues ) );\n\tconst CustomEffectControl = useControlComponent(\n\t\t'customEffects',\n\t\tcontrolVisibilityConfig.custom( interactionValues )\n\t) as ComponentType< FieldProps< PropValue > >;\n\n\tconst EffectTypeControl = useControlComponent(\n\t\t'effectType',\n\t\tcontrolVisibilityConfig.effectType( interactionValues )\n\t);\n\tconst DirectionControl = useControlComponent( 'direction', controlVisibilityConfig.direction( interactionValues ) );\n\tconst RepeatControl = useControlComponent(\n\t\t'repeat',\n\t\tcontrolVisibilityConfig.repeat( interactionValues )\n\t) as ComponentType< FieldProps< string > >;\n\tconst TimesControl = useControlComponent(\n\t\t'times',\n\t\tcontrolVisibilityConfig.times( interactionValues )\n\t) as ComponentType< FieldProps< number > >;\n\tconst EasingControl = useControlComponent( 'easing' );\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: SizeStringValue;\n\t\t\tdelay: SizeStringValue;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\trepeat: string;\n\t\t\ttimes?: number;\n\t\t\tstart: SizeStringValue;\n\t\t\tend: SizeStringValue;\n\t\t\tcustomEffects?: PropValue;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection(\n\t\t\t'direction' in updates,\n\t\t\tupdates.effect,\n\t\t\tupdates.direction,\n\t\t\tdirection,\n\t\t\teffect\n\t\t);\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\trepeat: updates.repeat ?? repeat,\n\t\t\t\ttimes: updates.times ?? times,\n\t\t\t\tstart: updates.start ?? start,\n\t\t\t\tend: updates.end ?? end,\n\t\t\t\tcustomEffects: updates.customEffects ?? customEffects,\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{ EffectControl && (\n\t\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t\t<EffectControl value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ CustomEffectControl && (\n\t\t\t\t\t<Field label={ __( 'Custom Effect', 'elementor' ) }>\n\t\t\t\t\t\t<CustomEffectControl\n\t\t\t\t\t\t\tvalue={ customEffects }\n\t\t\t\t\t\t\tonChange={ ( v: PropValue ) => updateInteraction( { customEffects: v } ) }\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{ EffectTypeControl && (\n\t\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t\t<EffectTypeControl value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ DirectionControl && (\n\t\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t\t<DirectionControl\n\t\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\t\tinteractionType={ type }\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{ RepeatControl && (\n\t\t\t\t\t<Field label={ __( 'Repeat', 'elementor' ) }>\n\t\t\t\t\t\t<RepeatControl value={ repeat } onChange={ ( v ) => updateInteraction( { repeat: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ TimesControl && (\n\t\t\t\t\t<Field label={ __( 'Times', 'elementor' ) }>\n\t\t\t\t\t\t<TimesControl\n\t\t\t\t\t\t\tvalue={ times }\n\t\t\t\t\t\t\tonChange={ ( v ) =>\n\t\t\t\t\t\t\t\tupdateInteraction( {\n\t\t\t\t\t\t\t\t\ttimes: normalizeTimesValue( v, DEFAULT_VALUES.times ),\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</Field>\n\t\t\t\t) }\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: v as SizeStringValue } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.duration as SizeStringValue }\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: v as SizeStringValue } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.delay as SizeStringValue }\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{ StartControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Start', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<StartControl\n\t\t\t\t\t\t\t\t\tvalue={ parseSizeValue( start, [ '%' ] ).size?.toString() ?? '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { start: v as SizeStringValue } ) }\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{ EndControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'End', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<EndControl\n\t\t\t\t\t\t\t\t\tvalue={ parseSizeValue( end, [ '%' ] ).size?.toString() ?? '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { end: v as SizeStringValue } ) }\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<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</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","export const resolveDirection = (\n\thasDirection: boolean,\n\tnewEffect?: string,\n\tnewDirection?: string,\n\tcurrentDirection?: string,\n\tcurrentEffect?: string\n) => {\n\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\treturn 'top';\n\t}\n\n\tif ( currentEffect === 'slide' && hasDirection ) {\n\t\treturn newDirection ?? 'top';\n\t}\n\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\tif ( hasDirection ) {\n\t\treturn newDirection;\n\t}\n\treturn currentDirection;\n};\n","import * as React from 'react';\nimport { useCallback, useRef } from 'react';\nimport { type Unit, UnstableSizeField } from '@elementor/editor-controls';\nimport { type SizePropValue } from '@elementor/editor-props';\n\nimport { DEFAULT_TIME_UNIT, TIME_UNITS } from '../../configs/time-constants';\nimport { type FieldProps, type SizeStringValue } from '../../types';\nimport { formatSizeValue, parseSizeValue } from '../../utils/size-transform-utils';\nimport { convertTimeUnit } from '../../utils/time-conversion';\n\nexport function TimeFrameIndicator( {\n\tvalue,\n\tonChange,\n\tdefaultValue,\n}: FieldProps & { defaultValue: SizeStringValue } ) {\n\tconst sizeValue = parseSizeValue( value as SizeStringValue, TIME_UNITS, defaultValue, DEFAULT_TIME_UNIT );\n\tconst prevUnitRef = useRef< Unit >( sizeValue.unit as Unit );\n\n\tconst setValue = useCallback(\n\t\t( size: SizePropValue[ 'value' ] ) => {\n\t\t\tconst unitChanged = prevUnitRef.current !== size.unit;\n\n\t\t\tif ( unitChanged ) {\n\t\t\t\tconst fromUnit = prevUnitRef.current;\n\t\t\t\tconst toUnit = size.unit as Unit;\n\n\t\t\t\tsize.size = convertTimeUnit( Number( size.size ), fromUnit, toUnit );\n\t\t\t\tprevUnitRef.current = toUnit;\n\t\t\t}\n\n\t\t\tonChange( formatSizeValue( size ) as string );\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\tconst handleChange = ( newValue: SizePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\tconst handleBlur = () => {\n\t\tif ( ! sizeValue.size ) {\n\t\t\tsetValue( parseSizeValue( defaultValue, TIME_UNITS, undefined, DEFAULT_TIME_UNIT ) );\n\t\t}\n\t};\n\n\treturn (\n\t\t<UnstableSizeField\n\t\t\tunits={ TIME_UNITS }\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","import { type Unit } from '@elementor/editor-controls';\n\ntype TimeUnit = Extract< Unit, 'ms' | 's' >;\nconst UNIT_TO_MS: Record< TimeUnit, number > = {\n\tms: 1,\n\ts: 1000,\n};\n\nexport const convertTimeUnit = ( value: number, from: Unit, to: Unit ): number => {\n\treturn ( value * UNIT_TO_MS[ from as TimeUnit ] ) / UNIT_TO_MS[ to as TimeUnit ];\n};\n","import * as React from 'react';\nimport { type PropsWithChildren } from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Grid } from '@elementor/ui';\n\nexport const Field = ( { label, children }: { label: string } & PropsWithChildren ) => {\n\treturn (\n\t\t<Grid item xs={ 12 } aria-label={ `${ label } control` }>\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 * 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 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\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 {\n\tgetContainer,\n\tgetElementInteractions,\n\tgetElementLabel,\n\tgetWidgetsCache,\n\tupdateElementInteractions,\n\ttype V1Element,\n\ttype V1ElementModelProps,\n} from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\tundoable,\n} from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport type { ElementInteractions } from '../types';\nimport { isSupportedInteractionItem } from '../utils/is-supported-interaction-item';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\nimport { getClipboardElements } from './get-clipboard-elements';\n\nfunction isAtomicContainer( container: V1Element ): boolean {\n\tconst type = container?.model.get( 'widgetType' ) || container?.model.get( 'elType' );\n\tconst widgetsCache = getWidgetsCache();\n\tconst elementConfig = widgetsCache?.[ type ];\n\n\treturn Boolean( elementConfig?.atomic_props_schema );\n}\n\ntype PasteInteractionsCommandArgs = {\n\tcontainer?: V1Element;\n\tcontainers?: V1Element[];\n\tstorageKey?: string;\n};\n\ntype PasteInteractionsPayload = {\n\tcontainers: V1Element[];\n\tnewInteractions: ElementInteractions;\n};\n\nfunction getTitleForContainers( containers: V1Element[] ): string {\n\treturn containers.length > 1 ? __( 'Elements', 'elementor' ) : getElementLabel( containers[ 0 ].id );\n}\n\nfunction normalizeClipboardInteractions( raw: V1ElementModelProps[ 'interactions' ] ): ElementInteractions | null {\n\tif ( ! raw ) {\n\t\treturn null;\n\t}\n\n\tconst parsed: ElementInteractions = typeof raw === 'string' ? ( JSON.parse( raw ) as ElementInteractions ) : raw;\n\n\tconst payload = {\n\t\tversion: parsed?.version ?? 1,\n\t\titems: parsed?.items?.filter( ( item ) => isSupportedInteractionItem( item ) ) ?? [],\n\t};\n\n\tif ( ! payload.items.length ) {\n\t\treturn null;\n\t}\n\n\treturn payload;\n}\n\nfunction regenerateInteractionIds( interactions: ElementInteractions ): ElementInteractions {\n\tconst cloned = structuredClone( interactions ) as ElementInteractions;\n\n\tcloned.items?.forEach( ( item ) => {\n\t\tif ( item.$$type === 'interaction-item' && item.value ) {\n\t\t\titem.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\treturn cloned;\n}\n\nexport function initPasteInteractionsCommand() {\n\tconst undoablePasteInteractions = undoable(\n\t\t{\n\t\t\tdo: ( { containers, newInteractions }: PasteInteractionsPayload ) => {\n\t\t\t\tconst pasted = regenerateInteractionIds( newInteractions );\n\n\t\t\t\treturn containers.map( ( container ) => {\n\t\t\t\t\tconst elementId = container.id;\n\t\t\t\t\tconst previous = getElementInteractions( elementId );\n\n\t\t\t\t\tupdateElementInteractions( {\n\t\t\t\t\t\telementId,\n\t\t\t\t\t\tinteractions: pasted,\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn { elementId, previous: previous ?? { version: 1, items: [] } };\n\t\t\t\t} );\n\t\t\t},\n\t\t\tundo: ( _: PasteInteractionsPayload, revertData ) => {\n\t\t\t\trevertData.forEach( ( { elementId, previous } ) => {\n\t\t\t\t\tupdateElementInteractions( {\n\t\t\t\t\t\telementId,\n\t\t\t\t\t\tinteractions: previous.items?.length ? previous : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttitle: ( { containers } ) => getTitleForContainers( containers ),\n\t\t\tsubtitle: __( 'Interactions Pasted', 'elementor' ),\n\t\t}\n\t);\n\n\tlistenTo( commandStartEvent( 'document/elements/paste-interactions' ), ( e ) => {\n\t\tconst args = ( e as CommandEvent ).args as PasteInteractionsCommandArgs;\n\t\tconst containers = args.containers ?? ( args.container ? [ args.container ] : [] );\n\t\tconst storageKey = args.storageKey ?? 'clipboard';\n\n\t\tif ( ! containers.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst clipboardElements = getClipboardElements( storageKey );\n\t\tconst [ clipboardElement ] = clipboardElements ?? [];\n\n\t\tif ( ! clipboardElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newInteractions = normalizeClipboardInteractions( clipboardElement.interactions );\n\n\t\tif ( ! newInteractions ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingContainers = containers.filter( ( c ) => getContainer( c.id ) ) as V1Element[];\n\t\tconst validContainers = existingContainers.filter( isAtomicContainer );\n\n\t\tif ( ! validContainers.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tundoablePasteInteractions( { containers: validContainers, newInteractions } );\n\t} );\n}\n","import type { V1ElementModelProps } from '@elementor/editor-elements';\n\nexport function getClipboardElements( storageKey: string = 'clipboard' ): V1ElementModelProps[] | undefined {\n\ttry {\n\t\tconst storedData = JSON.parse( localStorage.getItem( 'elementor' ) ?? '{}' );\n\n\t\treturn storedData[ storageKey ]?.elements as V1ElementModelProps[] | undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { StyledToggleButton, StyledToggleButtonGroup } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nconst AXIS: Record< Direction, 'vertical' | 'horizontal' > = {\n\ttop: 'vertical',\n\tbottom: 'vertical',\n\tleft: 'horizontal',\n\tright: 'horizontal',\n};\n\nfunction parseValue( value: string ): Direction[] {\n\treturn value.split( '-' ).filter( Boolean ) as Direction[];\n}\n\nfunction serializeValue( directions: Direction[] ): string {\n\tconst vertical = directions.find( ( d ) => d === 'top' || d === 'bottom' );\n\tconst horizontal = directions.find( ( d ) => d === 'left' || d === 'right' );\n\tif ( vertical && horizontal ) {\n\t\treturn `${ vertical }-${ horizontal }`;\n\t}\n\treturn directions[ 0 ] ?? '';\n}\n\nfunction toggleDirection( current: Direction[], clicked: Direction ): Direction[] {\n\tif ( current.includes( clicked ) ) {\n\t\treturn current.filter( ( d ) => d !== clicked );\n\t}\n\tconst filtered = current.filter( ( d ) => AXIS[ d ] !== AXIS[ clicked ] );\n\treturn [ ...filtered, clicked ];\n}\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst isIn = interactionType === 'in';\n\n\tconst options = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tdir: 'top' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowDownSmallIcon : ArrowUpSmallIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdir: 'bottom' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowUpSmallIcon : ArrowDownSmallIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdir: 'left' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowRightIcon : ArrowLeftIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdir: 'right' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowLeftIcon : ArrowRightIcon,\n\t\t\t},\n\t\t],\n\t\t[ isIn ]\n\t);\n\n\tconst selectedDirections = useMemo( () => parseValue( value ), [ value ] );\n\n\treturn (\n\t\t<StyledToggleButtonGroup\n\t\t\tsize=\"tiny\"\n\t\t\tjustify=\"end\"\n\t\t\tsx={ {\n\t\t\t\tdisplay: 'grid',\n\t\t\t\tgridTemplateColumns: 'repeat(4, minmax(0, 25%))',\n\t\t\t\twidth: '100%',\n\t\t\t} }\n\t\t>\n\t\t\t{ options.map( ( { dir, label, Icon } ) => (\n\t\t\t\t<Tooltip key={ dir } title={ label } disableFocusListener placement=\"top\">\n\t\t\t\t\t<StyledToggleButton\n\t\t\t\t\t\tvalue={ dir }\n\t\t\t\t\t\tselected={ selectedDirections.includes( dir ) }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tisPlaceholder={ false }\n\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\tconst next = toggleDirection( selectedDirections, dir );\n\t\t\t\t\t\t\tonChange( serializeValue( next ) );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon fontSize=\"tiny\" />\n\t\t\t\t\t</StyledToggleButton>\n\t\t\t\t</Tooltip>\n\t\t\t) ) }\n\t\t</StyledToggleButtonGroup>\n\t);\n}\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nimport { PromotionSelect } from '../../ui/promotion-select';\nimport { DEFAULT_VALUES } from '../interaction-details';\n\nconst TRACKING_DATA = { target_name: 'interactions_easing', location_l2: 'interactions' } as const;\n\nexport const 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\nexport const BASE_EASINGS: string[] = [ 'easeIn' ];\n\nexport function Easing( {}: FieldProps ) {\n\tconst baseOptions = Object.fromEntries(\n\t\tObject.entries( EASING_OPTIONS ).filter( ( [ key ] ) => BASE_EASINGS.includes( key ) )\n\t);\n\n\tconst disabledOptions = Object.fromEntries(\n\t\tObject.entries( EASING_OPTIONS ).filter( ( [ key ] ) => ! BASE_EASINGS.includes( key ) )\n\t);\n\n\treturn (\n\t\t<PromotionSelect\n\t\t\tvalue={ DEFAULT_VALUES.easing }\n\t\t\tbaseOptions={ baseOptions }\n\t\t\tdisabledOptions={ disabledOptions }\n\t\t\tpromotionContent={ __( 'Upgrade to control the smoothness of the interaction.', 'elementor' ) }\n\t\t\tupgradeUrl=\"https://go.elementor.com/go-pro-interactions-easing-modal/\"\n\t\t\ttrackingData={ TRACKING_DATA }\n\t\t/>\n\t);\n}\n","import * as React from 'react';\nimport { type MouseEvent, useRef } from 'react';\nimport { type PromotionTrackingData } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { MenuSubheader, Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionsPromotionChip, type InteractionsPromotionChipRef } from './interactions-promotion-chip';\n\ntype PromotionSelectProps = {\n\tvalue: string;\n\tonChange?: ( value: string ) => void;\n\tbaseOptions: Record< string, string >;\n\tdisabledOptions: Record< string, string >;\n\tpromotionLabel?: string;\n\tpromotionContent: string;\n\tupgradeUrl: string;\n\ttrackingData: PromotionTrackingData;\n};\n\nexport function PromotionSelect( {\n\tvalue,\n\tonChange,\n\tbaseOptions,\n\tdisabledOptions,\n\tpromotionLabel,\n\tpromotionContent,\n\tupgradeUrl,\n\ttrackingData,\n}: PromotionSelectProps ) {\n\tconst promotionRef = useRef< InteractionsPromotionChipRef >( null );\n\tconst anchorRef = useRef< HTMLElement >( null );\n\n\treturn (\n\t\t<Select\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( e: SelectChangeEvent< string > ) => onChange?.( e.target.value ) }\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tMenuProps={ { disablePortal: true } }\n\t\t>\n\t\t\t{ Object.entries( baseOptions ).map( ( [ key, label ] ) => (\n\t\t\t\t<MenuListItem key={ key } value={ key }>\n\t\t\t\t\t{ label }\n\t\t\t\t</MenuListItem>\n\t\t\t) ) }\n\n\t\t\t<MenuSubheader\n\t\t\t\tref={ anchorRef }\n\t\t\t\tsx={ {\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t\tfontWeight: '400',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t} }\n\t\t\t\tonMouseDown={ ( e: MouseEvent ) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tpromotionRef.current?.toggle();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ promotionLabel ?? __( 'PRO features', 'elementor' ) }\n\t\t\t\t<InteractionsPromotionChip\n\t\t\t\t\tcontent={ promotionContent }\n\t\t\t\t\tupgradeUrl={ upgradeUrl }\n\t\t\t\t\tref={ promotionRef }\n\t\t\t\t\tanchorRef={ anchorRef }\n\t\t\t\t\ttrackingData={ trackingData }\n\t\t\t\t/>\n\t\t\t</MenuSubheader>\n\n\t\t\t{ Object.entries( disabledOptions ).map( ( [ key, label ] ) => (\n\t\t\t\t<MenuListItem key={ key } value={ key } disabled sx={ { pl: 3 } }>\n\t\t\t\t\t{ label }\n\t\t\t\t</MenuListItem>\n\t\t\t) ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { forwardRef, type MouseEvent, type RefObject, useCallback, useImperativeHandle, useState } from 'react';\nimport { type PromotionTrackingData, trackUpgradePromotionClick, trackViewPromotion } from '@elementor/editor-controls';\nimport { PromotionChip, PromotionPopover, useCanvasClickHandler } from '@elementor/editor-ui';\nimport { Box } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport type InteractionsPromotionChipProps = {\n\tcontent: string;\n\tupgradeUrl: string;\n\tanchorRef?: RefObject< HTMLElement | null >;\n\ttrackingData: PromotionTrackingData;\n};\n\nexport type InteractionsPromotionChipRef = {\n\ttoggle: () => void;\n};\n\nexport const InteractionsPromotionChip = forwardRef< InteractionsPromotionChipRef, InteractionsPromotionChipProps >(\n\t( { content, upgradeUrl, anchorRef, trackingData }, ref ) => {\n\t\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\t\tuseCanvasClickHandler( isOpen, () => setIsOpen( false ) );\n\n\t\tconst toggle = useCallback( () => {\n\t\t\tsetIsOpen( ( prev ) => {\n\t\t\t\tif ( ! prev ) {\n\t\t\t\t\ttrackViewPromotion( trackingData );\n\t\t\t\t}\n\t\t\t\treturn ! prev;\n\t\t\t} );\n\t\t}, [ trackingData ] );\n\n\t\tuseImperativeHandle( ref, () => ( { toggle } ), [ toggle ] );\n\n\t\tconst handleToggle = ( e: MouseEvent ) => {\n\t\t\te.stopPropagation();\n\t\t\ttoggle();\n\t\t};\n\n\t\treturn (\n\t\t\t<PromotionPopover\n\t\t\t\topen={ isOpen }\n\t\t\t\ttitle={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tcontent={ content }\n\t\t\t\tctaText={ __( 'Upgrade now', 'elementor' ) }\n\t\t\t\tctaUrl={ upgradeUrl }\n\t\t\t\tanchorRef={ anchorRef }\n\t\t\t\tplacement={ anchorRef ? 'right-start' : undefined }\n\t\t\t\tonClose={ ( e: MouseEvent ) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tsetIsOpen( false );\n\t\t\t\t} }\n\t\t\t\tonCtaClick={ () => trackUpgradePromotionClick( trackingData ) }\n\t\t\t>\n\t\t\t\t<Box\n\t\t\t\t\tonMouseDown={ ( e: MouseEvent ) => e.stopPropagation() }\n\t\t\t\t\tonClick={ handleToggle }\n\t\t\t\t\tsx={ { cursor: 'pointer', display: 'inline-flex', mr: 1 } }\n\t\t\t\t>\n\t\t\t\t\t<PromotionChip />\n\t\t\t\t</Box>\n\t\t\t</PromotionPopover>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nimport { PromotionSelect } from '../../ui/promotion-select';\nimport { DEFAULT_VALUES } from '../interaction-details';\n\nconst TRACKING_DATA = { target_name: 'interactions_effect', location_l2: 'interactions' } as const;\n\nexport const EFFECT_OPTIONS = {\n\tfade: __( 'Fade', 'elementor' ),\n\tslide: __( 'Slide', 'elementor' ),\n\tscale: __( 'Scale', 'elementor' ),\n\tcustom: __( 'Custom', 'elementor' ),\n};\n\nexport const BASE_EFFECTS: string[] = [ 'fade', 'slide', 'scale' ];\n\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst baseOptions = Object.fromEntries(\n\t\tObject.entries( EFFECT_OPTIONS ).filter( ( [ key ] ) => BASE_EFFECTS.includes( key ) )\n\t);\n\n\tconst disabledOptions = Object.fromEntries(\n\t\tObject.entries( EFFECT_OPTIONS ).filter( ( [ key ] ) => ! BASE_EFFECTS.includes( key ) )\n\t);\n\n\treturn (\n\t\t<PromotionSelect\n\t\t\tvalue={ value in baseOptions ? value : DEFAULT_VALUES.effect }\n\t\t\tonChange={ onChange }\n\t\t\tbaseOptions={ baseOptions }\n\t\t\tdisabledOptions={ disabledOptions }\n\t\t\tpromotionLabel={ __( 'PRO effects', 'elementor' ) }\n\t\t\tpromotionContent={ __(\n\t\t\t\t'Upgrade to further customize your animation with opacity, scale, move, rotate and more.',\n\t\t\t\t'elementor'\n\t\t\t) }\n\t\t\tupgradeUrl=\"https://go.elementor.com/go-pro-interactions-custom-effect-modal/\"\n\t\t\ttrackingData={ TRACKING_DATA }\n\t\t/>\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 { useRef } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { Number123Icon, RepeatIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionsPromotionChip } from '../../ui/interactions-promotion-chip';\nimport { PromotionOverlayLayout } from '../../ui/promotion-overlay-layout';\n\nconst TRACKING_DATA = { target_name: 'interactions_repeat', location_l2: 'interactions' } as const;\n\nexport const REPEAT_OPTIONS = {\n\ttimes: __( 'times', 'elementor' ),\n\tloop: __( 'loop', 'elementor' ),\n};\n\nexport const REPEAT_TOOLTIPS = {\n\ttimes: __( 'Enable number', 'elementor' ),\n\tloop: __( 'Infinite repeat', 'elementor' ),\n};\n\nexport function Repeat() {\n\tconst repeatContainerRef = useRef< HTMLDivElement >( null );\n\n\tconst options: ToggleButtonGroupItem< string >[] = [\n\t\t{\n\t\t\tvalue: REPEAT_OPTIONS.times,\n\t\t\tdisabled: true,\n\t\t\tlabel: REPEAT_TOOLTIPS.times,\n\t\t\trenderContent: ( { size } ) => <Number123Icon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: REPEAT_OPTIONS.loop,\n\t\t\tdisabled: true,\n\t\t\tlabel: REPEAT_TOOLTIPS.loop,\n\t\t\trenderContent: ( { size } ) => <RepeatIcon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t<PromotionOverlayLayout\n\t\t\tref={ repeatContainerRef }\n\t\t\tpromotionChip={\n\t\t\t\t<InteractionsPromotionChip\n\t\t\t\t\tcontent={ __( 'Upgrade to control how many times the animation repeats.', 'elementor' ) }\n\t\t\t\t\tupgradeUrl={ 'https://go.elementor.com/go-pro-interactions-repeat-modal/' }\n\t\t\t\t\tanchorRef={ repeatContainerRef }\n\t\t\t\t\ttrackingData={ TRACKING_DATA }\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ () => {} } value={ '' } />\n\t\t</PromotionOverlayLayout>\n\t);\n}\n","import * as React from 'react';\nimport { forwardRef, type ReactNode } from 'react';\nimport { Box } from '@elementor/ui';\n\nconst OVERLAY_GRID = '1 / 1';\nconst CHIP_OFFSET = '50%';\n\ntype PromotionOverlayLayoutProps = {\n\tchildren: ReactNode;\n\tpromotionChip: ReactNode;\n};\n\nexport const PromotionOverlayLayout = forwardRef< HTMLDivElement, PromotionOverlayLayoutProps >(\n\t( { children, promotionChip }, ref ) => (\n\t\t<Box ref={ ref } sx={ { display: 'grid', alignItems: 'center' } }>\n\t\t\t<Box sx={ { gridArea: OVERLAY_GRID } }>{ children }</Box>\n\t\t\t<Box sx={ { gridArea: OVERLAY_GRID, marginInlineEnd: CHIP_OFFSET, justifySelf: 'end' } }>\n\t\t\t\t{ promotionChip }\n\t\t\t</Box>\n\t\t</Box>\n\t)\n);\n","import * as React from 'react';\nimport { useRef } 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';\nimport { InteractionsPromotionChip } from '../../ui/interactions-promotion-chip';\nimport { PromotionOverlayLayout } from '../../ui/promotion-overlay-layout';\n\nconst TRACKING_DATA = { target_name: 'interactions_replay', location_l2: 'interactions' } as const;\n\nexport const REPLAY_OPTIONS = {\n\tno: __( 'No', 'elementor' ),\n\tyes: __( 'Yes', 'elementor' ),\n};\n\nexport const BASE_REPLAY: string[] = [ 'no' ];\n\nexport function Replay( { onChange }: ReplayFieldProps ) {\n\tconst replayContainerRef = useRef< HTMLDivElement >( null );\n\tconst options: ToggleButtonGroupItem< boolean >[] = [\n\t\t{\n\t\t\tvalue: false,\n\t\t\tdisabled: false,\n\t\t\tlabel: REPLAY_OPTIONS.no,\n\t\t\trenderContent: ( { size } ) => <MinusIcon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: true,\n\t\t\tdisabled: true,\n\t\t\tlabel: REPLAY_OPTIONS.yes,\n\t\t\trenderContent: ( { size } ) => <CheckIcon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t<PromotionOverlayLayout\n\t\t\tref={ replayContainerRef }\n\t\t\tpromotionChip={\n\t\t\t\t<InteractionsPromotionChip\n\t\t\t\t\tcontent={ __( 'Upgrade to run the animation every time its trigger occurs.', 'elementor' ) }\n\t\t\t\t\tupgradeUrl={ 'https://go.elementor.com/go-pro-interactions-replay-modal/' }\n\t\t\t\t\tanchorRef={ replayContainerRef }\n\t\t\t\t\ttrackingData={ TRACKING_DATA }\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ false } />\n\t\t</PromotionOverlayLayout>\n\t);\n}\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nimport { PromotionSelect } from '../../ui/promotion-select';\nimport { DEFAULT_VALUES } from '../interaction-details';\n\nconst TRACKING_DATA = { target_name: 'interactions_trigger', location_l2: 'interactions' } as const;\n\nexport const TRIGGER_OPTIONS = {\n\tload: __( 'Page load', 'elementor' ),\n\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\tscrollOn: __( 'While scrolling', 'elementor' ),\n\thover: __( 'On hover', 'elementor' ),\n\tclick: __( 'On click', 'elementor' ),\n};\n\nexport const BASE_TRIGGERS: string[] = [ 'load', 'scrollIn' ];\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst baseOptions = Object.fromEntries(\n\t\tObject.entries( TRIGGER_OPTIONS ).filter( ( [ key ] ) => BASE_TRIGGERS.includes( key ) )\n\t);\n\n\tconst disabledOptions = Object.fromEntries(\n\t\tObject.entries( TRIGGER_OPTIONS ).filter( ( [ key ] ) => ! BASE_TRIGGERS.includes( key ) )\n\t);\n\n\treturn (\n\t\t<PromotionSelect\n\t\t\tvalue={ value in baseOptions ? value : DEFAULT_VALUES.trigger }\n\t\t\tonChange={ onChange }\n\t\t\tbaseOptions={ baseOptions }\n\t\t\tdisabledOptions={ disabledOptions }\n\t\t\tpromotionLabel={ __( 'PRO triggers', 'elementor' ) }\n\t\t\tpromotionContent={ __( 'Upgrade to unlock more interactions triggers.', 'elementor' ) }\n\t\t\tupgradeUrl=\"https://go.elementor.com/go-pro-interactions-triggers-modal/\"\n\t\t\ttrackingData={ TRACKING_DATA }\n\t\t/>\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 { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { MAX_INTERACTIONS_PER_ELEMENT } from './constants';\nimport { initInteractionsSchemaResource } from './resources/interactions-schema-resource';\nimport { initManageElementInteractionTool } from './tools/manage-element-interaction-tool';\n\nexport const initMcpInteractions = () => {\n\tconst reg = getMCPByDomain( 'interactions', {\n\t\tinstructions: `\n\t\tMCP server for managing element interactions and animations. Use this to add, modify, or remove animations and motion effects triggered by user events such as page load or scroll-into-view.\n\t\t** IMPORTANT **\n\t\tUse the \"interactions-schema\" resource to get the schema of the interactions.\n\t\tActions:\n\t\t- get: Read the current interactions on the element.\n\t\t- add: Add a new interaction (max ${ MAX_INTERACTIONS_PER_ELEMENT } per element).\n\t\t- update: Update an existing interaction by its interactionId.\n\t\t- delete: Remove a specific interaction by its interactionId.\n\t\t- clear: Remove all interactions from the element.\n\t\t\n\t\tFor add/update, provide: trigger, effect, effectType, direction (required for slide effect), duration, delay, easing.\n\t\tUse excludedBreakpoints to disable the animation on specific responsive breakpoints (e.g. [\"mobile\", \"tablet\"]).\n\t\tExample Get Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"get\",\n\t\t\t\"interactionId\": \"123\",\n\t\t\t\"animationData\": {\n\t\t\t\t\"trigger\": \"click\",\n\t\t\t\t\"effect\": \"fade\",\n\t\t\t}\n\t\t}\n\t\tExample Add Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"add\",\n\t\t\t\"animationData\": {\n\t\t\t\t\"effectType\": \"in\",\n\t\t\t\t\"direction\": \"top\",\n\t\t\t\t\"trigger\": \"click\",\n\t\t\t\t\"effect\": \"fade\",\n\t\t\t\t\"duration\": 1000,\n\t\t\t\t\"delay\": 0,\n\t\t\t\t\"easing\": \"easeIn\",\n\t\t\t\t\"excludedBreakpoints\": [\"mobile\", \"tablet\"],\n\t\t\t}\n\t\t}\n\t\tExample Update Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"update\",\n\t\t\t\"interactionId\": \"123\",\n\t\t\t\"animationData\": {\n\t\t\t\t\"trigger\": \"click\",\n\t\t\t\t\"effect\": \"fade\",\n\t\t\t}\n\t\t}\n\t\tExample Delete Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"delete\",\n\t\t\t\"interactionId\": \"123\",\n\t\t}\n\t\tExample Clear Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"clear\",\n\t\t}\n\t\t`,\n\t} );\n\treg.waitForReady().then( () => {\n\t\tinitInteractionsSchemaResource( reg );\n\t\tinitManageElementInteractionTool( reg );\n\t} );\n};\n","export const MAX_INTERACTIONS_PER_ELEMENT = 5;\n","import { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { isProActive } from '@elementor/utils';\n\nimport { baseSchema, proSchema } from '../tools/schema';\n\nexport const INTERACTIONS_SCHEMA_URI = 'elementor://interactions/schema';\n\nexport const initInteractionsSchemaResource = ( reg: MCPRegistryEntry ) => {\n\tconst { resource } = reg;\n\tconst schema = isProActive() ? { ...baseSchema, ...proSchema } : baseSchema;\n\n\tresource(\n\t\t'interactions-schema',\n\t\tINTERACTIONS_SCHEMA_URI,\n\t\t{\n\t\t\tdescription: 'Schema describing all available options for element interactions.',\n\t\t},\n\t\tasync () => {\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: INTERACTIONS_SCHEMA_URI,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( schema ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n};\n","import { z } from '@elementor/schema';\n\nexport const baseSchema = {\n\ttrigger: z.enum( [ 'load', 'scrollIn' ] ).optional().describe( 'Event that triggers the animation' ),\n\teffect: z.enum( [ 'fade', 'slide', 'scale' ] ).optional().describe( 'Animation effect type' ),\n\teffectType: z.enum( [ 'in', 'out' ] ).optional().describe( 'Whether the animation plays in or out' ),\n\tdirection: z\n\t\t.enum( [ 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right' ] )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Direction of the Animation. Can be one of the following or empty if not needed. At slide effect, this is required field.'\n\t\t),\n\tduration: z.number().min( 0 ).max( 10000 ).optional().describe( 'Animation duration in milliseconds' ),\n\tdelay: z.number().min( 0 ).max( 10000 ).optional().describe( 'Animation delay in milliseconds' ),\n\teasing: z.string().optional().describe( 'Easing function. See interactions schema for options.' ),\n\texcludedBreakpoints: z\n\t\t.array( z.string() )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Breakpoint IDs on which this interaction is disabled (e.g. [\"mobile\", \"tablet\"]). Omit to enable on all breakpoints.'\n\t\t),\n};\n\nexport const proSchema = {\n\ttrigger: z\n\t\t.enum( [ 'load', 'scrollIn', 'scrollOut', 'scrollOn', 'hover', 'click' ] )\n\t\t.optional()\n\t\t.describe( 'Event that triggers the animation' ),\n\teffect: z.enum( [ 'fade', 'slide', 'scale', 'custom' ] ).optional().describe( 'Animation effect type' ),\n\tcustomEffects: z\n\t\t.object( {\n\t\t\tkeyframes: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object( {\n\t\t\t\t\t\tstop: z.number().describe( 'The stop of the keyframe in percent, can be either 0 or 100' ),\n\t\t\t\t\t\tvalue: z.object( {\n\t\t\t\t\t\t\topacity: z.number().min( 0 ).max( 1 ).describe( 'The opacity of the keyframe' ),\n\t\t\t\t\t\t\tscale: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 1 ).describe( 'The x scale of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 1 ).describe( 'The y scale of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The scale of the keyframe' ),\n\t\t\t\t\t\t\trotate: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 360 ).describe( 'The x rotate of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 360 ).describe( 'The y rotate of the keyframe' ),\n\t\t\t\t\t\t\t\t\tz: z.number().min( 0 ).max( 360 ).describe( 'The z rotate of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The rotate of the keyframe' ),\n\t\t\t\t\t\t\tmove: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 1 ).describe( 'The x move of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 1 ).describe( 'The y move of the keyframe' ),\n\t\t\t\t\t\t\t\t\tz: z.number().min( 0 ).max( 1 ).describe( 'The z move of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The move of the keyframe' ),\n\t\t\t\t\t\t\tskew: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 360 ).describe( 'The x skew of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 360 ).describe( 'The y skew of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The skew of the keyframe' ),\n\t\t\t\t\t\t} ),\n\t\t\t\t\t} )\n\t\t\t\t)\n\t\t\t\t.describe( 'The keyframes of the custom effect' ),\n\t\t} )\n\t\t.optional()\n\t\t.describe( 'The custom effect to use for the animation' ),\n};\n","import { updateElementInteractions } from '@elementor/editor-elements';\nimport { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\nimport { isProActive } from '@elementor/utils';\n\nimport { interactionsRepository } from '../../interactions-repository';\nimport { type ElementInteractions } from '../../types';\nimport {\n\tcreateInteractionItem,\n\textractExcludedBreakpoints,\n\textractSize,\n\textractString,\n} from '../../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../../utils/temp-id-utils';\nimport { MAX_INTERACTIONS_PER_ELEMENT } from '../constants';\nimport { INTERACTIONS_SCHEMA_URI } from '../resources/interactions-schema-resource';\nimport { baseSchema, proSchema } from './schema';\n\nconst EMPTY_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nconst EFFECTS_WITHOUT_TYPE = [ 'custom' ];\n\nexport const initManageElementInteractionTool = ( reg: MCPRegistryEntry ) => {\n\tconst { addTool } = reg;\n\tconst extendedSchema = isProActive() ? { ...baseSchema, ...proSchema } : baseSchema;\n\tconst schema = {\n\t\telementId: z.string().describe( 'The ID of the element to read or modify interactions on' ),\n\t\taction: z\n\t\t\t.enum( [ 'get', 'add', 'update', 'delete', 'clear' ] )\n\t\t\t.describe( 'Operation to perform. Use \"get\" first to inspect existing interactions.' ),\n\t\tinteractionId: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe( 'Interaction ID — required for update and delete. Obtain from a prior \"get\" call.' ),\n\t\t...extendedSchema,\n\t};\n\n\taddTool( {\n\t\tname: 'manage-element-interaction',\n\t\tdescription: `Manage the element interaction.`,\n\t\tschema,\n\t\trequiredResources: [\n\t\t\t{ uri: INTERACTIONS_SCHEMA_URI, description: 'Interactions schema with all available options' },\n\t\t],\n\t\tisDestructive: true,\n\t\toutputSchema: {\n\t\t\tsuccess: z.boolean().describe( 'Whether the action was successful' ),\n\t\t\taction: z\n\t\t\t\t.enum( [ 'get', 'add', 'update', 'delete', 'clear' ] )\n\t\t\t\t.describe( 'Operation to perform. Use \"get\" first to inspect existing interactions.' ),\n\t\t\telementId: z.string().optional().describe( 'The ID of the element to read or modify interactions on' ),\n\t\t\tinteractions: z.array( z.any() ).optional().describe( 'The interactions on the element' ),\n\t\t\tcount: z.number().optional().describe( 'The number of interactions on the element' ),\n\t\t},\n\t\thandler: ( input: {\n\t\t\telementId: string;\n\t\t\taction: 'get' | 'add' | 'update' | 'delete' | 'clear';\n\t\t\tinteractionId?: string;\n\t\t\t[ key: string ]: unknown;\n\t\t} ) => {\n\t\t\tconst { elementId, action, interactionId, ...animationData } = input;\n\t\t\tconst { effectType, ...restAnimationData } = animationData as {\n\t\t\t\teffectType?: string;\n\t\t\t\t[ key: string ]: unknown;\n\t\t\t};\n\t\t\tconst effect = restAnimationData.effect as string | undefined;\n\t\t\tconst resolvedType =\n\t\t\t\teffectType ?? ( effect && ! EFFECTS_WITHOUT_TYPE.includes( effect ) ? 'in' : undefined );\n\n\t\t\tconst allInteractions = interactionsRepository.all();\n\t\t\tconst elementData = allInteractions.find( ( data ) => data.elementId === elementId );\n\t\t\tconst currentInteractions: ElementInteractions = elementData?.interactions ?? EMPTY_INTERACTIONS;\n\n\t\t\tif ( action === 'get' ) {\n\t\t\t\tconst summary = currentInteractions.items.map( ( item ) => {\n\t\t\t\t\tconst { value } = item;\n\t\t\t\t\tconst animValue = value.animation.value;\n\t\t\t\t\tconst timingValue = animValue.timing_config.value;\n\t\t\t\t\tconst configValue = animValue.config.value;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: extractString( value.interaction_id ),\n\t\t\t\t\t\ttrigger: extractString( value.trigger ),\n\t\t\t\t\t\teffect: extractString( animValue.effect ),\n\t\t\t\t\t\teffectType: extractString( animValue.type ),\n\t\t\t\t\t\tdirection: extractString( animValue.direction ),\n\t\t\t\t\t\tduration: extractSize( timingValue.duration ),\n\t\t\t\t\t\tdelay: extractSize( timingValue.delay ),\n\t\t\t\t\t\teasing: extractString( configValue.easing ),\n\t\t\t\t\t\texcludedBreakpoints: extractExcludedBreakpoints( value.breakpoints ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\telementId,\n\t\t\t\t\taction,\n\t\t\t\t\tinteractions: summary,\n\t\t\t\t\tcount: summary.length,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet updatedItems = [ ...currentInteractions.items ];\n\n\t\t\tswitch ( action ) {\n\t\t\t\tcase 'add': {\n\t\t\t\t\tif ( updatedItems.length >= MAX_INTERACTIONS_PER_ELEMENT ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Cannot add more than ${ MAX_INTERACTIONS_PER_ELEMENT } interactions per element. Current count: ${ updatedItems.length }. Delete an existing interaction first.`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst newItem = createInteractionItem( {\n\t\t\t\t\t\tinteractionId: generateTempInteractionId(),\n\t\t\t\t\t\t...restAnimationData,\n\t\t\t\t\t\ttype: resolvedType,\n\t\t\t\t\t} );\n\n\t\t\t\t\tupdatedItems = [ ...updatedItems, newItem ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'update': {\n\t\t\t\t\tif ( ! interactionId ) {\n\t\t\t\t\t\tthrow new Error( 'interactionId is required for the update action.' );\n\t\t\t\t\t}\n\n\t\t\t\t\tconst itemIndex = updatedItems.findIndex(\n\t\t\t\t\t\t( item ) => extractString( item.value.interaction_id ) === interactionId\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( itemIndex === -1 ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Interaction with ID \"${ interactionId }\" not found on element \"${ elementId }\".`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst updatedItem = createInteractionItem( {\n\t\t\t\t\t\tinteractionId,\n\t\t\t\t\t\t...restAnimationData,\n\t\t\t\t\t\ttype: resolvedType,\n\t\t\t\t\t} );\n\n\t\t\t\t\tupdatedItems = [\n\t\t\t\t\t\t...updatedItems.slice( 0, itemIndex ),\n\t\t\t\t\t\tupdatedItem,\n\t\t\t\t\t\t...updatedItems.slice( itemIndex + 1 ),\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'delete': {\n\t\t\t\t\tif ( ! interactionId ) {\n\t\t\t\t\t\tthrow new Error( 'interactionId is required for the delete action.' );\n\t\t\t\t\t}\n\n\t\t\t\t\tconst beforeCount = updatedItems.length;\n\t\t\t\t\tupdatedItems = updatedItems.filter(\n\t\t\t\t\t\t( item ) => extractString( item.value.interaction_id ) !== interactionId\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( updatedItems.length === beforeCount ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Interaction with ID \"${ interactionId }\" not found on element \"${ elementId }\".`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'clear': {\n\t\t\t\t\tupdatedItems = [];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst updatedInteractions: ElementInteractions = {\n\t\t\t\t...currentInteractions,\n\t\t\t\titems: updatedItems,\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tupdateElementInteractions( { elementId, interactions: updatedInteractions } );\n\t\t\t} catch ( error ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to update interactions for element \"${ elementId }\": ${\n\t\t\t\t\t\terror instanceof Error ? error.message : 'Unknown error'\n\t\t\t\t\t}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\taction,\n\t\t\t\telementId,\n\t\t\t\tcount: updatedItems.length,\n\t\t\t};\n\t\t},\n\t} );\n};\n","import { initPasteInteractionsCommand } from './commands/paste-interactions';\nimport { Direction } from './components/controls/direction';\nimport { Easing } from './components/controls/easing';\nimport { Effect } from './components/controls/effect';\nimport { EffectType } from './components/controls/effect-type';\nimport { Repeat } from './components/controls/repeat';\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 { initMcpInteractions } from './mcp';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\n\t\tinitCleanInteractionIdsOnDuplicate();\n\t\tinitPasteInteractionsCommand();\n\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\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'replay',\n\t\t\tcomponent: Replay,\n\t\t\toptions: [ 'no' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'effectType',\n\t\t\tcomponent: EffectType,\n\t\t\toptions: [ 'in', 'out' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'direction',\n\t\t\tcomponent: Direction,\n\t\t\toptions: [ 'top', 'bottom', 'left', 'right' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'effect',\n\t\t\tcomponent: Effect,\n\t\t\toptions: [ 'fade', 'slide', 'scale' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'repeat',\n\t\t\tcomponent: Repeat,\n\t\t} );\n\n\t\tinitMcpInteractions();\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_ui","React","import_react","import_editor_elements","useListenTo","React","import_react","import_editor_elements","TRIGGER_LABELS","capitalize","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","React","import_editor_controls","import_ui","React","import_react","import_editor_controls","import_ui","import_i18n","interactionId","import_editor_elements","import_editor_v1_adapters","listenTo","import_editor_elements","import_editor_v1_adapters","import_i18n","listenTo","React","import_react","import_editor_controls","import_icons","import_ui","import_i18n","React","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_i18n","TRACKING_DATA","React","import_editor_controls","import_i18n","React","import_react","import_editor_controls","import_icons","import_i18n","React","import_react","import_ui","TRACKING_DATA","React","import_react","import_editor_controls","import_icons","import_i18n","TRACKING_DATA","React","import_i18n","TRACKING_DATA","import_editor_elements","import_editor_v1_adapters","import_editor_elements","import_schema","import_utils"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/hooks/use-element-interactions.ts","../src/interactions-controls-registry.ts","../src/utils/prop-value-utils.ts","../src/configs/time-constants.ts","../src/utils/size-transform-utils.ts","../src/utils/custom-effect-to-prop-value.ts","../src/utils/get-interactions-config.ts","../src/utils/temp-id-utils.ts","../src/utils/is-supported-interaction-item.ts","../src/utils/filter-interactions.ts","../src/contexts/popup-state-context.tsx","../src/utils/tracking.ts","../src/components/interactions-list.tsx","../src/contexts/interactions-item-context.tsx","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/utils/resolve-direction.ts","../src/components/controls/time-frame-indicator.tsx","../src/utils/time-conversion.ts","../src/components/field.tsx","../src/components/interaction-settings.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/commands/paste-interactions.ts","../src/commands/get-clipboard-elements.ts","../src/components/controls/direction.tsx","../src/components/controls/easing.tsx","../src/ui/promotion-select.tsx","../src/ui/interactions-promotion-chip.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/repeat.tsx","../src/ui/promotion-overlay-layout.tsx","../src/components/controls/replay.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.ts","../src/mcp/index.ts","../src/mcp/constants.ts","../src/mcp/resources/interactions-schema-resource.ts","../src/mcp/tools/schema.ts","../src/mcp/tools/manage-element-interaction-tool.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\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';\nexport type { InteractionItemPropValue, FieldProps, ReplayFieldProps } from './types';\nexport { TRIGGER_OPTIONS, BASE_TRIGGERS } from './components/controls/trigger';\nexport { EASING_OPTIONS, BASE_EASINGS } from './components/controls/easing';\nexport { REPLAY_OPTIONS, BASE_REPLAY } from './components/controls/replay';\nexport { EFFECT_OPTIONS, BASE_EFFECTS } from './components/controls/effect';\nexport { REPEAT_OPTIONS, REPEAT_TOOLTIPS } from './components/controls/repeat';\nexport { DEFAULT_VALUES } from './components/interaction-details';\n\nexport {\n\tcreateString,\n\tcreateNumber,\n\tcreateBoolean,\n\tcreateTimingConfig,\n\tcreateConfig,\n\tcreateExcludedBreakpoints,\n\tcreateInteractionBreakpoints,\n\tcreateAnimationPreset,\n\tcreateInteractionItem,\n\tcreateDefaultInteractionItem,\n\tcreateDefaultInteractions,\n\textractString,\n\textractBoolean,\n\textractSize,\n\textractExcludedBreakpoints,\n\tbuildDisplayLabel,\n} from './utils/prop-value-utils';\n\nexport { generateTempInteractionId, isTempId } from './utils/temp-id-utils';\nexport { resolveDirection } from './utils/resolve-direction';\nexport { convertTimeUnit } from './utils/time-conversion';\nexport { parseSizeValue, formatSizeValue } from './utils/size-transform-utils';\nexport { useElementInteractions } from './hooks/use-element-interactions';\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 { 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 { useElementInteractions } from '../hooks/use-element-interactions';\nimport type { ElementInteractions } from '../types';\nimport { createDefaultInteractionItem } from '../utils/prop-value-utils';\nimport { trackInteractionCreated } from '../utils/tracking';\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\ttrackInteractionCreated( elementId, createDefaultInteractionItem() );\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} from '@elementor/editor-elements';\n\nimport { useElementInteractions } from '../hooks/use-element-interactions';\n\ntype InteractionsContextValue = {\n\telementId: string;\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\telementId,\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 { useState } from 'react';\nimport { type ElementID, type ElementInteractions, getElementInteractions } from '@elementor/editor-elements';\nimport { __privateUseListenTo as useListenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { filterInteractions } from '../utils/filter-interactions';\n\nexport const useElementInteractions = ( elementId: ElementID ) => {\n\tconst [ interactions, setInteractions ] = useState< ElementInteractions >( () => {\n\t\tconst initial = getElementInteractions( elementId );\n\t\tconst filteredInteractions = filterInteractions( initial?.items ?? [] );\n\n\t\treturn { version: initial?.version ?? 1, items: filteredInteractions };\n\t} );\n\n\tuseListenTo(\n\t\twindowEvent( 'elementor/element/update_interactions' ),\n\t\t() => {\n\t\t\tconst newInteractions = getElementInteractions( elementId );\n\t\t\tconst filteredInteractions = filterInteractions( newInteractions?.items ?? [] );\n\t\t\tsetInteractions( { version: newInteractions?.version ?? 1, items: filteredInteractions } );\n\t\t},\n\t\t[ elementId ]\n\t);\n\n\treturn interactions;\n};\n","import { type ComponentType } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport {\n\ttype DirectionFieldProps,\n\ttype FieldProps,\n\ttype RepeatFieldProps,\n\ttype ReplayFieldProps,\n\ttype TimesFieldProps,\n} from './types';\n\nexport type InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'repeat'\n\t| 'times'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'start'\n\t| 'end'\n\t| 'customEffects';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\tcustomEffects: FieldProps< PropValue >;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\trepeat: RepeatFieldProps;\n\ttimes: TimesFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\tstart: FieldProps;\n\tend: 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<\n\t\tFieldProps | DirectionFieldProps | ReplayFieldProps | RepeatFieldProps | TimesFieldProps\n\t>;\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 { type Unit } from '@elementor/editor-controls';\nimport { type PropValue, sizePropTypeUtil, type SizePropValue } from '@elementor/editor-props';\n\nimport { DEFAULT_TIME_UNIT, TIME_UNITS } from '../configs/time-constants';\nimport {\n\ttype AnimationPresetPropValue,\n\ttype BooleanPropValue,\n\ttype ConfigPropValue,\n\ttype ElementInteractions,\n\ttype ExcludedBreakpointsPropValue,\n\ttype InteractionBreakpointsPropValue,\n\ttype InteractionItemPropValue,\n\ttype InteractionItemValue,\n\ttype NumberPropValue,\n\ttype SizeStringValue,\n\ttype StringPropValue,\n\ttype TimingConfigPropValue,\n} from '../types';\nimport { formatSizeValue, parseSizeValue } from '../utils/size-transform-utils';\nimport { type PlainCustomEffect, toCustomEffectPropValue } from './custom-effect-to-prop-value';\nimport { getInteractionsConfig } from './get-interactions-config';\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: SizeStringValue, delay: SizeStringValue ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: sizePropTypeUtil.create( parseSizeValue( duration, TIME_UNITS, undefined, DEFAULT_TIME_UNIT ) ),\n\t\tdelay: sizePropTypeUtil.create( parseSizeValue( delay, TIME_UNITS, undefined, DEFAULT_TIME_UNIT ) ),\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 = 'viewport',\n\trepeat = '',\n\ttimes = 1,\n\tstart = 85,\n\tend = 15,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\trepeat?: string;\n\ttimes?: number;\n\tstart?: SizeStringValue;\n\tend?: SizeStringValue;\n} ): ConfigPropValue =>\n\t( {\n\t\t$$type: 'config',\n\t\tvalue: {\n\t\t\treplay: createBoolean( replay ),\n\t\t\teasing: createString( easing ),\n\t\t\trelativeTo: createString( relativeTo ),\n\t\t\trepeat: createString( repeat ),\n\t\t\ttimes: createNumber( times ),\n\t\t\tstart: createSize( start, '%' ),\n\t\t\tend: createSize( end, '%' ),\n\t\t},\n\t} ) as ConfigPropValue;\n\nconst createSize = ( value?: SizeStringValue, defaultUnit?: Unit, defaultValue?: SizeStringValue ) => {\n\tif ( ! value ) {\n\t\treturn;\n\t}\n\n\treturn sizePropTypeUtil.create( parseSizeValue( value, [ '%' ], defaultValue, defaultUnit ) );\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\trepeat,\n\ttimes,\n\tstart,\n\tend,\n\tcustomEffects,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: SizeStringValue;\n\tdelay: SizeStringValue;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\trepeat?: string;\n\ttimes?: number;\n\tstart?: SizeStringValue;\n\tend?: SizeStringValue;\n\tcustomEffects?: PropValue | PlainCustomEffect;\n} ): AnimationPresetPropValue => {\n\tconst customEffectProp = toCustomEffectPropValue( customEffects );\n\treturn {\n\t\t$$type: 'animation-preset-props',\n\t\tvalue: {\n\t\t\teffect: createString( effect ),\n\t\t\t...( customEffectProp !== undefined && { custom_effect: customEffectProp } ),\n\t\t\ttype: createString( type ),\n\t\t\tdirection: createString( direction ?? '' ),\n\t\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\t\tconfig: createConfig( {\n\t\t\t\treplay,\n\t\t\t\teasing,\n\t\t\t\trelativeTo,\n\t\t\t\trepeat,\n\t\t\t\ttimes,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t} ),\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\trepeat,\n\ttimes,\n\tstart,\n\tend,\n\texcludedBreakpoints,\n\tcustomEffects,\n}: {\n\ttrigger?: string;\n\teffect?: string;\n\ttype?: string;\n\tdirection?: string;\n\tduration?: SizeStringValue;\n\tdelay?: SizeStringValue;\n\tinteractionId?: string;\n\treplay?: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\trepeat?: string;\n\ttimes?: number;\n\tstart?: number;\n\tend?: number;\n\texcludedBreakpoints?: string[];\n\tcustomEffects?: PropValue | PlainCustomEffect;\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: effect ?? '',\n\t\t\ttype: type ?? '',\n\t\t\tdirection,\n\t\t\tduration: duration ?? 0,\n\t\t\tdelay: delay ?? 0,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\trepeat,\n\t\t\ttimes,\n\t\t\tstart,\n\t\t\tend,\n\t\t\tcustomEffects,\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\tconst { constants } = getInteractionsConfig();\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: constants.defaultDuration,\n\t\tdelay: constants.defaultDelay,\n\t\treplay: false,\n\t\teasing: constants.defaultEasing,\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 extractSize = ( prop?: SizePropValue, defaultValue?: SizeStringValue ): SizeStringValue => {\n\tif ( ! prop?.value ) {\n\t\treturn defaultValue as SizeStringValue;\n\t}\n\n\treturn formatSizeValue( prop.value );\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 = 'custom' === effect ? '' : capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import { type Unit } from '@elementor/editor-controls';\n\nexport const TIME_UNITS: Unit[] = [ 's', 'ms' ];\n\nexport const DEFAULT_TIME_UNIT = 'ms';\n","import { type Unit } from '@elementor/editor-controls';\nimport { type SizePropValue } from '@elementor/editor-props';\n\nimport { type SizeStringValue } from '../types';\n\ntype SizeValue = SizePropValue[ 'value' ];\ntype SizeUnit = SizeValue[ 'unit' ];\n\nconst SIZE_REGEX = /^(?:(-?\\d*\\.?\\d+)([a-z%]+)|([a-z%]+))$/i;\n\nexport const parseSizeValue = (\n\tvalue: SizeStringValue,\n\tallowedUnits: SizeUnit[],\n\tdefaultValue?: SizeStringValue,\n\tdefaultUnit?: Unit\n): SizeValue => {\n\tif ( typeof value === 'number' ) {\n\t\treturn {\n\t\t\tsize: value,\n\t\t\tunit: defaultUnit as Unit,\n\t\t};\n\t}\n\n\tconst sizeValue = tryParse( value, allowedUnits, defaultUnit );\n\n\tif ( sizeValue ) {\n\t\treturn sizeValue;\n\t}\n\n\tif ( defaultValue ) {\n\t\tconst fallbackSize = tryParse( defaultValue, allowedUnits, defaultUnit );\n\n\t\tif ( fallbackSize ) {\n\t\t\treturn fallbackSize;\n\t\t}\n\t}\n\n\treturn createSizeValue( null, defaultUnit );\n};\n\nconst tryParse = ( value: SizeStringValue, allowedUnits: SizeUnit[], defaultUnit?: Unit ): SizeValue | null => {\n\tif ( typeof value === 'number' ) {\n\t\treturn createSizeValue( value, defaultUnit );\n\t}\n\n\tconst match = value && value.match( SIZE_REGEX );\n\n\tif ( ! match ) {\n\t\tif ( value ) {\n\t\t\treturn {\n\t\t\t\tsize: Number( value ),\n\t\t\t\tunit: defaultUnit as Unit,\n\t\t\t};\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconst size = match[ 1 ] ? parseFloat( match[ 1 ] ) : null;\n\tconst unit = ( match[ 2 ] || match[ 3 ] ) as SizeUnit;\n\n\tif ( ! allowedUnits.includes( unit ) ) {\n\t\treturn null;\n\t}\n\n\treturn createSizeValue( size, unit );\n};\n\nexport const formatSizeValue = ( { size, unit }: SizeValue ): SizeStringValue => {\n\treturn `${ size ?? '' }${ unit }` as SizeStringValue;\n};\n\nconst createSizeValue = ( size: number | null, unit?: SizeUnit ): SizeValue => {\n\treturn { size, unit } as SizeValue;\n};\n","import { type PropValue } from '@elementor/editor-props';\n\nconst CUSTOM_EFFECT_TYPE = 'custom-effect';\nconst KEYFRAMES_TYPE = 'keyframes';\nconst KEYFRAME_STOP_TYPE = 'keyframe-stop';\nconst KEYFRAME_STOP_SETTINGS_TYPE = 'keyframe-stop-settings';\nconst SIZE_TYPE = 'size';\nconst NUMBER_TYPE = 'number';\nconst TRANSFORM_SCALE_TYPE = 'transform-scale';\nconst TRANSFORM_ROTATE_TYPE = 'transform-rotate';\nconst TRANSFORM_MOVE_TYPE = 'transform-move';\nconst TRANSFORM_SKEW_TYPE = 'transform-skew';\nconst UNIT_PERCENT = '%';\nconst UNIT_DEG = 'deg';\nconst UNIT_PX = 'px';\n\nexport type PlainKeyframeValue = {\n\topacity?: number;\n\tscale?: { x: number; y: number };\n\trotate?: { x: number; y: number; z: number };\n\tmove?: { x: number; y: number; z: number };\n\tskew?: { x: number; y: number };\n};\n\nexport type PlainKeyframe = { stop: number; value: PlainKeyframeValue };\n\nexport type PlainCustomEffect = { keyframes: PlainKeyframe[] };\n\nconst isPlainCustomEffect = ( v: unknown ): v is PlainCustomEffect =>\n\ttypeof v === 'object' &&\n\tv !== null &&\n\t'keyframes' in v &&\n\tArray.isArray( ( v as PlainCustomEffect ).keyframes ) &&\n\t! ( '$$type' in v );\n\nconst toSizePropValue = ( size: number, unit: string = UNIT_PERCENT ): PropValue => ( {\n\t$$type: SIZE_TYPE,\n\tvalue: { size, unit },\n} );\n\nconst toNumberPropValue = ( n: number ): PropValue => ( {\n\t$$type: NUMBER_TYPE,\n\tvalue: n,\n} );\n\nconst toDimensionalNumberPropValue = (\n\ttype: string,\n\tplain: { x?: number; y?: number; z?: number },\n\tdefaults: { x: number; y: number; z: number }\n): PropValue => ( {\n\t$$type: type,\n\tvalue: {\n\t\tx: toNumberPropValue( plain.x ?? defaults.x ),\n\t\ty: toNumberPropValue( plain.y ?? defaults.y ),\n\t\tz: toNumberPropValue( plain.z ?? defaults.z ),\n\t},\n} );\n\nconst toDimensionalSizePropValue = (\n\ttype: string,\n\tplain: { x?: number; y?: number; z?: number },\n\tdefaults: { x: number; y: number; z: number },\n\tunit: string\n): PropValue => ( {\n\t$$type: type,\n\tvalue: {\n\t\tx: toSizePropValue( plain.x ?? defaults.x, unit ),\n\t\ty: toSizePropValue( plain.y ?? defaults.y, unit ),\n\t\tz: toSizePropValue( plain.z ?? defaults.z, unit ),\n\t},\n} );\n\nconst toSkewPropValue = ( plain: { x?: number; y?: number } ): PropValue => ( {\n\t$$type: TRANSFORM_SKEW_TYPE,\n\tvalue: {\n\t\tx: toSizePropValue( plain.x ?? 0, UNIT_DEG ),\n\t\ty: toSizePropValue( plain.y ?? 0, UNIT_DEG ),\n\t},\n} );\n\nconst toKeyframeStopSettingsPropValue = ( plain: PlainKeyframeValue ): PropValue => {\n\tconst value: Record< string, PropValue > = {};\n\tif ( plain.opacity !== undefined ) {\n\t\tconst percent = plain.opacity <= 1 ? Math.round( plain.opacity * 100 ) : plain.opacity;\n\t\tvalue.opacity = toSizePropValue( percent );\n\t}\n\tif ( plain.scale !== undefined ) {\n\t\tvalue.scale = toDimensionalNumberPropValue( TRANSFORM_SCALE_TYPE, plain.scale, { x: 1, y: 1, z: 1 } );\n\t}\n\tif ( plain.rotate !== undefined ) {\n\t\tvalue.rotate = toDimensionalSizePropValue(\n\t\t\tTRANSFORM_ROTATE_TYPE,\n\t\t\tplain.rotate,\n\t\t\t{ x: 0, y: 0, z: 0 },\n\t\t\tUNIT_DEG\n\t\t);\n\t}\n\tif ( plain.move !== undefined ) {\n\t\tvalue.move = toDimensionalSizePropValue( TRANSFORM_MOVE_TYPE, plain.move, { x: 0, y: 0, z: 0 }, UNIT_PX );\n\t}\n\tif ( plain.skew !== undefined ) {\n\t\tvalue.skew = toSkewPropValue( plain.skew );\n\t}\n\treturn { $$type: KEYFRAME_STOP_SETTINGS_TYPE, value };\n};\n\nconst isPlainKeyframe = ( v: unknown ): v is PlainKeyframe =>\n\ttypeof v === 'object' && v !== null && 'stop' in v && 'value' in v && ! ( '$$type' in v );\n\nconst toKeyframeStopPropValue = ( item: PlainKeyframe | PropValue ): PropValue => {\n\tif ( ! isPlainKeyframe( item ) ) {\n\t\treturn item as PropValue;\n\t}\n\treturn {\n\t\t$$type: KEYFRAME_STOP_TYPE,\n\t\tvalue: {\n\t\t\tstop: toSizePropValue( item.stop ),\n\t\t\tsettings: toKeyframeStopSettingsPropValue( item.value ),\n\t\t},\n\t};\n};\n\nconst toKeyframesPropValue = ( keyframes: ( PlainKeyframe | PropValue )[] ): PropValue => ( {\n\t$$type: KEYFRAMES_TYPE,\n\tvalue: keyframes.map( toKeyframeStopPropValue ),\n} );\n\nconst plainCustomEffectToPropValue = ( plain: PlainCustomEffect ): PropValue => ( {\n\t$$type: CUSTOM_EFFECT_TYPE,\n\tvalue: {\n\t\tkeyframes: toKeyframesPropValue( plain.keyframes as ( PlainKeyframe | PropValue )[] ),\n\t},\n} );\n\nexport const toCustomEffectPropValue = (\n\tcustomEffects: PropValue | PlainCustomEffect | undefined\n): PropValue | undefined => {\n\tif ( customEffects === undefined ) {\n\t\treturn undefined;\n\t}\n\tif ( isPlainCustomEffect( customEffects ) ) {\n\t\treturn plainCustomEffectToPropValue( customEffects );\n\t}\n\treturn customEffects as PropValue;\n};\n","import { type InteractionsConfig } from '../types';\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig ?? ( {} as InteractionsConfig );\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 { getInteractionsControlOptions, type InteractionsControlType } from '../interactions-controls-registry';\nimport { type InteractionItemPropValue } from '../types';\nimport { extractBoolean, extractString } from '../utils/prop-value-utils';\n\nexport function isSupportedInteractionItem( interaction: InteractionItemPropValue ): boolean {\n\tconst value = interaction.value;\n\n\tconst replay = extractBoolean( value.animation.value.config?.value.replay );\n\tif ( true === replay ) {\n\t\treturn hasSupport( 'replay', 'yes' );\n\t}\n\n\tconst trigger = extractString( value.trigger );\n\tconst easing = extractString( value.animation.value.config?.value.easing );\n\tconst effect = extractString( value.animation.value.effect );\n\n\tconst checks: Array< [ string, string ] > = [\n\t\t[ 'trigger', trigger ],\n\t\t[ 'easing', easing ],\n\t\t[ 'effect', effect ],\n\t];\n\n\treturn checks.every( ( [ controlType, controlValue ] ) => {\n\t\tif ( controlValue === '' || controlValue === null ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn hasSupport( controlType, controlValue );\n\t} );\n}\n\nfunction hasSupport( controlType: string, controlValue: string ) {\n\tconst supportedOptions = getInteractionsControlOptions( controlType as InteractionsControlType );\n\n\tif ( 1 > supportedOptions.length ) {\n\t\treturn true;\n\t}\n\n\treturn supportedOptions.includes( controlValue );\n}\n","import { type InteractionItemPropValue } from '@elementor/editor-elements';\n\nimport { isSupportedInteractionItem } from './is-supported-interaction-item';\n\nexport const filterInteractions = ( interactions: InteractionItemPropValue[] ) => {\n\treturn interactions.filter( ( interaction ) => {\n\t\treturn isSupportedInteractionItem( interaction );\n\t} );\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 { getElementLabel } from '@elementor/editor-elements';\nimport { getMixpanel } from '@elementor/events';\n\nimport type { InteractionItemPropValue } from '../types';\nimport { extractString } from './prop-value-utils';\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\thover: 'Hover',\n\tclick: 'Click',\n};\n\nconst capitalize = ( s: string ) => s.charAt( 0 ).toUpperCase() + s.slice( 1 );\n\nexport const trackInteractionCreated = ( elementId: string, item: InteractionItemPropValue ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.interactions?.created ) {\n\t\treturn;\n\t}\n\n\tconst trigger = extractString( item.value.trigger );\n\tconst effect = extractString( item.value.animation.value.effect );\n\tconst type = extractString( item.value.animation.value.type );\n\n\tdispatchEvent?.( config.names.interactions.created, {\n\t\tapp_type: config?.appTypes?.editor,\n\t\twindow_name: config?.appTypes?.editor,\n\t\tinteraction_type: config?.triggers?.click,\n\t\ttarget_name: getElementLabel( elementId ),\n\t\tinteraction_result: 'interaction_created',\n\t\ttarget_location: config?.locations?.widgetPanel,\n\t\tlocation_l1: getElementLabel( elementId ),\n\t\tlocation_l2: 'interactions',\n\t\tinteraction_description: 'interaction_created',\n\t\tinteraction_trigger: TRIGGER_LABELS[ trigger ] ?? capitalize( trigger ),\n\t\tinteraction_effect:\n\t\t\teffect === 'custom' ? capitalize( effect ) : `${ capitalize( effect ) } ${ capitalize( type ) }`,\n\t} );\n};\n","import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater, type SetRepeaterValuesMeta } 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 { useInteractionsContext } from '../contexts/interactions-context';\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { trackInteractionCreated } from '../utils/tracking';\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\tconst { elementId } = useInteractionsContext();\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(\n\t\t\tnewItems: ElementInteractions[ 'items' ],\n\t\t\t_: unknown,\n\t\t\tmeta?: SetRepeaterValuesMeta< InteractionItemPropValue >\n\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\tif ( meta?.action?.type === 'add' ) {\n\t\t\t\tconst addedItem = meta.action.payload[ 0 ]?.item;\n\t\t\t\tif ( addedItem ) {\n\t\t\t\t\ttrackInteractionCreated( elementId, addedItem );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[ interactions, handleUpdateInteractions, elementId ]\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","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 { extractString } from '../utils/prop-value-utils';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( {\n\tindex,\n\tvalue: interaction,\n}: {\n\tindex: number;\n\tvalue: InteractionItemPropValue;\n} ) => {\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\tconst interactionId = extractString( interaction.value.interaction_id );\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\tkey={ interactionId }\n\t\t\t\t\tinteraction={ interaction.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\n\t\t\t\t\tkey={ interactionId }\n\t\t\t\t\tinteraction={ interaction.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type ComponentType, useMemo } from 'react';\nimport { PopoverContent } from '@elementor/editor-controls';\nimport { type PropValue } from '@elementor/editor-props';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport { type FieldProps, type InteractionItemValue, type SizeStringValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractSize,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { resolveDirection } from '../utils/resolve-direction';\nimport { parseSizeValue } from '../utils/size-transform-utils';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Field } from './field';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nexport const 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\trepeat: '',\n\ttimes: 1,\n\tstart: 85,\n\tend: 15,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn', 'hover', 'click' ];\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| 'start'\n\t| 'end'\n\t| 'customEffects'\n\t| 'repeat'\n\t| 'times';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: SizeStringValue;\n\tdelay: SizeStringValue;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\tstart: SizeStringValue;\n\tend: SizeStringValue;\n\tcustomEffects?: PropValue;\n\trepeat: string;\n\ttimes: 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\tcustom: ( values ) => values.effect === 'custom',\n\teffectType: ( values ) => values.effect !== 'custom',\n\tdirection: ( values ) => values.effect !== 'custom',\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\tstart: ( values ) => values.trigger === 'scrollOn',\n\tend: ( values ) => values.trigger === 'scrollOn',\n\trepeat: ( values ) => values.trigger !== 'scrollOn',\n\ttimes: ( values ) => values.trigger !== 'scrollOn' && values.repeat === 'times',\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 normalizeTimesValue( value: unknown, fallback: number ): number {\n\tconst numericValue = Number( value );\n\tif ( ! Number.isFinite( numericValue ) ) {\n\t\treturn fallback;\n\t}\n\treturn Math.max( 1, Math.floor( numericValue ) );\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 customEffects = interaction.animation.value.custom_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 = extractSize( interaction.animation.value.timing_config.value.duration );\n\tconst delay = extractSize( interaction.animation.value.timing_config.value.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 configValue = interaction.animation.value.config?.value;\n\tconst repeat = extractString( configValue?.repeat, DEFAULT_VALUES.repeat );\n\tconst times = normalizeTimesValue( configValue?.times?.value, DEFAULT_VALUES.times );\n\n\tconst start = extractSize( interaction.animation.value.config?.value.start, DEFAULT_VALUES.start );\n\tconst end = extractSize( interaction.animation.value.config?.value.end, DEFAULT_VALUES.end );\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\trepeat,\n\t\ttimes,\n\t\tstart,\n\t\tend,\n\t\tcustomEffects,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst EffectControl = useControlComponent( 'effect' );\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 StartControl = useControlComponent( 'start', controlVisibilityConfig.start( interactionValues ) );\n\tconst EndControl = useControlComponent( 'end', controlVisibilityConfig.end( interactionValues ) );\n\tconst CustomEffectControl = useControlComponent(\n\t\t'customEffects',\n\t\tcontrolVisibilityConfig.custom( interactionValues )\n\t) as ComponentType< FieldProps< PropValue > >;\n\n\tconst EffectTypeControl = useControlComponent(\n\t\t'effectType',\n\t\tcontrolVisibilityConfig.effectType( interactionValues )\n\t);\n\tconst DirectionControl = useControlComponent( 'direction', controlVisibilityConfig.direction( interactionValues ) );\n\tconst RepeatControl = useControlComponent(\n\t\t'repeat',\n\t\tcontrolVisibilityConfig.repeat( interactionValues )\n\t) as ComponentType< FieldProps< string > >;\n\tconst TimesControl = useControlComponent(\n\t\t'times',\n\t\tcontrolVisibilityConfig.times( interactionValues )\n\t) as ComponentType< FieldProps< number > >;\n\tconst EasingControl = useControlComponent( 'easing' );\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: SizeStringValue;\n\t\t\tdelay: SizeStringValue;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\trepeat: string;\n\t\t\ttimes?: number;\n\t\t\tstart: SizeStringValue;\n\t\t\tend: SizeStringValue;\n\t\t\tcustomEffects?: PropValue;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection(\n\t\t\t'direction' in updates,\n\t\t\tupdates.effect,\n\t\t\tupdates.direction,\n\t\t\tdirection,\n\t\t\teffect\n\t\t);\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\trepeat: updates.repeat ?? repeat,\n\t\t\t\ttimes: updates.times ?? times,\n\t\t\t\tstart: updates.start ?? start,\n\t\t\t\tend: updates.end ?? end,\n\t\t\t\tcustomEffects: updates.customEffects ?? customEffects,\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{ EffectControl && (\n\t\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t\t<EffectControl value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ CustomEffectControl && (\n\t\t\t\t\t<Field label={ __( 'Custom Effect', 'elementor' ) }>\n\t\t\t\t\t\t<CustomEffectControl\n\t\t\t\t\t\t\tvalue={ customEffects }\n\t\t\t\t\t\t\tonChange={ ( v: PropValue ) => updateInteraction( { customEffects: v } ) }\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{ EffectTypeControl && (\n\t\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t\t<EffectTypeControl value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ DirectionControl && (\n\t\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t\t<DirectionControl\n\t\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\t\tinteractionType={ type }\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{ RepeatControl && (\n\t\t\t\t\t<Field label={ __( 'Repeat', 'elementor' ) }>\n\t\t\t\t\t\t<RepeatControl value={ repeat } onChange={ ( v ) => updateInteraction( { repeat: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ TimesControl && (\n\t\t\t\t\t<Field label={ __( 'Times', 'elementor' ) }>\n\t\t\t\t\t\t<TimesControl\n\t\t\t\t\t\t\tvalue={ times }\n\t\t\t\t\t\t\tonChange={ ( v ) =>\n\t\t\t\t\t\t\t\tupdateInteraction( {\n\t\t\t\t\t\t\t\t\ttimes: normalizeTimesValue( v, DEFAULT_VALUES.times ),\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</Field>\n\t\t\t\t) }\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: v as SizeStringValue } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.duration as SizeStringValue }\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: v as SizeStringValue } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.delay as SizeStringValue }\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{ StartControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Start', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<StartControl\n\t\t\t\t\t\t\t\t\tvalue={ parseSizeValue( start, [ '%' ] ).size?.toString() ?? '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { start: v as SizeStringValue } ) }\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{ EndControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'End', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<EndControl\n\t\t\t\t\t\t\t\t\tvalue={ parseSizeValue( end, [ '%' ] ).size?.toString() ?? '' }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { end: v as SizeStringValue } ) }\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<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</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","export const resolveDirection = (\n\thasDirection: boolean,\n\tnewEffect?: string,\n\tnewDirection?: string,\n\tcurrentDirection?: string,\n\tcurrentEffect?: string\n) => {\n\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\treturn 'top';\n\t}\n\n\tif ( currentEffect === 'slide' && hasDirection ) {\n\t\treturn newDirection ?? 'top';\n\t}\n\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\tif ( hasDirection ) {\n\t\treturn newDirection;\n\t}\n\treturn currentDirection;\n};\n","import * as React from 'react';\nimport { useCallback, useRef } from 'react';\nimport { type Unit, UnstableSizeField } from '@elementor/editor-controls';\nimport { type SizePropValue } from '@elementor/editor-props';\n\nimport { DEFAULT_TIME_UNIT, TIME_UNITS } from '../../configs/time-constants';\nimport { type FieldProps, type SizeStringValue } from '../../types';\nimport { formatSizeValue, parseSizeValue } from '../../utils/size-transform-utils';\nimport { convertTimeUnit } from '../../utils/time-conversion';\n\nexport function TimeFrameIndicator( {\n\tvalue,\n\tonChange,\n\tdefaultValue,\n}: FieldProps & { defaultValue: SizeStringValue } ) {\n\tconst sizeValue = parseSizeValue( value as SizeStringValue, TIME_UNITS, defaultValue, DEFAULT_TIME_UNIT );\n\tconst prevUnitRef = useRef< Unit >( sizeValue.unit as Unit );\n\n\tconst setValue = useCallback(\n\t\t( size: SizePropValue[ 'value' ] ) => {\n\t\t\tconst unitChanged = prevUnitRef.current !== size.unit;\n\n\t\t\tif ( unitChanged ) {\n\t\t\t\tconst fromUnit = prevUnitRef.current;\n\t\t\t\tconst toUnit = size.unit as Unit;\n\n\t\t\t\tsize.size = convertTimeUnit( Number( size.size ), fromUnit, toUnit );\n\t\t\t\tprevUnitRef.current = toUnit;\n\t\t\t}\n\n\t\t\tonChange( formatSizeValue( size ) as string );\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\tconst handleChange = ( newValue: SizePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\tconst handleBlur = () => {\n\t\tif ( ! sizeValue.size ) {\n\t\t\tsetValue( parseSizeValue( defaultValue, TIME_UNITS, undefined, DEFAULT_TIME_UNIT ) );\n\t\t}\n\t};\n\n\treturn (\n\t\t<UnstableSizeField\n\t\t\tunits={ TIME_UNITS }\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","import { type Unit } from '@elementor/editor-controls';\n\ntype TimeUnit = Extract< Unit, 'ms' | 's' >;\nconst UNIT_TO_MS: Record< TimeUnit, number > = {\n\tms: 1,\n\ts: 1000,\n};\n\nexport const convertTimeUnit = ( value: number, from: Unit, to: Unit ): number => {\n\treturn ( value * UNIT_TO_MS[ from as TimeUnit ] ) / UNIT_TO_MS[ to as TimeUnit ];\n};\n","import * as React from 'react';\nimport { type PropsWithChildren } from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Grid } from '@elementor/ui';\n\nexport const Field = ( { label, children }: { label: string } & PropsWithChildren ) => {\n\treturn (\n\t\t<Grid item xs={ 12 } aria-label={ `${ label } control` }>\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 * 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 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\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 {\n\tgetContainer,\n\tgetElementInteractions,\n\tgetElementLabel,\n\tgetWidgetsCache,\n\tupdateElementInteractions,\n\ttype V1Element,\n\ttype V1ElementModelProps,\n} from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\ttype CommandEvent,\n\tcommandStartEvent,\n\tundoable,\n} from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport type { ElementInteractions } from '../types';\nimport { isSupportedInteractionItem } from '../utils/is-supported-interaction-item';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\nimport { getClipboardElements } from './get-clipboard-elements';\n\nfunction isAtomicContainer( container: V1Element ): boolean {\n\tconst type = container?.model.get( 'widgetType' ) || container?.model.get( 'elType' );\n\tconst widgetsCache = getWidgetsCache();\n\tconst elementConfig = widgetsCache?.[ type ];\n\n\treturn Boolean( elementConfig?.atomic_props_schema );\n}\n\ntype PasteInteractionsCommandArgs = {\n\tcontainer?: V1Element;\n\tcontainers?: V1Element[];\n\tstorageKey?: string;\n};\n\ntype PasteInteractionsPayload = {\n\tcontainers: V1Element[];\n\tnewInteractions: ElementInteractions;\n};\n\nfunction getTitleForContainers( containers: V1Element[] ): string {\n\treturn containers.length > 1 ? __( 'Elements', 'elementor' ) : getElementLabel( containers[ 0 ].id );\n}\n\nfunction normalizeClipboardInteractions( raw: V1ElementModelProps[ 'interactions' ] ): ElementInteractions | null {\n\tif ( ! raw ) {\n\t\treturn null;\n\t}\n\n\tconst parsed: ElementInteractions = typeof raw === 'string' ? ( JSON.parse( raw ) as ElementInteractions ) : raw;\n\n\tconst payload = {\n\t\tversion: parsed?.version ?? 1,\n\t\titems: parsed?.items?.filter( ( item ) => isSupportedInteractionItem( item ) ) ?? [],\n\t};\n\n\tif ( ! payload.items.length ) {\n\t\treturn null;\n\t}\n\n\treturn payload;\n}\n\nfunction regenerateInteractionIds( interactions: ElementInteractions ): ElementInteractions {\n\tconst cloned = structuredClone( interactions ) as ElementInteractions;\n\n\tcloned.items?.forEach( ( item ) => {\n\t\tif ( item.$$type === 'interaction-item' && item.value ) {\n\t\t\titem.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\treturn cloned;\n}\n\nexport function initPasteInteractionsCommand() {\n\tconst undoablePasteInteractions = undoable(\n\t\t{\n\t\t\tdo: ( { containers, newInteractions }: PasteInteractionsPayload ) => {\n\t\t\t\tconst pasted = regenerateInteractionIds( newInteractions );\n\n\t\t\t\treturn containers.map( ( container ) => {\n\t\t\t\t\tconst elementId = container.id;\n\t\t\t\t\tconst previous = getElementInteractions( elementId );\n\n\t\t\t\t\tupdateElementInteractions( {\n\t\t\t\t\t\telementId,\n\t\t\t\t\t\tinteractions: pasted,\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn { elementId, previous: previous ?? { version: 1, items: [] } };\n\t\t\t\t} );\n\t\t\t},\n\t\t\tundo: ( _: PasteInteractionsPayload, revertData ) => {\n\t\t\t\trevertData.forEach( ( { elementId, previous } ) => {\n\t\t\t\t\tupdateElementInteractions( {\n\t\t\t\t\t\telementId,\n\t\t\t\t\t\tinteractions: previous.items?.length ? previous : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttitle: ( { containers } ) => getTitleForContainers( containers ),\n\t\t\tsubtitle: __( 'Interactions Pasted', 'elementor' ),\n\t\t}\n\t);\n\n\tlistenTo( commandStartEvent( 'document/elements/paste-interactions' ), ( e ) => {\n\t\tconst args = ( e as CommandEvent ).args as PasteInteractionsCommandArgs;\n\t\tconst containers = args.containers ?? ( args.container ? [ args.container ] : [] );\n\t\tconst storageKey = args.storageKey ?? 'clipboard';\n\n\t\tif ( ! containers.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst clipboardElements = getClipboardElements( storageKey );\n\t\tconst [ clipboardElement ] = clipboardElements ?? [];\n\n\t\tif ( ! clipboardElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newInteractions = normalizeClipboardInteractions( clipboardElement.interactions );\n\n\t\tif ( ! newInteractions ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingContainers = containers.filter( ( c ) => getContainer( c.id ) ) as V1Element[];\n\t\tconst validContainers = existingContainers.filter( isAtomicContainer );\n\n\t\tif ( ! validContainers.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tundoablePasteInteractions( { containers: validContainers, newInteractions } );\n\t} );\n}\n","import type { V1ElementModelProps } from '@elementor/editor-elements';\n\nexport function getClipboardElements( storageKey: string = 'clipboard' ): V1ElementModelProps[] | undefined {\n\ttry {\n\t\tconst storedData = JSON.parse( localStorage.getItem( 'elementor' ) ?? '{}' );\n\n\t\treturn storedData[ storageKey ]?.elements as V1ElementModelProps[] | undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { StyledToggleButton, StyledToggleButtonGroup } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nconst AXIS: Record< Direction, 'vertical' | 'horizontal' > = {\n\ttop: 'vertical',\n\tbottom: 'vertical',\n\tleft: 'horizontal',\n\tright: 'horizontal',\n};\n\nfunction parseValue( value: string ): Direction[] {\n\treturn value.split( '-' ).filter( Boolean ) as Direction[];\n}\n\nfunction serializeValue( directions: Direction[] ): string {\n\tconst vertical = directions.find( ( d ) => d === 'top' || d === 'bottom' );\n\tconst horizontal = directions.find( ( d ) => d === 'left' || d === 'right' );\n\tif ( vertical && horizontal ) {\n\t\treturn `${ vertical }-${ horizontal }`;\n\t}\n\treturn directions[ 0 ] ?? '';\n}\n\nfunction toggleDirection( current: Direction[], clicked: Direction ): Direction[] {\n\tif ( current.includes( clicked ) ) {\n\t\treturn current.filter( ( d ) => d !== clicked );\n\t}\n\tconst filtered = current.filter( ( d ) => AXIS[ d ] !== AXIS[ clicked ] );\n\treturn [ ...filtered, clicked ];\n}\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst isIn = interactionType === 'in';\n\n\tconst options = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tdir: 'top' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowDownSmallIcon : ArrowUpSmallIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdir: 'bottom' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowUpSmallIcon : ArrowDownSmallIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdir: 'left' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowRightIcon : ArrowLeftIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdir: 'right' as Direction,\n\t\t\t\tlabel: isIn ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\tIcon: isIn ? ArrowLeftIcon : ArrowRightIcon,\n\t\t\t},\n\t\t],\n\t\t[ isIn ]\n\t);\n\n\tconst selectedDirections = useMemo( () => parseValue( value ), [ value ] );\n\n\treturn (\n\t\t<StyledToggleButtonGroup\n\t\t\tsize=\"tiny\"\n\t\t\tjustify=\"end\"\n\t\t\tsx={ {\n\t\t\t\tdisplay: 'grid',\n\t\t\t\tgridTemplateColumns: 'repeat(4, minmax(0, 25%))',\n\t\t\t\twidth: '100%',\n\t\t\t} }\n\t\t>\n\t\t\t{ options.map( ( { dir, label, Icon } ) => (\n\t\t\t\t<Tooltip key={ dir } title={ label } disableFocusListener placement=\"top\">\n\t\t\t\t\t<StyledToggleButton\n\t\t\t\t\t\tvalue={ dir }\n\t\t\t\t\t\tselected={ selectedDirections.includes( dir ) }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tisPlaceholder={ false }\n\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\tconst next = toggleDirection( selectedDirections, dir );\n\t\t\t\t\t\t\tonChange( serializeValue( next ) );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon fontSize=\"tiny\" />\n\t\t\t\t\t</StyledToggleButton>\n\t\t\t\t</Tooltip>\n\t\t\t) ) }\n\t\t</StyledToggleButtonGroup>\n\t);\n}\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nimport { PromotionSelect } from '../../ui/promotion-select';\nimport { DEFAULT_VALUES } from '../interaction-details';\n\nconst TRACKING_DATA = { target_name: 'interactions_easing', location_l2: 'interactions' } as const;\n\nexport const 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\nexport const BASE_EASINGS: string[] = [ 'easeIn' ];\n\nexport function Easing( {}: FieldProps ) {\n\tconst baseOptions = Object.fromEntries(\n\t\tObject.entries( EASING_OPTIONS ).filter( ( [ key ] ) => BASE_EASINGS.includes( key ) )\n\t);\n\n\tconst disabledOptions = Object.fromEntries(\n\t\tObject.entries( EASING_OPTIONS ).filter( ( [ key ] ) => ! BASE_EASINGS.includes( key ) )\n\t);\n\n\treturn (\n\t\t<PromotionSelect\n\t\t\tvalue={ DEFAULT_VALUES.easing }\n\t\t\tbaseOptions={ baseOptions }\n\t\t\tdisabledOptions={ disabledOptions }\n\t\t\tpromotionContent={ __( 'Upgrade to control the smoothness of the interaction.', 'elementor' ) }\n\t\t\tupgradeUrl=\"https://go.elementor.com/go-pro-interactions-easing-modal/\"\n\t\t\ttrackingData={ TRACKING_DATA }\n\t\t/>\n\t);\n}\n","import * as React from 'react';\nimport { type MouseEvent, useRef } from 'react';\nimport { type PromotionTrackingData } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { MenuSubheader, Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionsPromotionChip, type InteractionsPromotionChipRef } from './interactions-promotion-chip';\n\ntype PromotionSelectProps = {\n\tvalue: string;\n\tonChange?: ( value: string ) => void;\n\tbaseOptions: Record< string, string >;\n\tdisabledOptions: Record< string, string >;\n\tpromotionLabel?: string;\n\tpromotionContent: string;\n\tupgradeUrl: string;\n\ttrackingData: PromotionTrackingData;\n};\n\nexport function PromotionSelect( {\n\tvalue,\n\tonChange,\n\tbaseOptions,\n\tdisabledOptions,\n\tpromotionLabel,\n\tpromotionContent,\n\tupgradeUrl,\n\ttrackingData,\n}: PromotionSelectProps ) {\n\tconst promotionRef = useRef< InteractionsPromotionChipRef >( null );\n\tconst anchorRef = useRef< HTMLElement >( null );\n\n\treturn (\n\t\t<Select\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( e: SelectChangeEvent< string > ) => onChange?.( e.target.value ) }\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tMenuProps={ { disablePortal: true } }\n\t\t>\n\t\t\t{ Object.entries( baseOptions ).map( ( [ key, label ] ) => (\n\t\t\t\t<MenuListItem key={ key } value={ key }>\n\t\t\t\t\t{ label }\n\t\t\t\t</MenuListItem>\n\t\t\t) ) }\n\n\t\t\t<MenuSubheader\n\t\t\t\tref={ anchorRef }\n\t\t\t\tsx={ {\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t\tfontWeight: '400',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t} }\n\t\t\t\tonMouseDown={ ( e: MouseEvent ) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tpromotionRef.current?.toggle();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ promotionLabel ?? __( 'PRO features', 'elementor' ) }\n\t\t\t\t<InteractionsPromotionChip\n\t\t\t\t\tcontent={ promotionContent }\n\t\t\t\t\tupgradeUrl={ upgradeUrl }\n\t\t\t\t\tref={ promotionRef }\n\t\t\t\t\tanchorRef={ anchorRef }\n\t\t\t\t\ttrackingData={ trackingData }\n\t\t\t\t/>\n\t\t\t</MenuSubheader>\n\n\t\t\t{ Object.entries( disabledOptions ).map( ( [ key, label ] ) => (\n\t\t\t\t<MenuListItem key={ key } value={ key } disabled sx={ { pl: 3 } }>\n\t\t\t\t\t{ label }\n\t\t\t\t</MenuListItem>\n\t\t\t) ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { forwardRef, type MouseEvent, type RefObject, useCallback, useImperativeHandle, useState } from 'react';\nimport { type PromotionTrackingData, trackUpgradePromotionClick, trackViewPromotion } from '@elementor/editor-controls';\nimport { PromotionChip, PromotionPopover, useCanvasClickHandler } from '@elementor/editor-ui';\nimport { Box } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport type InteractionsPromotionChipProps = {\n\tcontent: string;\n\tupgradeUrl: string;\n\tanchorRef?: RefObject< HTMLElement | null >;\n\ttrackingData: PromotionTrackingData;\n};\n\nexport type InteractionsPromotionChipRef = {\n\ttoggle: () => void;\n};\n\nexport const InteractionsPromotionChip = forwardRef< InteractionsPromotionChipRef, InteractionsPromotionChipProps >(\n\t( { content, upgradeUrl, anchorRef, trackingData }, ref ) => {\n\t\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\t\tuseCanvasClickHandler( isOpen, () => setIsOpen( false ) );\n\n\t\tconst toggle = useCallback( () => {\n\t\t\tsetIsOpen( ( prev ) => {\n\t\t\t\tif ( ! prev ) {\n\t\t\t\t\ttrackViewPromotion( trackingData );\n\t\t\t\t}\n\t\t\t\treturn ! prev;\n\t\t\t} );\n\t\t}, [ trackingData ] );\n\n\t\tuseImperativeHandle( ref, () => ( { toggle } ), [ toggle ] );\n\n\t\tconst handleToggle = ( e: MouseEvent ) => {\n\t\t\te.stopPropagation();\n\t\t\ttoggle();\n\t\t};\n\n\t\treturn (\n\t\t\t<PromotionPopover\n\t\t\t\topen={ isOpen }\n\t\t\t\ttitle={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tcontent={ content }\n\t\t\t\tctaText={ __( 'Upgrade now', 'elementor' ) }\n\t\t\t\tctaUrl={ upgradeUrl }\n\t\t\t\tanchorRef={ anchorRef }\n\t\t\t\tplacement={ anchorRef ? 'right-start' : undefined }\n\t\t\t\tonClose={ ( e: MouseEvent ) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tsetIsOpen( false );\n\t\t\t\t} }\n\t\t\t\tonCtaClick={ () => trackUpgradePromotionClick( trackingData ) }\n\t\t\t>\n\t\t\t\t<Box\n\t\t\t\t\tonMouseDown={ ( e: MouseEvent ) => e.stopPropagation() }\n\t\t\t\t\tonClick={ handleToggle }\n\t\t\t\t\tsx={ { cursor: 'pointer', display: 'inline-flex', mr: 1 } }\n\t\t\t\t>\n\t\t\t\t\t<PromotionChip />\n\t\t\t\t</Box>\n\t\t\t</PromotionPopover>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nimport { PromotionSelect } from '../../ui/promotion-select';\nimport { DEFAULT_VALUES } from '../interaction-details';\n\nconst TRACKING_DATA = { target_name: 'interactions_effect', location_l2: 'interactions' } as const;\n\nexport const EFFECT_OPTIONS = {\n\tfade: __( 'Fade', 'elementor' ),\n\tslide: __( 'Slide', 'elementor' ),\n\tscale: __( 'Scale', 'elementor' ),\n\tcustom: __( 'Custom', 'elementor' ),\n};\n\nexport const BASE_EFFECTS: string[] = [ 'fade', 'slide', 'scale' ];\n\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst baseOptions = Object.fromEntries(\n\t\tObject.entries( EFFECT_OPTIONS ).filter( ( [ key ] ) => BASE_EFFECTS.includes( key ) )\n\t);\n\n\tconst disabledOptions = Object.fromEntries(\n\t\tObject.entries( EFFECT_OPTIONS ).filter( ( [ key ] ) => ! BASE_EFFECTS.includes( key ) )\n\t);\n\n\treturn (\n\t\t<PromotionSelect\n\t\t\tvalue={ value in baseOptions ? value : DEFAULT_VALUES.effect }\n\t\t\tonChange={ onChange }\n\t\t\tbaseOptions={ baseOptions }\n\t\t\tdisabledOptions={ disabledOptions }\n\t\t\tpromotionLabel={ __( 'PRO effects', 'elementor' ) }\n\t\t\tpromotionContent={ __(\n\t\t\t\t'Upgrade to further customize your animation with opacity, scale, move, rotate and more.',\n\t\t\t\t'elementor'\n\t\t\t) }\n\t\t\tupgradeUrl=\"https://go.elementor.com/go-pro-interactions-custom-effect-modal/\"\n\t\t\ttrackingData={ TRACKING_DATA }\n\t\t/>\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 { useRef } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { Number123Icon, RepeatIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionsPromotionChip } from '../../ui/interactions-promotion-chip';\nimport { PromotionOverlayLayout } from '../../ui/promotion-overlay-layout';\n\nconst TRACKING_DATA = { target_name: 'interactions_repeat', location_l2: 'interactions' } as const;\n\nexport const REPEAT_OPTIONS = {\n\ttimes: __( 'times', 'elementor' ),\n\tloop: __( 'loop', 'elementor' ),\n};\n\nexport const REPEAT_TOOLTIPS = {\n\ttimes: __( 'Enable number', 'elementor' ),\n\tloop: __( 'Infinite repeat', 'elementor' ),\n};\n\nexport function Repeat() {\n\tconst repeatContainerRef = useRef< HTMLDivElement >( null );\n\n\tconst options: ToggleButtonGroupItem< string >[] = [\n\t\t{\n\t\t\tvalue: REPEAT_OPTIONS.times,\n\t\t\tdisabled: true,\n\t\t\tlabel: REPEAT_TOOLTIPS.times,\n\t\t\trenderContent: ( { size } ) => <Number123Icon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: REPEAT_OPTIONS.loop,\n\t\t\tdisabled: true,\n\t\t\tlabel: REPEAT_TOOLTIPS.loop,\n\t\t\trenderContent: ( { size } ) => <RepeatIcon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t<PromotionOverlayLayout\n\t\t\tref={ repeatContainerRef }\n\t\t\tpromotionChip={\n\t\t\t\t<InteractionsPromotionChip\n\t\t\t\t\tcontent={ __( 'Upgrade to control how many times the animation repeats.', 'elementor' ) }\n\t\t\t\t\tupgradeUrl={ 'https://go.elementor.com/go-pro-interactions-repeat-modal/' }\n\t\t\t\t\tanchorRef={ repeatContainerRef }\n\t\t\t\t\ttrackingData={ TRACKING_DATA }\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ () => {} } value={ '' } />\n\t\t</PromotionOverlayLayout>\n\t);\n}\n","import * as React from 'react';\nimport { forwardRef, type ReactNode } from 'react';\nimport { Box } from '@elementor/ui';\n\nconst OVERLAY_GRID = '1 / 1';\nconst CHIP_OFFSET = '50%';\n\ntype PromotionOverlayLayoutProps = {\n\tchildren: ReactNode;\n\tpromotionChip: ReactNode;\n};\n\nexport const PromotionOverlayLayout = forwardRef< HTMLDivElement, PromotionOverlayLayoutProps >(\n\t( { children, promotionChip }, ref ) => (\n\t\t<Box ref={ ref } sx={ { display: 'grid', alignItems: 'center' } }>\n\t\t\t<Box sx={ { gridArea: OVERLAY_GRID } }>{ children }</Box>\n\t\t\t<Box sx={ { gridArea: OVERLAY_GRID, marginInlineEnd: CHIP_OFFSET, justifySelf: 'end' } }>\n\t\t\t\t{ promotionChip }\n\t\t\t</Box>\n\t\t</Box>\n\t)\n);\n","import * as React from 'react';\nimport { useRef } 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';\nimport { InteractionsPromotionChip } from '../../ui/interactions-promotion-chip';\nimport { PromotionOverlayLayout } from '../../ui/promotion-overlay-layout';\n\nconst TRACKING_DATA = { target_name: 'interactions_replay', location_l2: 'interactions' } as const;\n\nexport const REPLAY_OPTIONS = {\n\tno: __( 'No', 'elementor' ),\n\tyes: __( 'Yes', 'elementor' ),\n};\n\nexport const BASE_REPLAY: string[] = [ 'no' ];\n\nexport function Replay( { onChange }: ReplayFieldProps ) {\n\tconst replayContainerRef = useRef< HTMLDivElement >( null );\n\tconst options: ToggleButtonGroupItem< boolean >[] = [\n\t\t{\n\t\t\tvalue: false,\n\t\t\tdisabled: false,\n\t\t\tlabel: REPLAY_OPTIONS.no,\n\t\t\trenderContent: ( { size } ) => <MinusIcon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: true,\n\t\t\tdisabled: true,\n\t\t\tlabel: REPLAY_OPTIONS.yes,\n\t\t\trenderContent: ( { size } ) => <CheckIcon fontSize={ size } />,\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t<PromotionOverlayLayout\n\t\t\tref={ replayContainerRef }\n\t\t\tpromotionChip={\n\t\t\t\t<InteractionsPromotionChip\n\t\t\t\t\tcontent={ __( 'Upgrade to run the animation every time its trigger occurs.', 'elementor' ) }\n\t\t\t\t\tupgradeUrl={ 'https://go.elementor.com/go-pro-interactions-replay-modal/' }\n\t\t\t\t\tanchorRef={ replayContainerRef }\n\t\t\t\t\ttrackingData={ TRACKING_DATA }\n\t\t\t\t/>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ false } />\n\t\t</PromotionOverlayLayout>\n\t);\n}\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nimport { PromotionSelect } from '../../ui/promotion-select';\nimport { DEFAULT_VALUES } from '../interaction-details';\n\nconst TRACKING_DATA = { target_name: 'interactions_trigger', location_l2: 'interactions' } as const;\n\nexport const TRIGGER_OPTIONS = {\n\tload: __( 'Page load', 'elementor' ),\n\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\tscrollOn: __( 'While scrolling', 'elementor' ),\n\thover: __( 'On hover', 'elementor' ),\n\tclick: __( 'On click', 'elementor' ),\n};\n\nexport const BASE_TRIGGERS: string[] = [ 'load', 'scrollIn' ];\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst baseOptions = Object.fromEntries(\n\t\tObject.entries( TRIGGER_OPTIONS ).filter( ( [ key ] ) => BASE_TRIGGERS.includes( key ) )\n\t);\n\n\tconst disabledOptions = Object.fromEntries(\n\t\tObject.entries( TRIGGER_OPTIONS ).filter( ( [ key ] ) => ! BASE_TRIGGERS.includes( key ) )\n\t);\n\n\treturn (\n\t\t<PromotionSelect\n\t\t\tvalue={ value in baseOptions ? value : DEFAULT_VALUES.trigger }\n\t\t\tonChange={ onChange }\n\t\t\tbaseOptions={ baseOptions }\n\t\t\tdisabledOptions={ disabledOptions }\n\t\t\tpromotionLabel={ __( 'PRO triggers', 'elementor' ) }\n\t\t\tpromotionContent={ __( 'Upgrade to unlock more interactions triggers.', 'elementor' ) }\n\t\t\tupgradeUrl=\"https://go.elementor.com/go-pro-interactions-triggers-modal/\"\n\t\t\ttrackingData={ TRACKING_DATA }\n\t\t/>\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 { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { MAX_INTERACTIONS_PER_ELEMENT } from './constants';\nimport { initInteractionsSchemaResource } from './resources/interactions-schema-resource';\nimport { initManageElementInteractionTool } from './tools/manage-element-interaction-tool';\n\nexport const initMcpInteractions = () => {\n\tconst reg = getMCPByDomain( 'interactions', {\n\t\tinstructions: `\n\t\tMCP server for managing element interactions and animations. Use this to add, modify, or remove animations and motion effects triggered by user events such as page load or scroll-into-view.\n\t\t** IMPORTANT **\n\t\tUse the \"interactions-schema\" resource to get the schema of the interactions.\n\t\tActions:\n\t\t- get: Read the current interactions on the element.\n\t\t- add: Add a new interaction (max ${ MAX_INTERACTIONS_PER_ELEMENT } per element).\n\t\t- update: Update an existing interaction by its interactionId.\n\t\t- delete: Remove a specific interaction by its interactionId.\n\t\t- clear: Remove all interactions from the element.\n\t\t\n\t\tFor add/update, provide: trigger, effect, effectType, direction (required for slide effect), duration, delay, easing.\n\t\tUse excludedBreakpoints to disable the animation on specific responsive breakpoints (e.g. [\"mobile\", \"tablet\"]).\n\t\tExample Get Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"get\",\n\t\t\t\"interactionId\": \"123\",\n\t\t\t\"animationData\": {\n\t\t\t\t\"trigger\": \"click\",\n\t\t\t\t\"effect\": \"fade\",\n\t\t\t}\n\t\t}\n\t\tExample Add Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"add\",\n\t\t\t\"animationData\": {\n\t\t\t\t\"effectType\": \"in\",\n\t\t\t\t\"direction\": \"top\",\n\t\t\t\t\"trigger\": \"click\",\n\t\t\t\t\"effect\": \"fade\",\n\t\t\t\t\"duration\": 1000,\n\t\t\t\t\"delay\": 0,\n\t\t\t\t\"easing\": \"easeIn\",\n\t\t\t\t\"excludedBreakpoints\": [\"mobile\", \"tablet\"],\n\t\t\t}\n\t\t}\n\t\tExample Update Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"update\",\n\t\t\t\"interactionId\": \"123\",\n\t\t\t\"animationData\": {\n\t\t\t\t\"trigger\": \"click\",\n\t\t\t\t\"effect\": \"fade\",\n\t\t\t}\n\t\t}\n\t\tExample Delete Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"delete\",\n\t\t\t\"interactionId\": \"123\",\n\t\t}\n\t\tExample Clear Request:\n\t\t{\n\t\t\t\"elementId\": \"123\",\n\t\t\t\"action\": \"clear\",\n\t\t}\n\t\t`,\n\t} );\n\treg.waitForReady().then( () => {\n\t\tinitInteractionsSchemaResource( reg );\n\t\tinitManageElementInteractionTool( reg );\n\t} );\n};\n","export const MAX_INTERACTIONS_PER_ELEMENT = 5;\n","import { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { isProActive } from '@elementor/utils';\n\nimport { baseSchema, proSchema } from '../tools/schema';\n\nexport const INTERACTIONS_SCHEMA_URI = 'elementor://interactions/schema';\n\nexport const initInteractionsSchemaResource = ( reg: MCPRegistryEntry ) => {\n\tconst { resource } = reg;\n\tconst schema = isProActive() ? { ...baseSchema, ...proSchema } : baseSchema;\n\n\tresource(\n\t\t'interactions-schema',\n\t\tINTERACTIONS_SCHEMA_URI,\n\t\t{\n\t\t\tdescription: 'Schema describing all available options for element interactions.',\n\t\t},\n\t\tasync () => {\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\turi: INTERACTIONS_SCHEMA_URI,\n\t\t\t\t\t\tmimeType: 'application/json',\n\t\t\t\t\t\ttext: JSON.stringify( schema ),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t);\n};\n","import { z } from '@elementor/schema';\n\nexport const baseSchema = {\n\ttrigger: z.enum( [ 'load', 'scrollIn' ] ).optional().describe( 'Event that triggers the animation' ),\n\teffect: z.enum( [ 'fade', 'slide', 'scale' ] ).optional().describe( 'Animation effect type' ),\n\teffectType: z.enum( [ 'in', 'out' ] ).optional().describe( 'Whether the animation plays in or out' ),\n\tdirection: z\n\t\t.enum( [ 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right' ] )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Direction of the Animation. Can be one of the following or empty if not needed. At slide effect, this is required field.'\n\t\t),\n\tduration: z.number().min( 0 ).max( 10000 ).optional().describe( 'Animation duration in milliseconds' ),\n\tdelay: z.number().min( 0 ).max( 10000 ).optional().describe( 'Animation delay in milliseconds' ),\n\teasing: z.string().optional().describe( 'Easing function. See interactions schema for options.' ),\n\texcludedBreakpoints: z\n\t\t.array( z.string() )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Breakpoint IDs on which this interaction is disabled (e.g. [\"mobile\", \"tablet\"]). Omit to enable on all breakpoints.'\n\t\t),\n};\n\nexport const proSchema = {\n\ttrigger: z\n\t\t.enum( [ 'load', 'scrollIn', 'scrollOut', 'scrollOn', 'hover', 'click' ] )\n\t\t.optional()\n\t\t.describe( 'Event that triggers the animation' ),\n\teffect: z.enum( [ 'fade', 'slide', 'scale', 'custom' ] ).optional().describe( 'Animation effect type' ),\n\tcustomEffects: z\n\t\t.object( {\n\t\t\tkeyframes: z\n\t\t\t\t.array(\n\t\t\t\t\tz.object( {\n\t\t\t\t\t\tstop: z.number().describe( 'The stop of the keyframe in percent, can be either 0 or 100' ),\n\t\t\t\t\t\tvalue: z.object( {\n\t\t\t\t\t\t\topacity: z.number().min( 0 ).max( 1 ).describe( 'The opacity of the keyframe' ),\n\t\t\t\t\t\t\tscale: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 1 ).describe( 'The x scale of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 1 ).describe( 'The y scale of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The scale of the keyframe' ),\n\t\t\t\t\t\t\trotate: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 360 ).describe( 'The x rotate of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 360 ).describe( 'The y rotate of the keyframe' ),\n\t\t\t\t\t\t\t\t\tz: z.number().min( 0 ).max( 360 ).describe( 'The z rotate of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The rotate of the keyframe' ),\n\t\t\t\t\t\t\tmove: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 1 ).describe( 'The x move of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 1 ).describe( 'The y move of the keyframe' ),\n\t\t\t\t\t\t\t\t\tz: z.number().min( 0 ).max( 1 ).describe( 'The z move of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The move of the keyframe' ),\n\t\t\t\t\t\t\tskew: z\n\t\t\t\t\t\t\t\t.object( {\n\t\t\t\t\t\t\t\t\tx: z.number().min( 0 ).max( 360 ).describe( 'The x skew of the keyframe' ),\n\t\t\t\t\t\t\t\t\ty: z.number().min( 0 ).max( 360 ).describe( 'The y skew of the keyframe' ),\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.optional()\n\t\t\t\t\t\t\t\t.describe( 'The skew of the keyframe' ),\n\t\t\t\t\t\t} ),\n\t\t\t\t\t} )\n\t\t\t\t)\n\t\t\t\t.describe( 'The keyframes of the custom effect' ),\n\t\t} )\n\t\t.optional()\n\t\t.describe( 'The custom effect to use for the animation' ),\n};\n","import { updateElementInteractions } from '@elementor/editor-elements';\nimport { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\nimport { isProActive } from '@elementor/utils';\n\nimport { interactionsRepository } from '../../interactions-repository';\nimport { type ElementInteractions } from '../../types';\nimport {\n\tcreateInteractionItem,\n\textractExcludedBreakpoints,\n\textractSize,\n\textractString,\n} from '../../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../../utils/temp-id-utils';\nimport { MAX_INTERACTIONS_PER_ELEMENT } from '../constants';\nimport { INTERACTIONS_SCHEMA_URI } from '../resources/interactions-schema-resource';\nimport { baseSchema, proSchema } from './schema';\n\nconst EMPTY_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nconst EFFECTS_WITHOUT_TYPE = [ 'custom' ];\n\nexport const initManageElementInteractionTool = ( reg: MCPRegistryEntry ) => {\n\tconst { addTool } = reg;\n\tconst extendedSchema = isProActive() ? { ...baseSchema, ...proSchema } : baseSchema;\n\tconst schema = {\n\t\telementId: z.string().describe( 'The ID of the element to read or modify interactions on' ),\n\t\taction: z\n\t\t\t.enum( [ 'get', 'add', 'update', 'delete', 'clear' ] )\n\t\t\t.describe( 'Operation to perform. Use \"get\" first to inspect existing interactions.' ),\n\t\tinteractionId: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe( 'Interaction ID — required for update and delete. Obtain from a prior \"get\" call.' ),\n\t\t...extendedSchema,\n\t};\n\n\taddTool( {\n\t\tname: 'manage-element-interaction',\n\t\tdescription: `Manage the element interaction.`,\n\t\tschema,\n\t\trequiredResources: [\n\t\t\t{ uri: INTERACTIONS_SCHEMA_URI, description: 'Interactions schema with all available options' },\n\t\t],\n\t\tisDestructive: true,\n\t\toutputSchema: {\n\t\t\tsuccess: z.boolean().describe( 'Whether the action was successful' ),\n\t\t\taction: z\n\t\t\t\t.enum( [ 'get', 'add', 'update', 'delete', 'clear' ] )\n\t\t\t\t.describe( 'Operation to perform. Use \"get\" first to inspect existing interactions.' ),\n\t\t\telementId: z.string().optional().describe( 'The ID of the element to read or modify interactions on' ),\n\t\t\tinteractions: z.array( z.any() ).optional().describe( 'The interactions on the element' ),\n\t\t\tcount: z.number().optional().describe( 'The number of interactions on the element' ),\n\t\t},\n\t\thandler: ( input: {\n\t\t\telementId: string;\n\t\t\taction: 'get' | 'add' | 'update' | 'delete' | 'clear';\n\t\t\tinteractionId?: string;\n\t\t\t[ key: string ]: unknown;\n\t\t} ) => {\n\t\t\tconst { elementId, action, interactionId, ...animationData } = input;\n\t\t\tconst { effectType, ...restAnimationData } = animationData as {\n\t\t\t\teffectType?: string;\n\t\t\t\t[ key: string ]: unknown;\n\t\t\t};\n\t\t\tconst effect = restAnimationData.effect as string | undefined;\n\t\t\tconst resolvedType =\n\t\t\t\teffectType ?? ( effect && ! EFFECTS_WITHOUT_TYPE.includes( effect ) ? 'in' : undefined );\n\n\t\t\tconst allInteractions = interactionsRepository.all();\n\t\t\tconst elementData = allInteractions.find( ( data ) => data.elementId === elementId );\n\t\t\tconst currentInteractions: ElementInteractions = elementData?.interactions ?? EMPTY_INTERACTIONS;\n\n\t\t\tif ( action === 'get' ) {\n\t\t\t\tconst summary = currentInteractions.items.map( ( item ) => {\n\t\t\t\t\tconst { value } = item;\n\t\t\t\t\tconst animValue = value.animation.value;\n\t\t\t\t\tconst timingValue = animValue.timing_config.value;\n\t\t\t\t\tconst configValue = animValue.config.value;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: extractString( value.interaction_id ),\n\t\t\t\t\t\ttrigger: extractString( value.trigger ),\n\t\t\t\t\t\teffect: extractString( animValue.effect ),\n\t\t\t\t\t\teffectType: extractString( animValue.type ),\n\t\t\t\t\t\tdirection: extractString( animValue.direction ),\n\t\t\t\t\t\tduration: extractSize( timingValue.duration ),\n\t\t\t\t\t\tdelay: extractSize( timingValue.delay ),\n\t\t\t\t\t\teasing: extractString( configValue.easing ),\n\t\t\t\t\t\texcludedBreakpoints: extractExcludedBreakpoints( value.breakpoints ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\telementId,\n\t\t\t\t\taction,\n\t\t\t\t\tinteractions: summary,\n\t\t\t\t\tcount: summary.length,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet updatedItems = [ ...currentInteractions.items ];\n\n\t\t\tswitch ( action ) {\n\t\t\t\tcase 'add': {\n\t\t\t\t\tif ( updatedItems.length >= MAX_INTERACTIONS_PER_ELEMENT ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Cannot add more than ${ MAX_INTERACTIONS_PER_ELEMENT } interactions per element. Current count: ${ updatedItems.length }. Delete an existing interaction first.`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst newItem = createInteractionItem( {\n\t\t\t\t\t\tinteractionId: generateTempInteractionId(),\n\t\t\t\t\t\t...restAnimationData,\n\t\t\t\t\t\ttype: resolvedType,\n\t\t\t\t\t} );\n\n\t\t\t\t\tupdatedItems = [ ...updatedItems, newItem ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'update': {\n\t\t\t\t\tif ( ! interactionId ) {\n\t\t\t\t\t\tthrow new Error( 'interactionId is required for the update action.' );\n\t\t\t\t\t}\n\n\t\t\t\t\tconst itemIndex = updatedItems.findIndex(\n\t\t\t\t\t\t( item ) => extractString( item.value.interaction_id ) === interactionId\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( itemIndex === -1 ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Interaction with ID \"${ interactionId }\" not found on element \"${ elementId }\".`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst updatedItem = createInteractionItem( {\n\t\t\t\t\t\tinteractionId,\n\t\t\t\t\t\t...restAnimationData,\n\t\t\t\t\t\ttype: resolvedType,\n\t\t\t\t\t} );\n\n\t\t\t\t\tupdatedItems = [\n\t\t\t\t\t\t...updatedItems.slice( 0, itemIndex ),\n\t\t\t\t\t\tupdatedItem,\n\t\t\t\t\t\t...updatedItems.slice( itemIndex + 1 ),\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'delete': {\n\t\t\t\t\tif ( ! interactionId ) {\n\t\t\t\t\t\tthrow new Error( 'interactionId is required for the delete action.' );\n\t\t\t\t\t}\n\n\t\t\t\t\tconst beforeCount = updatedItems.length;\n\t\t\t\t\tupdatedItems = updatedItems.filter(\n\t\t\t\t\t\t( item ) => extractString( item.value.interaction_id ) !== interactionId\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( updatedItems.length === beforeCount ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Interaction with ID \"${ interactionId }\" not found on element \"${ elementId }\".`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase 'clear': {\n\t\t\t\t\tupdatedItems = [];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst updatedInteractions: ElementInteractions = {\n\t\t\t\t...currentInteractions,\n\t\t\t\titems: updatedItems,\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tupdateElementInteractions( { elementId, interactions: updatedInteractions } );\n\t\t\t} catch ( error ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to update interactions for element \"${ elementId }\": ${\n\t\t\t\t\t\terror instanceof Error ? error.message : 'Unknown error'\n\t\t\t\t\t}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\taction,\n\t\t\t\telementId,\n\t\t\t\tcount: updatedItems.length,\n\t\t\t};\n\t\t},\n\t} );\n};\n","import { initPasteInteractionsCommand } from './commands/paste-interactions';\nimport { Direction } from './components/controls/direction';\nimport { Easing } from './components/controls/easing';\nimport { Effect } from './components/controls/effect';\nimport { EffectType } from './components/controls/effect-type';\nimport { Repeat } from './components/controls/repeat';\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 { initMcpInteractions } from './mcp';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\n\t\tinitCleanInteractionIdsOnDuplicate();\n\t\tinitPasteInteractionsCommand();\n\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\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'replay',\n\t\t\tcomponent: Replay,\n\t\t\toptions: [ 'no' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'effectType',\n\t\t\tcomponent: EffectType,\n\t\t\toptions: [ 'in', 'out' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'direction',\n\t\t\tcomponent: Direction,\n\t\t\toptions: [ 'top', 'bottom', 'left', 'right' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'effect',\n\t\t\tcomponent: Effect,\n\t\t\toptions: [ 'fade', 'slide', 'scale' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'repeat',\n\t\t\tcomponent: Repeat,\n\t\t} );\n\n\t\tinitMcpInteractions();\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_ui","React","import_react","import_editor_elements","useListenTo","React","import_react","import_editor_elements","TRIGGER_LABELS","capitalize","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","React","import_editor_controls","import_ui","React","import_react","import_editor_controls","import_ui","import_i18n","interactionId","import_editor_elements","import_editor_v1_adapters","listenTo","import_editor_elements","import_editor_v1_adapters","import_i18n","listenTo","React","import_react","import_editor_controls","import_icons","import_ui","import_i18n","React","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_i18n","TRACKING_DATA","React","import_editor_controls","import_i18n","React","import_react","import_editor_controls","import_icons","import_i18n","React","import_react","import_ui","TRACKING_DATA","React","import_react","import_editor_controls","import_icons","import_i18n","TRACKING_DATA","React","import_i18n","TRACKING_DATA","import_editor_elements","import_editor_v1_adapters","import_editor_elements","import_schema","import_utils"]}
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-interactions",
|
|
3
|
-
"version": "4.1.0-
|
|
3
|
+
"version": "4.1.0-720",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,19 +39,19 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/editor-controls": "4.1.0-
|
|
43
|
-
"@elementor/editor-elements": "4.1.0-
|
|
44
|
-
"@elementor/editor-mcp": "4.1.0-
|
|
45
|
-
"@elementor/editor-props": "4.1.0-
|
|
46
|
-
"@elementor/editor-responsive": "4.1.0-
|
|
47
|
-
"@elementor/editor-ui": "4.1.0-
|
|
48
|
-
"@elementor/editor-v1-adapters": "4.1.0-
|
|
42
|
+
"@elementor/editor-controls": "4.1.0-720",
|
|
43
|
+
"@elementor/editor-elements": "4.1.0-720",
|
|
44
|
+
"@elementor/editor-mcp": "4.1.0-720",
|
|
45
|
+
"@elementor/editor-props": "4.1.0-720",
|
|
46
|
+
"@elementor/editor-responsive": "4.1.0-720",
|
|
47
|
+
"@elementor/editor-ui": "4.1.0-720",
|
|
48
|
+
"@elementor/editor-v1-adapters": "4.1.0-720",
|
|
49
49
|
"@elementor/icons": "^1.68.0",
|
|
50
|
-
"@elementor/schema": "4.1.0-
|
|
51
|
-
"@elementor/session": "4.1.0-
|
|
50
|
+
"@elementor/schema": "4.1.0-720",
|
|
51
|
+
"@elementor/session": "4.1.0-720",
|
|
52
52
|
"@elementor/ui": "1.36.17",
|
|
53
|
-
"@elementor/utils": "4.1.0-
|
|
54
|
-
"@elementor/events": "4.1.0-
|
|
53
|
+
"@elementor/utils": "4.1.0-720",
|
|
54
|
+
"@elementor/events": "4.1.0-720",
|
|
55
55
|
"@wordpress/i18n": "^5.13.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { EASING_OPTIONS, BASE_EASINGS } from './components/controls/easing';
|
|
|
17
17
|
export { REPLAY_OPTIONS, BASE_REPLAY } from './components/controls/replay';
|
|
18
18
|
export { EFFECT_OPTIONS, BASE_EFFECTS } from './components/controls/effect';
|
|
19
19
|
export { REPEAT_OPTIONS, REPEAT_TOOLTIPS } from './components/controls/repeat';
|
|
20
|
+
export { DEFAULT_VALUES } from './components/interaction-details';
|
|
20
21
|
|
|
21
22
|
export {
|
|
22
23
|
createString,
|