@elementor/editor-canvas 0.2.0 → 0.4.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.
Files changed (38) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/CHANGELOG.md +37 -0
  3. package/dist/index.js +152 -106
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +150 -104
  6. package/dist/index.mjs.map +1 -1
  7. package/package.json +9 -9
  8. package/src/__tests__/init-styles-renderer.test.ts +1 -1
  9. package/src/init-styles-renderer.ts +1 -1
  10. package/src/styles-renderer/__tests__/__mocks__/styles-schema.ts +733 -0
  11. package/src/styles-renderer/__tests__/index.test.ts +537 -72
  12. package/src/styles-renderer/get-styles-schema.ts +17 -0
  13. package/src/styles-renderer/multi-props.ts +26 -0
  14. package/src/styles-renderer/render.ts +10 -12
  15. package/src/styles-renderer/resolve.ts +99 -0
  16. package/src/styles-renderer/transformers/background-overlay-transformer.ts +3 -7
  17. package/src/styles-renderer/transformers/create-combine-array-transformer.ts +4 -15
  18. package/src/styles-renderer/transformers/create-corner-sizes-transformer.ts +33 -0
  19. package/src/styles-renderer/transformers/create-edge-sizes-transformer.ts +31 -0
  20. package/src/styles-renderer/transformers/gap-transformer.ts +20 -0
  21. package/src/styles-renderer/transformers/index.ts +19 -10
  22. package/src/styles-renderer/transformers/linked-dimensions-transformer.ts +13 -8
  23. package/src/styles-renderer/transformers/primitive-transformer.ts +7 -0
  24. package/src/styles-renderer/transformers/shadow-transformer.ts +5 -16
  25. package/src/styles-renderer/transformers/size-transformer.ts +3 -5
  26. package/src/styles-renderer/transformers/stroke-transformer.ts +3 -5
  27. package/src/styles-renderer/types.ts +3 -6
  28. package/src/styles-renderer/__tests__/__mocks__/style-definitions.ts +0 -171
  29. package/src/styles-renderer/transform.ts +0 -34
  30. package/src/styles-renderer/transformers/__tests__/background-overlay-transformer.test.ts +0 -46
  31. package/src/styles-renderer/transformers/__tests__/create-combine-array-transformer.test.ts +0 -61
  32. package/src/styles-renderer/transformers/__tests__/linked-dimensions-transformer.test.ts +0 -34
  33. package/src/styles-renderer/transformers/__tests__/shadow-transformer.test.ts +0 -127
  34. package/src/styles-renderer/transformers/__tests__/size-transformer.test.ts +0 -37
  35. package/src/styles-renderer/transformers/__tests__/stroke-transformer.test.ts +0 -59
  36. package/src/styles-renderer/transformers/border-radius-transformer.ts +0 -20
  37. package/src/styles-renderer/transformers/border-width-transformer.ts +0 -15
  38. package/src/styles-renderer/transformers/color-transformer.ts +0 -11
@@ -0,0 +1,26 @@
1
+ import { type Props, type PropValue } from '@elementor/editor-props';
2
+
3
+ export type MultiProps = {
4
+ '$$multi-props': true;
5
+ value: Props;
6
+ };
7
+
8
+ export const isMultiProps = ( propValue: PropValue ): propValue is MultiProps => {
9
+ return (
10
+ !! propValue &&
11
+ typeof propValue === 'object' &&
12
+ '$$multi-props' in propValue &&
13
+ propValue[ '$$multi-props' ] === true
14
+ );
15
+ };
16
+
17
+ export const createMultiPropsValue = ( props: Props ): MultiProps => {
18
+ return {
19
+ '$$multi-props': true,
20
+ value: props,
21
+ };
22
+ };
23
+
24
+ export const getMultiPropsValue = ( multiProps: MultiProps ): Props => {
25
+ return multiProps.value;
26
+ };
@@ -3,7 +3,8 @@ import { type Breakpoint, type BreakpointId, type BreakpointsMap } from '@elemen
3
3
  import { type StyleDefinition, type StyleVariant } from '@elementor/editor-styles';
4
4
  import { ensureError } from '@elementor/utils';
5
5
 
6
- import { transformValue } from './transform';
6
+ import { getStylesSchema } from './get-styles-schema';
7
+ import { resolve } from './resolve';
7
8
  import { type TransformersMap } from './types';
8
9
 
9
10
  type RenderParams = {
@@ -81,21 +82,18 @@ function variantToStyleDeclaration(
81
82
  return styleDeclaration;
82
83
  }
83
84
 
84
- function propsToCss( props: Props, transformers: TransformersMap ) {
85
- return Object.entries( props )
86
- .reduce< string[] >( ( acc, [ cssProp, cssValue ] ) => {
87
- const prop = camelCaseToDash( cssProp );
88
- const value = transformValue( cssValue, transformers );
85
+ function propsToCss( props: Props, transformers: TransformersMap ): string {
86
+ const schema = getStylesSchema();
89
87
 
90
- acc.push( prop + ':' + value );
88
+ const transformed = resolve( { props, schema, transformers } );
89
+
90
+ return Object.entries( transformed )
91
+ .reduce< string[] >( ( acc, [ propName, propValue ] ) => {
92
+ acc.push( propName + ':' + propValue + ';' );
91
93
 
92
94
  return acc;
93
95
  }, [] )
94
- .join( ';' );
95
- }
96
-
97
- function camelCaseToDash( str: string ) {
98
- return str.replace( /([a-zA-Z])(?=[A-Z])/g, '$1-' ).toLowerCase();
96
+ .join( '' );
99
97
  }
100
98
 
101
99
  function wrapWithMediaQuery( breakpoints: BreakpointsMap, breakpoint: BreakpointId, css: string ) {
@@ -0,0 +1,99 @@
1
+ import { type PropsSchema } from '@elementor/editor-elements';
2
+ import { isTransformable, type PropKey, type Props, type PropType, type PropValue } from '@elementor/editor-props';
3
+
4
+ import { getMultiPropsValue, isMultiProps } from './multi-props';
5
+ import { type TransformersMap } from './types';
6
+
7
+ const TRANSFORM_DEPTH_LIMIT = 3;
8
+
9
+ type ResolveArgs = {
10
+ props: Props;
11
+ schema: PropsSchema;
12
+ transformers: TransformersMap;
13
+ };
14
+
15
+ export function resolve( { props, schema, transformers }: ResolveArgs ) {
16
+ const resolved: Props = {};
17
+
18
+ Object.entries( schema ).forEach( ( [ key, propType ] ) => {
19
+ const value = props[ key ] ?? propType.default;
20
+
21
+ const transformed = transform( value, key, propType, transformers );
22
+
23
+ if ( transformed === null ) {
24
+ return;
25
+ }
26
+
27
+ if ( isMultiProps( transformed ) ) {
28
+ Object.assign( resolved, getMultiPropsValue( transformed ) );
29
+ return;
30
+ }
31
+
32
+ resolved[ key ] = transformed;
33
+ } );
34
+
35
+ return resolved;
36
+ }
37
+
38
+ function transform(
39
+ value: PropValue,
40
+ propKey: PropKey,
41
+ propType: PropType,
42
+ transformers: TransformersMap,
43
+ depth: number = 0
44
+ ) {
45
+ if ( ! value && value !== 0 ) {
46
+ return null;
47
+ }
48
+
49
+ if ( ! isTransformable( value ) ) {
50
+ return value;
51
+ }
52
+
53
+ if ( depth > TRANSFORM_DEPTH_LIMIT ) {
54
+ return null;
55
+ }
56
+
57
+ if ( value.disabled === true ) {
58
+ return null;
59
+ }
60
+
61
+ if ( propType.kind === 'union' ) {
62
+ propType = propType.prop_types[ value.$$type ];
63
+
64
+ if ( ! propType ) {
65
+ return null;
66
+ }
67
+ }
68
+
69
+ // Warning: This variable is loosely-typed - use with caution.
70
+ let resolvedValue = value.value;
71
+
72
+ if ( propType.kind === 'object' ) {
73
+ resolvedValue = resolve( {
74
+ transformers,
75
+ props: resolvedValue,
76
+ schema: propType.shape,
77
+ } );
78
+ }
79
+
80
+ if ( propType.kind === 'array' ) {
81
+ resolvedValue = resolvedValue.map( ( item: PropValue ) =>
82
+ transform( item, propKey, propType.item_prop_type, transformers, depth )
83
+ );
84
+ }
85
+
86
+ const transformer = transformers[ value.$$type ];
87
+
88
+ if ( ! transformer ) {
89
+ return null;
90
+ }
91
+
92
+ try {
93
+ const transformed = transformer( resolvedValue, propKey );
94
+
95
+ return transform( transformed, propKey, propType, transformers, depth + 1 );
96
+ } catch {
97
+ return null;
98
+ }
99
+ }
@@ -1,13 +1,9 @@
1
- import { colorGradientPropTypeUtil } from '@elementor/editor-props';
1
+ import { type ColorGradientPropValue } from '@elementor/editor-props';
2
2
 
3
3
  import { type Transformer } from '../types';
4
4
 
5
- const backgroundOverlayTransformer: Transformer = ( propValue, { transform } ) => {
6
- if ( colorGradientPropTypeUtil.isValid( propValue ) ) {
7
- return `linear-gradient( ${ [ transform( propValue.value.color ) ] }, ${ [
8
- transform( propValue.value.color ),
9
- ] } )`;
10
- }
5
+ const backgroundOverlayTransformer: Transformer< ColorGradientPropValue[ 'value' ] > = ( value ) => {
6
+ return `linear-gradient(${ value.color },${ value.color })`;
11
7
  };
12
8
 
13
9
  export default backgroundOverlayTransformer;
@@ -1,20 +1,9 @@
1
- import { z } from '@elementor/schema';
2
-
3
1
  import { type Transformer } from '../types';
4
2
 
5
- export const schema = z.object( {
6
- $$type: z.string(),
7
- value: z.array( z.any() ),
8
- } );
9
-
10
- const createCombineArrayTransformer =
11
- ( delimiter: string ): Transformer =>
12
- ( propValue, { transform } ) => {
13
- const { success, data } = schema.safeParse( propValue );
3
+ type CreateCombineArrayTransformer = ( delimiter: string ) => Transformer< Array< string | number > >;
14
4
 
15
- if ( success ) {
16
- return data.value.map( ( item ) => transform( item ) ).join( delimiter );
17
- }
18
- };
5
+ const createCombineArrayTransformer: CreateCombineArrayTransformer = ( delimiter ) => {
6
+ return ( value ) => value.filter( Boolean ).join( delimiter );
7
+ };
19
8
 
20
9
  export default createCombineArrayTransformer;
@@ -0,0 +1,33 @@
1
+ import { type Props, type PropValue } from '@elementor/editor-props';
2
+
3
+ import { createMultiPropsValue } from '../multi-props';
4
+ import { type Transformer } from '../types';
5
+
6
+ export type CornerSizes = {
7
+ top?: PropValue;
8
+ right?: PropValue;
9
+ bottom?: PropValue;
10
+ left?: PropValue;
11
+ };
12
+
13
+ export type CreateCornerSizesTransformer = (
14
+ keyGenerator: ( cornerKey: string ) => string
15
+ ) => Transformer< CornerSizes >;
16
+
17
+ const validCorners = [ 'top-left', 'top-right', 'bottom-left', 'bottom-right' ];
18
+
19
+ const createCornerSizesTransformer: CreateCornerSizesTransformer = ( keyGenerator ) => ( value ) => {
20
+ const props = Object.entries( value ).reduce< Props >( ( acc, [ corner, cornerValue ] ) => {
21
+ if ( validCorners.includes( corner ) ) {
22
+ const key = keyGenerator( corner );
23
+
24
+ acc[ key ] = cornerValue;
25
+ }
26
+
27
+ return acc;
28
+ }, {} );
29
+
30
+ return createMultiPropsValue( props );
31
+ };
32
+
33
+ export default createCornerSizesTransformer;
@@ -0,0 +1,31 @@
1
+ import { type Props, type PropValue } from '@elementor/editor-props';
2
+
3
+ import { createMultiPropsValue } from '../multi-props';
4
+ import { type Transformer } from '../types';
5
+
6
+ export type EdgeSizes = {
7
+ top?: PropValue;
8
+ right?: PropValue;
9
+ bottom?: PropValue;
10
+ left?: PropValue;
11
+ };
12
+
13
+ export type CreateEdgeSizesTransformer = ( keyGenerator: ( edgeKey: string ) => string ) => Transformer< EdgeSizes >;
14
+
15
+ const validEdges = [ 'top', 'right', 'bottom', 'left' ];
16
+
17
+ const createEdgeSizesTransformer: CreateEdgeSizesTransformer = ( keyGenerator ) => ( value ) => {
18
+ const props = Object.entries( value ).reduce< Props >( ( acc, [ edge, edgeValue ] ) => {
19
+ if ( validEdges.includes( edge ) ) {
20
+ const key = keyGenerator( edge );
21
+
22
+ acc[ key ] = edgeValue;
23
+ }
24
+
25
+ return acc;
26
+ }, {} );
27
+
28
+ return createMultiPropsValue( props );
29
+ };
30
+
31
+ export default createEdgeSizesTransformer;
@@ -0,0 +1,20 @@
1
+ import { type GapPropValue, type Props } from '@elementor/editor-props';
2
+
3
+ import { createMultiPropsValue } from '../multi-props';
4
+ import { type Transformer } from '../types';
5
+
6
+ const validKeys = [ 'row', 'column' ];
7
+
8
+ const gapTransformer: Transformer< GapPropValue[ 'value' ] > = ( value, key ) => {
9
+ const parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {
10
+ if ( dimensionValue && validKeys.includes( dimensionKey ) ) {
11
+ acc[ `${ dimensionKey }-${ key }` ] = dimensionValue;
12
+ }
13
+
14
+ return acc;
15
+ }, {} );
16
+
17
+ return createMultiPropsValue( parsed );
18
+ };
19
+
20
+ export default gapTransformer;
@@ -1,22 +1,31 @@
1
+ import { type TransformersMap } from '../types';
1
2
  import { default as backgroundOverlay } from './background-overlay-transformer';
2
- import { default as borderRadius } from './border-radius-transformer';
3
- import { default as borderWidth } from './border-width-transformer';
4
- import { default as color } from './color-transformer';
5
3
  import { default as createCombineArrayTransformer } from './create-combine-array-transformer';
4
+ import createCornerSizesTransformer from './create-corner-sizes-transformer';
5
+ import createEdgeSizesTransformer from './create-edge-sizes-transformer';
6
+ import { default as gap } from './gap-transformer';
6
7
  import { default as linkedDimensions } from './linked-dimensions-transformer';
8
+ import { primitiveTransformer } from './primitive-transformer';
7
9
  import { default as shadow } from './shadow-transformer';
8
10
  import { default as size } from './size-transformer';
9
11
  import { default as stroke } from './stroke-transformer';
10
12
 
11
13
  export default {
12
- color,
13
14
  size,
14
15
  shadow,
15
- 'border-radius': borderRadius,
16
- 'border-width': borderWidth,
17
- 'box-shadow': createCombineArrayTransformer( ', ' ),
18
- 'background-image': createCombineArrayTransformer( ', ' ),
19
- 'linked-dimensions': linkedDimensions,
20
16
  stroke,
17
+ gap,
18
+
19
+ color: primitiveTransformer,
20
+ number: primitiveTransformer,
21
+ string: primitiveTransformer,
22
+
23
+ 'linked-dimensions': linkedDimensions,
21
24
  'background-overlay': backgroundOverlay,
22
- };
25
+
26
+ 'box-shadow': createCombineArrayTransformer( ',' ),
27
+ 'background-image': createCombineArrayTransformer( ',' ),
28
+
29
+ 'border-width': createEdgeSizesTransformer( ( edgeKey ) => `border-${ edgeKey }-width` ),
30
+ 'border-radius': createCornerSizesTransformer( ( cornerKey ) => `border-${ cornerKey }-radius` ),
31
+ } satisfies TransformersMap;
@@ -1,15 +1,20 @@
1
- import { linkedDimensionsPropTypeUtil } from '@elementor/editor-props';
1
+ import { type LinkedDimensionsPropValue, type Props } from '@elementor/editor-props';
2
2
 
3
+ import { createMultiPropsValue } from '../multi-props';
3
4
  import { type Transformer } from '../types';
4
5
 
5
- const linkedDimensionsTransformer: Transformer = ( propValue, { transform } ) => {
6
- if ( linkedDimensionsPropTypeUtil.isValid( propValue ) ) {
7
- const { top, right, bottom, left } = propValue.value || {};
6
+ const validKeys = [ 'top', 'right', 'bottom', 'left' ];
8
7
 
9
- return `${ transform( top ) || 'unset' } ${ transform( right ) || 'unset' } ${
10
- transform( bottom ) || 'unset'
11
- } ${ transform( left ) || 'unset' }`;
12
- }
8
+ const linkedDimensionsTransformer: Transformer< LinkedDimensionsPropValue[ 'value' ] > = ( value, key ) => {
9
+ const parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {
10
+ if ( dimensionValue && validKeys.includes( dimensionKey ) ) {
11
+ acc[ `${ key }-${ dimensionKey }` ] = dimensionValue;
12
+ }
13
+
14
+ return acc;
15
+ }, {} );
16
+
17
+ return createMultiPropsValue( parsed );
13
18
  };
14
19
 
15
20
  export default linkedDimensionsTransformer;
@@ -0,0 +1,7 @@
1
+ import { type Transformer } from '../types';
2
+
3
+ type Primitive = string | number | boolean;
4
+
5
+ export const primitiveTransformer: Transformer< Primitive > = ( value ) => {
6
+ return value;
7
+ };
@@ -1,22 +1,11 @@
1
- import { shadowPropTypeUtil } from '@elementor/editor-props';
1
+ import { type ShadowPropValue } from '@elementor/editor-props';
2
2
 
3
3
  import { type Transformer } from '../types';
4
4
 
5
- const shadowTransformer: Transformer = ( propValue, { transform } ) => {
6
- if ( shadowPropTypeUtil.isValid( propValue ) ) {
7
- const { position, hOffset, vOffset, blur, spread, color } = propValue.value || {};
8
-
9
- return [
10
- transform( hOffset ),
11
- transform( vOffset ),
12
- transform( blur ),
13
- transform( spread ),
14
- transform( color ),
15
- position,
16
- ]
17
- .filter( Boolean )
18
- .join( ' ' );
19
- }
5
+ const shadowTransformer: Transformer< ShadowPropValue[ 'value' ] > = ( value ) => {
6
+ return [ value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position ]
7
+ .filter( Boolean )
8
+ .join( ' ' );
20
9
  };
21
10
 
22
11
  export default shadowTransformer;
@@ -1,11 +1,9 @@
1
- import { sizePropTypeUtil } from '@elementor/editor-props';
1
+ import { type SizePropValue } from '@elementor/editor-props';
2
2
 
3
3
  import { type Transformer } from '../types';
4
4
 
5
- const sizeTransformer: Transformer = ( propValue ) => {
6
- if ( sizePropTypeUtil.isValid( propValue ) ) {
7
- return propValue.value && propValue.value.size + propValue.value.unit;
8
- }
5
+ const sizeTransformer: Transformer< SizePropValue[ 'value' ] > = ( value ) => {
6
+ return `${ value.size }${ value.unit }`;
9
7
  };
10
8
 
11
9
  export default sizeTransformer;
@@ -1,11 +1,9 @@
1
- import { strokePropTypeUtil } from '@elementor/editor-props';
1
+ import { type StrokePropValue } from '@elementor/editor-props';
2
2
 
3
3
  import { type Transformer } from '../types';
4
4
 
5
- const strokeTransformer: Transformer = ( propValue, { transform } ) => {
6
- if ( strokePropTypeUtil.isValid( propValue ) ) {
7
- return `${ transform( propValue.value?.width ) } ${ transform( propValue.value?.color ) }`;
8
- }
5
+ const strokeTransformer: Transformer< StrokePropValue[ 'value' ] > = ( value ) => {
6
+ return `${ value.width } ${ value.color }`;
9
7
  };
10
8
 
11
9
  export default strokeTransformer;
@@ -1,9 +1,6 @@
1
1
  import { type PropValue } from '@elementor/editor-props';
2
2
 
3
- type TransformerOptions = {
4
- transform: ( value: PropValue ) => PropValue;
5
- };
3
+ export type Transformer< TValue extends PropValue > = ( value: TValue, key: string ) => PropValue;
6
4
 
7
- export type Transformer = ( value: PropValue, options: TransformerOptions ) => PropValue;
8
-
9
- export type TransformersMap = Record< string, Transformer >;
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ export type TransformersMap = Record< string, Transformer< any > >;
@@ -1,171 +0,0 @@
1
- import { type BreakpointsMap } from '@elementor/editor-responsive';
2
- import { type StyleDefinition } from '@elementor/editor-styles';
3
-
4
- export const singleVariantStyleMock = {
5
- id: `single-variants-style`,
6
- type: 'class',
7
- variants: [
8
- {
9
- meta: {
10
- breakpoint: null,
11
- state: null,
12
- },
13
- props: {
14
- fontSize: '24px',
15
- fontWeight: 'bold',
16
- },
17
- },
18
- ],
19
- } as unknown as StyleDefinition;
20
-
21
- export const breakpointsStyleMock = {
22
- id: `breakpoint-style`,
23
- type: 'class',
24
- variants: [
25
- {
26
- meta: {
27
- breakpoint: null,
28
- state: null,
29
- },
30
- props: {
31
- padding: '24px',
32
- },
33
- },
34
- {
35
- meta: {
36
- breakpoint: 'mobile',
37
- state: null,
38
- },
39
- props: {
40
- padding: '4px',
41
- },
42
- },
43
- {
44
- meta: {
45
- breakpoint: 'tablet',
46
- state: null,
47
- },
48
- props: {
49
- padding: '16px',
50
- },
51
- },
52
- ],
53
- } as unknown as StyleDefinition;
54
-
55
- export const statesStyleMock = {
56
- id: `breakpoint-style`,
57
- type: 'class',
58
- variants: [
59
- {
60
- meta: {
61
- breakpoint: null,
62
- state: null,
63
- },
64
- props: {
65
- fontWeight: 'normal',
66
- },
67
- },
68
- {
69
- meta: {
70
- breakpoint: null,
71
- state: 'hover',
72
- },
73
- props: {
74
- fontWeight: 'bold',
75
- },
76
- },
77
- {
78
- meta: {
79
- breakpoint: null,
80
- state: 'focus',
81
- },
82
- props: {
83
- color: 'red',
84
- },
85
- },
86
- ],
87
- } as unknown as StyleDefinition;
88
-
89
- export const transformableStyleMock = {
90
- id: `transformable-style`,
91
- type: 'class',
92
- variants: [
93
- {
94
- meta: {
95
- breakpoint: null,
96
- state: null,
97
- },
98
- props: {
99
- fontSize: {
100
- $$type: 'size',
101
- value: {
102
- unit: 'px',
103
- size: 24,
104
- },
105
- },
106
- },
107
- },
108
- ],
109
- } as unknown as StyleDefinition;
110
-
111
- export const multiVariantsStyleMock = {
112
- id: `multi-variant-style`,
113
- type: 'class',
114
- variants: [
115
- {
116
- meta: {
117
- breakpoint: null,
118
- state: null,
119
- },
120
- props: {
121
- fontSize: {
122
- $$type: 'size',
123
- value: {
124
- unit: 'px',
125
- size: 24,
126
- },
127
- },
128
- fontWeight: 'normal',
129
- },
130
- },
131
- {
132
- meta: {
133
- breakpoint: 'mobile',
134
- state: null,
135
- },
136
- props: {
137
- fontSize: {
138
- $$type: 'size',
139
- value: {
140
- unit: 'px',
141
- size: 20,
142
- },
143
- },
144
- },
145
- },
146
- {
147
- meta: {
148
- breakpoint: null,
149
- state: 'hover',
150
- },
151
- props: {
152
- fontWeight: 'bold',
153
- },
154
- },
155
- ],
156
- } as unknown as StyleDefinition;
157
-
158
- export const mockBreakpoints = {
159
- tablet: {
160
- id: 'tablet',
161
- width: 992,
162
- label: 'Tablet Portrait',
163
- type: 'max-width',
164
- },
165
- mobile: {
166
- id: 'mobile',
167
- width: 768,
168
- label: 'Mobile Portrait',
169
- type: 'max-width',
170
- },
171
- } as BreakpointsMap;
@@ -1,34 +0,0 @@
1
- import { isTransformable, type PropValue } from '@elementor/editor-props';
2
-
3
- import { type TransformersMap } from './types';
4
-
5
- const FALLBACK_VALUE = 'unset';
6
-
7
- export function transformValue( value: PropValue | undefined, transformers: TransformersMap ): PropValue {
8
- if ( ! isTransformable( value ) ) {
9
- return value;
10
- }
11
-
12
- const transformer = transformers[ value.$$type ];
13
-
14
- if ( ! transformer ) {
15
- // eslint-disable-next-line no-console
16
- console.error( `Transformer not found for prop type '${ value.$$type }'` );
17
-
18
- return FALLBACK_VALUE;
19
- }
20
-
21
- const transformedValue = transformer( value, {
22
- transform: ( v ) => transformValue( v, transformers ),
23
- } );
24
-
25
- if ( transformedValue === undefined ) {
26
- // eslint-disable-next-line no-console
27
- console.error( `Transformer '${ value.$$type }' received unsupported value` );
28
-
29
- return FALLBACK_VALUE;
30
- }
31
-
32
- // Transform recursively to support transformers that return transformable values.
33
- return transformValue( transformedValue, transformers );
34
- }