@elementor/editor-panels 0.4.17 → 0.5.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,17 @@
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.5.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-panels@0.4.17...@elementor/editor-panels@0.5.0) (2024-08-05)
7
+
8
+ ### Bug Fixes
9
+
10
+ - publish only necessary files to npm ([#226](https://github.com/elementor/elementor-packages/issues/226)) ([d808e2f](https://github.com/elementor/elementor-packages/commit/d808e2f60eb7ca2d7b8560d0b79c0e62c2f969a8))
11
+
12
+ ### Features
13
+
14
+ - **editor-editing-panel:** change textarea component [EDS-311] ([#221](https://github.com/elementor/elementor-packages/issues/221)) ([a9ab0d5](https://github.com/elementor/elementor-packages/commit/a9ab0d53e87086e323c4f024dca0eae93005e1a1))
15
+ - **editor-editing-panel:** settings and style tabs [EDS-277] ([#217](https://github.com/elementor/elementor-packages/issues/217)) ([c623797](https://github.com/elementor/elementor-packages/commit/c6237974d9940a2b58bdd1df3d835dc828e323f4))
16
+
6
17
  ## [0.4.17](https://github.com/elementor/elementor-packages/compare/@elementor/editor-panels@0.4.16...@elementor/editor-panels@0.4.17) (2024-07-16)
7
18
 
8
19
  **Note:** Version bump only for package @elementor/editor-panels
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elementor/editor-panels",
3
- "version": "0.4.17",
3
+ "version": "0.5.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/core/editor-panels"
23
23
  },
24
24
  "bugs": {
@@ -27,19 +27,26 @@
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": "^0.11.2",
36
- "@elementor/editor-v1-adapters": "^0.8.0",
37
- "@elementor/locations": "^0.7.4",
38
- "@elementor/store": "^0.8.4",
39
- "@elementor/ui": "^1.4.61"
42
+ "@elementor/editor": "^0.12.0",
43
+ "@elementor/editor-v1-adapters": "^0.8.1",
44
+ "@elementor/locations": "^0.7.5",
45
+ "@elementor/store": "^0.8.5",
46
+ "@elementor/ui": "^1.14.2"
40
47
  },
41
48
  "peerDependencies": {
42
49
  "react": "^18.3.1"
43
50
  },
44
- "gitHead": "10fd8663495a9ced2521f27a74879684ed0cf322"
51
+ "gitHead": "f4ca33da0842a29d83736d0a173633085edddaee"
45
52
  }
@@ -1,141 +0,0 @@
1
- import * as React from 'react';
2
- import { __createStore, __registerSlice, __StoreProvider as StoreProvider } from '@elementor/store';
3
- import { slice } from '../store';
4
- import { createPanel, registerPanel } from '../api';
5
- import { fireEvent, render, screen } from '@testing-library/react';
6
- import Panels from '../components/internal/panels';
7
- import { __privateUseRouteStatus as useRouteStatus } from '@elementor/editor-v1-adapters';
8
- import { Panel, PanelBody, PanelHeader, PanelHeaderTitle } from '../components/external';
9
-
10
- jest.mock( '@elementor/editor-v1-adapters', () => ( {
11
- __esModule: true,
12
- ...jest.requireActual( '@elementor/editor-v1-adapters' ),
13
- __privateUseRouteStatus: jest.fn( () => ( {
14
- isActive: false,
15
- isBlocked: false,
16
- } ) ),
17
- } ) );
18
-
19
- describe( '@elementor/editor-panels api', () => {
20
- const { panel, usePanelStatus, usePanelActions } = createPanel( {
21
- id: 'test-panel',
22
- component: () => (
23
- <Panel>
24
- <PanelHeader>
25
- <PanelHeaderTitle>Test Panel Header</PanelHeaderTitle>
26
- </PanelHeader>
27
- <PanelBody>
28
- <p>Test Panel Body</p>
29
- </PanelBody>
30
- </Panel>
31
- ),
32
- } );
33
-
34
- const renderPanels = () => {
35
- const Trigger = () => {
36
- const { isOpen, isBlocked } = usePanelStatus();
37
- const { open, close } = usePanelActions();
38
-
39
- return (
40
- <button onClick={ () => ( isOpen ? close() : open() ) } disabled={ isBlocked }>
41
- { isOpen ? 'Close Panel' : 'Open Panel' }
42
- </button>
43
- );
44
- };
45
-
46
- __registerSlice( slice );
47
-
48
- render(
49
- <StoreProvider store={ __createStore() }>
50
- <Panels />
51
- <Trigger />
52
- </StoreProvider>
53
- );
54
- };
55
-
56
- beforeEach( () => {
57
- // Setup for the environment.
58
- document.body.innerHTML = `
59
- <div id="elementor-editor-wrapper">
60
- <div id="elementor-panel-inner"></div>
61
- </div>
62
- `;
63
- } );
64
-
65
- afterEach( () => {
66
- // Cleanup for the environment.
67
- document.body.innerHTML = '';
68
- } );
69
-
70
- it( 'should open the panel when triggering `open` action', () => {
71
- // Arrange.
72
- registerPanel( panel );
73
-
74
- // Act.
75
- renderPanels();
76
-
77
- // Assert.
78
- expect( screen.queryByText( 'Test Panel Header' ) ).not.toBeInTheDocument();
79
- expect( screen.queryByText( 'Test Panel Body' ) ).not.toBeInTheDocument();
80
-
81
- // Act.
82
- fireEvent.click( screen.getByText( 'Open Panel' ) );
83
-
84
- // Assert.
85
- expect( screen.getByText( 'Test Panel Header' ) ).toBeInTheDocument();
86
- expect( screen.getByText( 'Test Panel Body' ) ).toBeInTheDocument();
87
- } );
88
-
89
- it( 'should close the panel when triggering `close` action', () => {
90
- // Arrange.
91
- registerPanel( panel );
92
-
93
- jest.mocked( useRouteStatus ).mockReturnValue( {
94
- isActive: true,
95
- isBlocked: false,
96
- } );
97
-
98
- // Act.
99
- renderPanels();
100
-
101
- fireEvent.click( screen.getByText( 'Open Panel' ) );
102
-
103
- // Assert.
104
- expect( screen.getByText( 'Test Panel Header' ) ).toBeInTheDocument();
105
- expect( screen.getByText( 'Test Panel Body' ) ).toBeInTheDocument();
106
-
107
- // Act.
108
- fireEvent.click( screen.getByText( 'Close Panel' ) );
109
-
110
- // Assert.
111
- expect( screen.queryByText( 'Test Panel Header' ) ).not.toBeInTheDocument();
112
- expect( screen.queryByText( 'Test Panel Body' ) ).not.toBeInTheDocument();
113
- } );
114
-
115
- it( 'should not open the panel if the panel was not registered', () => {
116
- // Act.
117
- renderPanels();
118
-
119
- fireEvent.click( screen.getByText( 'Open Panel' ) );
120
-
121
- // Assert.
122
- expect( screen.queryByText( 'Test Panel Header' ) ).not.toBeInTheDocument();
123
- expect( screen.queryByText( 'Test Panel Body' ) ).not.toBeInTheDocument();
124
- } );
125
-
126
- it( 'should block open panel when isBlocked state equals `true`', () => {
127
- // Arrange.
128
- registerPanel( panel );
129
-
130
- jest.mocked( useRouteStatus ).mockReturnValue( {
131
- isActive: false,
132
- isBlocked: true,
133
- } );
134
-
135
- // Act.
136
- renderPanels();
137
-
138
- // Assert.
139
- expect( screen.getByText( 'Open Panel' ) ).toBeDisabled();
140
- } );
141
- } );
@@ -1,141 +0,0 @@
1
- import { sync } from '../sync';
2
- import {
3
- __privateIsRouteActive as isRouteActive,
4
- __privateOpenRoute as openRoute,
5
- __privateRegisterRoute as registerRoute,
6
- } from '@elementor/editor-v1-adapters';
7
- import { __createStore, __dispatch, __getState, __registerSlice } from '@elementor/store';
8
- import { selectOpenId, slice } from '../store';
9
-
10
- jest.mock( '@elementor/editor-v1-adapters', () => ( {
11
- ...jest.requireActual( '@elementor/editor-v1-adapters' ),
12
- __privateRegisterRoute: jest.fn(),
13
- __privateOpenRoute: jest.fn(),
14
- __privateIsRouteActive: jest.fn(),
15
- } ) );
16
-
17
- describe( '@elementor/editor-panels sync', () => {
18
- const v1PanelElementsIds = [
19
- 'elementor-panel-header-wrapper',
20
- 'elementor-panel-content-wrapper',
21
- 'elementor-panel-state-loading',
22
- 'elementor-panel-footer',
23
- ];
24
-
25
- beforeEach( () => {
26
- sync();
27
- __registerSlice( slice );
28
- __createStore();
29
- } );
30
-
31
- afterEach( () => {
32
- document.body.innerHTML = '';
33
- } );
34
-
35
- it( 'should register the empty route on init', () => {
36
- // Arrange & Act.
37
- window.dispatchEvent( new CustomEvent( 'elementor/panel/init' ) );
38
-
39
- // Assert.
40
- expect( registerRoute ).toHaveBeenCalledTimes( 1 );
41
- expect( registerRoute ).toHaveBeenCalledWith( 'panel/v2' );
42
- } );
43
-
44
- it( 'should open v1 route `panels/empty` when triggering `open` action', () => {
45
- // Arrange.
46
- window.dispatchEvent( new CustomEvent( 'elementor/panel/init' ) );
47
-
48
- // Act.
49
- __dispatch( slice.actions.open( 'test' ) );
50
-
51
- // Arrange.
52
- expect( openRoute ).toHaveBeenCalledTimes( 1 );
53
- expect( openRoute ).toHaveBeenCalledWith( 'panel/v2' );
54
- } );
55
-
56
- it( 'should close v1 route `panel/v2` when triggering `close` action and set default v1 route', () => {
57
- // Arrange.
58
- window.dispatchEvent( new CustomEvent( 'elementor/panel/init' ) );
59
-
60
- jest.mocked( isRouteActive ).mockImplementation( ( route ) => route === 'panel/v2' );
61
-
62
- __dispatch( slice.actions.open( 'not-relevant-test' ) );
63
- __dispatch( slice.actions.open( 'not-relevant-test-2' ) );
64
- __dispatch( slice.actions.open( 'test' ) );
65
-
66
- // Act.
67
- __dispatch( slice.actions.close( 'test' ) );
68
-
69
- // Arrange.
70
- expect( openRoute ).toHaveBeenCalledTimes( 2 );
71
- expect( openRoute ).toHaveBeenNthCalledWith( 1, 'panel/v2' );
72
- expect( openRoute ).toHaveBeenNthCalledWith( 2, 'panel/elements/categories' );
73
- } );
74
-
75
- it( 'should not navigate to v1 default route if the route is not `panel/v2`', () => {
76
- // Arrange.
77
- window.dispatchEvent( new CustomEvent( 'elementor/panel/init' ) );
78
-
79
- jest.mocked( isRouteActive ).mockImplementation( () => false );
80
-
81
- __dispatch( slice.actions.open( 'test' ) );
82
-
83
- // Act.
84
- __dispatch( slice.actions.close( 'test' ) );
85
-
86
- // Arrange.
87
- expect( openRoute ).toHaveBeenCalledTimes( 1 );
88
- expect( openRoute ).toHaveBeenCalledWith( 'panel/v2' );
89
- } );
90
-
91
- it( 'should close the panel when navigating to another v1 route', () => {
92
- // Arrange.
93
- __dispatch( slice.actions.open( 'test' ) );
94
-
95
- // Act.
96
- window.dispatchEvent(
97
- new CustomEvent( 'elementor/routes/close', {
98
- detail: { route: 'panel/v2' },
99
- } )
100
- );
101
-
102
- // Act.
103
- expect( selectOpenId( __getState() ) ).toBe( null );
104
- } );
105
-
106
- it( 'should hide old panel elements when navigating to empty route', () => {
107
- // Arrange.
108
- document.body.innerHTML = v1PanelElementsIds.map( ( id ) => `<div id="${ id }"></div>` ).join( '' );
109
-
110
- // Act.
111
- window.dispatchEvent(
112
- new CustomEvent( 'elementor/routes/open', {
113
- detail: { route: 'panel/v2' },
114
- } )
115
- );
116
-
117
- // Assert.
118
- v1PanelElementsIds.forEach( ( id ) => {
119
- expect( document.getElementById( id ) ).not.toBeVisible();
120
- } );
121
- } );
122
-
123
- it( 'should show old panel elements when navigating out of the empty route', () => {
124
- // Arrange.
125
- document.body.innerHTML = v1PanelElementsIds
126
- .map( ( id ) => `<div id="${ id }" aria-hidden="true" hidden="hidden"></div>` )
127
- .join( '' );
128
-
129
- // Act.
130
- window.dispatchEvent(
131
- new CustomEvent( 'elementor/routes/close', {
132
- detail: { route: 'panel/v2' },
133
- } )
134
- );
135
-
136
- // Assert.
137
- v1PanelElementsIds.forEach( ( id ) => {
138
- expect( document.getElementById( id ) ).toBeVisible();
139
- } );
140
- } );
141
- } );