@elementor/editor-v1-adapters 0.8.4 → 0.9.0
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/CHANGELOG.md +12 -0
- package/dist/index.d.mts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +16 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/dispatchers/dispatchers.ts +19 -7
- package/src/dispatchers/types.ts +8 -2
- package/src/index.ts +1 -0
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
type RunCommandOptions = {
|
|
2
|
+
internal?: boolean;
|
|
3
|
+
};
|
|
4
|
+
declare function runCommand(command: string, args?: object, { internal }?: RunCommandOptions): Promise<any>;
|
|
5
|
+
declare function runCommandSync(command: string, args?: object, { internal }?: RunCommandOptions): unknown;
|
|
2
6
|
declare function openRoute(route: string): Promise<unknown>;
|
|
3
7
|
declare function registerRoute(route: string): Promise<unknown>;
|
|
4
8
|
type UnknownArgs = Record<string, unknown>;
|
|
@@ -98,4 +102,4 @@ type Options<TPayload extends Payload, TDoReturn> = {
|
|
|
98
102
|
declare function undoable<TDoReturn, TUndoReturn>(actions: Actions<undefined, TDoReturn, TUndoReturn>, options: Options<undefined, TDoReturn>): () => Promise<Awaited<TDoReturn>>;
|
|
99
103
|
declare function undoable<TPayload extends NonNullable<Payload>, TDoReturn, TUndoReturn>(actions: Actions<TPayload, TDoReturn, TUndoReturn>, options: Options<TPayload, TDoReturn>): (payload: TPayload) => Promise<Awaited<TDoReturn>>;
|
|
100
104
|
|
|
101
|
-
export { type CommandEvent, type CommandEventDescriptor, type EventDescriptor, type ExtendedWindow, type ListenerCallback, type ListenerEvent, type RouteEvent, type RouteEventDescriptor, type WindowEvent, type WindowEventDescriptor, blockDataCommand as __privateBlockDataCommand, dispatchReadyEvent as __privateDispatchReadyEvent, flushListeners as __privateFlushListeners, getCurrentEditMode as __privateGetCurrentEditMode, isRouteActive as __privateIsRouteActive, listenTo as __privateListenTo, openRoute as __privateOpenRoute, registerRoute as __privateRegisterRoute, runCommand as __privateRunCommand, setReady as __privateSetReady, useIsPreviewMode as __privateUseIsPreviewMode, useIsRouteActive as __privateUseIsRouteActive, useListenTo as __privateUseListenTo, useRouteStatus as __privateUseRouteStatus, commandEndEvent, commandStartEvent, dispatchReadyEvent, editModeChangeEvent, flushListeners, isReady, listenTo, routeCloseEvent, routeOpenEvent, setReady, undoable, v1ReadyEvent, windowEvent };
|
|
105
|
+
export { type CommandEvent, type CommandEventDescriptor, type EventDescriptor, type ExtendedWindow, type ListenerCallback, type ListenerEvent, type RouteEvent, type RouteEventDescriptor, type WindowEvent, type WindowEventDescriptor, blockDataCommand as __privateBlockDataCommand, dispatchReadyEvent as __privateDispatchReadyEvent, flushListeners as __privateFlushListeners, getCurrentEditMode as __privateGetCurrentEditMode, isRouteActive as __privateIsRouteActive, listenTo as __privateListenTo, openRoute as __privateOpenRoute, registerRoute as __privateRegisterRoute, runCommand as __privateRunCommand, runCommandSync as __privateRunCommandSync, setReady as __privateSetReady, useIsPreviewMode as __privateUseIsPreviewMode, useIsRouteActive as __privateUseIsRouteActive, useListenTo as __privateUseListenTo, useRouteStatus as __privateUseRouteStatus, commandEndEvent, commandStartEvent, dispatchReadyEvent, editModeChangeEvent, flushListeners, isReady, listenTo, routeCloseEvent, routeOpenEvent, setReady, undoable, v1ReadyEvent, windowEvent };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
type RunCommandOptions = {
|
|
2
|
+
internal?: boolean;
|
|
3
|
+
};
|
|
4
|
+
declare function runCommand(command: string, args?: object, { internal }?: RunCommandOptions): Promise<any>;
|
|
5
|
+
declare function runCommandSync(command: string, args?: object, { internal }?: RunCommandOptions): unknown;
|
|
2
6
|
declare function openRoute(route: string): Promise<unknown>;
|
|
3
7
|
declare function registerRoute(route: string): Promise<unknown>;
|
|
4
8
|
type UnknownArgs = Record<string, unknown>;
|
|
@@ -98,4 +102,4 @@ type Options<TPayload extends Payload, TDoReturn> = {
|
|
|
98
102
|
declare function undoable<TDoReturn, TUndoReturn>(actions: Actions<undefined, TDoReturn, TUndoReturn>, options: Options<undefined, TDoReturn>): () => Promise<Awaited<TDoReturn>>;
|
|
99
103
|
declare function undoable<TPayload extends NonNullable<Payload>, TDoReturn, TUndoReturn>(actions: Actions<TPayload, TDoReturn, TUndoReturn>, options: Options<TPayload, TDoReturn>): (payload: TPayload) => Promise<Awaited<TDoReturn>>;
|
|
100
104
|
|
|
101
|
-
export { type CommandEvent, type CommandEventDescriptor, type EventDescriptor, type ExtendedWindow, type ListenerCallback, type ListenerEvent, type RouteEvent, type RouteEventDescriptor, type WindowEvent, type WindowEventDescriptor, blockDataCommand as __privateBlockDataCommand, dispatchReadyEvent as __privateDispatchReadyEvent, flushListeners as __privateFlushListeners, getCurrentEditMode as __privateGetCurrentEditMode, isRouteActive as __privateIsRouteActive, listenTo as __privateListenTo, openRoute as __privateOpenRoute, registerRoute as __privateRegisterRoute, runCommand as __privateRunCommand, setReady as __privateSetReady, useIsPreviewMode as __privateUseIsPreviewMode, useIsRouteActive as __privateUseIsRouteActive, useListenTo as __privateUseListenTo, useRouteStatus as __privateUseRouteStatus, commandEndEvent, commandStartEvent, dispatchReadyEvent, editModeChangeEvent, flushListeners, isReady, listenTo, routeCloseEvent, routeOpenEvent, setReady, undoable, v1ReadyEvent, windowEvent };
|
|
105
|
+
export { type CommandEvent, type CommandEventDescriptor, type EventDescriptor, type ExtendedWindow, type ListenerCallback, type ListenerEvent, type RouteEvent, type RouteEventDescriptor, type WindowEvent, type WindowEventDescriptor, blockDataCommand as __privateBlockDataCommand, dispatchReadyEvent as __privateDispatchReadyEvent, flushListeners as __privateFlushListeners, getCurrentEditMode as __privateGetCurrentEditMode, isRouteActive as __privateIsRouteActive, listenTo as __privateListenTo, openRoute as __privateOpenRoute, registerRoute as __privateRegisterRoute, runCommand as __privateRunCommand, runCommandSync as __privateRunCommandSync, setReady as __privateSetReady, useIsPreviewMode as __privateUseIsPreviewMode, useIsRouteActive as __privateUseIsRouteActive, useListenTo as __privateUseListenTo, useRouteStatus as __privateUseRouteStatus, commandEndEvent, commandStartEvent, dispatchReadyEvent, editModeChangeEvent, flushListeners, isReady, listenTo, routeCloseEvent, routeOpenEvent, setReady, undoable, v1ReadyEvent, windowEvent };
|
package/dist/index.js
CHANGED
|
@@ -18,8 +18,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
20
|
// src/index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
23
|
__privateBlockDataCommand: () => blockDataCommand,
|
|
24
24
|
__privateDispatchReadyEvent: () => dispatchReadyEvent,
|
|
25
25
|
__privateFlushListeners: () => flushListeners,
|
|
@@ -29,6 +29,7 @@ __export(src_exports, {
|
|
|
29
29
|
__privateOpenRoute: () => openRoute,
|
|
30
30
|
__privateRegisterRoute: () => registerRoute,
|
|
31
31
|
__privateRunCommand: () => runCommand,
|
|
32
|
+
__privateRunCommandSync: () => runCommandSync,
|
|
32
33
|
__privateSetReady: () => setReady,
|
|
33
34
|
__privateUseIsPreviewMode: () => useIsPreviewMode,
|
|
34
35
|
__privateUseIsRouteActive: () => useIsRouteActive,
|
|
@@ -43,7 +44,7 @@ __export(src_exports, {
|
|
|
43
44
|
v1ReadyEvent: () => v1ReadyEvent,
|
|
44
45
|
windowEvent: () => windowEvent
|
|
45
46
|
});
|
|
46
|
-
module.exports = __toCommonJS(
|
|
47
|
+
module.exports = __toCommonJS(index_exports);
|
|
47
48
|
|
|
48
49
|
// src/dispatchers/utils.ts
|
|
49
50
|
function isJQueryDeferred(value) {
|
|
@@ -56,12 +57,8 @@ function promisifyJQueryDeferred(deferred) {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
// src/dispatchers/dispatchers.ts
|
|
59
|
-
function runCommand(command, args) {
|
|
60
|
-
const
|
|
61
|
-
if (!extendedWindow.$e?.run) {
|
|
62
|
-
return Promise.reject("`$e.run()` is not available");
|
|
63
|
-
}
|
|
64
|
-
const result = extendedWindow.$e.run(command, args);
|
|
60
|
+
async function runCommand(command, args, { internal = false } = {}) {
|
|
61
|
+
const result = runCommandSync(command, args, { internal });
|
|
65
62
|
if (result instanceof Promise) {
|
|
66
63
|
return result;
|
|
67
64
|
}
|
|
@@ -70,6 +67,15 @@ function runCommand(command, args) {
|
|
|
70
67
|
}
|
|
71
68
|
return Promise.resolve(result);
|
|
72
69
|
}
|
|
70
|
+
function runCommandSync(command, args, { internal = false } = {}) {
|
|
71
|
+
const extendedWindow = window;
|
|
72
|
+
const run = internal ? extendedWindow.$e?.internal : extendedWindow.$e?.run;
|
|
73
|
+
if (!run) {
|
|
74
|
+
const runnerName = internal ? "$e.internal" : "$e.run";
|
|
75
|
+
throw new Error(`\`${runnerName}()\` is not available`);
|
|
76
|
+
}
|
|
77
|
+
return run(command, args);
|
|
78
|
+
}
|
|
73
79
|
function openRoute(route) {
|
|
74
80
|
const extendedWindow = window;
|
|
75
81
|
if (!extendedWindow.$e?.route) {
|
|
@@ -384,6 +390,7 @@ function normalizeToGenerator(value) {
|
|
|
384
390
|
__privateOpenRoute,
|
|
385
391
|
__privateRegisterRoute,
|
|
386
392
|
__privateRunCommand,
|
|
393
|
+
__privateRunCommandSync,
|
|
387
394
|
__privateSetReady,
|
|
388
395
|
__privateUseIsPreviewMode,
|
|
389
396
|
__privateUseIsRouteActive,
|
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-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.ts","../src/undoable/get-history-manager.ts","../src/undoable/undoable.ts"],"sourcesContent":["export {\n\trunCommand as __privateRunCommand,\n\topenRoute as __privateOpenRoute,\n\tregisterRoute as __privateRegisterRoute,\n\tblockDataCommand as __privateBlockDataCommand,\n} from './dispatchers';\n\nexport {\n\tuseIsPreviewMode as __privateUseIsPreviewMode,\n\tuseIsRouteActive as __privateUseIsRouteActive,\n\tuseListenTo as __privateUseListenTo,\n\tuseRouteStatus as __privateUseRouteStatus,\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\teditModeChangeEvent,\n} from './listeners';\n\nexport type * from './listeners';\n\nexport { isRouteActive as __privateIsRouteActive, getCurrentEditMode as __privateGetCurrentEditMode } from './readers';\n\nexport { undoable } from './undoable';\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\nexport function runCommand( command: string, args?: object ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.run ) {\n\t\treturn Promise.reject( '`$e.run()` is not available' );\n\t}\n\n\tconst result = extendedWindow.$e.run( command, args );\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 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\ntype UnknownArgs = Record< string, unknown >;\n\nlet hookId = 0;\n\nexport function blockDataCommand( {\n\tcommand,\n\tcondition,\n}: {\n\tcommand: string;\n\tcondition: ( args: UnknownArgs ) => boolean;\n} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\tconst DependencyHook = extendedWindow.$e?.modules?.hookData?.Dependency;\n\n\tif ( ! DependencyHook ) {\n\t\treturn Promise.reject( '`$e.modules.hookData.Dependency` is not available' );\n\t}\n\n\tconst __hookId = ++hookId;\n\n\tconst dependencyHook = new ( class extends DependencyHook {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--block--${ __hookId }`;\n\t\t}\n\n\t\tapply( args: UnknownArgs ) {\n\t\t\t// If the condition is met, we will stop the original command from running.\n\t\t\tconst shouldStopOriginalAction = condition( args );\n\n\t\t\t// We will return `false` if we want to stop the original action from running.\n\t\t\treturn ! shouldStopOriginalAction;\n\t\t}\n\t} )();\n\n\ttry {\n\t\treturn Promise.resolve( dependencyHook.register() );\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\nexport const editModeChangeEvent = () => {\n\treturn windowEvent( 'elementor/edit-mode/change' );\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 function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.dataEditMode?.request?.( 'activeMode' );\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 { editModeChangeEvent } from '../listeners';\nimport { getCurrentEditMode } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo( editModeChangeEvent(), () => getCurrentEditMode() === 'preview' );\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 { type RouteEventDescriptor } from '../listeners';\nimport useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\n\ntype Options = {\n\tblockOnKitRoutes?: boolean;\n\tblockOnPreviewMode?: boolean;\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, blockOnPreviewMode = true }: Options = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst isPreviewMode = useIsPreviewMode();\n\n\tconst isActive = isRouteActive && ! ( blockOnPreviewMode && isPreviewMode );\n\n\tconst isBlocked = ( blockOnPreviewMode && isPreviewMode ) || ( blockOnKitRoutes && isKitRouteActive );\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\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\nexport const 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","import { getHistoryManager } 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 > = (\n\tpayload: TPayload,\n\tdoReturn: Awaited< TDoReturn >\n) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => TDoReturn;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TUndoReturn;\n\tredo?: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TDoReturn;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, TDoReturn >\n): () => Promise< Awaited< 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, TDoReturn >\n): ( payload: TPayload ) => Promise< Awaited< TDoReturn > >;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, TDoReturn >\n): ( payload?: Payload ) => Promise< Awaited< TDoReturn > > {\n\tactions.redo ??= ( payload ) => actions.do( payload );\n\n\treturn async ( payload ): Promise< Awaited< TDoReturn > > => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tconst history = getHistoryManager();\n\n\t\tconst result = await _actions.do( _payload );\n\n\t\thistory.addItem( {\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\tisRedo ? _actions.redo( _payload, result ) : _actions.undo( _payload, result ),\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"],"mappings":"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","names":["isRouteActive","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-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.ts","../src/undoable/get-history-manager.ts","../src/undoable/undoable.ts"],"sourcesContent":["export {\n\trunCommand as __privateRunCommand,\n\trunCommandSync as __privateRunCommandSync,\n\topenRoute as __privateOpenRoute,\n\tregisterRoute as __privateRegisterRoute,\n\tblockDataCommand as __privateBlockDataCommand,\n} from './dispatchers';\n\nexport {\n\tuseIsPreviewMode as __privateUseIsPreviewMode,\n\tuseIsRouteActive as __privateUseIsRouteActive,\n\tuseListenTo as __privateUseListenTo,\n\tuseRouteStatus as __privateUseRouteStatus,\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\teditModeChangeEvent,\n} from './listeners';\n\nexport type * from './listeners';\n\nexport { isRouteActive as __privateIsRouteActive, getCurrentEditMode as __privateGetCurrentEditMode } from './readers';\n\nexport { undoable } from './undoable';\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( 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 );\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\ntype UnknownArgs = Record< string, unknown >;\n\nlet hookId = 0;\n\nexport function blockDataCommand( {\n\tcommand,\n\tcondition,\n}: {\n\tcommand: string;\n\tcondition: ( args: UnknownArgs ) => boolean;\n} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\tconst DependencyHook = extendedWindow.$e?.modules?.hookData?.Dependency;\n\n\tif ( ! DependencyHook ) {\n\t\treturn Promise.reject( '`$e.modules.hookData.Dependency` is not available' );\n\t}\n\n\tconst __hookId = ++hookId;\n\n\tconst dependencyHook = new ( class extends DependencyHook {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--block--${ __hookId }`;\n\t\t}\n\n\t\tapply( args: UnknownArgs ) {\n\t\t\t// If the condition is met, we will stop the original command from running.\n\t\t\tconst shouldStopOriginalAction = condition( args );\n\n\t\t\t// We will return `false` if we want to stop the original action from running.\n\t\t\treturn ! shouldStopOriginalAction;\n\t\t}\n\t} )();\n\n\ttry {\n\t\treturn Promise.resolve( dependencyHook.register() );\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\nexport const editModeChangeEvent = () => {\n\treturn windowEvent( 'elementor/edit-mode/change' );\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 function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.dataEditMode?.request?.( 'activeMode' );\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 { editModeChangeEvent } from '../listeners';\nimport { getCurrentEditMode } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo( editModeChangeEvent(), () => getCurrentEditMode() === 'preview' );\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 { type RouteEventDescriptor } from '../listeners';\nimport useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\n\ntype Options = {\n\tblockOnKitRoutes?: boolean;\n\tblockOnPreviewMode?: boolean;\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, blockOnPreviewMode = true }: Options = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst isPreviewMode = useIsPreviewMode();\n\n\tconst isActive = isRouteActive && ! ( blockOnPreviewMode && isPreviewMode );\n\n\tconst isBlocked = ( blockOnPreviewMode && isPreviewMode ) || ( blockOnKitRoutes && isKitRouteActive );\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\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\nexport const 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","import { getHistoryManager } 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 > = (\n\tpayload: TPayload,\n\tdoReturn: Awaited< TDoReturn >\n) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => TDoReturn;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TUndoReturn;\n\tredo?: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TDoReturn;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, TDoReturn >\n): () => Promise< Awaited< 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, TDoReturn >\n): ( payload: TPayload ) => Promise< Awaited< TDoReturn > >;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, TDoReturn >\n): ( payload?: Payload ) => Promise< Awaited< TDoReturn > > {\n\tactions.redo ??= ( payload ) => actions.do( payload );\n\n\treturn async ( payload ): Promise< Awaited< TDoReturn > > => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tconst history = getHistoryManager();\n\n\t\tconst result = await _actions.do( _payload );\n\n\t\thistory.addItem( {\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\tisRedo ? _actions.redo( _payload, result ) : _actions.undo( _payload, result ),\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"],"mappings":"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","names":["isRouteActive","import_utils"]}
|
package/dist/index.mjs
CHANGED
|
@@ -9,12 +9,8 @@ function promisifyJQueryDeferred(deferred) {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// src/dispatchers/dispatchers.ts
|
|
12
|
-
function runCommand(command, args) {
|
|
13
|
-
const
|
|
14
|
-
if (!extendedWindow.$e?.run) {
|
|
15
|
-
return Promise.reject("`$e.run()` is not available");
|
|
16
|
-
}
|
|
17
|
-
const result = extendedWindow.$e.run(command, args);
|
|
12
|
+
async function runCommand(command, args, { internal = false } = {}) {
|
|
13
|
+
const result = runCommandSync(command, args, { internal });
|
|
18
14
|
if (result instanceof Promise) {
|
|
19
15
|
return result;
|
|
20
16
|
}
|
|
@@ -23,6 +19,15 @@ function runCommand(command, args) {
|
|
|
23
19
|
}
|
|
24
20
|
return Promise.resolve(result);
|
|
25
21
|
}
|
|
22
|
+
function runCommandSync(command, args, { internal = false } = {}) {
|
|
23
|
+
const extendedWindow = window;
|
|
24
|
+
const run = internal ? extendedWindow.$e?.internal : extendedWindow.$e?.run;
|
|
25
|
+
if (!run) {
|
|
26
|
+
const runnerName = internal ? "$e.internal" : "$e.run";
|
|
27
|
+
throw new Error(`\`${runnerName}()\` is not available`);
|
|
28
|
+
}
|
|
29
|
+
return run(command, args);
|
|
30
|
+
}
|
|
26
31
|
function openRoute(route) {
|
|
27
32
|
const extendedWindow = window;
|
|
28
33
|
if (!extendedWindow.$e?.route) {
|
|
@@ -336,6 +341,7 @@ export {
|
|
|
336
341
|
openRoute as __privateOpenRoute,
|
|
337
342
|
registerRoute as __privateRegisterRoute,
|
|
338
343
|
runCommand as __privateRunCommand,
|
|
344
|
+
runCommandSync as __privateRunCommandSync,
|
|
339
345
|
setReady as __privateSetReady,
|
|
340
346
|
useIsPreviewMode as __privateUseIsPreviewMode,
|
|
341
347
|
useIsRouteActive as __privateUseIsRouteActive,
|
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-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.ts","../src/undoable/get-history-manager.ts","../src/undoable/undoable.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\nexport function runCommand( command: string, args?: object ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tif ( ! extendedWindow.$e?.run ) {\n\t\treturn Promise.reject( '`$e.run()` is not available' );\n\t}\n\n\tconst result = extendedWindow.$e.run( command, args );\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 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\ntype UnknownArgs = Record< string, unknown >;\n\nlet hookId = 0;\n\nexport function blockDataCommand( {\n\tcommand,\n\tcondition,\n}: {\n\tcommand: string;\n\tcondition: ( args: UnknownArgs ) => boolean;\n} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\tconst DependencyHook = extendedWindow.$e?.modules?.hookData?.Dependency;\n\n\tif ( ! DependencyHook ) {\n\t\treturn Promise.reject( '`$e.modules.hookData.Dependency` is not available' );\n\t}\n\n\tconst __hookId = ++hookId;\n\n\tconst dependencyHook = new ( class extends DependencyHook {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--block--${ __hookId }`;\n\t\t}\n\n\t\tapply( args: UnknownArgs ) {\n\t\t\t// If the condition is met, we will stop the original command from running.\n\t\t\tconst shouldStopOriginalAction = condition( args );\n\n\t\t\t// We will return `false` if we want to stop the original action from running.\n\t\t\treturn ! shouldStopOriginalAction;\n\t\t}\n\t} )();\n\n\ttry {\n\t\treturn Promise.resolve( dependencyHook.register() );\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\nexport const editModeChangeEvent = () => {\n\treturn windowEvent( 'elementor/edit-mode/change' );\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 function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.dataEditMode?.request?.( 'activeMode' );\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 { editModeChangeEvent } from '../listeners';\nimport { getCurrentEditMode } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo( editModeChangeEvent(), () => getCurrentEditMode() === 'preview' );\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 { type RouteEventDescriptor } from '../listeners';\nimport useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\n\ntype Options = {\n\tblockOnKitRoutes?: boolean;\n\tblockOnPreviewMode?: boolean;\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, blockOnPreviewMode = true }: Options = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst isPreviewMode = useIsPreviewMode();\n\n\tconst isActive = isRouteActive && ! ( blockOnPreviewMode && isPreviewMode );\n\n\tconst isBlocked = ( blockOnPreviewMode && isPreviewMode ) || ( blockOnKitRoutes && isKitRouteActive );\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\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\nexport const 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","import { getHistoryManager } 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 > = (\n\tpayload: TPayload,\n\tdoReturn: Awaited< TDoReturn >\n) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => TDoReturn;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TUndoReturn;\n\tredo?: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TDoReturn;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, TDoReturn >\n): () => Promise< Awaited< 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, TDoReturn >\n): ( payload: TPayload ) => Promise< Awaited< TDoReturn > >;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, TDoReturn >\n): ( payload?: Payload ) => Promise< Awaited< TDoReturn > > {\n\tactions.redo ??= ( payload ) => actions.do( payload );\n\n\treturn async ( payload ): Promise< Awaited< TDoReturn > > => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tconst history = getHistoryManager();\n\n\t\tconst result = await _actions.do( _payload );\n\n\t\thistory.addItem( {\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\tisRedo ? _actions.redo( _payload, result ) : _actions.undo( _payload, result ),\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"],"mappings":"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","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-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.ts","../src/undoable/get-history-manager.ts","../src/undoable/undoable.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( 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 );\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\ntype UnknownArgs = Record< string, unknown >;\n\nlet hookId = 0;\n\nexport function blockDataCommand( {\n\tcommand,\n\tcondition,\n}: {\n\tcommand: string;\n\tcondition: ( args: UnknownArgs ) => boolean;\n} ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\tconst DependencyHook = extendedWindow.$e?.modules?.hookData?.Dependency;\n\n\tif ( ! DependencyHook ) {\n\t\treturn Promise.reject( '`$e.modules.hookData.Dependency` is not available' );\n\t}\n\n\tconst __hookId = ++hookId;\n\n\tconst dependencyHook = new ( class extends DependencyHook {\n\t\tgetCommand() {\n\t\t\treturn command;\n\t\t}\n\n\t\tgetId() {\n\t\t\treturn `${ command }--block--${ __hookId }`;\n\t\t}\n\n\t\tapply( args: UnknownArgs ) {\n\t\t\t// If the condition is met, we will stop the original command from running.\n\t\t\tconst shouldStopOriginalAction = condition( args );\n\n\t\t\t// We will return `false` if we want to stop the original action from running.\n\t\t\treturn ! shouldStopOriginalAction;\n\t\t}\n\t} )();\n\n\ttry {\n\t\treturn Promise.resolve( dependencyHook.register() );\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\nexport const editModeChangeEvent = () => {\n\treturn windowEvent( 'elementor/edit-mode/change' );\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 function isRouteActive( route: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn !! extendedWindow.$e?.routes?.isPartOf( route );\n}\n\nexport function getCurrentEditMode() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.dataEditMode?.request?.( 'activeMode' );\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 { editModeChangeEvent } from '../listeners';\nimport { getCurrentEditMode } from '../readers';\nimport useListenTo from './use-listen-to';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo( editModeChangeEvent(), () => getCurrentEditMode() === 'preview' );\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 { type RouteEventDescriptor } from '../listeners';\nimport useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\n\ntype Options = {\n\tblockOnKitRoutes?: boolean;\n\tblockOnPreviewMode?: boolean;\n};\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor[ 'name' ],\n\t{ blockOnKitRoutes = true, blockOnPreviewMode = true }: Options = {}\n) {\n\tconst isRouteActive = useIsRouteActive( route );\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\tconst isPreviewMode = useIsPreviewMode();\n\n\tconst isActive = isRouteActive && ! ( blockOnPreviewMode && isPreviewMode );\n\n\tconst isBlocked = ( blockOnPreviewMode && isPreviewMode ) || ( blockOnKitRoutes && isKitRouteActive );\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\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\nexport const 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","import { getHistoryManager } 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 > = (\n\tpayload: TPayload,\n\tdoReturn: Awaited< TDoReturn >\n) => string;\n\ntype Actions< TPayload extends Payload, TDoReturn, TUndoReturn > = {\n\tdo: ( payload: TPayload ) => TDoReturn;\n\tundo: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TUndoReturn;\n\tredo?: ( payload: TPayload, doReturn: Awaited< TDoReturn > ) => TDoReturn;\n};\n\ntype Options< TPayload extends Payload, TDoReturn > = {\n\ttitle: string | LabelGenerator< TPayload, TDoReturn >;\n\tsubtitle?: string | LabelGenerator< TPayload, TDoReturn >;\n};\n\n// Action WITHOUT a payload.\nexport function undoable< TDoReturn, TUndoReturn >(\n\tactions: Actions< undefined, TDoReturn, TUndoReturn >,\n\toptions: Options< undefined, TDoReturn >\n): () => Promise< Awaited< 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, TDoReturn >\n): ( payload: TPayload ) => Promise< Awaited< TDoReturn > >;\n\nexport function undoable< TPayload extends Payload, TDoReturn, TUndoReturn >(\n\tactions: Actions< TPayload, TDoReturn, TUndoReturn >,\n\toptions: Options< TPayload, TDoReturn >\n): ( payload?: Payload ) => Promise< Awaited< TDoReturn > > {\n\tactions.redo ??= ( payload ) => actions.do( payload );\n\n\treturn async ( payload ): Promise< Awaited< TDoReturn > > => {\n\t\tconst _payload = payload as TPayload;\n\t\tconst _actions = actions as Required< Actions< TPayload, TDoReturn, TUndoReturn > >;\n\n\t\tconst history = getHistoryManager();\n\n\t\tconst result = await _actions.do( _payload );\n\n\t\thistory.addItem( {\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\tisRedo ? _actions.redo( _payload, result ) : _actions.undo( _payload, result ),\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"],"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": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
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": "
|
|
42
|
+
"@elementor/utils": "0.3.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"react": "^18.3.1"
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { type ExtendedWindow } from './types';
|
|
2
2
|
import { isJQueryDeferred, promisifyJQueryDeferred } from './utils';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if ( ! extendedWindow.$e?.run ) {
|
|
8
|
-
return Promise.reject( '`$e.run()` is not available' );
|
|
9
|
-
}
|
|
4
|
+
type RunCommandOptions = {
|
|
5
|
+
internal?: boolean;
|
|
6
|
+
};
|
|
10
7
|
|
|
11
|
-
|
|
8
|
+
export async function runCommand( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {
|
|
9
|
+
const result = runCommandSync( command, args, { internal } );
|
|
12
10
|
|
|
13
11
|
if ( result instanceof Promise ) {
|
|
14
12
|
return result;
|
|
@@ -21,6 +19,20 @@ export function runCommand( command: string, args?: object ) {
|
|
|
21
19
|
return Promise.resolve( result );
|
|
22
20
|
}
|
|
23
21
|
|
|
22
|
+
export function runCommandSync( command: string, args?: object, { internal = false }: RunCommandOptions = {} ) {
|
|
23
|
+
const extendedWindow = window as unknown as ExtendedWindow;
|
|
24
|
+
|
|
25
|
+
const run = internal ? extendedWindow.$e?.internal : extendedWindow.$e?.run;
|
|
26
|
+
|
|
27
|
+
if ( ! run ) {
|
|
28
|
+
const runnerName = internal ? '$e.internal' : '$e.run';
|
|
29
|
+
|
|
30
|
+
throw new Error( `\`${ runnerName }()\` is not available` );
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return run( command, args );
|
|
34
|
+
}
|
|
35
|
+
|
|
24
36
|
export function openRoute( route: string ) {
|
|
25
37
|
const extendedWindow = window as unknown as ExtendedWindow;
|
|
26
38
|
|
package/src/dispatchers/types.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import { type V1Element } from '@elementor/editor-elements';
|
|
2
|
+
|
|
1
3
|
export type jQueryDeferred< T > = {
|
|
2
4
|
then: < U >( onFulfill: ( value: T ) => U, onReject?: ( error: unknown ) => U ) => jQueryDeferred< U >;
|
|
3
5
|
};
|
|
4
6
|
|
|
5
7
|
export type ExtendedWindow = Window & {
|
|
6
8
|
$e: {
|
|
7
|
-
run
|
|
8
|
-
|
|
9
|
+
run?: ( command: string, args?: object ) => unknown;
|
|
10
|
+
internal?: ( command: string, args?: object ) => unknown;
|
|
11
|
+
route?: ( route: string ) => unknown;
|
|
9
12
|
routes?: {
|
|
10
13
|
register?: ( component: string, route: string, callback: () => unknown ) => unknown;
|
|
11
14
|
};
|
|
@@ -15,6 +18,9 @@ export type ExtendedWindow = Window & {
|
|
|
15
18
|
};
|
|
16
19
|
};
|
|
17
20
|
};
|
|
21
|
+
elementor?: {
|
|
22
|
+
getContainer?: ( id: string ) => V1Element;
|
|
23
|
+
};
|
|
18
24
|
};
|
|
19
25
|
|
|
20
26
|
export declare class DependencyHook {
|