@elementor/editor-interactions 3.33.0-259 → 3.33.0-261

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -80,6 +80,9 @@ var import_editor_elements = require("@elementor/editor-elements");
80
80
  var InteractionsContext = (0, import_react.createContext)(null);
81
81
  var InteractionsProvider = ({ children, elementId }) => {
82
82
  const interactions = (0, import_editor_elements.useElementInteractions)(elementId);
83
+ (0, import_react.useEffect)(() => {
84
+ window.dispatchEvent(new CustomEvent("elementor/element/update_interactions"));
85
+ }, []);
83
86
  const setInteractions = (value) => {
84
87
  (0, import_editor_elements.updateElementInteractions)({
85
88
  elementId,
@@ -165,7 +168,8 @@ function Direction({ value, onChange }) {
165
168
  size: "tiny",
166
169
  exclusive: true,
167
170
  onChange: (event, newValue) => onChange(newValue),
168
- value
171
+ value,
172
+ "aria-label": (0, import_i18n2.__)("Direction", "elementor")
169
173
  },
170
174
  availableDirections.map((direction) => {
171
175
  return /* @__PURE__ */ React4.createElement(import_ui2.Tooltip, { key: direction.key, title: direction.label, placement: "top" }, /* @__PURE__ */ React4.createElement(import_ui2.ToggleButton, { key: direction.key, value: direction.key }, direction.icon));
@@ -214,7 +218,8 @@ function EffectType({ value, onChange }) {
214
218
  size: "tiny",
215
219
  exclusive: true,
216
220
  onChange: (event, newValue) => onChange(newValue),
217
- value
221
+ value,
222
+ "aria-label": (0, import_i18n4.__)("Type", "elementor")
218
223
  },
219
224
  availableEffectTypes.map((effectType) => {
220
225
  return /* @__PURE__ */ React6.createElement(import_ui4.Tooltip, { key: effectType.key, title: effectType.label, placement: "top" }, /* @__PURE__ */ React6.createElement(import_ui4.ToggleButton, { key: effectType.key, value: effectType.key }, effectType.label));
@@ -544,7 +549,7 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
544
549
  actions: {
545
550
  all: () => {
546
551
  const elements = (0, import_editor_elements3.getElements)();
547
- return elements.filter((element) => {
552
+ const filtered = elements.filter((element) => {
548
553
  const interactions = element.model.get("interactions");
549
554
  if (!interactions) {
550
555
  return false;
@@ -560,8 +565,15 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
560
565
  return !!interactions.trim();
561
566
  }
562
567
  }
568
+ if (typeof interactions === "object" && interactions !== null) {
569
+ if (Array.isArray(interactions.items)) {
570
+ return interactions.items.length > 0;
571
+ }
572
+ return Object.keys(interactions).length > 0;
573
+ }
563
574
  return false;
564
- }).map((element) => {
575
+ });
576
+ return filtered.map((element) => {
565
577
  const interactions = (0, import_editor_elements3.getElementInteractions)(element.id);
566
578
  const dataId = String(element.id);
567
579
  return {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { DEFAULT_INTERACTION, InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( DEFAULT_INTERACTION );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: DEFAULT_INTERACTION,\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\nexport const DEFAULT_INTERACTION = 'load-fade-in--300-0';\n\nconst getDefaultInteractionDetails = () => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = DEFAULT_INTERACTION.split( DELIMITER );\n\n\treturn {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t};\n};\n\nconst buildInteractionDetails = ( interaction: string ) => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\tconst defaultInteractionDetails = getDefaultInteractionDetails();\n\n\treturn {\n\t\ttrigger: trigger || defaultInteractionDetails.trigger,\n\t\teffect: effect || defaultInteractionDetails.effect,\n\t\ttype: type || defaultInteractionDetails.type,\n\t\tdirection: direction || defaultInteractionDetails.direction,\n\t\tduration: duration || defaultInteractionDetails.duration,\n\t\tdelay: delay || defaultInteractionDetails.delay,\n\t};\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst interactionDetails = React.useMemo( () => {\n\t\treturn buildInteractionDetails( interaction );\n\t}, [ interaction ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tif ( value === null ) {\n\t\t\tvalue = getDefaultInteractionDetails()[ key ];\n\t\t}\n\t\tconst newInteractionDetails = { ...interactionDetails, [ key ]: value };\n\t\tonChange( Object.values( newInteractionDetails ).join( DELIMITER ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\treturn elements\n\t\t\t\t.filter( ( element ) => {\n\t\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\t\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if interactions array has items or string is not empty\n\t\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} )\n\t\t\t\t.map( ( element ) => {\n\t\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\t\t// data-id in template is always set to element.id (from $this->get_id())\n\t\t\t\t\t// So we use element.id, not _cssid (which is used for id attribute, not data-id)\n\t\t\t\t\tconst dataId = String( element.id );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\tdataId,\n\t\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_icons","import_ui","import_i18n","React","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_ui","import_i18n","React","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","listenTo"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext, useEffect } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { DEFAULT_INTERACTION, InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( DEFAULT_INTERACTION );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: DEFAULT_INTERACTION,\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\nexport const DEFAULT_INTERACTION = 'load-fade-in--300-0';\n\nconst getDefaultInteractionDetails = () => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = DEFAULT_INTERACTION.split( DELIMITER );\n\n\treturn {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t};\n};\n\nconst buildInteractionDetails = ( interaction: string ) => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\tconst defaultInteractionDetails = getDefaultInteractionDetails();\n\n\treturn {\n\t\ttrigger: trigger || defaultInteractionDetails.trigger,\n\t\teffect: effect || defaultInteractionDetails.effect,\n\t\ttype: type || defaultInteractionDetails.type,\n\t\tdirection: direction || defaultInteractionDetails.direction,\n\t\tduration: duration || defaultInteractionDetails.duration,\n\t\tdelay: delay || defaultInteractionDetails.delay,\n\t};\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst interactionDetails = React.useMemo( () => {\n\t\treturn buildInteractionDetails( interaction );\n\t}, [ interaction ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tif ( value === null ) {\n\t\t\tvalue = getDefaultInteractionDetails()[ key ];\n\t\t}\n\t\tconst newInteractionDetails = { ...interactionDetails, [ key ]: value };\n\t\tonChange( Object.values( newInteractionDetails ).join( DELIMITER ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Direction', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Type', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t}\n\n\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( typeof interactions === 'object' && interactions !== null ) {\n\t\t\t\t\tif ( Array.isArray( interactions.items ) ) {\n\t\t\t\t\t\treturn interactions.items.length > 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Object.keys( interactions ).length > 0;\n\t\t\t\t}\n\t\t\t\treturn false;\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 dataId = String( element.id );\n\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId,\n\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_icons","import_ui","import_i18n","React","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_ui","import_i18n","React","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","React","import_editor_ui","import_ui","import_i18n","import_editor_elements","listenTo"]}
package/dist/index.mjs CHANGED
@@ -33,11 +33,14 @@ import { Stack as Stack2 } from "@elementor/ui";
33
33
 
34
34
  // src/contexts/interactions-context.tsx
35
35
  import * as React2 from "react";
36
- import { createContext, useContext } from "react";
36
+ import { createContext, useContext, useEffect } from "react";
37
37
  import { playElementInteractions, updateElementInteractions, useElementInteractions } from "@elementor/editor-elements";
38
38
  var InteractionsContext = createContext(null);
39
39
  var InteractionsProvider = ({ children, elementId }) => {
40
40
  const interactions = useElementInteractions(elementId);
41
+ useEffect(() => {
42
+ window.dispatchEvent(new CustomEvent("elementor/element/update_interactions"));
43
+ }, []);
41
44
  const setInteractions = (value) => {
42
45
  updateElementInteractions({
43
46
  elementId,
@@ -79,7 +82,7 @@ var PopupStateProvider = ({ children }) => {
79
82
 
80
83
  // src/components/interactions-list.tsx
81
84
  import * as React10 from "react";
82
- import { useEffect, useState as useState2 } from "react";
85
+ import { useEffect as useEffect2, useState as useState2 } from "react";
83
86
  import { Repeater } from "@elementor/editor-controls";
84
87
  import { PlayerPlayIcon } from "@elementor/icons";
85
88
  import { IconButton } from "@elementor/ui";
@@ -123,7 +126,8 @@ function Direction({ value, onChange }) {
123
126
  size: "tiny",
124
127
  exclusive: true,
125
128
  onChange: (event, newValue) => onChange(newValue),
126
- value
129
+ value,
130
+ "aria-label": __2("Direction", "elementor")
127
131
  },
128
132
  availableDirections.map((direction) => {
129
133
  return /* @__PURE__ */ React4.createElement(Tooltip, { key: direction.key, title: direction.label, placement: "top" }, /* @__PURE__ */ React4.createElement(ToggleButton, { key: direction.key, value: direction.key }, direction.icon));
@@ -172,7 +176,8 @@ function EffectType({ value, onChange }) {
172
176
  size: "tiny",
173
177
  exclusive: true,
174
178
  onChange: (event, newValue) => onChange(newValue),
175
- value
179
+ value,
180
+ "aria-label": __4("Type", "elementor")
176
181
  },
177
182
  availableEffectTypes.map((effectType) => {
178
183
  return /* @__PURE__ */ React6.createElement(Tooltip2, { key: effectType.key, title: effectType.label, placement: "top" }, /* @__PURE__ */ React6.createElement(ToggleButton2, { key: effectType.key, value: effectType.key }, effectType.label));
@@ -304,7 +309,7 @@ function InteractionsList(props) {
304
309
  if (triggerCreateOnShowEmpty && !interactionId) {
305
310
  setInteractionId(DEFAULT_INTERACTION);
306
311
  }
307
- useEffect(() => {
312
+ useEffect2(() => {
308
313
  if (interactionId !== selectedInteraction) {
309
314
  onSelectInteraction(interactionId);
310
315
  }
@@ -502,7 +507,7 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
502
507
  actions: {
503
508
  all: () => {
504
509
  const elements = getElements();
505
- return elements.filter((element) => {
510
+ const filtered = elements.filter((element) => {
506
511
  const interactions = element.model.get("interactions");
507
512
  if (!interactions) {
508
513
  return false;
@@ -518,8 +523,15 @@ var documentElementsInteractionsProvider = createInteractionsProvider({
518
523
  return !!interactions.trim();
519
524
  }
520
525
  }
526
+ if (typeof interactions === "object" && interactions !== null) {
527
+ if (Array.isArray(interactions.items)) {
528
+ return interactions.items.length > 0;
529
+ }
530
+ return Object.keys(interactions).length > 0;
531
+ }
521
532
  return false;
522
- }).map((element) => {
533
+ });
534
+ return filtered.map((element) => {
523
535
  const interactions = getElementInteractions(element.id);
524
536
  const dataId = String(element.id);
525
537
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { DEFAULT_INTERACTION, InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( DEFAULT_INTERACTION );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: DEFAULT_INTERACTION,\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\nexport const DEFAULT_INTERACTION = 'load-fade-in--300-0';\n\nconst getDefaultInteractionDetails = () => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = DEFAULT_INTERACTION.split( DELIMITER );\n\n\treturn {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t};\n};\n\nconst buildInteractionDetails = ( interaction: string ) => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\tconst defaultInteractionDetails = getDefaultInteractionDetails();\n\n\treturn {\n\t\ttrigger: trigger || defaultInteractionDetails.trigger,\n\t\teffect: effect || defaultInteractionDetails.effect,\n\t\ttype: type || defaultInteractionDetails.type,\n\t\tdirection: direction || defaultInteractionDetails.direction,\n\t\tduration: duration || defaultInteractionDetails.duration,\n\t\tdelay: delay || defaultInteractionDetails.delay,\n\t};\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst interactionDetails = React.useMemo( () => {\n\t\treturn buildInteractionDetails( interaction );\n\t}, [ interaction ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tif ( value === null ) {\n\t\t\tvalue = getDefaultInteractionDetails()[ key ];\n\t\t}\n\t\tconst newInteractionDetails = { ...interactionDetails, [ key ]: value };\n\t\tonChange( Object.values( newInteractionDetails ).join( DELIMITER ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\treturn elements\n\t\t\t\t.filter( ( element ) => {\n\t\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\t\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if interactions array has items or string is not empty\n\t\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} )\n\t\t\t\t.map( ( element ) => {\n\t\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\t\t// data-id in template is always set to element.id (from $this->get_id())\n\t\t\t\t\t// So we use element.id, not _cssid (which is used for id attribute, not data-id)\n\t\t\t\t\tconst dataId = String( element.id );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\telementId: element.id,\n\t\t\t\t\t\tdataId,\n\t\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","useCallback","useMemo","useState","useElementInteractions","Stack","React","React","createContext","useContext","React","useState","__","React","Grid","__","React","Typography","__","React","Grid","Typography","__","React","Grid","ToggleButton","ToggleButtonGroup","Tooltip","Typography","__","React","MenuListItem","Grid","Select","Typography","__","React","MenuListItem","Grid","Select","Typography","__","Grid","__","useState","__","useElementInteractions","useState","useCallback","useMemo","Stack"]}
1
+ {"version":3,"sources":["../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/get-interactions-config.ts","../src/components/interaction-details.tsx","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/init.ts"],"sourcesContent":["import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as click, hover, or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId );\n\tconst [ firstInteraction, setFirstInteraction ] = useState< boolean >( false );\n\tconst [ showInteractions, setShowInteractions ] = useState( () => {\n\t\tconst parsed = JSON.parse( existingInteractions || '{}' );\n\t\tif ( parsed && parsed?.items?.length > 0 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ showInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteraction={ firstInteraction } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tsetFirstInteraction( true );\n\t\t\t\t\t\tsetShowInteractions( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( { firstInteraction }: { firstInteraction: boolean } ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( interaction: string | null ) => {\n\t\t\tif ( ! interaction ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimation_type: 'full-preset',\n\t\t\t\t\t\t\tanimation_id: interaction,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\n\t\t\tsetInteractions( JSON.stringify( newInteractions ) );\n\t\t},\n\t\t[ setInteractions ]\n\t);\n\n\tconst selectedInteraction = useMemo( () => {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse( interactions || '{}' );\n\t\t\tif ( parsed && parsed?.items ) {\n\t\t\t\treturn parsed.items[ 0 ]?.animation?.animation_id || '';\n\t\t\t}\n\t\t\treturn '';\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}, [ interactions ] );\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteraction }\n\t\t\t\tselectedInteraction={ selectedInteraction }\n\t\t\t\tonSelectInteraction={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext, useEffect } from 'react';\nimport { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: string;\n\tsetInteractions: ( value: string | undefined ) => void;\n\tplayInteractions: () => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst interactions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst setInteractions = ( value: string | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value || undefined,\n\t\t} );\n\t};\n\n\tconst playInteractions = () => {\n\t\tplayElementInteractions( elementId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions: interactions || '',\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { PlayerPlayIcon } from '@elementor/icons';\nimport { IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsConfig } from '../utils/get-interactions-config';\nimport { DEFAULT_INTERACTION, InteractionDetails } from './interaction-details';\n\nexport type InteractionListProps = {\n\tonSelectInteraction: ( interaction: string | null ) => void;\n\tselectedInteraction: string | null;\n\tonPlayInteraction: () => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { onSelectInteraction, selectedInteraction, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionId, setInteractionId ] = useState< string | null >( selectedInteraction );\n\n\tif ( triggerCreateOnShowEmpty && ! interactionId ) {\n\t\tsetInteractionId( DEFAULT_INTERACTION );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( interactionId !== selectedInteraction ) {\n\t\t\tonSelectInteraction( interactionId );\n\t\t}\n\t}, [ interactionId, selectedInteraction, onSelectInteraction ] );\n\n\tconst displayLabel = ( interactionForDisplay: string ) => {\n\t\tif ( ! interactionForDisplay ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst animationOptions = getInteractionsConfig()?.animationOptions;\n\t\tconst option = animationOptions.find( ( opt ) => opt.value === interactionForDisplay );\n\n\t\treturn option?.label || interactionForDisplay;\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\taddToBottom\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionId ? [ interactionId ] : [] }\n\t\t\tsetValues={ ( newValue: string[] ) => {\n\t\t\t\tsetInteractionId( newValue.length > 0 ? newValue[ 0 ] : null );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ !! interactionId }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: DEFAULT_INTERACTION,\n\t\t\t\tLabel: ( { value } ) => displayLabel( value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { value } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tinteraction={ value }\n\t\t\t\t\t\tonChange={ ( newValue: string ) => {\n\t\t\t\t\t\t\tif ( value !== newValue ) {\n\t\t\t\t\t\t\t\tsetInteractionId( newValue );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onPlayInteraction }>\n\t\t\t\t\t\t\t<PlayerPlayIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import * as React from 'react';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\nconst DELIMITER = '-';\n\ntype InteractionDetailsProps = {\n\tinteraction: string;\n\tonChange: ( interaction: string ) => void;\n};\nexport const DEFAULT_INTERACTION = 'load-fade-in--300-0';\n\nconst getDefaultInteractionDetails = () => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = DEFAULT_INTERACTION.split( DELIMITER );\n\n\treturn {\n\t\ttrigger,\n\t\teffect,\n\t\ttype,\n\t\tdirection,\n\t\tduration,\n\t\tdelay,\n\t};\n};\n\nconst buildInteractionDetails = ( interaction: string ) => {\n\tconst [ trigger, effect, type, direction, duration, delay ] = interaction.split( DELIMITER );\n\tconst defaultInteractionDetails = getDefaultInteractionDetails();\n\n\treturn {\n\t\ttrigger: trigger || defaultInteractionDetails.trigger,\n\t\teffect: effect || defaultInteractionDetails.effect,\n\t\ttype: type || defaultInteractionDetails.type,\n\t\tdirection: direction || defaultInteractionDetails.direction,\n\t\tduration: duration || defaultInteractionDetails.duration,\n\t\tdelay: delay || defaultInteractionDetails.delay,\n\t};\n};\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst interactionDetails = React.useMemo( () => {\n\t\treturn buildInteractionDetails( interaction );\n\t}, [ interaction ] );\n\n\tconst handleChange = < K extends keyof typeof interactionDetails >(\n\t\tkey: K,\n\t\tvalue: ( typeof interactionDetails )[ K ]\n\t) => {\n\t\tif ( value === null ) {\n\t\t\tvalue = getDefaultInteractionDetails()[ key ];\n\t\t}\n\t\tconst newInteractionDetails = { ...interactionDetails, [ key ]: value };\n\t\tonChange( Object.values( newInteractionDetails ).join( DELIMITER ) );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Trigger value={ interactionDetails.trigger } onChange={ ( v ) => handleChange( 'trigger', v ) } />\n\t\t\t</Grid>\n\t\t\t<Divider sx={ { mx: 1.5 } } />\n\t\t\t<Grid container spacing={ 2 } sx={ { p: 1.5 } }>\n\t\t\t\t<Effect value={ interactionDetails.effect } onChange={ ( v ) => handleChange( 'effect', v ) } />\n\t\t\t\t<EffectType value={ interactionDetails.type } onChange={ ( v ) => handleChange( 'type', v ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ interactionDetails.direction }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'direction', v ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.duration }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'duration', v ) }\n\t\t\t\t\tlabel={ __( 'Duration', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ interactionDetails.delay }\n\t\t\t\t\tonChange={ ( v ) => handleChange( 'delay', v ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Direction( { value, onChange }: FieldProps ) {\n\tconst availableDirections = [\n\t\t{ key: 'top', label: __( 'From bottom', 'elementor' ), icon: <ArrowUpSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'bottom', label: __( 'From top', 'elementor' ), icon: <ArrowDownSmallIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'left', label: __( 'From right', 'elementor' ), icon: <ArrowLeftIcon fontSize=\"tiny\" /> },\n\t\t{ key: 'right', label: __( 'From left', 'elementor' ), icon: <ArrowRightIcon fontSize=\"tiny\" /> },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Direction', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Direction', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableDirections.map( ( direction ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ direction.key } title={ direction.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ direction.key } value={ direction.key }>\n\t\t\t\t\t\t\t\t\t{ direction.icon }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\nexport function Effect( { value, onChange }: FieldProps ) {\n\tconst availableEffects = [\n\t\t{ key: 'fade', label: __( 'Fade', 'elementor' ) },\n\t\t{ key: 'slide', label: __( 'Slide', 'elementor' ) },\n\t\t{ key: 'scale', label: __( 'Scale', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Effect', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { Grid, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst availableEffectTypes = [\n\t\t{ key: 'in', label: __( 'In', 'elementor' ) },\n\t\t{ key: 'out', label: __( 'Out', 'elementor' ) },\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Type', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 } sx={ { display: 'flex', justifyContent: 'flex-end', overflow: 'hidden' } }>\n\t\t\t\t<ToggleButtonGroup\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\texclusive\n\t\t\t\t\tonChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\taria-label={ __( 'Type', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableEffectTypes.map( ( effectType ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={ effectType.key } title={ effectType.label } placement=\"top\">\n\t\t\t\t\t\t\t\t<ToggleButton key={ effectType.key } value={ effectType.key }>\n\t\t\t\t\t\t\t\t\t{ effectType.label }\n\t\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</ToggleButtonGroup>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function TimeFrameIndicator( { value, onChange, label }: FieldProps ) {\n\tconst availableTimeFrames = [ '0', '100', '200', '300', '400', '500', '750', '1000', '1250', '1500' ].map(\n\t\t( key ) => ( {\n\t\t\tkey,\n\t\t\t// translators: %s: time in milliseconds\n\t\t\tlabel: __( '%s MS', 'elementor' ).replace( '%s', key ),\n\t\t} )\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t>\n\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t\tscrollOut: __( 'Scroll out of view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Typography variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ __( 'Trigger', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 } md={ 6 }>\n\t\t\t\t<Select\n\t\t\t\t\tfullWidth\n\t\t\t\t\tdisplayEmpty\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t>\n\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</Select>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = element.model.get( 'interactions' );\n\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif ( Array.isArray( interactions ) ) {\n\t\t\t\t\treturn interactions.length > 0;\n\t\t\t\t}\n\n\t\t\t\tif ( typeof interactions === 'string' ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst parsed = JSON.parse( interactions );\n\t\t\t\t\t\treturn Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn !! interactions.trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( typeof interactions === 'object' && interactions !== null ) {\n\t\t\t\t\tif ( Array.isArray( interactions.items ) ) {\n\t\t\t\t\t\treturn interactions.items.length > 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Object.keys( interactions ).length > 0;\n\t\t\t\t}\n\t\t\t\treturn false;\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 dataId = String( element.id );\n\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId,\n\t\t\t\t\tinteractions: interactions || '[]',\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","useCallback","useMemo","useState","useElementInteractions","Stack","React","React","createContext","useContext","React","useEffect","useState","__","React","Grid","__","React","Typography","__","React","Grid","Typography","__","React","Grid","ToggleButton","ToggleButtonGroup","Tooltip","Typography","__","React","MenuListItem","Grid","Select","Typography","__","React","MenuListItem","Grid","Select","Typography","__","Grid","__","useState","useEffect","__","useElementInteractions","useState","useCallback","useMemo","Stack"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-interactions",
3
- "version": "3.33.0-259",
3
+ "version": "3.33.0-261",
4
4
  "private": false,
5
5
  "author": "Elementor Team",
6
6
  "homepage": "https://elementor.com/",
@@ -39,13 +39,13 @@
39
39
  "dev": "tsup --config=../../tsup.dev.ts"
40
40
  },
41
41
  "dependencies": {
42
- "@elementor/editor-controls": "3.33.0-259",
43
- "@elementor/editor-elements": "3.33.0-259",
44
- "@elementor/editor-ui": "3.33.0-259",
42
+ "@elementor/editor-controls": "3.33.0-261",
43
+ "@elementor/editor-elements": "3.33.0-261",
44
+ "@elementor/editor-ui": "3.33.0-261",
45
45
  "@elementor/icons": "^1.61.0",
46
- "@elementor/editor-v1-adapters": "3.33.0-259",
47
- "@elementor/utils": "3.33.0-259",
48
- "@elementor/session": "3.33.0-259",
46
+ "@elementor/editor-v1-adapters": "3.33.0-261",
47
+ "@elementor/utils": "3.33.0-261",
48
+ "@elementor/session": "3.33.0-261",
49
49
  "@elementor/ui": "1.36.17",
50
50
  "@wordpress/i18n": "^5.13.0"
51
51
  },
@@ -26,6 +26,7 @@ export function Direction( { value, onChange }: FieldProps ) {
26
26
  exclusive
27
27
  onChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }
28
28
  value={ value }
29
+ aria-label={ __( 'Direction', 'elementor' ) }
29
30
  >
30
31
  { availableDirections.map( ( direction ) => {
31
32
  return (
@@ -23,6 +23,7 @@ export function EffectType( { value, onChange }: FieldProps ) {
23
23
  exclusive
24
24
  onChange={ ( event: React.MouseEvent< HTMLElement >, newValue: string ) => onChange( newValue ) }
25
25
  value={ value }
26
+ aria-label={ __( 'Type', 'elementor' ) }
26
27
  >
27
28
  { availableEffectTypes.map( ( effectType ) => {
28
29
  return (
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { createContext, type ReactNode, useContext } from 'react';
2
+ import { createContext, type ReactNode, useContext, useEffect } from 'react';
3
3
  import { playElementInteractions, updateElementInteractions, useElementInteractions } from '@elementor/editor-elements';
4
4
 
5
5
  type InteractionsContextValue = {
@@ -13,6 +13,10 @@ const InteractionsContext = createContext< InteractionsContextValue | null >( nu
13
13
  export const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {
14
14
  const interactions = useElementInteractions( elementId );
15
15
 
16
+ useEffect( () => {
17
+ window.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );
18
+ }, [] );
19
+
16
20
  const setInteractions = ( value: string | undefined ) => {
17
21
  updateElementInteractions( {
18
22
  elementId,
@@ -25,38 +25,47 @@ export const documentElementsInteractionsProvider = createInteractionsProvider(
25
25
  all: () => {
26
26
  const elements = getElements();
27
27
 
28
- return elements
29
- .filter( ( element ) => {
30
- const interactions = element.model.get( 'interactions' );
31
- if ( ! interactions ) {
32
- return false;
33
- }
34
- // Check if interactions array has items or string is not empty
35
- if ( Array.isArray( interactions ) ) {
36
- return interactions.length > 0;
28
+ const filtered = elements.filter( ( element ) => {
29
+ const interactions = element.model.get( 'interactions' );
30
+
31
+ if ( ! interactions ) {
32
+ return false;
33
+ }
34
+
35
+ if ( Array.isArray( interactions ) ) {
36
+ return interactions.length > 0;
37
+ }
38
+
39
+ if ( typeof interactions === 'string' ) {
40
+ try {
41
+ const parsed = JSON.parse( interactions );
42
+ return Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;
43
+ } catch {
44
+ return !! interactions.trim();
37
45
  }
38
- if ( typeof interactions === 'string' ) {
39
- try {
40
- const parsed = JSON.parse( interactions );
41
- return Array.isArray( parsed ) ? parsed.length > 0 : !! parsed;
42
- } catch {
43
- return !! interactions.trim();
44
- }
46
+ }
47
+
48
+ if ( typeof interactions === 'object' && interactions !== null ) {
49
+ if ( Array.isArray( interactions.items ) ) {
50
+ return interactions.items.length > 0;
45
51
  }
46
- return false;
47
- } )
48
- .map( ( element ) => {
49
- const interactions = getElementInteractions( element.id );
50
- // data-id in template is always set to element.id (from $this->get_id())
51
- // So we use element.id, not _cssid (which is used for id attribute, not data-id)
52
- const dataId = String( element.id );
53
-
54
- return {
55
- elementId: element.id,
56
- dataId,
57
- interactions: interactions || '[]',
58
- };
59
- } );
52
+
53
+ return Object.keys( interactions ).length > 0;
54
+ }
55
+ return false;
56
+ } );
57
+
58
+ return filtered.map( ( element ) => {
59
+ const interactions = getElementInteractions( element.id );
60
+
61
+ const dataId = String( element.id );
62
+
63
+ return {
64
+ elementId: element.id,
65
+ dataId,
66
+ interactions: interactions || '[]',
67
+ };
68
+ } );
60
69
  },
61
70
  },
62
71
  } );