@elementor/editor-interactions 3.35.0-452 → 3.35.0-454
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 +69 -45
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +73 -49
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
- package/src/components/interaction-details.tsx +12 -3
- package/src/components/interactions-list.tsx +55 -31
- package/src/contexts/interactions-context.tsx +6 -4
- package/src/hooks/on-duplicate.ts +4 -2
- package/src/utils/prop-value-utils.ts +2 -0
- package/src/utils/temp-id-utils.ts +10 -0
package/dist/index.js
CHANGED
|
@@ -90,13 +90,14 @@ var InteractionsProvider = ({ children, elementId }) => {
|
|
|
90
90
|
}, []);
|
|
91
91
|
const interactions = rawInteractions ?? DEFAULT_INTERACTIONS;
|
|
92
92
|
const setInteractions = (value) => {
|
|
93
|
+
const normalizedValue = value && value.items?.length === 0 ? void 0 : value;
|
|
93
94
|
(0, import_editor_elements.updateElementInteractions)({
|
|
94
95
|
elementId,
|
|
95
|
-
interactions:
|
|
96
|
+
interactions: normalizedValue
|
|
96
97
|
});
|
|
97
98
|
};
|
|
98
|
-
const playInteractions = (
|
|
99
|
-
(0, import_editor_elements.playElementInteractions)(elementId,
|
|
99
|
+
const playInteractions = (interactionId) => {
|
|
100
|
+
(0, import_editor_elements.playElementInteractions)(elementId, interactionId);
|
|
100
101
|
};
|
|
101
102
|
const contextValue = {
|
|
102
103
|
interactions,
|
|
@@ -136,6 +137,12 @@ var import_icons3 = require("@elementor/icons");
|
|
|
136
137
|
var import_ui8 = require("@elementor/ui");
|
|
137
138
|
var import_i18n8 = require("@wordpress/i18n");
|
|
138
139
|
|
|
140
|
+
// src/utils/temp-id-utils.ts
|
|
141
|
+
var TEMP_ID_PREFIX = "temp-";
|
|
142
|
+
function generateTempInteractionId() {
|
|
143
|
+
return `${TEMP_ID_PREFIX}${Math.random().toString(36).substring(2, 11)}`;
|
|
144
|
+
}
|
|
145
|
+
|
|
139
146
|
// src/utils/prop-value-utils.ts
|
|
140
147
|
var createString = (value) => ({
|
|
141
148
|
$$type: "string",
|
|
@@ -206,7 +213,8 @@ var createDefaultInteractionItem = () => {
|
|
|
206
213
|
type: "in",
|
|
207
214
|
duration: 300,
|
|
208
215
|
delay: 0,
|
|
209
|
-
replay: false
|
|
216
|
+
replay: false,
|
|
217
|
+
interactionId: generateTempInteractionId()
|
|
210
218
|
});
|
|
211
219
|
};
|
|
212
220
|
var extractString = (prop, fallback = "") => {
|
|
@@ -215,15 +223,6 @@ var extractString = (prop, fallback = "") => {
|
|
|
215
223
|
var extractNumber = (prop, fallback = 0) => {
|
|
216
224
|
return prop?.value ?? fallback;
|
|
217
225
|
};
|
|
218
|
-
var buildAnimationIdString = (item) => {
|
|
219
|
-
const trigger = extractString(item.trigger);
|
|
220
|
-
const effect = extractString(item.animation.value.effect);
|
|
221
|
-
const type = extractString(item.animation.value.type);
|
|
222
|
-
const direction = extractString(item.animation.value.direction);
|
|
223
|
-
const duration = extractNumber(item.animation.value.timing_config.value.duration);
|
|
224
|
-
const delay = extractNumber(item.animation.value.timing_config.value.delay);
|
|
225
|
-
return [trigger, effect, type, direction, duration, delay].join("-");
|
|
226
|
-
};
|
|
227
226
|
var TRIGGER_LABELS = {
|
|
228
227
|
load: "On page load",
|
|
229
228
|
scrollIn: "Scroll into view",
|
|
@@ -421,7 +420,7 @@ var DEFAULT_VALUES = {
|
|
|
421
420
|
replay: false
|
|
422
421
|
};
|
|
423
422
|
var TRIGGERS_WITH_REPLAY = ["scrollIn", "scrollOut"];
|
|
424
|
-
var InteractionDetails = ({ interaction, onChange }) => {
|
|
423
|
+
var InteractionDetails = ({ interaction, onChange, onPlayInteraction }) => {
|
|
425
424
|
const trigger = extractString(interaction.trigger, DEFAULT_VALUES.trigger);
|
|
426
425
|
const effect = extractString(interaction.animation.value.effect, DEFAULT_VALUES.effect);
|
|
427
426
|
const type = extractString(interaction.animation.value.type, DEFAULT_VALUES.type);
|
|
@@ -448,8 +447,9 @@ var InteractionDetails = ({ interaction, onChange }) => {
|
|
|
448
447
|
const updateInteraction = (updates) => {
|
|
449
448
|
const resolvedDirectionValue = resolveDirection("direction" in updates, updates.effect, updates.direction);
|
|
450
449
|
const newReplay = updates.replay !== void 0 ? updates.replay : replay;
|
|
451
|
-
|
|
450
|
+
const updatedInteraction = {
|
|
452
451
|
...interaction,
|
|
452
|
+
interaction_id: interaction.interaction_id,
|
|
453
453
|
trigger: createString(updates.trigger ?? trigger),
|
|
454
454
|
animation: createAnimationPreset({
|
|
455
455
|
effect: updates.effect ?? effect,
|
|
@@ -459,7 +459,12 @@ var InteractionDetails = ({ interaction, onChange }) => {
|
|
|
459
459
|
delay: updates.delay ?? delay,
|
|
460
460
|
replay: newReplay
|
|
461
461
|
})
|
|
462
|
-
}
|
|
462
|
+
};
|
|
463
|
+
onChange(updatedInteraction);
|
|
464
|
+
const interactionId = extractString(updatedInteraction.interaction_id);
|
|
465
|
+
setTimeout(() => {
|
|
466
|
+
onPlayInteraction(interactionId);
|
|
467
|
+
}, 0);
|
|
463
468
|
};
|
|
464
469
|
return /* @__PURE__ */ React9.createElement(import_editor_controls6.PopoverContent, { p: 1.5 }, /* @__PURE__ */ React9.createElement(import_ui7.Grid, { container: true, spacing: 1.5 }, /* @__PURE__ */ React9.createElement(Trigger, { value: trigger, onChange: (v) => updateInteraction({ trigger: v }) }), ReplayControl && /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(import_ui7.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React9.createElement(import_editor_controls6.PopoverGridContainer, null, /* @__PURE__ */ React9.createElement(import_ui7.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React9.createElement(import_editor_controls6.ControlFormLabel, null, (0, import_i18n7.__)("Replay", "elementor"))), /* @__PURE__ */ React9.createElement(import_ui7.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React9.createElement(
|
|
465
470
|
ReplayControl,
|
|
@@ -496,38 +501,61 @@ var InteractionDetails = ({ interaction, onChange }) => {
|
|
|
496
501
|
var MAX_NUMBER_OF_INTERACTIONS = 5;
|
|
497
502
|
function InteractionsList(props) {
|
|
498
503
|
const { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;
|
|
499
|
-
const
|
|
504
|
+
const hasInitializedRef = (0, import_react5.useRef)(false);
|
|
505
|
+
const handleUpdateInteractions = (0, import_react5.useCallback)(
|
|
506
|
+
(newInteractions) => {
|
|
507
|
+
onSelectInteractions(newInteractions);
|
|
508
|
+
},
|
|
509
|
+
[onSelectInteractions]
|
|
510
|
+
);
|
|
500
511
|
(0, import_react5.useEffect)(() => {
|
|
501
|
-
if (
|
|
502
|
-
|
|
512
|
+
if (triggerCreateOnShowEmpty && !hasInitializedRef.current && (!interactions.items || interactions.items?.length === 0)) {
|
|
513
|
+
hasInitializedRef.current = true;
|
|
514
|
+
const newState = {
|
|
515
|
+
version: 1,
|
|
516
|
+
items: [createDefaultInteractionItem()]
|
|
517
|
+
};
|
|
518
|
+
handleUpdateInteractions(newState);
|
|
503
519
|
}
|
|
504
|
-
}, [
|
|
520
|
+
}, [triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions]);
|
|
505
521
|
const isMaxNumberOfInteractionsReached = (0, import_react5.useMemo)(() => {
|
|
506
|
-
return
|
|
507
|
-
}, [
|
|
508
|
-
if (triggerCreateOnShowEmpty && (!interactionsState.items || interactionsState.items?.length === 0)) {
|
|
509
|
-
setInteractionsState({
|
|
510
|
-
version: 1,
|
|
511
|
-
items: [createDefaultInteractionItem()]
|
|
512
|
-
});
|
|
513
|
-
}
|
|
522
|
+
return interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;
|
|
523
|
+
}, [interactions.items?.length]);
|
|
514
524
|
const infotipContent = isMaxNumberOfInteractionsReached ? /* @__PURE__ */ React10.createElement(import_ui8.Alert, { color: "secondary", icon: /* @__PURE__ */ React10.createElement(import_icons3.InfoCircleFilledIcon, null), size: "small" }, /* @__PURE__ */ React10.createElement(import_ui8.AlertTitle, null, (0, import_i18n8.__)("Interactions", "elementor")), /* @__PURE__ */ React10.createElement(import_ui8.Box, { component: "span" }, (0, import_i18n8.__)(
|
|
515
525
|
"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.",
|
|
516
526
|
"elementor"
|
|
517
527
|
))) : void 0;
|
|
528
|
+
const handleRepeaterChange = (0, import_react5.useCallback)(
|
|
529
|
+
(newItems) => {
|
|
530
|
+
handleUpdateInteractions({
|
|
531
|
+
...interactions,
|
|
532
|
+
items: newItems
|
|
533
|
+
});
|
|
534
|
+
},
|
|
535
|
+
[interactions, handleUpdateInteractions]
|
|
536
|
+
);
|
|
537
|
+
const handleInteractionChange = (0, import_react5.useCallback)(
|
|
538
|
+
(index, newInteractionValue) => {
|
|
539
|
+
const newItems = structuredClone(interactions.items);
|
|
540
|
+
newItems[index] = {
|
|
541
|
+
$$type: "interaction-item",
|
|
542
|
+
value: newInteractionValue
|
|
543
|
+
};
|
|
544
|
+
handleUpdateInteractions({
|
|
545
|
+
...interactions,
|
|
546
|
+
items: newItems
|
|
547
|
+
});
|
|
548
|
+
},
|
|
549
|
+
[interactions, handleUpdateInteractions]
|
|
550
|
+
);
|
|
518
551
|
return /* @__PURE__ */ React10.createElement(
|
|
519
552
|
import_editor_controls7.Repeater,
|
|
520
553
|
{
|
|
521
554
|
openOnAdd: true,
|
|
522
555
|
openItem: triggerCreateOnShowEmpty ? 0 : void 0,
|
|
523
556
|
label: (0, import_i18n8.__)("Interactions", "elementor"),
|
|
524
|
-
values:
|
|
525
|
-
setValues:
|
|
526
|
-
setInteractionsState({
|
|
527
|
-
...interactionsState,
|
|
528
|
-
items: newValue
|
|
529
|
-
});
|
|
530
|
-
},
|
|
557
|
+
values: interactions.items,
|
|
558
|
+
setValues: handleRepeaterChange,
|
|
531
559
|
showDuplicate: false,
|
|
532
560
|
showToggle: false,
|
|
533
561
|
isSortable: false,
|
|
@@ -543,13 +571,9 @@ function InteractionsList(props) {
|
|
|
543
571
|
key: index,
|
|
544
572
|
interaction: value.value,
|
|
545
573
|
onChange: (newInteractionValue) => {
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
value: newInteractionValue
|
|
550
|
-
};
|
|
551
|
-
setInteractionsState({ ...interactionsState, items: newItems });
|
|
552
|
-
}
|
|
574
|
+
handleInteractionChange(index, newInteractionValue);
|
|
575
|
+
},
|
|
576
|
+
onPlayInteraction
|
|
553
577
|
}
|
|
554
578
|
),
|
|
555
579
|
actions: (value) => /* @__PURE__ */ React10.createElement(import_ui8.Tooltip, { key: "preview", placement: "top", title: (0, import_i18n8.__)("Preview", "elementor") }, /* @__PURE__ */ React10.createElement(
|
|
@@ -557,7 +581,7 @@ function InteractionsList(props) {
|
|
|
557
581
|
{
|
|
558
582
|
"aria-label": (0, import_i18n8.__)("Play interaction", "elementor"),
|
|
559
583
|
size: "tiny",
|
|
560
|
-
onClick: () => onPlayInteraction(
|
|
584
|
+
onClick: () => onPlayInteraction(extractString(value.value.interaction_id))
|
|
561
585
|
},
|
|
562
586
|
/* @__PURE__ */ React10.createElement(import_icons3.PlayerPlayIcon, { fontSize: "tiny" })
|
|
563
587
|
))
|
|
@@ -754,8 +778,8 @@ function cleanInteractionIds(elementId) {
|
|
|
754
778
|
}
|
|
755
779
|
const updatedInteractions = structuredClone(interactions);
|
|
756
780
|
updatedInteractions?.items?.forEach((interaction) => {
|
|
757
|
-
if (interaction.$$type === "interaction-item" && interaction.value
|
|
758
|
-
|
|
781
|
+
if (interaction.$$type === "interaction-item" && interaction.value) {
|
|
782
|
+
interaction.value.interaction_id = createString(generateTempInteractionId());
|
|
759
783
|
}
|
|
760
784
|
});
|
|
761
785
|
container.model.set("interactions", updatedInteractions);
|
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/prop-value-utils.ts","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/hooks/on-duplicate.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\nexport { registerInteractionsControl } from './interactions-controls-registry';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as page load or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport type { ElementInteractions } from '../types';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tfirstInteractionState[ 1 ]( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( animationId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: value as unknown as ElementInteractions,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( animationId: string ) => {\n\t\tplayElementInteractions( elementId, animationId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildAnimationIdString, buildDisplayLabel, createDefaultInteractionItem } from '../utils/prop-value-utils';\nimport { InteractionDetails } from './interaction-details';\n\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( animationId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst [ interactionsState, setInteractionsState ] = useState< ElementInteractions >( interactions );\n\n\tuseEffect( () => {\n\t\tif ( JSON.stringify( interactions ) !== JSON.stringify( interactionsState ) ) {\n\t\t\tonSelectInteractions( interactionsState );\n\t\t}\n\t}, [ interactions, interactionsState, onSelectInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactionsState.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactionsState.items ] );\n\n\tif ( triggerCreateOnShowEmpty && ( ! interactionsState.items || interactionsState.items?.length === 0 ) ) {\n\t\tsetInteractionsState( {\n\t\t\tversion: 1,\n\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t} );\n\t}\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\treturn (\n\t\t<Repeater\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactionsState.items }\n\t\t\tsetValues={ ( newValue: ElementInteractions[ 'items' ] ) => {\n\t\t\t\tsetInteractionsState( {\n\t\t\t\t\t...interactionsState,\n\t\t\t\t\titems: newValue,\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { index, value }: { index: number; value: InteractionItemPropValue } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\t\tonChange={ ( newInteractionValue: InteractionItemValue ) => {\n\t\t\t\t\t\t\tconst newItems = structuredClone( interactionsState.items );\n\t\t\t\t\t\t\tnewItems[ index ] = {\n\t\t\t\t\t\t\t\t$$type: 'interaction-item',\n\t\t\t\t\t\t\t\tvalue: newInteractionValue,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tsetInteractionsState( { ...interactionsState, items: newItems } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( buildAnimationIdString( value.value ) ) }\n\t\t\t\t\t\t>\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</Tooltip>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import type {\n\tAnimationPresetPropValue,\n\tBooleanPropValue,\n\tConfigPropValue,\n\tElementInteractions,\n\tInteractionItemPropValue,\n\tInteractionItemValue,\n\tNumberPropValue,\n\tStringPropValue,\n\tTimingConfigPropValue,\n} from '../types';\n\nexport const createString = ( value: string ): StringPropValue => ( {\n\t$$type: 'string',\n\tvalue,\n} );\n\nexport const createNumber = ( value: number ): NumberPropValue => ( {\n\t$$type: 'number',\n\tvalue,\n} );\n\nexport const createTimingConfig = ( duration: number, delay: number ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: createNumber( duration ),\n\t\tdelay: createNumber( delay ),\n\t},\n} );\n\nexport const createBoolean = ( value: boolean ): BooleanPropValue => ( {\n\t$$type: 'boolean',\n\tvalue,\n} );\n\nexport const createConfig = ( replay: boolean ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t},\n} );\n\nexport const extractBoolean = ( prop: BooleanPropValue | undefined, fallback = false ): boolean => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const createAnimationPreset = ( {\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\treplay = false,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( replay ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\tinteractionId?: string;\n\treplay: boolean;\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( { effect, type, direction, duration, delay, replay } ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 300,\n\t\tdelay: 0,\n\t\treplay: false,\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const extractNumber = ( prop: NumberPropValue | undefined, fallback = 0 ): number => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const buildAnimationIdString = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\tconst direction = extractString( item.animation.value.direction );\n\tconst duration = extractNumber( item.animation.value.timing_config.value.duration );\n\tconst delay = extractNumber( item.animation.value.timing_config.value.delay );\n\n\treturn [ trigger, effect, type, direction, duration, delay ].join( '-' );\n};\n\nconst TRIGGER_LABELS: Record< string, string > = {\n\tload: 'On page load',\n\tscrollIn: 'Scroll into view',\n\tscrollOut: 'Scroll out of view',\n};\n\nconst capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n\nexport const buildDisplayLabel = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\n\tconst triggerLabel = TRIGGER_LABELS[ trigger ] || capitalize( trigger );\n\tconst effectLabel = capitalize( effect );\n\tconst typeLabel = capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport type { InteractionItemValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractNumber,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 300,\n\tdelay: 0,\n\treplay: false,\n};\n\nconst TRIGGERS_WITH_REPLAY = [ 'scrollIn', 'scrollOut' ];\n\nexport const InteractionDetails = ( { interaction, onChange }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = extractNumber( interaction.animation.value.timing_config.value.duration, DEFAULT_VALUES.duration );\n\tconst delay = extractNumber( interaction.animation.value.timing_config.value.delay, DEFAULT_VALUES.delay );\n\tconst replay = extractBoolean( interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay );\n\tconst shouldShowReplay = TRIGGERS_WITH_REPLAY.includes( trigger );\n\tconst ReplayControl = useMemo( () => {\n\t\tif ( ! shouldShowReplay ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( 'replay' )?.component ?? null;\n\t}, [ shouldShowReplay ] );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: number;\n\t\t\tdelay: number;\n\t\t\treplay: boolean;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\t\tconst newReplay = updates.replay !== undefined ? updates.replay : replay;\n\n\t\tonChange( {\n\t\t\t...interaction,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: newReplay,\n\t\t\t} ),\n\t\t} );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Trigger value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t\t<PopoverGridContainer>\n\t\t\t\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t\t\t\t<ControlFormLabel>{ __( 'Replay', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t\t\t\t\t</Grid>\n\t\t\t\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Grid>\n\t\t\t\t\t\t\t</PopoverGridContainer>\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</Grid>\n\t\t\t<Divider />\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ direction }\n\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\tinteractionType={ type }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: parseInt( v, 10 ) } ) }\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={ String( delay ) }\n\t\t\t\t\tonChange={ ( v ) => updateInteraction( { delay: parseInt( v, 10 ) } ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</PopoverContent>\n\t);\n};\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType = 'trigger' | 'effect' | 'effectType' | 'direction' | 'duration' | 'delay' | 'replay';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport {\n\tControlFormLabel,\n\tPopoverGridContainer,\n\ttype ToggleButtonGroupItem,\n\tToggleButtonGroupUi,\n} from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel> { __( 'Direction', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import * as React from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent } 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<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ __( 'Effect', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</Select>\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import * as React from 'react';\nimport {\n\tControlFormLabel,\n\tPopoverGridContainer,\n\ttype ToggleButtonGroupItem,\n\tToggleButtonGroupUi,\n} from '@elementor/editor-controls';\nimport { Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<PopoverGridContainer>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ControlFormLabel>{ __( 'Type', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</PopoverGridContainer>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent } 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<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</Select>\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import * as React from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ __( 'Trigger', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</Select>\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn interactions?.items?.length > 0;\n\t\t\t} );\n\n\t\t\treturn filtered.map( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId: element.id,\n\t\t\t\t\tinteractions: interactions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value?.interaction_id ) {\n\t\t\tdelete interaction.value.interaction_id;\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t\tinitCleanInteractionIdsOnDuplicate();\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_editor_controls","import_icons","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_icons","import_ui","import_i18n","React","import_editor_controls","import_ui","import_i18n","React","import_editor_controls","import_ui","import_i18n","React","import_editor_controls","import_editor_ui","import_ui","import_i18n","React","import_editor_controls","import_editor_ui","import_ui","import_i18n","import_editor_elements","listenTo","import_editor_elements","import_editor_v1_adapters"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/empty-state.tsx","../src/components/interactions-tab.tsx","../src/contexts/interactions-context.tsx","../src/contexts/popup-state-context.tsx","../src/components/interactions-list.tsx","../src/utils/temp-id-utils.ts","../src/utils/prop-value-utils.ts","../src/components/interaction-details.tsx","../src/interactions-controls-registry.ts","../src/components/controls/direction.tsx","../src/components/controls/effect.tsx","../src/components/controls/effect-type.tsx","../src/components/controls/time-frame-indicator.tsx","../src/components/controls/trigger.tsx","../src/utils/get-interactions-config.ts","../src/utils/create-interactions-repository.ts","../src/interactions-repository.ts","../src/utils/create-interactions-provider.ts","../src/providers/document-elements-interactions-provider.ts","../src/hooks/on-duplicate.ts","../src/init.ts"],"sourcesContent":["export * from './components/empty-state';\nexport * from './components/interactions-tab';\nexport * from './types';\nexport * from './utils/get-interactions-config';\n\nexport { interactionsRepository } from './interactions-repository';\nexport {\n\tcreateInteractionsProvider,\n\ttype CreateInteractionsProviderOptions,\n} from './utils/create-interactions-provider';\n\nexport { ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX } from './providers/document-elements-interactions-provider';\nexport { init } from './init';\nexport { registerInteractionsControl } from './interactions-controls-registry';\n","import * as React from 'react';\nimport { SwipeIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onCreateInteraction }: { onCreateInteraction: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<SwipeIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Animate elements with Interactions', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Add entrance animations and effects triggered by user interactions such as page load or scroll.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onCreateInteraction }>\n\t\t\t\t{ __( 'Create an interaction', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useState } from 'react';\nimport { useElementInteractions } from '@elementor/editor-elements';\nimport { SessionStorageProvider } from '@elementor/session';\nimport { Stack } from '@elementor/ui';\n\nimport { InteractionsProvider, useInteractionsContext } from '../contexts/interactions-context';\nimport { PopupStateProvider } from '../contexts/popup-state-context';\nimport type { ElementInteractions } from '../types';\nimport { EmptyState } from './empty-state';\nimport { InteractionsList } from './interactions-list';\n\nexport const InteractionsTab = ( { elementId }: { elementId: string } ) => {\n\treturn (\n\t\t<PopupStateProvider>\n\t\t\t<InteractionsTabContent elementId={ elementId } />\n\t\t</PopupStateProvider>\n\t);\n};\n\nfunction InteractionsTabContent( { elementId }: { elementId: string } ) {\n\tconst existingInteractions = useElementInteractions( elementId ) as unknown as ElementInteractions | undefined;\n\tconst firstInteractionState = useState< boolean >( false );\n\tconst hasInteractions = existingInteractions?.items?.length || firstInteractionState[ 0 ];\n\n\treturn (\n\t\t<SessionStorageProvider prefix={ elementId }>\n\t\t\t{ hasInteractions ? (\n\t\t\t\t<InteractionsProvider elementId={ elementId }>\n\t\t\t\t\t<InteractionsContent firstInteractionState={ firstInteractionState } />\n\t\t\t\t</InteractionsProvider>\n\t\t\t) : (\n\t\t\t\t<EmptyState\n\t\t\t\t\tonCreateInteraction={ () => {\n\t\t\t\t\t\tfirstInteractionState[ 1 ]( true );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</SessionStorageProvider>\n\t);\n}\n\nfunction InteractionsContent( {\n\tfirstInteractionState,\n}: {\n\tfirstInteractionState: [ boolean, ( value: boolean ) => void ];\n} ) {\n\tconst { interactions, setInteractions, playInteractions } = useInteractionsContext();\n\n\tconst applyInteraction = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tfirstInteractionState[ 1 ]( false );\n\t\t\tif ( ! newInteractions ) {\n\t\t\t\tsetInteractions( undefined );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetInteractions( newInteractions );\n\t\t},\n\t\t[ setInteractions, firstInteractionState ]\n\t);\n\n\treturn (\n\t\t<Stack sx={ { m: 1, p: 1.5 } } gap={ 2 }>\n\t\t\t<InteractionsList\n\t\t\t\ttriggerCreateOnShowEmpty={ firstInteractionState[ 0 ] }\n\t\t\t\tinteractions={ interactions }\n\t\t\t\tonSelectInteractions={ applyInteraction }\n\t\t\t\tonPlayInteraction={ playInteractions }\n\t\t\t/>\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type ReactNode, useContext, useEffect } from 'react';\nimport {\n\ttype ElementInteractions,\n\tplayElementInteractions,\n\tupdateElementInteractions,\n\tuseElementInteractions,\n} from '@elementor/editor-elements';\n\ntype InteractionsContextValue = {\n\tinteractions: ElementInteractions;\n\tsetInteractions: ( value: ElementInteractions | undefined ) => void;\n\tplayInteractions: ( interactionId: string ) => void;\n};\n\nconst InteractionsContext = createContext< InteractionsContextValue | null >( null );\n\nconst DEFAULT_INTERACTIONS: ElementInteractions = {\n\tversion: 1,\n\titems: [],\n};\n\nexport const InteractionsProvider = ( { children, elementId }: { children: ReactNode; elementId: string } ) => {\n\tconst rawInteractions = useElementInteractions( elementId );\n\n\tuseEffect( () => {\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/element/update_interactions' ) );\n\t}, [] );\n\n\tconst interactions: ElementInteractions =\n\t\t( rawInteractions as unknown as ElementInteractions ) ?? DEFAULT_INTERACTIONS;\n\n\tconst setInteractions = ( value: ElementInteractions | undefined ) => {\n\t\tconst normalizedValue = value && value.items?.length === 0 ? undefined : value;\n\n\t\tupdateElementInteractions( {\n\t\t\telementId,\n\t\t\tinteractions: normalizedValue,\n\t\t} );\n\t};\n\n\tconst playInteractions = ( interactionId: string ) => {\n\t\tplayElementInteractions( elementId, interactionId );\n\t};\n\n\tconst contextValue: InteractionsContextValue = {\n\t\tinteractions,\n\t\tsetInteractions,\n\t\tplayInteractions,\n\t};\n\n\treturn <InteractionsContext.Provider value={ contextValue }>{ children }</InteractionsContext.Provider>;\n};\n\nexport const useInteractionsContext = () => {\n\tconst context = useContext( InteractionsContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useInteractionsContext must be used within InteractionsProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { createContext, useCallback, useContext, useState } from 'react';\n\ntype PopupStateContextType = {\n\topenByDefault: boolean;\n\ttriggerDefaultOpen: () => void;\n\tresetDefaultOpen: () => void;\n};\n\nconst PopupStateContext = createContext< PopupStateContextType | undefined >( undefined );\n\nexport const PopupStateProvider = ( { children }: { children: React.ReactNode } ) => {\n\tconst [ openByDefault, setOpenByDefault ] = useState( false );\n\n\tconst triggerDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( true );\n\t}, [] );\n\n\tconst resetDefaultOpen = useCallback( () => {\n\t\tsetOpenByDefault( false );\n\t}, [] );\n\n\treturn (\n\t\t<PopupStateContext.Provider value={ { openByDefault, triggerDefaultOpen, resetDefaultOpen } }>\n\t\t\t{ children }\n\t\t</PopupStateContext.Provider>\n\t);\n};\n\nexport const usePopupStateContext = () => {\n\tconst context = useContext( PopupStateContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'usePopupStateContext must be used within PopupStateProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Repeater } from '@elementor/editor-controls';\nimport { InfoCircleFilledIcon, PlayerPlayIcon } from '@elementor/icons';\nimport { Alert, AlertTitle, Box, IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { ElementInteractions, InteractionItemPropValue, InteractionItemValue } from '../types';\nimport { buildDisplayLabel, createDefaultInteractionItem, extractString } from '../utils/prop-value-utils';\nimport { InteractionDetails } from './interaction-details';\nexport const MAX_NUMBER_OF_INTERACTIONS = 5;\n\nexport type InteractionListProps = {\n\tonSelectInteractions: ( interactions: ElementInteractions ) => void;\n\tinteractions: ElementInteractions;\n\tonPlayInteraction: ( interactionId: string ) => void;\n\ttriggerCreateOnShowEmpty?: boolean;\n};\n\nexport function InteractionsList( props: InteractionListProps ) {\n\tconst { interactions, onSelectInteractions, onPlayInteraction, triggerCreateOnShowEmpty } = props;\n\n\tconst hasInitializedRef = useRef( false );\n\n\tconst handleUpdateInteractions = useCallback(\n\t\t( newInteractions: ElementInteractions ) => {\n\t\t\tonSelectInteractions( newInteractions );\n\t\t},\n\t\t[ onSelectInteractions ]\n\t);\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\ttriggerCreateOnShowEmpty &&\n\t\t\t! hasInitializedRef.current &&\n\t\t\t( ! interactions.items || interactions.items?.length === 0 )\n\t\t) {\n\t\t\thasInitializedRef.current = true;\n\t\t\tconst newState: ElementInteractions = {\n\t\t\t\tversion: 1,\n\t\t\t\titems: [ createDefaultInteractionItem() ],\n\t\t\t};\n\t\t\thandleUpdateInteractions( newState );\n\t\t}\n\t}, [ triggerCreateOnShowEmpty, interactions.items, handleUpdateInteractions ] );\n\n\tconst isMaxNumberOfInteractionsReached = useMemo( () => {\n\t\treturn interactions.items?.length >= MAX_NUMBER_OF_INTERACTIONS;\n\t}, [ interactions.items?.length ] );\n\n\tconst infotipContent = isMaxNumberOfInteractionsReached ? (\n\t\t<Alert color=\"secondary\" icon={ <InfoCircleFilledIcon /> } size=\"small\">\n\t\t\t<AlertTitle>{ __( 'Interactions', 'elementor' ) }</AlertTitle>\n\t\t\t<Box component=\"span\">\n\t\t\t\t{ __(\n\t\t\t\t\t\"You've reached the limit of 5 interactions for this element. Please remove an interaction before creating a new one.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Alert>\n\t) : undefined;\n\n\tconst handleRepeaterChange = useCallback(\n\t\t( newItems: ElementInteractions[ 'items' ] ) => {\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\tconst handleInteractionChange = useCallback(\n\t\t( index: number, newInteractionValue: InteractionItemValue ) => {\n\t\t\tconst newItems = structuredClone( interactions.items );\n\t\t\tnewItems[ index ] = {\n\t\t\t\t$$type: 'interaction-item',\n\t\t\t\tvalue: newInteractionValue,\n\t\t\t};\n\t\t\thandleUpdateInteractions( {\n\t\t\t\t...interactions,\n\t\t\t\titems: newItems,\n\t\t\t} );\n\t\t},\n\t\t[ interactions, handleUpdateInteractions ]\n\t);\n\n\treturn (\n\t\t<Repeater\n\t\t\topenOnAdd\n\t\t\topenItem={ triggerCreateOnShowEmpty ? 0 : undefined }\n\t\t\tlabel={ __( 'Interactions', 'elementor' ) }\n\t\t\tvalues={ interactions.items }\n\t\t\tsetValues={ handleRepeaterChange }\n\t\t\tshowDuplicate={ false }\n\t\t\tshowToggle={ false }\n\t\t\tisSortable={ false }\n\t\t\tdisableAddItemButton={ isMaxNumberOfInteractionsReached }\n\t\t\taddButtonInfotipContent={ infotipContent }\n\t\t\titemSettings={ {\n\t\t\t\tinitialValues: createDefaultInteractionItem(),\n\t\t\t\tLabel: ( { value }: { value: InteractionItemPropValue } ) => buildDisplayLabel( value.value ),\n\t\t\t\tIcon: () => null,\n\t\t\t\tContent: ( { index, value }: { index: number; value: InteractionItemPropValue } ) => (\n\t\t\t\t\t<InteractionDetails\n\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\tinteraction={ value.value }\n\t\t\t\t\t\tonChange={ ( newInteractionValue: InteractionItemValue ) => {\n\t\t\t\t\t\t\thandleInteractionChange( index, newInteractionValue );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonPlayInteraction={ onPlayInteraction }\n\t\t\t\t\t/>\n\t\t\t\t),\n\t\t\t\tactions: ( value: InteractionItemPropValue ) => (\n\t\t\t\t\t<Tooltip key=\"preview\" placement=\"top\" title={ __( 'Preview', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\taria-label={ __( 'Play interaction', 'elementor' ) }\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tonClick={ () => onPlayInteraction( extractString( value.value.interaction_id ) ) }\n\t\t\t\t\t\t>\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</Tooltip>\n\t\t\t\t),\n\t\t\t} }\n\t\t/>\n\t);\n}\n","const TEMP_ID_PREFIX = 'temp-';\nconst TEMP_ID_REGEX = /^temp-[a-z0-9]+$/i;\n\nexport function generateTempInteractionId(): string {\n\treturn `${ TEMP_ID_PREFIX }${ Math.random().toString( 36 ).substring( 2, 11 ) }`;\n}\n\nexport function isTempId( id: string | undefined ): boolean {\n\treturn !! id && TEMP_ID_REGEX.test( id );\n}\n","import type {\n\tAnimationPresetPropValue,\n\tBooleanPropValue,\n\tConfigPropValue,\n\tElementInteractions,\n\tInteractionItemPropValue,\n\tInteractionItemValue,\n\tNumberPropValue,\n\tStringPropValue,\n\tTimingConfigPropValue,\n} from '../types';\nimport { generateTempInteractionId } from './temp-id-utils';\n\nexport const createString = ( value: string ): StringPropValue => ( {\n\t$$type: 'string',\n\tvalue,\n} );\n\nexport const createNumber = ( value: number ): NumberPropValue => ( {\n\t$$type: 'number',\n\tvalue,\n} );\n\nexport const createTimingConfig = ( duration: number, delay: number ): TimingConfigPropValue => ( {\n\t$$type: 'timing-config',\n\tvalue: {\n\t\tduration: createNumber( duration ),\n\t\tdelay: createNumber( delay ),\n\t},\n} );\n\nexport const createBoolean = ( value: boolean ): BooleanPropValue => ( {\n\t$$type: 'boolean',\n\tvalue,\n} );\n\nexport const createConfig = ( replay: boolean ): ConfigPropValue => ( {\n\t$$type: 'config',\n\tvalue: {\n\t\treplay: createBoolean( replay ),\n\t},\n} );\n\nexport const extractBoolean = ( prop: BooleanPropValue | undefined, fallback = false ): boolean => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const createAnimationPreset = ( {\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\treplay = false,\n}: {\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\treplay: boolean;\n} ): AnimationPresetPropValue => ( {\n\t$$type: 'animation-preset-props',\n\tvalue: {\n\t\teffect: createString( effect ),\n\t\ttype: createString( type ),\n\t\tdirection: createString( direction ?? '' ),\n\t\ttiming_config: createTimingConfig( duration, delay ),\n\t\tconfig: createConfig( replay ),\n\t},\n} );\n\nexport const createInteractionItem = ( {\n\ttrigger,\n\teffect,\n\ttype,\n\tdirection,\n\tduration,\n\tdelay,\n\tinteractionId,\n\treplay = false,\n}: {\n\ttrigger: string;\n\teffect: string;\n\ttype: string;\n\tdirection?: string;\n\tduration: number;\n\tdelay: number;\n\tinteractionId?: string;\n\treplay: boolean;\n} ): InteractionItemPropValue => ( {\n\t$$type: 'interaction-item',\n\tvalue: {\n\t\t...( interactionId && { interaction_id: createString( interactionId ) } ),\n\t\ttrigger: createString( trigger ),\n\t\tanimation: createAnimationPreset( { effect, type, direction, duration, delay, replay } ),\n\t},\n} );\n\nexport const createDefaultInteractionItem = (): InteractionItemPropValue => {\n\treturn createInteractionItem( {\n\t\ttrigger: 'load',\n\t\teffect: 'fade',\n\t\ttype: 'in',\n\t\tduration: 300,\n\t\tdelay: 0,\n\t\treplay: false,\n\t\tinteractionId: generateTempInteractionId(),\n\t} );\n};\n\nexport const createDefaultInteractions = (): ElementInteractions => ( {\n\tversion: 1,\n\titems: [ createDefaultInteractionItem() ],\n} );\n\nexport const extractString = ( prop: StringPropValue | undefined, fallback = '' ): string => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const extractNumber = ( prop: NumberPropValue | undefined, fallback = 0 ): number => {\n\treturn prop?.value ?? fallback;\n};\n\nexport const buildAnimationIdString = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\tconst direction = extractString( item.animation.value.direction );\n\tconst duration = extractNumber( item.animation.value.timing_config.value.duration );\n\tconst delay = extractNumber( item.animation.value.timing_config.value.delay );\n\n\treturn [ trigger, effect, type, direction, duration, delay ].join( '-' );\n};\n\nconst TRIGGER_LABELS: Record< string, string > = {\n\tload: 'On page load',\n\tscrollIn: 'Scroll into view',\n\tscrollOut: 'Scroll out of view',\n};\n\nconst capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n\nexport const buildDisplayLabel = ( item: InteractionItemValue ): string => {\n\tconst trigger = extractString( item.trigger );\n\tconst effect = extractString( item.animation.value.effect );\n\tconst type = extractString( item.animation.value.type );\n\n\tconst triggerLabel = TRIGGER_LABELS[ trigger ] || capitalize( trigger );\n\tconst effectLabel = capitalize( effect );\n\tconst typeLabel = capitalize( type );\n\n\treturn `${ triggerLabel }: ${ effectLabel } ${ typeLabel }`;\n};\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport { ControlFormLabel, PopoverContent, PopoverGridContainer } from '@elementor/editor-controls';\nimport { Divider, Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { getInteractionsControl } from '../interactions-controls-registry';\nimport type { InteractionItemValue } from '../types';\nimport {\n\tcreateAnimationPreset,\n\tcreateString,\n\textractBoolean,\n\textractNumber,\n\textractString,\n} from '../utils/prop-value-utils';\nimport { Direction } from './controls/direction';\nimport { Effect } from './controls/effect';\nimport { EffectType } from './controls/effect-type';\nimport { TimeFrameIndicator } from './controls/time-frame-indicator';\nimport { Trigger } from './controls/trigger';\n\ntype InteractionDetailsProps = {\n\tinteraction: InteractionItemValue;\n\tonChange: ( interaction: InteractionItemValue ) => void;\n\tonPlayInteraction: ( interactionId: string ) => void;\n};\n\nconst DEFAULT_VALUES = {\n\ttrigger: 'load',\n\teffect: 'fade',\n\ttype: 'in',\n\tdirection: '',\n\tduration: 300,\n\tdelay: 0,\n\treplay: false,\n};\n\nconst TRIGGERS_WITH_REPLAY = [ 'scrollIn', 'scrollOut' ];\n\nexport const InteractionDetails = ( { interaction, onChange, onPlayInteraction }: InteractionDetailsProps ) => {\n\tconst trigger = extractString( interaction.trigger, DEFAULT_VALUES.trigger );\n\tconst effect = extractString( interaction.animation.value.effect, DEFAULT_VALUES.effect );\n\tconst type = extractString( interaction.animation.value.type, DEFAULT_VALUES.type );\n\tconst direction = extractString( interaction.animation.value.direction, DEFAULT_VALUES.direction );\n\tconst duration = extractNumber( interaction.animation.value.timing_config.value.duration, DEFAULT_VALUES.duration );\n\tconst delay = extractNumber( interaction.animation.value.timing_config.value.delay, DEFAULT_VALUES.delay );\n\tconst replay = extractBoolean( interaction.animation.value.config?.value.replay, DEFAULT_VALUES.replay );\n\tconst shouldShowReplay = TRIGGERS_WITH_REPLAY.includes( trigger );\n\tconst ReplayControl = useMemo( () => {\n\t\tif ( ! shouldShowReplay ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getInteractionsControl( 'replay' )?.component ?? null;\n\t}, [ shouldShowReplay ] );\n\n\tconst resolveDirection = ( hasDirection: boolean, newEffect?: string, newDirection?: string ) => {\n\t\tif ( newEffect === 'slide' && ! newDirection ) {\n\t\t\treturn 'top';\n\t\t}\n\t\t// Why? - New direction can be undefined when the effect is not slide, so if the updates object includes direction, we take it always!\n\t\tif ( hasDirection ) {\n\t\t\treturn newDirection;\n\t\t}\n\t\treturn direction;\n\t};\n\n\tconst updateInteraction = (\n\t\tupdates: Partial< {\n\t\t\ttrigger: string;\n\t\t\teffect: string;\n\t\t\ttype: string;\n\t\t\tdirection: string;\n\t\t\tduration: number;\n\t\t\tdelay: number;\n\t\t\treplay: boolean;\n\t\t} >\n\t): void => {\n\t\tconst resolvedDirectionValue = resolveDirection( 'direction' in updates, updates.effect, updates.direction );\n\t\tconst newReplay = updates.replay !== undefined ? updates.replay : replay;\n\n\t\tconst updatedInteraction = {\n\t\t\t...interaction,\n\t\t\tinteraction_id: interaction.interaction_id,\n\t\t\ttrigger: createString( updates.trigger ?? trigger ),\n\t\t\tanimation: createAnimationPreset( {\n\t\t\t\teffect: updates.effect ?? effect,\n\t\t\t\ttype: updates.type ?? type,\n\t\t\t\tdirection: resolvedDirectionValue,\n\t\t\t\tduration: updates.duration ?? duration,\n\t\t\t\tdelay: updates.delay ?? delay,\n\t\t\t\treplay: newReplay,\n\t\t\t} ),\n\t\t};\n\n\t\tonChange( updatedInteraction );\n\n\t\tconst interactionId = extractString( updatedInteraction.interaction_id );\n\t\tsetTimeout( () => {\n\t\t\tonPlayInteraction( interactionId );\n\t\t}, 0 );\n\t};\n\n\treturn (\n\t\t<PopoverContent p={ 1.5 }>\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Trigger value={ trigger } onChange={ ( v ) => updateInteraction( { trigger: v } ) } />\n\t\t\t\t{ ReplayControl && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t\t<PopoverGridContainer>\n\t\t\t\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t\t\t\t<ControlFormLabel>{ __( 'Replay', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t\t\t\t\t</Grid>\n\t\t\t\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t\t\t\t<ReplayControl\n\t\t\t\t\t\t\t\t\t\tvalue={ replay }\n\t\t\t\t\t\t\t\t\t\tonChange={ ( v ) => updateInteraction( { replay: v } ) }\n\t\t\t\t\t\t\t\t\t\tdisabled={ true }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Grid>\n\t\t\t\t\t\t\t</PopoverGridContainer>\n\t\t\t\t\t\t</Grid>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</Grid>\n\t\t\t<Divider />\n\t\t\t<Grid container spacing={ 1.5 }>\n\t\t\t\t<Effect value={ effect } onChange={ ( v ) => updateInteraction( { effect: v } ) } />\n\t\t\t\t<EffectType value={ type } onChange={ ( v ) => updateInteraction( { type: v } ) } />\n\t\t\t\t<Direction\n\t\t\t\t\tvalue={ direction }\n\t\t\t\t\tonChange={ ( v ) => updateInteraction( { direction: v } ) }\n\t\t\t\t\tinteractionType={ type }\n\t\t\t\t/>\n\t\t\t\t<TimeFrameIndicator\n\t\t\t\t\tvalue={ String( duration ) }\n\t\t\t\t\tonChange={ ( v ) => updateInteraction( { duration: parseInt( v, 10 ) } ) }\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={ String( delay ) }\n\t\t\t\t\tonChange={ ( v ) => updateInteraction( { delay: parseInt( v, 10 ) } ) }\n\t\t\t\t\tlabel={ __( 'Delay', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Grid>\n\t\t</PopoverContent>\n\t);\n};\n","import { type ComponentType } from 'react';\n\nimport { type DirectionFieldProps, type FieldProps, type ReplayFieldProps } from './types';\n\ntype InteractionsControlType = 'trigger' | 'effect' | 'effectType' | 'direction' | 'duration' | 'delay' | 'replay';\n\ntype InteractionsControlPropsMap = {\n\ttrigger: FieldProps;\n\teffect: FieldProps;\n\teffectType: FieldProps;\n\tdirection: DirectionFieldProps;\n\tduration: FieldProps;\n\tdelay: FieldProps;\n\treplay: ReplayFieldProps;\n};\n\ntype ControlOptions< T extends InteractionsControlType > = {\n\ttype: T;\n\tcomponent: ComponentType< InteractionsControlPropsMap[ T ] >;\n\toptions?: string[];\n};\n\ntype StoredControlOptions = {\n\ttype: InteractionsControlType;\n\tcomponent: ComponentType< FieldProps | DirectionFieldProps | ReplayFieldProps >;\n\toptions?: string[];\n};\n\nconst controlsRegistry = new Map< InteractionsControlType, StoredControlOptions >();\n\nexport function registerInteractionsControl< T extends InteractionsControlType >( {\n\ttype,\n\tcomponent,\n\toptions,\n}: ControlOptions< T > ) {\n\tcontrolsRegistry.set( type, { type, component: component as StoredControlOptions[ 'component' ], options } );\n}\n\nexport function getInteractionsControl( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type );\n}\n\nexport function getInteractionsControlOptions( type: InteractionsControlType ) {\n\treturn controlsRegistry.get( type )?.options ?? [];\n}\n","import * as React from 'react';\nimport { useMemo } from 'react';\nimport {\n\tControlFormLabel,\n\tPopoverGridContainer,\n\ttype ToggleButtonGroupItem,\n\tToggleButtonGroupUi,\n} from '@elementor/editor-controls';\nimport { ArrowDownSmallIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpSmallIcon } from '@elementor/icons';\nimport { Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type DirectionFieldProps } from '../../types';\n\ntype Direction = 'top' | 'bottom' | 'left' | 'right';\n\nexport function Direction( { value, onChange, interactionType }: DirectionFieldProps ) {\n\tconst options: ToggleButtonGroupItem< Direction >[] = useMemo( () => {\n\t\tconst isIn = interactionType === 'in';\n\n\t\treturn [\n\t\t\t{\n\t\t\t\tvalue: 'top',\n\t\t\t\tlabel: isIn ? __( 'From top', 'elementor' ) : __( 'To top', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowDownSmallIcon fontSize={ size } /> : <ArrowUpSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'bottom',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From bottom', 'elementor' ) : __( 'To bottom', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowUpSmallIcon fontSize={ size } /> : <ArrowDownSmallIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'left',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From left', 'elementor' ) : __( 'To left', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowRightIcon fontSize={ size } /> : <ArrowLeftIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tvalue: 'right',\n\t\t\t\tlabel: interactionType === 'in' ? __( 'From right', 'elementor' ) : __( 'To right', 'elementor' ),\n\t\t\t\trenderContent: ( { size } ) =>\n\t\t\t\t\tisIn ? <ArrowLeftIcon fontSize={ size } /> : <ArrowRightIcon fontSize={ size } />,\n\t\t\t\tshowTooltip: true,\n\t\t\t},\n\t\t];\n\t}, [ interactionType ] );\n\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel> { __( 'Direction', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import * as React from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent } 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<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ __( 'Effect', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ availableEffects.map( ( effect ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MenuListItem key={ effect.key } value={ effect.key }>\n\t\t\t\t\t\t\t\t\t{ effect.label }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</Select>\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import * as React from 'react';\nimport {\n\tControlFormLabel,\n\tPopoverGridContainer,\n\ttype ToggleButtonGroupItem,\n\tToggleButtonGroupUi,\n} from '@elementor/editor-controls';\nimport { Grid } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\ntype EffectType = 'in' | 'out';\nexport function EffectType( { value, onChange }: FieldProps ) {\n\tconst options: ToggleButtonGroupItem< EffectType >[] = [\n\t\t{\n\t\t\tvalue: 'in',\n\t\t\tlabel: __( 'In', 'elementor' ),\n\t\t\trenderContent: () => __( 'In', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t\t{\n\t\t\tvalue: 'out',\n\t\t\tlabel: __( 'Out', 'elementor' ),\n\t\t\trenderContent: () => __( 'Out', 'elementor' ),\n\t\t\tshowTooltip: true,\n\t\t},\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<PopoverGridContainer>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ControlFormLabel>{ __( 'Type', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ToggleButtonGroupUi items={ options } exclusive onChange={ onChange } value={ value } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</PopoverGridContainer>\n\t\t\t</Grid>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent } 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<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ label }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ availableTimeFrames.map( ( timeFrame ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MenuListItem key={ timeFrame.key } value={ timeFrame.key }>\n\t\t\t\t\t\t\t\t\t{ timeFrame.label }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</Select>\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import * as React from 'react';\nimport { ControlFormLabel, PopoverGridContainer } from '@elementor/editor-controls';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Grid, Select, type SelectChangeEvent } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FieldProps } from '../../types';\n\nexport function Trigger( { value, onChange }: FieldProps ) {\n\tconst availableTriggers = Object.entries( {\n\t\tload: __( 'Page load', 'elementor' ),\n\t\tscrollIn: __( 'Scroll into view', 'elementor' ),\n\t} ).map( ( [ key, label ] ) => ( {\n\t\tkey,\n\t\tlabel,\n\t} ) );\n\n\treturn (\n\t\t<Grid item xs={ 12 }>\n\t\t\t<PopoverGridContainer>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlFormLabel>{ __( 'Trigger', 'elementor' ) }</ControlFormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<Select\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\tonChange={ ( event: SelectChangeEvent< string > ) => onChange( event.target.value ) }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ availableTriggers.map( ( trigger ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<MenuListItem key={ trigger.key } value={ trigger.key }>\n\t\t\t\t\t\t\t\t\t{ trigger.label }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</Select>\n\t\t\t\t</Grid>\n\t\t\t</PopoverGridContainer>\n\t\t</Grid>\n\t);\n}\n","import { type InteractionsConfig } from '../types';\n\nconst DEFAULT_CONFIG: InteractionsConfig = {\n\tconstants: {\n\t\tdefaultDuration: 300,\n\t\tdefaultDelay: 0,\n\t\tslideDistance: 100,\n\t\tscaleStart: 0.5,\n\t\teasing: 'linear',\n\t},\n\tanimationOptions: [],\n};\n\nexport function getInteractionsConfig(): InteractionsConfig {\n\treturn window.ElementorInteractionsConfig || DEFAULT_CONFIG;\n}\n","import { type InteractionsProvider } from '../types';\n\nexport const createInteractionsRepository = () => {\n\tconst providers: InteractionsProvider[] = [];\n\n\tconst getProviders = () => {\n\t\tconst sorted = providers.slice( 0 ).sort( ( a, b ) => ( a.priority > b.priority ? -1 : 1 ) );\n\t\treturn sorted;\n\t};\n\n\tconst register = ( provider: InteractionsProvider ) => {\n\t\tproviders.push( provider );\n\t};\n\n\tconst all = () => {\n\t\treturn getProviders().flatMap( ( provider ) => provider.actions.all() );\n\t};\n\n\tconst subscribe = ( cb: () => void ) => {\n\t\tconst unsubscribes = providers.map( ( provider ) => provider.subscribe( cb ) );\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t};\n\n\tconst getProviderByKey = ( key: string ) => {\n\t\treturn providers.find( ( provider ) => {\n\t\t\ttry {\n\t\t\t\treturn provider.getKey() === key;\n\t\t\t} catch {\n\t\t\t\t// Provider might not be ready yet (e.g., no document loaded)\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t};\n\n\treturn {\n\t\tall,\n\t\tregister,\n\t\tsubscribe,\n\t\tgetProviders,\n\t\tgetProviderByKey,\n\t};\n};\n","import { createInteractionsRepository } from './utils/create-interactions-repository';\n\nexport const interactionsRepository = createInteractionsRepository();\n","import { type InteractionsProvider } from '../types';\n\nexport type CreateInteractionsProviderOptions = {\n\tkey: string | ( () => string );\n\tpriority?: number;\n\tsubscribe?: ( callback: () => void ) => () => void;\n\tactions: {\n\t\tall: InteractionsProvider[ 'actions' ][ 'all' ];\n\t};\n};\n\nconst DEFAULT_PRIORITY = 10;\n\nexport function createInteractionsProvider( {\n\tkey,\n\tpriority = DEFAULT_PRIORITY,\n\tsubscribe = () => () => {},\n\tactions,\n}: CreateInteractionsProviderOptions ): InteractionsProvider {\n\treturn {\n\t\tgetKey: typeof key === 'string' ? () => key : key,\n\t\tpriority,\n\t\tsubscribe,\n\t\tactions: {\n\t\t\tall: actions.all,\n\t\t},\n\t};\n}\n","import { getCurrentDocumentId, getElementInteractions, getElements } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, windowEvent } from '@elementor/editor-v1-adapters';\n\nimport { createInteractionsProvider } from '../utils/create-interactions-provider';\n\nexport const ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX = 'document-elements-interactions-';\n\nexport const documentElementsInteractionsProvider = createInteractionsProvider( {\n\tkey: () => {\n\t\tconst documentId = getCurrentDocumentId();\n\n\t\tif ( ! documentId ) {\n\t\t\tconst pendingKey = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }pending`;\n\t\t\treturn pendingKey;\n\t\t}\n\n\t\tconst key = `${ ELEMENTS_INTERACTIONS_PROVIDER_KEY_PREFIX }${ documentId }`;\n\t\treturn key;\n\t},\n\tpriority: 50,\n\tsubscribe: ( cb ) => {\n\t\treturn listenTo( [ windowEvent( 'elementor/element/update_interactions' ) ], () => cb() );\n\t},\n\tactions: {\n\t\tall: () => {\n\t\t\tconst elements = getElements();\n\n\t\t\tconst filtered = elements.filter( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\tif ( ! interactions ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn interactions?.items?.length > 0;\n\t\t\t} );\n\n\t\t\treturn filtered.map( ( element ) => {\n\t\t\t\tconst interactions = getElementInteractions( element.id );\n\t\t\t\treturn {\n\t\t\t\t\telementId: element.id,\n\t\t\t\t\tdataId: element.id,\n\t\t\t\t\tinteractions: interactions || { version: 1, items: [] },\n\t\t\t\t};\n\t\t\t} );\n\t\t},\n\t},\n} );\n","import { type ElementID, getAllDescendants, getContainer, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport type { ElementInteractions } from '../types';\nimport { createString } from '../utils/prop-value-utils';\nimport { generateTempInteractionId } from '../utils/temp-id-utils';\n\nexport function initCleanInteractionIdsOnDuplicate() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\t\tcontainers.forEach( ( container ) => {\n\t\t\tcleanInteractionIdsRecursive( container.id );\n\t\t} );\n\t} );\n}\n\nfunction cleanInteractionIdsRecursive( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllDescendants( container ).forEach( ( element: V1Element ) => {\n\t\tcleanInteractionIds( element.id as ElementID );\n\t} );\n}\n\nfunction cleanInteractionIds( elementId: ElementID ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tconst interactions = container.model.get( 'interactions' ) as ElementInteractions;\n\n\tif ( ! interactions || ! interactions.items ) {\n\t\treturn;\n\t}\n\n\tconst updatedInteractions = structuredClone( interactions ) as ElementInteractions;\n\n\tupdatedInteractions?.items?.forEach( ( interaction ) => {\n\t\tif ( interaction.$$type === 'interaction-item' && interaction.value ) {\n\t\t\tinteraction.value.interaction_id = createString( generateTempInteractionId() );\n\t\t}\n\t} );\n\n\tcontainer.model.set( 'interactions', updatedInteractions );\n}\n","import { initCleanInteractionIdsOnDuplicate } from './hooks/on-duplicate';\nimport { interactionsRepository } from './interactions-repository';\nimport { documentElementsInteractionsProvider } from './providers/document-elements-interactions-provider';\n\nexport function init() {\n\ttry {\n\t\tinteractionsRepository.register( documentElementsInteractionsProvider );\n\t\tinitCleanInteractionIdsOnDuplicate();\n\t} catch ( error ) {\n\t\tthrow error;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,YAAuB;AACvB,mBAA0B;AAC1B,gBAA0C;AAC1C,kBAAmB;AAEZ,IAAM,aAAa,CAAE,EAAE,oBAAoB,MAA4C;AAC7F,SACC;AAAA,IAAC;AAAA;AAAA,MACA,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,QAAO;AAAA,MACP,OAAM;AAAA,MACN,IAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI;AAAA,MAC9B,KAAM;AAAA;AAAA,IAEN,oCAAC,0BAAU,UAAS,SAAQ;AAAA,IAE5B,oCAAC,wBAAW,OAAM,UAAS,SAAQ,mBAChC,gBAAI,sCAAsC,WAAY,CACzD;AAAA,IAEA,oCAAC,wBAAW,OAAM,UAAS,SAAQ,WAAU,UAAS,eACnD;AAAA,MACD;AAAA,MACA;AAAA,IACD,CACD;AAAA,IAEA,oCAAC,oBAAO,SAAQ,YAAW,OAAM,aAAY,MAAK,SAAQ,IAAK,EAAE,IAAI,EAAE,GAAI,SAAU,2BAClF,gBAAI,yBAAyB,WAAY,CAC5C;AAAA,EACD;AAEF;;;ACjCA,IAAAA,UAAuB;AACvB,IAAAC,gBAAsC;AACtC,IAAAC,0BAAuC;AACvC,qBAAuC;AACvC,IAAAC,aAAsB;;;ACJtB,IAAAC,SAAuB;AACvB,mBAAqE;AACrE,6BAKO;AAQP,IAAM,0BAAsB,4BAAkD,IAAK;AAEnF,IAAM,uBAA4C;AAAA,EACjD,SAAS;AAAA,EACT,OAAO,CAAC;AACT;AAEO,IAAM,uBAAuB,CAAE,EAAE,UAAU,UAAU,MAAmD;AAC9G,QAAM,sBAAkB,+CAAwB,SAAU;AAE1D,8BAAW,MAAM;AAChB,WAAO,cAAe,IAAI,YAAa,uCAAwC,CAAE;AAAA,EAClF,GAAG,CAAC,CAAE;AAEN,QAAM,eACH,mBAAuD;AAE1D,QAAM,kBAAkB,CAAE,UAA4C;AACrE,UAAM,kBAAkB,SAAS,MAAM,OAAO,WAAW,IAAI,SAAY;AAEzE,0DAA2B;AAAA,MAC1B;AAAA,MACA,cAAc;AAAA,IACf,CAAE;AAAA,EACH;AAEA,QAAM,mBAAmB,CAAE,kBAA2B;AACrD,wDAAyB,WAAW,aAAc;AAAA,EACnD;AAEA,QAAM,eAAyC;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,SAAO,qCAAC,oBAAoB,UAApB,EAA6B,OAAQ,gBAAiB,QAAU;AACzE;AAEO,IAAM,yBAAyB,MAAM;AAC3C,QAAM,cAAU,yBAAY,mBAAoB;AAChD,MAAK,CAAE,SAAU;AAChB,UAAM,IAAI,MAAO,iEAAkE;AAAA,EACpF;AACA,SAAO;AACR;;;AC5DA,IAAAC,SAAuB;AACvB,IAAAC,gBAAiE;AAQjE,IAAM,wBAAoB,6BAAoD,MAAU;AAEjF,IAAM,qBAAqB,CAAE,EAAE,SAAS,MAAsC;AACpF,QAAM,CAAE,eAAe,gBAAiB,QAAI,wBAAU,KAAM;AAE5D,QAAM,yBAAqB,2BAAa,MAAM;AAC7C,qBAAkB,IAAK;AAAA,EACxB,GAAG,CAAC,CAAE;AAEN,QAAM,uBAAmB,2BAAa,MAAM;AAC3C,qBAAkB,KAAM;AAAA,EACzB,GAAG,CAAC,CAAE;AAEN,SACC,qCAAC,kBAAkB,UAAlB,EAA2B,OAAQ,EAAE,eAAe,oBAAoB,iBAAiB,KACvF,QACH;AAEF;;;AC3BA,IAAAC,UAAuB;AACvB,IAAAC,gBAAwD;AACxD,IAAAC,0BAAyB;AACzB,IAAAC,gBAAqD;AACrD,IAAAC,aAA4D;AAC5D,IAAAC,eAAmB;;;ACLnB,IAAM,iBAAiB;AAGhB,SAAS,4BAAoC;AACnD,SAAO,GAAI,cAAe,GAAI,KAAK,OAAO,EAAE,SAAU,EAAG,EAAE,UAAW,GAAG,EAAG,CAAE;AAC/E;;;ACQO,IAAM,eAAe,CAAE,WAAsC;AAAA,EACnE,QAAQ;AAAA,EACR;AACD;AAEO,IAAM,eAAe,CAAE,WAAsC;AAAA,EACnE,QAAQ;AAAA,EACR;AACD;AAEO,IAAM,qBAAqB,CAAE,UAAkB,WAA4C;AAAA,EACjG,QAAQ;AAAA,EACR,OAAO;AAAA,IACN,UAAU,aAAc,QAAS;AAAA,IACjC,OAAO,aAAc,KAAM;AAAA,EAC5B;AACD;AAEO,IAAM,gBAAgB,CAAE,WAAwC;AAAA,EACtE,QAAQ;AAAA,EACR;AACD;AAEO,IAAM,eAAe,CAAE,YAAwC;AAAA,EACrE,QAAQ;AAAA,EACR,OAAO;AAAA,IACN,QAAQ,cAAe,MAAO;AAAA,EAC/B;AACD;AAEO,IAAM,iBAAiB,CAAE,MAAoC,WAAW,UAAoB;AAClG,SAAO,MAAM,SAAS;AACvB;AAEO,IAAM,wBAAwB,CAAE;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACV,OAOmC;AAAA,EAClC,QAAQ;AAAA,EACR,OAAO;AAAA,IACN,QAAQ,aAAc,MAAO;AAAA,IAC7B,MAAM,aAAc,IAAK;AAAA,IACzB,WAAW,aAAc,aAAa,EAAG;AAAA,IACzC,eAAe,mBAAoB,UAAU,KAAM;AAAA,IACnD,QAAQ,aAAc,MAAO;AAAA,EAC9B;AACD;AAEO,IAAM,wBAAwB,CAAE;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACV,OASmC;AAAA,EAClC,QAAQ;AAAA,EACR,OAAO;AAAA,IACN,GAAK,iBAAiB,EAAE,gBAAgB,aAAc,aAAc,EAAE;AAAA,IACtE,SAAS,aAAc,OAAQ;AAAA,IAC/B,WAAW,sBAAuB,EAAE,QAAQ,MAAM,WAAW,UAAU,OAAO,OAAO,CAAE;AAAA,EACxF;AACD;AAEO,IAAM,+BAA+B,MAAgC;AAC3E,SAAO,sBAAuB;AAAA,IAC7B,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe,0BAA0B;AAAA,EAC1C,CAAE;AACH;AAOO,IAAM,gBAAgB,CAAE,MAAmC,WAAW,OAAgB;AAC5F,SAAO,MAAM,SAAS;AACvB;AAEO,IAAM,gBAAgB,CAAE,MAAmC,WAAW,MAAe;AAC3F,SAAO,MAAM,SAAS;AACvB;AAaA,IAAM,iBAA2C;AAAA,EAChD,MAAM;AAAA,EACN,UAAU;AAAA,EACV,WAAW;AACZ;AAEA,IAAM,aAAa,CAAE,QAAyB;AAC7C,SAAO,IAAI,OAAQ,CAAE,EAAE,YAAY,IAAI,IAAI,MAAO,CAAE;AACrD;AAEO,IAAM,oBAAoB,CAAE,SAAwC;AAC1E,QAAM,UAAU,cAAe,KAAK,OAAQ;AAC5C,QAAM,SAAS,cAAe,KAAK,UAAU,MAAM,MAAO;AAC1D,QAAM,OAAO,cAAe,KAAK,UAAU,MAAM,IAAK;AAEtD,QAAM,eAAe,eAAgB,OAAQ,KAAK,WAAY,OAAQ;AACtE,QAAM,cAAc,WAAY,MAAO;AACvC,QAAM,YAAY,WAAY,IAAK;AAEnC,SAAO,GAAI,YAAa,KAAM,WAAY,IAAK,SAAU;AAC1D;;;AC3JA,IAAAC,SAAuB;AACvB,IAAAC,gBAAwB;AACxB,IAAAC,0BAAuE;AACvE,IAAAC,aAA8B;AAC9B,IAAAC,eAAmB;;;ACwBnB,IAAM,mBAAmB,oBAAI,IAAqD;AAE3E,SAAS,4BAAkE;AAAA,EACjF;AAAA,EACA;AAAA,EACA;AACD,GAAyB;AACxB,mBAAiB,IAAK,MAAM,EAAE,MAAM,WAA6D,QAAQ,CAAE;AAC5G;AAEO,SAAS,uBAAwB,MAAgC;AACvE,SAAO,iBAAiB,IAAK,IAAK;AACnC;;;ACxCA,IAAAC,SAAuB;AACvB,IAAAC,gBAAwB;AACxB,6BAKO;AACP,IAAAC,gBAAoF;AACpF,IAAAC,aAAqB;AACrB,IAAAC,eAAmB;AAMZ,SAAS,UAAW,EAAE,OAAO,UAAU,gBAAgB,GAAyB;AACtF,QAAM,cAAgD,uBAAS,MAAM;AACpE,UAAM,OAAO,oBAAoB;AAEjC,WAAO;AAAA,MACN;AAAA,QACC,OAAO;AAAA,QACP,OAAO,WAAO,iBAAI,YAAY,WAAY,QAAI,iBAAI,UAAU,WAAY;AAAA,QACxE,eAAe,CAAE,EAAE,KAAK,MACvB,OAAO,qCAAC,oCAAmB,UAAW,MAAO,IAAK,qCAAC,kCAAiB,UAAW,MAAO;AAAA,QACvF,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,OAAO,oBAAoB,WAAO,iBAAI,eAAe,WAAY,QAAI,iBAAI,aAAa,WAAY;AAAA,QAClG,eAAe,CAAE,EAAE,KAAK,MACvB,OAAO,qCAAC,kCAAiB,UAAW,MAAO,IAAK,qCAAC,oCAAmB,UAAW,MAAO;AAAA,QACvF,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,OAAO,oBAAoB,WAAO,iBAAI,aAAa,WAAY,QAAI,iBAAI,WAAW,WAAY;AAAA,QAC9F,eAAe,CAAE,EAAE,KAAK,MACvB,OAAO,qCAAC,gCAAe,UAAW,MAAO,IAAK,qCAAC,+BAAc,UAAW,MAAO;AAAA,QAChF,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,OAAO,oBAAoB,WAAO,iBAAI,cAAc,WAAY,QAAI,iBAAI,YAAY,WAAY;AAAA,QAChG,eAAe,CAAE,EAAE,KAAK,MACvB,OAAO,qCAAC,+BAAc,UAAW,MAAO,IAAK,qCAAC,gCAAe,UAAW,MAAO;AAAA,QAChF,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD,GAAG,CAAE,eAAgB,CAAE;AAEvB,SACC,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,mDACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,+CAAiB,SAAG,iBAAI,aAAa,WAAY,CAAG,CACtD,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,8CAAoB,OAAQ,SAAU,WAAS,MAAC,UAAsB,OAAgB,CACxF,CACD,CACD;AAEF;;;AChEA,IAAAC,SAAuB;AACvB,IAAAC,0BAAuD;AACvD,uBAA6B;AAC7B,IAAAC,aAAqD;AACrD,IAAAC,eAAmB;AAGZ,SAAS,OAAQ,EAAE,OAAO,SAAS,GAAgB;AACzD,QAAM,mBAAmB;AAAA,IACxB,EAAE,KAAK,QAAQ,WAAO,iBAAI,QAAQ,WAAY,EAAE;AAAA,IAChD,EAAE,KAAK,SAAS,WAAO,iBAAI,SAAS,WAAY,EAAE;AAAA,IAClD,EAAE,KAAK,SAAS,WAAO,iBAAI,SAAS,WAAY,EAAE;AAAA,EACnD;AAEA,SACC,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,oDACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,oDAAmB,iBAAI,UAAU,WAAY,CAAG,CAClD,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf;AAAA,IAAC;AAAA;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA,MACZ,MAAK;AAAA,MACL;AAAA,MACA,UAAW,CAAE,UAAwC,SAAU,MAAM,OAAO,KAAM;AAAA;AAAA,IAEhF,iBAAiB,IAAK,CAAE,WAAY;AACrC,aACC,qCAAC,iCAAa,KAAM,OAAO,KAAM,OAAQ,OAAO,OAC7C,OAAO,KACV;AAAA,IAEF,CAAE;AAAA,EACH,CACD,CACD,CACD;AAEF;;;ACxCA,IAAAC,SAAuB;AACvB,IAAAC,0BAKO;AACP,IAAAC,aAAqB;AACrB,IAAAC,eAAmB;AAKZ,SAAS,WAAY,EAAE,OAAO,SAAS,GAAgB;AAC7D,QAAM,UAAiD;AAAA,IACtD;AAAA,MACC,OAAO;AAAA,MACP,WAAO,iBAAI,MAAM,WAAY;AAAA,MAC7B,eAAe,UAAM,iBAAI,MAAM,WAAY;AAAA,MAC3C,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,OAAO;AAAA,MACP,WAAO,iBAAI,OAAO,WAAY;AAAA,MAC9B,eAAe,UAAM,iBAAI,OAAO,WAAY;AAAA,MAC5C,aAAa;AAAA,IACd;AAAA,EACD;AAEA,SACC,4DACC,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,oDACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,oDAAmB,iBAAI,QAAQ,WAAY,CAAG,CAChD,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,+CAAoB,OAAQ,SAAU,WAAS,MAAC,UAAsB,OAAgB,CACxF,CACD,CACD,CACD;AAEF;;;AC3CA,IAAAC,SAAuB;AACvB,IAAAC,0BAAuD;AACvD,IAAAC,oBAA6B;AAC7B,IAAAC,aAAqD;AACrD,IAAAC,eAAmB;AAIZ,SAAS,mBAAoB,EAAE,OAAO,UAAU,MAAM,GAAgB;AAC5E,QAAM,sBAAsB,CAAE,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,QAAQ,QAAQ,MAAO,EAAE;AAAA,IACrG,CAAE,SAAW;AAAA,MACZ;AAAA;AAAA,MAEA,WAAO,iBAAI,SAAS,WAAY,EAAE,QAAS,MAAM,GAAI;AAAA,IACtD;AAAA,EACD;AAEA,SACC,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,oDACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,gDAAmB,KAAO,CAC5B,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf;AAAA,IAAC;AAAA;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA,MACZ,MAAK;AAAA,MACL;AAAA,MACA,UAAW,CAAE,UAAwC,SAAU,MAAM,OAAO,KAAM;AAAA;AAAA,IAEhF,oBAAoB,IAAK,CAAE,cAAe;AAC3C,aACC,qCAAC,kCAAa,KAAM,UAAU,KAAM,OAAQ,UAAU,OACnD,UAAU,KACb;AAAA,IAEF,CAAE;AAAA,EACH,CACD,CACD,CACD;AAEF;;;AC3CA,IAAAC,SAAuB;AACvB,IAAAC,0BAAuD;AACvD,IAAAC,oBAA6B;AAC7B,IAAAC,aAAqD;AACrD,IAAAC,eAAmB;AAIZ,SAAS,QAAS,EAAE,OAAO,SAAS,GAAgB;AAC1D,QAAM,oBAAoB,OAAO,QAAS;AAAA,IACzC,UAAM,iBAAI,aAAa,WAAY;AAAA,IACnC,cAAU,iBAAI,oBAAoB,WAAY;AAAA,EAC/C,CAAE,EAAE,IAAK,CAAE,CAAE,KAAK,KAAM,OAAS;AAAA,IAChC;AAAA,IACA;AAAA,EACD,EAAI;AAEJ,SACC,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,oDACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,oDAAmB,iBAAI,WAAW,WAAY,CAAG,CACnD,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf;AAAA,IAAC;AAAA;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA,MACZ,MAAK;AAAA,MACL,UAAW,CAAE,UAAwC,SAAU,MAAM,OAAO,KAAM;AAAA,MAClF;AAAA;AAAA,IAEE,kBAAkB,IAAK,CAAE,YAAa;AACvC,aACC,qCAAC,kCAAa,KAAM,QAAQ,KAAM,OAAQ,QAAQ,OAC/C,QAAQ,KACX;AAAA,IAEF,CAAE;AAAA,EACH,CACD,CACD,CACD;AAEF;;;ANhBA,IAAM,iBAAiB;AAAA,EACtB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AACT;AAEA,IAAM,uBAAuB,CAAE,YAAY,WAAY;AAEhD,IAAM,qBAAqB,CAAE,EAAE,aAAa,UAAU,kBAAkB,MAAgC;AAC9G,QAAM,UAAU,cAAe,YAAY,SAAS,eAAe,OAAQ;AAC3E,QAAM,SAAS,cAAe,YAAY,UAAU,MAAM,QAAQ,eAAe,MAAO;AACxF,QAAM,OAAO,cAAe,YAAY,UAAU,MAAM,MAAM,eAAe,IAAK;AAClF,QAAM,YAAY,cAAe,YAAY,UAAU,MAAM,WAAW,eAAe,SAAU;AACjG,QAAM,WAAW,cAAe,YAAY,UAAU,MAAM,cAAc,MAAM,UAAU,eAAe,QAAS;AAClH,QAAM,QAAQ,cAAe,YAAY,UAAU,MAAM,cAAc,MAAM,OAAO,eAAe,KAAM;AACzG,QAAM,SAAS,eAAgB,YAAY,UAAU,MAAM,QAAQ,MAAM,QAAQ,eAAe,MAAO;AACvG,QAAM,mBAAmB,qBAAqB,SAAU,OAAQ;AAChE,QAAM,oBAAgB,uBAAS,MAAM;AACpC,QAAK,CAAE,kBAAmB;AACzB,aAAO;AAAA,IACR;AACA,WAAO,uBAAwB,QAAS,GAAG,aAAa;AAAA,EACzD,GAAG,CAAE,gBAAiB,CAAE;AAExB,QAAM,mBAAmB,CAAE,cAAuB,WAAoB,iBAA2B;AAChG,QAAK,cAAc,WAAW,CAAE,cAAe;AAC9C,aAAO;AAAA,IACR;AAEA,QAAK,cAAe;AACnB,aAAO;AAAA,IACR;AACA,WAAO;AAAA,EACR;AAEA,QAAM,oBAAoB,CACzB,YASU;AACV,UAAM,yBAAyB,iBAAkB,eAAe,SAAS,QAAQ,QAAQ,QAAQ,SAAU;AAC3G,UAAM,YAAY,QAAQ,WAAW,SAAY,QAAQ,SAAS;AAElE,UAAM,qBAAqB;AAAA,MAC1B,GAAG;AAAA,MACH,gBAAgB,YAAY;AAAA,MAC5B,SAAS,aAAc,QAAQ,WAAW,OAAQ;AAAA,MAClD,WAAW,sBAAuB;AAAA,QACjC,QAAQ,QAAQ,UAAU;AAAA,QAC1B,MAAM,QAAQ,QAAQ;AAAA,QACtB,WAAW;AAAA,QACX,UAAU,QAAQ,YAAY;AAAA,QAC9B,OAAO,QAAQ,SAAS;AAAA,QACxB,QAAQ;AAAA,MACT,CAAE;AAAA,IACH;AAEA,aAAU,kBAAmB;AAE7B,UAAM,gBAAgB,cAAe,mBAAmB,cAAe;AACvE,eAAY,MAAM;AACjB,wBAAmB,aAAc;AAAA,IAClC,GAAG,CAAE;AAAA,EACN;AAEA,SACC,qCAAC,0CAAe,GAAI,OACnB,qCAAC,mBAAK,WAAS,MAAC,SAAU,OACzB,qCAAC,WAAQ,OAAQ,SAAU,UAAW,CAAE,MAAO,kBAAmB,EAAE,SAAS,EAAE,CAAE,GAAI,GACnF,iBACD,4DACC,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,oDACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf,qCAAC,oDAAmB,iBAAI,UAAU,WAAY,CAAG,CAClD,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,KACf;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ;AAAA,MACR,UAAW,CAAE,MAAO,kBAAmB,EAAE,QAAQ,EAAE,CAAE;AAAA,MACrD,UAAW;AAAA;AAAA,EACZ,CACD,CACD,CACD,CACD,CAEF,GACA,qCAAC,wBAAQ,GACT,qCAAC,mBAAK,WAAS,MAAC,SAAU,OACzB,qCAAC,UAAO,OAAQ,QAAS,UAAW,CAAE,MAAO,kBAAmB,EAAE,QAAQ,EAAE,CAAE,GAAI,GAClF,qCAAC,cAAW,OAAQ,MAAO,UAAW,CAAE,MAAO,kBAAmB,EAAE,MAAM,EAAE,CAAE,GAAI,GAClF;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ;AAAA,MACR,UAAW,CAAE,MAAO,kBAAmB,EAAE,WAAW,EAAE,CAAE;AAAA,MACxD,iBAAkB;AAAA;AAAA,EACnB,GACA;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,OAAQ,QAAS;AAAA,MACzB,UAAW,CAAE,MAAO,kBAAmB,EAAE,UAAU,SAAU,GAAG,EAAG,EAAE,CAAE;AAAA,MACvE,WAAQ,iBAAI,YAAY,WAAY;AAAA;AAAA,EACrC,GACA;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,OAAQ,KAAM;AAAA,MACtB,UAAW,CAAE,MAAO,kBAAmB,EAAE,OAAO,SAAU,GAAG,EAAG,EAAE,CAAE;AAAA,MACpE,WAAQ,iBAAI,SAAS,WAAY;AAAA;AAAA,EAClC,CACD,CACD;AAEF;;;AHzIO,IAAM,6BAA6B;AASnC,SAAS,iBAAkB,OAA8B;AAC/D,QAAM,EAAE,cAAc,sBAAsB,mBAAmB,yBAAyB,IAAI;AAE5F,QAAM,wBAAoB,sBAAQ,KAAM;AAExC,QAAM,+BAA2B;AAAA,IAChC,CAAE,oBAA0C;AAC3C,2BAAsB,eAAgB;AAAA,IACvC;AAAA,IACA,CAAE,oBAAqB;AAAA,EACxB;AAEA,+BAAW,MAAM;AAChB,QACC,4BACA,CAAE,kBAAkB,YAClB,CAAE,aAAa,SAAS,aAAa,OAAO,WAAW,IACxD;AACD,wBAAkB,UAAU;AAC5B,YAAM,WAAgC;AAAA,QACrC,SAAS;AAAA,QACT,OAAO,CAAE,6BAA6B,CAAE;AAAA,MACzC;AACA,+BAA0B,QAAS;AAAA,IACpC;AAAA,EACD,GAAG,CAAE,0BAA0B,aAAa,OAAO,wBAAyB,CAAE;AAE9E,QAAM,uCAAmC,uBAAS,MAAM;AACvD,WAAO,aAAa,OAAO,UAAU;AAAA,EACtC,GAAG,CAAE,aAAa,OAAO,MAAO,CAAE;AAElC,QAAM,iBAAiB,mCACtB,sCAAC,oBAAM,OAAM,aAAY,MAAO,sCAAC,wCAAqB,GAAK,MAAK,WAC/D,sCAAC,iCAAa,iBAAI,gBAAgB,WAAY,CAAG,GACjD,sCAAC,kBAAI,WAAU,cACZ;AAAA,IACD;AAAA,IACA;AAAA,EACD,CACD,CACD,IACG;AAEJ,QAAM,2BAAuB;AAAA,IAC5B,CAAE,aAA8C;AAC/C,+BAA0B;AAAA,QACzB,GAAG;AAAA,QACH,OAAO;AAAA,MACR,CAAE;AAAA,IACH;AAAA,IACA,CAAE,cAAc,wBAAyB;AAAA,EAC1C;AAEA,QAAM,8BAA0B;AAAA,IAC/B,CAAE,OAAe,wBAA+C;AAC/D,YAAM,WAAW,gBAAiB,aAAa,KAAM;AACrD,eAAU,KAAM,IAAI;AAAA,QACnB,QAAQ;AAAA,QACR,OAAO;AAAA,MACR;AACA,+BAA0B;AAAA,QACzB,GAAG;AAAA,QACH,OAAO;AAAA,MACR,CAAE;AAAA,IACH;AAAA,IACA,CAAE,cAAc,wBAAyB;AAAA,EAC1C;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAS;AAAA,MACT,UAAW,2BAA2B,IAAI;AAAA,MAC1C,WAAQ,iBAAI,gBAAgB,WAAY;AAAA,MACxC,QAAS,aAAa;AAAA,MACtB,WAAY;AAAA,MACZ,eAAgB;AAAA,MAChB,YAAa;AAAA,MACb,YAAa;AAAA,MACb,sBAAuB;AAAA,MACvB,yBAA0B;AAAA,MAC1B,cAAe;AAAA,QACd,eAAe,6BAA6B;AAAA,QAC5C,OAAO,CAAE,EAAE,MAAM,MAA4C,kBAAmB,MAAM,KAAM;AAAA,QAC5F,MAAM,MAAM;AAAA,QACZ,SAAS,CAAE,EAAE,OAAO,MAAM,MACzB;AAAA,UAAC;AAAA;AAAA,YACA,KAAM;AAAA,YACN,aAAc,MAAM;AAAA,YACpB,UAAW,CAAE,wBAA+C;AAC3D,sCAAyB,OAAO,mBAAoB;AAAA,YACrD;AAAA,YACA;AAAA;AAAA,QACD;AAAA,QAED,SAAS,CAAE,UACV,sCAAC,sBAAQ,KAAI,WAAU,WAAU,OAAM,WAAQ,iBAAI,WAAW,WAAY,KACzE;AAAA,UAAC;AAAA;AAAA,YACA,kBAAa,iBAAI,oBAAoB,WAAY;AAAA,YACjD,MAAK;AAAA,YACL,SAAU,MAAM,kBAAmB,cAAe,MAAM,MAAM,cAAe,CAAE;AAAA;AAAA,UAE/E,sCAAC,gCAAe,UAAS,QAAO;AAAA,QACjC,CACD;AAAA,MAEF;AAAA;AAAA,EACD;AAEF;;;AHnHO,IAAM,kBAAkB,CAAE,EAAE,UAAU,MAA8B;AAC1E,SACC,sCAAC,0BACA,sCAAC,0BAAuB,WAAwB,CACjD;AAEF;AAEA,SAAS,uBAAwB,EAAE,UAAU,GAA2B;AACvE,QAAM,2BAAuB,gDAAwB,SAAU;AAC/D,QAAM,4BAAwB,wBAAqB,KAAM;AACzD,QAAM,kBAAkB,sBAAsB,OAAO,UAAU,sBAAuB,CAAE;AAExF,SACC,sCAAC,yCAAuB,QAAS,aAC9B,kBACD,sCAAC,wBAAqB,aACrB,sCAAC,uBAAoB,uBAAgD,CACtE,IAEA;AAAA,IAAC;AAAA;AAAA,MACA,qBAAsB,MAAM;AAC3B,8BAAuB,CAAE,EAAG,IAAK;AAAA,MAClC;AAAA;AAAA,EACD,CAEF;AAEF;AAEA,SAAS,oBAAqB;AAAA,EAC7B;AACD,GAEI;AACH,QAAM,EAAE,cAAc,iBAAiB,iBAAiB,IAAI,uBAAuB;AAEnF,QAAM,uBAAmB;AAAA,IACxB,CAAE,oBAA0C;AAC3C,4BAAuB,CAAE,EAAG,KAAM;AAClC,UAAK,CAAE,iBAAkB;AACxB,wBAAiB,MAAU;AAC3B;AAAA,MACD;AAEA,sBAAiB,eAAgB;AAAA,IAClC;AAAA,IACA,CAAE,iBAAiB,qBAAsB;AAAA,EAC1C;AAEA,SACC,sCAAC,oBAAM,IAAK,EAAE,GAAG,GAAG,GAAG,IAAI,GAAI,KAAM,KACpC;AAAA,IAAC;AAAA;AAAA,MACA,0BAA2B,sBAAuB,CAAE;AAAA,MACpD;AAAA,MACA,sBAAuB;AAAA,MACvB,mBAAoB;AAAA;AAAA,EACrB,CACD;AAEF;;;AatEA,IAAM,iBAAqC;AAAA,EAC1C,WAAW;AAAA,IACV,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,QAAQ;AAAA,EACT;AAAA,EACA,kBAAkB,CAAC;AACpB;AAEO,SAAS,wBAA4C;AAC3D,SAAO,OAAO,+BAA+B;AAC9C;;;ACbO,IAAM,+BAA+B,MAAM;AACjD,QAAM,YAAoC,CAAC;AAE3C,QAAM,eAAe,MAAM;AAC1B,UAAM,SAAS,UAAU,MAAO,CAAE,EAAE,KAAM,CAAE,GAAG,MAAS,EAAE,WAAW,EAAE,WAAW,KAAK,CAAI;AAC3F,WAAO;AAAA,EACR;AAEA,QAAM,WAAW,CAAE,aAAoC;AACtD,cAAU,KAAM,QAAS;AAAA,EAC1B;AAEA,QAAM,MAAM,MAAM;AACjB,WAAO,aAAa,EAAE,QAAS,CAAE,aAAc,SAAS,QAAQ,IAAI,CAAE;AAAA,EACvE;AAEA,QAAM,YAAY,CAAE,OAAoB;AACvC,UAAM,eAAe,UAAU,IAAK,CAAE,aAAc,SAAS,UAAW,EAAG,CAAE;AAE7E,WAAO,MAAM;AACZ,mBAAa,QAAS,CAAE,gBAAiB,YAAY,CAAE;AAAA,IACxD;AAAA,EACD;AAEA,QAAM,mBAAmB,CAAE,QAAiB;AAC3C,WAAO,UAAU,KAAM,CAAE,aAAc;AACtC,UAAI;AACH,eAAO,SAAS,OAAO,MAAM;AAAA,MAC9B,QAAQ;AAEP,eAAO;AAAA,MACR;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AC1CO,IAAM,yBAAyB,6BAA6B;;;ACSnE,IAAM,mBAAmB;AAElB,SAAS,2BAA4B;AAAA,EAC3C;AAAA,EACA,WAAW;AAAA,EACX,YAAY,MAAM,MAAM;AAAA,EAAC;AAAA,EACzB;AACD,GAA6D;AAC5D,SAAO;AAAA,IACN,QAAQ,OAAO,QAAQ,WAAW,MAAM,MAAM;AAAA,IAC9C;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACR,KAAK,QAAQ;AAAA,IACd;AAAA,EACD;AACD;;;AC3BA,IAAAC,0BAA0E;AAC1E,gCAA2D;AAIpD,IAAM,4CAA4C;AAElD,IAAM,uCAAuC,2BAA4B;AAAA,EAC/E,KAAK,MAAM;AACV,UAAM,iBAAa,8CAAqB;AAExC,QAAK,CAAE,YAAa;AACnB,YAAM,aAAa,GAAI,yCAA0C;AACjE,aAAO;AAAA,IACR;AAEA,UAAM,MAAM,GAAI,yCAA0C,GAAI,UAAW;AACzE,WAAO;AAAA,EACR;AAAA,EACA,UAAU;AAAA,EACV,WAAW,CAAE,OAAQ;AACpB,eAAO,0BAAAC,mBAAU,KAAE,uCAAa,uCAAwC,CAAE,GAAG,MAAM,GAAG,CAAE;AAAA,EACzF;AAAA,EACA,SAAS;AAAA,IACR,KAAK,MAAM;AACV,YAAM,eAAW,qCAAY;AAE7B,YAAM,WAAW,SAAS,OAAQ,CAAE,YAAa;AAChD,cAAM,mBAAe,gDAAwB,QAAQ,EAAG;AACxD,YAAK,CAAE,cAAe;AACrB,iBAAO;AAAA,QACR;AACA,eAAO,cAAc,OAAO,SAAS;AAAA,MACtC,CAAE;AAEF,aAAO,SAAS,IAAK,CAAE,YAAa;AACnC,cAAM,mBAAe,gDAAwB,QAAQ,EAAG;AACxD,eAAO;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,QAAQ,QAAQ;AAAA,UAChB,cAAc,gBAAgB,EAAE,SAAS,GAAG,OAAO,CAAC,EAAE;AAAA,QACvD;AAAA,MACD,CAAE;AAAA,IACH;AAAA,EACD;AACD,CAAE;;;AC7CF,IAAAC,0BAAgF;AAChF,IAAAC,6BAAiC;AAM1B,SAAS,qCAAqC;AACpD,mDAAkB,SAAS,+BAA+B,CAAE,OAAO,WAAqC;AACvG,UAAM,aAAa,MAAM,QAAS,MAAO,IAAI,SAAS,CAAE,MAAO;AAE/D,eAAW,QAAS,CAAE,cAAe;AACpC,mCAA8B,UAAU,EAAG;AAAA,IAC5C,CAAE;AAAA,EACH,CAAE;AACH;AAEA,SAAS,6BAA8B,WAAuB;AAC7D,QAAM,gBAAY,sCAAc,SAAU;AAE1C,MAAK,CAAE,WAAY;AAClB;AAAA,EACD;AAEA,iDAAmB,SAAU,EAAE,QAAS,CAAE,YAAwB;AACjE,wBAAqB,QAAQ,EAAgB;AAAA,EAC9C,CAAE;AACH;AAEA,SAAS,oBAAqB,WAAuB;AACpD,QAAM,gBAAY,sCAAc,SAAU;AAE1C,MAAK,CAAE,WAAY;AAClB;AAAA,EACD;AAEA,QAAM,eAAe,UAAU,MAAM,IAAK,cAAe;AAEzD,MAAK,CAAE,gBAAgB,CAAE,aAAa,OAAQ;AAC7C;AAAA,EACD;AAEA,QAAM,sBAAsB,gBAAiB,YAAa;AAE1D,uBAAqB,OAAO,QAAS,CAAE,gBAAiB;AACvD,QAAK,YAAY,WAAW,sBAAsB,YAAY,OAAQ;AACrE,kBAAY,MAAM,iBAAiB,aAAc,0BAA0B,CAAE;AAAA,IAC9E;AAAA,EACD,CAAE;AAEF,YAAU,MAAM,IAAK,gBAAgB,mBAAoB;AAC1D;;;AC/CO,SAAS,OAAO;AACtB,MAAI;AACH,2BAAuB,SAAU,oCAAqC;AACtE,uCAAmC;AAAA,EACpC,SAAU,OAAQ;AACjB,UAAM;AAAA,EACP;AACD;","names":["React","import_react","import_editor_elements","import_ui","React","React","import_react","React","import_react","import_editor_controls","import_icons","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_icons","import_ui","import_i18n","React","import_editor_controls","import_ui","import_i18n","React","import_editor_controls","import_ui","import_i18n","React","import_editor_controls","import_editor_ui","import_ui","import_i18n","React","import_editor_controls","import_editor_ui","import_ui","import_i18n","import_editor_elements","listenTo","import_editor_elements","import_editor_v1_adapters"]}
|