@elementor/editor-responsive 0.11.0 → 0.12.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,6 +3,18 @@
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.12.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-responsive@0.11.1...@elementor/editor-responsive@0.12.0) (2024-08-06)
7
+
8
+ ### Features
9
+
10
+ - **editor-style:** style renderer package for atomic widgets [EDS-278] ([#213](https://github.com/elementor/elementor-packages/issues/213)) ([f80501b](https://github.com/elementor/elementor-packages/commit/f80501b17567fe3bb427655ee77013a61168f88f))
11
+
12
+ ## [0.11.1](https://github.com/elementor/elementor-packages/compare/@elementor/editor-responsive@0.11.0...@elementor/editor-responsive@0.11.1) (2024-08-05)
13
+
14
+ ### Bug Fixes
15
+
16
+ - publish only necessary files to npm ([#226](https://github.com/elementor/elementor-packages/issues/226)) ([d808e2f](https://github.com/elementor/elementor-packages/commit/d808e2f60eb7ca2d7b8560d0b79c0e62c2f969a8))
17
+
6
18
  # [0.11.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-responsive@0.10.6...@elementor/editor-responsive@0.11.0) (2024-07-18)
7
19
 
8
20
  ### Features
package/dist/index.d.mts CHANGED
@@ -1,3 +1,5 @@
1
+ declare function useBreakpoints(): Breakpoint[];
2
+
1
3
  type BreakpointId = 'widescreen' | 'desktop' | 'laptop' | 'tablet_extra' | 'tablet' | 'mobile_extra' | 'mobile';
2
4
  type BreakpointSize = number;
3
5
  type BreakpointLabel = string;
@@ -7,11 +9,12 @@ type Breakpoint = {
7
9
  width?: BreakpointSize;
8
10
  type?: 'min-width' | 'max-width';
9
11
  };
10
-
11
- declare function useBreakpoints(): Breakpoint[];
12
+ type Breakpoints = Record<BreakpointId, Breakpoint>;
12
13
 
13
14
  declare function useActiveBreakpoint(): BreakpointId | null;
14
15
 
15
16
  declare function useActivateBreakpoint(): (breakpoint: BreakpointId) => Promise<any>;
16
17
 
17
- export { Breakpoint, BreakpointId, BreakpointSize, useActivateBreakpoint, useActiveBreakpoint, useBreakpoints };
18
+ declare function getBreakpoints(): Breakpoint[];
19
+
20
+ export { Breakpoint, BreakpointId, BreakpointSize, Breakpoints, getBreakpoints, useActivateBreakpoint, useActiveBreakpoint, useBreakpoints };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ declare function useBreakpoints(): Breakpoint[];
2
+
1
3
  type BreakpointId = 'widescreen' | 'desktop' | 'laptop' | 'tablet_extra' | 'tablet' | 'mobile_extra' | 'mobile';
2
4
  type BreakpointSize = number;
3
5
  type BreakpointLabel = string;
@@ -7,11 +9,12 @@ type Breakpoint = {
7
9
  width?: BreakpointSize;
8
10
  type?: 'min-width' | 'max-width';
9
11
  };
10
-
11
- declare function useBreakpoints(): Breakpoint[];
12
+ type Breakpoints = Record<BreakpointId, Breakpoint>;
12
13
 
13
14
  declare function useActiveBreakpoint(): BreakpointId | null;
14
15
 
15
16
  declare function useActivateBreakpoint(): (breakpoint: BreakpointId) => Promise<any>;
16
17
 
17
- export { Breakpoint, BreakpointId, BreakpointSize, useActivateBreakpoint, useActiveBreakpoint, useBreakpoints };
18
+ declare function getBreakpoints(): Breakpoint[];
19
+
20
+ export { Breakpoint, BreakpointId, BreakpointSize, Breakpoints, getBreakpoints, useActivateBreakpoint, useActiveBreakpoint, useBreakpoints };
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
+ getBreakpoints: () => getBreakpoints,
23
24
  useActivateBreakpoint: () => useActivateBreakpoint,
24
25
  useActiveBreakpoint: () => useActiveBreakpoint,
25
26
  useBreakpoints: () => useBreakpoints
@@ -27,11 +28,10 @@ __export(src_exports, {
27
28
  module.exports = __toCommonJS(src_exports);
28
29
 
29
30
  // src/hooks/use-breakpoints.ts
30
- var import_i18n = require("@wordpress/i18n");
31
31
  var import_editor_v1_adapters = require("@elementor/editor-v1-adapters");
32
- function useBreakpoints() {
33
- return (0, import_editor_v1_adapters.__privateUseListenTo)((0, import_editor_v1_adapters.v1ReadyEvent)(), getBreakpoints);
34
- }
32
+
33
+ // src/sync/get-breakpoints.ts
34
+ var import_i18n = require("@wordpress/i18n");
35
35
  function getBreakpoints() {
36
36
  const { breakpoints } = window.elementor?.config?.responsive || {};
37
37
  if (!breakpoints || Object.entries(breakpoints).length === 0) {
@@ -67,6 +67,11 @@ function getBreakpoints() {
67
67
  return [...minWidth.sort(byWidth), ...defaults, ...maxWidth.sort(byWidth)];
68
68
  }
69
69
 
70
+ // src/hooks/use-breakpoints.ts
71
+ function useBreakpoints() {
72
+ return (0, import_editor_v1_adapters.__privateUseListenTo)((0, import_editor_v1_adapters.v1ReadyEvent)(), getBreakpoints);
73
+ }
74
+
70
75
  // src/hooks/use-active-breakpoint.ts
71
76
  var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
72
77
  function useActiveBreakpoint() {
@@ -87,6 +92,7 @@ function useActivateBreakpoint() {
87
92
  }
88
93
  // Annotate the CommonJS export names for ESM import in node:
89
94
  0 && (module.exports = {
95
+ getBreakpoints,
90
96
  useActivateBreakpoint,
91
97
  useActiveBreakpoint,
92
98
  useBreakpoints
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/hooks/use-breakpoints.ts","../src/hooks/use-active-breakpoint.ts","../src/hooks/use-activate-breakpoint.ts"],"sourcesContent":["export { useBreakpoints } from './hooks/use-breakpoints';\nexport { useActiveBreakpoint } from './hooks/use-active-breakpoint';\nexport { useActivateBreakpoint } from './hooks/use-activate-breakpoint';\n\nexport type { BreakpointId, BreakpointSize, Breakpoint } from './types';\n","import { __ } from '@wordpress/i18n';\nimport { Breakpoint, BreakpointId, ExtendedWindow } from '../types';\nimport { v1ReadyEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\n\nexport function useBreakpoints() {\n\treturn useListenTo( v1ReadyEvent(), getBreakpoints );\n}\n\nfunction getBreakpoints() {\n\tconst { breakpoints } = ( window as unknown as ExtendedWindow ).elementor?.config?.responsive || {};\n\n\tif ( ! breakpoints || Object.entries( breakpoints ).length === 0 ) {\n\t\treturn [];\n\t}\n\n\tconst minWidth: Breakpoint[] = [];\n\tconst maxWidth: Breakpoint[] = [];\n\n\tconst defaults: Breakpoint[] = [\n\t\t// Desktop breakpoint is not included in V1 config.\n\t\t{ id: 'desktop', label: __( 'Desktop', 'elementor' ) },\n\t];\n\n\tObject.entries( breakpoints ).forEach( ( [ id, v1Breakpoint ] ) => {\n\t\tif ( ! v1Breakpoint.is_enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst breakpoint: Breakpoint = {\n\t\t\tid: id as BreakpointId,\n\t\t\tlabel: v1Breakpoint.label,\n\t\t\twidth: v1Breakpoint.value,\n\t\t\ttype: v1Breakpoint.direction === 'min' ? 'min-width' : 'max-width',\n\t\t};\n\n\t\tif ( ! breakpoint.width ) {\n\t\t\tdefaults.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'min-width' ) {\n\t\t\tminWidth.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'max-width' ) {\n\t\t\tmaxWidth.push( breakpoint );\n\t\t}\n\t} );\n\n\tconst byWidth = ( a: Breakpoint, b: Breakpoint ) => {\n\t\treturn a.width && b.width ? b.width - a.width : 0;\n\t};\n\n\treturn [ ...minWidth.sort( byWidth ), ...defaults, ...maxWidth.sort( byWidth ) ];\n}\n","import { __privateUseListenTo as useListenTo, windowEvent } from '@elementor/editor-v1-adapters';\nimport { BreakpointId, ExtendedWindow } from '../types';\n\nexport function useActiveBreakpoint(): BreakpointId | null {\n\treturn useListenTo( windowEvent( 'elementor/device-mode/change' ), getActiveBreakpoint );\n}\n\nfunction getActiveBreakpoint() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.deviceMode?.request?.( 'currentMode' ) || null;\n}\n","import { useCallback } from 'react';\nimport { BreakpointId } from '../types';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function useActivateBreakpoint() {\n\treturn useCallback( ( breakpoint: BreakpointId ) => {\n\t\treturn runCommand( 'panel/change-device-mode', { device: breakpoint } );\n\t}, [] );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAAmB;AAEnB,gCAAkE;AAE3D,SAAS,iBAAiB;AAChC,aAAO,0BAAAA,0BAAa,wCAAa,GAAG,cAAe;AACpD;AAEA,SAAS,iBAAiB;AACzB,QAAM,EAAE,YAAY,IAAM,OAAsC,WAAW,QAAQ,cAAc,CAAC;AAElG,MAAK,CAAE,eAAe,OAAO,QAAS,WAAY,EAAE,WAAW,GAAI;AAClE,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,WAAyB,CAAC;AAChC,QAAM,WAAyB,CAAC;AAEhC,QAAM,WAAyB;AAAA;AAAA,IAE9B,EAAE,IAAI,WAAW,WAAO,gBAAI,WAAW,WAAY,EAAE;AAAA,EACtD;AAEA,SAAO,QAAS,WAAY,EAAE,QAAS,CAAE,CAAE,IAAI,YAAa,MAAO;AAClE,QAAK,CAAE,aAAa,YAAa;AAChC;AAAA,IACD;AAEA,UAAM,aAAyB;AAAA,MAC9B;AAAA,MACA,OAAO,aAAa;AAAA,MACpB,OAAO,aAAa;AAAA,MACpB,MAAM,aAAa,cAAc,QAAQ,cAAc;AAAA,IACxD;AAEA,QAAK,CAAE,WAAW,OAAQ;AACzB,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B;AAAA,EACD,CAAE;AAEF,QAAM,UAAU,CAAE,GAAe,MAAmB;AACnD,WAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;AAAA,EACjD;AAEA,SAAO,CAAE,GAAG,SAAS,KAAM,OAAQ,GAAG,GAAG,UAAU,GAAG,SAAS,KAAM,OAAQ,CAAE;AAChF;;;ACjDA,IAAAC,6BAAiE;AAG1D,SAAS,sBAA2C;AAC1D,aAAO,2BAAAC,0BAAa,wCAAa,8BAA+B,GAAG,mBAAoB;AACxF;AAEA,SAAS,sBAAsB;AAC9B,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,UAAU,YAAY,UAAW,aAAc,KAAK;AACtF;;;ACXA,mBAA4B;AAE5B,IAAAC,6BAAkD;AAE3C,SAAS,wBAAwB;AACvC,aAAO,0BAAa,CAAE,eAA8B;AACnD,eAAO,2BAAAC,qBAAY,4BAA4B,EAAE,QAAQ,WAAW,CAAE;AAAA,EACvE,GAAG,CAAC,CAAE;AACP;","names":["useListenTo","import_editor_v1_adapters","useListenTo","import_editor_v1_adapters","runCommand"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/hooks/use-breakpoints.ts","../src/sync/get-breakpoints.ts","../src/hooks/use-active-breakpoint.ts","../src/hooks/use-activate-breakpoint.ts"],"sourcesContent":["export { useBreakpoints } from './hooks/use-breakpoints';\nexport { useActiveBreakpoint } from './hooks/use-active-breakpoint';\nexport { useActivateBreakpoint } from './hooks/use-activate-breakpoint';\nexport { getBreakpoints } from './sync/get-breakpoints';\n\nexport type { BreakpointId, BreakpointSize, Breakpoint, Breakpoints } from './types';\n","import { v1ReadyEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\nimport { getBreakpoints } from '../sync/get-breakpoints';\n\nexport function useBreakpoints() {\n\treturn useListenTo( v1ReadyEvent(), getBreakpoints );\n}\n","import { Breakpoint, BreakpointId, ExtendedWindow } from '../types';\nimport { __ } from '@wordpress/i18n';\n\nexport function getBreakpoints() {\n\tconst { breakpoints } = ( window as unknown as ExtendedWindow ).elementor?.config?.responsive || {};\n\n\tif ( ! breakpoints || Object.entries( breakpoints ).length === 0 ) {\n\t\treturn [];\n\t}\n\n\tconst minWidth: Breakpoint[] = [];\n\tconst maxWidth: Breakpoint[] = [];\n\n\tconst defaults: Breakpoint[] = [\n\t\t// Desktop breakpoint is not included in V1 config.\n\t\t{ id: 'desktop', label: __( 'Desktop', 'elementor' ) },\n\t];\n\n\tObject.entries( breakpoints ).forEach( ( [ id, v1Breakpoint ] ) => {\n\t\tif ( ! v1Breakpoint.is_enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst breakpoint: Breakpoint = {\n\t\t\tid: id as BreakpointId,\n\t\t\tlabel: v1Breakpoint.label,\n\t\t\twidth: v1Breakpoint.value,\n\t\t\ttype: v1Breakpoint.direction === 'min' ? 'min-width' : 'max-width',\n\t\t};\n\n\t\tif ( ! breakpoint.width ) {\n\t\t\tdefaults.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'min-width' ) {\n\t\t\tminWidth.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'max-width' ) {\n\t\t\tmaxWidth.push( breakpoint );\n\t\t}\n\t} );\n\n\tconst byWidth = ( a: Breakpoint, b: Breakpoint ) => {\n\t\treturn a.width && b.width ? b.width - a.width : 0;\n\t};\n\n\treturn [ ...minWidth.sort( byWidth ), ...defaults, ...maxWidth.sort( byWidth ) ];\n}\n","import { __privateUseListenTo as useListenTo, windowEvent } from '@elementor/editor-v1-adapters';\nimport { BreakpointId, ExtendedWindow } from '../types';\n\nexport function useActiveBreakpoint(): BreakpointId | null {\n\treturn useListenTo( windowEvent( 'elementor/device-mode/change' ), getActiveBreakpoint );\n}\n\nfunction getActiveBreakpoint() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.deviceMode?.request?.( 'currentMode' ) || null;\n}\n","import { useCallback } from 'react';\nimport { BreakpointId } from '../types';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function useActivateBreakpoint() {\n\treturn useCallback( ( breakpoint: BreakpointId ) => {\n\t\treturn runCommand( 'panel/change-device-mode', { device: breakpoint } );\n\t}, [] );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gCAAkE;;;ACClE,kBAAmB;AAEZ,SAAS,iBAAiB;AAChC,QAAM,EAAE,YAAY,IAAM,OAAsC,WAAW,QAAQ,cAAc,CAAC;AAElG,MAAK,CAAE,eAAe,OAAO,QAAS,WAAY,EAAE,WAAW,GAAI;AAClE,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,WAAyB,CAAC;AAChC,QAAM,WAAyB,CAAC;AAEhC,QAAM,WAAyB;AAAA;AAAA,IAE9B,EAAE,IAAI,WAAW,WAAO,gBAAI,WAAW,WAAY,EAAE;AAAA,EACtD;AAEA,SAAO,QAAS,WAAY,EAAE,QAAS,CAAE,CAAE,IAAI,YAAa,MAAO;AAClE,QAAK,CAAE,aAAa,YAAa;AAChC;AAAA,IACD;AAEA,UAAM,aAAyB;AAAA,MAC9B;AAAA,MACA,OAAO,aAAa;AAAA,MACpB,OAAO,aAAa;AAAA,MACpB,MAAM,aAAa,cAAc,QAAQ,cAAc;AAAA,IACxD;AAEA,QAAK,CAAE,WAAW,OAAQ;AACzB,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B;AAAA,EACD,CAAE;AAEF,QAAM,UAAU,CAAE,GAAe,MAAmB;AACnD,WAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;AAAA,EACjD;AAEA,SAAO,CAAE,GAAG,SAAS,KAAM,OAAQ,GAAG,GAAG,UAAU,GAAG,SAAS,KAAM,OAAQ,CAAE;AAChF;;;ADzCO,SAAS,iBAAiB;AAChC,aAAO,0BAAAA,0BAAa,wCAAa,GAAG,cAAe;AACpD;;;AELA,IAAAC,6BAAiE;AAG1D,SAAS,sBAA2C;AAC1D,aAAO,2BAAAC,0BAAa,wCAAa,8BAA+B,GAAG,mBAAoB;AACxF;AAEA,SAAS,sBAAsB;AAC9B,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,UAAU,YAAY,UAAW,aAAc,KAAK;AACtF;;;ACXA,mBAA4B;AAE5B,IAAAC,6BAAkD;AAE3C,SAAS,wBAAwB;AACvC,aAAO,0BAAa,CAAE,eAA8B;AACnD,eAAO,2BAAAC,qBAAY,4BAA4B,EAAE,QAAQ,WAAW,CAAE;AAAA,EACvE,GAAG,CAAC,CAAE;AACP;","names":["useListenTo","import_editor_v1_adapters","useListenTo","import_editor_v1_adapters","runCommand"]}
package/dist/index.mjs CHANGED
@@ -1,9 +1,8 @@
1
1
  // src/hooks/use-breakpoints.ts
2
- import { __ } from "@wordpress/i18n";
3
2
  import { v1ReadyEvent, __privateUseListenTo as useListenTo } from "@elementor/editor-v1-adapters";
4
- function useBreakpoints() {
5
- return useListenTo(v1ReadyEvent(), getBreakpoints);
6
- }
3
+
4
+ // src/sync/get-breakpoints.ts
5
+ import { __ } from "@wordpress/i18n";
7
6
  function getBreakpoints() {
8
7
  const { breakpoints } = window.elementor?.config?.responsive || {};
9
8
  if (!breakpoints || Object.entries(breakpoints).length === 0) {
@@ -39,6 +38,11 @@ function getBreakpoints() {
39
38
  return [...minWidth.sort(byWidth), ...defaults, ...maxWidth.sort(byWidth)];
40
39
  }
41
40
 
41
+ // src/hooks/use-breakpoints.ts
42
+ function useBreakpoints() {
43
+ return useListenTo(v1ReadyEvent(), getBreakpoints);
44
+ }
45
+
42
46
  // src/hooks/use-active-breakpoint.ts
43
47
  import { __privateUseListenTo as useListenTo2, windowEvent } from "@elementor/editor-v1-adapters";
44
48
  function useActiveBreakpoint() {
@@ -58,6 +62,7 @@ function useActivateBreakpoint() {
58
62
  }, []);
59
63
  }
60
64
  export {
65
+ getBreakpoints,
61
66
  useActivateBreakpoint,
62
67
  useActiveBreakpoint,
63
68
  useBreakpoints
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/use-breakpoints.ts","../src/hooks/use-active-breakpoint.ts","../src/hooks/use-activate-breakpoint.ts"],"sourcesContent":["import { __ } from '@wordpress/i18n';\nimport { Breakpoint, BreakpointId, ExtendedWindow } from '../types';\nimport { v1ReadyEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\n\nexport function useBreakpoints() {\n\treturn useListenTo( v1ReadyEvent(), getBreakpoints );\n}\n\nfunction getBreakpoints() {\n\tconst { breakpoints } = ( window as unknown as ExtendedWindow ).elementor?.config?.responsive || {};\n\n\tif ( ! breakpoints || Object.entries( breakpoints ).length === 0 ) {\n\t\treturn [];\n\t}\n\n\tconst minWidth: Breakpoint[] = [];\n\tconst maxWidth: Breakpoint[] = [];\n\n\tconst defaults: Breakpoint[] = [\n\t\t// Desktop breakpoint is not included in V1 config.\n\t\t{ id: 'desktop', label: __( 'Desktop', 'elementor' ) },\n\t];\n\n\tObject.entries( breakpoints ).forEach( ( [ id, v1Breakpoint ] ) => {\n\t\tif ( ! v1Breakpoint.is_enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst breakpoint: Breakpoint = {\n\t\t\tid: id as BreakpointId,\n\t\t\tlabel: v1Breakpoint.label,\n\t\t\twidth: v1Breakpoint.value,\n\t\t\ttype: v1Breakpoint.direction === 'min' ? 'min-width' : 'max-width',\n\t\t};\n\n\t\tif ( ! breakpoint.width ) {\n\t\t\tdefaults.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'min-width' ) {\n\t\t\tminWidth.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'max-width' ) {\n\t\t\tmaxWidth.push( breakpoint );\n\t\t}\n\t} );\n\n\tconst byWidth = ( a: Breakpoint, b: Breakpoint ) => {\n\t\treturn a.width && b.width ? b.width - a.width : 0;\n\t};\n\n\treturn [ ...minWidth.sort( byWidth ), ...defaults, ...maxWidth.sort( byWidth ) ];\n}\n","import { __privateUseListenTo as useListenTo, windowEvent } from '@elementor/editor-v1-adapters';\nimport { BreakpointId, ExtendedWindow } from '../types';\n\nexport function useActiveBreakpoint(): BreakpointId | null {\n\treturn useListenTo( windowEvent( 'elementor/device-mode/change' ), getActiveBreakpoint );\n}\n\nfunction getActiveBreakpoint() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.deviceMode?.request?.( 'currentMode' ) || null;\n}\n","import { useCallback } from 'react';\nimport { BreakpointId } from '../types';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function useActivateBreakpoint() {\n\treturn useCallback( ( breakpoint: BreakpointId ) => {\n\t\treturn runCommand( 'panel/change-device-mode', { device: breakpoint } );\n\t}, [] );\n}\n"],"mappings":";AAAA,SAAS,UAAU;AAEnB,SAAS,cAAc,wBAAwB,mBAAmB;AAE3D,SAAS,iBAAiB;AAChC,SAAO,YAAa,aAAa,GAAG,cAAe;AACpD;AAEA,SAAS,iBAAiB;AACzB,QAAM,EAAE,YAAY,IAAM,OAAsC,WAAW,QAAQ,cAAc,CAAC;AAElG,MAAK,CAAE,eAAe,OAAO,QAAS,WAAY,EAAE,WAAW,GAAI;AAClE,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,WAAyB,CAAC;AAChC,QAAM,WAAyB,CAAC;AAEhC,QAAM,WAAyB;AAAA;AAAA,IAE9B,EAAE,IAAI,WAAW,OAAO,GAAI,WAAW,WAAY,EAAE;AAAA,EACtD;AAEA,SAAO,QAAS,WAAY,EAAE,QAAS,CAAE,CAAE,IAAI,YAAa,MAAO;AAClE,QAAK,CAAE,aAAa,YAAa;AAChC;AAAA,IACD;AAEA,UAAM,aAAyB;AAAA,MAC9B;AAAA,MACA,OAAO,aAAa;AAAA,MACpB,OAAO,aAAa;AAAA,MACpB,MAAM,aAAa,cAAc,QAAQ,cAAc;AAAA,IACxD;AAEA,QAAK,CAAE,WAAW,OAAQ;AACzB,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B;AAAA,EACD,CAAE;AAEF,QAAM,UAAU,CAAE,GAAe,MAAmB;AACnD,WAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;AAAA,EACjD;AAEA,SAAO,CAAE,GAAG,SAAS,KAAM,OAAQ,GAAG,GAAG,UAAU,GAAG,SAAS,KAAM,OAAQ,CAAE;AAChF;;;ACjDA,SAAS,wBAAwBA,cAAa,mBAAmB;AAG1D,SAAS,sBAA2C;AAC1D,SAAOA,aAAa,YAAa,8BAA+B,GAAG,mBAAoB;AACxF;AAEA,SAAS,sBAAsB;AAC9B,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,UAAU,YAAY,UAAW,aAAc,KAAK;AACtF;;;ACXA,SAAS,mBAAmB;AAE5B,SAAS,uBAAuB,kBAAkB;AAE3C,SAAS,wBAAwB;AACvC,SAAO,YAAa,CAAE,eAA8B;AACnD,WAAO,WAAY,4BAA4B,EAAE,QAAQ,WAAW,CAAE;AAAA,EACvE,GAAG,CAAC,CAAE;AACP;","names":["useListenTo"]}
1
+ {"version":3,"sources":["../src/hooks/use-breakpoints.ts","../src/sync/get-breakpoints.ts","../src/hooks/use-active-breakpoint.ts","../src/hooks/use-activate-breakpoint.ts"],"sourcesContent":["import { v1ReadyEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\nimport { getBreakpoints } from '../sync/get-breakpoints';\n\nexport function useBreakpoints() {\n\treturn useListenTo( v1ReadyEvent(), getBreakpoints );\n}\n","import { Breakpoint, BreakpointId, ExtendedWindow } from '../types';\nimport { __ } from '@wordpress/i18n';\n\nexport function getBreakpoints() {\n\tconst { breakpoints } = ( window as unknown as ExtendedWindow ).elementor?.config?.responsive || {};\n\n\tif ( ! breakpoints || Object.entries( breakpoints ).length === 0 ) {\n\t\treturn [];\n\t}\n\n\tconst minWidth: Breakpoint[] = [];\n\tconst maxWidth: Breakpoint[] = [];\n\n\tconst defaults: Breakpoint[] = [\n\t\t// Desktop breakpoint is not included in V1 config.\n\t\t{ id: 'desktop', label: __( 'Desktop', 'elementor' ) },\n\t];\n\n\tObject.entries( breakpoints ).forEach( ( [ id, v1Breakpoint ] ) => {\n\t\tif ( ! v1Breakpoint.is_enabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst breakpoint: Breakpoint = {\n\t\t\tid: id as BreakpointId,\n\t\t\tlabel: v1Breakpoint.label,\n\t\t\twidth: v1Breakpoint.value,\n\t\t\ttype: v1Breakpoint.direction === 'min' ? 'min-width' : 'max-width',\n\t\t};\n\n\t\tif ( ! breakpoint.width ) {\n\t\t\tdefaults.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'min-width' ) {\n\t\t\tminWidth.push( breakpoint );\n\t\t} else if ( breakpoint.type === 'max-width' ) {\n\t\t\tmaxWidth.push( breakpoint );\n\t\t}\n\t} );\n\n\tconst byWidth = ( a: Breakpoint, b: Breakpoint ) => {\n\t\treturn a.width && b.width ? b.width - a.width : 0;\n\t};\n\n\treturn [ ...minWidth.sort( byWidth ), ...defaults, ...maxWidth.sort( byWidth ) ];\n}\n","import { __privateUseListenTo as useListenTo, windowEvent } from '@elementor/editor-v1-adapters';\nimport { BreakpointId, ExtendedWindow } from '../types';\n\nexport function useActiveBreakpoint(): BreakpointId | null {\n\treturn useListenTo( windowEvent( 'elementor/device-mode/change' ), getActiveBreakpoint );\n}\n\nfunction getActiveBreakpoint() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.channels?.deviceMode?.request?.( 'currentMode' ) || null;\n}\n","import { useCallback } from 'react';\nimport { BreakpointId } from '../types';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function useActivateBreakpoint() {\n\treturn useCallback( ( breakpoint: BreakpointId ) => {\n\t\treturn runCommand( 'panel/change-device-mode', { device: breakpoint } );\n\t}, [] );\n}\n"],"mappings":";AAAA,SAAS,cAAc,wBAAwB,mBAAmB;;;ACClE,SAAS,UAAU;AAEZ,SAAS,iBAAiB;AAChC,QAAM,EAAE,YAAY,IAAM,OAAsC,WAAW,QAAQ,cAAc,CAAC;AAElG,MAAK,CAAE,eAAe,OAAO,QAAS,WAAY,EAAE,WAAW,GAAI;AAClE,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,WAAyB,CAAC;AAChC,QAAM,WAAyB,CAAC;AAEhC,QAAM,WAAyB;AAAA;AAAA,IAE9B,EAAE,IAAI,WAAW,OAAO,GAAI,WAAW,WAAY,EAAE;AAAA,EACtD;AAEA,SAAO,QAAS,WAAY,EAAE,QAAS,CAAE,CAAE,IAAI,YAAa,MAAO;AAClE,QAAK,CAAE,aAAa,YAAa;AAChC;AAAA,IACD;AAEA,UAAM,aAAyB;AAAA,MAC9B;AAAA,MACA,OAAO,aAAa;AAAA,MACpB,OAAO,aAAa;AAAA,MACpB,MAAM,aAAa,cAAc,QAAQ,cAAc;AAAA,IACxD;AAEA,QAAK,CAAE,WAAW,OAAQ;AACzB,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B,WAAY,WAAW,SAAS,aAAc;AAC7C,eAAS,KAAM,UAAW;AAAA,IAC3B;AAAA,EACD,CAAE;AAEF,QAAM,UAAU,CAAE,GAAe,MAAmB;AACnD,WAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;AAAA,EACjD;AAEA,SAAO,CAAE,GAAG,SAAS,KAAM,OAAQ,GAAG,GAAG,UAAU,GAAG,SAAS,KAAM,OAAQ,CAAE;AAChF;;;ADzCO,SAAS,iBAAiB;AAChC,SAAO,YAAa,aAAa,GAAG,cAAe;AACpD;;;AELA,SAAS,wBAAwBA,cAAa,mBAAmB;AAG1D,SAAS,sBAA2C;AAC1D,SAAOA,aAAa,YAAa,8BAA+B,GAAG,mBAAoB;AACxF;AAEA,SAAS,sBAAsB;AAC9B,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,UAAU,YAAY,UAAW,aAAc,KAAK;AACtF;;;ACXA,SAAS,mBAAmB;AAE5B,SAAS,uBAAuB,kBAAkB;AAE3C,SAAS,wBAAwB;AACvC,SAAO,YAAa,CAAE,eAA8B;AACnD,WAAO,WAAY,4BAA4B,EAAE,QAAQ,WAAW,CAAE;AAAA,EACvE,GAAG,CAAC,CAAE;AACP;","names":["useListenTo"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-responsive",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "private": false,
5
5
  "author": "Elementor Team",
6
6
  "homepage": "https://elementor.com/",
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "repository": {
20
20
  "type": "git",
21
- "url": "https://github.com/elementor/elementor-packages.git",
21
+ "url": "git+https://github.com/elementor/elementor-packages.git",
22
22
  "directory": "packages/libs/editor-responsive"
23
23
  },
24
24
  "bugs": {
@@ -27,16 +27,23 @@
27
27
  "publishConfig": {
28
28
  "access": "public"
29
29
  },
30
+ "files": [
31
+ "README.md",
32
+ "CHANGELOG.md",
33
+ "/dist",
34
+ "/src",
35
+ "!**/__tests__"
36
+ ],
30
37
  "scripts": {
31
38
  "build": "tsup --config=../../tsup.build.ts",
32
39
  "dev": "tsup --config=../../tsup.dev.ts"
33
40
  },
34
41
  "dependencies": {
35
- "@elementor/editor-v1-adapters": "^0.8.0",
42
+ "@elementor/editor-v1-adapters": "^0.8.1",
36
43
  "@wordpress/i18n": "^4.45.0"
37
44
  },
38
45
  "peerDependencies": {
39
46
  "react": "^18.3.1"
40
47
  },
41
- "gitHead": "7d626115b07f3425b679f7508230f7776f3fe17b"
48
+ "gitHead": "9bb2a2ab74c81e97ba6a060ab2867efb15b9e5c4"
42
49
  }
@@ -1,50 +1,6 @@
1
- import { __ } from '@wordpress/i18n';
2
- import { Breakpoint, BreakpointId, ExtendedWindow } from '../types';
3
1
  import { v1ReadyEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';
2
+ import { getBreakpoints } from '../sync/get-breakpoints';
4
3
 
5
4
  export function useBreakpoints() {
6
5
  return useListenTo( v1ReadyEvent(), getBreakpoints );
7
6
  }
8
-
9
- function getBreakpoints() {
10
- const { breakpoints } = ( window as unknown as ExtendedWindow ).elementor?.config?.responsive || {};
11
-
12
- if ( ! breakpoints || Object.entries( breakpoints ).length === 0 ) {
13
- return [];
14
- }
15
-
16
- const minWidth: Breakpoint[] = [];
17
- const maxWidth: Breakpoint[] = [];
18
-
19
- const defaults: Breakpoint[] = [
20
- // Desktop breakpoint is not included in V1 config.
21
- { id: 'desktop', label: __( 'Desktop', 'elementor' ) },
22
- ];
23
-
24
- Object.entries( breakpoints ).forEach( ( [ id, v1Breakpoint ] ) => {
25
- if ( ! v1Breakpoint.is_enabled ) {
26
- return;
27
- }
28
-
29
- const breakpoint: Breakpoint = {
30
- id: id as BreakpointId,
31
- label: v1Breakpoint.label,
32
- width: v1Breakpoint.value,
33
- type: v1Breakpoint.direction === 'min' ? 'min-width' : 'max-width',
34
- };
35
-
36
- if ( ! breakpoint.width ) {
37
- defaults.push( breakpoint );
38
- } else if ( breakpoint.type === 'min-width' ) {
39
- minWidth.push( breakpoint );
40
- } else if ( breakpoint.type === 'max-width' ) {
41
- maxWidth.push( breakpoint );
42
- }
43
- } );
44
-
45
- const byWidth = ( a: Breakpoint, b: Breakpoint ) => {
46
- return a.width && b.width ? b.width - a.width : 0;
47
- };
48
-
49
- return [ ...minWidth.sort( byWidth ), ...defaults, ...maxWidth.sort( byWidth ) ];
50
- }
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { useBreakpoints } from './hooks/use-breakpoints';
2
2
  export { useActiveBreakpoint } from './hooks/use-active-breakpoint';
3
3
  export { useActivateBreakpoint } from './hooks/use-activate-breakpoint';
4
+ export { getBreakpoints } from './sync/get-breakpoints';
4
5
 
5
- export type { BreakpointId, BreakpointSize, Breakpoint } from './types';
6
+ export type { BreakpointId, BreakpointSize, Breakpoint, Breakpoints } from './types';
@@ -0,0 +1,45 @@
1
+ import { Breakpoint, BreakpointId, ExtendedWindow } from '../types';
2
+ import { __ } from '@wordpress/i18n';
3
+
4
+ export function getBreakpoints() {
5
+ const { breakpoints } = ( window as unknown as ExtendedWindow ).elementor?.config?.responsive || {};
6
+
7
+ if ( ! breakpoints || Object.entries( breakpoints ).length === 0 ) {
8
+ return [];
9
+ }
10
+
11
+ const minWidth: Breakpoint[] = [];
12
+ const maxWidth: Breakpoint[] = [];
13
+
14
+ const defaults: Breakpoint[] = [
15
+ // Desktop breakpoint is not included in V1 config.
16
+ { id: 'desktop', label: __( 'Desktop', 'elementor' ) },
17
+ ];
18
+
19
+ Object.entries( breakpoints ).forEach( ( [ id, v1Breakpoint ] ) => {
20
+ if ( ! v1Breakpoint.is_enabled ) {
21
+ return;
22
+ }
23
+
24
+ const breakpoint: Breakpoint = {
25
+ id: id as BreakpointId,
26
+ label: v1Breakpoint.label,
27
+ width: v1Breakpoint.value,
28
+ type: v1Breakpoint.direction === 'min' ? 'min-width' : 'max-width',
29
+ };
30
+
31
+ if ( ! breakpoint.width ) {
32
+ defaults.push( breakpoint );
33
+ } else if ( breakpoint.type === 'min-width' ) {
34
+ minWidth.push( breakpoint );
35
+ } else if ( breakpoint.type === 'max-width' ) {
36
+ maxWidth.push( breakpoint );
37
+ }
38
+ } );
39
+
40
+ const byWidth = ( a: Breakpoint, b: Breakpoint ) => {
41
+ return a.width && b.width ? b.width - a.width : 0;
42
+ };
43
+
44
+ return [ ...minWidth.sort( byWidth ), ...defaults, ...maxWidth.sort( byWidth ) ];
45
+ }
package/src/types.ts CHANGED
@@ -11,6 +11,8 @@ export type Breakpoint = {
11
11
  type?: 'min-width' | 'max-width';
12
12
  };
13
13
 
14
+ export type Breakpoints = Record< BreakpointId, Breakpoint >;
15
+
14
16
  export type V1Breakpoint = {
15
17
  direction: 'min' | 'max';
16
18
  is_enabled: boolean;
@@ -1,20 +0,0 @@
1
- import { renderHook } from '@testing-library/react';
2
- import { useActivateBreakpoint } from '../use-activate-breakpoint';
3
- import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';
4
-
5
- jest.mock( '@elementor/editor-v1-adapters', () => ( {
6
- __privateRunCommand: jest.fn(),
7
- } ) );
8
-
9
- describe( 'useActivateBreakpoints', () => {
10
- it( 'should activate a breakpoint', () => {
11
- // Act.
12
- const { result } = renderHook( useActivateBreakpoint );
13
-
14
- result.current( 'tablet' );
15
-
16
- // Assert.
17
- expect( jest.mocked( runCommand ) ).toHaveBeenCalledTimes( 1 );
18
- expect( jest.mocked( runCommand ) ).toHaveBeenCalledWith( 'panel/change-device-mode', { device: 'tablet' } );
19
- } );
20
- } );
@@ -1,50 +0,0 @@
1
- import { act, renderHook } from '@testing-library/react';
2
- import { useActiveBreakpoint } from '../use-active-breakpoint';
3
- import { BreakpointId, ExtendedWindow } from '../../types';
4
- import { dispatchWindowEvent } from 'test-utils';
5
-
6
- describe( 'useActiveBreakpoint', () => {
7
- function setActiveBreakpoint( active: BreakpointId ) {
8
- const extendedWindow = window as unknown as ExtendedWindow;
9
-
10
- extendedWindow.elementor = {
11
- channels: {
12
- deviceMode: {
13
- request: () => {
14
- return active;
15
- },
16
- },
17
- },
18
- };
19
-
20
- dispatchWindowEvent( 'elementor/device-mode/change' );
21
- }
22
-
23
- it( 'should return null when no breakpoint is active', () => {
24
- // Arrange.
25
- setActiveBreakpoint( undefined as never );
26
-
27
- // Act.
28
- const { result } = renderHook( useActiveBreakpoint );
29
-
30
- // Assert.
31
- expect( result.current ).toEqual( null );
32
- } );
33
-
34
- it( 'should return the active breakpoint', () => {
35
- // Arrange.
36
- setActiveBreakpoint( 'mobile' );
37
-
38
- // Act.
39
- const { result } = renderHook( useActiveBreakpoint );
40
-
41
- // Assert.
42
- expect( result.current ).toEqual( 'mobile' );
43
-
44
- // Act.
45
- act( () => setActiveBreakpoint( 'tablet' ) );
46
-
47
- // Assert.
48
- expect( result.current ).toEqual( 'tablet' );
49
- } );
50
- } );
@@ -1,90 +0,0 @@
1
- import { useBreakpoints } from '../use-breakpoints';
2
- import { renderHook } from '@testing-library/react';
3
- import { ExtendedWindow, V1Breakpoints } from '../../types';
4
-
5
- describe( 'useBreakpoints', () => {
6
- function setBreakpoints( breakpoints: Partial< V1Breakpoints > ) {
7
- const extendedWindow = window as unknown as ExtendedWindow;
8
-
9
- extendedWindow.elementor = {
10
- config: {
11
- responsive: {
12
- breakpoints: breakpoints as V1Breakpoints,
13
- },
14
- },
15
- };
16
- }
17
-
18
- it( 'should return an empty array if no breakpoints are available', () => {
19
- // Arrange.
20
- setBreakpoints( {} as never );
21
-
22
- // Act.
23
- const { result } = renderHook( useBreakpoints );
24
-
25
- // Assert.
26
- expect( result.current ).toEqual( [] );
27
- } );
28
-
29
- it( 'should filter out inactive breakpoints', () => {
30
- // Arrange.
31
- setBreakpoints( {
32
- tablet: {
33
- is_enabled: false,
34
- value: 1024,
35
- label: 'Tablet Portrait',
36
- direction: 'max',
37
- },
38
- mobile: {
39
- is_enabled: true,
40
- value: 767,
41
- label: 'Mobile Portrait',
42
- direction: 'max',
43
- },
44
- } );
45
-
46
- // Act.
47
- const { result } = renderHook( useBreakpoints );
48
-
49
- // Assert.
50
- expect( result.current ).toEqual( [
51
- { id: 'desktop', label: 'Desktop' },
52
- { id: 'mobile', label: 'Mobile Portrait', width: 767, type: 'max-width' },
53
- ] );
54
- } );
55
-
56
- it( 'should return all breakpoints sorted by size', () => {
57
- // Arrange.
58
- setBreakpoints( {
59
- tablet: {
60
- is_enabled: true,
61
- value: 1024,
62
- label: 'Tablet Portrait',
63
- direction: 'max',
64
- },
65
- mobile: {
66
- is_enabled: true,
67
- value: 767,
68
- label: 'Mobile Portrait',
69
- direction: 'max',
70
- },
71
- widescreen: {
72
- is_enabled: true,
73
- value: 2400,
74
- label: 'Widescreen',
75
- direction: 'min',
76
- },
77
- } );
78
-
79
- // Act.
80
- const { result } = renderHook( useBreakpoints );
81
-
82
- // Assert.
83
- expect( result.current ).toEqual( [
84
- { id: 'widescreen', label: 'Widescreen', width: 2400, type: 'min-width' },
85
- { id: 'desktop', label: 'Desktop' },
86
- { id: 'tablet', label: 'Tablet Portrait', width: 1024, type: 'max-width' },
87
- { id: 'mobile', label: 'Mobile Portrait', width: 767, type: 'max-width' },
88
- ] );
89
- } );
90
- } );