@elementor/editor-components 4.0.0-564 → 4.0.0-591
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3801 -3744
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3813 -3761
- package/dist/index.mjs.map +1 -1
- package/package.json +23 -22
- package/src/components/components-tab/components-item.tsx +5 -4
- package/src/components/components-tab/components-list.tsx +5 -13
- package/src/components/components-tab/loading-components.tsx +2 -3
- package/src/components/instance-editing-panel/instance-editing-panel.tsx +17 -5
- package/src/components/instance-editing-panel/override-prop-control.tsx +13 -7
- package/src/components/instance-editing-panel/use-resolved-origin-value.tsx +1 -1
- package/src/components/load-template-components.tsx +14 -0
- package/src/create-component-type.ts +8 -2
- package/src/{components → extended/components}/component-panel-header/component-panel-header.tsx +4 -4
- package/src/{components → extended/components}/component-properties-panel/component-properties-panel-content.tsx +2 -2
- package/src/{components → extended/components}/component-properties-panel/properties-empty-state.tsx +1 -1
- package/src/{components → extended/components}/component-properties-panel/properties-group.tsx +1 -1
- package/src/{components → extended/components}/component-properties-panel/property-item.tsx +1 -1
- package/src/{components → extended/components}/component-properties-panel/use-current-editable-item.ts +1 -1
- package/src/{components → extended/components}/component-properties-panel/utils/generate-unique-label.ts +1 -1
- package/src/{components → extended/components}/component-properties-panel/utils/validate-group-label.ts +1 -1
- package/src/{components → extended/components}/create-component-form/create-component-form.tsx +5 -5
- package/src/{components → extended/components}/edit-component/component-modal.tsx +2 -2
- package/src/{components → extended/components}/edit-component/edit-component.tsx +3 -3
- package/src/{components → extended/components}/overridable-props/overridable-prop-control.tsx +7 -7
- package/src/{components → extended/components}/overridable-props/overridable-prop-form.tsx +1 -1
- package/src/{components → extended/components}/overridable-props/overridable-prop-indicator.tsx +7 -7
- package/src/{components → extended}/consts.ts +2 -1
- package/src/{hooks → extended/hooks}/use-navigate-back.ts +2 -2
- package/src/extended/init.ts +77 -0
- package/src/{mcp → extended/mcp}/save-as-component-tool.ts +2 -2
- package/src/{prevent-non-atomic-nesting.ts → extended/prevent-non-atomic-nesting.ts} +1 -1
- package/src/{store → extended/store}/actions/add-overridable-group.ts +3 -3
- package/src/{store → extended/store}/actions/create-unpublished-component.ts +4 -4
- package/src/{store → extended/store}/actions/delete-overridable-group.ts +2 -2
- package/src/extended/store/actions/delete-overridable-prop.ts +70 -0
- package/src/{store → extended/store}/actions/rename-overridable-group.ts +2 -2
- package/src/{store → extended/store}/actions/reorder-group-props.ts +2 -2
- package/src/{store → extended/store}/actions/reorder-overridable-groups.ts +2 -2
- package/src/{store → extended/store}/actions/reset-sanitized-components.ts +1 -1
- package/src/{store → extended/store}/actions/set-overridable-prop.ts +3 -3
- package/src/{store → extended/store}/actions/update-component-sanitized-attribute.ts +2 -2
- package/src/{store → extended/store}/actions/update-current-component.ts +2 -14
- package/src/{store → extended/store}/actions/update-overridable-prop-params.ts +2 -2
- package/src/{store → extended/store}/utils/groups-transformers.ts +6 -4
- package/src/extended/sync/before-save.ts +52 -0
- package/src/{sync → extended/sync}/cleanup-overridable-props-on-delete.ts +24 -24
- package/src/{sync → extended/sync}/create-components-before-save.ts +4 -4
- package/src/{sync → extended/sync}/handle-component-edit-mode-container.ts +1 -1
- package/src/{sync → extended/sync}/revert-overridables-on-copy-or-duplicate.ts +1 -1
- package/src/{sync → extended/sync}/set-component-overridable-props-settings-before-save.ts +2 -2
- package/src/{sync → extended/sync}/update-archived-component-before-save.ts +3 -3
- package/src/{sync → extended/sync}/update-component-title-before-save.ts +3 -3
- package/src/{utils → extended/utils}/is-editing-component.ts +1 -1
- package/src/extended/utils/replace-element-with-component.ts +11 -0
- package/src/{utils → extended/utils}/revert-overridable-settings.ts +6 -6
- package/src/hooks/use-sanitize-overridable-props.ts +9 -4
- package/src/init.ts +8 -69
- package/src/sync/before-save.ts +1 -30
- package/src/types.ts +8 -1
- package/src/utils/component-name-validation.ts +1 -1
- package/src/{components/create-component-form/utils/replace-element-with-component.ts → utils/create-component-model.ts} +2 -10
- package/src/utils/filter-valid-overridable-props.ts +18 -8
- package/src/utils/format-component-elements-id.ts +20 -0
- package/src/utils/get-container-by-origin-id.ts +46 -0
- package/src/{components/overridable-props/utils → utils}/get-overridable-prop.ts +2 -2
- package/src/utils/switch-to-component.ts +5 -2
- package/src/hooks/use-component-instance-settings.ts +0 -15
- package/src/store/actions/delete-overridable-prop.ts +0 -56
- package/src/utils/expand-navigator.ts +0 -5
- /package/src/{components/components-tab → extended/components}/component-introduction.tsx +0 -0
- /package/src/{components → extended/components}/component-panel-header/component-badge.tsx +0 -0
- /package/src/{components → extended/components}/component-properties-panel/component-properties-panel.tsx +0 -0
- /package/src/{components → extended/components}/component-properties-panel/sortable.tsx +0 -0
- /package/src/{components → extended/components}/create-component-form/hooks/use-form.ts +0 -0
- /package/src/{components → extended/components}/create-component-form/utils/component-form-schema.ts +0 -0
- /package/src/{components → extended/components}/create-component-form/utils/get-component-event-data.ts +0 -0
- /package/src/{hooks → extended/components/edit-component}/use-canvas-document.ts +0 -0
- /package/src/{hooks → extended/components/edit-component}/use-element-rect.ts +0 -0
- /package/src/{components → extended/components}/overridable-props/indicator.tsx +0 -0
- /package/src/{components → extended/components}/overridable-props/utils/validate-prop-label.ts +0 -0
- /package/src/{mcp → extended/mcp}/index.ts +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-components",
|
|
3
3
|
"description": "Elementor editor components",
|
|
4
|
-
"version": "4.0.0-
|
|
4
|
+
"version": "4.0.0-591",
|
|
5
5
|
"private": false,
|
|
6
6
|
"author": "Elementor Team",
|
|
7
7
|
"homepage": "https://elementor.com/",
|
|
@@ -40,30 +40,31 @@
|
|
|
40
40
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@elementor/editor": "4.0.0-
|
|
44
|
-
"@elementor/editor-canvas": "4.0.0-
|
|
45
|
-
"@elementor/editor-controls": "4.0.0-
|
|
46
|
-
"@elementor/editor-documents": "4.0.0-
|
|
47
|
-
"@elementor/editor-editing-panel": "4.0.0-
|
|
48
|
-
"@elementor/editor-elements": "4.0.0-
|
|
49
|
-
"@elementor/editor-elements-panel": "4.0.0-
|
|
50
|
-
"@elementor/editor-mcp": "4.0.0-
|
|
51
|
-
"@elementor/editor-
|
|
52
|
-
"@elementor/editor-
|
|
53
|
-
"@elementor/editor-
|
|
54
|
-
"@elementor/editor-
|
|
55
|
-
"@elementor/editor-
|
|
56
|
-
"@elementor/
|
|
43
|
+
"@elementor/editor": "4.0.0-591",
|
|
44
|
+
"@elementor/editor-canvas": "4.0.0-591",
|
|
45
|
+
"@elementor/editor-controls": "4.0.0-591",
|
|
46
|
+
"@elementor/editor-documents": "4.0.0-591",
|
|
47
|
+
"@elementor/editor-editing-panel": "4.0.0-591",
|
|
48
|
+
"@elementor/editor-elements": "4.0.0-591",
|
|
49
|
+
"@elementor/editor-elements-panel": "4.0.0-591",
|
|
50
|
+
"@elementor/editor-mcp": "4.0.0-591",
|
|
51
|
+
"@elementor/editor-templates": "4.0.0-591",
|
|
52
|
+
"@elementor/editor-panels": "4.0.0-591",
|
|
53
|
+
"@elementor/editor-props": "4.0.0-591",
|
|
54
|
+
"@elementor/editor-styles-repository": "4.0.0-591",
|
|
55
|
+
"@elementor/editor-ui": "4.0.0-591",
|
|
56
|
+
"@elementor/editor-v1-adapters": "4.0.0-591",
|
|
57
|
+
"@elementor/http-client": "4.0.0-591",
|
|
57
58
|
"@elementor/icons": "^1.63.0",
|
|
58
|
-
"@elementor/events": "4.0.0-
|
|
59
|
-
"@elementor/query": "4.0.0-
|
|
60
|
-
"@elementor/schema": "4.0.0-
|
|
61
|
-
"@elementor/store": "4.0.0-
|
|
59
|
+
"@elementor/events": "4.0.0-591",
|
|
60
|
+
"@elementor/query": "4.0.0-591",
|
|
61
|
+
"@elementor/schema": "4.0.0-591",
|
|
62
|
+
"@elementor/store": "4.0.0-591",
|
|
62
63
|
"@elementor/ui": "1.36.17",
|
|
63
|
-
"@elementor/utils": "4.0.0-
|
|
64
|
+
"@elementor/utils": "4.0.0-591",
|
|
64
65
|
"@wordpress/i18n": "^5.13.0",
|
|
65
|
-
"@elementor/editor-notifications": "4.0.0-
|
|
66
|
-
"@elementor/editor-current-user": "4.0.0-
|
|
66
|
+
"@elementor/editor-notifications": "4.0.0-591",
|
|
67
|
+
"@elementor/editor-current-user": "4.0.0-591"
|
|
67
68
|
},
|
|
68
69
|
"peerDependencies": {
|
|
69
70
|
"react": "^18.3.1",
|
|
@@ -23,18 +23,18 @@ import { __ } from '@wordpress/i18n';
|
|
|
23
23
|
import { useComponentsPermissions } from '../../hooks/use-components-permissions';
|
|
24
24
|
import { archiveComponent } from '../../store/actions/archive-component';
|
|
25
25
|
import { loadComponentsAssets } from '../../store/actions/load-components-assets';
|
|
26
|
+
import { renameComponent } from '../../store/actions/rename-component';
|
|
26
27
|
import { type Component } from '../../types';
|
|
27
28
|
import { validateComponentName } from '../../utils/component-name-validation';
|
|
29
|
+
import { createComponentModel } from '../../utils/create-component-model';
|
|
28
30
|
import { getContainerForNewElement } from '../../utils/get-container-for-new-element';
|
|
29
|
-
import { createComponentModel } from '../create-component-form/utils/replace-element-with-component';
|
|
30
31
|
import { DeleteConfirmationDialog } from './delete-confirmation-dialog';
|
|
31
32
|
|
|
32
33
|
type ComponentItemProps = {
|
|
33
34
|
component: Omit< Component, 'id' > & { id?: number };
|
|
34
|
-
renameComponent: ( newName: string ) => void;
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
export const ComponentItem = ( { component
|
|
37
|
+
export const ComponentItem = ( { component }: ComponentItemProps ) => {
|
|
38
38
|
const itemRef = useRef< HTMLElement >( null );
|
|
39
39
|
const [ isDeleteDialogOpen, setIsDeleteDialogOpen ] = useState( false );
|
|
40
40
|
const { canRename, canDelete } = useComponentsPermissions();
|
|
@@ -49,9 +49,10 @@ export const ComponentItem = ( { component, renameComponent }: ComponentItemProp
|
|
|
49
49
|
getProps: getEditableProps,
|
|
50
50
|
} = useEditable( {
|
|
51
51
|
value: component.name,
|
|
52
|
-
onSubmit: renameComponent,
|
|
52
|
+
onSubmit: ( newName: string ) => renameComponent( component.uid, newName ),
|
|
53
53
|
validation: validateComponentTitle,
|
|
54
54
|
} );
|
|
55
|
+
|
|
55
56
|
const componentModel = createComponentModel( component );
|
|
56
57
|
|
|
57
58
|
const popupState = usePopupState( {
|
|
@@ -5,7 +5,6 @@ import { __ } from '@wordpress/i18n';
|
|
|
5
5
|
|
|
6
6
|
import { useComponents } from '../../hooks/use-components';
|
|
7
7
|
import { useComponentsPermissions } from '../../hooks/use-components-permissions';
|
|
8
|
-
import { renameComponent } from '../../store/actions/rename-component';
|
|
9
8
|
import { ComponentItem } from './components-item';
|
|
10
9
|
import { LoadingComponents } from './loading-components';
|
|
11
10
|
import { useSearch } from './search-provider';
|
|
@@ -25,24 +24,17 @@ export function ComponentsList() {
|
|
|
25
24
|
if ( isLoading ) {
|
|
26
25
|
return <LoadingComponents />;
|
|
27
26
|
}
|
|
28
|
-
|
|
27
|
+
|
|
28
|
+
const isEmpty = ! components?.length;
|
|
29
|
+
|
|
29
30
|
if ( isEmpty ) {
|
|
30
|
-
|
|
31
|
-
return <EmptySearchResult />;
|
|
32
|
-
}
|
|
33
|
-
return <EmptyState />;
|
|
31
|
+
return searchValue.length ? <EmptySearchResult /> : <EmptyState />;
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
return (
|
|
37
35
|
<List sx={ { display: 'flex', flexDirection: 'column', gap: 1, px: 2 } }>
|
|
38
36
|
{ components.map( ( component ) => (
|
|
39
|
-
<ComponentItem
|
|
40
|
-
key={ component.uid }
|
|
41
|
-
component={ component }
|
|
42
|
-
renameComponent={ ( newName ) => {
|
|
43
|
-
renameComponent( component.uid, newName );
|
|
44
|
-
} }
|
|
45
|
-
/>
|
|
37
|
+
<ComponentItem key={ component.uid } component={ component } />
|
|
46
38
|
) ) }
|
|
47
39
|
</List>
|
|
48
40
|
);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Box, ListItemButton, Skeleton, Stack } from '@elementor/ui';
|
|
3
|
-
const ROWS_COUNT = 6;
|
|
4
3
|
|
|
5
|
-
const
|
|
4
|
+
const ROWS = Array.from( { length: 6 }, ( _, index ) => index );
|
|
6
5
|
|
|
7
6
|
export const LoadingComponents = () => {
|
|
8
7
|
return (
|
|
@@ -26,7 +25,7 @@ export const LoadingComponents = () => {
|
|
|
26
25
|
},
|
|
27
26
|
} }
|
|
28
27
|
>
|
|
29
|
-
{
|
|
28
|
+
{ ROWS.map( ( row ) => (
|
|
30
29
|
<ListItemButton
|
|
31
30
|
key={ row }
|
|
32
31
|
sx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ControlAdornmentsProvider } from '@elementor/editor-controls';
|
|
3
|
-
import { getFieldIndicators } from '@elementor/editor-editing-panel';
|
|
4
|
-
import { useSelectedElement } from '@elementor/editor-elements';
|
|
3
|
+
import { getFieldIndicators, useElement } from '@elementor/editor-editing-panel';
|
|
4
|
+
import { useElementSetting, useSelectedElement } from '@elementor/editor-elements';
|
|
5
5
|
import { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';
|
|
6
6
|
import { EllipsisWithTooltip } from '@elementor/editor-ui';
|
|
7
7
|
import { ComponentsIcon, PencilIcon } from '@elementor/icons';
|
|
8
8
|
import { Box, Divider, IconButton, Stack, Tooltip } from '@elementor/ui';
|
|
9
9
|
import { __ } from '@wordpress/i18n';
|
|
10
10
|
|
|
11
|
-
import { useComponentInstanceSettings } from '../../hooks/use-component-instance-settings';
|
|
12
11
|
import { useComponentsPermissions } from '../../hooks/use-components-permissions';
|
|
13
12
|
import { useSanitizeOverridableProps } from '../../hooks/use-sanitize-overridable-props';
|
|
13
|
+
import {
|
|
14
|
+
componentInstancePropTypeUtil,
|
|
15
|
+
type ComponentInstancePropValue,
|
|
16
|
+
} from '../../prop-types/component-instance-prop-type';
|
|
14
17
|
import { ComponentInstanceProvider } from '../../provider/component-instance-context';
|
|
15
18
|
import { useComponent } from '../../store/store';
|
|
16
19
|
import { type OverridablePropsGroup } from '../../types';
|
|
@@ -28,9 +31,10 @@ export function InstanceEditingPanel() {
|
|
|
28
31
|
const overrides = settings?.overrides?.value;
|
|
29
32
|
|
|
30
33
|
const component = useComponent( componentId ?? null );
|
|
31
|
-
const overridableProps = useSanitizeOverridableProps( componentId ?? null );
|
|
32
34
|
|
|
33
|
-
const componentInstanceId = useSelectedElement()?.element?.id
|
|
35
|
+
const componentInstanceId = useSelectedElement()?.element?.id;
|
|
36
|
+
|
|
37
|
+
const overridableProps = useSanitizeOverridableProps( componentId ?? null, componentInstanceId );
|
|
34
38
|
|
|
35
39
|
if ( ! componentId || ! overridableProps || ! component ) {
|
|
36
40
|
return null;
|
|
@@ -89,3 +93,11 @@ export function InstanceEditingPanel() {
|
|
|
89
93
|
</Box>
|
|
90
94
|
);
|
|
91
95
|
}
|
|
96
|
+
|
|
97
|
+
function useComponentInstanceSettings() {
|
|
98
|
+
const { element } = useElement();
|
|
99
|
+
|
|
100
|
+
const settings = useElementSetting< ComponentInstancePropValue >( element.id, 'component_instance' );
|
|
101
|
+
|
|
102
|
+
return componentInstancePropTypeUtil.extract( settings );
|
|
103
|
+
}
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
SettingsField,
|
|
17
17
|
useElement,
|
|
18
18
|
} from '@elementor/editor-editing-panel';
|
|
19
|
-
import { type Control,
|
|
19
|
+
import { type Control, getElementType } from '@elementor/editor-elements';
|
|
20
20
|
import { type PropType, type PropValue } from '@elementor/editor-props';
|
|
21
21
|
import { Stack } from '@elementor/ui';
|
|
22
22
|
|
|
@@ -43,6 +43,7 @@ import { OverridablePropProvider } from '../../provider/overridable-prop-context
|
|
|
43
43
|
import { updateOverridableProp } from '../../store/actions/update-overridable-prop';
|
|
44
44
|
import { useCurrentComponentId } from '../../store/store';
|
|
45
45
|
import { type OriginPropFields, type OverridableProp, type OverridableProps } from '../../types';
|
|
46
|
+
import { getContainerByOriginId } from '../../utils/get-container-by-origin-id';
|
|
46
47
|
import { getPropTypeForComponentOverride } from '../../utils/get-prop-type-for-component-override';
|
|
47
48
|
import { getMatchingOverride } from '../../utils/overridable-props-utils';
|
|
48
49
|
import { resolveOverridePropValue } from '../../utils/resolve-override-prop-value';
|
|
@@ -167,14 +168,19 @@ function OverrideControl( { overridableProp }: InternalProps ) {
|
|
|
167
168
|
overridableProp.label
|
|
168
169
|
);
|
|
169
170
|
|
|
170
|
-
const {
|
|
171
|
+
const {
|
|
172
|
+
elementId: originElementId,
|
|
173
|
+
widgetType,
|
|
174
|
+
elType,
|
|
175
|
+
propKey,
|
|
176
|
+
} = overridableProp.originPropFields ?? overridableProp;
|
|
171
177
|
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
} );
|
|
178
|
+
const element = getContainerByOriginId( originElementId, componentInstanceElement.element.id );
|
|
179
|
+
|
|
180
|
+
if ( ! element ) {
|
|
181
|
+
throw new OverrideControlInnerElementNotFoundError( { context: { componentId, elementId: originElementId } } );
|
|
177
182
|
}
|
|
183
|
+
const elementId = element.id;
|
|
178
184
|
|
|
179
185
|
const type = elType === 'widget' ? widgetType : elType;
|
|
180
186
|
const elementType = getElementType( type );
|
|
@@ -5,8 +5,8 @@ import { type ComponentInstanceOverride } from '../../prop-types/component-insta
|
|
|
5
5
|
import { componentOverridablePropTypeUtil } from '../../prop-types/component-overridable-prop-type';
|
|
6
6
|
import { selectData } from '../../store/store';
|
|
7
7
|
import { type OverridableProp, type PublishedComponent } from '../../types';
|
|
8
|
+
import { getOverridableProp } from '../../utils/get-overridable-prop';
|
|
8
9
|
import { extractInnerOverrideInfo } from '../../utils/overridable-props-utils';
|
|
9
|
-
import { getOverridableProp } from '../overridable-props/utils/get-overridable-prop';
|
|
10
10
|
|
|
11
11
|
export function useResolvedOriginValue( override: ComponentInstanceOverride | null, overridableProp: OverridableProp ) {
|
|
12
12
|
const components = useSelector( selectData );
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { useLoadedTemplates } from '@elementor/editor-templates';
|
|
3
|
+
|
|
4
|
+
import { loadComponentsAssets } from '../store/actions/load-components-assets';
|
|
5
|
+
|
|
6
|
+
export const LoadTemplateComponents = () => {
|
|
7
|
+
const templates = useLoadedTemplates();
|
|
8
|
+
|
|
9
|
+
useEffect( () => {
|
|
10
|
+
loadComponentsAssets( templates.flatMap( ( elements ) => elements ?? [] ) );
|
|
11
|
+
}, [ templates ] );
|
|
12
|
+
|
|
13
|
+
return null;
|
|
14
|
+
};
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
type RenderContext,
|
|
12
12
|
} from '@elementor/editor-canvas';
|
|
13
13
|
import { getCurrentDocument } from '@elementor/editor-documents';
|
|
14
|
+
import { type V1ElementData } from '@elementor/editor-elements';
|
|
14
15
|
import { __getState as getState } from '@elementor/store';
|
|
15
16
|
import { __ } from '@wordpress/i18n';
|
|
16
17
|
|
|
@@ -18,6 +19,7 @@ import { apiClient } from './api';
|
|
|
18
19
|
import { type ComponentInstanceProp } from './prop-types/component-instance-prop-type';
|
|
19
20
|
import { type ComponentsSlice, selectComponentByUid } from './store/store';
|
|
20
21
|
import { type ComponentRenderContext, type ExtendedWindow } from './types';
|
|
22
|
+
import { formatComponentElementsId } from './utils/format-component-elements-id';
|
|
21
23
|
import { switchToComponent } from './utils/switch-to-component';
|
|
22
24
|
import { trackComponentEvent } from './utils/tracking';
|
|
23
25
|
|
|
@@ -152,7 +154,7 @@ function createComponentView(
|
|
|
152
154
|
const componentInstance = settings.component_instance as
|
|
153
155
|
| {
|
|
154
156
|
overrides?: Record< string, unknown >;
|
|
155
|
-
elements?:
|
|
157
|
+
elements?: V1ElementData[];
|
|
156
158
|
}
|
|
157
159
|
| undefined;
|
|
158
160
|
|
|
@@ -161,7 +163,11 @@ function createComponentView(
|
|
|
161
163
|
overrides: componentInstance.overrides ?? {},
|
|
162
164
|
};
|
|
163
165
|
|
|
164
|
-
|
|
166
|
+
const instanceId = this.model.get( 'id' );
|
|
167
|
+
const elements = componentInstance.elements ?? [];
|
|
168
|
+
const formattedElements = formatComponentElementsId( elements, [ instanceId ] );
|
|
169
|
+
|
|
170
|
+
this.collection = legacyWindow.elementor.createBackboneElementsCollection( formattedElements );
|
|
165
171
|
|
|
166
172
|
this.collection.models.forEach( setInactiveRecursively );
|
|
167
173
|
|
package/src/{components → extended/components}/component-panel-header/component-panel-header.tsx
RENAMED
|
@@ -8,12 +8,12 @@ import { __getState as getState } from '@elementor/store';
|
|
|
8
8
|
import { Box, Divider, IconButton, Tooltip, Typography } from '@elementor/ui';
|
|
9
9
|
import { __ } from '@wordpress/i18n';
|
|
10
10
|
|
|
11
|
+
import { useSanitizeOverridableProps } from '../../../hooks/use-sanitize-overridable-props';
|
|
12
|
+
import { type ComponentsSlice, SLICE_NAME, useCurrentComponent } from '../../../store/store';
|
|
13
|
+
import { trackComponentEvent } from '../../../utils/tracking';
|
|
11
14
|
import { useNavigateBack } from '../../hooks/use-navigate-back';
|
|
12
|
-
import {
|
|
13
|
-
import { type ComponentsSlice, SLICE_NAME, useCurrentComponent } from '../../store/store';
|
|
14
|
-
import { trackComponentEvent } from '../../utils/tracking';
|
|
15
|
+
import { ComponentIntroduction } from '../component-introduction';
|
|
15
16
|
import { usePanelActions } from '../component-properties-panel/component-properties-panel';
|
|
16
|
-
import { ComponentIntroduction } from '../components-tab/component-introduction';
|
|
17
17
|
import { ComponentsBadge } from './component-badge';
|
|
18
18
|
|
|
19
19
|
const MESSAGE_KEY = 'components-properties-introduction';
|
|
@@ -7,14 +7,14 @@ import { Divider, IconButton, List, Stack, Tooltip } from '@elementor/ui';
|
|
|
7
7
|
import { generateUniqueId } from '@elementor/utils';
|
|
8
8
|
import { __ } from '@wordpress/i18n';
|
|
9
9
|
|
|
10
|
-
import { useSanitizeOverridableProps } from '
|
|
10
|
+
import { useSanitizeOverridableProps } from '../../../hooks/use-sanitize-overridable-props';
|
|
11
|
+
import { useCurrentComponentId } from '../../../store/store';
|
|
11
12
|
import { addOverridableGroup } from '../../store/actions/add-overridable-group';
|
|
12
13
|
import { deleteOverridableGroup } from '../../store/actions/delete-overridable-group';
|
|
13
14
|
import { deleteOverridableProp } from '../../store/actions/delete-overridable-prop';
|
|
14
15
|
import { reorderGroupProps } from '../../store/actions/reorder-group-props';
|
|
15
16
|
import { reorderOverridableGroups } from '../../store/actions/reorder-overridable-groups';
|
|
16
17
|
import { updateOverridablePropParams } from '../../store/actions/update-overridable-prop-params';
|
|
17
|
-
import { useCurrentComponentId } from '../../store/store';
|
|
18
18
|
import { PropertiesEmptyState } from './properties-empty-state';
|
|
19
19
|
import { PropertiesGroup } from './properties-group';
|
|
20
20
|
import { SortableItem, SortableProvider } from './sortable';
|
package/src/{components → extended/components}/component-properties-panel/properties-empty-state.tsx
RENAMED
|
@@ -4,7 +4,7 @@ import { ComponentPropListIcon } from '@elementor/icons';
|
|
|
4
4
|
import { Link, Stack, Typography } from '@elementor/ui';
|
|
5
5
|
import { __ } from '@wordpress/i18n';
|
|
6
6
|
|
|
7
|
-
import { ComponentIntroduction } from '../
|
|
7
|
+
import { ComponentIntroduction } from '../component-introduction';
|
|
8
8
|
|
|
9
9
|
export function PropertiesEmptyState( { introductionRef }: { introductionRef: React.RefObject< HTMLButtonElement > } ) {
|
|
10
10
|
const [ isOpen, setIsOpen ] = useState( false );
|
package/src/{components → extended/components}/component-properties-panel/properties-group.tsx
RENAMED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from '@elementor/ui';
|
|
16
16
|
import { __ } from '@wordpress/i18n';
|
|
17
17
|
|
|
18
|
-
import { type OverridableProp, type OverridablePropsGroup } from '
|
|
18
|
+
import { type OverridableProp, type OverridablePropsGroup } from '../../../types';
|
|
19
19
|
import { PropertyItem } from './property-item';
|
|
20
20
|
import { SortableItem, SortableProvider, SortableTrigger, type SortableTriggerProps } from './sortable';
|
|
21
21
|
import { type GroupLabelEditableState } from './use-current-editable-item';
|
|
@@ -3,7 +3,7 @@ import { getWidgetsCache } from '@elementor/editor-elements';
|
|
|
3
3
|
import { XIcon } from '@elementor/icons';
|
|
4
4
|
import { bindPopover, bindTrigger, Box, IconButton, Popover, Typography, usePopupState } from '@elementor/ui';
|
|
5
5
|
|
|
6
|
-
import { type OverridableProp } from '
|
|
6
|
+
import { type OverridableProp } from '../../../types';
|
|
7
7
|
import { OverridablePropForm } from '../overridable-props/overridable-prop-form';
|
|
8
8
|
import { SortableTrigger, type SortableTriggerProps } from './sortable';
|
|
9
9
|
|
|
@@ -4,8 +4,8 @@ import { setDocumentModifiedStatus } from '@elementor/editor-documents';
|
|
|
4
4
|
import { useEditable } from '@elementor/editor-ui';
|
|
5
5
|
import { __ } from '@wordpress/i18n';
|
|
6
6
|
|
|
7
|
+
import { useCurrentComponentId, useOverridableProps } from '../../../store/store';
|
|
7
8
|
import { renameOverridableGroup } from '../../store/actions/rename-overridable-group';
|
|
8
|
-
import { useCurrentComponentId, useOverridableProps } from '../../store/store';
|
|
9
9
|
import { validateGroupLabel } from './utils/validate-group-label';
|
|
10
10
|
|
|
11
11
|
export type GroupLabelEditableState = {
|
package/src/{components → extended/components}/create-component-form/create-component-form.tsx
RENAMED
|
@@ -8,13 +8,13 @@ import { __getState as getState } from '@elementor/store';
|
|
|
8
8
|
import { Button, FormLabel, Grid, Popover, Stack, TextField, Typography } from '@elementor/ui';
|
|
9
9
|
import { __ } from '@wordpress/i18n';
|
|
10
10
|
|
|
11
|
-
import { useComponents } from '
|
|
11
|
+
import { useComponents } from '../../../hooks/use-components';
|
|
12
|
+
import { selectComponentByUid } from '../../../store/store';
|
|
13
|
+
import { type ComponentFormValues, type PublishedComponent } from '../../../types';
|
|
14
|
+
import { switchToComponent } from '../../../utils/switch-to-component';
|
|
15
|
+
import { trackComponentEvent } from '../../../utils/tracking';
|
|
12
16
|
import { findNonAtomicElementsInElement } from '../../prevent-non-atomic-nesting';
|
|
13
17
|
import { createUnpublishedComponent } from '../../store/actions/create-unpublished-component';
|
|
14
|
-
import { selectComponentByUid } from '../../store/store';
|
|
15
|
-
import { type ComponentFormValues, type PublishedComponent } from '../../types';
|
|
16
|
-
import { switchToComponent } from '../../utils/switch-to-component';
|
|
17
|
-
import { trackComponentEvent } from '../../utils/tracking';
|
|
18
18
|
import { useForm } from './hooks/use-form';
|
|
19
19
|
import { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';
|
|
20
20
|
import {
|
|
@@ -3,8 +3,8 @@ import { type CSSProperties, useEffect } from 'react';
|
|
|
3
3
|
import { createPortal } from 'react-dom';
|
|
4
4
|
import { __ } from '@wordpress/i18n';
|
|
5
5
|
|
|
6
|
-
import { useCanvasDocument } from '
|
|
7
|
-
import { useElementRect } from '
|
|
6
|
+
import { useCanvasDocument } from './use-canvas-document';
|
|
7
|
+
import { useElementRect } from './use-element-rect';
|
|
8
8
|
|
|
9
9
|
type ModalProps = {
|
|
10
10
|
topLevelElementDom: HTMLElement | null;
|
|
@@ -6,12 +6,12 @@ import { __privateListenTo as listenTo, commandEndEvent } from '@elementor/edito
|
|
|
6
6
|
import { __useSelector as useSelector } from '@elementor/store';
|
|
7
7
|
import { throttle } from '@elementor/utils';
|
|
8
8
|
|
|
9
|
-
import { apiClient } from '
|
|
9
|
+
import { apiClient } from '../../../api';
|
|
10
|
+
import { type ComponentsPathItem, selectPath, useCurrentComponentId } from '../../../store/store';
|
|
11
|
+
import { COMPONENT_DOCUMENT_TYPE } from '../../consts';
|
|
10
12
|
import { useNavigateBack } from '../../hooks/use-navigate-back';
|
|
11
13
|
import { resetSanitizedComponents } from '../../store/actions/reset-sanitized-components';
|
|
12
14
|
import { updateCurrentComponent } from '../../store/actions/update-current-component';
|
|
13
|
-
import { type ComponentsPathItem, selectPath, useCurrentComponentId } from '../../store/store';
|
|
14
|
-
import { COMPONENT_DOCUMENT_TYPE } from '../consts';
|
|
15
15
|
import { ComponentModal } from './component-modal';
|
|
16
16
|
|
|
17
17
|
export function EditComponent() {
|
package/src/{components → extended/components}/overridable-props/overridable-prop-control.tsx
RENAMED
|
@@ -11,16 +11,16 @@ import {
|
|
|
11
11
|
import { createTopLevelObjectType, useElement } from '@elementor/editor-editing-panel';
|
|
12
12
|
import { type PropValue } from '@elementor/editor-props';
|
|
13
13
|
|
|
14
|
-
import { type ComponentInstanceOverridePropValue } from '
|
|
14
|
+
import { type ComponentInstanceOverridePropValue } from '../../../prop-types/component-instance-override-prop-type';
|
|
15
15
|
import {
|
|
16
16
|
componentOverridablePropTypeUtil,
|
|
17
17
|
type ComponentOverridablePropValue,
|
|
18
|
-
} from '
|
|
19
|
-
import { OverridablePropProvider } from '
|
|
20
|
-
import { updateOverridableProp } from '
|
|
21
|
-
import { useCurrentComponentId, useOverridableProps } from '
|
|
22
|
-
import { getPropTypeForComponentOverride } from '
|
|
23
|
-
import { OVERRIDABLE_PROP_REPLACEMENT_ID } from '
|
|
18
|
+
} from '../../../prop-types/component-overridable-prop-type';
|
|
19
|
+
import { OverridablePropProvider } from '../../../provider/overridable-prop-context';
|
|
20
|
+
import { updateOverridableProp } from '../../../store/actions/update-overridable-prop';
|
|
21
|
+
import { useCurrentComponentId, useOverridableProps } from '../../../store/store';
|
|
22
|
+
import { getPropTypeForComponentOverride } from '../../../utils/get-prop-type-for-component-override';
|
|
23
|
+
import { OVERRIDABLE_PROP_REPLACEMENT_ID } from '../../consts';
|
|
24
24
|
|
|
25
25
|
export function OverridablePropControl< T extends object >( {
|
|
26
26
|
OriginalControl,
|
|
@@ -4,7 +4,7 @@ import { Form, MenuListItem } from '@elementor/editor-ui';
|
|
|
4
4
|
import { Button, FormLabel, Grid, Select, Stack, type SxProps, TextField, Typography } from '@elementor/ui';
|
|
5
5
|
import { __ } from '@wordpress/i18n';
|
|
6
6
|
|
|
7
|
-
import { type OverridableProp } from '
|
|
7
|
+
import { type OverridableProp } from '../../../types';
|
|
8
8
|
import { validatePropLabel } from './utils/validate-prop-label';
|
|
9
9
|
|
|
10
10
|
const SIZE = 'tiny';
|
package/src/{components → extended/components}/overridable-props/overridable-prop-indicator.tsx
RENAMED
|
@@ -6,16 +6,16 @@ import { type PropType, type TransformablePropValue } from '@elementor/editor-pr
|
|
|
6
6
|
import { bindPopover, bindTrigger, Popover, Tooltip, usePopupState } from '@elementor/ui';
|
|
7
7
|
import { __ } from '@wordpress/i18n';
|
|
8
8
|
|
|
9
|
-
import { useSanitizeOverridableProps } from '
|
|
10
|
-
import { componentOverridablePropTypeUtil } from '
|
|
11
|
-
import { useComponentInstanceElement, useOverridablePropValue } from '
|
|
9
|
+
import { useSanitizeOverridableProps } from '../../../hooks/use-sanitize-overridable-props';
|
|
10
|
+
import { componentOverridablePropTypeUtil } from '../../../prop-types/component-overridable-prop-type';
|
|
11
|
+
import { useComponentInstanceElement, useOverridablePropValue } from '../../../provider/overridable-prop-context';
|
|
12
|
+
import { useCurrentComponentId } from '../../../store/store';
|
|
13
|
+
import { type OverridableProps } from '../../../types';
|
|
14
|
+
import { getOverridableProp } from '../../../utils/get-overridable-prop';
|
|
15
|
+
import { resolveOverridePropValue } from '../../../utils/resolve-override-prop-value';
|
|
12
16
|
import { setOverridableProp } from '../../store/actions/set-overridable-prop';
|
|
13
|
-
import { useCurrentComponentId } from '../../store/store';
|
|
14
|
-
import { type OverridableProps } from '../../types';
|
|
15
|
-
import { resolveOverridePropValue } from '../../utils/resolve-override-prop-value';
|
|
16
17
|
import { Indicator } from './indicator';
|
|
17
18
|
import { OverridablePropForm } from './overridable-prop-form';
|
|
18
|
-
import { getOverridableProp } from './utils/get-overridable-prop';
|
|
19
19
|
|
|
20
20
|
export function OverridablePropIndicator() {
|
|
21
21
|
const { propType } = useBoundProp();
|
|
@@ -2,8 +2,8 @@ import { useCallback } from 'react';
|
|
|
2
2
|
import { getV1DocumentsManager } from '@elementor/editor-documents';
|
|
3
3
|
import { __useSelector as useSelector } from '@elementor/store';
|
|
4
4
|
|
|
5
|
-
import { selectPath } from '
|
|
6
|
-
import { switchToComponent } from '
|
|
5
|
+
import { selectPath } from '../../store/store';
|
|
6
|
+
import { switchToComponent } from '../../utils/switch-to-component';
|
|
7
7
|
|
|
8
8
|
export function useNavigateBack() {
|
|
9
9
|
const path = useSelector( selectPath );
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { injectIntoTop } from '@elementor/editor';
|
|
2
|
+
import { registerControlReplacement } from '@elementor/editor-controls';
|
|
3
|
+
import { getV1CurrentDocument } from '@elementor/editor-documents';
|
|
4
|
+
import { FIELD_TYPE, injectIntoPanelHeaderTop, registerFieldIndicator } from '@elementor/editor-editing-panel';
|
|
5
|
+
import { __registerPanel as registerPanel } from '@elementor/editor-panels';
|
|
6
|
+
import { registerDataHook } from '@elementor/editor-v1-adapters';
|
|
7
|
+
|
|
8
|
+
import { componentOverridablePropTypeUtil } from '../prop-types/component-overridable-prop-type';
|
|
9
|
+
import { type ExtendedWindow } from '../types';
|
|
10
|
+
import { onElementDrop } from '../utils/tracking';
|
|
11
|
+
import { ComponentPanelHeader } from './components/component-panel-header/component-panel-header';
|
|
12
|
+
import { panel as componentPropertiesPanel } from './components/component-properties-panel/component-properties-panel';
|
|
13
|
+
import { CreateComponentForm } from './components/create-component-form/create-component-form';
|
|
14
|
+
import { EditComponent } from './components/edit-component/edit-component';
|
|
15
|
+
import { OverridablePropControl } from './components/overridable-props/overridable-prop-control';
|
|
16
|
+
import { OverridablePropIndicator } from './components/overridable-props/overridable-prop-indicator';
|
|
17
|
+
import { COMPONENT_DOCUMENT_TYPE, OVERRIDABLE_PROP_REPLACEMENT_ID } from './consts';
|
|
18
|
+
import { initMcp } from './mcp';
|
|
19
|
+
import { initNonAtomicNestingPrevention } from './prevent-non-atomic-nesting';
|
|
20
|
+
import { beforeSave } from './sync/before-save';
|
|
21
|
+
import { initCleanupOverridablePropsOnDelete } from './sync/cleanup-overridable-props-on-delete';
|
|
22
|
+
import { initHandleComponentEditModeContainer } from './sync/handle-component-edit-mode-container';
|
|
23
|
+
import { initRevertOverridablesOnCopyOrDuplicate } from './sync/revert-overridables-on-copy-or-duplicate';
|
|
24
|
+
|
|
25
|
+
export function initExtended() {
|
|
26
|
+
registerPanel( componentPropertiesPanel );
|
|
27
|
+
|
|
28
|
+
registerDataHook( 'dependency', 'editor/documents/close', ( args ) => {
|
|
29
|
+
const document = getV1CurrentDocument();
|
|
30
|
+
if ( document.config.type === COMPONENT_DOCUMENT_TYPE ) {
|
|
31
|
+
args.mode = 'autosave';
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
} );
|
|
35
|
+
|
|
36
|
+
registerDataHook( 'after', 'preview/drop', onElementDrop );
|
|
37
|
+
|
|
38
|
+
( window as unknown as ExtendedWindow ).elementorCommon.__beforeSave = beforeSave;
|
|
39
|
+
|
|
40
|
+
injectIntoTop( {
|
|
41
|
+
id: 'create-component-popup',
|
|
42
|
+
component: CreateComponentForm,
|
|
43
|
+
} );
|
|
44
|
+
|
|
45
|
+
injectIntoTop( {
|
|
46
|
+
id: 'edit-component',
|
|
47
|
+
component: EditComponent,
|
|
48
|
+
} );
|
|
49
|
+
|
|
50
|
+
injectIntoPanelHeaderTop( {
|
|
51
|
+
id: 'component-panel-header',
|
|
52
|
+
component: ComponentPanelHeader,
|
|
53
|
+
} );
|
|
54
|
+
|
|
55
|
+
registerFieldIndicator( {
|
|
56
|
+
fieldType: FIELD_TYPE.SETTINGS,
|
|
57
|
+
id: 'component-overridable-prop',
|
|
58
|
+
priority: 1,
|
|
59
|
+
indicator: OverridablePropIndicator,
|
|
60
|
+
} );
|
|
61
|
+
|
|
62
|
+
registerControlReplacement( {
|
|
63
|
+
id: OVERRIDABLE_PROP_REPLACEMENT_ID,
|
|
64
|
+
component: OverridablePropControl,
|
|
65
|
+
condition: ( { value } ) => componentOverridablePropTypeUtil.isValid( value ),
|
|
66
|
+
} );
|
|
67
|
+
|
|
68
|
+
initCleanupOverridablePropsOnDelete();
|
|
69
|
+
|
|
70
|
+
initMcp();
|
|
71
|
+
|
|
72
|
+
initNonAtomicNestingPrevention();
|
|
73
|
+
|
|
74
|
+
initHandleComponentEditModeContainer();
|
|
75
|
+
|
|
76
|
+
initRevertOverridablesOnCopyOrDuplicate();
|
|
77
|
+
}
|
|
@@ -6,9 +6,9 @@ import { AxiosError } from '@elementor/http-client';
|
|
|
6
6
|
import { z } from '@elementor/schema';
|
|
7
7
|
import { generateUniqueId } from '@elementor/utils';
|
|
8
8
|
|
|
9
|
-
import { apiClient } from '
|
|
9
|
+
import { apiClient } from '../../api';
|
|
10
|
+
import { type OverridableProps } from '../../types';
|
|
10
11
|
import { createUnpublishedComponent } from '../store/actions/create-unpublished-component';
|
|
11
|
-
import { type OverridableProps } from '../types';
|
|
12
12
|
|
|
13
13
|
const InputSchema = {
|
|
14
14
|
element_id: z
|