@elementor/editor-v1-adapters 0.7.0 → 0.8.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 CHANGED
@@ -3,73 +3,48 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- # [0.7.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.6.2...@elementor/editor-v1-adapters@0.7.0) (2024-07-08)
7
-
6
+ # [0.8.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.7.0...@elementor/editor-v1-adapters@0.8.0) (2024-07-16)
8
7
 
9
8
  ### Features
10
9
 
11
- * **editor-editing-panel:** create editor panel package [EDS-226] ([#188](https://github.com/elementor/elementor-packages/issues/188)) ([e361aed](https://github.com/elementor/elementor-packages/commit/e361aed023c3a5d4dd329b354f1403de238da20e))
12
-
10
+ - **editor-editing-panel:** api for selecting and widget type [EDS-244] ([#199](https://github.com/elementor/elementor-packages/issues/199)) ([3e3da8a](https://github.com/elementor/elementor-packages/commit/3e3da8ac1dc37e502991f0905cbe8054422b3b71))
13
11
 
12
+ # [0.7.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.6.2...@elementor/editor-v1-adapters@0.7.0) (2024-07-08)
14
13
 
14
+ ### Features
15
15
 
16
+ - **editor-editing-panel:** create editor panel package [EDS-226] ([#188](https://github.com/elementor/elementor-packages/issues/188)) ([e361aed](https://github.com/elementor/elementor-packages/commit/e361aed023c3a5d4dd329b354f1403de238da20e))
16
17
 
17
18
  ## [0.6.2](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.6.1...@elementor/editor-v1-adapters@0.6.2) (2024-07-03)
18
19
 
19
20
  **Note:** Version bump only for package @elementor/editor-v1-adapters
20
21
 
21
-
22
-
23
-
24
-
25
22
  ## [0.6.1](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.6.0...@elementor/editor-v1-adapters@0.6.1) (2024-07-02)
26
23
 
27
24
  **Note:** Version bump only for package @elementor/editor-v1-adapters
28
25
 
29
-
30
-
31
-
32
-
33
26
  # [0.6.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.5.0...@elementor/editor-v1-adapters@0.6.0) (2023-09-14)
34
27
 
35
-
36
28
  ### Features
37
29
 
38
- * **v1-adapters:** mark private functions [ED-12029] ([#122](https://github.com/elementor/elementor-packages/issues/122)) ([2e79ccc](https://github.com/elementor/elementor-packages/commit/2e79ccc87add5f0508b5a142f9f6d832b4657062))
39
-
40
-
41
-
42
-
30
+ - **v1-adapters:** mark private functions [ED-12029] ([#122](https://github.com/elementor/elementor-packages/issues/122)) ([2e79ccc](https://github.com/elementor/elementor-packages/commit/2e79ccc87add5f0508b5a142f9f6d832b4657062))
43
31
 
44
32
  # [0.5.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.4.0...@elementor/editor-v1-adapters@0.5.0) (2023-06-11)
45
33
 
46
-
47
34
  ### Features
48
35
 
49
- * **editor-panels:** init [ED-10804] ([#44](https://github.com/elementor/elementor-packages/issues/44)) ([1ed4113](https://github.com/elementor/elementor-packages/commit/1ed41131db8fb9151163175bfa614f784159e04b))
50
-
51
-
52
-
53
-
36
+ - **editor-panels:** init [ED-10804] ([#44](https://github.com/elementor/elementor-packages/issues/44)) ([1ed4113](https://github.com/elementor/elementor-packages/commit/1ed41131db8fb9151163175bfa614f784159e04b))
54
37
 
55
38
  # [0.4.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.3.0...@elementor/editor-v1-adapters@0.4.0) (2023-06-06)
56
39
 
57
-
58
40
  ### Features
59
41
 
60
- * drop support for React 17 [ED-10982] ([#50](https://github.com/elementor/elementor-packages/issues/50)) ([59c576c](https://github.com/elementor/elementor-packages/commit/59c576ca218947dc0992616311d4d399a20e91a6))
61
-
62
-
63
-
64
-
42
+ - drop support for React 17 [ED-10982] ([#50](https://github.com/elementor/elementor-packages/issues/50)) ([59c576c](https://github.com/elementor/elementor-packages/commit/59c576ca218947dc0992616311d4d399a20e91a6))
65
43
 
66
44
  # 0.3.0 (2023-06-01)
67
45
 
68
-
69
46
  ### Features
70
47
 
71
- * add support for React 18 [ED-10905] ([#46](https://github.com/elementor/elementor-packages/issues/46)) ([c8915c6](https://github.com/elementor/elementor-packages/commit/c8915c6ea62550bcdeb5c8a576f311bedc35bcad))
72
-
73
-
48
+ - add support for React 18 [ED-10905] ([#46](https://github.com/elementor/elementor-packages/issues/46)) ([c8915c6](https://github.com/elementor/elementor-packages/commit/c8915c6ea62550bcdeb5c8a576f311bedc35bcad))
74
49
 
75
50
  # 0.2.0 (2023-05-09)
package/dist/index.d.mts CHANGED
@@ -74,7 +74,7 @@ type Options = {
74
74
  blockOnKitRoutes?: boolean;
75
75
  blockOnPreviewMode?: boolean;
76
76
  };
77
- declare function useRouteStatus(route: RouteEventDescriptor['name'], { blockOnKitRoutes, blockOnPreviewMode, }?: Options): {
77
+ declare function useRouteStatus(route: RouteEventDescriptor['name'], { blockOnKitRoutes, blockOnPreviewMode }?: Options): {
78
78
  isActive: boolean;
79
79
  isBlocked: boolean;
80
80
  };
package/dist/index.d.ts CHANGED
@@ -74,7 +74,7 @@ type Options = {
74
74
  blockOnKitRoutes?: boolean;
75
75
  blockOnPreviewMode?: boolean;
76
76
  };
77
- declare function useRouteStatus(route: RouteEventDescriptor['name'], { blockOnKitRoutes, blockOnPreviewMode, }?: Options): {
77
+ declare function useRouteStatus(route: RouteEventDescriptor['name'], { blockOnKitRoutes, blockOnPreviewMode }?: Options): {
78
78
  isActive: boolean;
79
79
  isBlocked: boolean;
80
80
  };
package/dist/index.js CHANGED
@@ -75,9 +75,7 @@ function openRoute(route) {
75
75
  return Promise.reject("`$e.route()` is not available");
76
76
  }
77
77
  try {
78
- return Promise.resolve(
79
- extendedWindow.$e.route(route)
80
- );
78
+ return Promise.resolve(extendedWindow.$e.route(route));
81
79
  } catch (e) {
82
80
  return Promise.reject(e);
83
81
  }
@@ -94,9 +92,7 @@ function registerRoute(route) {
94
92
  const componentRoute = routeParts.pop();
95
93
  const component = routeParts.join("/");
96
94
  try {
97
- return Promise.resolve(
98
- extendedWindow.$e.routes.register(component, componentRoute, () => null)
99
- );
95
+ return Promise.resolve(extendedWindow.$e.routes.register(component, componentRoute, () => null));
100
96
  } catch (e) {
101
97
  return Promise.reject(e);
102
98
  }
@@ -283,11 +279,7 @@ function registerWindowEventListener(event, callback) {
283
279
  };
284
280
  }
285
281
  function addListener(event) {
286
- window.addEventListener(
287
- event,
288
- makeEventHandler(event),
289
- { signal: abortController.signal }
290
- );
282
+ window.addEventListener(event, makeEventHandler(event), { signal: abortController.signal });
291
283
  }
292
284
  function makeEventHandler(event) {
293
285
  return (e) => {
@@ -324,29 +316,18 @@ function getCurrentEditMode() {
324
316
 
325
317
  // src/hooks/use-is-preview-mode.ts
326
318
  function useIsPreviewMode() {
327
- return useListenTo(
328
- editModeChangeEvent(),
329
- () => getCurrentEditMode() === "preview"
330
- );
319
+ return useListenTo(editModeChangeEvent(), () => getCurrentEditMode() === "preview");
331
320
  }
332
321
 
333
322
  // src/hooks/use-is-route-active.ts
334
323
  function useIsRouteActive(route) {
335
- return useListenTo(
336
- [
337
- routeOpenEvent(route),
338
- routeCloseEvent(route)
339
- ],
340
- () => isRouteActive(route),
341
- [route]
342
- );
324
+ return useListenTo([routeOpenEvent(route), routeCloseEvent(route)], () => isRouteActive(route), [
325
+ route
326
+ ]);
343
327
  }
344
328
 
345
329
  // src/hooks/use-route-status.ts
346
- function useRouteStatus(route, {
347
- blockOnKitRoutes = true,
348
- blockOnPreviewMode = true
349
- } = {}) {
330
+ function useRouteStatus(route, { blockOnKitRoutes = true, blockOnPreviewMode = true } = {}) {
350
331
  const isRouteActive2 = useIsRouteActive(route);
351
332
  const isKitRouteActive = useIsRouteActive("panel/global");
352
333
  const isPreviewMode = useIsPreviewMode();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/hooks/use-listen-to.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-is-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.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 {\n\tisRouteActive as __privateIsRouteActive,\n\tgetCurrentEditMode as __privateGetCurrentEditMode,\n} from './readers';\n","import { 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 ( !! 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}\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 { 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(\n\t\t\textendedWindow.$e.route( route )\n\t\t);\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(\n\t\t\textendedWindow.$e.routes.register( component, componentRoute, () => null )\n\t\t);\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 { useEffect, useState } from 'react';\nimport { 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 { CommandEventDescriptor, RouteEventDescriptor, 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 { ExtendedWindow, ListenerEvent } from './types';\nimport { setReady } from './is-ready';\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 { normalizeEvent } from './utils';\nimport {\n\tCommandEventDescriptor,\n\tEventDescriptor,\n\tListenerCallback,\n\tRouteEventDescriptor,\n\tWindowEventDescriptor,\n} from './types';\nimport { isReady, setReady } from './is-ready';\n\nconst callbacksByEvent = new Map<EventDescriptor['name'], ListenerCallback[]>();\nlet abortController = new AbortController();\n\nexport function listenTo(\n\teventDescriptors: EventDescriptor | EventDescriptor[],\n\tcallback: ListenerCallback\n) {\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(\n\t\tevent,\n\t\tmakeEventHandler( event ),\n\t\t{ signal: abortController.signal }\n\t);\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 { 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 useListenTo from './use-listen-to';\nimport { getCurrentEditMode } from '../readers';\nimport { editModeChangeEvent } from '../listeners';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo(\n\t\teditModeChangeEvent(),\n\t\t() => getCurrentEditMode() === 'preview'\n\t);\n}\n","import useListenTo from './use-listen-to';\nimport { isRouteActive } from '../readers';\nimport { routeCloseEvent, routeOpenEvent, RouteEventDescriptor } from '../listeners';\n\nexport default function useIsRouteActive( route: RouteEventDescriptor['name'] ) {\n\treturn useListenTo(\n\t\t[\n\t\t\trouteOpenEvent( route ),\n\t\t\trouteCloseEvent( route ),\n\t\t],\n\t\t() => isRouteActive( route ),\n\t\t[ route ]\n\t);\n}\n","import useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\nimport { RouteEventDescriptor } from '../listeners';\n\ntype Options = {\n\tblockOnKitRoutes?: boolean,\n\tblockOnPreviewMode?: boolean,\n}\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor['name'],\n\t{\n\t\tblockOnKitRoutes = true,\n\t\tblockOnPreviewMode = true,\n\t}: 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 = (\n\t\t( blockOnPreviewMode && isPreviewMode ) ||\n\t\t( blockOnKitRoutes && isKitRouteActive )\n\t);\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\n}\n"],"mappings":"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","names":["isRouteActive"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/hooks/use-listen-to.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-is-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.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","import { 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 { 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 { useEffect, useState } from 'react';\nimport { 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 { CommandEventDescriptor, RouteEventDescriptor, 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 { ExtendedWindow, ListenerEvent } from './types';\nimport { setReady } from './is-ready';\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 { normalizeEvent } from './utils';\nimport {\n\tCommandEventDescriptor,\n\tEventDescriptor,\n\tListenerCallback,\n\tRouteEventDescriptor,\n\tWindowEventDescriptor,\n} from './types';\nimport { isReady, setReady } from './is-ready';\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 { 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 useListenTo from './use-listen-to';\nimport { getCurrentEditMode } from '../readers';\nimport { editModeChangeEvent } from '../listeners';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo( editModeChangeEvent(), () => getCurrentEditMode() === 'preview' );\n}\n","import useListenTo from './use-listen-to';\nimport { isRouteActive } from '../readers';\nimport { routeCloseEvent, routeOpenEvent, RouteEventDescriptor } from '../listeners';\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 useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\nimport { RouteEventDescriptor } from '../listeners';\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"],"mappings":"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","names":["isRouteActive"]}
package/dist/index.mjs CHANGED
@@ -29,9 +29,7 @@ function openRoute(route) {
29
29
  return Promise.reject("`$e.route()` is not available");
30
30
  }
31
31
  try {
32
- return Promise.resolve(
33
- extendedWindow.$e.route(route)
34
- );
32
+ return Promise.resolve(extendedWindow.$e.route(route));
35
33
  } catch (e) {
36
34
  return Promise.reject(e);
37
35
  }
@@ -48,9 +46,7 @@ function registerRoute(route) {
48
46
  const componentRoute = routeParts.pop();
49
47
  const component = routeParts.join("/");
50
48
  try {
51
- return Promise.resolve(
52
- extendedWindow.$e.routes.register(component, componentRoute, () => null)
53
- );
49
+ return Promise.resolve(extendedWindow.$e.routes.register(component, componentRoute, () => null));
54
50
  } catch (e) {
55
51
  return Promise.reject(e);
56
52
  }
@@ -237,11 +233,7 @@ function registerWindowEventListener(event, callback) {
237
233
  };
238
234
  }
239
235
  function addListener(event) {
240
- window.addEventListener(
241
- event,
242
- makeEventHandler(event),
243
- { signal: abortController.signal }
244
- );
236
+ window.addEventListener(event, makeEventHandler(event), { signal: abortController.signal });
245
237
  }
246
238
  function makeEventHandler(event) {
247
239
  return (e) => {
@@ -278,29 +270,18 @@ function getCurrentEditMode() {
278
270
 
279
271
  // src/hooks/use-is-preview-mode.ts
280
272
  function useIsPreviewMode() {
281
- return useListenTo(
282
- editModeChangeEvent(),
283
- () => getCurrentEditMode() === "preview"
284
- );
273
+ return useListenTo(editModeChangeEvent(), () => getCurrentEditMode() === "preview");
285
274
  }
286
275
 
287
276
  // src/hooks/use-is-route-active.ts
288
277
  function useIsRouteActive(route) {
289
- return useListenTo(
290
- [
291
- routeOpenEvent(route),
292
- routeCloseEvent(route)
293
- ],
294
- () => isRouteActive(route),
295
- [route]
296
- );
278
+ return useListenTo([routeOpenEvent(route), routeCloseEvent(route)], () => isRouteActive(route), [
279
+ route
280
+ ]);
297
281
  }
298
282
 
299
283
  // src/hooks/use-route-status.ts
300
- function useRouteStatus(route, {
301
- blockOnKitRoutes = true,
302
- blockOnPreviewMode = true
303
- } = {}) {
284
+ function useRouteStatus(route, { blockOnKitRoutes = true, blockOnPreviewMode = true } = {}) {
304
285
  const isRouteActive2 = useIsRouteActive(route);
305
286
  const isKitRouteActive = useIsRouteActive("panel/global");
306
287
  const isPreviewMode = useIsPreviewMode();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/hooks/use-listen-to.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-is-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.ts"],"sourcesContent":["import { 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 ( !! 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}\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 { 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(\n\t\t\textendedWindow.$e.route( route )\n\t\t);\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(\n\t\t\textendedWindow.$e.routes.register( component, componentRoute, () => null )\n\t\t);\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 { useEffect, useState } from 'react';\nimport { 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 { CommandEventDescriptor, RouteEventDescriptor, 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 { ExtendedWindow, ListenerEvent } from './types';\nimport { setReady } from './is-ready';\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 { normalizeEvent } from './utils';\nimport {\n\tCommandEventDescriptor,\n\tEventDescriptor,\n\tListenerCallback,\n\tRouteEventDescriptor,\n\tWindowEventDescriptor,\n} from './types';\nimport { isReady, setReady } from './is-ready';\n\nconst callbacksByEvent = new Map<EventDescriptor['name'], ListenerCallback[]>();\nlet abortController = new AbortController();\n\nexport function listenTo(\n\teventDescriptors: EventDescriptor | EventDescriptor[],\n\tcallback: ListenerCallback\n) {\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(\n\t\tevent,\n\t\tmakeEventHandler( event ),\n\t\t{ signal: abortController.signal }\n\t);\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 { 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 useListenTo from './use-listen-to';\nimport { getCurrentEditMode } from '../readers';\nimport { editModeChangeEvent } from '../listeners';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo(\n\t\teditModeChangeEvent(),\n\t\t() => getCurrentEditMode() === 'preview'\n\t);\n}\n","import useListenTo from './use-listen-to';\nimport { isRouteActive } from '../readers';\nimport { routeCloseEvent, routeOpenEvent, RouteEventDescriptor } from '../listeners';\n\nexport default function useIsRouteActive( route: RouteEventDescriptor['name'] ) {\n\treturn useListenTo(\n\t\t[\n\t\t\trouteOpenEvent( route ),\n\t\t\trouteCloseEvent( route ),\n\t\t],\n\t\t() => isRouteActive( route ),\n\t\t[ route ]\n\t);\n}\n","import useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\nimport { RouteEventDescriptor } from '../listeners';\n\ntype Options = {\n\tblockOnKitRoutes?: boolean,\n\tblockOnPreviewMode?: boolean,\n}\n\nexport default function useRouteStatus(\n\troute: RouteEventDescriptor['name'],\n\t{\n\t\tblockOnKitRoutes = true,\n\t\tblockOnPreviewMode = true,\n\t}: 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 = (\n\t\t( blockOnPreviewMode && isPreviewMode ) ||\n\t\t( blockOnKitRoutes && isKitRouteActive )\n\t);\n\n\treturn {\n\t\tisActive,\n\t\tisBlocked,\n\t};\n}\n"],"mappings":"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","names":["isRouteActive"]}
1
+ {"version":3,"sources":["../src/dispatchers/utils.ts","../src/dispatchers/dispatchers.ts","../src/hooks/use-listen-to.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-is-preview-mode.ts","../src/hooks/use-is-route-active.ts","../src/hooks/use-route-status.ts"],"sourcesContent":["import { 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 { 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 { useEffect, useState } from 'react';\nimport { 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 { CommandEventDescriptor, RouteEventDescriptor, 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 { ExtendedWindow, ListenerEvent } from './types';\nimport { setReady } from './is-ready';\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 { normalizeEvent } from './utils';\nimport {\n\tCommandEventDescriptor,\n\tEventDescriptor,\n\tListenerCallback,\n\tRouteEventDescriptor,\n\tWindowEventDescriptor,\n} from './types';\nimport { isReady, setReady } from './is-ready';\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 { 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 useListenTo from './use-listen-to';\nimport { getCurrentEditMode } from '../readers';\nimport { editModeChangeEvent } from '../listeners';\n\nexport default function useIsPreviewMode() {\n\treturn useListenTo( editModeChangeEvent(), () => getCurrentEditMode() === 'preview' );\n}\n","import useListenTo from './use-listen-to';\nimport { isRouteActive } from '../readers';\nimport { routeCloseEvent, routeOpenEvent, RouteEventDescriptor } from '../listeners';\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 useIsPreviewMode from './use-is-preview-mode';\nimport useIsRouteActive from './use-is-route-active';\nimport { RouteEventDescriptor } from '../listeners';\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"],"mappings":"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","names":["isRouteActive"]}
package/package.json CHANGED
@@ -1,38 +1,38 @@
1
1
  {
2
- "name": "@elementor/editor-v1-adapters",
3
- "version": "0.7.0",
4
- "private": false,
5
- "author": "Elementor Team",
6
- "homepage": "https://elementor.com/",
7
- "license": "GPL-3.0-or-later",
8
- "main": "dist/index.js",
9
- "module": "dist/index.mjs",
10
- "types": "dist/index.d.ts",
11
- "exports": {
12
- ".": {
13
- "import": "./dist/index.mjs",
14
- "require": "./dist/index.js",
15
- "types": "./dist/index.d.ts"
16
- },
17
- "./package.json": "./package.json"
18
- },
19
- "repository": {
20
- "type": "git",
21
- "url": "https://github.com/elementor/elementor-packages.git",
22
- "directory": "packages/core/editor-v1-adapters"
23
- },
24
- "bugs": {
25
- "url": "https://github.com/elementor/elementor-packages/issues"
26
- },
27
- "publishConfig": {
28
- "access": "public"
29
- },
30
- "scripts": {
31
- "build": "tsup --config=../../tsup.build.ts",
32
- "dev": "tsup --config=../../tsup.dev.ts"
33
- },
34
- "peerDependencies": {
35
- "react": "^18.3.1"
36
- },
37
- "gitHead": "33d28e27101a9bf272b11d19d7092830e8cb69d0"
2
+ "name": "@elementor/editor-v1-adapters",
3
+ "version": "0.8.0",
4
+ "private": false,
5
+ "author": "Elementor Team",
6
+ "homepage": "https://elementor.com/",
7
+ "license": "GPL-3.0-or-later",
8
+ "main": "dist/index.js",
9
+ "module": "dist/index.mjs",
10
+ "types": "dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.mjs",
14
+ "require": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ },
17
+ "./package.json": "./package.json"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/elementor/elementor-packages.git",
22
+ "directory": "packages/core/editor-v1-adapters"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/elementor/elementor-packages/issues"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "scripts": {
31
+ "build": "tsup --config=../../tsup.build.ts",
32
+ "dev": "tsup --config=../../tsup.dev.ts"
33
+ },
34
+ "peerDependencies": {
35
+ "react": "^18.3.1"
36
+ },
37
+ "gitHead": "10fd8663495a9ced2521f27a74879684ed0cf322"
38
38
  }
@@ -2,10 +2,7 @@ import { openRoute, blockDataCommand, registerRoute, runCommand } from '../index
2
2
  import { DependencyHook, ExtendedWindow } from '../types';
3
3
 
4
4
  describe( '@elementor/editor-v1-adapters/dispatchers', () => {
5
- let eRun: jest.Mock,
6
- eRoute: jest.Mock,
7
- eRegisterRoute: jest.Mock,
8
- eDependencyRegisterSpy: jest.SpyInstance;
5
+ let eRun: jest.Mock, eRoute: jest.Mock, eRegisterRoute: jest.Mock, eDependencyRegisterSpy: jest.SpyInstance;
9
6
 
10
7
  let hooks: DependencyHook[] = [];
11
8
 
@@ -33,7 +30,10 @@ describe( '@elementor/editor-v1-adapters/dispatchers', () => {
33
30
  eRun = jest.mocked( extendedWindow.$e.run );
34
31
  eRoute = jest.mocked( extendedWindow.$e.route );
35
32
  eRegisterRoute = jest.mocked( extendedWindow.$e?.routes?.register || jest.fn() );
36
- eDependencyRegisterSpy = jest.spyOn( extendedWindow.$e?.modules?.hookData?.Dependency?.prototype as DependencyHook, 'register' );
33
+ eDependencyRegisterSpy = jest.spyOn(
34
+ extendedWindow.$e?.modules?.hookData?.Dependency?.prototype as DependencyHook,
35
+ 'register'
36
+ );
37
37
  } );
38
38
 
39
39
  it( 'should run a V1 command that returns Promise', () => {
@@ -102,9 +102,7 @@ describe( '@elementor/editor-v1-adapters/dispatchers', () => {
102
102
  } );
103
103
 
104
104
  // Act.
105
- expect( () => openRoute( route ) )
106
- .rejects
107
- .toEqual( 'Cannot find test/route' );
105
+ expect( () => openRoute( route ) ).rejects.toEqual( 'Cannot find test/route' );
108
106
  } );
109
107
 
110
108
  it.each( [
@@ -120,27 +118,27 @@ describe( '@elementor/editor-v1-adapters/dispatchers', () => {
120
118
 
121
119
  it( 'should throw if trying to register invalid route', () => {
122
120
  // Act & Assert.
123
- expect( () => registerRoute( 'test' ) )
124
- .rejects
125
- .toEqual( '`test` is an invalid route' );
121
+ expect( () => registerRoute( 'test' ) ).rejects.toEqual( '`test` is an invalid route' );
126
122
  } );
127
123
 
128
124
  it.each( [
129
125
  [ '$e.route()', () => openRoute( 'test/route' ) ],
130
126
  [ '$e.run()', () => runCommand( 'editor/documents/open' ) ],
131
127
  [ '$e.routes.register()', () => registerRoute( 'test/route' ) ],
132
- [ '$e.modules.hookData.Dependency', () => blockDataCommand( {
133
- command: '',
134
- condition: () => true,
135
- } ) ],
128
+ [
129
+ '$e.modules.hookData.Dependency',
130
+ () =>
131
+ blockDataCommand( {
132
+ command: '',
133
+ condition: () => true,
134
+ } ),
135
+ ],
136
136
  ] )( 'should reject when trying to use V1 and `%s` is unavailable', ( v1Method, action ) => {
137
137
  // Arrange.
138
138
  delete ( window as { $e?: unknown } ).$e;
139
139
 
140
140
  // Act & Assert.
141
- expect( () => action() )
142
- .rejects
143
- .toEqual( `\`${ v1Method }\` is not available` );
141
+ expect( () => action() ).rejects.toEqual( `\`${ v1Method }\` is not available` );
144
142
  } );
145
143
 
146
144
  it( 'should register a V1 dependency hook that blocks a V1 command', () => {
@@ -162,12 +160,12 @@ describe( '@elementor/editor-v1-adapters/dispatchers', () => {
162
160
  } );
163
161
 
164
162
  // Act & Assert.
165
- expect( () => blockDataCommand( {
166
- command: '',
167
- condition: () => true,
168
- } ) )
169
- .rejects
170
- .toEqual( 'Error' );
163
+ expect( () =>
164
+ blockDataCommand( {
165
+ command: '',
166
+ condition: () => true,
167
+ } )
168
+ ).rejects.toEqual( 'Error' );
171
169
  } );
172
170
 
173
171
  it( 'should get the right command name, id and condition when blocking a v1 command', () => {