@elementor/editor-canvas 3.33.0-99 → 3.35.0-325

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.
Files changed (58) hide show
  1. package/dist/index.d.mts +133 -10
  2. package/dist/index.d.ts +133 -10
  3. package/dist/index.js +1409 -212
  4. package/dist/index.mjs +1393 -179
  5. package/package.json +18 -14
  6. package/src/__tests__/settings-props-resolver.test.ts +0 -40
  7. package/src/__tests__/styles-prop-resolver.test.ts +13 -0
  8. package/src/components/__tests__/__snapshots__/style-renderer.test.tsx.snap +2 -6
  9. package/src/components/__tests__/elements-overlays.test.tsx +96 -12
  10. package/src/components/__tests__/inline-editor-overlay.test.tsx +245 -0
  11. package/src/components/__tests__/style-renderer.test.tsx +2 -2
  12. package/src/components/elements-overlays.tsx +33 -10
  13. package/src/components/inline-editor-overlay.tsx +79 -0
  14. package/src/components/interactions-renderer.tsx +33 -0
  15. package/src/components/{element-overlay.tsx → outline-overlay.tsx} +8 -7
  16. package/src/components/style-renderer.tsx +2 -4
  17. package/src/hooks/__tests__/use-has-overlapping.test.ts +187 -0
  18. package/src/hooks/use-floating-on-element.ts +11 -8
  19. package/src/hooks/use-has-overlapping.ts +21 -0
  20. package/src/hooks/use-interactions-items.ts +108 -0
  21. package/src/hooks/use-style-items.ts +34 -8
  22. package/src/index.ts +9 -0
  23. package/src/init-settings-transformers.ts +4 -0
  24. package/src/init.tsx +18 -0
  25. package/src/legacy/create-templated-element-type.ts +67 -42
  26. package/src/legacy/init-legacy-views.ts +27 -5
  27. package/src/legacy/types.ts +44 -4
  28. package/src/mcp/canvas-mcp.ts +17 -0
  29. package/src/mcp/mcp-description.ts +40 -0
  30. package/src/mcp/resources/widgets-schema-resource.ts +173 -0
  31. package/src/mcp/tools/build-composition/prompt.ts +128 -0
  32. package/src/mcp/tools/build-composition/schema.ts +31 -0
  33. package/src/mcp/tools/build-composition/tool.ts +163 -0
  34. package/src/mcp/tools/configure-element/prompt.ts +93 -0
  35. package/src/mcp/tools/configure-element/schema.ts +25 -0
  36. package/src/mcp/tools/configure-element/tool.ts +67 -0
  37. package/src/mcp/tools/get-element-config/tool.ts +69 -0
  38. package/src/mcp/utils/do-update-element-property.ts +129 -0
  39. package/src/mcp/utils/generate-available-tags.ts +23 -0
  40. package/src/renderers/__tests__/__snapshots__/create-styles-renderer.test.ts.snap +2 -0
  41. package/src/renderers/__tests__/create-styles-renderer.test.ts +25 -0
  42. package/src/renderers/create-styles-renderer.ts +20 -9
  43. package/src/renderers/errors.ts +6 -0
  44. package/src/sync/drag-element-from-panel.ts +49 -0
  45. package/src/sync/types.ts +32 -1
  46. package/src/transformers/settings/__tests__/attributes-transformer.test.ts +15 -0
  47. package/src/transformers/settings/__tests__/classes-transformer.test.ts +83 -0
  48. package/src/transformers/settings/attributes-transformer.ts +1 -23
  49. package/src/transformers/settings/classes-transformer.ts +21 -21
  50. package/src/transformers/settings/date-time-transformer.ts +12 -0
  51. package/src/transformers/settings/query-transformer.ts +10 -0
  52. package/src/transformers/styles/__tests__/transform-origin-transformer.test.ts +24 -0
  53. package/src/transformers/styles/__tests__/transition-transformer.test.ts +52 -0
  54. package/src/transformers/styles/background-transformer.ts +3 -1
  55. package/src/transformers/styles/transform-origin-transformer.ts +12 -2
  56. package/src/transformers/styles/transition-transformer.ts +34 -4
  57. package/src/types/element-overlay.ts +18 -0
  58. package/src/utils/inline-editing-utils.ts +43 -0
package/dist/index.d.mts CHANGED
@@ -1,17 +1,10 @@
1
1
  import * as _elementor_editor_props from '@elementor/editor-props';
2
2
  import { AnyTransformable, PropTypeKey, PropsSchema, Props } from '@elementor/editor-props';
3
+ import { V1ElementModelProps, V1ElementConfig } from '@elementor/editor-elements';
4
+ import { TwingArrayLoader, TwingEnvironment } from '@elementor/twing';
3
5
 
4
6
  declare function init(): void;
5
7
 
6
- type UnbrandedTransformer<TValue> = (value: TValue, options: {
7
- key: string;
8
- signal?: AbortSignal;
9
- }) => unknown;
10
- type Transformer<TValue> = UnbrandedTransformer<TValue> & {
11
- __transformer: true;
12
- };
13
- type AnyTransformer = Transformer<any>;
14
-
15
8
  declare const styleTransformersRegistry: {
16
9
  register(type: _elementor_editor_props.PropTypeKey, transformer: AnyTransformer): /*elided*/ any;
17
10
  registerFallback(transformer: AnyTransformer): /*elided*/ any;
@@ -30,6 +23,15 @@ declare const settingsTransformersRegistry: {
30
23
  };
31
24
  };
32
25
 
26
+ type UnbrandedTransformer<TValue> = (value: TValue, options: {
27
+ key: string;
28
+ signal?: AbortSignal;
29
+ }) => unknown;
30
+ type Transformer<TValue> = UnbrandedTransformer<TValue> & {
31
+ __transformer: true;
32
+ };
33
+ type AnyTransformer = Transformer<any>;
34
+
33
35
  declare function createTransformer<TValue = never>(cb: TValue extends AnyTransformable ? 'Transformable values are invalid, use the actual value instead.' : UnbrandedTransformer<TValue>): Transformer<NoInfer<TValue>>;
34
36
 
35
37
  type TransformersRegistry = ReturnType<typeof createTransformersRegistry>;
@@ -59,4 +61,125 @@ type ResolvedProps = Record<string, unknown>;
59
61
  type PropsResolver = ReturnType<typeof createPropsResolver>;
60
62
  declare function createPropsResolver({ transformers, schema: initialSchema, onPropResolve }: CreatePropResolverArgs): ({ props, schema, signal }: ResolveArgs) => Promise<ResolvedProps>;
61
63
 
62
- export { type PropsResolver, createPropsResolver, createTransformer, createTransformersRegistry, init, settingsTransformersRegistry, styleTransformersRegistry };
64
+ declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">) => void;
65
+ declare const endDragElementFromPanel: () => void;
66
+
67
+ type DomRenderer = {
68
+ register: TwingArrayLoader['setTemplate'];
69
+ render: TwingEnvironment['render'];
70
+ };
71
+
72
+ type LegacyWindow = Window & {
73
+ elementor: {
74
+ createBackboneElementsCollection: (children: unknown) => BackboneCollection<ElementModel>;
75
+ modules: {
76
+ elements: {
77
+ types: {
78
+ Widget: typeof ElementType;
79
+ };
80
+ views: {
81
+ Widget: typeof ElementView;
82
+ };
83
+ };
84
+ };
85
+ elementsManager: {
86
+ registerElementType: (type: ElementType) => void;
87
+ };
88
+ $preview: [
89
+ {
90
+ contentWindow: {
91
+ dispatchEvent: (event: Event) => void;
92
+ };
93
+ }
94
+ ];
95
+ };
96
+ };
97
+ declare class ElementType {
98
+ getType(): string;
99
+ getView(): typeof ElementView;
100
+ }
101
+ declare class ElementView {
102
+ $el: JQueryElement;
103
+ model: BackboneModel<ElementModel>;
104
+ collection: BackboneCollection<ElementModel>;
105
+ children: {
106
+ length: number;
107
+ findByIndex: (index: number) => ElementView;
108
+ };
109
+ constructor(...args: unknown[]);
110
+ onRender(...args: unknown[]): void;
111
+ onDestroy(...args: unknown[]): void;
112
+ attributes(): Record<string, unknown>;
113
+ behaviors(): Record<string, unknown>;
114
+ getDomElement(): JQueryElement;
115
+ getHandlesOverlay(): JQueryElement | null;
116
+ getContextMenuGroups(): ContextMenuGroup[];
117
+ /**
118
+ * Templated view methods:
119
+ */
120
+ getTemplateType(): string;
121
+ renderOnChange(): void;
122
+ render(): void;
123
+ _renderTemplate(): void;
124
+ _renderChildren(): void;
125
+ attachBuffer(collectionView: this, buffer: DocumentFragment): void;
126
+ triggerMethod(method: string, ...args: unknown[]): void;
127
+ bindUIElements(): void;
128
+ _ensureViewIsIntact(): void;
129
+ _isRendering: boolean;
130
+ resetChildViewContainer(): void;
131
+ isRendered: boolean;
132
+ options?: {
133
+ model: BackboneModel<ElementModel>;
134
+ };
135
+ ui(): Record<string, unknown>;
136
+ events(): Record<string, unknown>;
137
+ }
138
+ type JQueryElement = {
139
+ find: (selector: string) => JQueryElement;
140
+ html: (html: string) => void;
141
+ get: (index: number) => HTMLElement;
142
+ };
143
+ type BackboneModel<Model extends object> = {
144
+ get: <T extends keyof Model>(key: T) => Model[T];
145
+ set: <T extends keyof Model>(key: T, value: Model[T]) => void;
146
+ toJSON: () => ToJSON<Model>;
147
+ };
148
+ type BackboneCollection<Model extends object> = {
149
+ models: BackboneModel<Model>[];
150
+ forEach: (callback: (model: BackboneModel<Model>) => void) => void;
151
+ };
152
+ type ElementModel = {
153
+ id: string;
154
+ settings: BackboneModel<Props>;
155
+ editor_settings: Record<string, unknown>;
156
+ widgetType: string;
157
+ editSettings?: BackboneModel<{
158
+ inactive?: boolean;
159
+ }>;
160
+ elements?: BackboneCollection<ElementModel>;
161
+ };
162
+ type ToJSON<T> = {
163
+ [K in keyof T]: T[K] extends BackboneModel<infer M> ? ToJSON<M> : T[K];
164
+ };
165
+ type ContextMenuGroup = {
166
+ name: string;
167
+ actions: unknown[];
168
+ };
169
+
170
+ type CreateTemplatedElementTypeOptions = {
171
+ type: string;
172
+ renderer: DomRenderer;
173
+ element: TemplatedElementConfig;
174
+ };
175
+ type TemplatedElementConfig = Required<Pick<V1ElementConfig, 'twig_templates' | 'twig_main_template' | 'atomic_props_schema' | 'base_styles_dictionary'>>;
176
+ declare function createTemplatedElementView({ type, renderer, element, }: CreateTemplatedElementTypeOptions): typeof ElementView;
177
+
178
+ type ElementLegacyType = {
179
+ [key: string]: (options: CreateTemplatedElementTypeOptions) => typeof ElementType;
180
+ };
181
+ declare function registerElementType(type: string, elementTypeGenerator: ElementLegacyType[keyof ElementLegacyType]): void;
182
+
183
+ declare function getCanvasIframeDocument(): Document | null | undefined;
184
+
185
+ export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };
package/dist/index.d.ts CHANGED
@@ -1,17 +1,10 @@
1
1
  import * as _elementor_editor_props from '@elementor/editor-props';
2
2
  import { AnyTransformable, PropTypeKey, PropsSchema, Props } from '@elementor/editor-props';
3
+ import { V1ElementModelProps, V1ElementConfig } from '@elementor/editor-elements';
4
+ import { TwingArrayLoader, TwingEnvironment } from '@elementor/twing';
3
5
 
4
6
  declare function init(): void;
5
7
 
6
- type UnbrandedTransformer<TValue> = (value: TValue, options: {
7
- key: string;
8
- signal?: AbortSignal;
9
- }) => unknown;
10
- type Transformer<TValue> = UnbrandedTransformer<TValue> & {
11
- __transformer: true;
12
- };
13
- type AnyTransformer = Transformer<any>;
14
-
15
8
  declare const styleTransformersRegistry: {
16
9
  register(type: _elementor_editor_props.PropTypeKey, transformer: AnyTransformer): /*elided*/ any;
17
10
  registerFallback(transformer: AnyTransformer): /*elided*/ any;
@@ -30,6 +23,15 @@ declare const settingsTransformersRegistry: {
30
23
  };
31
24
  };
32
25
 
26
+ type UnbrandedTransformer<TValue> = (value: TValue, options: {
27
+ key: string;
28
+ signal?: AbortSignal;
29
+ }) => unknown;
30
+ type Transformer<TValue> = UnbrandedTransformer<TValue> & {
31
+ __transformer: true;
32
+ };
33
+ type AnyTransformer = Transformer<any>;
34
+
33
35
  declare function createTransformer<TValue = never>(cb: TValue extends AnyTransformable ? 'Transformable values are invalid, use the actual value instead.' : UnbrandedTransformer<TValue>): Transformer<NoInfer<TValue>>;
34
36
 
35
37
  type TransformersRegistry = ReturnType<typeof createTransformersRegistry>;
@@ -59,4 +61,125 @@ type ResolvedProps = Record<string, unknown>;
59
61
  type PropsResolver = ReturnType<typeof createPropsResolver>;
60
62
  declare function createPropsResolver({ transformers, schema: initialSchema, onPropResolve }: CreatePropResolverArgs): ({ props, schema, signal }: ResolveArgs) => Promise<ResolvedProps>;
61
63
 
62
- export { type PropsResolver, createPropsResolver, createTransformer, createTransformersRegistry, init, settingsTransformersRegistry, styleTransformersRegistry };
64
+ declare const startDragElementFromPanel: (props: Omit<V1ElementModelProps, "id">) => void;
65
+ declare const endDragElementFromPanel: () => void;
66
+
67
+ type DomRenderer = {
68
+ register: TwingArrayLoader['setTemplate'];
69
+ render: TwingEnvironment['render'];
70
+ };
71
+
72
+ type LegacyWindow = Window & {
73
+ elementor: {
74
+ createBackboneElementsCollection: (children: unknown) => BackboneCollection<ElementModel>;
75
+ modules: {
76
+ elements: {
77
+ types: {
78
+ Widget: typeof ElementType;
79
+ };
80
+ views: {
81
+ Widget: typeof ElementView;
82
+ };
83
+ };
84
+ };
85
+ elementsManager: {
86
+ registerElementType: (type: ElementType) => void;
87
+ };
88
+ $preview: [
89
+ {
90
+ contentWindow: {
91
+ dispatchEvent: (event: Event) => void;
92
+ };
93
+ }
94
+ ];
95
+ };
96
+ };
97
+ declare class ElementType {
98
+ getType(): string;
99
+ getView(): typeof ElementView;
100
+ }
101
+ declare class ElementView {
102
+ $el: JQueryElement;
103
+ model: BackboneModel<ElementModel>;
104
+ collection: BackboneCollection<ElementModel>;
105
+ children: {
106
+ length: number;
107
+ findByIndex: (index: number) => ElementView;
108
+ };
109
+ constructor(...args: unknown[]);
110
+ onRender(...args: unknown[]): void;
111
+ onDestroy(...args: unknown[]): void;
112
+ attributes(): Record<string, unknown>;
113
+ behaviors(): Record<string, unknown>;
114
+ getDomElement(): JQueryElement;
115
+ getHandlesOverlay(): JQueryElement | null;
116
+ getContextMenuGroups(): ContextMenuGroup[];
117
+ /**
118
+ * Templated view methods:
119
+ */
120
+ getTemplateType(): string;
121
+ renderOnChange(): void;
122
+ render(): void;
123
+ _renderTemplate(): void;
124
+ _renderChildren(): void;
125
+ attachBuffer(collectionView: this, buffer: DocumentFragment): void;
126
+ triggerMethod(method: string, ...args: unknown[]): void;
127
+ bindUIElements(): void;
128
+ _ensureViewIsIntact(): void;
129
+ _isRendering: boolean;
130
+ resetChildViewContainer(): void;
131
+ isRendered: boolean;
132
+ options?: {
133
+ model: BackboneModel<ElementModel>;
134
+ };
135
+ ui(): Record<string, unknown>;
136
+ events(): Record<string, unknown>;
137
+ }
138
+ type JQueryElement = {
139
+ find: (selector: string) => JQueryElement;
140
+ html: (html: string) => void;
141
+ get: (index: number) => HTMLElement;
142
+ };
143
+ type BackboneModel<Model extends object> = {
144
+ get: <T extends keyof Model>(key: T) => Model[T];
145
+ set: <T extends keyof Model>(key: T, value: Model[T]) => void;
146
+ toJSON: () => ToJSON<Model>;
147
+ };
148
+ type BackboneCollection<Model extends object> = {
149
+ models: BackboneModel<Model>[];
150
+ forEach: (callback: (model: BackboneModel<Model>) => void) => void;
151
+ };
152
+ type ElementModel = {
153
+ id: string;
154
+ settings: BackboneModel<Props>;
155
+ editor_settings: Record<string, unknown>;
156
+ widgetType: string;
157
+ editSettings?: BackboneModel<{
158
+ inactive?: boolean;
159
+ }>;
160
+ elements?: BackboneCollection<ElementModel>;
161
+ };
162
+ type ToJSON<T> = {
163
+ [K in keyof T]: T[K] extends BackboneModel<infer M> ? ToJSON<M> : T[K];
164
+ };
165
+ type ContextMenuGroup = {
166
+ name: string;
167
+ actions: unknown[];
168
+ };
169
+
170
+ type CreateTemplatedElementTypeOptions = {
171
+ type: string;
172
+ renderer: DomRenderer;
173
+ element: TemplatedElementConfig;
174
+ };
175
+ type TemplatedElementConfig = Required<Pick<V1ElementConfig, 'twig_templates' | 'twig_main_template' | 'atomic_props_schema' | 'base_styles_dictionary'>>;
176
+ declare function createTemplatedElementView({ type, renderer, element, }: CreateTemplatedElementTypeOptions): typeof ElementView;
177
+
178
+ type ElementLegacyType = {
179
+ [key: string]: (options: CreateTemplatedElementTypeOptions) => typeof ElementType;
180
+ };
181
+ declare function registerElementType(type: string, elementTypeGenerator: ElementLegacyType[keyof ElementLegacyType]): void;
182
+
183
+ declare function getCanvasIframeDocument(): Document | null | undefined;
184
+
185
+ export { type AnyTransformer, type BackboneModel, type CreateTemplatedElementTypeOptions, type ElementModel, ElementType, ElementView, type LegacyWindow, type PropsResolver, createPropsResolver, createTemplatedElementView, createTransformer, createTransformersRegistry, endDragElementFromPanel, getCanvasIframeDocument, init, registerElementType, settingsTransformersRegistry, startDragElementFromPanel, styleTransformersRegistry };