@elementor/editor-v1-adapters 4.0.0-663 → 4.0.0-665
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/undoable/undoable.ts +12 -7
package/dist/index.d.mts
CHANGED
|
@@ -100,7 +100,7 @@ type LabelGenerator<TPayload extends Payload, TDoReturn> = (payload: TPayload, d
|
|
|
100
100
|
type Actions<TPayload extends Payload, TDoReturn, TUndoReturn> = {
|
|
101
101
|
do: (payload: TPayload) => Awaited<TDoReturn>;
|
|
102
102
|
undo: (payload: TPayload, doReturn: Awaited<TDoReturn>) => Awaited<TUndoReturn>;
|
|
103
|
-
redo?: (payload: TPayload, doReturn: Awaited<TDoReturn>) => Awaited<TDoReturn>;
|
|
103
|
+
redo?: (payload: TPayload, doReturn: Awaited<TDoReturn>, undoReturn: Awaited<TUndoReturn>) => Awaited<TDoReturn>;
|
|
104
104
|
};
|
|
105
105
|
type Options<TPayload extends Payload, TDoReturn> = {
|
|
106
106
|
title: string | LabelGenerator<TPayload, TDoReturn>;
|
package/dist/index.d.ts
CHANGED
|
@@ -100,7 +100,7 @@ type LabelGenerator<TPayload extends Payload, TDoReturn> = (payload: TPayload, d
|
|
|
100
100
|
type Actions<TPayload extends Payload, TDoReturn, TUndoReturn> = {
|
|
101
101
|
do: (payload: TPayload) => Awaited<TDoReturn>;
|
|
102
102
|
undo: (payload: TPayload, doReturn: Awaited<TDoReturn>) => Awaited<TUndoReturn>;
|
|
103
|
-
redo?: (payload: TPayload, doReturn: Awaited<TDoReturn>) => Awaited<TDoReturn>;
|
|
103
|
+
redo?: (payload: TPayload, doReturn: Awaited<TDoReturn>, undoReturn: Awaited<TUndoReturn>) => Awaited<TDoReturn>;
|
|
104
104
|
};
|
|
105
105
|
type Options<TPayload extends Payload, TDoReturn> = {
|
|
106
106
|
title: string | LabelGenerator<TPayload, TDoReturn>;
|
package/dist/index.js
CHANGED
|
@@ -376,20 +376,21 @@ function undoable(actions, options) {
|
|
|
376
376
|
return (payload) => {
|
|
377
377
|
const _payload = payload;
|
|
378
378
|
const _actions = actions;
|
|
379
|
-
let
|
|
379
|
+
let doReturn = _actions.do(_payload);
|
|
380
|
+
let undoReturn;
|
|
380
381
|
_addHistoryItem({
|
|
381
|
-
title: normalizeToGenerator(options.title)(_payload,
|
|
382
|
-
subTitle: normalizeToGenerator(options.subtitle)(_payload,
|
|
382
|
+
title: normalizeToGenerator(options.title)(_payload, doReturn),
|
|
383
|
+
subTitle: normalizeToGenerator(options.subtitle)(_payload, doReturn),
|
|
383
384
|
type: "",
|
|
384
385
|
restore: (_, isRedo) => {
|
|
385
386
|
if (isRedo) {
|
|
386
|
-
|
|
387
|
+
doReturn = _actions.redo(_payload, doReturn, undoReturn);
|
|
387
388
|
return;
|
|
388
389
|
}
|
|
389
|
-
_actions.undo(_payload,
|
|
390
|
+
undoReturn = _actions.undo(_payload, doReturn);
|
|
390
391
|
}
|
|
391
392
|
});
|
|
392
|
-
return
|
|
393
|
+
return doReturn;
|
|
393
394
|
};
|
|
394
395
|
}
|
|
395
396
|
function normalizeToGenerator(value) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/listeners/event-creators.ts","../src/listeners/is-ready.ts","../src/listeners/utils.ts","../src/listeners/listeners.ts","../src/readers/index.ts","../src/hooks/use-listen-to.ts","../src/hooks/use-is-route-active.ts","../src/edit-mode.ts","../src/hooks/use-route-status.ts","../src/ajax/index.ts","../src/undoable/undoable.ts","../src/undoable/get-history-manager.ts","../src/data-hooks/register-data-hook.ts","../src/data-hooks/block-command.ts","../src/canvas/get-canvas-iframe-document.ts","../src/config/get-elementor-globals.ts","../src/config/enqueue-font.ts"],"sourcesContent":["export {\n\trunCommand as __privateRunCommand,\n\trunCommandSync as __privateRunCommandSync,\n\topenRoute as __privateOpenRoute,\n\tregisterRoute as __privateRegisterRoute,\n} from './dispatchers/dispatchers';\n\nexport {\n\tuseIsRouteActive as __privateUseIsRouteActive,\n\tuseListenTo as __privateUseListenTo,\n\tuseRouteStatus as __privateUseRouteStatus,\n\ttype UseRouteStatusOptions,\n} from './hooks';\n\nexport {\n\tsetReady as __privateSetReady,\n\tlistenTo as __privateListenTo,\n\tflushListeners as __privateFlushListeners,\n\tdispatchReadyEvent as __privateDispatchReadyEvent,\n\twindowEvent,\n\tv1ReadyEvent,\n\tcommandStartEvent,\n\tcommandEndEvent,\n\trouteOpenEvent,\n\trouteCloseEvent,\n} from './listeners';\n\nexport type * from './listeners';\n\nexport { isRouteActive as __privateIsRouteActive, isExperimentActive, EXPERIMENTAL_FEATURES } from './readers';\n\nexport { ajax } from './ajax';\n\nexport { undoable } from './undoable';\n\nexport type { HistoryItem, WindowWithHistoryManager } from './undoable/get-history-manager';\n\nexport { useEditMode, changeEditMode, type EditMode, getCurrentEditMode } from './edit-mode';\n\nexport { registerDataHook, type HookOptions } from './data-hooks/register-data-hook';\nexport { blockCommand } from './data-hooks/block-command';\n\nexport { getCanvasIframeDocument } from './canvas';\n\nexport * from './config';\n","import { type jQueryDeferred } from './types';\n\nexport function isJQueryDeferred< T >( value: unknown ): value is jQueryDeferred< T > {\n\t// TODO: Copied from:\n\t// https://github.com/elementor/elementor/blob/6a74fc9/modules/web-cli/assets/js/core/commands.js#L410\n\n\treturn (\n\t\t!! value &&\n\t\t'object' === typeof value &&\n\t\tObject.hasOwn( value, 'promise' ) &&\n\t\tObject.hasOwn( value, 'then' ) &&\n\t\tObject.hasOwn( value, 'fail' )\n\t);\n}\n\nexport function promisifyJQueryDeferred< T >( deferred: jQueryDeferred< T > ): Promise< T > {\n\treturn new Promise( ( resolve, reject ) => {\n\t\tdeferred.then( resolve, reject );\n\t} );\n}\n","import { type ExtendedWindow } from './types';\nimport { isJQueryDeferred, promisifyJQueryDeferred } from './utils';\n\ntype RunCommandOptions = {\n\tinternal?: boolean;\n};\n\nexport async function runCommand( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst result = runCommandSync( command, args, { internal } );\n\n\tif ( result instanceof Promise ) {\n\t\treturn result;\n\t}\n\n\tif ( isJQueryDeferred( result ) ) {\n\t\treturn promisifyJQueryDeferred( result );\n\t}\n\n\treturn Promise.resolve( result );\n}\n\nexport function runCommandSync< T >( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tconst run = internal ? extendedWindow.$e?.internal : extendedWindow.$e?.run;\n\n\tif ( ! run ) {\n\t\tconst runnerName = internal ? '$e.internal' : '$e.run';\n\n\t\tthrow new Error( `\\`${ runnerName }()\\` is not available` );\n\t}\n\n\treturn run( command, args ) as T;\n}\n\nexport function openRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.route ) {\n\t\treturn Promise.reject( '`$e.route()` is not available' );\n\t}\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.route( route ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n\nexport function registerRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.routes?.register ) {\n\t\treturn Promise.reject( '`$e.routes.register()` is not available' );\n\t}\n\n\tconst routeParts = route.split( '/' );\n\n\tif ( routeParts.length < 2 ) {\n\t\treturn Promise.reject( `\\`${ route }\\` is an invalid route` );\n\t}\n\n\tconst componentRoute = routeParts.pop() as string; // routeParts.length must be >= 2\n\tconst component = routeParts.join( '/' );\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.routes.register( component, componentRoute, () => null ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n","import { type CommandEventDescriptor, type RouteEventDescriptor, type WindowEventDescriptor } from './types';\n\nexport const commandStartEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'before',\n\t};\n};\n\nexport const commandEndEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'after',\n\t};\n};\n\nexport const routeOpenEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'open',\n\t};\n};\n\nexport const routeCloseEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'close',\n\t};\n};\n\nexport const windowEvent = ( event: WindowEventDescriptor[ 'name' ] ): WindowEventDescriptor => {\n\treturn {\n\t\ttype: 'window-event',\n\t\tname: event,\n\t};\n};\n\nexport const v1ReadyEvent = () => {\n\treturn windowEvent( 'elementor/initialized' );\n};\n","/**\n * This file is used to store the state of the isReady variable, which is used to determine\n * if the adapter is ready to receive events (editor v1 and v2 are loaded).\n */\n\nlet ready = false;\n\nexport function isReady() {\n\treturn ready;\n}\n\nexport function setReady( value: boolean ) {\n\tready = value;\n}\n","import { setReady } from './is-ready';\nimport { type ExtendedWindow, type ListenerEvent } from './types';\n\nexport function dispatchReadyEvent() {\n\treturn getV1LoadingPromise().then( () => {\n\t\tsetReady( true );\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/initialized' ) );\n\t} );\n}\n\nfunction getV1LoadingPromise() {\n\tconst v1LoadingPromise = ( window as unknown as ExtendedWindow ).__elementorEditorV1LoadingPromise;\n\n\tif ( ! v1LoadingPromise ) {\n\t\treturn Promise.reject( 'Elementor Editor V1 is not loaded' );\n\t}\n\n\treturn v1LoadingPromise;\n}\n\nexport function normalizeEvent( e: ListenerEvent[ 'originalEvent' ] ): ListenerEvent {\n\tif ( e instanceof CustomEvent && e.detail?.command ) {\n\t\treturn {\n\t\t\ttype: 'command',\n\t\t\tcommand: e.detail.command,\n\t\t\targs: e.detail.args,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\tif ( e instanceof CustomEvent && e.detail?.route ) {\n\t\treturn {\n\t\t\ttype: 'route',\n\t\t\troute: e.detail.route,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'window-event',\n\t\tevent: e.type,\n\t\toriginalEvent: e,\n\t};\n}\n","import { isReady, setReady } from './is-ready';\nimport {\n\ttype CommandEventDescriptor,\n\ttype EventDescriptor,\n\ttype ListenerCallback,\n\ttype RouteEventDescriptor,\n\ttype WindowEventDescriptor,\n} from './types';\nimport { normalizeEvent } from './utils';\n\nconst callbacksByEvent = new Map< EventDescriptor[ 'name' ], ListenerCallback[] >();\nlet abortController = new AbortController();\n\nexport function listenTo( eventDescriptors: EventDescriptor | EventDescriptor[], callback: ListenerCallback ) {\n\tif ( ! Array.isArray( eventDescriptors ) ) {\n\t\teventDescriptors = [ eventDescriptors ];\n\t}\n\n\t// @see https://github.com/typescript-eslint/typescript-eslint/issues/2841\n\t// eslint-disable-next-line array-callback-return -- Clashes with typescript.\n\tconst cleanups = eventDescriptors.map( ( event ) => {\n\t\tconst { type, name } = event;\n\n\t\tswitch ( type ) {\n\t\t\tcase 'command':\n\t\t\t\treturn registerCommandListener( name, event.state, callback );\n\n\t\t\tcase 'route':\n\t\t\t\treturn registerRouteListener( name, event.state, callback );\n\n\t\t\tcase 'window-event':\n\t\t\t\treturn registerWindowEventListener( name, callback );\n\t\t}\n\t} );\n\n\treturn () => {\n\t\tcleanups.forEach( ( cleanup ) => cleanup() );\n\t};\n}\n\nexport function flushListeners() {\n\tabortController.abort();\n\tcallbacksByEvent.clear();\n\tsetReady( false );\n\n\tabortController = new AbortController();\n}\n\nfunction registerCommandListener(\n\tcommand: CommandEventDescriptor[ 'name' ],\n\tstate: CommandEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/commands/run/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'command' && e.command === command;\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerRouteListener(\n\troute: RouteEventDescriptor[ 'name' ],\n\tstate: RouteEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/routes/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'route' && e.route.startsWith( route );\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerWindowEventListener( event: WindowEventDescriptor[ 'name' ], callback: ListenerCallback ) {\n\tconst isFirstListener = ! callbacksByEvent.has( event );\n\n\tif ( isFirstListener ) {\n\t\tcallbacksByEvent.set( event, [] );\n\n\t\taddListener( event );\n\t}\n\n\tcallbacksByEvent.get( event )?.push( callback );\n\n\treturn () => {\n\t\tconst callbacks = callbacksByEvent.get( event );\n\n\t\tif ( ! callbacks?.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst filtered = callbacks.filter( ( cb ) => cb !== callback );\n\n\t\tcallbacksByEvent.set( event, filtered );\n\t};\n}\n\nfunction addListener( event: EventDescriptor[ 'name' ] ) {\n\twindow.addEventListener( event, makeEventHandler( event ), { signal: abortController.signal } );\n}\n\nfunction makeEventHandler( event: EventDescriptor[ 'name' ] ): EventListener {\n\treturn ( e ) => {\n\t\tif ( ! isReady() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedEvent = normalizeEvent( e );\n\n\t\tcallbacksByEvent.get( event )?.forEach( ( callback ) => {\n\t\t\tcallback( normalizedEvent );\n\t\t} );\n\t};\n}\n","import { type ExtendedWindow } from './types';\n\nexport const EXPERIMENTAL_FEATURES = {\n\t// Note: Add new experimental features here as needed\n};\n\nexport function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport const isExperimentActive = ( experiment: keyof typeof EXPERIMENTAL_FEATURES | string ) => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.elementorCommon?.config?.experimentalFeatures?.[ experiment ];\n};\n","import { useEffect, useState } from 'react';\n\nimport { type EventDescriptor, listenTo } from '../listeners';\n\nexport default function useListenTo< T >(\n\tevent: EventDescriptor | EventDescriptor[],\n\tgetSnapshot: () => T,\n\tdeps: unknown[] = []\n) {\n\tconst [ snapshot, setSnapshot ] = useState( () => getSnapshot() );\n\n\tuseEffect( () => {\n\t\tconst updateState = () => setSnapshot( getSnapshot() );\n\n\t\t// Ensure the state is re-calculated when the dependencies have been changed.\n\t\tupdateState();\n\n\t\treturn listenTo( event, updateState );\n\t}, deps ); // eslint-disable-line react-hooks/exhaustive-deps\n\n\treturn snapshot;\n}\n","import { routeCloseEvent, type RouteEventDescriptor, routeOpenEvent } from '../listeners';\nimport { isRouteActive } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsRouteActive( route: RouteEventDescriptor[ 'name' ] ) {\n\treturn useListenTo( [ routeOpenEvent( route ), routeCloseEvent( route ) ], () => isRouteActive( route ), [\n\t\troute,\n\t] );\n}\n","import useListenTo from './hooks/use-listen-to';\nimport { windowEvent } from './listeners';\n\nexport type EditMode = 'edit' | 'preview' | 'picker' | ( string & {} );\n\nexport type ExtendedWindow = Window & {\n\telementor: {\n\t\tchangeEditMode: ( newMode: EditMode ) => void;\n\t\tchannels: {\n\t\t\tdataEditMode: {\n\t\t\t\trequest: ( key: 'activeMode' ) => EditMode;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport function useEditMode() {\n\treturn useListenTo( windowEvent( 'elementor/edit-mode/change' ), getCurrentEditMode );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.channels.dataEditMode.request( 'activeMode' );\n}\n\nexport function changeEditMode( newMode: EditMode ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.changeEditMode( newMode );\n}\n","import { type EditMode, useEditMode } from '../edit-mode';\nimport { type RouteEventDescriptor } from '../listeners';\nimport useIsRouteActive from './use-is-route-active';\n\nexport type UseRouteStatusOptions = {\n\tblockOnKitRoutes?: boolean;\n\tallowedEditModes?: EditMode[];\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, allowedEditModes = [ 'edit' ] }: UseRouteStatusOptions = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst currentEditMode = useEditMode();\n\n\tconst isBlockedByEditMode = ! allowedEditModes.includes( currentEditMode );\n\n\tconst isBlockedByKit = blockOnKitRoutes && isKitRouteActive;\n\n\tconst isActive = isRouteActive && ! isBlockedByEditMode;\n\n\tconst isBlocked = isBlockedByEditMode || isBlockedByKit;\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\n}\n","import { type ExtendedWindow, type RequestParams } from './types';\n\nexport const ajax = {\n\tasync load< TRequestData = object, TResponseData = object >(\n\t\tdata: RequestParams< TRequestData >\n\t): Promise< TResponseData > {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\treturn new Promise( ( success, error ) => {\n\t\t\textendedWindow.elementorCommon?.ajax?.load< TRequestData, TResponseData >( {\n\t\t\t\t...data,\n\t\t\t\tsuccess,\n\t\t\t\terror,\n\t\t\t} );\n\t\t} );\n\t},\n\tinvalidateCache< TData = object >( data: RequestParams< TData > ) {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\textendedWindow.elementorCommon?.ajax?.invalidateCache< TData >( data );\n\t},\n};\n","import { debounce } from '@elementor/utils';\n\nimport { getHistoryManager, type HistoryItem } from './get-history-manager';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Payload = Record< string, any > | undefined;\n\ntype LabelGenerator< TPayload extends Payload, TDoReturn > = ( payload: TPayload, doReturn: TDoReturn ) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => Awaited< TDoReturn >;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => Awaited< TUndoReturn >;\n\tredo?: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => Awaited< TDoReturn >;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n\tdebounce?: { wait: number };\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, NoInfer< TDoReturn > >\n): () => TDoReturn;\n\n// Action WITH a payload.\nexport function undoable< TPayload extends NonNullable< Payload >, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload: TPayload ) => TDoReturn;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload?: Payload ) => TDoReturn {\n\tactions.redo ??= actions.do;\n\n\tconst _addHistoryItem = options.debounce ? debounce( addHistoryItem, options.debounce.wait ) : addHistoryItem;\n\n\treturn ( payload ) => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tlet result = _actions.do( _payload );\n\n\t\t_addHistoryItem( {\n\t\t\ttitle: normalizeToGenerator( options.title )( _payload, result ),\n\t\t\tsubTitle: normalizeToGenerator( options.subtitle )( _payload, result ),\n\t\t\ttype: '',\n\t\t\trestore: ( _, isRedo ) => {\n\t\t\t\tif ( isRedo ) {\n\t\t\t\t\tresult = _actions.redo( _payload, result );\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_actions.undo( _payload, result );\n\t\t\t},\n\t\t} );\n\n\t\treturn result;\n\t};\n}\n\nfunction normalizeToGenerator< TPayload extends Payload, TDoReturn >(\n\tvalue: string | undefined | LabelGenerator< TPayload, TDoReturn >\n) {\n\treturn typeof value === 'function' ? value : () => value ?? '';\n}\n\nfunction addHistoryItem( item: HistoryItem ) {\n\tconst history = getHistoryManager();\n\thistory.addItem( item );\n}\n","import { createError } from '@elementor/utils';\n\nexport type HistoryItem = {\n\ttitle: string;\n\tsubTitle: string;\n\ttype: string;\n\trestore: ( item: HistoryItem, isRedo: boolean ) => void;\n};\n\ntype AddHistoryItem = ( item: HistoryItem ) => void;\n\nexport type WindowWithHistoryManager = Window & {\n\telementor?: {\n\t\tdocuments?: {\n\t\t\tgetCurrent?: () => {\n\t\t\t\thistory?: {\n\t\t\t\t\taddItem: AddHistoryItem;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\n\nconst HistoryManagerNotAvailable = createError( {\n\tcode: 'history_manager_not_available',\n\tmessage: 'Cannot access History manager.',\n} );\n\nexport function getHistoryManager() {\n\tconst extendedWindow = window as unknown as WindowWithHistoryManager;\n\n\tconst historyManger = extendedWindow.elementor?.documents?.getCurrent?.()?.history;\n\n\tif ( ! historyManger ) {\n\t\tthrow new HistoryManagerNotAvailable();\n\t}\n\n\treturn historyManger;\n}\n","export type WindowWithDataHooks = Window & {\n\t$e: {\n\t\tmodules?: {\n\t\t\thookData?: {\n\t\t\t\t[ K in keyof HooksMap as Capitalize< K > ]: HooksMap[ K ];\n\t\t\t};\n\t\t};\n\t\tcommands?: {\n\t\t\tcurrentTrace?: string[];\n\t\t};\n\t};\n};\n\ntype HooksMap = Record< HookType, typeof DataHook | undefined >;\n\ntype HookType = 'after' | 'dependency';\n\nexport type Args = Record< string, unknown >;\n\nexport type HookOptions = {\n\tcommandsCurrentTrace?: string[];\n};\n\nexport type AfterHookCallback< TArgs extends Args = Args, TResult = unknown > = (\n\targs: TArgs,\n\tresult: TResult,\n\toptions?: HookOptions\n) => void | Promise< void >;\n\nexport type DependencyHookCallback< TArgs extends Args = Args > = ( args: TArgs, options?: HookOptions ) => boolean;\n\nexport declare class DataHook< TArgs extends Args = Args, TResult = unknown > {\n\tgetCommand(): string;\n\tgetId(): string;\n\tapply( args: TArgs, result?: TResult ): unknown;\n\tregister(): void;\n}\n\nlet hookId = 0;\n\nexport function registerDataHook< TArgs extends Args = Args >(\n\ttype: 'dependency',\n\tcommand: string,\n\tcallback: DependencyHookCallback< TArgs >\n): DataHook< TArgs >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: 'after',\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult >\n): DataHook< TArgs, TResult >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: HookType,\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult > | DependencyHookCallback< TArgs >\n): DataHook< TArgs, TResult > {\n\tconst eWindow = window as unknown as WindowWithDataHooks;\n\tconst hooksClasses = eWindow.$e?.modules?.hookData;\n\n\tconst hooksMap = {\n\t\tafter: hooksClasses?.After,\n\t\tdependency: hooksClasses?.Dependency,\n\t} satisfies HooksMap;\n\n\tconst HookClass = hooksMap[ type ];\n\n\tif ( ! HookClass ) {\n\t\tthrow new Error( `Data hook '${ type }' is not available` );\n\t}\n\n\tconst currentHookId = ++hookId;\n\n\tconst hook = new ( class extends HookClass< TArgs, TResult > {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--data--${ currentHookId }`;\n\t\t}\n\n\t\tapply( args: TArgs, result?: TResult ) {\n\t\t\tconst hookOptions: HookOptions = {};\n\n\t\t\tconst currentWindow = window as unknown as WindowWithDataHooks;\n\t\t\tconst commandsCurrentTrace = currentWindow.$e?.commands?.currentTrace;\n\t\t\tif ( commandsCurrentTrace ) {\n\t\t\t\thookOptions.commandsCurrentTrace = commandsCurrentTrace;\n\t\t\t}\n\n\t\t\tif ( type === 'dependency' ) {\n\t\t\t\treturn ( callback as DependencyHookCallback< TArgs > )( args, hookOptions );\n\t\t\t}\n\n\t\t\treturn ( callback as AfterHookCallback< TArgs, TResult > )( args, result as TResult, hookOptions );\n\t\t}\n\t} )();\n\n\thook.register();\n\n\treturn hook;\n}\n","import { type Args, registerDataHook } from './register-data-hook';\n\ntype BlockCommandArgs = {\n\tcommand: string;\n\tcondition: ( args: Args ) => boolean;\n};\n\nexport function blockCommand( { command, condition }: BlockCommandArgs ) {\n\treturn registerDataHook( 'dependency', command, ( args ) => {\n\t\tconst shouldBlock = condition( args );\n\n\t\t// Should return `false` to prevent the command from running.\n\t\treturn ! shouldBlock;\n\t} );\n}\n","export function getCanvasIframeDocument() {\n\treturn window.elementor?.$preview?.[ 0 ]?.contentDocument;\n}\n","export const getElementorConfig = () => {\n\treturn window.elementor?.config ?? {};\n};\n\nexport const getElementorFrontendConfig = () => {\n\treturn window.elementorFrontend?.config ?? {};\n};\n","export type EnqueueFont = ( fontFamily: string, context?: 'preview' | 'editor' ) => void;\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\treturn window.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n"],"mappings":"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","names":["isRouteActive","import_utils","import_utils"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/listeners/event-creators.ts","../src/listeners/is-ready.ts","../src/listeners/utils.ts","../src/listeners/listeners.ts","../src/readers/index.ts","../src/hooks/use-listen-to.ts","../src/hooks/use-is-route-active.ts","../src/edit-mode.ts","../src/hooks/use-route-status.ts","../src/ajax/index.ts","../src/undoable/undoable.ts","../src/undoable/get-history-manager.ts","../src/data-hooks/register-data-hook.ts","../src/data-hooks/block-command.ts","../src/canvas/get-canvas-iframe-document.ts","../src/config/get-elementor-globals.ts","../src/config/enqueue-font.ts"],"sourcesContent":["export {\n\trunCommand as __privateRunCommand,\n\trunCommandSync as __privateRunCommandSync,\n\topenRoute as __privateOpenRoute,\n\tregisterRoute as __privateRegisterRoute,\n} from './dispatchers/dispatchers';\n\nexport {\n\tuseIsRouteActive as __privateUseIsRouteActive,\n\tuseListenTo as __privateUseListenTo,\n\tuseRouteStatus as __privateUseRouteStatus,\n\ttype UseRouteStatusOptions,\n} from './hooks';\n\nexport {\n\tsetReady as __privateSetReady,\n\tlistenTo as __privateListenTo,\n\tflushListeners as __privateFlushListeners,\n\tdispatchReadyEvent as __privateDispatchReadyEvent,\n\twindowEvent,\n\tv1ReadyEvent,\n\tcommandStartEvent,\n\tcommandEndEvent,\n\trouteOpenEvent,\n\trouteCloseEvent,\n} from './listeners';\n\nexport type * from './listeners';\n\nexport { isRouteActive as __privateIsRouteActive, isExperimentActive, EXPERIMENTAL_FEATURES } from './readers';\n\nexport { ajax } from './ajax';\n\nexport { undoable } from './undoable';\n\nexport type { HistoryItem, WindowWithHistoryManager } from './undoable/get-history-manager';\n\nexport { useEditMode, changeEditMode, type EditMode, getCurrentEditMode } from './edit-mode';\n\nexport { registerDataHook, type HookOptions } from './data-hooks/register-data-hook';\nexport { blockCommand } from './data-hooks/block-command';\n\nexport { getCanvasIframeDocument } from './canvas';\n\nexport * from './config';\n","import { type jQueryDeferred } from './types';\n\nexport function isJQueryDeferred< T >( value: unknown ): value is jQueryDeferred< T > {\n\t// TODO: Copied from:\n\t// https://github.com/elementor/elementor/blob/6a74fc9/modules/web-cli/assets/js/core/commands.js#L410\n\n\treturn (\n\t\t!! value &&\n\t\t'object' === typeof value &&\n\t\tObject.hasOwn( value, 'promise' ) &&\n\t\tObject.hasOwn( value, 'then' ) &&\n\t\tObject.hasOwn( value, 'fail' )\n\t);\n}\n\nexport function promisifyJQueryDeferred< T >( deferred: jQueryDeferred< T > ): Promise< T > {\n\treturn new Promise( ( resolve, reject ) => {\n\t\tdeferred.then( resolve, reject );\n\t} );\n}\n","import { type ExtendedWindow } from './types';\nimport { isJQueryDeferred, promisifyJQueryDeferred } from './utils';\n\ntype RunCommandOptions = {\n\tinternal?: boolean;\n};\n\nexport async function runCommand( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst result = runCommandSync( command, args, { internal } );\n\n\tif ( result instanceof Promise ) {\n\t\treturn result;\n\t}\n\n\tif ( isJQueryDeferred( result ) ) {\n\t\treturn promisifyJQueryDeferred( result );\n\t}\n\n\treturn Promise.resolve( result );\n}\n\nexport function runCommandSync< T >( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tconst run = internal ? extendedWindow.$e?.internal : extendedWindow.$e?.run;\n\n\tif ( ! run ) {\n\t\tconst runnerName = internal ? '$e.internal' : '$e.run';\n\n\t\tthrow new Error( `\\`${ runnerName }()\\` is not available` );\n\t}\n\n\treturn run( command, args ) as T;\n}\n\nexport function openRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.route ) {\n\t\treturn Promise.reject( '`$e.route()` is not available' );\n\t}\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.route( route ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n\nexport function registerRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.routes?.register ) {\n\t\treturn Promise.reject( '`$e.routes.register()` is not available' );\n\t}\n\n\tconst routeParts = route.split( '/' );\n\n\tif ( routeParts.length < 2 ) {\n\t\treturn Promise.reject( `\\`${ route }\\` is an invalid route` );\n\t}\n\n\tconst componentRoute = routeParts.pop() as string; // routeParts.length must be >= 2\n\tconst component = routeParts.join( '/' );\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.routes.register( component, componentRoute, () => null ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n","import { type CommandEventDescriptor, type RouteEventDescriptor, type WindowEventDescriptor } from './types';\n\nexport const commandStartEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'before',\n\t};\n};\n\nexport const commandEndEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'after',\n\t};\n};\n\nexport const routeOpenEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'open',\n\t};\n};\n\nexport const routeCloseEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'close',\n\t};\n};\n\nexport const windowEvent = ( event: WindowEventDescriptor[ 'name' ] ): WindowEventDescriptor => {\n\treturn {\n\t\ttype: 'window-event',\n\t\tname: event,\n\t};\n};\n\nexport const v1ReadyEvent = () => {\n\treturn windowEvent( 'elementor/initialized' );\n};\n","/**\n * This file is used to store the state of the isReady variable, which is used to determine\n * if the adapter is ready to receive events (editor v1 and v2 are loaded).\n */\n\nlet ready = false;\n\nexport function isReady() {\n\treturn ready;\n}\n\nexport function setReady( value: boolean ) {\n\tready = value;\n}\n","import { setReady } from './is-ready';\nimport { type ExtendedWindow, type ListenerEvent } from './types';\n\nexport function dispatchReadyEvent() {\n\treturn getV1LoadingPromise().then( () => {\n\t\tsetReady( true );\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/initialized' ) );\n\t} );\n}\n\nfunction getV1LoadingPromise() {\n\tconst v1LoadingPromise = ( window as unknown as ExtendedWindow ).__elementorEditorV1LoadingPromise;\n\n\tif ( ! v1LoadingPromise ) {\n\t\treturn Promise.reject( 'Elementor Editor V1 is not loaded' );\n\t}\n\n\treturn v1LoadingPromise;\n}\n\nexport function normalizeEvent( e: ListenerEvent[ 'originalEvent' ] ): ListenerEvent {\n\tif ( e instanceof CustomEvent && e.detail?.command ) {\n\t\treturn {\n\t\t\ttype: 'command',\n\t\t\tcommand: e.detail.command,\n\t\t\targs: e.detail.args,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\tif ( e instanceof CustomEvent && e.detail?.route ) {\n\t\treturn {\n\t\t\ttype: 'route',\n\t\t\troute: e.detail.route,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'window-event',\n\t\tevent: e.type,\n\t\toriginalEvent: e,\n\t};\n}\n","import { isReady, setReady } from './is-ready';\nimport {\n\ttype CommandEventDescriptor,\n\ttype EventDescriptor,\n\ttype ListenerCallback,\n\ttype RouteEventDescriptor,\n\ttype WindowEventDescriptor,\n} from './types';\nimport { normalizeEvent } from './utils';\n\nconst callbacksByEvent = new Map< EventDescriptor[ 'name' ], ListenerCallback[] >();\nlet abortController = new AbortController();\n\nexport function listenTo( eventDescriptors: EventDescriptor | EventDescriptor[], callback: ListenerCallback ) {\n\tif ( ! Array.isArray( eventDescriptors ) ) {\n\t\teventDescriptors = [ eventDescriptors ];\n\t}\n\n\t// @see https://github.com/typescript-eslint/typescript-eslint/issues/2841\n\t// eslint-disable-next-line array-callback-return -- Clashes with typescript.\n\tconst cleanups = eventDescriptors.map( ( event ) => {\n\t\tconst { type, name } = event;\n\n\t\tswitch ( type ) {\n\t\t\tcase 'command':\n\t\t\t\treturn registerCommandListener( name, event.state, callback );\n\n\t\t\tcase 'route':\n\t\t\t\treturn registerRouteListener( name, event.state, callback );\n\n\t\t\tcase 'window-event':\n\t\t\t\treturn registerWindowEventListener( name, callback );\n\t\t}\n\t} );\n\n\treturn () => {\n\t\tcleanups.forEach( ( cleanup ) => cleanup() );\n\t};\n}\n\nexport function flushListeners() {\n\tabortController.abort();\n\tcallbacksByEvent.clear();\n\tsetReady( false );\n\n\tabortController = new AbortController();\n}\n\nfunction registerCommandListener(\n\tcommand: CommandEventDescriptor[ 'name' ],\n\tstate: CommandEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/commands/run/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'command' && e.command === command;\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerRouteListener(\n\troute: RouteEventDescriptor[ 'name' ],\n\tstate: RouteEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/routes/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'route' && e.route.startsWith( route );\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerWindowEventListener( event: WindowEventDescriptor[ 'name' ], callback: ListenerCallback ) {\n\tconst isFirstListener = ! callbacksByEvent.has( event );\n\n\tif ( isFirstListener ) {\n\t\tcallbacksByEvent.set( event, [] );\n\n\t\taddListener( event );\n\t}\n\n\tcallbacksByEvent.get( event )?.push( callback );\n\n\treturn () => {\n\t\tconst callbacks = callbacksByEvent.get( event );\n\n\t\tif ( ! callbacks?.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst filtered = callbacks.filter( ( cb ) => cb !== callback );\n\n\t\tcallbacksByEvent.set( event, filtered );\n\t};\n}\n\nfunction addListener( event: EventDescriptor[ 'name' ] ) {\n\twindow.addEventListener( event, makeEventHandler( event ), { signal: abortController.signal } );\n}\n\nfunction makeEventHandler( event: EventDescriptor[ 'name' ] ): EventListener {\n\treturn ( e ) => {\n\t\tif ( ! isReady() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedEvent = normalizeEvent( e );\n\n\t\tcallbacksByEvent.get( event )?.forEach( ( callback ) => {\n\t\t\tcallback( normalizedEvent );\n\t\t} );\n\t};\n}\n","import { type ExtendedWindow } from './types';\n\nexport const EXPERIMENTAL_FEATURES = {\n\t// Note: Add new experimental features here as needed\n};\n\nexport function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport const isExperimentActive = ( experiment: keyof typeof EXPERIMENTAL_FEATURES | string ) => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.elementorCommon?.config?.experimentalFeatures?.[ experiment ];\n};\n","import { useEffect, useState } from 'react';\n\nimport { type EventDescriptor, listenTo } from '../listeners';\n\nexport default function useListenTo< T >(\n\tevent: EventDescriptor | EventDescriptor[],\n\tgetSnapshot: () => T,\n\tdeps: unknown[] = []\n) {\n\tconst [ snapshot, setSnapshot ] = useState( () => getSnapshot() );\n\n\tuseEffect( () => {\n\t\tconst updateState = () => setSnapshot( getSnapshot() );\n\n\t\t// Ensure the state is re-calculated when the dependencies have been changed.\n\t\tupdateState();\n\n\t\treturn listenTo( event, updateState );\n\t}, deps ); // eslint-disable-line react-hooks/exhaustive-deps\n\n\treturn snapshot;\n}\n","import { routeCloseEvent, type RouteEventDescriptor, routeOpenEvent } from '../listeners';\nimport { isRouteActive } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsRouteActive( route: RouteEventDescriptor[ 'name' ] ) {\n\treturn useListenTo( [ routeOpenEvent( route ), routeCloseEvent( route ) ], () => isRouteActive( route ), [\n\t\troute,\n\t] );\n}\n","import useListenTo from './hooks/use-listen-to';\nimport { windowEvent } from './listeners';\n\nexport type EditMode = 'edit' | 'preview' | 'picker' | ( string & {} );\n\nexport type ExtendedWindow = Window & {\n\telementor: {\n\t\tchangeEditMode: ( newMode: EditMode ) => void;\n\t\tchannels: {\n\t\t\tdataEditMode: {\n\t\t\t\trequest: ( key: 'activeMode' ) => EditMode;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport function useEditMode() {\n\treturn useListenTo( windowEvent( 'elementor/edit-mode/change' ), getCurrentEditMode );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.channels.dataEditMode.request( 'activeMode' );\n}\n\nexport function changeEditMode( newMode: EditMode ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.changeEditMode( newMode );\n}\n","import { type EditMode, useEditMode } from '../edit-mode';\nimport { type RouteEventDescriptor } from '../listeners';\nimport useIsRouteActive from './use-is-route-active';\n\nexport type UseRouteStatusOptions = {\n\tblockOnKitRoutes?: boolean;\n\tallowedEditModes?: EditMode[];\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, allowedEditModes = [ 'edit' ] }: UseRouteStatusOptions = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst currentEditMode = useEditMode();\n\n\tconst isBlockedByEditMode = ! allowedEditModes.includes( currentEditMode );\n\n\tconst isBlockedByKit = blockOnKitRoutes && isKitRouteActive;\n\n\tconst isActive = isRouteActive && ! isBlockedByEditMode;\n\n\tconst isBlocked = isBlockedByEditMode || isBlockedByKit;\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\n}\n","import { type ExtendedWindow, type RequestParams } from './types';\n\nexport const ajax = {\n\tasync load< TRequestData = object, TResponseData = object >(\n\t\tdata: RequestParams< TRequestData >\n\t): Promise< TResponseData > {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\treturn new Promise( ( success, error ) => {\n\t\t\textendedWindow.elementorCommon?.ajax?.load< TRequestData, TResponseData >( {\n\t\t\t\t...data,\n\t\t\t\tsuccess,\n\t\t\t\terror,\n\t\t\t} );\n\t\t} );\n\t},\n\tinvalidateCache< TData = object >( data: RequestParams< TData > ) {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\textendedWindow.elementorCommon?.ajax?.invalidateCache< TData >( data );\n\t},\n};\n","import { debounce } from '@elementor/utils';\n\nimport { getHistoryManager, type HistoryItem } from './get-history-manager';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Payload = Record< string, any > | undefined;\n\ntype LabelGenerator< TPayload extends Payload, TDoReturn > = ( payload: TPayload, doReturn: TDoReturn ) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => Awaited< TDoReturn >;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => Awaited< TUndoReturn >;\n\tredo?: (\n\t\tpayload: TPayload,\n\t\tdoReturn: Awaited< TDoReturn >,\n\t\tundoReturn: Awaited< TUndoReturn >\n\t) => Awaited< TDoReturn >;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n\tdebounce?: { wait: number };\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, NoInfer< TDoReturn > >\n): () => TDoReturn;\n\n// Action WITH a payload.\nexport function undoable< TPayload extends NonNullable< Payload >, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload: TPayload ) => TDoReturn;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload?: Payload ) => TDoReturn {\n\tactions.redo ??= actions.do;\n\n\tconst _addHistoryItem = options.debounce ? debounce( addHistoryItem, options.debounce.wait ) : addHistoryItem;\n\n\treturn ( payload ) => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tlet doReturn = _actions.do( _payload );\n\t\tlet undoReturn: Awaited< TUndoReturn >;\n\n\t\t_addHistoryItem( {\n\t\t\ttitle: normalizeToGenerator( options.title )( _payload, doReturn ),\n\t\t\tsubTitle: normalizeToGenerator( options.subtitle )( _payload, doReturn ),\n\t\t\ttype: '',\n\t\t\trestore: ( _, isRedo ) => {\n\t\t\t\tif ( isRedo ) {\n\t\t\t\t\tdoReturn = _actions.redo( _payload, doReturn, undoReturn );\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tundoReturn = _actions.undo( _payload, doReturn );\n\t\t\t},\n\t\t} );\n\n\t\treturn doReturn;\n\t};\n}\n\nfunction normalizeToGenerator< TPayload extends Payload, TDoReturn >(\n\tvalue: string | undefined | LabelGenerator< TPayload, TDoReturn >\n) {\n\treturn typeof value === 'function' ? value : () => value ?? '';\n}\n\nfunction addHistoryItem( item: HistoryItem ) {\n\tconst history = getHistoryManager();\n\thistory.addItem( item );\n}\n","import { createError } from '@elementor/utils';\n\nexport type HistoryItem = {\n\ttitle: string;\n\tsubTitle: string;\n\ttype: string;\n\trestore: ( item: HistoryItem, isRedo: boolean ) => void;\n};\n\ntype AddHistoryItem = ( item: HistoryItem ) => void;\n\nexport type WindowWithHistoryManager = Window & {\n\telementor?: {\n\t\tdocuments?: {\n\t\t\tgetCurrent?: () => {\n\t\t\t\thistory?: {\n\t\t\t\t\taddItem: AddHistoryItem;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\n\nconst HistoryManagerNotAvailable = createError( {\n\tcode: 'history_manager_not_available',\n\tmessage: 'Cannot access History manager.',\n} );\n\nexport function getHistoryManager() {\n\tconst extendedWindow = window as unknown as WindowWithHistoryManager;\n\n\tconst historyManger = extendedWindow.elementor?.documents?.getCurrent?.()?.history;\n\n\tif ( ! historyManger ) {\n\t\tthrow new HistoryManagerNotAvailable();\n\t}\n\n\treturn historyManger;\n}\n","export type WindowWithDataHooks = Window & {\n\t$e: {\n\t\tmodules?: {\n\t\t\thookData?: {\n\t\t\t\t[ K in keyof HooksMap as Capitalize< K > ]: HooksMap[ K ];\n\t\t\t};\n\t\t};\n\t\tcommands?: {\n\t\t\tcurrentTrace?: string[];\n\t\t};\n\t};\n};\n\ntype HooksMap = Record< HookType, typeof DataHook | undefined >;\n\ntype HookType = 'after' | 'dependency';\n\nexport type Args = Record< string, unknown >;\n\nexport type HookOptions = {\n\tcommandsCurrentTrace?: string[];\n};\n\nexport type AfterHookCallback< TArgs extends Args = Args, TResult = unknown > = (\n\targs: TArgs,\n\tresult: TResult,\n\toptions?: HookOptions\n) => void | Promise< void >;\n\nexport type DependencyHookCallback< TArgs extends Args = Args > = ( args: TArgs, options?: HookOptions ) => boolean;\n\nexport declare class DataHook< TArgs extends Args = Args, TResult = unknown > {\n\tgetCommand(): string;\n\tgetId(): string;\n\tapply( args: TArgs, result?: TResult ): unknown;\n\tregister(): void;\n}\n\nlet hookId = 0;\n\nexport function registerDataHook< TArgs extends Args = Args >(\n\ttype: 'dependency',\n\tcommand: string,\n\tcallback: DependencyHookCallback< TArgs >\n): DataHook< TArgs >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: 'after',\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult >\n): DataHook< TArgs, TResult >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: HookType,\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult > | DependencyHookCallback< TArgs >\n): DataHook< TArgs, TResult > {\n\tconst eWindow = window as unknown as WindowWithDataHooks;\n\tconst hooksClasses = eWindow.$e?.modules?.hookData;\n\n\tconst hooksMap = {\n\t\tafter: hooksClasses?.After,\n\t\tdependency: hooksClasses?.Dependency,\n\t} satisfies HooksMap;\n\n\tconst HookClass = hooksMap[ type ];\n\n\tif ( ! HookClass ) {\n\t\tthrow new Error( `Data hook '${ type }' is not available` );\n\t}\n\n\tconst currentHookId = ++hookId;\n\n\tconst hook = new ( class extends HookClass< TArgs, TResult > {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--data--${ currentHookId }`;\n\t\t}\n\n\t\tapply( args: TArgs, result?: TResult ) {\n\t\t\tconst hookOptions: HookOptions = {};\n\n\t\t\tconst currentWindow = window as unknown as WindowWithDataHooks;\n\t\t\tconst commandsCurrentTrace = currentWindow.$e?.commands?.currentTrace;\n\t\t\tif ( commandsCurrentTrace ) {\n\t\t\t\thookOptions.commandsCurrentTrace = commandsCurrentTrace;\n\t\t\t}\n\n\t\t\tif ( type === 'dependency' ) {\n\t\t\t\treturn ( callback as DependencyHookCallback< TArgs > )( args, hookOptions );\n\t\t\t}\n\n\t\t\treturn ( callback as AfterHookCallback< TArgs, TResult > )( args, result as TResult, hookOptions );\n\t\t}\n\t} )();\n\n\thook.register();\n\n\treturn hook;\n}\n","import { type Args, registerDataHook } from './register-data-hook';\n\ntype BlockCommandArgs = {\n\tcommand: string;\n\tcondition: ( args: Args ) => boolean;\n};\n\nexport function blockCommand( { command, condition }: BlockCommandArgs ) {\n\treturn registerDataHook( 'dependency', command, ( args ) => {\n\t\tconst shouldBlock = condition( args );\n\n\t\t// Should return `false` to prevent the command from running.\n\t\treturn ! shouldBlock;\n\t} );\n}\n","export function getCanvasIframeDocument() {\n\treturn window.elementor?.$preview?.[ 0 ]?.contentDocument;\n}\n","export const getElementorConfig = () => {\n\treturn window.elementor?.config ?? {};\n};\n\nexport const getElementorFrontendConfig = () => {\n\treturn window.elementorFrontend?.config ?? {};\n};\n","export type EnqueueFont = ( fontFamily: string, context?: 'preview' | 'editor' ) => void;\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\treturn window.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n"],"mappings":"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","names":["isRouteActive","import_utils","import_utils"]}
|
package/dist/index.mjs
CHANGED
|
@@ -320,20 +320,21 @@ function undoable(actions, options) {
|
|
|
320
320
|
return (payload) => {
|
|
321
321
|
const _payload = payload;
|
|
322
322
|
const _actions = actions;
|
|
323
|
-
let
|
|
323
|
+
let doReturn = _actions.do(_payload);
|
|
324
|
+
let undoReturn;
|
|
324
325
|
_addHistoryItem({
|
|
325
|
-
title: normalizeToGenerator(options.title)(_payload,
|
|
326
|
-
subTitle: normalizeToGenerator(options.subtitle)(_payload,
|
|
326
|
+
title: normalizeToGenerator(options.title)(_payload, doReturn),
|
|
327
|
+
subTitle: normalizeToGenerator(options.subtitle)(_payload, doReturn),
|
|
327
328
|
type: "",
|
|
328
329
|
restore: (_, isRedo) => {
|
|
329
330
|
if (isRedo) {
|
|
330
|
-
|
|
331
|
+
doReturn = _actions.redo(_payload, doReturn, undoReturn);
|
|
331
332
|
return;
|
|
332
333
|
}
|
|
333
|
-
_actions.undo(_payload,
|
|
334
|
+
undoReturn = _actions.undo(_payload, doReturn);
|
|
334
335
|
}
|
|
335
336
|
});
|
|
336
|
-
return
|
|
337
|
+
return doReturn;
|
|
337
338
|
};
|
|
338
339
|
}
|
|
339
340
|
function normalizeToGenerator(value) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/listeners/event-creators.ts","../src/listeners/is-ready.ts","../src/listeners/utils.ts","../src/listeners/listeners.ts","../src/readers/index.ts","../src/hooks/use-listen-to.ts","../src/hooks/use-is-route-active.ts","../src/edit-mode.ts","../src/hooks/use-route-status.ts","../src/ajax/index.ts","../src/undoable/undoable.ts","../src/undoable/get-history-manager.ts","../src/data-hooks/register-data-hook.ts","../src/data-hooks/block-command.ts","../src/canvas/get-canvas-iframe-document.ts","../src/config/get-elementor-globals.ts","../src/config/enqueue-font.ts"],"sourcesContent":["import { type jQueryDeferred } from './types';\n\nexport function isJQueryDeferred< T >( value: unknown ): value is jQueryDeferred< T > {\n\t// TODO: Copied from:\n\t// https://github.com/elementor/elementor/blob/6a74fc9/modules/web-cli/assets/js/core/commands.js#L410\n\n\treturn (\n\t\t!! value &&\n\t\t'object' === typeof value &&\n\t\tObject.hasOwn( value, 'promise' ) &&\n\t\tObject.hasOwn( value, 'then' ) &&\n\t\tObject.hasOwn( value, 'fail' )\n\t);\n}\n\nexport function promisifyJQueryDeferred< T >( deferred: jQueryDeferred< T > ): Promise< T > {\n\treturn new Promise( ( resolve, reject ) => {\n\t\tdeferred.then( resolve, reject );\n\t} );\n}\n","import { type ExtendedWindow } from './types';\nimport { isJQueryDeferred, promisifyJQueryDeferred } from './utils';\n\ntype RunCommandOptions = {\n\tinternal?: boolean;\n};\n\nexport async function runCommand( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst result = runCommandSync( command, args, { internal } );\n\n\tif ( result instanceof Promise ) {\n\t\treturn result;\n\t}\n\n\tif ( isJQueryDeferred( result ) ) {\n\t\treturn promisifyJQueryDeferred( result );\n\t}\n\n\treturn Promise.resolve( result );\n}\n\nexport function runCommandSync< T >( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tconst run = internal ? extendedWindow.$e?.internal : extendedWindow.$e?.run;\n\n\tif ( ! run ) {\n\t\tconst runnerName = internal ? '$e.internal' : '$e.run';\n\n\t\tthrow new Error( `\\`${ runnerName }()\\` is not available` );\n\t}\n\n\treturn run( command, args ) as T;\n}\n\nexport function openRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.route ) {\n\t\treturn Promise.reject( '`$e.route()` is not available' );\n\t}\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.route( route ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n\nexport function registerRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.routes?.register ) {\n\t\treturn Promise.reject( '`$e.routes.register()` is not available' );\n\t}\n\n\tconst routeParts = route.split( '/' );\n\n\tif ( routeParts.length < 2 ) {\n\t\treturn Promise.reject( `\\`${ route }\\` is an invalid route` );\n\t}\n\n\tconst componentRoute = routeParts.pop() as string; // routeParts.length must be >= 2\n\tconst component = routeParts.join( '/' );\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.routes.register( component, componentRoute, () => null ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n","import { type CommandEventDescriptor, type RouteEventDescriptor, type WindowEventDescriptor } from './types';\n\nexport const commandStartEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'before',\n\t};\n};\n\nexport const commandEndEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'after',\n\t};\n};\n\nexport const routeOpenEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'open',\n\t};\n};\n\nexport const routeCloseEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'close',\n\t};\n};\n\nexport const windowEvent = ( event: WindowEventDescriptor[ 'name' ] ): WindowEventDescriptor => {\n\treturn {\n\t\ttype: 'window-event',\n\t\tname: event,\n\t};\n};\n\nexport const v1ReadyEvent = () => {\n\treturn windowEvent( 'elementor/initialized' );\n};\n","/**\n * This file is used to store the state of the isReady variable, which is used to determine\n * if the adapter is ready to receive events (editor v1 and v2 are loaded).\n */\n\nlet ready = false;\n\nexport function isReady() {\n\treturn ready;\n}\n\nexport function setReady( value: boolean ) {\n\tready = value;\n}\n","import { setReady } from './is-ready';\nimport { type ExtendedWindow, type ListenerEvent } from './types';\n\nexport function dispatchReadyEvent() {\n\treturn getV1LoadingPromise().then( () => {\n\t\tsetReady( true );\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/initialized' ) );\n\t} );\n}\n\nfunction getV1LoadingPromise() {\n\tconst v1LoadingPromise = ( window as unknown as ExtendedWindow ).__elementorEditorV1LoadingPromise;\n\n\tif ( ! v1LoadingPromise ) {\n\t\treturn Promise.reject( 'Elementor Editor V1 is not loaded' );\n\t}\n\n\treturn v1LoadingPromise;\n}\n\nexport function normalizeEvent( e: ListenerEvent[ 'originalEvent' ] ): ListenerEvent {\n\tif ( e instanceof CustomEvent && e.detail?.command ) {\n\t\treturn {\n\t\t\ttype: 'command',\n\t\t\tcommand: e.detail.command,\n\t\t\targs: e.detail.args,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\tif ( e instanceof CustomEvent && e.detail?.route ) {\n\t\treturn {\n\t\t\ttype: 'route',\n\t\t\troute: e.detail.route,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'window-event',\n\t\tevent: e.type,\n\t\toriginalEvent: e,\n\t};\n}\n","import { isReady, setReady } from './is-ready';\nimport {\n\ttype CommandEventDescriptor,\n\ttype EventDescriptor,\n\ttype ListenerCallback,\n\ttype RouteEventDescriptor,\n\ttype WindowEventDescriptor,\n} from './types';\nimport { normalizeEvent } from './utils';\n\nconst callbacksByEvent = new Map< EventDescriptor[ 'name' ], ListenerCallback[] >();\nlet abortController = new AbortController();\n\nexport function listenTo( eventDescriptors: EventDescriptor | EventDescriptor[], callback: ListenerCallback ) {\n\tif ( ! Array.isArray( eventDescriptors ) ) {\n\t\teventDescriptors = [ eventDescriptors ];\n\t}\n\n\t// @see https://github.com/typescript-eslint/typescript-eslint/issues/2841\n\t// eslint-disable-next-line array-callback-return -- Clashes with typescript.\n\tconst cleanups = eventDescriptors.map( ( event ) => {\n\t\tconst { type, name } = event;\n\n\t\tswitch ( type ) {\n\t\t\tcase 'command':\n\t\t\t\treturn registerCommandListener( name, event.state, callback );\n\n\t\t\tcase 'route':\n\t\t\t\treturn registerRouteListener( name, event.state, callback );\n\n\t\t\tcase 'window-event':\n\t\t\t\treturn registerWindowEventListener( name, callback );\n\t\t}\n\t} );\n\n\treturn () => {\n\t\tcleanups.forEach( ( cleanup ) => cleanup() );\n\t};\n}\n\nexport function flushListeners() {\n\tabortController.abort();\n\tcallbacksByEvent.clear();\n\tsetReady( false );\n\n\tabortController = new AbortController();\n}\n\nfunction registerCommandListener(\n\tcommand: CommandEventDescriptor[ 'name' ],\n\tstate: CommandEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/commands/run/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'command' && e.command === command;\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerRouteListener(\n\troute: RouteEventDescriptor[ 'name' ],\n\tstate: RouteEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/routes/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'route' && e.route.startsWith( route );\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerWindowEventListener( event: WindowEventDescriptor[ 'name' ], callback: ListenerCallback ) {\n\tconst isFirstListener = ! callbacksByEvent.has( event );\n\n\tif ( isFirstListener ) {\n\t\tcallbacksByEvent.set( event, [] );\n\n\t\taddListener( event );\n\t}\n\n\tcallbacksByEvent.get( event )?.push( callback );\n\n\treturn () => {\n\t\tconst callbacks = callbacksByEvent.get( event );\n\n\t\tif ( ! callbacks?.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst filtered = callbacks.filter( ( cb ) => cb !== callback );\n\n\t\tcallbacksByEvent.set( event, filtered );\n\t};\n}\n\nfunction addListener( event: EventDescriptor[ 'name' ] ) {\n\twindow.addEventListener( event, makeEventHandler( event ), { signal: abortController.signal } );\n}\n\nfunction makeEventHandler( event: EventDescriptor[ 'name' ] ): EventListener {\n\treturn ( e ) => {\n\t\tif ( ! isReady() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedEvent = normalizeEvent( e );\n\n\t\tcallbacksByEvent.get( event )?.forEach( ( callback ) => {\n\t\t\tcallback( normalizedEvent );\n\t\t} );\n\t};\n}\n","import { type ExtendedWindow } from './types';\n\nexport const EXPERIMENTAL_FEATURES = {\n\t// Note: Add new experimental features here as needed\n};\n\nexport function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport const isExperimentActive = ( experiment: keyof typeof EXPERIMENTAL_FEATURES | string ) => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.elementorCommon?.config?.experimentalFeatures?.[ experiment ];\n};\n","import { useEffect, useState } from 'react';\n\nimport { type EventDescriptor, listenTo } from '../listeners';\n\nexport default function useListenTo< T >(\n\tevent: EventDescriptor | EventDescriptor[],\n\tgetSnapshot: () => T,\n\tdeps: unknown[] = []\n) {\n\tconst [ snapshot, setSnapshot ] = useState( () => getSnapshot() );\n\n\tuseEffect( () => {\n\t\tconst updateState = () => setSnapshot( getSnapshot() );\n\n\t\t// Ensure the state is re-calculated when the dependencies have been changed.\n\t\tupdateState();\n\n\t\treturn listenTo( event, updateState );\n\t}, deps ); // eslint-disable-line react-hooks/exhaustive-deps\n\n\treturn snapshot;\n}\n","import { routeCloseEvent, type RouteEventDescriptor, routeOpenEvent } from '../listeners';\nimport { isRouteActive } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsRouteActive( route: RouteEventDescriptor[ 'name' ] ) {\n\treturn useListenTo( [ routeOpenEvent( route ), routeCloseEvent( route ) ], () => isRouteActive( route ), [\n\t\troute,\n\t] );\n}\n","import useListenTo from './hooks/use-listen-to';\nimport { windowEvent } from './listeners';\n\nexport type EditMode = 'edit' | 'preview' | 'picker' | ( string & {} );\n\nexport type ExtendedWindow = Window & {\n\telementor: {\n\t\tchangeEditMode: ( newMode: EditMode ) => void;\n\t\tchannels: {\n\t\t\tdataEditMode: {\n\t\t\t\trequest: ( key: 'activeMode' ) => EditMode;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport function useEditMode() {\n\treturn useListenTo( windowEvent( 'elementor/edit-mode/change' ), getCurrentEditMode );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.channels.dataEditMode.request( 'activeMode' );\n}\n\nexport function changeEditMode( newMode: EditMode ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.changeEditMode( newMode );\n}\n","import { type EditMode, useEditMode } from '../edit-mode';\nimport { type RouteEventDescriptor } from '../listeners';\nimport useIsRouteActive from './use-is-route-active';\n\nexport type UseRouteStatusOptions = {\n\tblockOnKitRoutes?: boolean;\n\tallowedEditModes?: EditMode[];\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, allowedEditModes = [ 'edit' ] }: UseRouteStatusOptions = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst currentEditMode = useEditMode();\n\n\tconst isBlockedByEditMode = ! allowedEditModes.includes( currentEditMode );\n\n\tconst isBlockedByKit = blockOnKitRoutes && isKitRouteActive;\n\n\tconst isActive = isRouteActive && ! isBlockedByEditMode;\n\n\tconst isBlocked = isBlockedByEditMode || isBlockedByKit;\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\n}\n","import { type ExtendedWindow, type RequestParams } from './types';\n\nexport const ajax = {\n\tasync load< TRequestData = object, TResponseData = object >(\n\t\tdata: RequestParams< TRequestData >\n\t): Promise< TResponseData > {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\treturn new Promise( ( success, error ) => {\n\t\t\textendedWindow.elementorCommon?.ajax?.load< TRequestData, TResponseData >( {\n\t\t\t\t...data,\n\t\t\t\tsuccess,\n\t\t\t\terror,\n\t\t\t} );\n\t\t} );\n\t},\n\tinvalidateCache< TData = object >( data: RequestParams< TData > ) {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\textendedWindow.elementorCommon?.ajax?.invalidateCache< TData >( data );\n\t},\n};\n","import { debounce } from '@elementor/utils';\n\nimport { getHistoryManager, type HistoryItem } from './get-history-manager';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Payload = Record< string, any > | undefined;\n\ntype LabelGenerator< TPayload extends Payload, TDoReturn > = ( payload: TPayload, doReturn: TDoReturn ) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => Awaited< TDoReturn >;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => Awaited< TUndoReturn >;\n\tredo?: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => Awaited< TDoReturn >;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n\tdebounce?: { wait: number };\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, NoInfer< TDoReturn > >\n): () => TDoReturn;\n\n// Action WITH a payload.\nexport function undoable< TPayload extends NonNullable< Payload >, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload: TPayload ) => TDoReturn;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload?: Payload ) => TDoReturn {\n\tactions.redo ??= actions.do;\n\n\tconst _addHistoryItem = options.debounce ? debounce( addHistoryItem, options.debounce.wait ) : addHistoryItem;\n\n\treturn ( payload ) => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tlet result = _actions.do( _payload );\n\n\t\t_addHistoryItem( {\n\t\t\ttitle: normalizeToGenerator( options.title )( _payload, result ),\n\t\t\tsubTitle: normalizeToGenerator( options.subtitle )( _payload, result ),\n\t\t\ttype: '',\n\t\t\trestore: ( _, isRedo ) => {\n\t\t\t\tif ( isRedo ) {\n\t\t\t\t\tresult = _actions.redo( _payload, result );\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_actions.undo( _payload, result );\n\t\t\t},\n\t\t} );\n\n\t\treturn result;\n\t};\n}\n\nfunction normalizeToGenerator< TPayload extends Payload, TDoReturn >(\n\tvalue: string | undefined | LabelGenerator< TPayload, TDoReturn >\n) {\n\treturn typeof value === 'function' ? value : () => value ?? '';\n}\n\nfunction addHistoryItem( item: HistoryItem ) {\n\tconst history = getHistoryManager();\n\thistory.addItem( item );\n}\n","import { createError } from '@elementor/utils';\n\nexport type HistoryItem = {\n\ttitle: string;\n\tsubTitle: string;\n\ttype: string;\n\trestore: ( item: HistoryItem, isRedo: boolean ) => void;\n};\n\ntype AddHistoryItem = ( item: HistoryItem ) => void;\n\nexport type WindowWithHistoryManager = Window & {\n\telementor?: {\n\t\tdocuments?: {\n\t\t\tgetCurrent?: () => {\n\t\t\t\thistory?: {\n\t\t\t\t\taddItem: AddHistoryItem;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\n\nconst HistoryManagerNotAvailable = createError( {\n\tcode: 'history_manager_not_available',\n\tmessage: 'Cannot access History manager.',\n} );\n\nexport function getHistoryManager() {\n\tconst extendedWindow = window as unknown as WindowWithHistoryManager;\n\n\tconst historyManger = extendedWindow.elementor?.documents?.getCurrent?.()?.history;\n\n\tif ( ! historyManger ) {\n\t\tthrow new HistoryManagerNotAvailable();\n\t}\n\n\treturn historyManger;\n}\n","export type WindowWithDataHooks = Window & {\n\t$e: {\n\t\tmodules?: {\n\t\t\thookData?: {\n\t\t\t\t[ K in keyof HooksMap as Capitalize< K > ]: HooksMap[ K ];\n\t\t\t};\n\t\t};\n\t\tcommands?: {\n\t\t\tcurrentTrace?: string[];\n\t\t};\n\t};\n};\n\ntype HooksMap = Record< HookType, typeof DataHook | undefined >;\n\ntype HookType = 'after' | 'dependency';\n\nexport type Args = Record< string, unknown >;\n\nexport type HookOptions = {\n\tcommandsCurrentTrace?: string[];\n};\n\nexport type AfterHookCallback< TArgs extends Args = Args, TResult = unknown > = (\n\targs: TArgs,\n\tresult: TResult,\n\toptions?: HookOptions\n) => void | Promise< void >;\n\nexport type DependencyHookCallback< TArgs extends Args = Args > = ( args: TArgs, options?: HookOptions ) => boolean;\n\nexport declare class DataHook< TArgs extends Args = Args, TResult = unknown > {\n\tgetCommand(): string;\n\tgetId(): string;\n\tapply( args: TArgs, result?: TResult ): unknown;\n\tregister(): void;\n}\n\nlet hookId = 0;\n\nexport function registerDataHook< TArgs extends Args = Args >(\n\ttype: 'dependency',\n\tcommand: string,\n\tcallback: DependencyHookCallback< TArgs >\n): DataHook< TArgs >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: 'after',\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult >\n): DataHook< TArgs, TResult >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: HookType,\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult > | DependencyHookCallback< TArgs >\n): DataHook< TArgs, TResult > {\n\tconst eWindow = window as unknown as WindowWithDataHooks;\n\tconst hooksClasses = eWindow.$e?.modules?.hookData;\n\n\tconst hooksMap = {\n\t\tafter: hooksClasses?.After,\n\t\tdependency: hooksClasses?.Dependency,\n\t} satisfies HooksMap;\n\n\tconst HookClass = hooksMap[ type ];\n\n\tif ( ! HookClass ) {\n\t\tthrow new Error( `Data hook '${ type }' is not available` );\n\t}\n\n\tconst currentHookId = ++hookId;\n\n\tconst hook = new ( class extends HookClass< TArgs, TResult > {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--data--${ currentHookId }`;\n\t\t}\n\n\t\tapply( args: TArgs, result?: TResult ) {\n\t\t\tconst hookOptions: HookOptions = {};\n\n\t\t\tconst currentWindow = window as unknown as WindowWithDataHooks;\n\t\t\tconst commandsCurrentTrace = currentWindow.$e?.commands?.currentTrace;\n\t\t\tif ( commandsCurrentTrace ) {\n\t\t\t\thookOptions.commandsCurrentTrace = commandsCurrentTrace;\n\t\t\t}\n\n\t\t\tif ( type === 'dependency' ) {\n\t\t\t\treturn ( callback as DependencyHookCallback< TArgs > )( args, hookOptions );\n\t\t\t}\n\n\t\t\treturn ( callback as AfterHookCallback< TArgs, TResult > )( args, result as TResult, hookOptions );\n\t\t}\n\t} )();\n\n\thook.register();\n\n\treturn hook;\n}\n","import { type Args, registerDataHook } from './register-data-hook';\n\ntype BlockCommandArgs = {\n\tcommand: string;\n\tcondition: ( args: Args ) => boolean;\n};\n\nexport function blockCommand( { command, condition }: BlockCommandArgs ) {\n\treturn registerDataHook( 'dependency', command, ( args ) => {\n\t\tconst shouldBlock = condition( args );\n\n\t\t// Should return `false` to prevent the command from running.\n\t\treturn ! shouldBlock;\n\t} );\n}\n","export function getCanvasIframeDocument() {\n\treturn window.elementor?.$preview?.[ 0 ]?.contentDocument;\n}\n","export const getElementorConfig = () => {\n\treturn window.elementor?.config ?? {};\n};\n\nexport const getElementorFrontendConfig = () => {\n\treturn window.elementorFrontend?.config ?? {};\n};\n","export type EnqueueFont = ( fontFamily: string, context?: 'preview' | 'editor' ) => void;\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\treturn window.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n"],"mappings":";AAEO,SAAS,iBAAuB,OAA+C;AAIrF,SACC,CAAC,CAAE,SACH,aAAa,OAAO,SACpB,OAAO,OAAQ,OAAO,SAAU,KAChC,OAAO,OAAQ,OAAO,MAAO,KAC7B,OAAO,OAAQ,OAAO,MAAO;AAE/B;AAEO,SAAS,wBAA8B,UAA8C;AAC3F,SAAO,IAAI,QAAS,CAAE,SAAS,WAAY;AAC1C,aAAS,KAAM,SAAS,MAAO;AAAA,EAChC,CAAE;AACH;;;ACZA,eAAsB,WAAY,SAAiB,MAAe,EAAE,WAAW,MAAM,IAAuB,CAAC,GAAI;AAChH,QAAM,SAAS,eAAgB,SAAS,MAAM,EAAE,SAAS,CAAE;AAE3D,MAAK,kBAAkB,SAAU;AAChC,WAAO;AAAA,EACR;AAEA,MAAK,iBAAkB,MAAO,GAAI;AACjC,WAAO,wBAAyB,MAAO;AAAA,EACxC;AAEA,SAAO,QAAQ,QAAS,MAAO;AAChC;AAEO,SAAS,eAAqB,SAAiB,MAAe,EAAE,WAAW,MAAM,IAAuB,CAAC,GAAI;AACnH,QAAM,iBAAiB;AAEvB,QAAM,MAAM,WAAW,eAAe,IAAI,WAAW,eAAe,IAAI;AAExE,MAAK,CAAE,KAAM;AACZ,UAAM,aAAa,WAAW,gBAAgB;AAE9C,UAAM,IAAI,MAAO,KAAM,UAAW,uBAAwB;AAAA,EAC3D;AAEA,SAAO,IAAK,SAAS,IAAK;AAC3B;AAEO,SAAS,UAAW,OAAgB;AAC1C,QAAM,iBAAiB;AAEvB,MAAK,CAAE,eAAe,IAAI,OAAQ;AACjC,WAAO,QAAQ,OAAQ,+BAAgC;AAAA,EACxD;AAEA,MAAI;AACH,WAAO,QAAQ,QAAS,eAAe,GAAG,MAAO,KAAM,CAAE;AAAA,EAC1D,SAAU,GAAI;AACb,WAAO,QAAQ,OAAQ,CAAE;AAAA,EAC1B;AACD;AAEO,SAAS,cAAe,OAAgB;AAC9C,QAAM,iBAAiB;AAEvB,MAAK,CAAE,eAAe,IAAI,QAAQ,UAAW;AAC5C,WAAO,QAAQ,OAAQ,yCAA0C;AAAA,EAClE;AAEA,QAAM,aAAa,MAAM,MAAO,GAAI;AAEpC,MAAK,WAAW,SAAS,GAAI;AAC5B,WAAO,QAAQ,OAAQ,KAAM,KAAM,wBAAyB;AAAA,EAC7D;AAEA,QAAM,iBAAiB,WAAW,IAAI;AACtC,QAAM,YAAY,WAAW,KAAM,GAAI;AAEvC,MAAI;AACH,WAAO,QAAQ,QAAS,eAAe,GAAG,OAAO,SAAU,WAAW,gBAAgB,MAAM,IAAK,CAAE;AAAA,EACpG,SAAU,GAAI;AACb,WAAO,QAAQ,OAAQ,CAAE;AAAA,EAC1B;AACD;;;ACpEO,IAAM,oBAAoB,CAAE,YAAuE;AACzG,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACR;AACD;AAEO,IAAM,kBAAkB,CAAE,YAAuE;AACvG,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACR;AACD;AAEO,IAAM,iBAAiB,CAAE,UAAiE;AAChG,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACR;AACD;AAEO,IAAM,kBAAkB,CAAE,UAAiE;AACjG,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACR;AACD;AAEO,IAAM,cAAc,CAAE,UAAmE;AAC/F,SAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACP;AACD;AAEO,IAAM,eAAe,MAAM;AACjC,SAAO,YAAa,uBAAwB;AAC7C;;;ACtCA,IAAI,QAAQ;AAEL,SAAS,UAAU;AACzB,SAAO;AACR;AAEO,SAAS,SAAU,OAAiB;AAC1C,UAAQ;AACT;;;ACVO,SAAS,qBAAqB;AACpC,SAAO,oBAAoB,EAAE,KAAM,MAAM;AACxC,aAAU,IAAK;AACf,WAAO,cAAe,IAAI,YAAa,uBAAwB,CAAE;AAAA,EAClE,CAAE;AACH;AAEA,SAAS,sBAAsB;AAC9B,QAAM,mBAAqB,OAAsC;AAEjE,MAAK,CAAE,kBAAmB;AACzB,WAAO,QAAQ,OAAQ,mCAAoC;AAAA,EAC5D;AAEA,SAAO;AACR;AAEO,SAAS,eAAgB,GAAqD;AACpF,MAAK,aAAa,eAAe,EAAE,QAAQ,SAAU;AACpD,WAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS,EAAE,OAAO;AAAA,MAClB,MAAM,EAAE,OAAO;AAAA,MACf,eAAe;AAAA,IAChB;AAAA,EACD;AAEA,MAAK,aAAa,eAAe,EAAE,QAAQ,OAAQ;AAClD,WAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,EAAE,OAAO;AAAA,MAChB,eAAe;AAAA,IAChB;AAAA,EACD;AAEA,SAAO;AAAA,IACN,MAAM;AAAA,IACN,OAAO,EAAE;AAAA,IACT,eAAe;AAAA,EAChB;AACD;;;ACjCA,IAAM,mBAAmB,oBAAI,IAAqD;AAClF,IAAI,kBAAkB,IAAI,gBAAgB;AAEnC,SAAS,SAAU,kBAAuD,UAA6B;AAC7G,MAAK,CAAE,MAAM,QAAS,gBAAiB,GAAI;AAC1C,uBAAmB,CAAE,gBAAiB;AAAA,EACvC;AAIA,QAAM,WAAW,iBAAiB,IAAK,CAAE,UAAW;AACnD,UAAM,EAAE,MAAM,KAAK,IAAI;AAEvB,YAAS,MAAO;AAAA,MACf,KAAK;AACJ,eAAO,wBAAyB,MAAM,MAAM,OAAO,QAAS;AAAA,MAE7D,KAAK;AACJ,eAAO,sBAAuB,MAAM,MAAM,OAAO,QAAS;AAAA,MAE3D,KAAK;AACJ,eAAO,4BAA6B,MAAM,QAAS;AAAA,IACrD;AAAA,EACD,CAAE;AAEF,SAAO,MAAM;AACZ,aAAS,QAAS,CAAE,YAAa,QAAQ,CAAE;AAAA,EAC5C;AACD;AAEO,SAAS,iBAAiB;AAChC,kBAAgB,MAAM;AACtB,mBAAiB,MAAM;AACvB,WAAU,KAAM;AAEhB,oBAAkB,IAAI,gBAAgB;AACvC;AAEA,SAAS,wBACR,SACA,OACA,UACC;AACD,SAAO,4BAA6B,0BAA2B,KAAM,IAAI,CAAE,MAAO;AACjF,UAAM,oBAAoB,EAAE,SAAS,aAAa,EAAE,YAAY;AAEhE,QAAK,mBAAoB;AACxB,eAAU,CAAE;AAAA,IACb;AAAA,EACD,CAAE;AACH;AAEA,SAAS,sBACR,OACA,OACA,UACC;AACD,SAAO,4BAA6B,oBAAqB,KAAM,IAAI,CAAE,MAAO;AAC3E,UAAM,oBAAoB,EAAE,SAAS,WAAW,EAAE,MAAM,WAAY,KAAM;AAE1E,QAAK,mBAAoB;AACxB,eAAU,CAAE;AAAA,IACb;AAAA,EACD,CAAE;AACH;AAEA,SAAS,4BAA6B,OAAwC,UAA6B;AAC1G,QAAM,kBAAkB,CAAE,iBAAiB,IAAK,KAAM;AAEtD,MAAK,iBAAkB;AACtB,qBAAiB,IAAK,OAAO,CAAC,CAAE;AAEhC,gBAAa,KAAM;AAAA,EACpB;AAEA,mBAAiB,IAAK,KAAM,GAAG,KAAM,QAAS;AAE9C,SAAO,MAAM;AACZ,UAAM,YAAY,iBAAiB,IAAK,KAAM;AAE9C,QAAK,CAAE,WAAW,QAAS;AAC1B;AAAA,IACD;AAEA,UAAM,WAAW,UAAU,OAAQ,CAAE,OAAQ,OAAO,QAAS;AAE7D,qBAAiB,IAAK,OAAO,QAAS;AAAA,EACvC;AACD;AAEA,SAAS,YAAa,OAAmC;AACxD,SAAO,iBAAkB,OAAO,iBAAkB,KAAM,GAAG,EAAE,QAAQ,gBAAgB,OAAO,CAAE;AAC/F;AAEA,SAAS,iBAAkB,OAAkD;AAC5E,SAAO,CAAE,MAAO;AACf,QAAK,CAAE,QAAQ,GAAI;AAClB;AAAA,IACD;AAEA,UAAM,kBAAkB,eAAgB,CAAE;AAE1C,qBAAiB,IAAK,KAAM,GAAG,QAAS,CAAE,aAAc;AACvD,eAAU,eAAgB;AAAA,IAC3B,CAAE;AAAA,EACH;AACD;;;AClHO,IAAM,wBAAwB;AAAA;AAErC;AAEO,SAAS,cAAe,OAAgB;AAC9C,QAAM,iBAAiB;AAEvB,SAAO,CAAC,CAAE,eAAe,IAAI,QAAQ,SAAU,KAAM;AACtD;AAEO,IAAM,qBAAqB,CAAE,eAA6D;AAChG,QAAM,iBAAiB;AAEvB,SAAO,CAAC,CAAE,eAAe,iBAAiB,QAAQ,uBAAwB,UAAW;AACtF;;;AChBA,SAAS,WAAW,gBAAgB;AAIrB,SAAR,YACN,OACA,aACA,OAAkB,CAAC,GAClB;AACD,QAAM,CAAE,UAAU,WAAY,IAAI,SAAU,MAAM,YAAY,CAAE;AAEhE,YAAW,MAAM;AAChB,UAAM,cAAc,MAAM,YAAa,YAAY,CAAE;AAGrD,gBAAY;AAEZ,WAAO,SAAU,OAAO,WAAY;AAAA,EACrC,GAAG,IAAK;AAER,SAAO;AACR;;;ACjBe,SAAR,iBAAmC,OAAwC;AACjF,SAAO,YAAa,CAAE,eAAgB,KAAM,GAAG,gBAAiB,KAAM,CAAE,GAAG,MAAM,cAAe,KAAM,GAAG;AAAA,IACxG;AAAA,EACD,CAAE;AACH;;;ACQO,SAAS,cAAc;AAC7B,SAAO,YAAa,YAAa,4BAA6B,GAAG,kBAAmB;AACrF;AAEO,SAAS,qBAAqB;AACpC,QAAM,iBAAiB;AAEvB,SAAO,eAAe,UAAU,SAAS,aAAa,QAAS,YAAa;AAC7E;AAEO,SAAS,eAAgB,SAAoB;AACnD,QAAM,iBAAiB;AAEvB,SAAO,eAAe,UAAU,eAAgB,OAAQ;AACzD;;;ACrBe,SAAR,eACN,OACA,EAAE,mBAAmB,MAAM,mBAAmB,CAAE,MAAO,EAAE,IAA2B,CAAC,GACpF;AACD,QAAMA,iBAAgB,iBAAkB,KAAM;AAC9C,QAAM,mBAAmB,iBAAkB,cAAe;AAC1D,QAAM,kBAAkB,YAAY;AAEpC,QAAM,sBAAsB,CAAE,iBAAiB,SAAU,eAAgB;AAEzE,QAAM,iBAAiB,oBAAoB;AAE3C,QAAM,WAAWA,kBAAiB,CAAE;AAEpC,QAAM,YAAY,uBAAuB;AAEzC,SAAO;AAAA,IACN;AAAA,IACA;AAAA,EACD;AACD;;;AC3BO,IAAM,OAAO;AAAA,EACnB,MAAM,KACL,MAC2B;AAC3B,UAAM,iBAAiB;AAEvB,WAAO,IAAI,QAAS,CAAE,SAAS,UAAW;AACzC,qBAAe,iBAAiB,MAAM,KAAqC;AAAA,QAC1E,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACD,CAAE;AAAA,IACH,CAAE;AAAA,EACH;AAAA,EACA,gBAAmC,MAA+B;AACjE,UAAM,iBAAiB;AAEvB,mBAAe,iBAAiB,MAAM,gBAA0B,IAAK;AAAA,EACtE;AACD;;;ACrBA,SAAS,gBAAgB;;;ACAzB,SAAS,mBAAmB;AAuB5B,IAAM,6BAA6B,YAAa;AAAA,EAC/C,MAAM;AAAA,EACN,SAAS;AACV,CAAE;AAEK,SAAS,oBAAoB;AACnC,QAAM,iBAAiB;AAEvB,QAAM,gBAAgB,eAAe,WAAW,WAAW,aAAa,GAAG;AAE3E,MAAK,CAAE,eAAgB;AACtB,UAAM,IAAI,2BAA2B;AAAA,EACtC;AAEA,SAAO;AACR;;;ADLO,SAAS,SACf,SACA,SACqC;AACrC,UAAQ,SAAS,QAAQ;AAEzB,QAAM,kBAAkB,QAAQ,WAAW,SAAU,gBAAgB,QAAQ,SAAS,IAAK,IAAI;AAE/F,SAAO,CAAE,YAAa;AACrB,UAAM,WAAW;AACjB,UAAM,WAAW;AAEjB,QAAI,SAAS,SAAS,GAAI,QAAS;AAEnC,oBAAiB;AAAA,MAChB,OAAO,qBAAsB,QAAQ,KAAM,EAAG,UAAU,MAAO;AAAA,MAC/D,UAAU,qBAAsB,QAAQ,QAAS,EAAG,UAAU,MAAO;AAAA,MACrE,MAAM;AAAA,MACN,SAAS,CAAE,GAAG,WAAY;AACzB,YAAK,QAAS;AACb,mBAAS,SAAS,KAAM,UAAU,MAAO;AAEzC;AAAA,QACD;AAEA,iBAAS,KAAM,UAAU,MAAO;AAAA,MACjC;AAAA,IACD,CAAE;AAEF,WAAO;AAAA,EACR;AACD;AAEA,SAAS,qBACR,OACC;AACD,SAAO,OAAO,UAAU,aAAa,QAAQ,MAAM,SAAS;AAC7D;AAEA,SAAS,eAAgB,MAAoB;AAC5C,QAAM,UAAU,kBAAkB;AAClC,UAAQ,QAAS,IAAK;AACvB;;;AErCA,IAAI,SAAS;AAcN,SAAS,iBACf,MACA,SACA,UAC6B;AAC7B,QAAM,UAAU;AAChB,QAAM,eAAe,QAAQ,IAAI,SAAS;AAE1C,QAAM,WAAW;AAAA,IAChB,OAAO,cAAc;AAAA,IACrB,YAAY,cAAc;AAAA,EAC3B;AAEA,QAAM,YAAY,SAAU,IAAK;AAEjC,MAAK,CAAE,WAAY;AAClB,UAAM,IAAI,MAAO,cAAe,IAAK,oBAAqB;AAAA,EAC3D;AAEA,QAAM,gBAAgB,EAAE;AAExB,QAAM,OAAO,IAAM,cAAc,UAA4B;AAAA,IAC5D,aAAa;AACZ,aAAO;AAAA,IACR;AAAA,IAEA,QAAQ;AACP,aAAO,GAAI,OAAQ,WAAY,aAAc;AAAA,IAC9C;AAAA,IAEA,MAAO,MAAa,QAAmB;AACtC,YAAM,cAA2B,CAAC;AAElC,YAAM,gBAAgB;AACtB,YAAM,uBAAuB,cAAc,IAAI,UAAU;AACzD,UAAK,sBAAuB;AAC3B,oBAAY,uBAAuB;AAAA,MACpC;AAEA,UAAK,SAAS,cAAe;AAC5B,eAAS,SAA+C,MAAM,WAAY;AAAA,MAC3E;AAEA,aAAS,SAAmD,MAAM,QAAmB,WAAY;AAAA,IAClG;AAAA,EACD,EAAI;AAEJ,OAAK,SAAS;AAEd,SAAO;AACR;;;AC/FO,SAAS,aAAc,EAAE,SAAS,UAAU,GAAsB;AACxE,SAAO,iBAAkB,cAAc,SAAS,CAAE,SAAU;AAC3D,UAAM,cAAc,UAAW,IAAK;AAGpC,WAAO,CAAE;AAAA,EACV,CAAE;AACH;;;ACdO,SAAS,0BAA0B;AACzC,SAAO,OAAO,WAAW,WAAY,CAAE,GAAG;AAC3C;;;ACFO,IAAM,qBAAqB,MAAM;AACvC,SAAO,OAAO,WAAW,UAAU,CAAC;AACrC;AAEO,IAAM,6BAA6B,MAAM;AAC/C,SAAO,OAAO,mBAAmB,UAAU,CAAC;AAC7C;;;ACJO,IAAM,cAA2B,CAAE,YAAY,UAAU,cAAe;AAC9E,SAAO,OAAO,WAAW,SAAS,cAAe,YAAY,OAAQ,KAAK;AAC3E;","names":["isRouteActive"]}
|
|
1
|
+
{"version":3,"sources":["../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/listeners/event-creators.ts","../src/listeners/is-ready.ts","../src/listeners/utils.ts","../src/listeners/listeners.ts","../src/readers/index.ts","../src/hooks/use-listen-to.ts","../src/hooks/use-is-route-active.ts","../src/edit-mode.ts","../src/hooks/use-route-status.ts","../src/ajax/index.ts","../src/undoable/undoable.ts","../src/undoable/get-history-manager.ts","../src/data-hooks/register-data-hook.ts","../src/data-hooks/block-command.ts","../src/canvas/get-canvas-iframe-document.ts","../src/config/get-elementor-globals.ts","../src/config/enqueue-font.ts"],"sourcesContent":["import { type jQueryDeferred } from './types';\n\nexport function isJQueryDeferred< T >( value: unknown ): value is jQueryDeferred< T > {\n\t// TODO: Copied from:\n\t// https://github.com/elementor/elementor/blob/6a74fc9/modules/web-cli/assets/js/core/commands.js#L410\n\n\treturn (\n\t\t!! value &&\n\t\t'object' === typeof value &&\n\t\tObject.hasOwn( value, 'promise' ) &&\n\t\tObject.hasOwn( value, 'then' ) &&\n\t\tObject.hasOwn( value, 'fail' )\n\t);\n}\n\nexport function promisifyJQueryDeferred< T >( deferred: jQueryDeferred< T > ): Promise< T > {\n\treturn new Promise( ( resolve, reject ) => {\n\t\tdeferred.then( resolve, reject );\n\t} );\n}\n","import { type ExtendedWindow } from './types';\nimport { isJQueryDeferred, promisifyJQueryDeferred } from './utils';\n\ntype RunCommandOptions = {\n\tinternal?: boolean;\n};\n\nexport async function runCommand( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst result = runCommandSync( command, args, { internal } );\n\n\tif ( result instanceof Promise ) {\n\t\treturn result;\n\t}\n\n\tif ( isJQueryDeferred( result ) ) {\n\t\treturn promisifyJQueryDeferred( result );\n\t}\n\n\treturn Promise.resolve( result );\n}\n\nexport function runCommandSync< T >( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tconst run = internal ? extendedWindow.$e?.internal : extendedWindow.$e?.run;\n\n\tif ( ! run ) {\n\t\tconst runnerName = internal ? '$e.internal' : '$e.run';\n\n\t\tthrow new Error( `\\`${ runnerName }()\\` is not available` );\n\t}\n\n\treturn run( command, args ) as T;\n}\n\nexport function openRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.route ) {\n\t\treturn Promise.reject( '`$e.route()` is not available' );\n\t}\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.route( route ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n\nexport function registerRoute( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.routes?.register ) {\n\t\treturn Promise.reject( '`$e.routes.register()` is not available' );\n\t}\n\n\tconst routeParts = route.split( '/' );\n\n\tif ( routeParts.length < 2 ) {\n\t\treturn Promise.reject( `\\`${ route }\\` is an invalid route` );\n\t}\n\n\tconst componentRoute = routeParts.pop() as string; // routeParts.length must be >= 2\n\tconst component = routeParts.join( '/' );\n\n\ttry {\n\t\treturn Promise.resolve( extendedWindow.$e.routes.register( component, componentRoute, () => null ) );\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n}\n","import { type CommandEventDescriptor, type RouteEventDescriptor, type WindowEventDescriptor } from './types';\n\nexport const commandStartEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'before',\n\t};\n};\n\nexport const commandEndEvent = ( command: CommandEventDescriptor[ 'name' ] ): CommandEventDescriptor => {\n\treturn {\n\t\ttype: 'command',\n\t\tname: command,\n\t\tstate: 'after',\n\t};\n};\n\nexport const routeOpenEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'open',\n\t};\n};\n\nexport const routeCloseEvent = ( route: RouteEventDescriptor[ 'name' ] ): RouteEventDescriptor => {\n\treturn {\n\t\ttype: 'route',\n\t\tname: route,\n\t\tstate: 'close',\n\t};\n};\n\nexport const windowEvent = ( event: WindowEventDescriptor[ 'name' ] ): WindowEventDescriptor => {\n\treturn {\n\t\ttype: 'window-event',\n\t\tname: event,\n\t};\n};\n\nexport const v1ReadyEvent = () => {\n\treturn windowEvent( 'elementor/initialized' );\n};\n","/**\n * This file is used to store the state of the isReady variable, which is used to determine\n * if the adapter is ready to receive events (editor v1 and v2 are loaded).\n */\n\nlet ready = false;\n\nexport function isReady() {\n\treturn ready;\n}\n\nexport function setReady( value: boolean ) {\n\tready = value;\n}\n","import { setReady } from './is-ready';\nimport { type ExtendedWindow, type ListenerEvent } from './types';\n\nexport function dispatchReadyEvent() {\n\treturn getV1LoadingPromise().then( () => {\n\t\tsetReady( true );\n\t\twindow.dispatchEvent( new CustomEvent( 'elementor/initialized' ) );\n\t} );\n}\n\nfunction getV1LoadingPromise() {\n\tconst v1LoadingPromise = ( window as unknown as ExtendedWindow ).__elementorEditorV1LoadingPromise;\n\n\tif ( ! v1LoadingPromise ) {\n\t\treturn Promise.reject( 'Elementor Editor V1 is not loaded' );\n\t}\n\n\treturn v1LoadingPromise;\n}\n\nexport function normalizeEvent( e: ListenerEvent[ 'originalEvent' ] ): ListenerEvent {\n\tif ( e instanceof CustomEvent && e.detail?.command ) {\n\t\treturn {\n\t\t\ttype: 'command',\n\t\t\tcommand: e.detail.command,\n\t\t\targs: e.detail.args,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\tif ( e instanceof CustomEvent && e.detail?.route ) {\n\t\treturn {\n\t\t\ttype: 'route',\n\t\t\troute: e.detail.route,\n\t\t\toriginalEvent: e,\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: 'window-event',\n\t\tevent: e.type,\n\t\toriginalEvent: e,\n\t};\n}\n","import { isReady, setReady } from './is-ready';\nimport {\n\ttype CommandEventDescriptor,\n\ttype EventDescriptor,\n\ttype ListenerCallback,\n\ttype RouteEventDescriptor,\n\ttype WindowEventDescriptor,\n} from './types';\nimport { normalizeEvent } from './utils';\n\nconst callbacksByEvent = new Map< EventDescriptor[ 'name' ], ListenerCallback[] >();\nlet abortController = new AbortController();\n\nexport function listenTo( eventDescriptors: EventDescriptor | EventDescriptor[], callback: ListenerCallback ) {\n\tif ( ! Array.isArray( eventDescriptors ) ) {\n\t\teventDescriptors = [ eventDescriptors ];\n\t}\n\n\t// @see https://github.com/typescript-eslint/typescript-eslint/issues/2841\n\t// eslint-disable-next-line array-callback-return -- Clashes with typescript.\n\tconst cleanups = eventDescriptors.map( ( event ) => {\n\t\tconst { type, name } = event;\n\n\t\tswitch ( type ) {\n\t\t\tcase 'command':\n\t\t\t\treturn registerCommandListener( name, event.state, callback );\n\n\t\t\tcase 'route':\n\t\t\t\treturn registerRouteListener( name, event.state, callback );\n\n\t\t\tcase 'window-event':\n\t\t\t\treturn registerWindowEventListener( name, callback );\n\t\t}\n\t} );\n\n\treturn () => {\n\t\tcleanups.forEach( ( cleanup ) => cleanup() );\n\t};\n}\n\nexport function flushListeners() {\n\tabortController.abort();\n\tcallbacksByEvent.clear();\n\tsetReady( false );\n\n\tabortController = new AbortController();\n}\n\nfunction registerCommandListener(\n\tcommand: CommandEventDescriptor[ 'name' ],\n\tstate: CommandEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/commands/run/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'command' && e.command === command;\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerRouteListener(\n\troute: RouteEventDescriptor[ 'name' ],\n\tstate: RouteEventDescriptor[ 'state' ],\n\tcallback: ListenerCallback\n) {\n\treturn registerWindowEventListener( `elementor/routes/${ state }`, ( e ) => {\n\t\tconst shouldRunCallback = e.type === 'route' && e.route.startsWith( route );\n\n\t\tif ( shouldRunCallback ) {\n\t\t\tcallback( e );\n\t\t}\n\t} );\n}\n\nfunction registerWindowEventListener( event: WindowEventDescriptor[ 'name' ], callback: ListenerCallback ) {\n\tconst isFirstListener = ! callbacksByEvent.has( event );\n\n\tif ( isFirstListener ) {\n\t\tcallbacksByEvent.set( event, [] );\n\n\t\taddListener( event );\n\t}\n\n\tcallbacksByEvent.get( event )?.push( callback );\n\n\treturn () => {\n\t\tconst callbacks = callbacksByEvent.get( event );\n\n\t\tif ( ! callbacks?.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst filtered = callbacks.filter( ( cb ) => cb !== callback );\n\n\t\tcallbacksByEvent.set( event, filtered );\n\t};\n}\n\nfunction addListener( event: EventDescriptor[ 'name' ] ) {\n\twindow.addEventListener( event, makeEventHandler( event ), { signal: abortController.signal } );\n}\n\nfunction makeEventHandler( event: EventDescriptor[ 'name' ] ): EventListener {\n\treturn ( e ) => {\n\t\tif ( ! isReady() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst normalizedEvent = normalizeEvent( e );\n\n\t\tcallbacksByEvent.get( event )?.forEach( ( callback ) => {\n\t\t\tcallback( normalizedEvent );\n\t\t} );\n\t};\n}\n","import { type ExtendedWindow } from './types';\n\nexport const EXPERIMENTAL_FEATURES = {\n\t// Note: Add new experimental features here as needed\n};\n\nexport function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport const isExperimentActive = ( experiment: keyof typeof EXPERIMENTAL_FEATURES | string ) => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.elementorCommon?.config?.experimentalFeatures?.[ experiment ];\n};\n","import { useEffect, useState } from 'react';\n\nimport { type EventDescriptor, listenTo } from '../listeners';\n\nexport default function useListenTo< T >(\n\tevent: EventDescriptor | EventDescriptor[],\n\tgetSnapshot: () => T,\n\tdeps: unknown[] = []\n) {\n\tconst [ snapshot, setSnapshot ] = useState( () => getSnapshot() );\n\n\tuseEffect( () => {\n\t\tconst updateState = () => setSnapshot( getSnapshot() );\n\n\t\t// Ensure the state is re-calculated when the dependencies have been changed.\n\t\tupdateState();\n\n\t\treturn listenTo( event, updateState );\n\t}, deps ); // eslint-disable-line react-hooks/exhaustive-deps\n\n\treturn snapshot;\n}\n","import { routeCloseEvent, type RouteEventDescriptor, routeOpenEvent } from '../listeners';\nimport { isRouteActive } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsRouteActive( route: RouteEventDescriptor[ 'name' ] ) {\n\treturn useListenTo( [ routeOpenEvent( route ), routeCloseEvent( route ) ], () => isRouteActive( route ), [\n\t\troute,\n\t] );\n}\n","import useListenTo from './hooks/use-listen-to';\nimport { windowEvent } from './listeners';\n\nexport type EditMode = 'edit' | 'preview' | 'picker' | ( string & {} );\n\nexport type ExtendedWindow = Window & {\n\telementor: {\n\t\tchangeEditMode: ( newMode: EditMode ) => void;\n\t\tchannels: {\n\t\t\tdataEditMode: {\n\t\t\t\trequest: ( key: 'activeMode' ) => EditMode;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport function useEditMode() {\n\treturn useListenTo( windowEvent( 'elementor/edit-mode/change' ), getCurrentEditMode );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.channels.dataEditMode.request( 'activeMode' );\n}\n\nexport function changeEditMode( newMode: EditMode ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor.changeEditMode( newMode );\n}\n","import { type EditMode, useEditMode } from '../edit-mode';\nimport { type RouteEventDescriptor } from '../listeners';\nimport useIsRouteActive from './use-is-route-active';\n\nexport type UseRouteStatusOptions = {\n\tblockOnKitRoutes?: boolean;\n\tallowedEditModes?: EditMode[];\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, allowedEditModes = [ 'edit' ] }: UseRouteStatusOptions = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst currentEditMode = useEditMode();\n\n\tconst isBlockedByEditMode = ! allowedEditModes.includes( currentEditMode );\n\n\tconst isBlockedByKit = blockOnKitRoutes && isKitRouteActive;\n\n\tconst isActive = isRouteActive && ! isBlockedByEditMode;\n\n\tconst isBlocked = isBlockedByEditMode || isBlockedByKit;\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\n}\n","import { type ExtendedWindow, type RequestParams } from './types';\n\nexport const ajax = {\n\tasync load< TRequestData = object, TResponseData = object >(\n\t\tdata: RequestParams< TRequestData >\n\t): Promise< TResponseData > {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\treturn new Promise( ( success, error ) => {\n\t\t\textendedWindow.elementorCommon?.ajax?.load< TRequestData, TResponseData >( {\n\t\t\t\t...data,\n\t\t\t\tsuccess,\n\t\t\t\terror,\n\t\t\t} );\n\t\t} );\n\t},\n\tinvalidateCache< TData = object >( data: RequestParams< TData > ) {\n\t\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\t\textendedWindow.elementorCommon?.ajax?.invalidateCache< TData >( data );\n\t},\n};\n","import { debounce } from '@elementor/utils';\n\nimport { getHistoryManager, type HistoryItem } from './get-history-manager';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Payload = Record< string, any > | undefined;\n\ntype LabelGenerator< TPayload extends Payload, TDoReturn > = ( payload: TPayload, doReturn: TDoReturn ) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => Awaited< TDoReturn >;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => Awaited< TUndoReturn >;\n\tredo?: (\n\t\tpayload: TPayload,\n\t\tdoReturn: Awaited< TDoReturn >,\n\t\tundoReturn: Awaited< TUndoReturn >\n\t) => Awaited< TDoReturn >;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n\tdebounce?: { wait: number };\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, NoInfer< TDoReturn > >\n): () => TDoReturn;\n\n// Action WITH a payload.\nexport function undoable< TPayload extends NonNullable< Payload >, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload: TPayload ) => TDoReturn;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, NoInfer< TDoReturn > >\n): ( payload?: Payload ) => TDoReturn {\n\tactions.redo ??= actions.do;\n\n\tconst _addHistoryItem = options.debounce ? debounce( addHistoryItem, options.debounce.wait ) : addHistoryItem;\n\n\treturn ( payload ) => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tlet doReturn = _actions.do( _payload );\n\t\tlet undoReturn: Awaited< TUndoReturn >;\n\n\t\t_addHistoryItem( {\n\t\t\ttitle: normalizeToGenerator( options.title )( _payload, doReturn ),\n\t\t\tsubTitle: normalizeToGenerator( options.subtitle )( _payload, doReturn ),\n\t\t\ttype: '',\n\t\t\trestore: ( _, isRedo ) => {\n\t\t\t\tif ( isRedo ) {\n\t\t\t\t\tdoReturn = _actions.redo( _payload, doReturn, undoReturn );\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tundoReturn = _actions.undo( _payload, doReturn );\n\t\t\t},\n\t\t} );\n\n\t\treturn doReturn;\n\t};\n}\n\nfunction normalizeToGenerator< TPayload extends Payload, TDoReturn >(\n\tvalue: string | undefined | LabelGenerator< TPayload, TDoReturn >\n) {\n\treturn typeof value === 'function' ? value : () => value ?? '';\n}\n\nfunction addHistoryItem( item: HistoryItem ) {\n\tconst history = getHistoryManager();\n\thistory.addItem( item );\n}\n","import { createError } from '@elementor/utils';\n\nexport type HistoryItem = {\n\ttitle: string;\n\tsubTitle: string;\n\ttype: string;\n\trestore: ( item: HistoryItem, isRedo: boolean ) => void;\n};\n\ntype AddHistoryItem = ( item: HistoryItem ) => void;\n\nexport type WindowWithHistoryManager = Window & {\n\telementor?: {\n\t\tdocuments?: {\n\t\t\tgetCurrent?: () => {\n\t\t\t\thistory?: {\n\t\t\t\t\taddItem: AddHistoryItem;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\n\nconst HistoryManagerNotAvailable = createError( {\n\tcode: 'history_manager_not_available',\n\tmessage: 'Cannot access History manager.',\n} );\n\nexport function getHistoryManager() {\n\tconst extendedWindow = window as unknown as WindowWithHistoryManager;\n\n\tconst historyManger = extendedWindow.elementor?.documents?.getCurrent?.()?.history;\n\n\tif ( ! historyManger ) {\n\t\tthrow new HistoryManagerNotAvailable();\n\t}\n\n\treturn historyManger;\n}\n","export type WindowWithDataHooks = Window & {\n\t$e: {\n\t\tmodules?: {\n\t\t\thookData?: {\n\t\t\t\t[ K in keyof HooksMap as Capitalize< K > ]: HooksMap[ K ];\n\t\t\t};\n\t\t};\n\t\tcommands?: {\n\t\t\tcurrentTrace?: string[];\n\t\t};\n\t};\n};\n\ntype HooksMap = Record< HookType, typeof DataHook | undefined >;\n\ntype HookType = 'after' | 'dependency';\n\nexport type Args = Record< string, unknown >;\n\nexport type HookOptions = {\n\tcommandsCurrentTrace?: string[];\n};\n\nexport type AfterHookCallback< TArgs extends Args = Args, TResult = unknown > = (\n\targs: TArgs,\n\tresult: TResult,\n\toptions?: HookOptions\n) => void | Promise< void >;\n\nexport type DependencyHookCallback< TArgs extends Args = Args > = ( args: TArgs, options?: HookOptions ) => boolean;\n\nexport declare class DataHook< TArgs extends Args = Args, TResult = unknown > {\n\tgetCommand(): string;\n\tgetId(): string;\n\tapply( args: TArgs, result?: TResult ): unknown;\n\tregister(): void;\n}\n\nlet hookId = 0;\n\nexport function registerDataHook< TArgs extends Args = Args >(\n\ttype: 'dependency',\n\tcommand: string,\n\tcallback: DependencyHookCallback< TArgs >\n): DataHook< TArgs >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: 'after',\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult >\n): DataHook< TArgs, TResult >;\n\nexport function registerDataHook< TArgs extends Args = Args, TResult = unknown >(\n\ttype: HookType,\n\tcommand: string,\n\tcallback: AfterHookCallback< TArgs, TResult > | DependencyHookCallback< TArgs >\n): DataHook< TArgs, TResult > {\n\tconst eWindow = window as unknown as WindowWithDataHooks;\n\tconst hooksClasses = eWindow.$e?.modules?.hookData;\n\n\tconst hooksMap = {\n\t\tafter: hooksClasses?.After,\n\t\tdependency: hooksClasses?.Dependency,\n\t} satisfies HooksMap;\n\n\tconst HookClass = hooksMap[ type ];\n\n\tif ( ! HookClass ) {\n\t\tthrow new Error( `Data hook '${ type }' is not available` );\n\t}\n\n\tconst currentHookId = ++hookId;\n\n\tconst hook = new ( class extends HookClass< TArgs, TResult > {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--data--${ currentHookId }`;\n\t\t}\n\n\t\tapply( args: TArgs, result?: TResult ) {\n\t\t\tconst hookOptions: HookOptions = {};\n\n\t\t\tconst currentWindow = window as unknown as WindowWithDataHooks;\n\t\t\tconst commandsCurrentTrace = currentWindow.$e?.commands?.currentTrace;\n\t\t\tif ( commandsCurrentTrace ) {\n\t\t\t\thookOptions.commandsCurrentTrace = commandsCurrentTrace;\n\t\t\t}\n\n\t\t\tif ( type === 'dependency' ) {\n\t\t\t\treturn ( callback as DependencyHookCallback< TArgs > )( args, hookOptions );\n\t\t\t}\n\n\t\t\treturn ( callback as AfterHookCallback< TArgs, TResult > )( args, result as TResult, hookOptions );\n\t\t}\n\t} )();\n\n\thook.register();\n\n\treturn hook;\n}\n","import { type Args, registerDataHook } from './register-data-hook';\n\ntype BlockCommandArgs = {\n\tcommand: string;\n\tcondition: ( args: Args ) => boolean;\n};\n\nexport function blockCommand( { command, condition }: BlockCommandArgs ) {\n\treturn registerDataHook( 'dependency', command, ( args ) => {\n\t\tconst shouldBlock = condition( args );\n\n\t\t// Should return `false` to prevent the command from running.\n\t\treturn ! shouldBlock;\n\t} );\n}\n","export function getCanvasIframeDocument() {\n\treturn window.elementor?.$preview?.[ 0 ]?.contentDocument;\n}\n","export const getElementorConfig = () => {\n\treturn window.elementor?.config ?? {};\n};\n\nexport const getElementorFrontendConfig = () => {\n\treturn window.elementorFrontend?.config ?? {};\n};\n","export type EnqueueFont = ( fontFamily: string, context?: 'preview' | 'editor' ) => void;\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\treturn window.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n"],"mappings":"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","names":["isRouteActive"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-v1-adapters",
|
|
3
|
-
"version": "4.0.0-
|
|
3
|
+
"version": "4.0.0-665",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/utils": "4.0.0-
|
|
42
|
+
"@elementor/utils": "4.0.0-665"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"react": "^18.3.1"
|
package/src/undoable/undoable.ts
CHANGED
|
@@ -10,7 +10,11 @@ type LabelGenerator< TPayload extends Payload, TDoReturn > = ( payload: TPayload
|
|
|
10
10
|
type Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {
|
|
11
11
|
do: ( payload: TPayload ) => Awaited< TDoReturn >;
|
|
12
12
|
undo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => Awaited< TUndoReturn >;
|
|
13
|
-
redo?: (
|
|
13
|
+
redo?: (
|
|
14
|
+
payload: TPayload,
|
|
15
|
+
doReturn: Awaited< TDoReturn >,
|
|
16
|
+
undoReturn: Awaited< TUndoReturn >
|
|
17
|
+
) => Awaited< TDoReturn >;
|
|
14
18
|
};
|
|
15
19
|
|
|
16
20
|
type Options< TPayload extends Payload, TDoReturn > = {
|
|
@@ -43,24 +47,25 @@ export function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(
|
|
|
43
47
|
const _payload = payload as TPayload;
|
|
44
48
|
const _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;
|
|
45
49
|
|
|
46
|
-
let
|
|
50
|
+
let doReturn = _actions.do( _payload );
|
|
51
|
+
let undoReturn: Awaited< TUndoReturn >;
|
|
47
52
|
|
|
48
53
|
_addHistoryItem( {
|
|
49
|
-
title: normalizeToGenerator( options.title )( _payload,
|
|
50
|
-
subTitle: normalizeToGenerator( options.subtitle )( _payload,
|
|
54
|
+
title: normalizeToGenerator( options.title )( _payload, doReturn ),
|
|
55
|
+
subTitle: normalizeToGenerator( options.subtitle )( _payload, doReturn ),
|
|
51
56
|
type: '',
|
|
52
57
|
restore: ( _, isRedo ) => {
|
|
53
58
|
if ( isRedo ) {
|
|
54
|
-
|
|
59
|
+
doReturn = _actions.redo( _payload, doReturn, undoReturn );
|
|
55
60
|
|
|
56
61
|
return;
|
|
57
62
|
}
|
|
58
63
|
|
|
59
|
-
_actions.undo( _payload,
|
|
64
|
+
undoReturn = _actions.undo( _payload, doReturn );
|
|
60
65
|
},
|
|
61
66
|
} );
|
|
62
67
|
|
|
63
|
-
return
|
|
68
|
+
return doReturn;
|
|
64
69
|
};
|
|
65
70
|
}
|
|
66
71
|
|