@elementor/editor-interactions 4.0.0-545 → 4.0.0-547

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 CHANGED
@@ -55,8 +55,7 @@ type InteractionsProvider = {
55
55
  };
56
56
  };
57
57
  type InteractionItemValue = InteractionItemPropValue['value'];
58
- type TimeUnit = Extract<Unit, 'ms' | 's'>;
59
- type TimeValue = `${number}${TimeUnit}` | number;
58
+ type SizeStringValue = `${number}${Unit}` | number;
60
59
 
61
60
  declare function getInteractionsConfig(): InteractionsConfig;
62
61
 
@@ -103,4 +102,4 @@ type ControlOptions<T extends InteractionsControlType> = {
103
102
  };
104
103
  declare function registerInteractionsControl<T extends InteractionsControlType>({ type, component, options, }: ControlOptions<T>): void;
105
104
 
106
- export { type AnimationOption, type CreateInteractionsProviderOptions, type DirectionFieldProps, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, type ElementInteractionData, EmptyState, type FieldProps, type InteractionConstants, type InteractionItemValue, type InteractionsCollection, type InteractionsConfig, type InteractionsProvider, InteractionsTab, type ReplayFieldProps, type TimeUnit, type TimeValue, createInteractionsProvider, getInteractionsConfig, init, interactionsRepository, registerInteractionsControl };
105
+ export { type AnimationOption, type CreateInteractionsProviderOptions, type DirectionFieldProps, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, type ElementInteractionData, EmptyState, type FieldProps, type InteractionConstants, type InteractionItemValue, type InteractionsCollection, type InteractionsConfig, type InteractionsProvider, InteractionsTab, type ReplayFieldProps, type SizeStringValue, createInteractionsProvider, getInteractionsConfig, init, interactionsRepository, registerInteractionsControl };
package/dist/index.d.ts CHANGED
@@ -55,8 +55,7 @@ type InteractionsProvider = {
55
55
  };
56
56
  };
57
57
  type InteractionItemValue = InteractionItemPropValue['value'];
58
- type TimeUnit = Extract<Unit, 'ms' | 's'>;
59
- type TimeValue = `${number}${TimeUnit}` | number;
58
+ type SizeStringValue = `${number}${Unit}` | number;
60
59
 
61
60
  declare function getInteractionsConfig(): InteractionsConfig;
62
61
 
@@ -103,4 +102,4 @@ type ControlOptions<T extends InteractionsControlType> = {
103
102
  };
104
103
  declare function registerInteractionsControl<T extends InteractionsControlType>({ type, component, options, }: ControlOptions<T>): void;
105
104
 
106
- export { type AnimationOption, type CreateInteractionsProviderOptions, type DirectionFieldProps, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, type ElementInteractionData, EmptyState, type FieldProps, type InteractionConstants, type InteractionItemValue, type InteractionsCollection, type InteractionsConfig, type InteractionsProvider, InteractionsTab, type ReplayFieldProps, type TimeUnit, type TimeValue, createInteractionsProvider, getInteractionsConfig, init, interactionsRepository, registerInteractionsControl };
105
+ export { type AnimationOption, type CreateInteractionsProviderOptions, type DirectionFieldProps, ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX, type ElementInteractionData, EmptyState, type FieldProps, type InteractionConstants, type InteractionItemValue, type InteractionsCollection, type InteractionsConfig, type InteractionsProvider, InteractionsTab, type ReplayFieldProps, type SizeStringValue, createInteractionsProvider, getInteractionsConfig, init, interactionsRepository, registerInteractionsControl };
package/dist/index.js CHANGED
@@ -189,6 +189,12 @@ var tryParse = (value, allowedUnits, defaultUnit) => {
189
189
  }
190
190
  const match = value && value.match(SIZE_REGEX);
191
191
  if (!match) {
192
+ if (value) {
193
+ return {
194
+ size: Number(value),
195
+ unit: defaultUnit
196
+ };
197
+ }
192
198
  return null;
193
199
  }
194
200
  const size = match[1] ? parseFloat(match[1]) : null;
@@ -216,10 +222,6 @@ var createString = (value) => ({
216
222
  $$type: "string",
217
223
  value
218
224
  });
219
- var createNumber = (value) => ({
220
- $$type: "number",
221
- value
222
- });
223
225
  var createTimingConfig = (duration, delay) => ({
224
226
  $$type: "timing-config",
225
227
  value: {
@@ -236,17 +238,23 @@ var createConfig = ({
236
238
  easing = "easeIn",
237
239
  relativeTo = "",
238
240
  offsetTop = 0,
239
- offsetBottom = 100
241
+ offsetBottom = 85
240
242
  }) => ({
241
243
  $$type: "config",
242
244
  value: {
243
245
  replay: createBoolean(replay),
244
246
  easing: createString(easing),
245
247
  relativeTo: createString(relativeTo),
246
- offsetTop: createNumber(offsetTop),
247
- offsetBottom: createNumber(offsetBottom)
248
+ offsetTop: createSize(offsetTop, "%"),
249
+ offsetBottom: createSize(offsetBottom, "%")
248
250
  }
249
251
  });
252
+ var createSize = (value, defaultUnit, defaultValue) => {
253
+ if (!value) {
254
+ return;
255
+ }
256
+ return import_editor_props.sizePropTypeUtil.create(parseSizeValue(value, ["%"], defaultValue, defaultUnit));
257
+ };
250
258
  var extractBoolean = (prop, fallback = false) => {
251
259
  return prop?.value ?? fallback;
252
260
  };
@@ -341,11 +349,11 @@ var createDefaultInteractionItem = () => {
341
349
  var extractString = (prop, fallback = "") => {
342
350
  return prop?.value ?? fallback;
343
351
  };
344
- var extractSize = (prop) => {
345
- return formatSizeValue(prop?.value);
346
- };
347
- var extractNumber = (prop, fallback = 0) => {
348
- return prop?.value ?? fallback;
352
+ var extractSize = (prop, defaultValue) => {
353
+ if (!prop?.value) {
354
+ return defaultValue;
355
+ }
356
+ return formatSizeValue(prop.value);
349
357
  };
350
358
  var TRIGGER_LABELS = {
351
359
  load: "On page load",
@@ -494,7 +502,11 @@ var convertTimeUnit = (value, from, to) => {
494
502
  };
495
503
 
496
504
  // src/components/controls/time-frame-indicator.tsx
497
- function TimeFrameIndicator({ value, onChange, defaultValue }) {
505
+ function TimeFrameIndicator({
506
+ value,
507
+ onChange,
508
+ defaultValue
509
+ }) {
498
510
  const sizeValue = parseSizeValue(value, TIME_UNITS, defaultValue, DEFAULT_TIME_UNIT);
499
511
  const prevUnitRef = (0, import_react5.useRef)(sizeValue.unit);
500
512
  const setValue = (0, import_react5.useCallback)(
@@ -581,8 +593,8 @@ var InteractionDetails = ({ interaction, onChange, onPlayInteraction }) => {
581
593
  const replay = extractBoolean(interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay);
582
594
  const easing = extractString(interaction.animation.value.config?.value.easing, DEFAULT_VALUES.easing);
583
595
  const relativeTo = extractString(interaction.animation.value.config?.value.relativeTo, DEFAULT_VALUES.relativeTo);
584
- const offsetTop = extractNumber(interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop);
585
- const offsetBottom = extractNumber(
596
+ const offsetTop = extractSize(interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop);
597
+ const offsetBottom = extractSize(
586
598
  interaction.animation.value.config?.value.offsetBottom,
587
599
  DEFAULT_VALUES.offsetBottom
588
600
  );
@@ -682,14 +694,14 @@ var InteractionDetails = ({ interaction, onChange, onPlayInteraction }) => {
682
694
  )), OffsetTopControl && /* @__PURE__ */ React9.createElement(Field, { label: (0, import_i18n5.__)("Offset Top", "elementor") }, /* @__PURE__ */ React9.createElement(
683
695
  OffsetTopControl,
684
696
  {
685
- value: String(offsetTop),
686
- onChange: (v) => updateInteraction({ offsetTop: parseInt(v, 10) })
697
+ value: String(parseSizeValue(offsetTop, ["%"]).size),
698
+ onChange: (v) => updateInteraction({ offsetTop: v })
687
699
  }
688
700
  )), OffsetBottomControl && /* @__PURE__ */ React9.createElement(Field, { label: (0, import_i18n5.__)("Offset Bottom", "elementor") }, /* @__PURE__ */ React9.createElement(
689
701
  OffsetBottomControl,
690
702
  {
691
- value: String(offsetBottom),
692
- onChange: (v) => updateInteraction({ offsetBottom: parseInt(v, 10) })
703
+ value: String(parseSizeValue(offsetBottom, ["%"]).size),
704
+ onChange: (v) => updateInteraction({ offsetBottom: v })
693
705
  }
694
706
  ))), /* @__PURE__ */ React9.createElement(import_ui3.Divider, null)), EasingControl && /* @__PURE__ */ React9.createElement(import_ui3.Grid, { container: true, spacing: 1.5 }, /* @__PURE__ */ React9.createElement(Field, { label: (0, import_i18n5.__)("Easing", "elementor") }, /* @__PURE__ */ React9.createElement(
695
707
  EasingControl,
@@ -1151,7 +1163,8 @@ var import_i18n11 = require("@wordpress/i18n");
1151
1163
  function Trigger({ value, onChange }) {
1152
1164
  const availableTriggers = Object.entries({
1153
1165
  load: (0, import_i18n11.__)("Page load", "elementor"),
1154
- scrollIn: (0, import_i18n11.__)("Scroll into view", "elementor")
1166
+ scrollIn: (0, import_i18n11.__)("Scroll into view", "elementor"),
1167
+ scrollOn: (0, import_i18n11.__)("While Scrolling", "elementor")
1155
1168
  }).map(([key, label]) => ({
1156
1169
  key,
1157
1170
  label
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/contexts/interactions-item-context.tsx","../src/utils/prop-value-utils.ts","../src/configs/time-constants.ts","../src/utils/size-transform-utils.ts","../src/utils/temp-id-utils.ts","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/utils/time-conversion.ts","../src/components/interaction-settings.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/providers/utils/normalize-interactions.ts","../src/components/controls/easing.tsx","../src/components/controls/replay.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\nexport { registerInteractionsControl } from './interactions-controls-registry';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as page load or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport type { ElementInteractions } from '../types';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tfirstInteractionState[ 1 ]( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( interactionId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tconst normalizedValue = value && value.items?.length === 0 ? undefined : value;\n\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: normalizedValue,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( interactionId: string ) => {\n\t\tplayElementInteractions( elementId, interactionId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { InteractionsListItem } from './interactions-list-item';\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( interactionId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst hasInitializedRef = useRef( false );\n\n\tconst handleUpdateInteractions = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tonSelectInteractions( newInteractions );\n\t\t},\n\t\t[ onSelectInteractions ]\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttriggerCreateOnShowEmpty &&\n\t\t\t! hasInitializedRef.current &&\n\t\t\t( ! interactions.items || interactions.items?.length === 0 )\n\t\t) {\n\t\t\thasInitializedRef.current = true;\n\t\t\tconst newState: ElementInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t\t};\n\t\t\thandleUpdateInteractions( newState );\n\t\t}\n\t}, [ triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactions.items?.length ] );\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\tconst handleRepeaterChange = useCallback(\n\t\t( newItems: ElementInteractions[ 'items' ] ) => {\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst handleInteractionChange = useCallback(\n\t\t( index: number, newInteractionValue: InteractionItemValue ) => {\n\t\t\tconst newItems = structuredClone( interactions.items );\n\t\t\tnewItems[ index ] = {\n\t\t\t\t$$type: 'interaction-item',\n\t\t\t\tvalue: newInteractionValue,\n\t\t\t};\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tonInteractionChange: handleInteractionChange,\n\t\t\tonPlayInteraction,\n\t\t} ),\n\t\t[ handleInteractionChange, onPlayInteraction ]\n\t);\n\n\treturn (\n\t\t<InteractionItemContextProvider value={ contextValue }>\n\t\t\t<Repeater\n\t\t\t\topenOnAdd\n\t\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tvalues={ interactions.items }\n\t\t\t\tsetValues={ handleRepeaterChange }\n\t\t\t\tshowDuplicate={ false }\n\t\t\t\tshowToggle={ false }\n\t\t\t\tisSortable={ false }\n\t\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\t\titemSettings={ {\n\t\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\t\tIcon: () => null,\n\t\t\t\t\tContent: InteractionsListItem,\n\t\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( extractString( value.value.interaction_id ) ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t),\n\t\t\t\t} }\n\t\t\t/>\n\t\t</InteractionItemContextProvider>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { InteractionItemValue } from '../types';\n\ntype InteractionItemContextValue = {\n\tonInteractionChange: ( index: number, newInteractionValue: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst InteractionItemContext = createContext< InteractionItemContextValue | null >( null );\n\nexport function InteractionItemContextProvider( {\n\tvalue,\n\tchildren,\n}: { value: InteractionItemContextValue } & React.PropsWithChildren ) {\n\treturn <InteractionItemContext.Provider value={ value }>{ children }</InteractionItemContext.Provider>;\n}\n\nexport function useInteractionItemContext() {\n\tconst context = useContext( InteractionItemContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionItemContext must be used within InteractionItemContextProvider' );\n\t}\n\treturn context;\n}\n","import { 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 StringPropValue,\n\ttype TimeValue,\n\ttype TimingConfigPropValue,\n} from '../types';\nimport { formatSizeValue, parseSizeValue } from '../utils/size-transform-utils';\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: TimeValue, delay: TimeValue ): 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 = '',\n\toffsetTop = 0,\n\toffsetBottom = 100,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t\teasing: createString( easing ),\n\t\trelativeTo: createString( relativeTo ),\n\t\toffsetTop: createNumber( offsetTop ),\n\t\toffsetBottom: createNumber( offsetBottom ),\n\t},\n} );\n\nexport const extractBoolean = ( prop: BooleanPropValue | undefined, fallback = false ): boolean => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const createExcludedBreakpoints = ( breakpoints: string[] ): ExcludedBreakpointsPropValue => ( {\n\t$$type: 'excluded-breakpoints',\n\tvalue: breakpoints.map( createString ),\n} );\n\nexport const createInteractionBreakpoints = ( excluded: string[] ): InteractionBreakpointsPropValue => ( {\n\t$$type: 'interaction-breakpoints',\n\tvalue: {\n\t\texcluded: createExcludedBreakpoints( excluded ),\n\t},\n} );\n\nexport const extractExcludedBreakpoints = ( breakpoints: InteractionBreakpointsPropValue | undefined ): string[] => {\n\treturn breakpoints?.value.excluded.value.map( ( bp: StringPropValue ) => bp.value ) ?? [];\n};\n\nexport const createAnimationPreset = ( {\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: TimeValue;\n\tdelay: TimeValue;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( {\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n\texcludedBreakpoints,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: TimeValue;\n\tdelay: TimeValue;\n\tinteractionId?: string;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n\texcludedBreakpoints?: string[];\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( {\n\t\t\teffect,\n\t\t\ttype,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t\t...( excludedBreakpoints &&\n\t\t\texcludedBreakpoints.length > 0 && {\n\t\t\t\tbreakpoints: createInteractionBreakpoints( excludedBreakpoints ),\n\t\t\t} ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 600,\n\t\tdelay: 0,\n\t\treplay: false,\n\t\teasing: 'easeIn',\n\t\tinteractionId: generateTempInteractionId(),\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const extractSize = ( prop: SizePropValue ): TimeValue => {\n\treturn formatSizeValue( prop?.value );\n};\n\nexport const extractNumber = ( prop: NumberPropValue | undefined, fallback = 0 ): number => {\n\treturn prop?.value ?? fallback;\n};\n\nconst TRIGGER_LABELS: Record< string, string > = {\n\tload: 'On page load',\n\tscrollIn: 'Scroll into view',\n\tscrollOut: 'Scroll out of view',\n\tscrollOn: 'While scrolling',\n};\n\nconst capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n\nexport const buildDisplayLabel = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\n\tconst triggerLabel = TRIGGER_LABELS[ trigger ] || capitalize( trigger );\n\tconst effectLabel = capitalize( effect );\n\tconst typeLabel = capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import { type TimeUnit } from '../types';\n\nexport const TIME_UNITS: TimeUnit[] = [ 's', 'ms' ];\n\nexport const DEFAULT_TIME_UNIT = 'ms';\n","import { type SizePropValue } from '@elementor/editor-props';\n\nimport { type TimeUnit, type TimeValue } 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: TimeValue,\n\tallowedUnits: SizeUnit[],\n\tdefaultValue?: TimeValue,\n\tdefaultUnit?: TimeUnit\n): SizeValue => {\n\tif ( typeof value === 'number' ) {\n\t\treturn {\n\t\t\tsize: value,\n\t\t\tunit: defaultUnit as TimeUnit,\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: TimeValue, allowedUnits: SizeUnit[], defaultUnit?: TimeUnit ): 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\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 ): TimeValue => {\n\treturn `${ size ?? '' }${ unit }` as TimeValue;\n};\n\nconst createSizeValue = ( size: number | null, unit?: SizeUnit ): SizeValue => {\n\treturn { size, unit } as SizeValue;\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 * as React from 'react';\nimport { useCallback } from 'react';\nimport { Divider, Tab, TabPanel, Tabs, useTabs } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useInteractionItemContext } from '../contexts/interactions-item-context';\nimport type { InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( { index, value }: { index: number; value: InteractionItemPropValue } ) => {\n\tconst { getTabsProps, getTabProps, getTabPanelProps } = useTabs< InteractionTabValue >( 'details' );\n\n\tconst context = useInteractionItemContext();\n\n\tconst handleChange = useCallback(\n\t\t( newInteractionValue: InteractionItemValue ) => {\n\t\t\tcontext?.onInteractionChange( index, newInteractionValue );\n\t\t},\n\t\t[ context, index ]\n\t);\n\n\tconst handlePlayInteraction = useCallback(\n\t\t( interactionId: string ) => {\n\t\t\tcontext?.onPlayInteraction( interactionId );\n\t\t},\n\t\t[ context ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs\n\t\t\t\tsize=\"small\"\n\t\t\t\tvariant=\"fullWidth\"\n\t\t\t\taria-label={ __( 'Interaction', 'elementor' ) }\n\t\t\t\t{ ...getTabsProps() }\n\t\t\t>\n\t\t\t\t<Tab label={ __( 'Details', 'elementor' ) } { ...getTabProps( 'details' ) } />\n\t\t\t\t<Tab label={ __( 'Settings', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t</Tabs>\n\n\t\t\t<Divider />\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'details' ) }>\n\t\t\t\t<InteractionDetails\n\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tonPlayInteraction={ handlePlayInteraction }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'settings' ) }>\n\t\t\t\t<InteractionSettings interaction={ value.value } onChange={ handleChange } />\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type PropsWithChildren, useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport type { InteractionItemValue, TimeValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractNumber,\n\textractSize,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 600,\n\tdelay: 0,\n\treplay: false,\n\teasing: 'easeIn',\n\trelativeTo: 'viewport',\n\toffsetTop: 15,\n\toffsetBottom: 85,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn' ];\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: TimeValue;\n\tdelay: TimeValue;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\toffsetTop: number;\n\toffsetBottom: number;\n};\n\ntype ControlVisibilityConfig = {\n\t[ key: string ]: ( values: InteractionValues ) => boolean;\n};\n\nconst controlVisibilityConfig: ControlVisibilityConfig = {\n\treplay: ( values ) => ! TRIGGERS_WITHOUT_REPLAY.includes( values.trigger ),\n\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\toffsetTop: ( values ) => values.trigger === 'scrollOn',\n\toffsetBottom: ( values ) => values.trigger === 'scrollOn',\n\n\tduration: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n\tdelay: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n};\n\nfunction useControlComponent( controlName: InteractionsControlType, isVisible: boolean = true ) {\n\treturn useMemo( () => {\n\t\tif ( ! isVisible ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( controlName )?.component ?? null;\n\t}, [ controlName, isVisible ] );\n}\n\nexport const InteractionDetails = ( { interaction, onChange, onPlayInteraction }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = 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 offsetTop = extractNumber( interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop );\n\tconst offsetBottom = extractNumber(\n\t\tinteraction.animation.value.config?.value.offsetBottom,\n\t\tDEFAULT_VALUES.offsetBottom\n\t);\n\n\tconst interactionValues = {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t\teasing,\n\t\treplay,\n\t\trelativeTo,\n\t\toffsetTop,\n\t\toffsetBottom,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst ReplayControl = useControlComponent( 'replay', controlVisibilityConfig.replay( interactionValues ) );\n\tconst RelativeToControl = useControlComponent(\n\t\t'relativeTo',\n\t\tcontrolVisibilityConfig.relativeTo( interactionValues )\n\t);\n\tconst OffsetTopControl = useControlComponent( 'offsetTop', controlVisibilityConfig.offsetTop( interactionValues ) );\n\tconst OffsetBottomControl = useControlComponent(\n\t\t'offsetBottom',\n\t\tcontrolVisibilityConfig.offsetBottom( interactionValues )\n\t);\n\n\tconst EasingControl = useControlComponent( 'easing' );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: TimeValue;\n\t\t\tdelay: TimeValue;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\toffsetTop: number;\n\t\t\toffsetBottom: number;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\n\t\tconst updatedInteraction = {\n\t\t\t...interaction,\n\t\t\tinteraction_id: interaction.interaction_id,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: updates.replay ?? replay,\n\t\t\t\teasing: updates.easing ?? easing,\n\t\t\t\trelativeTo: updates.relativeTo ?? relativeTo,\n\t\t\t\toffsetTop: updates.offsetTop ?? offsetTop,\n\t\t\t\toffsetBottom: updates.offsetBottom ?? offsetBottom,\n\t\t\t} ),\n\t\t};\n\n\t\tonChange( updatedInteraction );\n\n\t\tconst interactionId = extractString( updatedInteraction.interaction_id );\n\n\t\tsetTimeout( () => {\n\t\t\tonPlayInteraction( interactionId );\n\t\t}, 0 );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t{ TriggerControl && (\n\t\t\t\t\t<Field label={ __( 'Trigger', 'elementor' ) }>\n\t\t\t\t\t\t<TriggerControl value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<Field label={ __( 'Replay', 'elementor' ) }>\n\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t<Divider />\n\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t<Direction\n\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\tinteractionType={ type }\n\t\t\t\t\t/>\n\t\t\t\t</Field>\n\n\t\t\t\t{ controlVisibilityConfig.duration( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Duration', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: v as TimeValue } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.duration }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ controlVisibilityConfig.delay( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Delay', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( delay ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { delay: v as TimeValue } ) }\n\t\t\t\t\t\t\tdefaultValue={ DEFAULT_VALUES.delay }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t{ controlVisibilityConfig.relativeTo( interactionValues ) && RelativeToControl && (\n\t\t\t\t<>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t\t<Field label={ __( 'Relative To', 'elementor' ) }>\n\t\t\t\t\t\t\t<RelativeToControl\n\t\t\t\t\t\t\t\tvalue={ relativeTo }\n\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { relativeTo: v } ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t{ OffsetTopControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Top', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetTopControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetTop ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) => updateInteraction( { offsetTop: parseInt( v, 10 ) } ) }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ OffsetBottomControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Bottom', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetBottomControl\n\t\t\t\t\t\t\t\t\tvalue={ String( offsetBottom ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) =>\n\t\t\t\t\t\t\t\t\t\tupdateInteraction( { offsetBottom: parseInt( v, 10 ) } )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Divider />\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ EasingControl && (\n\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t<Field label={ __( 'Easing', 'elementor' ) }>\n\t\t\t\t\t\t<EasingControl\n\t\t\t\t\t\t\tvalue={ easing }\n\t\t\t\t\t\t\tonChange={ ( v ) => {\n\t\t\t\t\t\t\t\tupdateInteraction( { easing: v } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t</PopoverContent>\n\t);\n};\n\ntype FieldProps = {\n\tlabel: string;\n} & PropsWithChildren;\n\nfunction Field( { label, children }: FieldProps ) {\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\toffsetTop: FieldProps;\n\toffsetBottom: FieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t>\n\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { useCallback, useRef } from 'react';\nimport { 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 TimeUnit, type TimeValue } from '../../types';\nimport { formatSizeValue, parseSizeValue } from '../../utils/size-transform-utils';\nimport { convertTimeUnit } from '../../utils/time-conversion';\n\nexport function TimeFrameIndicator( { value, onChange, defaultValue }: FieldProps & { defaultValue: TimeValue } ) {\n\tconst sizeValue = parseSizeValue( value as TimeValue, TIME_UNITS, defaultValue, DEFAULT_TIME_UNIT );\n\tconst prevUnitRef = useRef< TimeUnit >( sizeValue.unit as TimeUnit );\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 TimeUnit;\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 TimeUnit } from '../types';\n\nconst UNIT_TO_MS: Record< TimeUnit, number > = {\n\tms: 1,\n\ts: 1000,\n};\n\nexport const convertTimeUnit = ( value: number, from: TimeUnit, to: TimeUnit ): number => {\n\treturn ( value * UNIT_TO_MS[ from ] ) / UNIT_TO_MS[ to ];\n};\n","import * as React from 'react';\nimport { type SyntheticEvent, useCallback, useMemo, useState } from 'react';\nimport { ControlFormLabel, PopoverContent } from '@elementor/editor-controls';\nimport { useBreakpoints } from '@elementor/editor-responsive';\nimport { Autocomplete, Chip, Grid, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { InteractionItemValue } from '../types';\nimport { createInteractionBreakpoints, extractExcludedBreakpoints } from '../utils/prop-value-utils';\n\ntype BreakpointOption = {\n\tlabel: string;\n\tvalue: string;\n};\n\ntype InteractionSettingsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n};\n\nconst SIZE = 'tiny';\n\nexport const InteractionSettings = ( { interaction, onChange }: InteractionSettingsProps ) => {\n\tconst breakpoints = useBreakpoints();\n\n\tconst availableBreakpoints = useMemo(\n\t\t() => breakpoints.map( ( breakpoint ) => ( { label: breakpoint.label, value: String( breakpoint.id ) } ) ),\n\t\t[ breakpoints ]\n\t);\n\n\tconst [ selectedBreakpoints, setSelectedBreakpoints ] = useState< BreakpointOption[] >( () => {\n\t\tconst excluded = extractExcludedBreakpoints( interaction.breakpoints ).filter( ( excludedBreakpoint ) => {\n\t\t\treturn availableBreakpoints.some( ( { value } ) => value === excludedBreakpoint );\n\t\t} );\n\n\t\treturn availableBreakpoints.filter( ( { value } ) => {\n\t\t\treturn ! excluded.includes( value );\n\t\t} );\n\t} );\n\n\tconst handleBreakpointChange = useCallback(\n\t\t( _: SyntheticEvent, newValue: BreakpointOption[] ) => {\n\t\t\tsetSelectedBreakpoints( newValue );\n\n\t\t\tconst selectedValues = newValue.map( ( option ) => option.value );\n\n\t\t\tconst newExcluded = availableBreakpoints\n\t\t\t\t.filter( ( breakpoint ) => ! selectedValues.includes( breakpoint.value ) )\n\t\t\t\t.map( ( breakpoint ) => breakpoint.value );\n\n\t\t\tconst updatedInteraction: InteractionItemValue = {\n\t\t\t\t...interaction,\n\t\t\t\t...( newExcluded.length > 0 && {\n\t\t\t\t\tbreakpoints: createInteractionBreakpoints( newExcluded ),\n\t\t\t\t} ),\n\t\t\t};\n\n\t\t\tif ( newExcluded.length === 0 ) {\n\t\t\t\tdelete updatedInteraction.breakpoints;\n\t\t\t}\n\n\t\t\tonChange( updatedInteraction );\n\t\t},\n\t\t[ interaction, availableBreakpoints, onChange ]\n\t);\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Stack direction=\"column\" gap={ 1 }>\n\t\t\t\t\t\t<ControlFormLabel sx={ { width: '100%' } }>\n\t\t\t\t\t\t\t{ __( 'Trigger on', 'elementor' ) }\n\t\t\t\t\t\t</ControlFormLabel>\n\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tvalue={ selectedBreakpoints }\n\t\t\t\t\t\t\tonChange={ handleBreakpointChange }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\toptions={ availableBreakpoints }\n\t\t\t\t\t\t\tisOptionEqualToValue={ ( option, value ) => option.value === value.value }\n\t\t\t\t\t\t\trenderInput={ ( params ) => <TextField { ...params } /> }\n\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\tvalues.map( ( option, index ) => {\n\t\t\t\t\t\t\t\t\tconst { key, ...chipProps } = getTagProps( { index } );\n\t\t\t\t\t\t\t\t\treturn <Chip key={ key } size={ SIZE } label={ option.label } { ...chipProps } />;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</PopoverContent>\n\t);\n};\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\nimport { normalizeInteractions } from './utils/normalize-interactions';\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\tconst normalizedInteractions = normalizeInteractions( interactions );\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: normalizedInteractions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import { type ElementInteractions } from '@elementor/editor-elements';\nimport {\n\tisTransformable,\n\tnumberPropTypeUtil,\n\ttype PropValue,\n\ttype SizePropValue,\n\ttype TransformablePropValue,\n} from '@elementor/editor-props';\n\nimport { type TimeUnit } from '../../types';\nimport { convertTimeUnit } from '../../utils/time-conversion';\n\ntype Normalizer = ( value: TransformablePropValue< string, unknown > ) => PropValue;\n\nconst FIELD_NORMALIZERS: Record< string, Normalizer > = {\n\tsize: ( value ) => {\n\t\tconst sizeProp = value as SizePropValue;\n\t\tconst { size, unit } = sizeProp.value;\n\t\tconst numberPropValue = convertTimeUnit( size as number, unit as TimeUnit, 'ms' );\n\n\t\treturn numberPropTypeUtil.create( numberPropValue );\n\t},\n};\n\nexport const normalizeInteractions = ( interactions?: ElementInteractions ): ElementInteractions | undefined => {\n\tif ( ! interactions ) {\n\t\treturn;\n\t}\n\n\tif ( interactions.items.length === 0 ) {\n\t\treturn interactions;\n\t}\n\n\treturn {\n\t\t...interactions,\n\t\titems: interactions.items.map( normalizeNode ),\n\t} as ElementInteractions;\n};\n\nconst normalizeNode = ( node: PropValue ): PropValue => {\n\tif ( Array.isArray( node ) ) {\n\t\treturn node.map( normalizeNode );\n\t}\n\n\tif ( node !== null && typeof node === 'object' ) {\n\t\tif ( isTransformable( node ) && node.value !== undefined ) {\n\t\t\tconst normalizer = FIELD_NORMALIZERS[ node.$$type ];\n\n\t\t\tif ( normalizer ) {\n\t\t\t\treturn normalizer( node as TransformablePropValue< string > );\n\t\t\t}\n\t\t}\n\n\t\tconst typedNode = node as Record< string, unknown >;\n\t\tconst out: Record< string, PropValue > = {};\n\n\t\tfor ( const k in typedNode ) {\n\t\t\tout[ k ] = normalizeNode( typedNode[ k ] as PropValue );\n\t\t}\n\n\t\treturn out;\n\t}\n\n\treturn node;\n};\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nconst EASING_OPTIONS = {\n\teaseIn: __( 'Ease In', 'elementor' ),\n\teaseInOut: __( 'Ease In Out', 'elementor' ),\n\teaseOut: __( 'Ease Out', 'elementor' ),\n\tbackIn: __( 'Back In', 'elementor' ),\n\tbackInOut: __( 'Back In Out', 'elementor' ),\n\tbackOut: __( 'Back Out', 'elementor' ),\n\tlinear: __( 'Linear', 'elementor' ),\n};\n\nconst DEFAULT_EASING = 'easeIn';\n\nexport function Easing( {}: FieldProps ) {\n\tconst availableOptions = Object.entries( EASING_OPTIONS ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select value={ DEFAULT_EASING } onChange={ () => {} } fullWidth displayEmpty size=\"tiny\">\n\t\t\t{ availableOptions.map( ( option ) => {\n\t\t\t\tconst isDisabled = DEFAULT_EASING !== option.key;\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ option.key } value={ option.key } disabled={ isDisabled }>\n\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { CheckIcon, MinusIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type ReplayFieldProps } from '../../types';\n\nexport function Replay( { onChange }: ReplayFieldProps ) {\n\tconst options: ToggleButtonGroupItem< boolean >[] = [\n\t\t{\n\t\t\tvalue: false,\n\t\t\tdisabled: false,\n\t\t\tlabel: __( 'No', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <MinusIcon fontSize={ size } />,\n\t\t},\n\t\t{\n\t\t\tvalue: true,\n\t\t\tdisabled: true,\n\t\t\tlabel: __( 'Yes', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <CheckIcon fontSize={ size } />,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ false } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\tvalue={ value }\n\t\t>\n\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value ) {\n\t\t\tinteraction.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { Easing } from './components/controls/easing';\nimport { Replay } from './components/controls/replay';\nimport { Trigger } from './components/controls/trigger';\nimport { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { registerInteractionsControl } from './interactions-controls-registry';\nimport { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t\tinitCleanInteractionIdsOnDuplicate();\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'trigger',\n\t\t\tcomponent: Trigger,\n\t\t\toptions: [ 'load', 'scrollIn' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'easing',\n\t\t\tcomponent: Easing,\n\t\t\toptions: [ 'easeIn' ],\n\t\t} );\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'replay',\n\t\t\tcomponent: Replay,\n\t\t\toptions: [ 'true', 'false' ],\n\t\t} );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_editor_controls","import_icons","import_ui","import_i18n","React","import_react","React","import_react","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_icons","import_i18n","React","import_ui","import_i18n","React","import_editor_controls","import_i18n","React","import_react","import_editor_controls","React","import_react","import_editor_controls","import_ui","import_i18n","import_editor_elements","import_editor_props","listenTo","React","import_editor_ui","import_ui","import_i18n","React","import_editor_controls","import_icons","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","import_editor_v1_adapters"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/contexts/interactions-item-context.tsx","../src/utils/prop-value-utils.ts","../src/configs/time-constants.ts","../src/utils/size-transform-utils.ts","../src/utils/temp-id-utils.ts","../src/components/interactions-list-item.tsx","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/utils/time-conversion.ts","../src/components/interaction-settings.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/providers/utils/normalize-interactions.ts","../src/components/controls/easing.tsx","../src/components/controls/replay.tsx","../src/components/controls/trigger.tsx","../src/hooks/on-duplicate.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\nexport { registerInteractionsControl } from './interactions-controls-registry';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as page load or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport type { ElementInteractions } from '../types';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tfirstInteractionState[ 1 ]( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( interactionId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tconst normalizedValue = value && value.items?.length === 0 ? undefined : value;\n\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: normalizedValue,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( interactionId: string ) => {\n\t\tplayElementInteractions( elementId, interactionId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { InteractionItemContextProvider } from '../contexts/interactions-item-context';\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { InteractionsListItem } from './interactions-list-item';\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( interactionId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst hasInitializedRef = useRef( false );\n\n\tconst handleUpdateInteractions = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tonSelectInteractions( newInteractions );\n\t\t},\n\t\t[ onSelectInteractions ]\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttriggerCreateOnShowEmpty &&\n\t\t\t! hasInitializedRef.current &&\n\t\t\t( ! interactions.items || interactions.items?.length === 0 )\n\t\t) {\n\t\t\thasInitializedRef.current = true;\n\t\t\tconst newState: ElementInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t\t};\n\t\t\thandleUpdateInteractions( newState );\n\t\t}\n\t}, [ triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactions.items?.length ] );\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\tconst handleRepeaterChange = useCallback(\n\t\t( newItems: ElementInteractions[ 'items' ] ) => {\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst handleInteractionChange = useCallback(\n\t\t( index: number, newInteractionValue: InteractionItemValue ) => {\n\t\t\tconst newItems = structuredClone( interactions.items );\n\t\t\tnewItems[ index ] = {\n\t\t\t\t$$type: 'interaction-item',\n\t\t\t\tvalue: newInteractionValue,\n\t\t\t};\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\tonInteractionChange: handleInteractionChange,\n\t\t\tonPlayInteraction,\n\t\t} ),\n\t\t[ handleInteractionChange, onPlayInteraction ]\n\t);\n\n\treturn (\n\t\t<InteractionItemContextProvider value={ contextValue }>\n\t\t\t<Repeater\n\t\t\t\topenOnAdd\n\t\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\t\tvalues={ interactions.items }\n\t\t\t\tsetValues={ handleRepeaterChange }\n\t\t\t\tshowDuplicate={ false }\n\t\t\t\tshowToggle={ false }\n\t\t\t\tisSortable={ false }\n\t\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\t\titemSettings={ {\n\t\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\t\tIcon: () => null,\n\t\t\t\t\tContent: InteractionsListItem,\n\t\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( extractString( value.value.interaction_id ) ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t),\n\t\t\t\t} }\n\t\t\t/>\n\t\t</InteractionItemContextProvider>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { InteractionItemValue } from '../types';\n\ntype InteractionItemContextValue = {\n\tonInteractionChange: ( index: number, newInteractionValue: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst InteractionItemContext = createContext< InteractionItemContextValue | null >( null );\n\nexport function InteractionItemContextProvider( {\n\tvalue,\n\tchildren,\n}: { value: InteractionItemContextValue } & React.PropsWithChildren ) {\n\treturn <InteractionItemContext.Provider value={ value }>{ children }</InteractionItemContext.Provider>;\n}\n\nexport function useInteractionItemContext() {\n\tconst context = useContext( InteractionItemContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionItemContext must be used within InteractionItemContextProvider' );\n\t}\n\treturn context;\n}\n","import { type Unit } from '@elementor/editor-controls';\nimport { 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 { 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 = '',\n\toffsetTop = 0,\n\toffsetBottom = 85,\n}: {\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: SizeStringValue;\n\toffsetBottom?: SizeStringValue;\n} ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t\teasing: createString( easing ),\n\t\trelativeTo: createString( relativeTo ),\n\t\toffsetTop: createSize( offsetTop, '%' ),\n\t\toffsetBottom: createSize( offsetBottom, '%' ),\n\t},\n} );\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\toffsetTop,\n\toffsetBottom,\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\toffsetTop?: SizeStringValue;\n\toffsetBottom?: SizeStringValue;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( {\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n\teasing = 'easeIn',\n\trelativeTo,\n\toffsetTop,\n\toffsetBottom,\n\texcludedBreakpoints,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: SizeStringValue;\n\tdelay: SizeStringValue;\n\tinteractionId?: string;\n\treplay: boolean;\n\teasing?: string;\n\trelativeTo?: string;\n\toffsetTop?: number;\n\toffsetBottom?: number;\n\texcludedBreakpoints?: string[];\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( {\n\t\t\teffect,\n\t\t\ttype,\n\t\t\tdirection,\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\treplay,\n\t\t\teasing,\n\t\t\trelativeTo,\n\t\t\toffsetTop,\n\t\t\toffsetBottom,\n\t\t} ),\n\t\t...( excludedBreakpoints &&\n\t\t\texcludedBreakpoints.length > 0 && {\n\t\t\t\tbreakpoints: createInteractionBreakpoints( excludedBreakpoints ),\n\t\t\t} ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 600,\n\t\tdelay: 0,\n\t\treplay: false,\n\t\teasing: 'easeIn',\n\t\tinteractionId: generateTempInteractionId(),\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const 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 = 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","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 * as React from 'react';\nimport { useCallback } from 'react';\nimport { Divider, Tab, TabPanel, Tabs, useTabs } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useInteractionItemContext } from '../contexts/interactions-item-context';\nimport type { InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { InteractionDetails } from './interaction-details';\nimport { InteractionSettings } from './interaction-settings';\n\ntype InteractionTabValue = 'details' | 'settings';\n\nexport const InteractionsListItem = ( { index, value }: { index: number; value: InteractionItemPropValue } ) => {\n\tconst { getTabsProps, getTabProps, getTabPanelProps } = useTabs< InteractionTabValue >( 'details' );\n\n\tconst context = useInteractionItemContext();\n\n\tconst handleChange = useCallback(\n\t\t( newInteractionValue: InteractionItemValue ) => {\n\t\t\tcontext?.onInteractionChange( index, newInteractionValue );\n\t\t},\n\t\t[ context, index ]\n\t);\n\n\tconst handlePlayInteraction = useCallback(\n\t\t( interactionId: string ) => {\n\t\t\tcontext?.onPlayInteraction( interactionId );\n\t\t},\n\t\t[ context ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs\n\t\t\t\tsize=\"small\"\n\t\t\t\tvariant=\"fullWidth\"\n\t\t\t\taria-label={ __( 'Interaction', 'elementor' ) }\n\t\t\t\t{ ...getTabsProps() }\n\t\t\t>\n\t\t\t\t<Tab label={ __( 'Details', 'elementor' ) } { ...getTabProps( 'details' ) } />\n\t\t\t\t<Tab label={ __( 'Settings', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t</Tabs>\n\n\t\t\t<Divider />\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'details' ) }>\n\t\t\t\t<InteractionDetails\n\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tonPlayInteraction={ handlePlayInteraction }\n\t\t\t\t/>\n\t\t\t</TabPanel>\n\n\t\t\t<TabPanel sx={ { p: 0 } } { ...getTabPanelProps( 'settings' ) }>\n\t\t\t\t<InteractionSettings interaction={ value.value } onChange={ handleChange } />\n\t\t\t</TabPanel>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type PropsWithChildren, useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport { type InteractionItemValue, type SizeStringValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractSize,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { parseSizeValue } from '../utils/size-transform-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 600,\n\tdelay: 0,\n\treplay: false,\n\teasing: 'easeIn',\n\trelativeTo: 'viewport',\n\toffsetTop: 15,\n\toffsetBottom: 85,\n};\n\nconst TRIGGERS_WITHOUT_REPLAY = [ 'load', 'scrollOn' ];\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionValues = {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection: string;\n\tduration: SizeStringValue;\n\tdelay: SizeStringValue;\n\treplay: boolean;\n\teasing: string;\n\trelativeTo: string;\n\toffsetTop: SizeStringValue;\n\toffsetBottom: SizeStringValue;\n};\n\ntype ControlVisibilityConfig = {\n\t[ key: string ]: ( values: InteractionValues ) => boolean;\n};\n\nconst controlVisibilityConfig: ControlVisibilityConfig = {\n\treplay: ( values ) => ! TRIGGERS_WITHOUT_REPLAY.includes( values.trigger ),\n\n\trelativeTo: ( values ) => values.trigger === 'scrollOn',\n\toffsetTop: ( values ) => values.trigger === 'scrollOn',\n\toffsetBottom: ( values ) => values.trigger === 'scrollOn',\n\n\tduration: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n\tdelay: ( values ) => {\n\t\tconst isRelativeToVisible = values.trigger === 'scrollOn';\n\t\treturn ! isRelativeToVisible;\n\t},\n};\n\nfunction useControlComponent( controlName: InteractionsControlType, isVisible: boolean = true ) {\n\treturn useMemo( () => {\n\t\tif ( ! isVisible ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( controlName )?.component ?? null;\n\t}, [ controlName, isVisible ] );\n}\n\nexport const InteractionDetails = ( { interaction, onChange, onPlayInteraction }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = 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\n\tconst offsetTop = extractSize( interaction.animation.value.config?.value.offsetTop, DEFAULT_VALUES.offsetTop );\n\tconst offsetBottom = extractSize(\n\t\tinteraction.animation.value.config?.value.offsetBottom,\n\t\tDEFAULT_VALUES.offsetBottom\n\t);\n\n\tconst interactionValues = {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t\teasing,\n\t\treplay,\n\t\trelativeTo,\n\t\toffsetTop,\n\t\toffsetBottom,\n\t};\n\n\tconst TriggerControl = useControlComponent( 'trigger', true );\n\tconst ReplayControl = useControlComponent( 'replay', controlVisibilityConfig.replay( interactionValues ) );\n\tconst RelativeToControl = useControlComponent(\n\t\t'relativeTo',\n\t\tcontrolVisibilityConfig.relativeTo( interactionValues )\n\t);\n\tconst OffsetTopControl = useControlComponent( 'offsetTop', controlVisibilityConfig.offsetTop( interactionValues ) );\n\tconst OffsetBottomControl = useControlComponent(\n\t\t'offsetBottom',\n\t\tcontrolVisibilityConfig.offsetBottom( interactionValues )\n\t);\n\n\tconst EasingControl = useControlComponent( 'easing' );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: SizeStringValue;\n\t\t\tdelay: SizeStringValue;\n\t\t\treplay: boolean;\n\t\t\teasing?: string;\n\t\t\trelativeTo: string;\n\t\t\toffsetTop: SizeStringValue;\n\t\t\toffsetBottom: SizeStringValue;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\n\t\tconst updatedInteraction = {\n\t\t\t...interaction,\n\t\t\tinteraction_id: interaction.interaction_id,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: updates.replay ?? replay,\n\t\t\t\teasing: updates.easing ?? easing,\n\t\t\t\trelativeTo: updates.relativeTo ?? relativeTo,\n\t\t\t\toffsetTop: updates.offsetTop ?? offsetTop,\n\t\t\t\toffsetBottom: updates.offsetBottom ?? offsetBottom,\n\t\t\t} ),\n\t\t};\n\n\t\tonChange( updatedInteraction );\n\n\t\tconst interactionId = extractString( updatedInteraction.interaction_id );\n\n\t\tsetTimeout( () => {\n\t\t\tonPlayInteraction( interactionId );\n\t\t}, 0 );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t{ TriggerControl && (\n\t\t\t\t\t<Field label={ __( 'Trigger', 'elementor' ) }>\n\t\t\t\t\t\t<TriggerControl value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<Field label={ __( 'Replay', 'elementor' ) }>\n\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t) }\n\t\t\t</Grid>\n\n\t\t\t<Divider />\n\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Field label={ __( 'Effect', 'elementor' ) }>\n\t\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Type', 'elementor' ) }>\n\t\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t</Field>\n\n\t\t\t\t<Field label={ __( 'Direction', 'elementor' ) }>\n\t\t\t\t\t<Direction\n\t\t\t\t\t\tvalue={ direction }\n\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\t\tinteractionType={ type }\n\t\t\t\t\t/>\n\t\t\t\t</Field>\n\n\t\t\t\t{ controlVisibilityConfig.duration( interactionValues ) && (\n\t\t\t\t\t<Field label={ __( 'Duration', 'elementor' ) }>\n\t\t\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: 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<Field label={ __( 'Relative To', 'elementor' ) }>\n\t\t\t\t\t\t\t<RelativeToControl\n\t\t\t\t\t\t\t\tvalue={ relativeTo }\n\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { relativeTo: v } ) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t{ OffsetTopControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Top', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetTopControl\n\t\t\t\t\t\t\t\t\tvalue={ String( parseSizeValue( offsetTop, [ '%' ] ).size ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) =>\n\t\t\t\t\t\t\t\t\t\tupdateInteraction( { offsetTop: v as SizeStringValue } )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ OffsetBottomControl && (\n\t\t\t\t\t\t\t<Field label={ __( 'Offset Bottom', 'elementor' ) }>\n\t\t\t\t\t\t\t\t<OffsetBottomControl\n\t\t\t\t\t\t\t\t\tvalue={ String( parseSizeValue( offsetBottom, [ '%' ] ).size ) }\n\t\t\t\t\t\t\t\t\tonChange={ ( v: string ) =>\n\t\t\t\t\t\t\t\t\t\tupdateInteraction( { offsetBottom: v as SizeStringValue } )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Divider />\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ EasingControl && (\n\t\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t\t<Field label={ __( 'Easing', 'elementor' ) }>\n\t\t\t\t\t\t<EasingControl\n\t\t\t\t\t\t\tvalue={ easing }\n\t\t\t\t\t\t\tonChange={ ( v ) => {\n\t\t\t\t\t\t\t\tupdateInteraction( { easing: v } );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field>\n\t\t\t\t</Grid>\n\t\t\t) }\n\t\t</PopoverContent>\n\t);\n};\n\ntype FieldProps = {\n\tlabel: string;\n} & PropsWithChildren;\n\nfunction Field( { label, children }: FieldProps ) {\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType =\n\t| 'trigger'\n\t| 'effect'\n\t| 'effectType'\n\t| 'direction'\n\t| 'duration'\n\t| 'delay'\n\t| 'replay'\n\t| 'easing'\n\t| 'relativeTo'\n\t| 'offsetTop'\n\t| 'offsetBottom';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n\teasing: FieldProps;\n\trelativeTo: FieldProps;\n\toffsetTop: FieldProps;\n\toffsetBottom: FieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tvalue={ value }\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t>\n\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />;\n}\n","import * as React from 'react';\nimport { useCallback, 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 SyntheticEvent, useCallback, useMemo, useState } from 'react';\nimport { ControlFormLabel, PopoverContent } from '@elementor/editor-controls';\nimport { useBreakpoints } from '@elementor/editor-responsive';\nimport { Autocomplete, Chip, Grid, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { InteractionItemValue } from '../types';\nimport { createInteractionBreakpoints, extractExcludedBreakpoints } from '../utils/prop-value-utils';\n\ntype BreakpointOption = {\n\tlabel: string;\n\tvalue: string;\n};\n\ntype InteractionSettingsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n};\n\nconst SIZE = 'tiny';\n\nexport const InteractionSettings = ( { interaction, onChange }: InteractionSettingsProps ) => {\n\tconst breakpoints = useBreakpoints();\n\n\tconst availableBreakpoints = useMemo(\n\t\t() => breakpoints.map( ( breakpoint ) => ( { label: breakpoint.label, value: String( breakpoint.id ) } ) ),\n\t\t[ breakpoints ]\n\t);\n\n\tconst [ selectedBreakpoints, setSelectedBreakpoints ] = useState< BreakpointOption[] >( () => {\n\t\tconst excluded = extractExcludedBreakpoints( interaction.breakpoints ).filter( ( excludedBreakpoint ) => {\n\t\t\treturn availableBreakpoints.some( ( { value } ) => value === excludedBreakpoint );\n\t\t} );\n\n\t\treturn availableBreakpoints.filter( ( { value } ) => {\n\t\t\treturn ! excluded.includes( value );\n\t\t} );\n\t} );\n\n\tconst handleBreakpointChange = useCallback(\n\t\t( _: SyntheticEvent, newValue: BreakpointOption[] ) => {\n\t\t\tsetSelectedBreakpoints( newValue );\n\n\t\t\tconst selectedValues = newValue.map( ( option ) => option.value );\n\n\t\t\tconst newExcluded = availableBreakpoints\n\t\t\t\t.filter( ( breakpoint ) => ! selectedValues.includes( breakpoint.value ) )\n\t\t\t\t.map( ( breakpoint ) => breakpoint.value );\n\n\t\t\tconst updatedInteraction: InteractionItemValue = {\n\t\t\t\t...interaction,\n\t\t\t\t...( newExcluded.length > 0 && {\n\t\t\t\t\tbreakpoints: createInteractionBreakpoints( newExcluded ),\n\t\t\t\t} ),\n\t\t\t};\n\n\t\t\tif ( newExcluded.length === 0 ) {\n\t\t\t\tdelete updatedInteraction.breakpoints;\n\t\t\t}\n\n\t\t\tonChange( updatedInteraction );\n\t\t},\n\t\t[ interaction, availableBreakpoints, onChange ]\n\t);\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Stack direction=\"column\" gap={ 1 }>\n\t\t\t\t\t\t<ControlFormLabel sx={ { width: '100%' } }>\n\t\t\t\t\t\t\t{ __( 'Trigger on', 'elementor' ) }\n\t\t\t\t\t\t</ControlFormLabel>\n\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\tvalue={ selectedBreakpoints }\n\t\t\t\t\t\t\tonChange={ handleBreakpointChange }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\toptions={ availableBreakpoints }\n\t\t\t\t\t\t\tisOptionEqualToValue={ ( option, value ) => option.value === value.value }\n\t\t\t\t\t\t\trenderInput={ ( params ) => <TextField { ...params } /> }\n\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\tvalues.map( ( option, index ) => {\n\t\t\t\t\t\t\t\t\tconst { key, ...chipProps } = getTagProps( { index } );\n\t\t\t\t\t\t\t\t\treturn <Chip key={ key } size={ SIZE } label={ option.label } { ...chipProps } />;\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</PopoverContent>\n\t);\n};\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\nimport { normalizeInteractions } from './utils/normalize-interactions';\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\tconst normalizedInteractions = normalizeInteractions( interactions );\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: normalizedInteractions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import { type Unit } from '@elementor/editor-controls';\nimport { type ElementInteractions } from '@elementor/editor-elements';\nimport {\n\tisTransformable,\n\tnumberPropTypeUtil,\n\ttype PropValue,\n\ttype SizePropValue,\n\ttype TransformablePropValue,\n} from '@elementor/editor-props';\n\nimport { convertTimeUnit } from '../../utils/time-conversion';\n\ntype Normalizer = ( value: TransformablePropValue< string > ) => PropValue;\n\nconst FIELD_NORMALIZERS: Record< string, Normalizer > = {\n\tsize: ( value ) => {\n\t\tconst sizeProp = value as SizePropValue;\n\t\tconst { size, unit } = sizeProp.value;\n\t\tconst numberPropValue = convertTimeUnit( size as number, unit as Unit, 'ms' );\n\n\t\treturn numberPropTypeUtil.create( numberPropValue );\n\t},\n};\n\nexport const normalizeInteractions = ( interactions?: ElementInteractions ): ElementInteractions | undefined => {\n\tif ( ! interactions ) {\n\t\treturn;\n\t}\n\n\tif ( interactions.items.length === 0 ) {\n\t\treturn interactions;\n\t}\n\n\treturn {\n\t\t...interactions,\n\t\titems: interactions.items.map( normalizeNode ),\n\t} as ElementInteractions;\n};\n\nconst normalizeNode = ( node: PropValue ): PropValue => {\n\tif ( Array.isArray( node ) ) {\n\t\treturn node.map( normalizeNode );\n\t}\n\n\tif ( node !== null && typeof node === 'object' ) {\n\t\tif ( isTransformable( node ) && node.value !== undefined ) {\n\t\t\tconst normalizer = FIELD_NORMALIZERS[ node.$$type ];\n\n\t\t\tif ( normalizer ) {\n\t\t\t\treturn normalizer( node as TransformablePropValue< string > );\n\t\t\t}\n\t\t}\n\n\t\tconst typedNode = node as Record< string, unknown >;\n\t\tconst out: Record< string, PropValue > = {};\n\n\t\tfor ( const k in typedNode ) {\n\t\t\tout[ k ] = normalizeNode( typedNode[ k ] as PropValue );\n\t\t}\n\n\t\treturn out;\n\t}\n\n\treturn node;\n};\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nconst EASING_OPTIONS = {\n\teaseIn: __( 'Ease In', 'elementor' ),\n\teaseInOut: __( 'Ease In Out', 'elementor' ),\n\teaseOut: __( 'Ease Out', 'elementor' ),\n\tbackIn: __( 'Back In', 'elementor' ),\n\tbackInOut: __( 'Back In Out', 'elementor' ),\n\tbackOut: __( 'Back Out', 'elementor' ),\n\tlinear: __( 'Linear', 'elementor' ),\n};\n\nconst DEFAULT_EASING = 'easeIn';\n\nexport function Easing( {}: FieldProps ) {\n\tconst availableOptions = Object.entries( EASING_OPTIONS ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select value={ DEFAULT_EASING } onChange={ () => {} } fullWidth displayEmpty size=\"tiny\">\n\t\t\t{ availableOptions.map( ( option ) => {\n\t\t\t\tconst isDisabled = DEFAULT_EASING !== option.key;\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ option.key } value={ option.key } disabled={ isDisabled }>\n\t\t\t\t\t\t{ option.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import * as React from 'react';\nimport { type ToggleButtonGroupItem, ToggleButtonGroupUi } from '@elementor/editor-controls';\nimport { CheckIcon, MinusIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { type ReplayFieldProps } from '../../types';\n\nexport function Replay( { onChange }: ReplayFieldProps ) {\n\tconst options: ToggleButtonGroupItem< boolean >[] = [\n\t\t{\n\t\t\tvalue: false,\n\t\t\tdisabled: false,\n\t\t\tlabel: __( 'No', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <MinusIcon fontSize={ size } />,\n\t\t},\n\t\t{\n\t\t\tvalue: true,\n\t\t\tdisabled: true,\n\t\t\tlabel: __( 'Yes', 'elementor' ),\n\t\t\trenderContent: ( { size } ) => <CheckIcon fontSize={ size } />,\n\t\t},\n\t];\n\n\treturn <ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ false } />;\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOn: __( 'While Scrolling', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Select\n\t\t\tfullWidth\n\t\t\tdisplayEmpty\n\t\t\tsize=\"tiny\"\n\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\tvalue={ value }\n\t\t>\n\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t</MenuListItem>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</Select>\n\t);\n}\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value ) {\n\t\t\tinteraction.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { Easing } from './components/controls/easing';\nimport { Replay } from './components/controls/replay';\nimport { Trigger } from './components/controls/trigger';\nimport { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { registerInteractionsControl } from './interactions-controls-registry';\nimport { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t\tinitCleanInteractionIdsOnDuplicate();\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'trigger',\n\t\t\tcomponent: Trigger,\n\t\t\toptions: [ 'load', 'scrollIn' ],\n\t\t} );\n\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'easing',\n\t\t\tcomponent: Easing,\n\t\t\toptions: [ 'easeIn' ],\n\t\t} );\n\t\tregisterInteractionsControl( {\n\t\t\ttype: 'replay',\n\t\t\tcomponent: Replay,\n\t\t\toptions: [ 'true', 'false' ],\n\t\t} );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_editor_controls","import_icons","import_ui","import_i18n","React","import_react","React","import_react","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_icons","import_i18n","React","import_ui","import_i18n","React","import_editor_controls","import_i18n","React","import_react","import_editor_controls","React","import_react","import_editor_controls","import_ui","import_i18n","import_editor_elements","import_editor_props","listenTo","React","import_editor_ui","import_ui","import_i18n","React","import_editor_controls","import_icons","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","import_editor_v1_adapters"]}